Updating to 60.0.3089.0 (#47)

diff --git a/src/base/BUILD.gn b/src/base/BUILD.gn
index 43897be..cf3d305 100644
--- a/src/base/BUILD.gn
+++ b/src/base/BUILD.gn
@@ -855,6 +855,7 @@
     "task_scheduler/task_tracker_posix.h",
     "task_scheduler/task_traits.cc",
     "task_scheduler/task_traits.h",
+    "task_scheduler/task_traits_details.h",
     "template_util.h",
     "test/malloc_wrapper.h",
     "third_party/dmg_fp/dmg_fp.h",
@@ -1106,6 +1107,10 @@
     }
   }
 
+  if (!is_mac && is_posix) {
+    sources += [ "memory/shared_memory_handle_posix.cc" ]
+  }
+
   all_dependent_configs = []
   defines = []
   data = []
@@ -1130,8 +1135,11 @@
     ":debugging_flags",
   ]
 
-  # Needed for <atomic> if using newer C++ library than sysroot
-  if (!use_sysroot && (is_android || (is_linux && !is_chromecast))) {
+  # Needed for <atomic> if using newer C++ library than sysroot, except if
+  # building inside the cros_sdk environment - use host_toolchain as a
+  # more robust check for this.
+  if (!use_sysroot && (is_android || (is_linux && !is_chromecast)) &&
+      host_toolchain != "//build/toolchain/cros:host") {
     libs = [ "atomic" ]
   }
 
@@ -2116,6 +2124,7 @@
     "task_scheduler/task_scheduler_impl_unittest.cc",
     "task_scheduler/task_tracker_posix_unittest.cc",
     "task_scheduler/task_tracker_unittest.cc",
+    "task_scheduler/task_traits_unittest.cc",
     "task_scheduler/task_unittest.cc",
     "task_scheduler/test_task_factory.cc",
     "task_scheduler/test_task_factory.h",
@@ -2394,6 +2403,7 @@
       "memory/ref_counted_unittest.nc",
       "memory/weak_ptr_unittest.nc",
       "metrics/histogram_unittest.nc",
+      "task_scheduler/task_traits_unittest.nc",
     ]
 
     deps = [
@@ -2586,6 +2596,7 @@
       "//third_party/android_support_test_runner:exposed_instrumentation_api_publish_java",
       "//third_party/android_support_test_runner:runner_java",
       "//third_party/android_tools:android_support_chromium_java",
+      "//third_party/android_tools:android_support_compat_java",
       "//third_party/hamcrest:hamcrest_core_java",
       "//third_party/junit",
     ]
diff --git a/src/base/allocator/BUILD.gn b/src/base/allocator/BUILD.gn
index ac53481..6d5484f 100644
--- a/src/base/allocator/BUILD.gn
+++ b/src/base/allocator/BUILD.gn
@@ -161,18 +161,19 @@
       #"$tcmalloc_dir/src/debugallocation.cc",
       "$tcmalloc_dir/src/free_list.cc",
       "$tcmalloc_dir/src/free_list.h",
+      "$tcmalloc_dir/src/gperftools/heap-profiler.h",
+      "$tcmalloc_dir/src/gperftools/malloc_extension.h",
+      "$tcmalloc_dir/src/gperftools/malloc_hook.h",
+      "$tcmalloc_dir/src/gperftools/stacktrace.h",
       "$tcmalloc_dir/src/heap-profile-table.cc",
       "$tcmalloc_dir/src/heap-profile-table.h",
       "$tcmalloc_dir/src/heap-profiler.cc",
-      "$tcmalloc_dir/src/heap-profiler.h",
       "$tcmalloc_dir/src/internal_logging.cc",
       "$tcmalloc_dir/src/internal_logging.h",
       "$tcmalloc_dir/src/linked_list.h",
       "$tcmalloc_dir/src/malloc_extension.cc",
-      "$tcmalloc_dir/src/malloc_extension.h",
       "$tcmalloc_dir/src/malloc_hook-inl.h",
       "$tcmalloc_dir/src/malloc_hook.cc",
-      "$tcmalloc_dir/src/malloc_hook.h",
       "$tcmalloc_dir/src/maybe_threads.cc",
       "$tcmalloc_dir/src/maybe_threads.h",
       "$tcmalloc_dir/src/memory_region_map.cc",
@@ -188,7 +189,6 @@
       "$tcmalloc_dir/src/stack_trace_table.cc",
       "$tcmalloc_dir/src/stack_trace_table.h",
       "$tcmalloc_dir/src/stacktrace.cc",
-      "$tcmalloc_dir/src/stacktrace.h",
       "$tcmalloc_dir/src/static_vars.cc",
       "$tcmalloc_dir/src/static_vars.h",
       "$tcmalloc_dir/src/symbolize.cc",
diff --git a/src/base/allocator/partition_allocator/address_space_randomization.cc b/src/base/allocator/partition_allocator/address_space_randomization.cc
index d54fb44..36fdaf1 100644
--- a/src/base/allocator/partition_allocator/address_space_randomization.cc
+++ b/src/base/allocator/partition_allocator/address_space_randomization.cc
@@ -6,11 +6,11 @@
 
 #include "base/allocator/partition_allocator/page_allocator.h"
 #include "base/allocator/partition_allocator/spin_lock.h"
-#include "base/win/windows_version.h"
 #include "build/build_config.h"
 
 #if defined(OS_WIN)
 #include <windows.h>
+#include "base/win/windows_version.h"
 #else
 #include <sys/time.h>
 #include <unistd.h>
diff --git a/src/base/android/java/src/org/chromium/base/ApplicationStatus.java b/src/base/android/java/src/org/chromium/base/ApplicationStatus.java
index 29b1029..0917bf6 100644
--- a/src/base/android/java/src/org/chromium/base/ApplicationStatus.java
+++ b/src/base/android/java/src/org/chromium/base/ApplicationStatus.java
@@ -61,6 +61,7 @@
     private static Integer sCachedApplicationState;
 
     /** Last activity that was shown (or null if none or it was destroyed). */
+    @SuppressLint("StaticFieldLeak")
     private static Activity sActivity;
 
     /** A lazily initialized listener that forwards application state changes to native. */
diff --git a/src/base/android/java/src/org/chromium/base/PathUtils.java b/src/base/android/java/src/org/chromium/base/PathUtils.java
index 1cadb25..9358b71 100644
--- a/src/base/android/java/src/org/chromium/base/PathUtils.java
+++ b/src/base/android/java/src/org/chromium/base/PathUtils.java
@@ -68,8 +68,7 @@
             // already finished.
             if (sDirPathFetchTask.cancel(false)) {
                 // Allow disk access here because we have no other choice.
-                StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
-                StrictMode.allowThreadDiskWrites();
+                StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
                 try {
                     // sDirPathFetchTask did not complete. We have to run the code it was supposed
                     // to be responsible for synchronously on the UI thread.
diff --git a/src/base/android/java/src/org/chromium/base/ThreadUtils.java b/src/base/android/java/src/org/chromium/base/ThreadUtils.java
index dbad59d..771fab3 100644
--- a/src/base/android/java/src/org/chromium/base/ThreadUtils.java
+++ b/src/base/android/java/src/org/chromium/base/ThreadUtils.java
@@ -191,7 +191,7 @@
     }
 
     /**
-     * Asserts that the current thread is running on the main thread.
+     * Throw an exception (when DCHECKs are enabled) if currently not running on the UI thread.
      */
     public static void assertOnUiThread() {
         if (BuildConfig.DCHECK_IS_ON && !runningOnUiThread()) {
@@ -200,6 +200,17 @@
     }
 
     /**
+     * Throw an exception (regardless of build) if currently not running on the UI thread.
+     *
+     * @see #assertOnUiThread()
+     */
+    public static void checkUiThread() {
+        if (!runningOnUiThread()) {
+            throw new IllegalStateException("Must be called on the Ui thread.");
+        }
+    }
+
+    /**
      * @return true iff the current thread is the main (UI) thread.
      */
     public static boolean runningOnUiThread() {
diff --git a/src/base/android/java/src/org/chromium/base/UnguessableToken.java b/src/base/android/java/src/org/chromium/base/UnguessableToken.java
index 4280257..4b1619d 100644
--- a/src/base/android/java/src/org/chromium/base/UnguessableToken.java
+++ b/src/base/android/java/src/org/chromium/base/UnguessableToken.java
@@ -33,12 +33,12 @@
     }
 
     @CalledByNative
-    private long getHighForSerialization() {
+    public long getHighForSerialization() {
         return mHigh;
     }
 
     @CalledByNative
-    private long getLowForSerialization() {
+    public long getLowForSerialization() {
         return mLow;
     }
 
diff --git a/src/base/barrier_closure.cc b/src/base/barrier_closure.cc
index 1dcc502..d7c4f1f 100644
--- a/src/base/barrier_closure.cc
+++ b/src/base/barrier_closure.cc
@@ -4,50 +4,48 @@
 
 #include "base/barrier_closure.h"
 
+#include <utility>
+
 #include "base/atomic_ref_count.h"
 #include "base/bind.h"
+#include "base/memory/ptr_util.h"
 
+namespace base {
 namespace {
 
 // Maintains state for a BarrierClosure.
 class BarrierInfo {
  public:
-  BarrierInfo(int num_callbacks_left, const base::Closure& done_closure);
+  BarrierInfo(int num_callbacks_left, OnceClosure done_closure);
   void Run();
 
  private:
-  base::AtomicRefCount num_callbacks_left_;
-  base::Closure done_closure_;
+  AtomicRefCount num_callbacks_left_;
+  OnceClosure done_closure_;
 };
 
-BarrierInfo::BarrierInfo(int num_callbacks, const base::Closure& done_closure)
+BarrierInfo::BarrierInfo(int num_callbacks, OnceClosure done_closure)
     : num_callbacks_left_(num_callbacks),
-      done_closure_(done_closure) {
-}
+      done_closure_(std::move(done_closure)) {}
 
 void BarrierInfo::Run() {
-  DCHECK(!base::AtomicRefCountIsZero(&num_callbacks_left_));
-  if (!base::AtomicRefCountDec(&num_callbacks_left_)) {
-    base::Closure done_closure = done_closure_;
-    done_closure_.Reset();
-    done_closure.Run();
-  }
+  DCHECK(!AtomicRefCountIsZero(&num_callbacks_left_));
+  if (!AtomicRefCountDec(&num_callbacks_left_))
+    std::move(done_closure_).Run();
 }
 
 }  // namespace
 
-namespace base {
-
-base::Closure BarrierClosure(int num_callbacks_left,
-                             const base::Closure& done_closure) {
+RepeatingClosure BarrierClosure(int num_callbacks_left,
+                                OnceClosure done_closure) {
   DCHECK_GE(num_callbacks_left, 0);
 
   if (num_callbacks_left == 0)
-    done_closure.Run();
+    std::move(done_closure).Run();
 
-  return base::Bind(&BarrierInfo::Run,
-                    base::Owned(
-                        new BarrierInfo(num_callbacks_left, done_closure)));
+  return BindRepeating(
+      &BarrierInfo::Run,
+      Owned(new BarrierInfo(num_callbacks_left, std::move(done_closure))));
 }
 
 }  // namespace base
diff --git a/src/base/barrier_closure.h b/src/base/barrier_closure.h
index b1204d8..282aa39 100644
--- a/src/base/barrier_closure.h
+++ b/src/base/barrier_closure.h
@@ -6,7 +6,7 @@
 #define BASE_BARRIER_CLOSURE_H_
 
 #include "base/base_export.h"
-#include "base/callback_forward.h"
+#include "base/callback.h"
 
 namespace base {
 
@@ -19,11 +19,9 @@
 // maintained as a base::AtomicRefCount. |done_closure| will be run on
 // the thread that calls the final Run() on the returned closures.
 //
-// |done_closure| is also Reset() on the final calling thread but due to the
-// refcounted nature of callbacks, it is hard to know what thread resources
-// will be released on.
-BASE_EXPORT base::Closure BarrierClosure(int num_closures,
-                                         const base::Closure& done_closure);
+// |done_closure| is also cleared on the final calling thread.
+BASE_EXPORT RepeatingClosure BarrierClosure(int num_closures,
+                                            OnceClosure done_closure);
 
 }  // namespace base
 
diff --git a/src/base/base_switches.cc b/src/base/base_switches.cc
index e8aa5cb..daa05c2 100644
--- a/src/base/base_switches.cc
+++ b/src/base/base_switches.cc
@@ -20,6 +20,10 @@
 // the memory-infra category is enabled.
 const char kEnableHeapProfiling[]           = "enable-heap-profiling";
 
+// Report pseudo allocation traces. Pseudo traces are derived from currently
+// active trace events.
+const char kEnableHeapProfilingModePseudo[] = "";
+
 // Report native (walk the stack) allocation traces. By default pseudo stacks
 // derived from trace events are reported.
 const char kEnableHeapProfilingModeNative[] = "native";
diff --git a/src/base/base_switches.h b/src/base/base_switches.h
index 04b0773..8ba05a6 100644
--- a/src/base/base_switches.h
+++ b/src/base/base_switches.h
@@ -15,6 +15,7 @@
 extern const char kDisableLowEndDeviceMode[];
 extern const char kEnableCrashReporter[];
 extern const char kEnableHeapProfiling[];
+extern const char kEnableHeapProfilingModePseudo[];
 extern const char kEnableHeapProfilingModeNative[];
 extern const char kEnableHeapProfilingTaskProfiler[];
 extern const char kEnableLowEndDeviceMode[];
diff --git a/src/base/containers/container_test_utils.h b/src/base/containers/container_test_utils.h
index e36b9f7..251e2a0 100644
--- a/src/base/containers/container_test_utils.h
+++ b/src/base/containers/container_test_utils.h
@@ -22,10 +22,30 @@
     return *this;
   }
 
+  friend bool operator==(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
+    return lhs.data_ == rhs.data_;
+  }
+
+  friend bool operator!=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
+    return !operator==(lhs, rhs);
+  }
+
   friend bool operator<(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
     return lhs.data_ < rhs.data_;
   }
 
+  friend bool operator>(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
+    return rhs < lhs;
+  }
+
+  friend bool operator<=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
+    return !(rhs < lhs);
+  }
+
+  friend bool operator>=(const MoveOnlyInt& lhs, const MoveOnlyInt& rhs) {
+    return !(lhs < rhs);
+  }
+
   int data() const { return data_; }
 
  private:
diff --git a/src/base/containers/flat_set.h b/src/base/containers/flat_set.h
index 13f44dd..66b77af 100644
--- a/src/base/containers/flat_set.h
+++ b/src/base/containers/flat_set.h
@@ -5,6 +5,8 @@
 #ifndef BASE_CONTAINERS_FLAT_SET_H_
 #define BASE_CONTAINERS_FLAT_SET_H_
 
+#include <functional>
+
 #include "base/containers/flat_tree.h"
 
 namespace base {
diff --git a/src/base/containers/flat_tree.h b/src/base/containers/flat_tree.h
index c3a234f..8e85f23 100644
--- a/src/base/containers/flat_tree.h
+++ b/src/base/containers/flat_tree.h
@@ -21,25 +21,28 @@
 // selects only the last of consecutive values instead of the first.
 template <class Iterator, class BinaryPredicate>
 Iterator LastUnique(Iterator first, Iterator last, BinaryPredicate compare) {
-  if (first == last)
+  Iterator replacable = std::adjacent_find(first, last, compare);
+
+  // No duplicate elements found.
+  if (replacable == last)
     return last;
 
-  Iterator dest = first;
-  Iterator cur = first;
-  Iterator prev = cur;
-  while (++cur != last) {
-    if (!compare(*prev, *cur)) {
-      // Non-identical one.
-      if (dest != prev)
-        *dest = std::move(*prev);
-      ++dest;
-    }
-    prev = cur;
+  first = std::next(replacable);
+
+  // Last element is a duplicate but all others are unique.
+  if (first == last)
+    return replacable;
+
+  // This loop is based on std::adjacent_find but std::adjacent_find doesn't
+  // quite cut it.
+  for (Iterator next = std::next(first); next != last; ++next, ++first) {
+    if (!compare(*first, *next))
+      *replacable++ = std::move(*first);
   }
 
-  if (dest != prev)
-    *dest = std::move(*prev);
-  return ++dest;
+  // Last element should be copied unconditionally.
+  *replacable++ = std::move(*first);
+  return replacable;
 }
 
 // Implementation of a sorted vector for backing flat_set and flat_map. Do not
diff --git a/src/base/containers/small_map_unittest.cc b/src/base/containers/small_map_unittest.cc
index 851635d..2380443 100644
--- a/src/base/containers/small_map_unittest.cc
+++ b/src/base/containers/small_map_unittest.cc
@@ -9,15 +9,15 @@
 #include <algorithm>
 #include <functional>
 #include <map>
+#include <unordered_map>
 
-#include "base/containers/hash_tables.h"
 #include "base/logging.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace base {
 
 TEST(SmallMap, General) {
-  small_map<hash_map<int, int>> m;
+  small_map<std::unordered_map<int, int>> m;
 
   EXPECT_TRUE(m.empty());
 
@@ -35,7 +35,7 @@
   EXPECT_EQ(m[0], 5);
   EXPECT_FALSE(m.UsingFullMap());
 
-  small_map<hash_map<int, int>>::iterator iter(m.begin());
+  small_map<std::unordered_map<int, int>>::iterator iter(m.begin());
   ASSERT_TRUE(iter != m.end());
   EXPECT_EQ(iter->first, 0);
   EXPECT_EQ(iter->second, 5);
@@ -66,26 +66,26 @@
   }
   EXPECT_TRUE(iter == m.end());
 
-  const small_map<hash_map<int, int>>& ref = m;
+  const small_map<std::unordered_map<int, int>>& ref = m;
   EXPECT_TRUE(ref.find(1234) != m.end());
   EXPECT_TRUE(ref.find(5678) == m.end());
 }
 
 TEST(SmallMap, PostFixIteratorIncrement) {
-  small_map<hash_map<int, int>> m;
+  small_map<std::unordered_map<int, int>> m;
   m[0] = 5;
   m[2] = 3;
 
   {
-    small_map<hash_map<int, int>>::iterator iter(m.begin());
-    small_map<hash_map<int, int>>::iterator last(iter++);
+    small_map<std::unordered_map<int, int>>::iterator iter(m.begin());
+    small_map<std::unordered_map<int, int>>::iterator last(iter++);
     ++last;
     EXPECT_TRUE(last == iter);
   }
 
   {
-    small_map<hash_map<int, int>>::const_iterator iter(m.begin());
-    small_map<hash_map<int, int>>::const_iterator last(iter++);
+    small_map<std::unordered_map<int, int>>::const_iterator iter(m.begin());
+    small_map<std::unordered_map<int, int>>::const_iterator last(iter++);
     ++last;
     EXPECT_TRUE(last == iter);
   }
@@ -93,17 +93,17 @@
 
 // Based on the General testcase.
 TEST(SmallMap, CopyConstructor) {
-  small_map<hash_map<int, int>> src;
+  small_map<std::unordered_map<int, int>> src;
 
   {
-    small_map<hash_map<int, int>> m(src);
+    small_map<std::unordered_map<int, int>> m(src);
     EXPECT_TRUE(m.empty());
   }
 
   src[0] = 5;
 
   {
-    small_map<hash_map<int, int>> m(src);
+    small_map<std::unordered_map<int, int>> m(src);
     EXPECT_FALSE(m.empty());
     EXPECT_EQ(m.size(), 1u);
   }
@@ -111,7 +111,7 @@
   src[9] = 2;
 
   {
-    small_map<hash_map<int, int>> m(src);
+    small_map<std::unordered_map<int, int>> m(src);
     EXPECT_FALSE(m.empty());
     EXPECT_EQ(m.size(), 2u);
 
@@ -125,7 +125,7 @@
   src[-5] = 6;
 
   {
-    small_map<hash_map<int, int>> m(src);
+    small_map<std::unordered_map<int, int>> m(src);
     EXPECT_EQ(m[   9],  2);
     EXPECT_EQ(m[   0],  5);
     EXPECT_EQ(m[1234], 90);
@@ -156,8 +156,8 @@
 }
 
 TEST(SmallMap, AssignmentOperator) {
-  small_map<hash_map<int, int>> src_small;
-  small_map<hash_map<int, int>> src_large;
+  small_map<std::unordered_map<int, int>> src_small;
+  small_map<std::unordered_map<int, int>> src_large;
 
   src_small[1] = 20;
   src_small[2] = 21;
@@ -173,13 +173,13 @@
   EXPECT_TRUE(src_large.UsingFullMap());
 
   // Assignments to empty.
-  small_map<hash_map<int, int>> dest_small;
+  small_map<std::unordered_map<int, int>> dest_small;
   dest_small = src_small;
   EXPECT_TRUE(SmallMapEqual(dest_small, src_small));
   EXPECT_EQ(dest_small.UsingFullMap(),
             src_small.UsingFullMap());
 
-  small_map<hash_map<int, int>> dest_large;
+  small_map<std::unordered_map<int, int>> dest_large;
   dest_large = src_large;
   EXPECT_TRUE(SmallMapEqual(dest_large, src_large));
   EXPECT_EQ(dest_large.UsingFullMap(),
@@ -202,13 +202,13 @@
 }
 
 TEST(SmallMap, Insert) {
-  small_map<hash_map<int, int>> sm;
+  small_map<std::unordered_map<int, int>> sm;
 
   // loop through the transition from small map to map.
   for (int i = 1; i <= 10; ++i) {
     VLOG(1) << "Iteration " << i;
     // insert an element
-    std::pair<small_map<hash_map<int, int>>::iterator, bool> ret;
+    std::pair<small_map<std::unordered_map<int, int>>::iterator, bool> ret;
     ret = sm.insert(std::make_pair(i, 100*i));
     EXPECT_TRUE(ret.second);
     EXPECT_TRUE(ret.first == sm.find(i));
@@ -225,7 +225,7 @@
 
     // check the state of the map.
     for (int j = 1; j <= i; ++j) {
-      small_map<hash_map<int, int>>::iterator it = sm.find(j);
+      small_map<std::unordered_map<int, int>>::iterator it = sm.find(j);
       EXPECT_TRUE(it != sm.end());
       EXPECT_EQ(it->first, j);
       EXPECT_EQ(it->second, j * 100);
@@ -239,12 +239,12 @@
   // loop through the transition from small map to map.
   for (int elements = 0; elements <= 10; ++elements) {
     VLOG(1) << "Elements " << elements;
-    hash_map<int, int> normal_map;
+    std::unordered_map<int, int> normal_map;
     for (int i = 1; i <= elements; ++i) {
       normal_map.insert(std::make_pair(i, 100*i));
     }
 
-    small_map<hash_map<int, int>> sm;
+    small_map<std::unordered_map<int, int>> sm;
     sm.insert(normal_map.begin(), normal_map.end());
     EXPECT_EQ(normal_map.size(), sm.size());
     for (int i = 1; i <= elements; ++i) {
@@ -257,8 +257,8 @@
 }
 
 TEST(SmallMap, Erase) {
-  small_map<hash_map<std::string, int>> m;
-  small_map<hash_map<std::string, int>>::iterator iter;
+  small_map<std::unordered_map<std::string, int>> m;
+  small_map<std::unordered_map<std::string, int>>::iterator iter;
 
   m["monday"] = 1;
   m["tuesday"] = 2;
@@ -331,8 +331,8 @@
 }
 
 TEST(SmallMap, EraseReturnsIteratorFollowingRemovedElement) {
-  small_map<hash_map<std::string, int>> m;
-  small_map<hash_map<std::string, int>>::iterator iter;
+  small_map<std::unordered_map<std::string, int>> m;
+  small_map<std::unordered_map<std::string, int>>::iterator iter;
 
   m["a"] = 0;
   m["b"] = 1;
@@ -433,7 +433,7 @@
 TEST(SmallMap, DefaultEqualKeyWorks) {
   // If these tests compile, they pass. The EXPECT calls are only there to avoid
   // unused variable warnings.
-  small_map<hash_map<int, int>> hm;
+  small_map<std::unordered_map<int, int>> hm;
   EXPECT_EQ(0u, hm.size());
   small_map<std::map<int, int>> m;
   EXPECT_EQ(0u, m.size());
@@ -441,25 +441,24 @@
 
 namespace {
 
-class hash_map_add_item : public hash_map<int, int> {
+class unordered_map_add_item : public std::unordered_map<int, int> {
  public:
-  hash_map_add_item() {}
-  explicit hash_map_add_item(const std::pair<int, int>& item) {
+  unordered_map_add_item() {}
+  explicit unordered_map_add_item(const std::pair<int, int>& item) {
     insert(item);
   }
 };
 
-void InitMap(ManualConstructor<hash_map_add_item>* map_ctor) {
+void InitMap(ManualConstructor<unordered_map_add_item>* map_ctor) {
   map_ctor->Init(std::make_pair(0, 0));
 }
 
-class hash_map_add_item_initializer {
+class unordered_map_add_item_initializer {
  public:
-  explicit hash_map_add_item_initializer(int item_to_add)
+  explicit unordered_map_add_item_initializer(int item_to_add)
       : item_(item_to_add) {}
-  hash_map_add_item_initializer()
-      : item_(0) {}
-  void operator()(ManualConstructor<hash_map_add_item>* map_ctor) const {
+  unordered_map_add_item_initializer() : item_(0) {}
+  void operator()(ManualConstructor<unordered_map_add_item>* map_ctor) const {
     map_ctor->Init(std::make_pair(item_, item_));
   }
 
@@ -469,8 +468,8 @@
 }  // anonymous namespace
 
 TEST(SmallMap, SubclassInitializationWithFunctionPointer) {
-  small_map<hash_map_add_item, 4, std::equal_to<int>,
-            void (&)(ManualConstructor<hash_map_add_item>*)>
+  small_map<unordered_map_add_item, 4, std::equal_to<int>,
+            void (&)(ManualConstructor<unordered_map_add_item>*)>
       m(InitMap);
 
   EXPECT_TRUE(m.empty());
@@ -490,9 +489,9 @@
 }
 
 TEST(SmallMap, SubclassInitializationWithFunctionObject) {
-  small_map<hash_map_add_item, 4, std::equal_to<int>,
-            hash_map_add_item_initializer>
-      m(hash_map_add_item_initializer(-1));
+  small_map<unordered_map_add_item, 4, std::equal_to<int>,
+            unordered_map_add_item_initializer>
+      m(unordered_map_add_item_initializer(-1));
 
   EXPECT_TRUE(m.empty());
 
diff --git a/src/base/files/file_path.h b/src/base/files/file_path.h
index 0be0ad0..084d62f 100644
--- a/src/base/files/file_path.h
+++ b/src/base/files/file_path.h
@@ -110,7 +110,6 @@
 
 #include "base/base_export.h"
 #include "base/compiler_specific.h"
-#include "base/containers/hash_tables.h"
 #include "base/macros.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_piece.h"
@@ -470,17 +469,17 @@
 #define PRFilePath "ls"
 #endif  // OS_WIN
 
-// Provide a hash function so that hash_sets and maps can contain FilePath
-// objects.
-namespace BASE_HASH_NAMESPACE {
+namespace std {
 
-template<>
+template <>
 struct hash<base::FilePath> {
-  size_t operator()(const base::FilePath& f) const {
+  typedef base::FilePath argument_type;
+  typedef std::size_t result_type;
+  result_type operator()(argument_type const& f) const {
     return hash<base::FilePath::StringType>()(f.value());
   }
 };
 
-}  // namespace BASE_HASH_NAMESPACE
+}  // namespace std
 
 #endif  // BASE_FILES_FILE_PATH_H_
diff --git a/src/base/files/file_path_watcher_linux.cc b/src/base/files/file_path_watcher_linux.cc
index f02a8ea..745d3a8 100644
--- a/src/base/files/file_path_watcher_linux.cc
+++ b/src/base/files/file_path_watcher_linux.cc
@@ -16,11 +16,11 @@
 #include <map>
 #include <memory>
 #include <set>
+#include <unordered_map>
 #include <utility>
 #include <vector>
 
 #include "base/bind.h"
-#include "base/containers/hash_tables.h"
 #include "base/files/file_enumerator.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
@@ -73,7 +73,7 @@
   // issues with GCC 6 (http://crbug.com/636346).
 
   // We keep track of which delegates want to be notified on which watches.
-  hash_map<Watch, WatcherSet> watchers_;
+  std::unordered_map<Watch, WatcherSet> watchers_;
 
   // Lock to protect watchers_.
   Lock lock_;
@@ -184,7 +184,7 @@
   // |target_| and always stores an empty next component name in |subdir|.
   WatchVector watches_;
 
-  hash_map<InotifyReader::Watch, FilePath> recursive_paths_by_watch_;
+  std::unordered_map<InotifyReader::Watch, FilePath> recursive_paths_by_watch_;
   std::map<FilePath, InotifyReader::Watch> recursive_watches_by_path_;
 
   WeakPtrFactory<FilePathWatcherImpl> weak_factory_;
@@ -596,12 +596,9 @@
   if (!recursive_)
     return;
 
-  for (hash_map<InotifyReader::Watch, FilePath>::const_iterator it =
-           recursive_paths_by_watch_.begin();
-       it != recursive_paths_by_watch_.end();
-       ++it) {
-    g_inotify_reader.Get().RemoveWatch(it->first, this);
-  }
+  for (const auto& it : recursive_paths_by_watch_)
+    g_inotify_reader.Get().RemoveWatch(it.first, this);
+
   recursive_paths_by_watch_.clear();
   recursive_watches_by_path_.clear();
 }
diff --git a/src/base/i18n/base_i18n_switches.cc b/src/base/i18n/base_i18n_switches.cc
index 44e8393..103d665 100644
--- a/src/base/i18n/base_i18n_switches.cc
+++ b/src/base/i18n/base_i18n_switches.cc
@@ -8,9 +8,14 @@
 
 // Force the UI to a specific direction. Valid values are "ltr" (left-to-right)
 // and "rtl" (right-to-left).
-const char kForceUIDirection[]              = "force-ui-direction";
+const char kForceUIDirection[]   = "force-ui-direction";
 
-const char kForceUIDirectionLTR[]           = "ltr";
-const char kForceUIDirectionRTL[]           = "rtl";
+// Force the text rendering to a specific direction. Valid values are "ltr"
+// (left-to-right) and "rtl" (right-to-left). Only tested meaningfully with
+// RTL.
+const char kForceTextDirection[] = "force-text-direction";
+
+const char kForceDirectionLTR[]  = "ltr";
+const char kForceDirectionRTL[]  = "rtl";
 
 }  // namespace switches
diff --git a/src/base/i18n/base_i18n_switches.h b/src/base/i18n/base_i18n_switches.h
index f00cff3..d1ba690 100644
--- a/src/base/i18n/base_i18n_switches.h
+++ b/src/base/i18n/base_i18n_switches.h
@@ -10,10 +10,11 @@
 namespace switches {
 
 BASE_I18N_EXPORT extern const char kForceUIDirection[];
+BASE_I18N_EXPORT extern const char kForceTextDirection[];
 
-// kForceUIDirection choices.
-BASE_I18N_EXPORT extern const char kForceUIDirectionLTR[];
-BASE_I18N_EXPORT extern const char kForceUIDirectionRTL[];
+// kForce*Direction choices for the switches above.
+BASE_I18N_EXPORT extern const char kForceDirectionLTR[];
+BASE_I18N_EXPORT extern const char kForceDirectionRTL[];
 
 }  // namespace switches
 
diff --git a/src/base/i18n/rtl.cc b/src/base/i18n/rtl.cc
index 095d66c..2b6bf37 100644
--- a/src/base/i18n/rtl.cc
+++ b/src/base/i18n/rtl.cc
@@ -55,6 +55,18 @@
 // directionality, returns UNKNOWN_DIRECTION if it doesn't. Please refer to
 // http://unicode.org/reports/tr9/ for more information.
 base::i18n::TextDirection GetCharacterDirection(UChar32 character) {
+  static bool has_switch = base::CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kForceTextDirection);
+  if (has_switch) {
+    base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+    std::string force_flag =
+        command_line->GetSwitchValueASCII(switches::kForceTextDirection);
+
+    if (force_flag == switches::kForceDirectionRTL)
+      return base::i18n::RIGHT_TO_LEFT;
+    if (force_flag == switches::kForceDirectionLTR)
+      return base::i18n::LEFT_TO_RIGHT;
+  }
   // Now that we have the character, we use ICU in order to query for the
   // appropriate Unicode BiDi character type.
   int32_t property = u_getIntPropertyValue(character, UCHAR_BIDI_CLASS);
@@ -85,10 +97,10 @@
     std::string force_flag =
         command_line->GetSwitchValueASCII(switches::kForceUIDirection);
 
-    if (force_flag == switches::kForceUIDirectionLTR)
+    if (force_flag == switches::kForceDirectionLTR)
       return base::i18n::LEFT_TO_RIGHT;
 
-    if (force_flag == switches::kForceUIDirectionRTL)
+    if (force_flag == switches::kForceDirectionRTL)
       return base::i18n::RIGHT_TO_LEFT;
   }
 
diff --git a/src/base/id_map.h b/src/base/id_map.h
index d171fb1..8586222 100644
--- a/src/base/id_map.h
+++ b/src/base/id_map.h
@@ -7,12 +7,14 @@
 
 #include <stddef.h>
 #include <stdint.h>
+
 #include <memory>
 #include <set>
 #include <type_traits>
+#include <unordered_map>
 #include <utility>
 
-#include "base/containers/hash_tables.h"
+#include "base/containers/flat_set.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/sequence_checker.h"
@@ -35,7 +37,8 @@
 
  private:
   using T = typename std::remove_reference<decltype(*V())>::type;
-  using HashTable = base::hash_map<KeyType, V>;
+
+  using HashTable = std::unordered_map<KeyType, V>;
 
  public:
   IDMap() : iteration_depth_(0), next_id_(1), check_on_null_data_(false) {
@@ -236,7 +239,7 @@
   // Keep set of IDs that should be removed after the outermost iteration has
   // finished. This way we manage to not invalidate the iterator when an element
   // is removed.
-  std::set<KeyType> removed_ids_;
+  base::flat_set<KeyType> removed_ids_;
 
   // The next ID that we will return from Add()
   KeyType next_id_;
diff --git a/src/base/id_map_unittest.cc b/src/base/id_map_unittest.cc
index 42949bb..15f0c24 100644
--- a/src/base/id_map_unittest.cc
+++ b/src/base/id_map_unittest.cc
@@ -106,7 +106,7 @@
   for (int i = 0; i < kCount; i++)
     map.Add(&obj[i]);
 
-  // IDMap uses a hash_map, which has no predictable iteration order.
+  // IDMap has no predictable iteration order.
   int32_t ids_in_iteration_order[kCount];
   const TestObject* objs_in_iteration_order[kCount];
   int counter = 0;
@@ -216,7 +216,7 @@
   for (int i = 0; i < kCount; i++)
     map.Add(&obj[i]);
 
-  // IDMap uses a hash_map, which has no predictable iteration order.
+  // IDMap has no predictable iteration order.
   int32_t ids_in_iteration_order[kCount];
   const TestObject* objs_in_iteration_order[kCount];
   int counter = 0;
diff --git a/src/base/mac/sdk_forward_declarations.h b/src/base/mac/sdk_forward_declarations.h
index 2c3d506..bcfba9b 100644
--- a/src/base/mac/sdk_forward_declarations.h
+++ b/src/base/mac/sdk_forward_declarations.h
@@ -247,6 +247,11 @@
                                     action:(SEL)action;
 @end
 
+@interface NSTextField (SierraPointOneSDK)
++ (instancetype)labelWithAttributedString:
+    (NSAttributedString*)attributedStringValue;
+@end
+
 @interface NSApplication (SierraPointOneSDK)
 @property BOOL automaticCustomizeTouchBarMenuItemEnabled;
 @end
diff --git a/src/base/memory/discardable_shared_memory.cc b/src/base/memory/discardable_shared_memory.cc
index 99d2991..89d67af 100644
--- a/src/base/memory/discardable_shared_memory.cc
+++ b/src/base/memory/discardable_shared_memory.cc
@@ -224,9 +224,10 @@
 // Pin pages if supported.
 #if defined(OS_ANDROID)
   SharedMemoryHandle handle = shared_memory_.handle();
-  if (SharedMemory::IsHandleValid(handle)) {
-    if (ashmem_pin_region(
-            handle.fd, AlignToPageSize(sizeof(SharedState)) + offset, length)) {
+  if (handle.IsValid()) {
+    if (ashmem_pin_region(handle.GetHandle(),
+                          AlignToPageSize(sizeof(SharedState)) + offset,
+                          length)) {
       return PURGED;
     }
   }
@@ -251,9 +252,10 @@
 // Unpin pages if supported.
 #if defined(OS_ANDROID)
   SharedMemoryHandle handle = shared_memory_.handle();
-  if (SharedMemory::IsHandleValid(handle)) {
-    if (ashmem_unpin_region(
-            handle.fd, AlignToPageSize(sizeof(SharedState)) + offset, length)) {
+  if (handle.IsValid()) {
+    if (ashmem_unpin_region(handle.GetHandle(),
+                            AlignToPageSize(sizeof(SharedState)) + offset,
+                            length)) {
       DPLOG(ERROR) << "ashmem_unpin_region() failed";
     }
   }
diff --git a/src/base/memory/discardable_shared_memory.h b/src/base/memory/discardable_shared_memory.h
index b391ef1..ba3e16a 100644
--- a/src/base/memory/discardable_shared_memory.h
+++ b/src/base/memory/discardable_shared_memory.h
@@ -123,16 +123,6 @@
   // It is safe to call Close repeatedly.
   void Close();
 
-  // Shares the discardable memory segment to another process. Attempts to
-  // create a platform-specific |new_handle| which can be used in a remote
-  // process to access the discardable memory segment. |new_handle| is an
-  // output parameter to receive the handle for use in the remote process.
-  // Returns true on success, false otherwise.
-  bool ShareToProcess(ProcessHandle process_handle,
-                      SharedMemoryHandle* new_handle) {
-    return shared_memory_.ShareToProcess(process_handle, new_handle);
-  }
-
  private:
   // Virtual for tests.
   virtual Time Now() const;
diff --git a/src/base/memory/discardable_shared_memory_unittest.cc b/src/base/memory/discardable_shared_memory_unittest.cc
index 4c55d54..8fa9a38 100644
--- a/src/base/memory/discardable_shared_memory_unittest.cc
+++ b/src/base/memory/discardable_shared_memory_unittest.cc
@@ -44,10 +44,8 @@
   bool rv = memory1.CreateAndMap(kDataSize);
   ASSERT_TRUE(rv);
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(kDataSize);
@@ -78,10 +76,8 @@
   EXPECT_EQ(DiscardableSharedMemory::SUCCESS, lock_rv);
   EXPECT_TRUE(memory1.IsMemoryLocked());
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(kDataSize);
@@ -116,10 +112,8 @@
   bool rv = memory1.CreateAndMap(kDataSize);
   ASSERT_TRUE(rv);
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(kDataSize);
@@ -158,10 +152,8 @@
   bool rv = memory1.CreateAndMap(kDataSize);
   ASSERT_TRUE(rv);
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(kDataSize);
@@ -226,10 +218,8 @@
   bool rv = memory1.CreateAndMap(kDataSize);
   ASSERT_TRUE(rv);
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(kDataSize);
@@ -255,10 +245,8 @@
   bool rv = memory1.CreateAndMap(data_size_in_bytes);
   ASSERT_TRUE(rv);
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(data_size_in_bytes);
@@ -374,10 +362,8 @@
   bool rv = memory1.CreateAndMap(kDataSize);
   ASSERT_TRUE(rv);
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(
-      memory1.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
-  ASSERT_TRUE(SharedMemory::IsHandleValid(shared_handle));
+  SharedMemoryHandle shared_handle = memory1.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 
   TestDiscardableSharedMemory memory2(shared_handle);
   rv = memory2.Map(kDataSize);
diff --git a/src/base/memory/shared_memory.h b/src/base/memory/shared_memory.h
index 4b66cc6..154d808 100644
--- a/src/base/memory/shared_memory.h
+++ b/src/base/memory/shared_memory.h
@@ -10,6 +10,7 @@
 #include <string>
 
 #include "base/base_export.h"
+#include "base/hash.h"
 #include "base/macros.h"
 #include "base/memory/shared_memory_handle.h"
 #include "base/process/process_handle.h"
@@ -79,8 +80,8 @@
   // shared memory file.
   //
   // WARNING: This does not reduce the OS-level permissions on the handle; it
-  // only affects how the SharedMemory will be mmapped.  Use
-  // ShareReadOnlyToProcess to drop permissions.  TODO(jln,jyasskin): DCHECK
+  // only affects how the SharedMemory will be mmapped. Use
+  // GetReadOnlyHandle to drop permissions. TODO(jln,jyasskin): DCHECK
   // that |read_only| matches the permissions of the handle.
   SharedMemory(const SharedMemoryHandle& handle, bool read_only);
 
@@ -91,17 +92,15 @@
   // invalid value; NULL for a HANDLE and -1 for a file descriptor)
   static bool IsHandleValid(const SharedMemoryHandle& handle);
 
-  // Returns invalid handle (see comment above for exact definition).
-  static SharedMemoryHandle NULLHandle();
-
   // Closes a shared memory handle.
   static void CloseHandle(const SharedMemoryHandle& handle);
 
   // Returns the maximum number of handles that can be open at once per process.
   static size_t GetHandleLimit();
 
-  // Duplicates The underlying OS primitive. Returns NULLHandle() on failure.
-  // The caller is responsible for destroying the duplicated OS primitive.
+  // Duplicates The underlying OS primitive. Returns an invalid handle on
+  // failure. The caller is responsible for destroying the duplicated OS
+  // primitive.
   static SharedMemoryHandle DuplicateHandle(const SharedMemoryHandle& handle);
 
 #if defined(OS_POSIX)
@@ -207,53 +206,14 @@
   // It is safe to call Close repeatedly.
   void Close();
 
-  // Shares the shared memory to another process.  Attempts to create a
-  // platform-specific new_handle which can be used in a remote process to read
-  // the shared memory file.  new_handle is an output parameter to receive the
-  // handle for use in the remote process.
-  //
-  // |*this| must have been initialized using one of the Create*() or Open()
-  // methods with share_read_only=true. If it was constructed from a
-  // SharedMemoryHandle, this call will CHECK-fail.
-  //
-  // Returns true on success, false otherwise.
-  bool ShareReadOnlyToProcess(ProcessHandle process,
-                              SharedMemoryHandle* new_handle) {
-    return ShareToProcessCommon(process, new_handle, false, SHARE_READONLY);
-  }
-
-  // Logically equivalent to:
-  //   bool ok = ShareReadOnlyToProcess(process, new_handle);
-  //   Close();
-  //   return ok;
-  // Note that the memory is unmapped by calling this method, regardless of the
-  // return value.
-  bool GiveReadOnlyToProcess(ProcessHandle process,
-                             SharedMemoryHandle* new_handle) {
-    return ShareToProcessCommon(process, new_handle, true, SHARE_READONLY);
-  }
-
-  // Shares the shared memory to another process.  Attempts
-  // to create a platform-specific new_handle which can be
-  // used in a remote process to access the shared memory
-  // file.  new_handle is an output parameter to receive
-  // the handle for use in the remote process.
-  // Returns true on success, false otherwise.
-  bool ShareToProcess(ProcessHandle process,
-                      SharedMemoryHandle* new_handle) {
-    return ShareToProcessCommon(process, new_handle, false, SHARE_CURRENT_MODE);
-  }
-
-  // Logically equivalent to:
-  //   bool ok = ShareToProcess(process, new_handle);
-  //   Close();
-  //   return ok;
-  // Note that the memory is unmapped by calling this method, regardless of the
-  // return value.
-  bool GiveToProcess(ProcessHandle process,
-                     SharedMemoryHandle* new_handle) {
-    return ShareToProcessCommon(process, new_handle, true, SHARE_CURRENT_MODE);
-  }
+  // Returns a read-only handle to this shared memory region. The caller takes
+  // ownership of the handle. For POSIX handles, CHECK-fails if the region
+  // wasn't Created or Opened with share_read_only=true, which is required to
+  // make the handle read-only. When the handle is passed to the IPC subsystem,
+  // that takes ownership of the handle. As such, it's not valid to pass the
+  // sample handle to the IPC subsystem twice. Returns an invalid handle on
+  // failure.
+  SharedMemoryHandle GetReadOnlyHandle();
 
 #if defined(OS_POSIX) && (!defined(OS_MACOSX) || defined(OS_IOS)) && \
     !defined(OS_NACL)
@@ -276,39 +236,27 @@
   bool FilePathForMemoryName(const std::string& mem_name, FilePath* path);
 #endif
 
-  enum ShareMode {
-    SHARE_READONLY,
-    SHARE_CURRENT_MODE,
-  };
-
-#if defined(OS_MACOSX)
-  bool Share(SharedMemoryHandle* new_handle, ShareMode share_mode);
-#endif
-
-  bool ShareToProcessCommon(ProcessHandle process,
-                            SharedMemoryHandle* new_handle,
-                            bool close_self,
-                            ShareMode);
-
 #if defined(OS_WIN)
   // If true indicates this came from an external source so needs extra checks
   // before being mapped.
   bool external_section_;
   std::wstring       name_;
   win::ScopedHandle  mapped_file_;
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
+#else
   // The OS primitive that backs the shared memory region.
   SharedMemoryHandle shm_;
 
+  // If valid, points to the same memory region as shm_, but with readonly
+  // permissions.
+  SharedMemoryHandle readonly_shm_;
+#endif
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
   // The mechanism by which the memory is mapped. Only valid if |memory_| is not
   // |nullptr|.
   SharedMemoryHandle::Type mapped_memory_mechanism_;
-
-  int readonly_mapped_file_;
-#elif defined(OS_POSIX)
-  int                mapped_file_;
-  int                readonly_mapped_file_;
 #endif
+
   size_t             mapped_size_;
   void*              memory_;
   bool               read_only_;
diff --git a/src/base/memory/shared_memory_android.cc b/src/base/memory/shared_memory_android.cc
index 6f1d9cb..ad9145f 100644
--- a/src/base/memory/shared_memory_android.cc
+++ b/src/base/memory/shared_memory_android.cc
@@ -18,21 +18,22 @@
 // are closed, the memory buffer will go away.
 
 bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
-  DCHECK_EQ(-1, mapped_file_ );
+  DCHECK(!shm_.IsValid());
 
   if (options.size > static_cast<size_t>(std::numeric_limits<int>::max()))
     return false;
 
   // "name" is just a label in ashmem. It is visible in /proc/pid/maps.
-  mapped_file_ = ashmem_create_region(
+  int fd = ashmem_create_region(
       options.name_deprecated == NULL ? "" : options.name_deprecated->c_str(),
       options.size);
-  if (-1 == mapped_file_) {
+  shm_ = SharedMemoryHandle::ImportHandle(fd);
+  if (!shm_.IsValid()) {
     DLOG(ERROR) << "Shared memory creation failed";
     return false;
   }
 
-  int err = ashmem_set_prot_region(mapped_file_,
+  int err = ashmem_set_prot_region(shm_.GetHandle(),
                                    PROT_READ | PROT_WRITE | PROT_EXEC);
   if (err < 0) {
     DLOG(ERROR) << "Error " << err << " when setting protection of ashmem";
@@ -41,8 +42,8 @@
 
   // Android doesn't appear to have a way to drop write access on an ashmem
   // segment for a single descriptor.  http://crbug.com/320865
-  readonly_mapped_file_ = dup(mapped_file_);
-  if (-1 == readonly_mapped_file_) {
+  readonly_shm_ = SharedMemoryHandle::ImportHandle(dup(shm_.GetHandle()));
+  if (!readonly_shm_.IsValid()) {
     DPLOG(ERROR) << "dup() failed";
     return false;
   }
diff --git a/src/base/memory/shared_memory_handle.h b/src/base/memory/shared_memory_handle.h
index dc33eea..d66c3c1 100644
--- a/src/base/memory/shared_memory_handle.h
+++ b/src/base/memory/shared_memory_handle.h
@@ -27,14 +27,10 @@
 
 // SharedMemoryHandle is a platform specific type which represents
 // the underlying OS handle to a shared memory segment.
-#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS))
-typedef FileDescriptor SharedMemoryHandle;
-#elif defined(OS_WIN)
 class BASE_EXPORT SharedMemoryHandle {
  public:
   // The default constructor returns an invalid SharedMemoryHandle.
   SharedMemoryHandle();
-  SharedMemoryHandle(HANDLE h, base::ProcessId pid);
 
   // Standard copy constructor. The new instance shares the underlying OS
   // primitives.
@@ -44,46 +40,28 @@
   // OS primitives.
   SharedMemoryHandle& operator=(const SharedMemoryHandle& handle);
 
-  // Comparison operators.
-  bool operator==(const SharedMemoryHandle& handle) const;
-  bool operator!=(const SharedMemoryHandle& handle) const;
-
-  // Closes the underlying OS resources.
+  // Closes the underlying OS resource.
+  // The fact that this method needs to be "const" is an artifact of the
+  // original interface for base::SharedMemory::CloseHandle.
+  // TODO(erikchen): This doesn't clear the underlying reference, which seems
+  // like a bug, but is how this class has always worked. Fix this:
+  // https://crbug.com/716072.
   void Close() const;
 
-  // Whether the underlying OS primitive is valid.
-  bool IsValid() const;
-
-  // Whether |pid_| is the same as the current process's id.
-  bool BelongsToCurrentProcess() const;
-
-  // Whether handle_ needs to be duplicated into the destination process when
-  // an instance of this class is passed over a Chrome IPC channel.
-  bool NeedsBrokering() const;
-
+  // Whether ownership of the underlying OS resource is implicitly passed to
+  // the IPC subsystem during serialization.
   void SetOwnershipPassesToIPC(bool ownership_passes);
   bool OwnershipPassesToIPC() const;
 
-  HANDLE GetHandle() const;
-  base::ProcessId GetPID() const;
+  // Whether the underlying OS resource is valid.
+  bool IsValid() const;
 
- private:
-  HANDLE handle_;
+  // Duplicates the underlying OS resource. Using the return value as a
+  // parameter to an IPC message will cause the IPC subsystem to consume the OS
+  // resource.
+  SharedMemoryHandle Duplicate() const;
 
-  // The process in which |handle_| is valid and can be used. If |handle_| is
-  // invalid, this will be kNullProcessId.
-  base::ProcessId pid_;
-
-  // Whether passing this object as a parameter to an IPC message passes
-  // ownership of |handle_| to the IPC stack. This is meant to mimic the
-  // behavior of the |auto_close| parameter of FileDescriptor. This member only
-  // affects attachment-brokered SharedMemoryHandles.
-  // Defaults to |false|.
-  bool ownership_passes_to_ipc_;
-};
-#else
-class BASE_EXPORT SharedMemoryHandle {
- public:
+#if defined(OS_MACOSX) && !defined(OS_IOS)
   enum Type {
     // The SharedMemoryHandle is backed by a POSIX fd.
     POSIX,
@@ -91,9 +69,6 @@
     MACH,
   };
 
-  // The default constructor returns an invalid SharedMemoryHandle.
-  SharedMemoryHandle();
-
   // Constructs a SharedMemoryHandle backed by the components of a
   // FileDescriptor. The newly created instance has the same ownership semantics
   // as base::FileDescriptor. This typically means that the SharedMemoryHandle
@@ -108,29 +83,8 @@
   explicit SharedMemoryHandle(mach_vm_size_t size);
 
   // Makes a Mach-based SharedMemoryHandle from |memory_object|, a named entry
-  // in the task with process id |pid|. The memory region has size |size|.
-  SharedMemoryHandle(mach_port_t memory_object,
-                     mach_vm_size_t size,
-                     base::ProcessId pid);
-
-  // Standard copy constructor. The new instance shares the underlying OS
-  // primitives.
-  SharedMemoryHandle(const SharedMemoryHandle& handle);
-
-  // Standard assignment operator. The updated instance shares the underlying
-  // OS primitives.
-  SharedMemoryHandle& operator=(const SharedMemoryHandle& handle);
-
-  // Duplicates the underlying OS resources.
-  SharedMemoryHandle Duplicate() const;
-
-  // Comparison operators.
-  bool operator==(const SharedMemoryHandle& handle) const;
-  bool operator!=(const SharedMemoryHandle& handle) const;
-
-  // Whether the underlying OS primitive is valid. Once the SharedMemoryHandle
-  // is backed by a valid OS primitive, it becomes immutable.
-  bool IsValid() const;
+  // in the current task. The memory region has size |size|.
+  SharedMemoryHandle(mach_port_t memory_object, mach_vm_size_t size);
 
   // Exposed so that the SharedMemoryHandle can be transported between
   // processes.
@@ -145,14 +99,34 @@
   // On success, |memory| is an output variable that contains the start of the
   // mapped memory.
   bool MapAt(off_t offset, size_t bytes, void** memory, bool read_only);
+#elif defined(OS_WIN)
+  SharedMemoryHandle(HANDLE h);
 
-  // Closes the underlying OS primitive.
-  void Close() const;
+  HANDLE GetHandle() const;
+#else
+  // This constructor is deprecated, as it fails to propagate the GUID, which
+  // will be added in the near future.
+  // TODO(rockot): Remove this constructor once Mojo supports GUIDs.
+  // https://crbug.com/713763.
+  explicit SharedMemoryHandle(const base::FileDescriptor& file_descriptor);
 
-  void SetOwnershipPassesToIPC(bool ownership_passes);
-  bool OwnershipPassesToIPC() const;
+  // Creates a SharedMemoryHandle from an |fd| supplied from an external
+  // service.
+  static SharedMemoryHandle ImportHandle(int fd);
+
+  // Returns the underlying OS resource.
+  int GetHandle() const;
+
+  // Takes ownership of the OS resource.
+  void SetHandle(int fd);
+
+  // Invalidates [but doesn't close] the underlying OS resource. This will leak
+  // unless the caller is careful.
+  int Release();
+#endif
 
  private:
+#if defined(OS_MACOSX) && !defined(OS_IOS)
   friend class SharedMemory;
 
   // Shared code between copy constructor and operator=.
@@ -172,10 +146,6 @@
       // relevant if |memory_object_| is not |MACH_PORT_NULL|.
       mach_vm_size_t size_;
 
-      // The pid of the process in which |memory_object_| is usable. Only
-      // relevant if |memory_object_| is not |MACH_PORT_NULL|.
-      base::ProcessId pid_;
-
       // Whether passing this object as a parameter to an IPC message passes
       // ownership of |memory_object_| to the IPC stack. This is meant to mimic
       // the behavior of the |auto_close| parameter of FileDescriptor.
@@ -183,8 +153,19 @@
       bool ownership_passes_to_ipc_;
     };
   };
-};
+#elif defined(OS_WIN)
+  HANDLE handle_;
+
+  // Whether passing this object as a parameter to an IPC message passes
+  // ownership of |handle_| to the IPC stack. This is meant to mimic the
+  // behavior of the |auto_close| parameter of FileDescriptor. This member only
+  // affects attachment-brokered SharedMemoryHandles.
+  // Defaults to |false|.
+  bool ownership_passes_to_ipc_;
+#else
+  FileDescriptor file_descriptor_;
 #endif
+};
 
 }  // namespace base
 
diff --git a/src/base/memory/shared_memory_handle_mac.cc b/src/base/memory/shared_memory_handle_mac.cc
index 9dfd3c1..3f1d4d8 100644
--- a/src/base/memory/shared_memory_handle_mac.cc
+++ b/src/base/memory/shared_memory_handle_mac.cc
@@ -39,17 +39,14 @@
 
   memory_object_ = named_right;
   size_ = size;
-  pid_ = GetCurrentProcId();
   ownership_passes_to_ipc_ = false;
 }
 
 SharedMemoryHandle::SharedMemoryHandle(mach_port_t memory_object,
-                                       mach_vm_size_t size,
-                                       base::ProcessId pid)
+                                       mach_vm_size_t size)
     : type_(MACH),
       memory_object_(memory_object),
       size_(size),
-      pid_(pid),
       ownership_passes_to_ipc_(false) {}
 
 SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle) {
@@ -78,7 +75,7 @@
     }
     case MACH: {
       if (!IsValid())
-        return SharedMemoryHandle(MACH_PORT_NULL, 0, 0);
+        return SharedMemoryHandle();
 
       // Increment the ref count.
       kern_return_t kr = mach_port_mod_refs(mach_task_self(), memory_object_,
@@ -91,26 +88,6 @@
   }
 }
 
-bool SharedMemoryHandle::operator==(const SharedMemoryHandle& handle) const {
-  if (!IsValid() && !handle.IsValid())
-    return true;
-
-  if (type_ != handle.type_)
-    return false;
-
-  switch (type_) {
-    case POSIX:
-      return file_descriptor_.fd == handle.file_descriptor_.fd;
-    case MACH:
-      return memory_object_ == handle.memory_object_ && size_ == handle.size_ &&
-             pid_ == handle.pid_;
-  }
-}
-
-bool SharedMemoryHandle::operator!=(const SharedMemoryHandle& handle) const {
-  return !(*this == handle);
-}
-
 bool SharedMemoryHandle::IsValid() const {
   switch (type_) {
     case POSIX:
@@ -157,7 +134,6 @@
                      MAP_SHARED, file_descriptor_.fd, offset);
       return *memory != MAP_FAILED;
     case SharedMemoryHandle::MACH:
-      DCHECK_EQ(pid_, GetCurrentProcId());
       kern_return_t kr = mach_vm_map(
           mach_task_self(),
           reinterpret_cast<mach_vm_address_t*>(memory),    // Output parameter
@@ -210,7 +186,6 @@
     case MACH:
       memory_object_ = handle.memory_object_;
       size_ = handle.size_;
-      pid_ = handle.pid_;
       ownership_passes_to_ipc_ = handle.ownership_passes_to_ipc_;
       break;
   }
diff --git a/src/base/memory/shared_memory_handle_posix.cc b/src/base/memory/shared_memory_handle_posix.cc
new file mode 100644
index 0000000..3e9a403
--- /dev/null
+++ b/src/base/memory/shared_memory_handle_posix.cc
@@ -0,0 +1,73 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/shared_memory_handle.h"
+
+#include <unistd.h>
+
+#include "base/logging.h"
+#include "base/posix/eintr_wrapper.h"
+
+namespace base {
+
+SharedMemoryHandle::SharedMemoryHandle() = default;
+SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle) =
+    default;
+SharedMemoryHandle& SharedMemoryHandle::operator=(
+    const SharedMemoryHandle& handle) = default;
+
+SharedMemoryHandle::SharedMemoryHandle(
+    const base::FileDescriptor& file_descriptor)
+    : file_descriptor_(file_descriptor) {}
+
+// static
+SharedMemoryHandle SharedMemoryHandle::ImportHandle(int fd) {
+  SharedMemoryHandle handle;
+  handle.file_descriptor_.fd = fd;
+  handle.file_descriptor_.auto_close = false;
+  return handle;
+}
+
+int SharedMemoryHandle::GetHandle() const {
+  return file_descriptor_.fd;
+}
+
+void SharedMemoryHandle::SetHandle(int handle) {
+  file_descriptor_.fd = handle;
+}
+
+bool SharedMemoryHandle::IsValid() const {
+  return file_descriptor_.fd >= 0;
+}
+
+void SharedMemoryHandle::Close() const {
+  if (IGNORE_EINTR(close(file_descriptor_.fd)) < 0)
+    PLOG(ERROR) << "close";
+}
+
+int SharedMemoryHandle::Release() {
+  int old_fd = file_descriptor_.fd;
+  file_descriptor_.fd = -1;
+  return old_fd;
+}
+
+SharedMemoryHandle SharedMemoryHandle::Duplicate() const {
+  if (!IsValid())
+    return SharedMemoryHandle();
+
+  int duped_handle = HANDLE_EINTR(dup(file_descriptor_.fd));
+  if (duped_handle < 0)
+    return SharedMemoryHandle();
+  return SharedMemoryHandle(FileDescriptor(duped_handle, true));
+}
+
+void SharedMemoryHandle::SetOwnershipPassesToIPC(bool ownership_passes) {
+  file_descriptor_.auto_close = ownership_passes;
+}
+
+bool SharedMemoryHandle::OwnershipPassesToIPC() const {
+  return file_descriptor_.auto_close;
+}
+
+}  // namespace base
diff --git a/src/base/memory/shared_memory_handle_win.cc b/src/base/memory/shared_memory_handle_win.cc
index a2ff91a..7480151 100644
--- a/src/base/memory/shared_memory_handle_win.cc
+++ b/src/base/memory/shared_memory_handle_win.cc
@@ -9,14 +9,13 @@
 namespace base {
 
 SharedMemoryHandle::SharedMemoryHandle()
-    : handle_(nullptr), pid_(kNullProcessId), ownership_passes_to_ipc_(false) {}
+    : handle_(nullptr), ownership_passes_to_ipc_(false) {}
 
-SharedMemoryHandle::SharedMemoryHandle(HANDLE h, base::ProcessId pid)
-    : handle_(h), pid_(pid), ownership_passes_to_ipc_(false) {}
+SharedMemoryHandle::SharedMemoryHandle(HANDLE h)
+    : handle_(h), ownership_passes_to_ipc_(false) {}
 
 SharedMemoryHandle::SharedMemoryHandle(const SharedMemoryHandle& handle)
     : handle_(handle.handle_),
-      pid_(handle.pid_),
       ownership_passes_to_ipc_(handle.ownership_passes_to_ipc_) {}
 
 SharedMemoryHandle& SharedMemoryHandle::operator=(
@@ -25,26 +24,12 @@
     return *this;
 
   handle_ = handle.handle_;
-  pid_ = handle.pid_;
   ownership_passes_to_ipc_ = handle.ownership_passes_to_ipc_;
   return *this;
 }
 
-bool SharedMemoryHandle::operator==(const SharedMemoryHandle& handle) const {
-  // Invalid handles are always equal.
-  if (!IsValid() && !handle.IsValid())
-    return true;
-
-  return handle_ == handle.handle_ && pid_ == handle.pid_;
-}
-
-bool SharedMemoryHandle::operator!=(const SharedMemoryHandle& handle) const {
-  return !(*this == handle);
-}
-
 void SharedMemoryHandle::Close() const {
   DCHECK(handle_ != nullptr);
-  DCHECK(BelongsToCurrentProcess());
   ::CloseHandle(handle_);
 }
 
@@ -52,22 +37,23 @@
   return handle_ != nullptr;
 }
 
-bool SharedMemoryHandle::BelongsToCurrentProcess() const {
-  return pid_ == base::GetCurrentProcId();
-}
+SharedMemoryHandle SharedMemoryHandle::Duplicate() const {
+  HANDLE duped_handle;
+  ProcessHandle process = GetCurrentProcess();
+  BOOL success = ::DuplicateHandle(process, handle_, process, &duped_handle, 0,
+                                   FALSE, DUPLICATE_SAME_ACCESS);
+  if (!success)
+    return SharedMemoryHandle();
 
-bool SharedMemoryHandle::NeedsBrokering() const {
-  return BelongsToCurrentProcess();
+  base::SharedMemoryHandle handle(duped_handle);
+  handle.SetOwnershipPassesToIPC(true);
+  return handle;
 }
 
 HANDLE SharedMemoryHandle::GetHandle() const {
   return handle_;
 }
 
-base::ProcessId SharedMemoryHandle::GetPID() const {
-  return pid_;
-}
-
 void SharedMemoryHandle::SetOwnershipPassesToIPC(bool ownership_passes) {
   ownership_passes_to_ipc_ = ownership_passes;
 }
diff --git a/src/base/memory/shared_memory_helper.cc b/src/base/memory/shared_memory_helper.cc
index 7fbfb7a..f13e3fb 100644
--- a/src/base/memory/shared_memory_helper.cc
+++ b/src/base/memory/shared_memory_helper.cc
@@ -48,7 +48,7 @@
   path_unlinker.reset(path);
 
   if (options.share_read_only) {
-    // Also open as readonly so that we can ShareReadOnlyToProcess.
+    // Also open as readonly so that we can GetReadOnlyHandle.
     readonly_fd->reset(HANDLE_EINTR(open(path->value().c_str(), O_RDONLY)));
     if (!readonly_fd->is_valid()) {
       DPLOG(ERROR) << "open(\"" << path->value() << "\", O_RDONLY) failed";
diff --git a/src/base/memory/shared_memory_mac.cc b/src/base/memory/shared_memory_mac.cc
index d376daa..08f0b36 100644
--- a/src/base/memory/shared_memory_mac.cc
+++ b/src/base/memory/shared_memory_mac.cc
@@ -74,7 +74,7 @@
   if (kr != KERN_SUCCESS)
     return false;
 
-  *new_handle = SharedMemoryHandle(named_right, size, base::GetCurrentProcId());
+  *new_handle = SharedMemoryHandle(named_right, size);
   return true;
 }
 
@@ -83,7 +83,6 @@
 
 SharedMemory::SharedMemory()
     : mapped_memory_mechanism_(SharedMemoryHandle::MACH),
-      readonly_mapped_file_(-1),
       mapped_size_(0),
       memory_(NULL),
       read_only_(false),
@@ -92,7 +91,6 @@
 SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
     : shm_(handle),
       mapped_memory_mechanism_(SharedMemoryHandle::POSIX),
-      readonly_mapped_file_(-1),
       mapped_size_(0),
       memory_(NULL),
       read_only_(read_only),
@@ -109,11 +107,6 @@
 }
 
 // static
-SharedMemoryHandle SharedMemory::NULLHandle() {
-  return SharedMemoryHandle();
-}
-
-// static
 void SharedMemory::CloseHandle(const SharedMemoryHandle& handle) {
   handle.Close();
 }
@@ -191,10 +184,12 @@
   requested_size_ = options.size;
 
   int mapped_file = -1;
+  int readonly_mapped_file = -1;
   result = PrepareMapFile(std::move(fp), std::move(readonly_fd), &mapped_file,
-                          &readonly_mapped_file_);
-
+                          &readonly_mapped_file);
   shm_ = SharedMemoryHandle(FileDescriptor(mapped_file, false));
+  readonly_shm_ =
+      SharedMemoryHandle(FileDescriptor(readonly_mapped_file, false));
   return result;
 }
 
@@ -259,70 +254,27 @@
   shm_.Close();
   shm_ = SharedMemoryHandle();
   if (shm_.type_ == SharedMemoryHandle::POSIX) {
-    if (readonly_mapped_file_ > 0) {
-      if (IGNORE_EINTR(close(readonly_mapped_file_)) < 0)
-        PLOG(ERROR) << "close";
-      readonly_mapped_file_ = -1;
+    if (readonly_shm_.IsValid()) {
+      readonly_shm_.Close();
+      readonly_shm_ = SharedMemoryHandle();
     }
   }
 }
 
-bool SharedMemory::Share(SharedMemoryHandle* new_handle, ShareMode share_mode) {
-  if (shm_.type_ == SharedMemoryHandle::MACH) {
-    DCHECK(shm_.IsValid());
-
-    bool success = false;
-    switch (share_mode) {
-      case SHARE_CURRENT_MODE:
-        *new_handle = shm_.Duplicate();
-        success = true;
-        break;
-      case SHARE_READONLY:
-        success = MakeMachSharedMemoryHandleReadOnly(new_handle, shm_, memory_);
-        break;
-    }
-
-    if (success)
-      new_handle->SetOwnershipPassesToIPC(true);
-
-    return success;
+SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
+  if (shm_.type_ == SharedMemoryHandle::POSIX) {
+    // We could imagine re-opening the file from /dev/fd, but that can't make it
+    // readonly on Mac: https://codereview.chromium.org/27265002/#msg10.
+    CHECK(readonly_shm_.IsValid());
+    return readonly_shm_.Duplicate();
   }
 
-  int handle_to_dup = -1;
-  switch (share_mode) {
-    case SHARE_CURRENT_MODE:
-      handle_to_dup = shm_.file_descriptor_.fd;
-      break;
-    case SHARE_READONLY:
-      // We could imagine re-opening the file from /dev/fd, but that can't make
-      // it readonly on Mac: https://codereview.chromium.org/27265002/#msg10
-      CHECK_GE(readonly_mapped_file_, 0);
-      handle_to_dup = readonly_mapped_file_;
-      break;
-  }
-
-  const int new_fd = HANDLE_EINTR(dup(handle_to_dup));
-  if (new_fd < 0) {
-    DPLOG(ERROR) << "dup() failed.";
-    return false;
-  }
-
-  new_handle->file_descriptor_.fd = new_fd;
-  new_handle->type_ = SharedMemoryHandle::POSIX;
-
-  return true;
-}
-
-bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
-                                        SharedMemoryHandle* new_handle,
-                                        bool close_self,
-                                        ShareMode share_mode) {
-  bool success = Share(new_handle, share_mode);
-  if (close_self) {
-    Unmap();
-    Close();
-  }
-  return success;
+  DCHECK(shm_.IsValid());
+  base::SharedMemoryHandle new_handle;
+  bool success = MakeMachSharedMemoryHandleReadOnly(&new_handle, shm_, memory_);
+  if (success)
+    new_handle.SetOwnershipPassesToIPC(true);
+  return new_handle;
 }
 
 }  // namespace base
diff --git a/src/base/memory/shared_memory_mac_unittest.cc b/src/base/memory/shared_memory_mac_unittest.cc
index 4ccee89..bfb0368 100644
--- a/src/base/memory/shared_memory_mac_unittest.cc
+++ b/src/base/memory/shared_memory_mac_unittest.cc
@@ -247,8 +247,7 @@
   // The next mach port should be for a memory object.
   mach_port_t memory_object = ReceiveMachPort(client_port.get());
   SharedMemoryHandle shm(memory_object,
-                         SharedMemoryMacMultiProcessTest::s_memory_size,
-                         GetCurrentProcId());
+                         SharedMemoryMacMultiProcessTest::s_memory_size);
   SharedMemory shared_memory(shm, false);
   shared_memory.Map(SharedMemoryMacMultiProcessTest::s_memory_size);
   const char* start = static_cast<const char*>(shared_memory.memory());
@@ -287,8 +286,7 @@
   // The next mach port should be for a memory object.
   mach_port_t memory_object = ReceiveMachPort(client_port.get());
   SharedMemoryHandle shm(memory_object,
-                         SharedMemoryMacMultiProcessTest::s_memory_size,
-                         GetCurrentProcId());
+                         SharedMemoryMacMultiProcessTest::s_memory_size);
   SharedMemory shared_memory(shm, false);
   size_t page_size = SysInfo::VMAllocationGranularity();
   shared_memory.MapAt(page_size, 2 * page_size);
@@ -373,16 +371,15 @@
   ASSERT_DEATH(memset(shared_memory2.memory(), 'b', s_memory_size), "");
 }
 
-// Tests that the method ShareToProcess() works.
-TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcess) {
+// Tests that duplication of the underlying handle works.
+TEST_F(SharedMemoryMacMultiProcessTest, MachDuplicate) {
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   {
     std::unique_ptr<SharedMemory> shared_memory(
         CreateSharedMemory(s_memory_size));
 
-    SharedMemoryHandle shm2;
-    ASSERT_TRUE(shared_memory->ShareToProcess(GetCurrentProcId(), &shm2));
+    SharedMemoryHandle shm2 = shared_memory->handle().Duplicate();
     ASSERT_TRUE(shm2.IsValid());
     SharedMemory shared_memory2(shm2, true);
     shared_memory2.Map(s_memory_size);
@@ -394,9 +391,9 @@
   EXPECT_EQ(active_name_count, GetActiveNameCount());
 }
 
-// Tests that the method ShareReadOnlyToProcess() creates a memory object that
+// Tests that the method GetReadOnlyHandle() creates a memory object that
 // is read only.
-TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonly) {
+TEST_F(SharedMemoryMacMultiProcessTest, MachReadonly) {
   std::unique_ptr<SharedMemory> shared_memory(
       CreateSharedMemory(s_memory_size));
 
@@ -409,8 +406,7 @@
   ASSERT_EQ(VM_PROT_READ | VM_PROT_WRITE, max_prot);
 
   // Make a new memory object.
-  SharedMemoryHandle shm2;
-  ASSERT_TRUE(shared_memory->ShareReadOnlyToProcess(GetCurrentProcId(), &shm2));
+  SharedMemoryHandle shm2 = shared_memory->GetReadOnlyHandle();
   ASSERT_TRUE(shm2.IsValid());
 
   // Mapping with |readonly| set to |false| should fail.
@@ -435,17 +431,15 @@
   ASSERT_DEATH(memset(shared_memory2.memory(), 'b', s_memory_size), "");
 }
 
-// Tests that the method ShareReadOnlyToProcess() doesn't leak.
-TEST_F(SharedMemoryMacMultiProcessTest, MachShareToProcessReadonlyLeak) {
+// Tests that the method GetReadOnlyHandle() doesn't leak.
+TEST_F(SharedMemoryMacMultiProcessTest, MachReadonlyLeak) {
   mach_msg_type_number_t active_name_count = GetActiveNameCount();
 
   {
     std::unique_ptr<SharedMemory> shared_memory(
         CreateSharedMemory(s_memory_size));
 
-    SharedMemoryHandle shm2;
-    ASSERT_TRUE(
-        shared_memory->ShareReadOnlyToProcess(GetCurrentProcId(), &shm2));
+    SharedMemoryHandle shm2 = shared_memory->GetReadOnlyHandle();
     ASSERT_TRUE(shm2.IsValid());
 
     // Intentionally map with |readonly| set to |false|.
diff --git a/src/base/memory/shared_memory_nacl.cc b/src/base/memory/shared_memory_nacl.cc
index 945fc61..3ed4291 100644
--- a/src/base/memory/shared_memory_nacl.cc
+++ b/src/base/memory/shared_memory_nacl.cc
@@ -18,20 +18,14 @@
 namespace base {
 
 SharedMemory::SharedMemory()
-    : mapped_file_(-1),
-      mapped_size_(0),
-      memory_(NULL),
-      read_only_(false),
-      requested_size_(0) {
-}
+    : mapped_size_(0), memory_(NULL), read_only_(false), requested_size_(0) {}
 
 SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
-    : mapped_file_(handle.fd),
+    : shm_(handle),
       mapped_size_(0),
       memory_(NULL),
       read_only_(read_only),
-      requested_size_(0) {
-}
+      requested_size_(0) {}
 
 SharedMemory::~SharedMemory() {
   Unmap();
@@ -40,28 +34,19 @@
 
 // static
 bool SharedMemory::IsHandleValid(const SharedMemoryHandle& handle) {
-  return handle.fd >= 0;
-}
-
-// static
-SharedMemoryHandle SharedMemory::NULLHandle() {
-  return SharedMemoryHandle();
+  return handle.IsValid();
 }
 
 // static
 void SharedMemory::CloseHandle(const SharedMemoryHandle& handle) {
-  DCHECK_GE(handle.fd, 0);
-  if (close(handle.fd) < 0)
-    DPLOG(ERROR) << "close";
+  DCHECK(handle.IsValid());
+  handle.Close();
 }
 
 // static
 SharedMemoryHandle SharedMemory::DuplicateHandle(
     const SharedMemoryHandle& handle) {
-  int duped_handle = HANDLE_EINTR(dup(handle.fd));
-  if (duped_handle < 0)
-    return base::SharedMemory::NULLHandle();
-  return base::FileDescriptor(duped_handle, true);
+  return handle.Duplicate();
 }
 
 bool SharedMemory::CreateAndMapAnonymous(size_t size) {
@@ -83,7 +68,7 @@
 }
 
 bool SharedMemory::MapAt(off_t offset, size_t bytes) {
-  if (mapped_file_ == -1)
+  if (!shm_.IsValid())
     return false;
 
   if (bytes > static_cast<size_t>(std::numeric_limits<int>::max()))
@@ -93,7 +78,7 @@
     return false;
 
   memory_ = mmap(NULL, bytes, PROT_READ | (read_only_ ? 0 : PROT_WRITE),
-                 MAP_SHARED, mapped_file_, offset);
+                 MAP_SHARED, shm_.GetHandle(), offset);
 
   bool mmap_succeeded = memory_ != MAP_FAILED && memory_ != NULL;
   if (mmap_succeeded) {
@@ -119,48 +104,31 @@
 }
 
 SharedMemoryHandle SharedMemory::handle() const {
-  return FileDescriptor(mapped_file_, false);
+  SharedMemoryHandle handle_copy = shm_;
+  handle_copy.SetOwnershipPassesToIPC(false);
+  return handle_copy;
 }
 
 SharedMemoryHandle SharedMemory::TakeHandle() {
-  FileDescriptor handle(mapped_file_, true);
-  mapped_file_ = -1;
+  SharedMemoryHandle handle_copy = shm_;
+  handle_copy.SetOwnershipPassesToIPC(true);
+  shm_ = SharedMemoryHandle();
   memory_ = nullptr;
   mapped_size_ = 0;
-  return handle;
+  return handle_copy;
 }
 
 void SharedMemory::Close() {
-  if (mapped_file_ > 0) {
-    if (close(mapped_file_) < 0)
-      DPLOG(ERROR) << "close";
-    mapped_file_ = -1;
+  if (shm_.IsValid()) {
+    shm_.Close();
+    shm_ = SharedMemoryHandle();
   }
 }
 
-bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
-                                        SharedMemoryHandle *new_handle,
-                                        bool close_self,
-                                        ShareMode share_mode) {
-  if (share_mode == SHARE_READONLY) {
-    // Untrusted code can't create descriptors or handles, which is needed to
-    // drop permissions.
-    return false;
-  }
-  const int new_fd = dup(mapped_file_);
-  if (new_fd < 0) {
-    DPLOG(ERROR) << "dup() failed.";
-    return false;
-  }
-
-  new_handle->fd = new_fd;
-  new_handle->auto_close = true;
-
-  if (close_self) {
-    Unmap();
-    Close();
-  }
-  return true;
+SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
+  // Untrusted code can't create descriptors or handles, which is needed to
+  // drop permissions.
+  return SharedMemoryHandle();
 }
 
 }  // namespace base
diff --git a/src/base/memory/shared_memory_posix.cc b/src/base/memory/shared_memory_posix.cc
index 6b1ee5d..5cb6c42 100644
--- a/src/base/memory/shared_memory_posix.cc
+++ b/src/base/memory/shared_memory_posix.cc
@@ -33,22 +33,15 @@
 namespace base {
 
 SharedMemory::SharedMemory()
-    : mapped_file_(-1),
-      readonly_mapped_file_(-1),
-      mapped_size_(0),
-      memory_(NULL),
-      read_only_(false),
-      requested_size_(0) {
-}
+    : mapped_size_(0), memory_(NULL), read_only_(false), requested_size_(0) {}
 
 SharedMemory::SharedMemory(const SharedMemoryHandle& handle, bool read_only)
-    : mapped_file_(handle.fd),
-      readonly_mapped_file_(-1),
+    : shm_(handle),
+
       mapped_size_(0),
       memory_(NULL),
       read_only_(read_only),
-      requested_size_(0) {
-}
+      requested_size_(0) {}
 
 SharedMemory::~SharedMemory() {
   Unmap();
@@ -57,19 +50,13 @@
 
 // static
 bool SharedMemory::IsHandleValid(const SharedMemoryHandle& handle) {
-  return handle.fd >= 0;
-}
-
-// static
-SharedMemoryHandle SharedMemory::NULLHandle() {
-  return SharedMemoryHandle();
+  return handle.IsValid();
 }
 
 // static
 void SharedMemory::CloseHandle(const SharedMemoryHandle& handle) {
-  DCHECK_GE(handle.fd, 0);
-  if (IGNORE_EINTR(close(handle.fd)) < 0)
-    DPLOG(ERROR) << "close";
+  DCHECK(handle.IsValid());
+  handle.Close();
 }
 
 // static
@@ -80,16 +67,13 @@
 // static
 SharedMemoryHandle SharedMemory::DuplicateHandle(
     const SharedMemoryHandle& handle) {
-  int duped_handle = HANDLE_EINTR(dup(handle.fd));
-  if (duped_handle < 0)
-    return base::SharedMemory::NULLHandle();
-  return base::FileDescriptor(duped_handle, true);
+  return handle.Duplicate();
 }
 
 // static
 int SharedMemory::GetFdFromSharedMemoryHandle(
     const SharedMemoryHandle& handle) {
-  return handle.fd;
+  return handle.GetHandle();
 }
 
 bool SharedMemory::CreateAndMapAnonymous(size_t size) {
@@ -102,7 +86,7 @@
     const SharedMemoryHandle& handle,
     size_t* size) {
   struct stat st;
-  if (fstat(handle.fd, &st) != 0)
+  if (fstat(handle.GetHandle(), &st) != 0)
     return false;
   if (st.st_size < 0)
     return false;
@@ -117,7 +101,7 @@
 // In case we want to delete it later, it may be useful to save the value
 // of mem_filename after FilePathForMemoryName().
 bool SharedMemory::Create(const SharedMemoryCreateOptions& options) {
-  DCHECK_EQ(-1, mapped_file_);
+  DCHECK(!shm_.IsValid());
   if (options.size == 0) return false;
 
   if (options.size > static_cast<size_t>(std::numeric_limits<int>::max()))
@@ -185,7 +169,7 @@
     }
 
     if (options.share_read_only) {
-      // Also open as readonly so that we can ShareReadOnlyToProcess.
+      // Also open as readonly so that we can GetReadOnlyHandle.
       readonly_fd.reset(HANDLE_EINTR(open(path.value().c_str(), O_RDONLY)));
       if (!readonly_fd.is_valid()) {
         DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
@@ -224,8 +208,13 @@
     return false;
   }
 
-  return PrepareMapFile(std::move(fp), std::move(readonly_fd), &mapped_file_,
-                        &readonly_mapped_file_);
+  int mapped_file = -1;
+  int readonly_mapped_file = -1;
+  bool result = PrepareMapFile(std::move(fp), std::move(readonly_fd),
+                               &mapped_file, &readonly_mapped_file);
+  shm_ = SharedMemoryHandle::ImportHandle(mapped_file);
+  readonly_shm_ = SharedMemoryHandle::ImportHandle(readonly_mapped_file);
+  return result;
 }
 
 // Our current implementation of shmem is with mmap()ing of files.
@@ -257,13 +246,18 @@
     DPLOG(ERROR) << "open(\"" << path.value() << "\", O_RDONLY) failed";
     return false;
   }
-  return PrepareMapFile(std::move(fp), std::move(readonly_fd), &mapped_file_,
-                        &readonly_mapped_file_);
+  int mapped_file = -1;
+  int readonly_mapped_file = -1;
+  bool result = PrepareMapFile(std::move(fp), std::move(readonly_fd),
+                               &mapped_file, &readonly_mapped_file);
+  shm_ = SharedMemoryHandle::ImportHandle(mapped_file);
+  readonly_shm_ = SharedMemoryHandle::ImportHandle(readonly_mapped_file);
+  return result;
 }
 #endif  // !defined(OS_ANDROID)
 
 bool SharedMemory::MapAt(off_t offset, size_t bytes) {
-  if (mapped_file_ == -1)
+  if (!shm_.IsValid())
     return false;
 
   if (bytes > static_cast<size_t>(std::numeric_limits<int>::max()))
@@ -277,7 +271,7 @@
   // ashmem-determined size.
   if (bytes == 0) {
     DCHECK_EQ(0, offset);
-    int ashmem_bytes = ashmem_get_size_region(mapped_file_);
+    int ashmem_bytes = ashmem_get_size_region(shm_.GetHandle());
     if (ashmem_bytes < 0)
       return false;
     bytes = ashmem_bytes;
@@ -285,7 +279,7 @@
 #endif
 
   memory_ = mmap(NULL, bytes, PROT_READ | (read_only_ ? 0 : PROT_WRITE),
-                 MAP_SHARED, mapped_file_, offset);
+                 MAP_SHARED, shm_.GetHandle(), offset);
 
   bool mmap_succeeded = memory_ != (void*)-1 && memory_ != NULL;
   if (mmap_succeeded) {
@@ -313,27 +307,26 @@
 }
 
 SharedMemoryHandle SharedMemory::handle() const {
-  return FileDescriptor(mapped_file_, false);
+  return shm_;
 }
 
 SharedMemoryHandle SharedMemory::TakeHandle() {
-  FileDescriptor handle(mapped_file_, true);
-  mapped_file_ = -1;
+  SharedMemoryHandle handle_copy = shm_;
+  handle_copy.SetOwnershipPassesToIPC(true);
+  shm_ = SharedMemoryHandle();
   memory_ = nullptr;
   mapped_size_ = 0;
-  return handle;
+  return handle_copy;
 }
 
 void SharedMemory::Close() {
-  if (mapped_file_ > 0) {
-    if (IGNORE_EINTR(close(mapped_file_)) < 0)
-      PLOG(ERROR) << "close";
-    mapped_file_ = -1;
+  if (shm_.IsValid()) {
+    shm_.Close();
+    shm_ = SharedMemoryHandle();
   }
-  if (readonly_mapped_file_ > 0) {
-    if (IGNORE_EINTR(close(readonly_mapped_file_)) < 0)
-      PLOG(ERROR) << "close";
-    readonly_mapped_file_ = -1;
+  if (readonly_shm_.IsValid()) {
+    readonly_shm_.Close();
+    readonly_shm_ = SharedMemoryHandle();
   }
 }
 
@@ -362,42 +355,9 @@
 }
 #endif  // !defined(OS_ANDROID)
 
-bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
-                                        SharedMemoryHandle* new_handle,
-                                        bool close_self,
-                                        ShareMode share_mode) {
-  int handle_to_dup = -1;
-  switch(share_mode) {
-    case SHARE_CURRENT_MODE:
-      handle_to_dup = mapped_file_;
-      break;
-    case SHARE_READONLY:
-      // We could imagine re-opening the file from /dev/fd, but that can't make
-      // it readonly on Mac: https://codereview.chromium.org/27265002/#msg10
-      CHECK_GE(readonly_mapped_file_, 0);
-      handle_to_dup = readonly_mapped_file_;
-      break;
-  }
-
-  const int new_fd = HANDLE_EINTR(dup(handle_to_dup));
-  if (new_fd < 0) {
-    if (close_self) {
-      Unmap();
-      Close();
-    }
-    DPLOG(ERROR) << "dup() failed.";
-    return false;
-  }
-
-  new_handle->fd = new_fd;
-  new_handle->auto_close = true;
-
-  if (close_self) {
-    Unmap();
-    Close();
-  }
-
-  return true;
+SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
+  CHECK(readonly_shm_.IsValid());
+  return readonly_shm_.Duplicate();
 }
 
 bool SharedMemory::GetUniqueId(SharedMemory::UniqueId* id) const {
@@ -411,7 +371,8 @@
   // crbug.com/604726#c41.
   base::ThreadRestrictions::ScopedAllowIO allow_io;
   struct stat file_stat;
-  if (HANDLE_EINTR(::fstat(static_cast<int>(handle().fd), &file_stat)) != 0)
+  if (HANDLE_EINTR(
+          ::fstat(static_cast<int>(handle().GetHandle()), &file_stat)) != 0)
     return false;
   id->first = file_stat.st_dev;
   id->second = file_stat.st_ino;
diff --git a/src/base/memory/shared_memory_tracker.h b/src/base/memory/shared_memory_tracker.h
index fe1a3dd..039e48d 100644
--- a/src/base/memory/shared_memory_tracker.h
+++ b/src/base/memory/shared_memory_tracker.h
@@ -5,6 +5,8 @@
 #ifndef BASE_MEMORY_SHARED_MEMORY_TRACKER_H_
 #define BASE_MEMORY_SHARED_MEMORY_TRACKER_H_
 
+#include <unordered_map>
+
 #include "base/memory/shared_memory.h"
 #include "base/synchronization/lock.h"
 #include "base/trace_event/memory_dump_provider.h"
diff --git a/src/base/memory/shared_memory_unittest.cc b/src/base/memory/shared_memory_unittest.cc
index d87fad0..2cc7968 100644
--- a/src/base/memory/shared_memory_unittest.cc
+++ b/src/base/memory/shared_memory_unittest.cc
@@ -221,7 +221,7 @@
   memory.Close();
 
   EXPECT_EQ(ptr, memory.memory());
-  EXPECT_EQ(SharedMemory::NULLHandle(), memory.handle());
+  EXPECT_TRUE(!memory.handle().IsValid());
 
   for (size_t i = 0; i < kDataSize; i++) {
     EXPECT_EQ('G', ptr[i]);
@@ -316,7 +316,7 @@
   }
 }
 
-TEST(SharedMemoryTest, ShareReadOnly) {
+TEST(SharedMemoryTest, GetReadOnlyHandle) {
   StringPiece contents = "Hello World";
 
   SharedMemory writable_shmem;
@@ -332,9 +332,8 @@
   memcpy(writable_shmem.memory(), contents.data(), contents.size());
   EXPECT_TRUE(writable_shmem.Unmap());
 
-  SharedMemoryHandle readonly_handle;
-  ASSERT_TRUE(writable_shmem.ShareReadOnlyToProcess(GetCurrentProcessHandle(),
-                                                    &readonly_handle));
+  SharedMemoryHandle readonly_handle = writable_shmem.GetReadOnlyHandle();
+  ASSERT_TRUE(readonly_handle.IsValid());
   SharedMemory readonly_shmem(readonly_handle, /*readonly=*/true);
 
   ASSERT_TRUE(readonly_shmem.Map(contents.size()));
@@ -411,8 +410,8 @@
   memcpy(shmem.memory(), contents.data(), contents.size());
   EXPECT_TRUE(shmem.Unmap());
 
-  SharedMemoryHandle shared_handle;
-  ASSERT_TRUE(shmem.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
+  SharedMemoryHandle shared_handle = shmem.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 #if defined(OS_WIN)
   ASSERT_TRUE(shared_handle.OwnershipPassesToIPC());
 #endif
@@ -423,8 +422,8 @@
       contents,
       StringPiece(static_cast<const char*>(shared.memory()), contents.size()));
 
-  shared_handle = SharedMemoryHandle();
-  ASSERT_TRUE(shmem.ShareToProcess(GetCurrentProcessHandle(), &shared_handle));
+  shared_handle = shmem.handle().Duplicate();
+  ASSERT_TRUE(shared_handle.IsValid());
 #if defined(OS_WIN)
   ASSERT_TRUE(shared_handle.OwnershipPassesToIPC());
 #endif
@@ -606,7 +605,7 @@
   EXPECT_EQ(nullptr, shared_memory_open.memory());
 
   SharedMemory shared_memory_handle_local(
-      SharedMemoryHandle(section_handle.Take(), ::GetCurrentProcessId()), true);
+      SharedMemoryHandle(section_handle.Take()), true);
   EXPECT_FALSE(shared_memory_handle_local.Map(1));
   EXPECT_EQ(nullptr, shared_memory_handle_local.memory());
 
@@ -621,7 +620,7 @@
       ::GetCurrentProcess(), shared_memory_handle_dummy.handle().GetHandle(),
       ::GetCurrentProcess(), &handle_no_query, FILE_MAP_READ, FALSE, 0));
   SharedMemory shared_memory_handle_no_query(
-      SharedMemoryHandle(handle_no_query, ::GetCurrentProcessId()), true);
+      SharedMemoryHandle(handle_no_query), true);
   EXPECT_FALSE(shared_memory_handle_no_query.Map(1));
   EXPECT_EQ(nullptr, shared_memory_handle_no_query.memory());
 }
diff --git a/src/base/memory/shared_memory_win.cc b/src/base/memory/shared_memory_win.cc
index 9b6135e..1dfa10f 100644
--- a/src/base/memory/shared_memory_win.cc
+++ b/src/base/memory/shared_memory_win.cc
@@ -156,7 +156,6 @@
       memory_(NULL),
       read_only_(read_only),
       requested_size_(0) {
-  DCHECK(!handle.IsValid() || handle.BelongsToCurrentProcess());
   mapped_file_.Set(handle.GetHandle());
 }
 
@@ -171,11 +170,6 @@
 }
 
 // static
-SharedMemoryHandle SharedMemory::NULLHandle() {
-  return SharedMemoryHandle();
-}
-
-// static
 void SharedMemory::CloseHandle(const SharedMemoryHandle& handle) {
   handle.Close();
 }
@@ -190,18 +184,7 @@
 // static
 SharedMemoryHandle SharedMemory::DuplicateHandle(
     const SharedMemoryHandle& handle) {
-  DCHECK(handle.BelongsToCurrentProcess());
-  HANDLE duped_handle;
-  ProcessHandle process = GetCurrentProcess();
-  BOOL success =
-      ::DuplicateHandle(process, handle.GetHandle(), process, &duped_handle, 0,
-                        FALSE, DUPLICATE_SAME_ACCESS);
-  if (success) {
-    base::SharedMemoryHandle handle(duped_handle, GetCurrentProcId());
-    handle.SetOwnershipPassesToIPC(true);
-    return handle;
-  }
-  return SharedMemoryHandle();
+  return handle.Duplicate();
 }
 
 bool SharedMemory::CreateAndMapAnonymous(size_t size) {
@@ -343,50 +326,28 @@
   return true;
 }
 
-bool SharedMemory::ShareToProcessCommon(ProcessHandle process,
-                                        SharedMemoryHandle* new_handle,
-                                        bool close_self,
-                                        ShareMode share_mode) {
-  *new_handle = SharedMemoryHandle();
-  DWORD access = FILE_MAP_READ | SECTION_QUERY;
-  DWORD options = 0;
-  HANDLE mapped_file = mapped_file_.Get();
+SharedMemoryHandle SharedMemory::GetReadOnlyHandle() {
   HANDLE result;
-  if (share_mode == SHARE_CURRENT_MODE && !read_only_)
-    access |= FILE_MAP_WRITE;
-  if (close_self) {
-    // DUPLICATE_CLOSE_SOURCE causes DuplicateHandle to close mapped_file.
-    options = DUPLICATE_CLOSE_SOURCE;
-    HANDLE detached_handle = mapped_file_.Take();
-    DCHECK_EQ(detached_handle, mapped_file);
-    Unmap();
+  ProcessHandle process = GetCurrentProcess();
+  if (!::DuplicateHandle(process, mapped_file_.Get(), process, &result,
+                         FILE_MAP_READ | SECTION_QUERY, FALSE, 0)) {
+    return SharedMemoryHandle();
   }
-
-  if (process == GetCurrentProcess() && close_self) {
-    *new_handle = SharedMemoryHandle(mapped_file, base::GetCurrentProcId());
-    return true;
-  }
-
-  if (!::DuplicateHandle(GetCurrentProcess(), mapped_file, process, &result,
-                         access, FALSE, options)) {
-    return false;
-  }
-  *new_handle = SharedMemoryHandle(result, base::GetProcId(process));
-  new_handle->SetOwnershipPassesToIPC(true);
-  return true;
+  SharedMemoryHandle handle = SharedMemoryHandle(result);
+  handle.SetOwnershipPassesToIPC(true);
+  return handle;
 }
 
-
 void SharedMemory::Close() {
   mapped_file_.Close();
 }
 
 SharedMemoryHandle SharedMemory::handle() const {
-  return SharedMemoryHandle(mapped_file_.Get(), base::GetCurrentProcId());
+  return SharedMemoryHandle(mapped_file_.Get());
 }
 
 SharedMemoryHandle SharedMemory::TakeHandle() {
-  SharedMemoryHandle handle(mapped_file_.Take(), base::GetCurrentProcId());
+  SharedMemoryHandle handle(mapped_file_.Take());
   handle.SetOwnershipPassesToIPC(true);
   memory_ = nullptr;
   mapped_size_ = 0;
diff --git a/src/base/metrics/field_trial.cc b/src/base/metrics/field_trial.cc
index 6b38d55..e6274bb 100644
--- a/src/base/metrics/field_trial.cc
+++ b/src/base/metrics/field_trial.cc
@@ -221,10 +221,8 @@
 
 #if defined(OS_POSIX) && !defined(OS_NACL)
 int CreateReadOnlyHandle(FieldTrialList::FieldTrialAllocator* allocator) {
-  SharedMemoryHandle new_handle;
-  allocator->shared_memory()->ShareReadOnlyToProcess(GetCurrentProcessHandle(),
-                                                     &new_handle);
-  return SharedMemory::GetFdFromSharedMemoryHandle(new_handle);
+  SharedMemoryHandle handle = allocator->shared_memory()->GetReadOnlyHandle();
+  return SharedMemory::GetFdFromSharedMemoryHandle(handle);
 }
 #endif
 
@@ -414,7 +412,8 @@
       ref_(FieldTrialList::FieldTrialAllocator::kReferenceNull) {
   DCHECK_GT(total_probability, 0);
   DCHECK(!trial_name_.empty());
-  DCHECK(!default_group_name_.empty());
+  DCHECK(!default_group_name_.empty())
+      << "Trial " << trial_name << " is missing a default group name.";
 }
 
 FieldTrial::~FieldTrial() {}
@@ -1138,7 +1137,7 @@
     const std::string& handle_switch) {
   int field_trial_handle = std::stoi(handle_switch);
   HANDLE handle = reinterpret_cast<HANDLE>(field_trial_handle);
-  SharedMemoryHandle shm_handle(handle, GetCurrentProcId());
+  SharedMemoryHandle shm_handle(handle);
   return FieldTrialList::CreateTrialsFromSharedMemoryHandle(shm_handle);
 }
 #endif
@@ -1156,11 +1155,7 @@
   if (fd == -1)
     return false;
 
-#if defined(OS_MACOSX) && !defined(OS_IOS)
   SharedMemoryHandle shm_handle(FileDescriptor(fd, true));
-#else
-  SharedMemoryHandle shm_handle(fd, true);
-#endif
 
   bool result = FieldTrialList::CreateTrialsFromSharedMemoryHandle(shm_handle);
   DCHECK(result);
diff --git a/src/base/metrics/histogram.cc b/src/base/metrics/histogram.cc
index 2643793..c35f76c 100644
--- a/src/base/metrics/histogram.cc
+++ b/src/base/metrics/histogram.cc
@@ -276,14 +276,12 @@
     Sample minimum,
     Sample maximum,
     const BucketRanges* ranges,
-    HistogramBase::AtomicCount* counts,
-    HistogramBase::AtomicCount* logged_counts,
-    uint32_t counts_size,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
     HistogramSamples::Metadata* meta,
     HistogramSamples::Metadata* logged_meta) {
   return WrapUnique(new Histogram(name, minimum, maximum, ranges, counts,
-                                  logged_counts, counts_size, meta,
-                                  logged_meta));
+                                  logged_counts, meta, logged_meta));
 }
 
 // Calculate what range of values are held in each bucket.
@@ -531,20 +529,19 @@
                      Sample minimum,
                      Sample maximum,
                      const BucketRanges* ranges,
-                     HistogramBase::AtomicCount* counts,
-                     HistogramBase::AtomicCount* logged_counts,
-                     uint32_t counts_size,
+                     const DelayedPersistentAllocation& counts,
+                     const DelayedPersistentAllocation& logged_counts,
                      HistogramSamples::Metadata* meta,
                      HistogramSamples::Metadata* logged_meta)
-  : HistogramBase(name),
-    bucket_ranges_(ranges),
-    declared_min_(minimum),
-    declared_max_(maximum) {
+    : HistogramBase(name),
+      bucket_ranges_(ranges),
+      declared_min_(minimum),
+      declared_max_(maximum) {
   if (ranges) {
-    samples_.reset(new SampleVector(HashMetricName(name),
-                                    counts, counts_size, meta, ranges));
-    logged_samples_.reset(new SampleVector(samples_->id(), logged_counts,
-                                           counts_size, logged_meta, ranges));
+    samples_.reset(
+        new PersistentSampleVector(HashMetricName(name), ranges, meta, counts));
+    logged_samples_.reset(new PersistentSampleVector(
+        samples_->id(), ranges, logged_meta, logged_counts));
   }
 }
 
@@ -675,7 +672,7 @@
   DCHECK_EQ(sample_count, past);
 }
 
-double Histogram::GetPeakBucketSize(const SampleVector& samples) const {
+double Histogram::GetPeakBucketSize(const SampleVectorBase& samples) const {
   double max = 0;
   for (uint32_t i = 0; i < bucket_count() ; ++i) {
     double current_size = GetBucketSize(samples.GetCountAtIndex(i), i);
@@ -685,7 +682,7 @@
   return max;
 }
 
-void Histogram::WriteAsciiHeader(const SampleVector& samples,
+void Histogram::WriteAsciiHeader(const SampleVectorBase& samples,
                                  Count sample_count,
                                  std::string* output) const {
   StringAppendF(output,
@@ -834,14 +831,12 @@
     Sample minimum,
     Sample maximum,
     const BucketRanges* ranges,
-    HistogramBase::AtomicCount* counts,
-    HistogramBase::AtomicCount* logged_counts,
-    uint32_t counts_size,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
     HistogramSamples::Metadata* meta,
     HistogramSamples::Metadata* logged_meta) {
-  return WrapUnique(new LinearHistogram(name, minimum, maximum, ranges,
-                                              counts, logged_counts,
-                                              counts_size, meta, logged_meta));
+  return WrapUnique(new LinearHistogram(name, minimum, maximum, ranges, counts,
+                                        logged_counts, meta, logged_meta));
 }
 
 HistogramBase* LinearHistogram::FactoryGetWithRangeDescription(
@@ -870,17 +865,23 @@
     : Histogram(name, minimum, maximum, ranges) {
 }
 
-LinearHistogram::LinearHistogram(const std::string& name,
-                                 Sample minimum,
-                                 Sample maximum,
-                                 const BucketRanges* ranges,
-                                 HistogramBase::AtomicCount* counts,
-                                 HistogramBase::AtomicCount* logged_counts,
-                                 uint32_t counts_size,
-                                 HistogramSamples::Metadata* meta,
-                                 HistogramSamples::Metadata* logged_meta)
-    : Histogram(name, minimum, maximum, ranges, counts, logged_counts,
-                counts_size, meta, logged_meta) {}
+LinearHistogram::LinearHistogram(
+    const std::string& name,
+    Sample minimum,
+    Sample maximum,
+    const BucketRanges* ranges,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
+    HistogramSamples::Metadata* meta,
+    HistogramSamples::Metadata* logged_meta)
+    : Histogram(name,
+                minimum,
+                maximum,
+                ranges,
+                counts,
+                logged_counts,
+                meta,
+                logged_meta) {}
 
 double LinearHistogram::GetBucketSize(Count current, uint32_t i) const {
   DCHECK_GT(ranges(i + 1), ranges(i));
@@ -980,12 +981,12 @@
 std::unique_ptr<HistogramBase> BooleanHistogram::PersistentCreate(
     const std::string& name,
     const BucketRanges* ranges,
-    HistogramBase::AtomicCount* counts,
-    HistogramBase::AtomicCount* logged_counts,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
     HistogramSamples::Metadata* meta,
     HistogramSamples::Metadata* logged_meta) {
-  return WrapUnique(new BooleanHistogram(
-      name, ranges, counts, logged_counts, meta, logged_meta));
+  return WrapUnique(new BooleanHistogram(name, ranges, counts, logged_counts,
+                                         meta, logged_meta));
 }
 
 HistogramType BooleanHistogram::GetHistogramType() const {
@@ -996,13 +997,20 @@
                                    const BucketRanges* ranges)
     : LinearHistogram(name, 1, 2, ranges) {}
 
-BooleanHistogram::BooleanHistogram(const std::string& name,
-                                   const BucketRanges* ranges,
-                                   HistogramBase::AtomicCount* counts,
-                                   HistogramBase::AtomicCount* logged_counts,
-                                   HistogramSamples::Metadata* meta,
-                                   HistogramSamples::Metadata* logged_meta)
-    : LinearHistogram(name, 1, 2, ranges, counts, logged_counts, 2, meta,
+BooleanHistogram::BooleanHistogram(
+    const std::string& name,
+    const BucketRanges* ranges,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
+    HistogramSamples::Metadata* meta,
+    HistogramSamples::Metadata* logged_meta)
+    : LinearHistogram(name,
+                      1,
+                      2,
+                      ranges,
+                      counts,
+                      logged_counts,
+                      meta,
                       logged_meta) {}
 
 HistogramBase* BooleanHistogram::DeserializeInfoImpl(PickleIterator* iter) {
@@ -1087,13 +1095,12 @@
 std::unique_ptr<HistogramBase> CustomHistogram::PersistentCreate(
     const std::string& name,
     const BucketRanges* ranges,
-    HistogramBase::AtomicCount* counts,
-    HistogramBase::AtomicCount* logged_counts,
-    uint32_t counts_size,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
     HistogramSamples::Metadata* meta,
     HistogramSamples::Metadata* logged_meta) {
-  return WrapUnique(new CustomHistogram(
-      name, ranges, counts, logged_counts, counts_size, meta, logged_meta));
+  return WrapUnique(new CustomHistogram(name, ranges, counts, logged_counts,
+                                        meta, logged_meta));
 }
 
 HistogramType CustomHistogram::GetHistogramType() const {
@@ -1122,20 +1129,19 @@
                 ranges->range(ranges->bucket_count() - 1),
                 ranges) {}
 
-CustomHistogram::CustomHistogram(const std::string& name,
-                                 const BucketRanges* ranges,
-                                 HistogramBase::AtomicCount* counts,
-                                 HistogramBase::AtomicCount* logged_counts,
-                                 uint32_t counts_size,
-                                 HistogramSamples::Metadata* meta,
-                                 HistogramSamples::Metadata* logged_meta)
+CustomHistogram::CustomHistogram(
+    const std::string& name,
+    const BucketRanges* ranges,
+    const DelayedPersistentAllocation& counts,
+    const DelayedPersistentAllocation& logged_counts,
+    HistogramSamples::Metadata* meta,
+    HistogramSamples::Metadata* logged_meta)
     : Histogram(name,
                 ranges->range(1),
                 ranges->range(ranges->bucket_count() - 1),
                 ranges,
                 counts,
                 logged_counts,
-                counts_size,
                 meta,
                 logged_meta) {}
 
diff --git a/src/base/metrics/histogram.h b/src/base/metrics/histogram.h
index 20d5104..503d246 100644
--- a/src/base/metrics/histogram.h
+++ b/src/base/metrics/histogram.h
@@ -86,11 +86,13 @@
 
 class BooleanHistogram;
 class CustomHistogram;
+class DelayedPersistentAllocation;
 class Histogram;
 class LinearHistogram;
 class Pickle;
 class PickleIterator;
 class SampleVector;
+class SampleVectorBase;
 
 class BASE_EXPORT Histogram : public HistogramBase {
  public:
@@ -142,9 +144,8 @@
       Sample minimum,
       Sample maximum,
       const BucketRanges* ranges,
-      HistogramBase::AtomicCount* counts,
-      HistogramBase::AtomicCount* logged_counts,
-      uint32_t counts_size,
+      const DelayedPersistentAllocation& counts,
+      const DelayedPersistentAllocation& logged_counts,
       HistogramSamples::Metadata* meta,
       HistogramSamples::Metadata* logged_meta);
 
@@ -231,9 +232,8 @@
             Sample minimum,
             Sample maximum,
             const BucketRanges* ranges,
-            HistogramBase::AtomicCount* counts,
-            HistogramBase::AtomicCount* logged_counts,
-            uint32_t counts_size,
+            const DelayedPersistentAllocation& counts,
+            const DelayedPersistentAllocation& logged_counts,
             HistogramSamples::Metadata* meta,
             HistogramSamples::Metadata* logged_meta);
 
@@ -275,10 +275,10 @@
                       std::string* output) const;
 
   // Find out how large (graphically) the largest bucket will appear to be.
-  double GetPeakBucketSize(const SampleVector& samples) const;
+  double GetPeakBucketSize(const SampleVectorBase& samples) const;
 
   // Write a common header message describing this histogram.
-  void WriteAsciiHeader(const SampleVector& samples,
+  void WriteAsciiHeader(const SampleVectorBase& samples,
                         Count sample_count,
                         std::string* output) const;
 
@@ -305,7 +305,7 @@
 
   // Finally, provide the state that changes with the addition of each new
   // sample.
-  std::unique_ptr<SampleVector> samples_;
+  std::unique_ptr<SampleVectorBase> samples_;
 
   // Also keep a previous uploaded state for calculating deltas.
   std::unique_ptr<HistogramSamples> logged_samples_;
@@ -358,9 +358,8 @@
       Sample minimum,
       Sample maximum,
       const BucketRanges* ranges,
-      HistogramBase::AtomicCount* counts,
-      HistogramBase::AtomicCount* logged_counts,
-      uint32_t counts_size,
+      const DelayedPersistentAllocation& counts,
+      const DelayedPersistentAllocation& logged_counts,
       HistogramSamples::Metadata* meta,
       HistogramSamples::Metadata* logged_meta);
 
@@ -401,9 +400,8 @@
                   Sample minimum,
                   Sample maximum,
                   const BucketRanges* ranges,
-                  HistogramBase::AtomicCount* counts,
-                  HistogramBase::AtomicCount* logged_counts,
-                  uint32_t counts_size,
+                  const DelayedPersistentAllocation& counts,
+                  const DelayedPersistentAllocation& logged_counts,
                   HistogramSamples::Metadata* meta,
                   HistogramSamples::Metadata* logged_meta);
 
@@ -447,8 +445,8 @@
   static std::unique_ptr<HistogramBase> PersistentCreate(
       const std::string& name,
       const BucketRanges* ranges,
-      HistogramBase::AtomicCount* counts,
-      HistogramBase::AtomicCount* logged_counts,
+      const DelayedPersistentAllocation& counts,
+      const DelayedPersistentAllocation& logged_counts,
       HistogramSamples::Metadata* meta,
       HistogramSamples::Metadata* logged_meta);
 
@@ -461,8 +459,8 @@
   BooleanHistogram(const std::string& name, const BucketRanges* ranges);
   BooleanHistogram(const std::string& name,
                    const BucketRanges* ranges,
-                   HistogramBase::AtomicCount* counts,
-                   HistogramBase::AtomicCount* logged_counts,
+                   const DelayedPersistentAllocation& counts,
+                   const DelayedPersistentAllocation& logged_counts,
                    HistogramSamples::Metadata* meta,
                    HistogramSamples::Metadata* logged_meta);
 
@@ -497,9 +495,8 @@
   static std::unique_ptr<HistogramBase> PersistentCreate(
       const std::string& name,
       const BucketRanges* ranges,
-      HistogramBase::AtomicCount* counts,
-      HistogramBase::AtomicCount* logged_counts,
-      uint32_t counts_size,
+      const DelayedPersistentAllocation& counts,
+      const DelayedPersistentAllocation& logged_counts,
       HistogramSamples::Metadata* meta,
       HistogramSamples::Metadata* logged_meta);
 
@@ -522,9 +519,8 @@
 
   CustomHistogram(const std::string& name,
                   const BucketRanges* ranges,
-                  HistogramBase::AtomicCount* counts,
-                  HistogramBase::AtomicCount* logged_counts,
-                  uint32_t counts_size,
+                  const DelayedPersistentAllocation& counts,
+                  const DelayedPersistentAllocation& logged_counts,
                   HistogramSamples::Metadata* meta,
                   HistogramSamples::Metadata* logged_meta);
 
diff --git a/src/base/metrics/histogram_samples.cc b/src/base/metrics/histogram_samples.cc
index 992617b..59f38fc 100644
--- a/src/base/metrics/histogram_samples.cc
+++ b/src/base/metrics/histogram_samples.cc
@@ -4,13 +4,27 @@
 
 #include "base/metrics/histogram_samples.h"
 
+#include <limits>
+
 #include "base/compiler_specific.h"
+#include "base/numerics/safe_conversions.h"
+#include "base/numerics/safe_math.h"
 #include "base/pickle.h"
 
 namespace base {
 
 namespace {
 
+// A shorthand constant for the max value of size_t.
+constexpr size_t kSizeMax = std::numeric_limits<size_t>::max();
+
+// A constant stored in an AtomicSingleSample (as_atomic) to indicate that the
+// sample is "disabled" and no further accumulation should be done with it. The
+// value is chosen such that it will be MAX_UINT16 for both |bucket| & |count|,
+// and thus less likely to conflict with real use. Conflicts are explicitly
+// handled in the code but it's worth making them as unlikely as possible.
+constexpr int32_t kDisabledSingleSample = -1;
+
 class SampleCountPickleIterator : public SampleCountIterator {
  public:
   explicit SampleCountPickleIterator(PickleIterator* iter);
@@ -18,14 +32,14 @@
   bool Done() const override;
   void Next() override;
   void Get(HistogramBase::Sample* min,
-           HistogramBase::Sample* max,
+           int64_t* max,
            HistogramBase::Count* count) const override;
 
  private:
   PickleIterator* const iter_;
 
   HistogramBase::Sample min_;
-  HistogramBase::Sample max_;
+  int64_t max_;
   HistogramBase::Count count_;
   bool is_done_;
 };
@@ -42,14 +56,14 @@
 
 void SampleCountPickleIterator::Next() {
   DCHECK(!Done());
-  if (!iter_->ReadInt(&min_) ||
-      !iter_->ReadInt(&max_) ||
-      !iter_->ReadInt(&count_))
+  if (!iter_->ReadInt(&min_) || !iter_->ReadInt64(&max_) ||
+      !iter_->ReadInt(&count_)) {
     is_done_ = true;
+  }
 }
 
 void SampleCountPickleIterator::Get(HistogramBase::Sample* min,
-                                    HistogramBase::Sample* max,
+                                    int64_t* max,
                                     HistogramBase::Count* count) const {
   DCHECK(!Done());
   *min = min_;
@@ -59,6 +73,97 @@
 
 }  // namespace
 
+static_assert(sizeof(HistogramSamples::AtomicSingleSample) ==
+                  sizeof(subtle::Atomic32),
+              "AtomicSingleSample isn't 32 bits");
+
+HistogramSamples::SingleSample HistogramSamples::AtomicSingleSample::Load()
+    const {
+  AtomicSingleSample single_sample = subtle::Acquire_Load(&as_atomic);
+
+  // If the sample was extracted/disabled, it's still zero to the outside.
+  if (single_sample.as_atomic == kDisabledSingleSample)
+    single_sample.as_atomic = 0;
+
+  return single_sample.as_parts;
+}
+
+HistogramSamples::SingleSample HistogramSamples::AtomicSingleSample::Extract(
+    bool disable) {
+  AtomicSingleSample single_sample = subtle::NoBarrier_AtomicExchange(
+      &as_atomic, disable ? kDisabledSingleSample : 0);
+  if (single_sample.as_atomic == kDisabledSingleSample)
+    single_sample.as_atomic = 0;
+  return single_sample.as_parts;
+}
+
+bool HistogramSamples::AtomicSingleSample::Accumulate(
+    size_t bucket,
+    HistogramBase::Count count) {
+  if (count == 0)
+    return true;
+
+  // Convert the parameters to 16-bit variables because it's all 16-bit below.
+  if (count < std::numeric_limits<uint16_t>::min() ||
+      count > std::numeric_limits<uint16_t>::max() ||
+      bucket > std::numeric_limits<uint16_t>::max()) {
+    return false;
+  }
+  uint16_t bucket16 = static_cast<uint16_t>(bucket);
+  uint16_t count16 = static_cast<uint16_t>(count);
+
+  // A local, unshared copy of the single-sample is necessary so the parts
+  // can be manipulated without worrying about atomicity.
+  AtomicSingleSample single_sample;
+
+  bool sample_updated;
+  do {
+    subtle::Atomic32 original = subtle::Acquire_Load(&as_atomic);
+    if (original == kDisabledSingleSample)
+      return false;
+    single_sample.as_atomic = original;
+    if (single_sample.as_atomic != 0) {
+      // Only the same bucket (parameter and stored) can be counted multiple
+      // times.
+      if (single_sample.as_parts.bucket != bucket16)
+        return false;
+    } else {
+      // The |single_ sample| was zero so becomes the |bucket| parameter, the
+      // contents of which were checked above to fit in 16 bits.
+      single_sample.as_parts.bucket = bucket16;
+    }
+
+    // Update count, making sure that it doesn't overflow.
+    CheckedNumeric<uint16_t> new_count(single_sample.as_parts.count);
+    new_count += count16;
+    if (!new_count.AssignIfValid(&single_sample.as_parts.count))
+      return false;
+
+    // Don't let this become equivalent to the "disabled" value.
+    if (single_sample.as_atomic == kDisabledSingleSample)
+      return false;
+
+    // Store the updated single-sample back into memory. |existing| is what
+    // was in that memory location at the time of the call; if it doesn't
+    // match |original| then the swap didn't happen so loop again.
+    subtle::Atomic32 existing = subtle::Release_CompareAndSwap(
+        &as_atomic, original, single_sample.as_atomic);
+    sample_updated = (existing == original);
+  } while (!sample_updated);
+
+  return true;
+}
+
+bool HistogramSamples::AtomicSingleSample::IsDisabled() const {
+  return subtle::Acquire_Load(&as_atomic) == kDisabledSingleSample;
+}
+
+HistogramSamples::LocalMetadata::LocalMetadata() {
+  // This is the same way it's done for persistent metadata since no ctor
+  // is called for the data members in that case.
+  memset(this, 0, sizeof(*this));
+}
+
 // Don't try to delegate behavior to the constructor below that accepts a
 // Matadata pointer by passing &local_meta_. Such cannot be reliably passed
 // because it has not yet been constructed -- no member variables have; the
@@ -83,9 +188,7 @@
 HistogramSamples::~HistogramSamples() {}
 
 void HistogramSamples::Add(const HistogramSamples& other) {
-  IncreaseSum(other.sum());
-  subtle::NoBarrier_AtomicIncrement(&meta_->redundant_count,
-                                    other.redundant_count());
+  IncreaseSumAndCount(other.sum(), other.redundant_count());
   std::unique_ptr<SampleCountIterator> it = other.Iterator();
   bool success = AddSubtractImpl(it.get(), ADD);
   DCHECK(success);
@@ -98,18 +201,14 @@
   if (!iter->ReadInt64(&sum) || !iter->ReadInt(&redundant_count))
     return false;
 
-  IncreaseSum(sum);
-  subtle::NoBarrier_AtomicIncrement(&meta_->redundant_count,
-                                    redundant_count);
+  IncreaseSumAndCount(sum, redundant_count);
 
   SampleCountPickleIterator pickle_iter(iter);
   return AddSubtractImpl(&pickle_iter, ADD);
 }
 
 void HistogramSamples::Subtract(const HistogramSamples& other) {
-  IncreaseSum(-other.sum());
-  subtle::NoBarrier_AtomicIncrement(&meta_->redundant_count,
-                                    -other.redundant_count());
+  IncreaseSumAndCount(-other.sum(), -other.redundant_count());
   std::unique_ptr<SampleCountIterator> it = other.Iterator();
   bool success = AddSubtractImpl(it.get(), SUBTRACT);
   DCHECK(success);
@@ -122,29 +221,38 @@
     return false;
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
   for (std::unique_ptr<SampleCountIterator> it = Iterator(); !it->Done();
        it->Next()) {
     it->Get(&min, &max, &count);
-    if (!pickle->WriteInt(min) ||
-        !pickle->WriteInt(max) ||
-        !pickle->WriteInt(count))
+    if (!pickle->WriteInt(min) || !pickle->WriteInt64(max) ||
+        !pickle->WriteInt(count)) {
       return false;
+    }
   }
   return true;
 }
 
-void HistogramSamples::IncreaseSum(int64_t diff) {
-#ifdef ARCH_CPU_64_BITS
-  subtle::NoBarrier_AtomicIncrement(&meta_->sum, diff);
-#else
-  meta_->sum += diff;
-#endif
+bool HistogramSamples::AccumulateSingleSample(HistogramBase::Sample value,
+                                              HistogramBase::Count count,
+                                              size_t bucket) {
+  if (single_sample().Accumulate(bucket, count)) {
+    // Success. Update the (separate) sum and redundant-count.
+    IncreaseSumAndCount(strict_cast<int64_t>(value) * count, count);
+    return true;
+  }
+  return false;
 }
 
-void HistogramSamples::IncreaseRedundantCount(HistogramBase::Count diff) {
-  subtle::NoBarrier_AtomicIncrement(&meta_->redundant_count, diff);
+void HistogramSamples::IncreaseSumAndCount(int64_t sum,
+                                           HistogramBase::Count count) {
+#ifdef ARCH_CPU_64_BITS
+  subtle::NoBarrier_AtomicIncrement(&meta_->sum, sum);
+#else
+  meta_->sum += sum;
+#endif
+  subtle::NoBarrier_AtomicIncrement(&meta_->redundant_count, count);
 }
 
 SampleCountIterator::~SampleCountIterator() {}
@@ -154,4 +262,46 @@
   return false;
 }
 
+SingleSampleIterator::SingleSampleIterator(HistogramBase::Sample min,
+                                           int64_t max,
+                                           HistogramBase::Count count)
+    : SingleSampleIterator(min, max, count, kSizeMax) {}
+
+SingleSampleIterator::SingleSampleIterator(HistogramBase::Sample min,
+                                           int64_t max,
+                                           HistogramBase::Count count,
+                                           size_t bucket_index)
+    : min_(min), max_(max), bucket_index_(bucket_index), count_(count) {}
+
+SingleSampleIterator::~SingleSampleIterator() {}
+
+bool SingleSampleIterator::Done() const {
+  return count_ == 0;
+}
+
+void SingleSampleIterator::Next() {
+  DCHECK(!Done());
+  count_ = 0;
+}
+
+void SingleSampleIterator::Get(HistogramBase::Sample* min,
+                               int64_t* max,
+                               HistogramBase::Count* count) const {
+  DCHECK(!Done());
+  if (min != nullptr)
+    *min = min_;
+  if (max != nullptr)
+    *max = max_;
+  if (count != nullptr)
+    *count = count_;
+}
+
+bool SingleSampleIterator::GetBucketIndex(size_t* index) const {
+  DCHECK(!Done());
+  if (bucket_index_ == kSizeMax)
+    return false;
+  *index = bucket_index_;
+  return true;
+}
+
 }  // namespace base
diff --git a/src/base/metrics/histogram_samples.h b/src/base/metrics/histogram_samples.h
index 93f6d21..cc27d3d 100644
--- a/src/base/metrics/histogram_samples.h
+++ b/src/base/metrics/histogram_samples.h
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <memory>
 
 #include "base/atomicops.h"
@@ -24,8 +25,64 @@
 // elements must be of a fixed width to ensure 32/64-bit interoperability.
 // If this structure changes, bump the version number for kTypeIdHistogram
 // in persistent_histogram_allocator.cc.
+//
+// Note that though these samples are individually consistent (through the use
+// of atomic operations on the counts), there is only "eventual consistency"
+// overall when multiple threads are accessing this data. That means that the
+// sum, redundant-count, etc. could be momentarily out-of-sync with the stored
+// counts but will settle to a consistent "steady state" once all threads have
+// exited this code.
 class BASE_EXPORT HistogramSamples {
  public:
+  // A single bucket and count. To fit within a single atomic on 32-bit build
+  // architectures, both |bucket| and |count| are limited in size to 16 bits.
+  // This limits the functionality somewhat but if an entry can't fit then
+  // the full array of samples can be allocated and used.
+  struct SingleSample {
+    uint16_t bucket;
+    uint16_t count;
+  };
+
+  // A structure for managing an atomic single sample. Because this is generally
+  // used in association with other atomic values, the defined methods use
+  // acquire/release operations to guarantee ordering with outside values.
+  union AtomicSingleSample {
+    AtomicSingleSample() : as_atomic(0) {}
+    AtomicSingleSample(subtle::Atomic32 rhs) : as_atomic(rhs) {}
+
+    // Returns the single sample in an atomic manner. This in an "acquire"
+    // load. The returned sample isn't shared and thus its fields can be safely
+    // accessed.
+    SingleSample Load() const;
+
+    // Extracts the single sample in an atomic manner. If |disable| is true
+    // then this object will be set so it will never accumulate another value.
+    // This is "no barrier" so doesn't enforce ordering with other atomic ops.
+    SingleSample Extract(bool disable);
+
+    // Adds a given count to the held bucket. If not possible, it returns false
+    // and leaves the parts unchanged. Once extracted/disabled, this always
+    // returns false. This in an "acquire/release" operation.
+    bool Accumulate(size_t bucket, HistogramBase::Count count);
+
+    // Returns if the sample has been "disabled" (via Extract) and thus not
+    // allowed to accept further accumulation.
+    bool IsDisabled() const;
+
+   private:
+    // union field: The actual sample bucket and count.
+    SingleSample as_parts;
+
+    // union field: The sample as an atomic value. Atomic64 would provide
+    // more flexibility but isn't available on all builds. This can hold a
+    // special, internal "disabled" value indicating that it must not accept
+    // further accumulation.
+    subtle::Atomic32 as_atomic;
+  };
+
+  // A structure of information about the data, common to all sample containers.
+  // Because of how this is used in persistent memory, it must be a POD object
+  // that makes sense when initialized to all zeros.
   struct Metadata {
     // Expected size for 32/64-bit check.
     static constexpr size_t kExpectedInstanceSize = 24;
@@ -58,21 +115,17 @@
     // might mismatch even when no memory corruption has happened.
     HistogramBase::AtomicCount redundant_count;
 
-    // 4 bytes of padding to explicitly extend this structure to a multiple of
-    // 64-bits. This is required to ensure the structure is the same size on
-    // both 32-bit and 64-bit builds.
-    char padding[4];
+    // A single histogram value and associated count. This allows histograms
+    // that typically report only a single value to not require full storage
+    // to be allocated.
+    AtomicSingleSample single_sample;  // 32 bits
   };
 
-  // Because sturctures held in persistent memory must be POD, there can be no
+  // Because structures held in persistent memory must be POD, there can be no
   // default constructor to clear the fields. This derived class exists just
   // to clear them when being allocated on the heap.
-  struct LocalMetadata : Metadata {
-    LocalMetadata() {
-      id = 0;
-      sum = 0;
-      redundant_count = 0;
-    }
+  struct BASE_EXPORT LocalMetadata : Metadata {
+    LocalMetadata();
   };
 
   explicit HistogramSamples(uint64_t id);
@@ -112,8 +165,20 @@
   enum Operator { ADD, SUBTRACT };
   virtual bool AddSubtractImpl(SampleCountIterator* iter, Operator op) = 0;
 
-  void IncreaseSum(int64_t diff);
-  void IncreaseRedundantCount(HistogramBase::Count diff);
+  // Accumulates to the embedded single-sample field if possible. Returns true
+  // on success, false otherwise. Sum and redundant-count are also updated in
+  // the success case.
+  bool AccumulateSingleSample(HistogramBase::Sample value,
+                              HistogramBase::Count count,
+                              size_t bucket);
+
+  // Atomically adjust the sum and redundant-count.
+  void IncreaseSumAndCount(int64_t sum, HistogramBase::Count count);
+
+  AtomicSingleSample& single_sample() { return meta_->single_sample; }
+  const AtomicSingleSample& single_sample() const {
+    return meta_->single_sample;
+  }
 
  private:
   // In order to support histograms shared through an external memory segment,
@@ -134,10 +199,16 @@
 
   // Get the sample and count at current position.
   // |min| |max| and |count| can be NULL if the value is not of interest.
+  // Note: |max| is int64_t because histograms support logged values in the
+  // full int32_t range and bucket max is exclusive, so it needs to support
+  // values up to MAXINT32+1.
   // Requires: !Done();
   virtual void Get(HistogramBase::Sample* min,
-                   HistogramBase::Sample* max,
+                   int64_t* max,
                    HistogramBase::Count* count) const = 0;
+  static_assert(std::numeric_limits<HistogramBase::Sample>::max() <
+                    std::numeric_limits<int64_t>::max(),
+                "Get() |max| must be able to hold Histogram::Sample max + 1");
 
   // Get the index of current histogram bucket.
   // For histograms that don't use predefined buckets, it returns false.
@@ -145,6 +216,35 @@
   virtual bool GetBucketIndex(size_t* index) const;
 };
 
+class BASE_EXPORT SingleSampleIterator : public SampleCountIterator {
+ public:
+  SingleSampleIterator(HistogramBase::Sample min,
+                       int64_t max,
+                       HistogramBase::Count count);
+  SingleSampleIterator(HistogramBase::Sample min,
+                       int64_t max,
+                       HistogramBase::Count count,
+                       size_t bucket_index);
+  ~SingleSampleIterator() override;
+
+  // SampleCountIterator:
+  bool Done() const override;
+  void Next() override;
+  void Get(HistogramBase::Sample* min,
+           int64_t* max,
+           HistogramBase::Count* count) const override;
+
+  // SampleVector uses predefined buckets so iterator can return bucket index.
+  bool GetBucketIndex(size_t* index) const override;
+
+ private:
+  // Information about the single value to return.
+  const HistogramBase::Sample min_;
+  const int64_t max_;
+  const size_t bucket_index_;
+  HistogramBase::Count count_;
+};
+
 }  // namespace base
 
 #endif  // BASE_METRICS_HISTOGRAM_SAMPLES_H_
diff --git a/src/base/metrics/histogram_unittest.cc b/src/base/metrics/histogram_unittest.cc
index 02ed93b..d89e7e9 100644
--- a/src/base/metrics/histogram_unittest.cc
+++ b/src/base/metrics/histogram_unittest.cc
@@ -490,15 +490,15 @@
   EXPECT_EQ(2, snapshot->redundant_count());
   EXPECT_EQ(2, snapshot->TotalCount());
 
-  snapshot->counts_[3] += 100;  // Sample count won't match redundant count.
+  snapshot->counts()[3] += 100;  // Sample count won't match redundant count.
   EXPECT_EQ(HistogramBase::COUNT_LOW_ERROR,
             histogram->FindCorruption(*snapshot));
-  snapshot->counts_[2] -= 200;
+  snapshot->counts()[2] -= 200;
   EXPECT_EQ(HistogramBase::COUNT_HIGH_ERROR,
             histogram->FindCorruption(*snapshot));
 
   // But we can't spot a corruption if it is compensated for.
-  snapshot->counts_[1] += 100;
+  snapshot->counts()[1] += 100;
   EXPECT_EQ(HistogramBase::NO_INCONSISTENCIES,
             histogram->FindCorruption(*snapshot));
 }
diff --git a/src/base/metrics/persistent_histogram_allocator.cc b/src/base/metrics/persistent_histogram_allocator.cc
index b2dae99..c73d844 100644
--- a/src/base/metrics/persistent_histogram_allocator.cc
+++ b/src/base/metrics/persistent_histogram_allocator.cc
@@ -240,7 +240,7 @@
   uint32_t bucket_count;
   PersistentMemoryAllocator::Reference ranges_ref;
   uint32_t ranges_checksum;
-  PersistentMemoryAllocator::Reference counts_ref;
+  subtle::Atomic32 counts_ref;  // PersistentMemoryAllocator::Reference
   HistogramSamples::Metadata samples_metadata;
   HistogramSamples::Metadata logged_metadata;
 
@@ -375,14 +375,12 @@
       DCHECK_EQ(kTypeIdRangesArray, memory_allocator_->GetType(ranges_ref));
     }
 
-    PersistentMemoryAllocator::Reference counts_ref =
-        memory_allocator_->Allocate(counts_bytes, kTypeIdCountsArray);
 
     // Only continue here if all allocations were successful. If they weren't,
     // there is no way to free the space but that's not really a problem since
     // the allocations only fail because the space is full or corrupt and so
     // any future attempts will also fail.
-    if (counts_ref && ranges_ref && histogram_data) {
+    if (ranges_ref && histogram_data) {
       histogram_data->minimum = minimum;
       histogram_data->maximum = maximum;
       // |bucket_count| must fit within 32-bits or the allocation of the counts
@@ -391,7 +389,6 @@
       histogram_data->bucket_count = static_cast<uint32_t>(bucket_count);
       histogram_data->ranges_ref = ranges_ref;
       histogram_data->ranges_checksum = bucket_ranges->checksum();
-      histogram_data->counts_ref = counts_ref;
     } else {
       histogram_data = nullptr;  // Clear this for proper handling below.
     }
@@ -606,42 +603,52 @@
       StatisticsRecorder::RegisterOrDeleteDuplicateRanges(
           created_ranges.release());
 
-  HistogramBase::AtomicCount* counts_data =
-      memory_allocator_->GetAsArray<HistogramBase::AtomicCount>(
-          histogram_data.counts_ref, kTypeIdCountsArray,
-          PersistentMemoryAllocator::kSizeAny);
   size_t counts_bytes =
       CalculateRequiredCountsBytes(histogram_data.bucket_count);
-  if (!counts_data || counts_bytes == 0 ||
-      memory_allocator_->GetAllocSize(histogram_data.counts_ref) <
-          counts_bytes) {
+  PersistentMemoryAllocator::Reference counts_ref =
+      subtle::NoBarrier_Load(&histogram_data.counts_ref);
+  if (counts_bytes == 0 ||
+      (counts_ref != 0 &&
+       memory_allocator_->GetAllocSize(counts_ref) < counts_bytes)) {
     RecordCreateHistogramResult(CREATE_HISTOGRAM_INVALID_COUNTS_ARRAY);
     NOTREACHED();
     return nullptr;
   }
 
-  // After the main "counts" array is a second array using for storing what
-  // was previously logged. This is used to calculate the "delta" during
-  // snapshot operations.
-  HistogramBase::AtomicCount* logged_data =
-      counts_data + histogram_data.bucket_count;
+  // The "counts" data (including both samples and logged samples) is a delayed
+  // persistent allocation meaning that though its size and storage for a
+  // reference is defined, no space is reserved until actually needed. When
+  // it is needed, memory will be allocated from the persistent segment and
+  // a reference to it stored at the passed address. Other threads can then
+  // notice the valid reference and access the same data.
+  DelayedPersistentAllocation counts_data(memory_allocator_.get(),
+                                          &histogram_data_ptr->counts_ref,
+                                          kTypeIdCountsArray, counts_bytes, 0);
 
+  // A second delayed allocations is defined using the same reference storage
+  // location as the first so the allocation of one will automatically be found
+  // by the other. Within the block, the first half of the space is for "counts"
+  // and the second half is for "logged counts".
+  DelayedPersistentAllocation logged_data(
+      memory_allocator_.get(), &histogram_data_ptr->counts_ref,
+      kTypeIdCountsArray, counts_bytes, counts_bytes / 2,
+      /*make_iterable=*/false);
+
+  // Create the right type of histogram.
   std::string name(histogram_data_ptr->name);
   std::unique_ptr<HistogramBase> histogram;
   switch (histogram_data.histogram_type) {
     case HISTOGRAM:
       histogram = Histogram::PersistentCreate(
           name, histogram_data.minimum, histogram_data.maximum, ranges,
-          counts_data, logged_data, histogram_data.bucket_count,
-          &histogram_data_ptr->samples_metadata,
+          counts_data, logged_data, &histogram_data_ptr->samples_metadata,
           &histogram_data_ptr->logged_metadata);
       DCHECK(histogram);
       break;
     case LINEAR_HISTOGRAM:
       histogram = LinearHistogram::PersistentCreate(
           name, histogram_data.minimum, histogram_data.maximum, ranges,
-          counts_data, logged_data, histogram_data.bucket_count,
-          &histogram_data_ptr->samples_metadata,
+          counts_data, logged_data, &histogram_data_ptr->samples_metadata,
           &histogram_data_ptr->logged_metadata);
       DCHECK(histogram);
       break;
@@ -654,7 +661,7 @@
       break;
     case CUSTOM_HISTOGRAM:
       histogram = CustomHistogram::PersistentCreate(
-          name, ranges, counts_data, logged_data, histogram_data.bucket_count,
+          name, ranges, counts_data, logged_data,
           &histogram_data_ptr->samples_metadata,
           &histogram_data_ptr->logged_metadata);
       DCHECK(histogram);
diff --git a/src/base/metrics/persistent_memory_allocator_unittest.cc b/src/base/metrics/persistent_memory_allocator_unittest.cc
index f67da0c..b3b4d9b 100644
--- a/src/base/metrics/persistent_memory_allocator_unittest.cc
+++ b/src/base/metrics/persistent_memory_allocator_unittest.cc
@@ -620,10 +620,10 @@
     EXPECT_FALSE(local.IsFull());
     EXPECT_FALSE(local.IsCorrupt());
 
-    ASSERT_TRUE(local.shared_memory()->ShareToProcess(GetCurrentProcessHandle(),
-                                                      &shared_handle_1));
-    ASSERT_TRUE(local.shared_memory()->ShareToProcess(GetCurrentProcessHandle(),
-                                                      &shared_handle_2));
+    shared_handle_1 = local.shared_memory()->handle().Duplicate();
+    ASSERT_TRUE(shared_handle_1.IsValid());
+    shared_handle_2 = local.shared_memory()->handle().Duplicate();
+    ASSERT_TRUE(shared_handle_2.IsValid());
   }
 
   // Read-only test.
diff --git a/src/base/metrics/persistent_sample_map.cc b/src/base/metrics/persistent_sample_map.cc
index f931fd5..743b644 100644
--- a/src/base/metrics/persistent_sample_map.cc
+++ b/src/base/metrics/persistent_sample_map.cc
@@ -8,6 +8,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/persistent_histogram_allocator.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/stl_util.h"
 
 namespace base {
@@ -41,7 +42,7 @@
   bool Done() const override;
   void Next() override;
   void Get(HistogramBase::Sample* min,
-           HistogramBase::Sample* max,
+           int64_t* max,
            HistogramBase::Count* count) const override;
 
  private:
@@ -71,13 +72,13 @@
 }
 
 void PersistentSampleMapIterator::Get(Sample* min,
-                                      Sample* max,
+                                      int64_t* max,
                                       Count* count) const {
   DCHECK(!Done());
   if (min)
     *min = iter_->first;
   if (max)
-    *max = iter_->first + 1;
+    *max = strict_cast<int64_t>(iter_->first) + 1;
   if (count)
     *count = *iter_->second;
 }
@@ -118,8 +119,7 @@
 
 void PersistentSampleMap::Accumulate(Sample value, Count count) {
   *GetOrCreateSampleCountStorage(value) += count;
-  IncreaseSum(static_cast<int64_t>(count) * value);
-  IncreaseRedundantCount(count);
+  IncreaseSumAndCount(strict_cast<int64_t>(count) * value, count);
 }
 
 Count PersistentSampleMap::GetCount(Sample value) const {
@@ -187,13 +187,13 @@
 bool PersistentSampleMap::AddSubtractImpl(SampleCountIterator* iter,
                                           Operator op) {
   Sample min;
-  Sample max;
+  int64_t max;
   Count count;
   for (; !iter->Done(); iter->Next()) {
     iter->Get(&min, &max, &count);
     if (count == 0)
       continue;
-    if (min + 1 != max)
+    if (strict_cast<int64_t>(min) + 1 != max)
       return false;  // SparseHistogram only supports bucket with size 1.
 
 #if 0  // TODO(bcwhite) Re-enable efficient version after crbug.com/682680.
diff --git a/src/base/metrics/persistent_sample_map_unittest.cc b/src/base/metrics/persistent_sample_map_unittest.cc
index d50ab99..933734b 100644
--- a/src/base/metrics/persistent_sample_map_unittest.cc
+++ b/src/base/metrics/persistent_sample_map_unittest.cc
@@ -164,7 +164,7 @@
   std::unique_ptr<SampleCountIterator> it = samples.Iterator();
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
 
   it->Get(&min, &max, &count);
@@ -214,7 +214,7 @@
   EXPECT_FALSE(it->Done());
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
 
   it->Get(&min, &max, &count);
@@ -245,7 +245,7 @@
   EXPECT_TRUE(it->Done());
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
   EXPECT_DCHECK_DEATH(it->Get(&min, &max, &count));
 
diff --git a/src/base/metrics/sample_map.cc b/src/base/metrics/sample_map.cc
index 8abd01e..f0e4e5e 100644
--- a/src/base/metrics/sample_map.cc
+++ b/src/base/metrics/sample_map.cc
@@ -6,6 +6,7 @@
 
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
+#include "base/numerics/safe_conversions.h"
 #include "base/stl_util.h"
 
 namespace base {
@@ -30,7 +31,7 @@
   bool Done() const override;
   void Next() override;
   void Get(HistogramBase::Sample* min,
-           HistogramBase::Sample* max,
+           int64_t* max,
            HistogramBase::Count* count) const override;
 
  private:
@@ -58,12 +59,12 @@
   SkipEmptyBuckets();
 }
 
-void SampleMapIterator::Get(Sample* min, Sample* max, Count* count) const {
+void SampleMapIterator::Get(Sample* min, int64_t* max, Count* count) const {
   DCHECK(!Done());
   if (min)
     *min = iter_->first;
   if (max)
-    *max = iter_->first + 1;
+    *max = strict_cast<int64_t>(iter_->first) + 1;
   if (count)
     *count = iter_->second;
 }
@@ -84,8 +85,7 @@
 
 void SampleMap::Accumulate(Sample value, Count count) {
   sample_counts_[value] += count;
-  IncreaseSum(static_cast<int64_t>(count) * value);
-  IncreaseRedundantCount(count);
+  IncreaseSumAndCount(strict_cast<int64_t>(count) * value, count);
 }
 
 Count SampleMap::GetCount(Sample value) const {
@@ -109,11 +109,11 @@
 
 bool SampleMap::AddSubtractImpl(SampleCountIterator* iter, Operator op) {
   Sample min;
-  Sample max;
+  int64_t max;
   Count count;
   for (; !iter->Done(); iter->Next()) {
     iter->Get(&min, &max, &count);
-    if (min + 1 != max)
+    if (strict_cast<int64_t>(min) + 1 != max)
       return false;  // SparseHistogram only supports bucket with size 1.
 
     sample_counts_[min] += (op == HistogramSamples::ADD) ? count : -count;
diff --git a/src/base/metrics/sample_map_unittest.cc b/src/base/metrics/sample_map_unittest.cc
index 91a9dcf..6e6da2b 100644
--- a/src/base/metrics/sample_map_unittest.cc
+++ b/src/base/metrics/sample_map_unittest.cc
@@ -81,7 +81,7 @@
   std::unique_ptr<SampleCountIterator> it = samples.Iterator();
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
 
   it->Get(&min, &max, &count);
@@ -125,7 +125,7 @@
   EXPECT_FALSE(it->Done());
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
 
   it->Get(&min, &max, &count);
@@ -153,7 +153,7 @@
   EXPECT_TRUE(it->Done());
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
   EXPECT_DCHECK_DEATH(it->Get(&min, &max, &count));
 
diff --git a/src/base/metrics/sample_vector.cc b/src/base/metrics/sample_vector.cc
index 477b8af..219ab71 100644
--- a/src/base/metrics/sample_vector.cc
+++ b/src/base/metrics/sample_vector.cc
@@ -4,103 +4,217 @@
 
 #include "base/metrics/sample_vector.h"
 
+#include "base/lazy_instance.h"
 #include "base/logging.h"
-#include "base/metrics/bucket_ranges.h"
+#include "base/memory/ptr_util.h"
+#include "base/metrics/persistent_memory_allocator.h"
+#include "base/numerics/safe_conversions.h"
+#include "base/synchronization/lock.h"
+#include "base/threading/platform_thread.h"
+
+// This SampleVector makes use of the single-sample embedded in the base
+// HistogramSamples class. If the count is non-zero then there is guaranteed
+// (within the bounds of "eventual consistency") to be no allocated external
+// storage. Once the full counts storage is allocated, the single-sample must
+// be extracted and disabled.
 
 namespace base {
 
 typedef HistogramBase::Count Count;
 typedef HistogramBase::Sample Sample;
 
-SampleVector::SampleVector(const BucketRanges* bucket_ranges)
-    : SampleVector(0, bucket_ranges) {}
-
-SampleVector::SampleVector(uint64_t id, const BucketRanges* bucket_ranges)
-    : HistogramSamples(id),
-      local_counts_(bucket_ranges->bucket_count()),
-      counts_(&local_counts_[0]),
-      counts_size_(local_counts_.size()),
-      bucket_ranges_(bucket_ranges) {
+SampleVectorBase::SampleVectorBase(uint64_t id,
+                                   const BucketRanges* bucket_ranges)
+    : HistogramSamples(id), bucket_ranges_(bucket_ranges) {
   CHECK_GE(bucket_ranges_->bucket_count(), 1u);
 }
 
-SampleVector::SampleVector(uint64_t id,
-                           HistogramBase::AtomicCount* counts,
-                           size_t counts_size,
-                           Metadata* meta,
-                           const BucketRanges* bucket_ranges)
-    : HistogramSamples(id, meta),
-      counts_(counts),
-      counts_size_(bucket_ranges->bucket_count()),
-      bucket_ranges_(bucket_ranges) {
-  CHECK_LE(bucket_ranges_->bucket_count(), counts_size_);
+SampleVectorBase::SampleVectorBase(uint64_t id,
+                                   Metadata* meta,
+                                   const BucketRanges* bucket_ranges)
+    : HistogramSamples(id, meta), bucket_ranges_(bucket_ranges) {
   CHECK_GE(bucket_ranges_->bucket_count(), 1u);
 }
 
-SampleVector::~SampleVector() {}
+SampleVectorBase::~SampleVectorBase() {}
 
-void SampleVector::Accumulate(Sample value, Count count) {
-  size_t bucket_index = GetBucketIndex(value);
-  subtle::NoBarrier_AtomicIncrement(&counts_[bucket_index], count);
-  IncreaseSum(static_cast<int64_t>(count) * value);
-  IncreaseRedundantCount(count);
-}
+void SampleVectorBase::Accumulate(Sample value, Count count) {
+  const size_t bucket_index = GetBucketIndex(value);
 
-Count SampleVector::GetCount(Sample value) const {
-  size_t bucket_index = GetBucketIndex(value);
-  return subtle::NoBarrier_Load(&counts_[bucket_index]);
-}
+  // Handle the single-sample case.
+  if (!counts()) {
+    // Try to accumulate the parameters into the single-count entry.
+    if (AccumulateSingleSample(value, count, bucket_index)) {
+      // A race condition could lead to a new single-sample being accumulated
+      // above just after another thread executed the MountCountsStorage below.
+      // Since it is mounted, it could be mounted elsewhere and have values
+      // written to it. It's not allowed to have both a single-sample and
+      // entries in the counts array so move the single-sample.
+      if (counts())
+        MoveSingleSampleToCounts();
+      return;
+    }
 
-Count SampleVector::TotalCount() const {
-  Count count = 0;
-  for (size_t i = 0; i < counts_size_; i++) {
-    count += subtle::NoBarrier_Load(&counts_[i]);
+    // Need real storage to store both what was in the single-sample plus the
+    // parameter information.
+    MountCountsStorageAndMoveSingleSample();
   }
-  return count;
+
+  // Handle the multi-sample case.
+  subtle::NoBarrier_AtomicIncrement(&counts()[bucket_index], count);
+  IncreaseSumAndCount(strict_cast<int64_t>(count) * value, count);
 }
 
-Count SampleVector::GetCountAtIndex(size_t bucket_index) const {
-  DCHECK(bucket_index < counts_size_);
-  return subtle::NoBarrier_Load(&counts_[bucket_index]);
+Count SampleVectorBase::GetCount(Sample value) const {
+  return GetCountAtIndex(GetBucketIndex(value));
 }
 
-std::unique_ptr<SampleCountIterator> SampleVector::Iterator() const {
-  return std::unique_ptr<SampleCountIterator>(
-      new SampleVectorIterator(counts_, counts_size_, bucket_ranges_));
+Count SampleVectorBase::TotalCount() const {
+  // Handle the single-sample case.
+  SingleSample sample = single_sample().Load();
+  if (sample.count != 0)
+    return sample.count;
+
+  // Handle the multi-sample case.
+  if (counts() || MountExistingCountsStorage()) {
+    Count count = 0;
+    size_t size = counts_size();
+    const HistogramBase::AtomicCount* counts_array = counts();
+    for (size_t i = 0; i < size; ++i) {
+      count += subtle::NoBarrier_Load(&counts_array[i]);
+    }
+    return count;
+  }
+
+  // And the no-value case.
+  return 0;
 }
 
-bool SampleVector::AddSubtractImpl(SampleCountIterator* iter,
-                                   HistogramSamples::Operator op) {
+Count SampleVectorBase::GetCountAtIndex(size_t bucket_index) const {
+  DCHECK(bucket_index < counts_size());
+
+  // Handle the single-sample case.
+  SingleSample sample = single_sample().Load();
+  if (sample.count != 0)
+    return sample.bucket == bucket_index ? sample.count : 0;
+
+  // Handle the multi-sample case.
+  if (counts() || MountExistingCountsStorage())
+    return subtle::NoBarrier_Load(&counts()[bucket_index]);
+
+  // And the no-value case.
+  return 0;
+}
+
+std::unique_ptr<SampleCountIterator> SampleVectorBase::Iterator() const {
+  // Handle the single-sample case.
+  SingleSample sample = single_sample().Load();
+  if (sample.count != 0) {
+    return MakeUnique<SingleSampleIterator>(
+        bucket_ranges_->range(sample.bucket),
+        bucket_ranges_->range(sample.bucket + 1), sample.count, sample.bucket);
+  }
+
+  // Handle the multi-sample case.
+  if (counts() || MountExistingCountsStorage()) {
+    return MakeUnique<SampleVectorIterator>(counts(), counts_size(),
+                                            bucket_ranges_);
+  }
+
+  // And the no-value case.
+  return MakeUnique<SampleVectorIterator>(nullptr, 0, bucket_ranges_);
+}
+
+bool SampleVectorBase::AddSubtractImpl(SampleCountIterator* iter,
+                                       HistogramSamples::Operator op) {
+  // Stop now if there's nothing to do.
+  if (iter->Done())
+    return true;
+
+  // Get the first value and its index.
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
+  iter->Get(&min, &max, &count);
+  size_t dest_index = GetBucketIndex(min);
+
+  // The destination must be a superset of the source meaning that though the
+  // incoming ranges will find an exact match, the incoming bucket-index, if
+  // it exists, may be offset from the destination bucket-index. Calculate
+  // that offset of the passed iterator; there are are no overflow checks
+  // because 2's compliment math will work it out in the end.
+  //
+  // Because GetBucketIndex() always returns the same true or false result for
+  // a given iterator object, |index_offset| is either set here and used below,
+  // or never set and never used. The compiler doesn't know this, though, which
+  // is why it's necessary to initialize it to something.
+  size_t index_offset = 0;
+  size_t iter_index;
+  if (iter->GetBucketIndex(&iter_index))
+    index_offset = dest_index - iter_index;
+  if (dest_index >= counts_size())
+    return false;
+
+  // Post-increment. Information about the current sample is not available
+  // after this point.
+  iter->Next();
+
+  // Single-value storage is possible if there is no counts storage and the
+  // retrieved entry is the only one in the iterator.
+  if (!counts()) {
+    if (iter->Done()) {
+      // Don't call AccumulateSingleSample because that updates sum and count
+      // which was already done by the caller of this method.
+      if (single_sample().Accumulate(
+              dest_index, op == HistogramSamples::ADD ? count : -count)) {
+        // Handle race-condition that mounted counts storage between above and
+        // here.
+        if (counts())
+          MoveSingleSampleToCounts();
+        return true;
+      }
+    }
+
+    // The counts storage will be needed to hold the multiple incoming values.
+    MountCountsStorageAndMoveSingleSample();
+  }
 
   // Go through the iterator and add the counts into correct bucket.
-  size_t index = 0;
-  while (index < counts_size_ && !iter->Done()) {
-    iter->Get(&min, &max, &count);
-    if (min == bucket_ranges_->range(index) &&
-        max == bucket_ranges_->range(index + 1)) {
-      // Sample matches this bucket!
-      subtle::NoBarrier_AtomicIncrement(
-          &counts_[index], op == HistogramSamples::ADD ? count : -count);
-      iter->Next();
-    } else if (min > bucket_ranges_->range(index)) {
-      // Sample is larger than current bucket range. Try next.
-      index++;
-    } else {
-      // Sample is smaller than current bucket range. We scan buckets from
-      // smallest to largest, so the sample value must be invalid.
+  while (true) {
+    // Ensure that the sample's min/max match the ranges min/max.
+    if (min != bucket_ranges_->range(dest_index) ||
+        max != bucket_ranges_->range(dest_index + 1)) {
+      NOTREACHED() << "sample=" << min << "," << max
+                   << "; range=" << bucket_ranges_->range(dest_index) << ","
+                   << bucket_ranges_->range(dest_index + 1);
       return false;
     }
-  }
 
-  return iter->Done();
+    // Sample's bucket matches exactly. Adjust count.
+    subtle::NoBarrier_AtomicIncrement(
+        &counts()[dest_index], op == HistogramSamples::ADD ? count : -count);
+
+    // Advance to the next iterable sample. See comments above for how
+    // everything works.
+    if (iter->Done())
+      return true;
+    iter->Get(&min, &max, &count);
+    if (iter->GetBucketIndex(&iter_index)) {
+      // Destination bucket is a known offset from the source bucket.
+      dest_index = iter_index + index_offset;
+    } else {
+      // Destination bucket has to be determined anew each time.
+      dest_index = GetBucketIndex(min);
+    }
+    if (dest_index >= counts_size())
+      return false;
+    iter->Next();
+  }
 }
 
 // Use simple binary search.  This is very general, but there are better
 // approaches if we knew that the buckets were linearly distributed.
-size_t SampleVector::GetBucketIndex(Sample value) const {
+size_t SampleVectorBase::GetBucketIndex(Sample value) const {
   size_t bucket_count = bucket_ranges_->bucket_count();
   CHECK_GE(bucket_count, 1u);
   CHECK_GE(value, bucket_ranges_->range(0));
@@ -125,6 +239,124 @@
   return mid;
 }
 
+void SampleVectorBase::MoveSingleSampleToCounts() {
+  DCHECK(counts());
+
+  // Disable the single-sample since there is now counts storage for the data.
+  SingleSample sample = single_sample().Extract(/*disable=*/true);
+
+  // Stop here if there is no "count" as trying to find the bucket index of
+  // an invalid (including zero) "value" will crash.
+  if (sample.count == 0)
+    return;
+
+  // Move the value into storage. Sum and redundant-count already account
+  // for this entry so no need to call IncreaseSumAndCount().
+  subtle::NoBarrier_AtomicIncrement(&counts()[sample.bucket], sample.count);
+}
+
+void SampleVectorBase::MountCountsStorageAndMoveSingleSample() {
+  // There are many SampleVector objects and the lock is needed very
+  // infrequently (just when advancing from single-sample to multi-sample) so
+  // define a single, global lock that all can use. This lock only prevents
+  // concurrent entry into the code below; access and updates to |counts_|
+  // still requires atomic operations.
+  static LazyInstance<Lock>::Leaky counts_lock = LAZY_INSTANCE_INITIALIZER;
+  if (subtle::NoBarrier_Load(&counts_) == 0) {
+    AutoLock lock(counts_lock.Get());
+    if (subtle::NoBarrier_Load(&counts_) == 0) {
+      // Create the actual counts storage while the above lock is acquired.
+      HistogramBase::Count* counts = CreateCountsStorageWhileLocked();
+      DCHECK(counts);
+
+      // Point |counts_| to the newly created storage. This is done while
+      // locked to prevent possible concurrent calls to CreateCountsStorage
+      // but, between that call and here, other threads could notice the
+      // existance of the storage and race with this to set_counts(). That's
+      // okay because (a) it's atomic and (b) it always writes the same value.
+      set_counts(counts);
+    }
+  }
+
+  // Move any single-sample into the newly mounted storage.
+  MoveSingleSampleToCounts();
+}
+
+SampleVector::SampleVector(const BucketRanges* bucket_ranges)
+    : SampleVector(0, bucket_ranges) {}
+
+SampleVector::SampleVector(uint64_t id, const BucketRanges* bucket_ranges)
+    : SampleVectorBase(id, bucket_ranges) {}
+
+SampleVector::~SampleVector() {}
+
+bool SampleVector::MountExistingCountsStorage() const {
+  // There is never any existing storage other than what is already in use.
+  return counts() != nullptr;
+}
+
+HistogramBase::AtomicCount* SampleVector::CreateCountsStorageWhileLocked() {
+  local_counts_.resize(counts_size());
+  return &local_counts_[0];
+}
+
+PersistentSampleVector::PersistentSampleVector(
+    uint64_t id,
+    const BucketRanges* bucket_ranges,
+    Metadata* meta,
+    const DelayedPersistentAllocation& counts)
+    : SampleVectorBase(id, meta, bucket_ranges), persistent_counts_(counts) {
+  // Only mount the full storage if the single-sample has been disabled.
+  // Otherwise, it is possible for this object instance to start using (empty)
+  // storage that was created incidentally while another instance continues to
+  // update to the single sample. This "incidental creation" can happen because
+  // the memory is a DelayedPersistentAllocation which allows multiple memory
+  // blocks within it and applies an all-or-nothing approach to the allocation.
+  // Thus, a request elsewhere for one of the _other_ blocks would make _this_
+  // block available even though nothing has explicitly requested it.
+  //
+  // Note that it's not possible for the ctor to mount existing storage and
+  // move any single-sample to it because sometimes the persistent memory is
+  // read-only. Only non-const methods (which assume that memory is read/write)
+  // can do that.
+  if (single_sample().IsDisabled()) {
+    bool success = MountExistingCountsStorage();
+    DCHECK(success);
+  }
+}
+
+PersistentSampleVector::~PersistentSampleVector() {}
+
+bool PersistentSampleVector::MountExistingCountsStorage() const {
+  // There is no early exit if counts is not yet mounted because, given that
+  // this is a virtual function, it's more efficient to do that at the call-
+  // site. There is no danger, however, should this get called anyway (perhaps
+  // because of a race condition) because at worst the |counts_| value would
+  // be over-written (in an atomic manner) with the exact same address.
+
+  if (!persistent_counts_.reference())
+    return false;  // Nothing to mount.
+
+  // Mount the counts array in position.
+  set_counts(
+      static_cast<HistogramBase::AtomicCount*>(persistent_counts_.Get()));
+  return true;
+}
+
+HistogramBase::AtomicCount*
+PersistentSampleVector::CreateCountsStorageWhileLocked() {
+  void* mem = persistent_counts_.Get();
+  if (!mem) {
+    // The above shouldn't fail but can if Bad Things(tm) are occurring in the
+    // persistent allocator. Crashing isn't a good option so instead just
+    // allocate something from the heap and return that. There will be no
+    // sharing or persistence but worse things are already happening.
+    return new HistogramBase::AtomicCount[counts_size()];
+  }
+
+  return static_cast<HistogramBase::AtomicCount*>(mem);
+}
+
 SampleVectorIterator::SampleVectorIterator(
     const std::vector<HistogramBase::AtomicCount>* counts,
     const BucketRanges* bucket_ranges)
@@ -161,13 +393,13 @@
 }
 
 void SampleVectorIterator::Get(HistogramBase::Sample* min,
-                               HistogramBase::Sample* max,
+                               int64_t* max,
                                HistogramBase::Count* count) const {
   DCHECK(!Done());
   if (min != NULL)
     *min = bucket_ranges_->range(index_);
   if (max != NULL)
-    *max = bucket_ranges_->range(index_ + 1);
+    *max = strict_cast<int64_t>(bucket_ranges_->range(index_ + 1));
   if (count != NULL)
     *count = subtle::NoBarrier_Load(&counts_[index_]);
 }
diff --git a/src/base/metrics/sample_vector.h b/src/base/metrics/sample_vector.h
index ee26c52..8e28e29 100644
--- a/src/base/metrics/sample_vector.h
+++ b/src/base/metrics/sample_vector.h
@@ -14,28 +14,28 @@
 #include <memory>
 #include <vector>
 
+#include "base/atomicops.h"
 #include "base/compiler_specific.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
+#include "base/metrics/bucket_ranges.h"
 #include "base/metrics/histogram_base.h"
 #include "base/metrics/histogram_samples.h"
+#include "base/metrics/persistent_memory_allocator.h"
 
 namespace base {
 
 class BucketRanges;
 
-class BASE_EXPORT SampleVector : public HistogramSamples {
+class BASE_EXPORT SampleVectorBase : public HistogramSamples {
  public:
-  explicit SampleVector(const BucketRanges* bucket_ranges);
-  SampleVector(uint64_t id, const BucketRanges* bucket_ranges);
-  SampleVector(uint64_t id,
-               HistogramBase::AtomicCount* counts,
-               size_t counts_size,
-               Metadata* meta,
-               const BucketRanges* bucket_ranges);
-  ~SampleVector() override;
+  SampleVectorBase(uint64_t id, const BucketRanges* bucket_ranges);
+  SampleVectorBase(uint64_t id,
+                   Metadata* meta,
+                   const BucketRanges* bucket_ranges);
+  ~SampleVectorBase() override;
 
-  // HistogramSamples implementation:
+  // HistogramSamples:
   void Accumulate(HistogramBase::Sample value,
                   HistogramBase::Count count) override;
   HistogramBase::Count GetCount(HistogramBase::Sample value) const override;
@@ -52,25 +52,103 @@
 
   virtual size_t GetBucketIndex(HistogramBase::Sample value) const;
 
+  // Moves the single-sample value to a mounted "counts" array.
+  void MoveSingleSampleToCounts();
+
+  // Mounts (creating if necessary) an array of "counts" for multi-value
+  // storage.
+  void MountCountsStorageAndMoveSingleSample();
+
+  // Mounts "counts" storage that already exists. This does not attempt to move
+  // any single-sample information to that storage as that would violate the
+  // "const" restriction that is often used to indicate read-only memory.
+  virtual bool MountExistingCountsStorage() const = 0;
+
+  // Creates "counts" storage and returns a pointer to it. Ownership of the
+  // array remains with the called method but will never change. This must be
+  // called while some sort of lock is held to prevent reentry.
+  virtual HistogramBase::Count* CreateCountsStorageWhileLocked() = 0;
+
+  HistogramBase::AtomicCount* counts() {
+    return reinterpret_cast<HistogramBase::AtomicCount*>(
+        subtle::Acquire_Load(&counts_));
+  }
+
+  const HistogramBase::AtomicCount* counts() const {
+    return reinterpret_cast<HistogramBase::AtomicCount*>(
+        subtle::Acquire_Load(&counts_));
+  }
+
+  void set_counts(const HistogramBase::AtomicCount* counts) const {
+    subtle::Release_Store(&counts_, reinterpret_cast<uintptr_t>(counts));
+  }
+
+  size_t counts_size() const { return bucket_ranges_->bucket_count(); }
+
  private:
+  friend class SampleVectorTest;
   FRIEND_TEST_ALL_PREFIXES(HistogramTest, CorruptSampleCounts);
   FRIEND_TEST_ALL_PREFIXES(SharedHistogramTest, CorruptSampleCounts);
 
-  // In the case where this class manages the memory, here it is.
-  std::vector<HistogramBase::AtomicCount> local_counts_;
-
-  // These are raw pointers rather than objects for flexibility. The actual
-  // memory is either managed by local_counts_ above or by an external object
-  // and passed in directly.
-  HistogramBase::AtomicCount* counts_;
-  size_t counts_size_;
+  // |counts_| is actually a pointer to a HistogramBase::AtomicCount array but
+  // is held as an AtomicWord for concurrency reasons. When combined with the
+  // single_sample held in the metadata, there are four possible states:
+  //   1) single_sample == zero, counts_ == null
+  //   2) single_sample != zero, counts_ == null
+  //   3) single_sample != zero, counts_ != null BUT IS EMPTY
+  //   4) single_sample == zero, counts_ != null and may have data
+  // Once |counts_| is set, it can never revert and any existing single-sample
+  // must be moved to this storage. It is mutable because changing it doesn't
+  // change the (const) data but must adapt if a non-const object causes the
+  // storage to be allocated and updated.
+  mutable subtle::AtomicWord counts_ = 0;
 
   // Shares the same BucketRanges with Histogram object.
   const BucketRanges* const bucket_ranges_;
 
+  DISALLOW_COPY_AND_ASSIGN(SampleVectorBase);
+};
+
+// A sample vector that uses local memory for the counts array.
+class BASE_EXPORT SampleVector : public SampleVectorBase {
+ public:
+  explicit SampleVector(const BucketRanges* bucket_ranges);
+  SampleVector(uint64_t id, const BucketRanges* bucket_ranges);
+  ~SampleVector() override;
+
+ private:
+  // SampleVectorBase:
+  bool MountExistingCountsStorage() const override;
+  HistogramBase::Count* CreateCountsStorageWhileLocked() override;
+
+  // Simple local storage for counts.
+  mutable std::vector<HistogramBase::AtomicCount> local_counts_;
+
   DISALLOW_COPY_AND_ASSIGN(SampleVector);
 };
 
+// A sample vector that uses persistent memory for the counts array.
+class BASE_EXPORT PersistentSampleVector : public SampleVectorBase {
+ public:
+  PersistentSampleVector(uint64_t id,
+                         const BucketRanges* bucket_ranges,
+                         Metadata* meta,
+                         const DelayedPersistentAllocation& counts);
+  ~PersistentSampleVector() override;
+
+ private:
+  // SampleVectorBase:
+  bool MountExistingCountsStorage() const override;
+  HistogramBase::Count* CreateCountsStorageWhileLocked() override;
+
+  // Persistent storage for counts.
+  DelayedPersistentAllocation persistent_counts_;
+
+  DISALLOW_COPY_AND_ASSIGN(PersistentSampleVector);
+};
+
+// An iterator for sample vectors. This could be defined privately in the .cc
+// file but is here for easy testing.
 class BASE_EXPORT SampleVectorIterator : public SampleCountIterator {
  public:
   SampleVectorIterator(const std::vector<HistogramBase::AtomicCount>* counts,
@@ -84,7 +162,7 @@
   bool Done() const override;
   void Next() override;
   void Get(HistogramBase::Sample* min,
-           HistogramBase::Sample* max,
+           int64_t* max,
            HistogramBase::Count* count) const override;
 
   // SampleVector uses predefined buckets, so iterator can return bucket index.
diff --git a/src/base/metrics/sample_vector_unittest.cc b/src/base/metrics/sample_vector_unittest.cc
index 2d77d23..864a44d 100644
--- a/src/base/metrics/sample_vector_unittest.cc
+++ b/src/base/metrics/sample_vector_unittest.cc
@@ -215,7 +215,7 @@
   size_t index;
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
   it.Get(&min, &max, &count);
   EXPECT_EQ(0, min);
@@ -271,7 +271,7 @@
   EXPECT_TRUE(it->Done());
 
   HistogramBase::Sample min;
-  HistogramBase::Sample max;
+  int64_t max;
   HistogramBase::Count count;
   EXPECT_DCHECK_DEATH(it->Get(&min, &max, &count));
 
diff --git a/src/base/metrics/sparse_histogram.cc b/src/base/metrics/sparse_histogram.cc
index 415d7f9..916dcd5 100644
--- a/src/base/metrics/sparse_histogram.cc
+++ b/src/base/metrics/sparse_histogram.cc
@@ -243,7 +243,7 @@
   std::unique_ptr<SampleCountIterator> it = snapshot->Iterator();
   while (!it->Done()) {
     Sample min;
-    Sample max;
+    int64_t max;
     Count count;
     it->Get(&min, &max, &count);
     if (min > largest_sample)
@@ -258,7 +258,7 @@
   it = snapshot->Iterator();
   while (!it->Done()) {
     Sample min;
-    Sample max;
+    int64_t max;
     Count count;
     it->Get(&min, &max, &count);
 
diff --git a/src/base/metrics/sparse_histogram_unittest.cc b/src/base/metrics/sparse_histogram_unittest.cc
index f4a7c94..40e6fbf 100644
--- a/src/base/metrics/sparse_histogram_unittest.cc
+++ b/src/base/metrics/sparse_histogram_unittest.cc
@@ -327,4 +327,41 @@
           << "ns each.";
 }
 
+TEST_P(SparseHistogramTest, ExtremeValues) {
+  static const struct {
+    Histogram::Sample sample;
+    int64_t expected_max;
+  } cases[] = {
+      // Note: We use -2147483647 - 1 rather than -2147483648 because the later
+      // is interpreted as - operator applied to 2147483648 and the latter can't
+      // be represented as an int32 and causes a warning.
+      {-2147483647 - 1, -2147483647LL},
+      {0, 1},
+      {2147483647, 2147483648LL},
+  };
+
+  for (size_t i = 0; i < arraysize(cases); ++i) {
+    HistogramBase* histogram =
+        SparseHistogram::FactoryGet(StringPrintf("ExtremeValues_%zu", i),
+                                    HistogramBase::kUmaTargetedHistogramFlag);
+    histogram->Add(cases[i].sample);
+
+    std::unique_ptr<HistogramSamples> snapshot = histogram->SnapshotSamples();
+    std::unique_ptr<SampleCountIterator> it = snapshot->Iterator();
+    ASSERT_FALSE(it->Done());
+
+    base::Histogram::Sample min;
+    int64_t max;
+    base::Histogram::Count count;
+    it->Get(&min, &max, &count);
+
+    EXPECT_EQ(1, count);
+    EXPECT_EQ(cases[i].sample, min);
+    EXPECT_EQ(cases[i].expected_max, max);
+
+    it->Next();
+    EXPECT_TRUE(it->Done());
+  }
+}
+
 }  // namespace base
diff --git a/src/base/path_service.cc b/src/base/path_service.cc
index 1b9d394..4715dfc 100644
--- a/src/base/path_service.cc
+++ b/src/base/path_service.cc
@@ -4,13 +4,14 @@
 
 #include "base/path_service.h"
 
+#include <unordered_map>
+
 #if defined(OS_WIN)
 #include <windows.h>
 #include <shellapi.h>
 #include <shlobj.h>
 #endif
 
-#include "base/containers/hash_tables.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
@@ -35,7 +36,7 @@
 
 namespace {
 
-typedef hash_map<int, FilePath> PathMap;
+typedef std::unordered_map<int, FilePath> PathMap;
 
 // We keep a linked list of providers.  In a debug build we ensure that no two
 // providers claim overlapping keys.
diff --git a/src/base/stl_util.h b/src/base/stl_util.h
index 5a9b7b8..05b69a7 100644
--- a/src/base/stl_util.h
+++ b/src/base/stl_util.h
@@ -76,7 +76,7 @@
   return str->empty() ? NULL : &*str->begin();
 }
 
-// Test to see if a set, map, hash_set or hash_map contains a particular key.
+// Test to see if a set or map contains a particular key.
 // Returns true if the key is in the collection.
 template <typename Collection, typename Key>
 bool ContainsKey(const Collection& collection, const Key& key) {
diff --git a/src/base/supports_user_data.cc b/src/base/supports_user_data.cc
index 7065917..7190566 100644
--- a/src/base/supports_user_data.cc
+++ b/src/base/supports_user_data.cc
@@ -4,8 +4,6 @@
 
 #include "base/supports_user_data.h"
 
-#include "base/memory/ptr_util.h"
-
 namespace base {
 
 SupportsUserData::SupportsUserData() {
@@ -19,11 +17,7 @@
   DataMap::const_iterator found = user_data_.find(key);
   if (found != user_data_.end())
     return found->second.get();
-  return NULL;
-}
-
-void SupportsUserData::SetUserData(const void* key, Data* data) {
-  SetUserData(key, WrapUnique(data));
+  return nullptr;
 }
 
 void SupportsUserData::SetUserData(const void* key,
diff --git a/src/base/supports_user_data.h b/src/base/supports_user_data.h
index 233ce38..56522e2 100644
--- a/src/base/supports_user_data.h
+++ b/src/base/supports_user_data.h
@@ -37,10 +37,7 @@
   // Multiple user data values can be stored under different keys.
   // This object will TAKE OWNERSHIP of the given data pointer, and will
   // delete the object if it is changed or the object is destroyed.
-  // TODO: remove the raw ptr version of SetUserData once everything uses
-  // the unique_ptr version, see crbug.com/690937.
   Data* GetUserData(const void* key) const;
-  void SetUserData(const void* key, Data* data);
   void SetUserData(const void* key, std::unique_ptr<Data> data);
   void RemoveUserData(const void* key);
 
diff --git a/src/base/task/cancelable_task_tracker.cc b/src/base/task/cancelable_task_tracker.cc
index 0d4e57c..bb3cc01 100644
--- a/src/base/task/cancelable_task_tracker.cc
+++ b/src/base/task/cancelable_task_tracker.cc
@@ -134,7 +134,7 @@
 void CancelableTaskTracker::TryCancel(TaskId id) {
   DCHECK(sequence_checker_.CalledOnValidSequence());
 
-  hash_map<TaskId, CancellationFlag*>::const_iterator it = task_flags_.find(id);
+  const auto it = task_flags_.find(id);
   if (it == task_flags_.end()) {
     // Two possibilities:
     //
@@ -149,13 +149,8 @@
 
 void CancelableTaskTracker::TryCancelAll() {
   DCHECK(sequence_checker_.CalledOnValidSequence());
-
-  for (hash_map<TaskId, CancellationFlag*>::const_iterator it =
-           task_flags_.begin();
-       it != task_flags_.end();
-       ++it) {
-    it->second->Set();
-  }
+  for (const auto& it : task_flags_)
+    it.second->Set();
 }
 
 bool CancelableTaskTracker::HasTrackedTasks() const {
@@ -165,7 +160,6 @@
 
 void CancelableTaskTracker::Track(TaskId id, CancellationFlag* flag) {
   DCHECK(sequence_checker_.CalledOnValidSequence());
-
   bool success = task_flags_.insert(std::make_pair(id, flag)).second;
   DCHECK(success);
 }
diff --git a/src/base/task/cancelable_task_tracker.h b/src/base/task/cancelable_task_tracker.h
index ef5f163..baf841d 100644
--- a/src/base/task/cancelable_task_tracker.h
+++ b/src/base/task/cancelable_task_tracker.h
@@ -43,7 +43,7 @@
 #include "base/base_export.h"
 #include "base/bind.h"
 #include "base/callback.h"
-#include "base/containers/hash_tables.h"
+#include "base/containers/small_map.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/post_task_and_reply_with_result_internal.h"
@@ -142,7 +142,11 @@
   void Track(TaskId id, CancellationFlag* flag);
   void Untrack(TaskId id);
 
-  hash_map<TaskId, CancellationFlag*> task_flags_;
+  // Typically the number of tasks are 0-2 and occationally 3-4. But since
+  // this is a general API that could be used in unexpected ways, use a
+  // small_map instead of a flat_map to avoid falling over if there are many
+  // tasks.
+  small_map<std::map<TaskId, CancellationFlag*>, 4> task_flags_;
 
   TaskId next_id_;
   SequenceChecker sequence_checker_;
diff --git a/src/base/task_runner_util.h b/src/base/task_runner_util.h
index 9196bf1..e046f45 100644
--- a/src/base/task_runner_util.h
+++ b/src/base/task_runner_util.h
@@ -28,22 +28,38 @@
 // PostTaskAndReplyWithResult(
 //     target_thread_.task_runner(),
 //     FROM_HERE,
-//     Bind(&DoWorkAndReturn),
-//     Bind(&Callback));
+//     BindOnce(&DoWorkAndReturn),
+//     BindOnce(&Callback));
 template <typename TaskReturnType, typename ReplyArgType>
 bool PostTaskAndReplyWithResult(TaskRunner* task_runner,
                                 const tracked_objects::Location& from_here,
-                                Callback<TaskReturnType()> task,
-                                Callback<void(ReplyArgType)> reply) {
+                                OnceCallback<TaskReturnType()> task,
+                                OnceCallback<void(ReplyArgType)> reply) {
   DCHECK(task);
   DCHECK(reply);
   TaskReturnType* result = new TaskReturnType();
   return task_runner->PostTaskAndReply(
       from_here,
-      base::BindOnce(&internal::ReturnAsParamAdapter<TaskReturnType>,
-                     std::move(task), result),
-      base::BindOnce(&internal::ReplyAdapter<TaskReturnType, ReplyArgType>,
-                     std::move(reply), base::Owned(result)));
+      BindOnce(&internal::ReturnAsParamAdapter<TaskReturnType>, std::move(task),
+               result),
+      BindOnce(&internal::ReplyAdapter<TaskReturnType, ReplyArgType>,
+               std::move(reply), Owned(result)));
+}
+
+// Callback version of PostTaskAndReplyWithResult above.
+// Though RepeatingCallback is convertible to OnceCallback, we need this since
+// we cannot use template deduction and object conversion at once on the
+// overload resolution.
+// TODO(crbug.com/714018): Update all callers of the Callback version to use
+// OnceCallback.
+template <typename TaskReturnType, typename ReplyArgType>
+bool PostTaskAndReplyWithResult(TaskRunner* task_runner,
+                                const tracked_objects::Location& from_here,
+                                Callback<TaskReturnType()> task,
+                                Callback<void(ReplyArgType)> reply) {
+  return PostTaskAndReplyWithResult(
+      task_runner, from_here, OnceCallback<TaskReturnType()>(std::move(task)),
+      OnceCallback<void(ReplyArgType)>(std::move(reply)));
 }
 
 }  // namespace base
diff --git a/src/base/task_scheduler/task_scheduler.cc b/src/base/task_scheduler/task_scheduler.cc
index f6a3bd6..ee2ccf4 100644
--- a/src/base/task_scheduler/task_scheduler.cc
+++ b/src/base/task_scheduler/task_scheduler.cc
@@ -71,13 +71,6 @@
   SetInstance(MakeUnique<internal::TaskSchedulerImpl>(name));
 }
 
-void TaskScheduler::CreateAndSetDefaultTaskScheduler(
-    StringPiece name,
-    const InitParams& init_params) {
-  Create(name);
-  GetInstance()->Start(init_params);
-}
-
 // static
 void TaskScheduler::SetInstance(std::unique_ptr<TaskScheduler> task_scheduler) {
   delete g_task_scheduler;
diff --git a/src/base/task_scheduler/task_scheduler.h b/src/base/task_scheduler/task_scheduler.h
index 36c4304..e36f7de 100644
--- a/src/base/task_scheduler/task_scheduler.h
+++ b/src/base/task_scheduler/task_scheduler.h
@@ -167,11 +167,6 @@
   // (ensures isolation).
   static void Create(StringPiece name);
 
-  // Deprecated. Use Create() and Start() instead.
-  // TODO(fdoray): Redirect callers to Create() and Start().
-  static void CreateAndSetDefaultTaskScheduler(StringPiece name,
-                                               const InitParams& init_params);
-
   // Registers |task_scheduler| to handle tasks posted through the post_task.h
   // API for this process. For tests, prefer base::test::ScopedTaskScheduler
   // (ensures isolation).
diff --git a/src/base/task_scheduler/task_tracker.cc b/src/base/task_scheduler/task_tracker.cc
index da21d5e..a209a25 100644
--- a/src/base/task_scheduler/task_tracker.cc
+++ b/src/base/task_scheduler/task_tracker.cc
@@ -74,11 +74,15 @@
 const char kRunFunctionName[] = "TaskSchedulerRunTask";
 
 HistogramBase* GetTaskLatencyHistogram(const char* suffix) {
-  // Mimics the UMA_HISTOGRAM_TIMES macro.
-  return Histogram::FactoryTimeGet(
-      std::string("TaskScheduler.TaskLatency.") + suffix,
-      TimeDelta::FromMilliseconds(1), TimeDelta::FromSeconds(10), 50,
-      HistogramBase::kUmaTargetedHistogramFlag);
+  // Mimics the UMA_HISTOGRAM_TIMES macro except we don't specify bounds with
+  // TimeDeltas as FactoryTimeGet assumes millisecond granularity. The minimums
+  // and maximums were chosen to place the 1ms mark at around the 70% range
+  // coverage for buckets giving us good info for tasks that have a latency
+  // below 1ms (most of them) and enough info to assess how bad the latency is
+  // for tasks that exceed this threshold.
+  return Histogram::FactoryGet(
+      std::string("TaskScheduler.TaskLatencyMicroseconds.") + suffix, 1, 20000,
+      50, HistogramBase::kUmaTargetedHistogramFlag);
 }
 
 // Upper bound for the
@@ -211,7 +215,7 @@
 
 void TaskTracker::Flush() {
   AutoSchedulerLock auto_lock(flush_lock_);
-  while (subtle::NoBarrier_Load(&num_pending_undelayed_tasks_) != 0 &&
+  while (subtle::Acquire_Load(&num_pending_undelayed_tasks_) != 0 &&
          !IsShutdownComplete()) {
     flush_cv_->Wait();
   }
@@ -480,7 +484,7 @@
 
 void TaskTracker::DecrementNumPendingUndelayedTasks() {
   const auto new_num_pending_undelayed_tasks =
-      subtle::NoBarrier_AtomicIncrement(&num_pending_undelayed_tasks_, -1);
+      subtle::Barrier_AtomicIncrement(&num_pending_undelayed_tasks_, -1);
   DCHECK_GE(new_num_pending_undelayed_tasks, 0);
   if (new_num_pending_undelayed_tasks == 0) {
     AutoSchedulerLock auto_lock(flush_lock_);
@@ -495,7 +499,7 @@
                                    task->traits.with_base_sync_primitives()
                                ? 1
                                : 0]
-                              ->AddTime(task_latency);
+                              ->Add(task_latency.InMicroseconds());
 }
 
 }  // namespace internal
diff --git a/src/base/task_scheduler/task_tracker.h b/src/base/task_scheduler/task_tracker.h
index 14ca1f4..e83eb56 100644
--- a/src/base/task_scheduler/task_tracker.h
+++ b/src/base/task_scheduler/task_tracker.h
@@ -117,9 +117,9 @@
   const std::unique_ptr<State> state_;
 
   // Number of undelayed tasks that haven't completed their execution. Is
-  // incremented and decremented without a barrier. When it reaches zero,
-  // |flush_lock_| is acquired (forcing memory synchronization) and |flush_cv_|
-  // is signaled.
+  // decremented with a memory barrier after a task runs. Is accessed with an
+  // acquire memory barrier in Flush(). The memory barriers ensure that the
+  // memory written by flushed tasks is visible when Flush() returns.
   subtle::Atomic32 num_pending_undelayed_tasks_ = 0;
 
   // Lock associated with |flush_cv_|. Partially synchronizes access to
diff --git a/src/base/task_scheduler/task_tracker_unittest.cc b/src/base/task_scheduler/task_tracker_unittest.cc
index e1596f7..96bda67 100644
--- a/src/base/task_scheduler/task_tracker_unittest.cc
+++ b/src/base/task_scheduler/task_tracker_unittest.cc
@@ -913,29 +913,33 @@
     const char* const expected_histogram;
   } tests[] = {
       {TaskTraits().WithPriority(TaskPriority::BACKGROUND),
-       "TaskScheduler.TaskLatency.BackgroundTaskPriority"},
+       "TaskScheduler.TaskLatencyMicroseconds.BackgroundTaskPriority"},
       {TaskTraits().WithPriority(TaskPriority::BACKGROUND).MayBlock(),
-       "TaskScheduler.TaskLatency.BackgroundTaskPriority.MayBlock"},
+       "TaskScheduler.TaskLatencyMicroseconds.BackgroundTaskPriority.MayBlock"},
       {TaskTraits()
            .WithPriority(TaskPriority::BACKGROUND)
            .WithBaseSyncPrimitives(),
-       "TaskScheduler.TaskLatency.BackgroundTaskPriority.MayBlock"},
+       "TaskScheduler.TaskLatencyMicroseconds.BackgroundTaskPriority.MayBlock"},
       {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE),
-       "TaskScheduler.TaskLatency.UserVisibleTaskPriority"},
+       "TaskScheduler.TaskLatencyMicroseconds.UserVisibleTaskPriority"},
       {TaskTraits().WithPriority(TaskPriority::USER_VISIBLE).MayBlock(),
-       "TaskScheduler.TaskLatency.UserVisibleTaskPriority.MayBlock"},
+       "TaskScheduler.TaskLatencyMicroseconds.UserVisibleTaskPriority."
+       "MayBlock"},
       {TaskTraits()
            .WithPriority(TaskPriority::USER_VISIBLE)
            .WithBaseSyncPrimitives(),
-       "TaskScheduler.TaskLatency.UserVisibleTaskPriority.MayBlock"},
+       "TaskScheduler.TaskLatencyMicroseconds.UserVisibleTaskPriority."
+       "MayBlock"},
       {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING),
-       "TaskScheduler.TaskLatency.UserBlockingTaskPriority"},
+       "TaskScheduler.TaskLatencyMicroseconds.UserBlockingTaskPriority"},
       {TaskTraits().WithPriority(TaskPriority::USER_BLOCKING).MayBlock(),
-       "TaskScheduler.TaskLatency.UserBlockingTaskPriority.MayBlock"},
+       "TaskScheduler.TaskLatencyMicroseconds.UserBlockingTaskPriority."
+       "MayBlock"},
       {TaskTraits()
            .WithPriority(TaskPriority::USER_BLOCKING)
            .WithBaseSyncPrimitives(),
-       "TaskScheduler.TaskLatency.UserBlockingTaskPriority.MayBlock"}};
+       "TaskScheduler.TaskLatencyMicroseconds.UserBlockingTaskPriority."
+       "MayBlock"}};
 
   for (const auto& test : tests) {
     auto task =
diff --git a/src/base/task_scheduler/task_traits.cc b/src/base/task_scheduler/task_traits.cc
index c00ae6c..ae522f4 100644
--- a/src/base/task_scheduler/task_traits.cc
+++ b/src/base/task_scheduler/task_traits.cc
@@ -12,9 +12,6 @@
 
 namespace base {
 
-TaskTraits::TaskTraits() = default;
-TaskTraits::~TaskTraits() = default;
-
 TaskTraits& TaskTraits::MayBlock() {
   may_block_ = true;
   return *this;
diff --git a/src/base/task_scheduler/task_traits.h b/src/base/task_scheduler/task_traits.h
index 04aea49..cd1d7cc 100644
--- a/src/base/task_scheduler/task_traits.h
+++ b/src/base/task_scheduler/task_traits.h
@@ -8,8 +8,10 @@
 #include <stdint.h>
 
 #include <iosfwd>
+#include <type_traits>
 
 #include "base/base_export.h"
+#include "base/task_scheduler/task_traits_details.h"
 #include "build/build_config.h"
 
 namespace base {
@@ -75,92 +77,138 @@
   BLOCK_SHUTDOWN,
 };
 
+// Tasks with this trait may block. This includes but is not limited to tasks
+// that wait on synchronous file I/O operations: read or write a file from disk,
+// interact with a pipe or a socket, rename or delete a file, enumerate files in
+// a directory, etc. This trait isn't required for the mere use of locks. For
+// tasks that block on base/ synchronization primitives, see the
+// WithBaseSyncPrimitives trait.
+struct MayBlock {};
+
+// Tasks with this trait will pass base::AssertWaitAllowed(), i.e. will be
+// allowed on the following methods :
+// - base::WaitableEvent::Wait
+// - base::ConditionVariable::Wait
+// - base::PlatformThread::Join
+// - base::PlatformThread::Sleep
+// - base::Process::WaitForExit
+// - base::Process::WaitForExitWithTimeout
+//
+// Tasks should generally not use these methods.
+//
+// Instead of waiting on a WaitableEvent or a ConditionVariable, put the work
+// that should happen after the wait in a callback and post that callback from
+// where the WaitableEvent or ConditionVariable would have been signaled. If
+// something needs to be scheduled after many tasks have executed, use
+// base::BarrierClosure.
+//
+// On Windows, join processes asynchronously using base::win::ObjectWatcher.
+//
+// MayBlock() must be specified in conjunction with this trait if and only if
+// removing usage of methods listed above in the labeled tasks would still
+// result in tasks that may block (per MayBlock()'s definition).
+//
+// In doubt, consult with //base/task_scheduler/OWNERS.
+struct WithBaseSyncPrimitives {};
+
 // Describes metadata for a single task or a group of tasks.
 class BASE_EXPORT TaskTraits {
+ private:
+  // ValidTrait ensures TaskTraits' constructor only accepts appropriate types.
+  //
+  // TODO(fdoray): Remove base:: prefixes once the TaskTraits::MayBlock() and
+  // TaskTraits::WithBaseSyncPrimitives() methods are gone.
+  // https://crbug.com/713683
+  struct ValidTrait {
+    ValidTrait(TaskPriority) {}
+    ValidTrait(TaskShutdownBehavior) {}
+    ValidTrait(base::MayBlock) {}
+    ValidTrait(base::WithBaseSyncPrimitives) {}
+  };
+
  public:
-  // Constructs a default TaskTraits for tasks that
+  // Invoking this constructor without arguments produces TaskTraits that are
+  // appropriate for tasks that
   //     (1) don't block (ref. MayBlock() and WithBaseSyncPrimitives()),
   //     (2) prefer inheriting the current priority to specifying their own, and
   //     (3) can either block shutdown or be skipped on shutdown
   //         (TaskScheduler implementation is free to choose a fitting default).
-  // Tasks that require stricter guarantees and/or know the specific
-  // TaskPriority appropriate for them should highlight those by requesting
-  // explicit traits below.
-  TaskTraits();
-  TaskTraits(const TaskTraits& other) = default;
+  //
+  // To get TaskTraits for tasks that require stricter guarantees and/or know
+  // the specific TaskPriority appropriate for them, provide arguments of type
+  // TaskPriority, TaskShutdownBehavior, MayBlock, and/or WithBaseSyncPrimitives
+  // in any order to the constructor.
+  //
+  // E.g.
+  // constexpr base::TaskTraits default_traits = {};
+  // constexpr base::TaskTraits user_visible_traits =
+  //     {base::TaskPriority::USER_VISIBLE};
+  // constexpr base::TaskTraits user_visible_may_block_traits = {
+  //     base::TaskPriority::USER_VISIBLE, base::MayBlock()};
+  // constexpr base::TaskTraits other_user_visible_may_block_traits = {
+  //     base::MayBlock(), base::TaskPriority::USER_VISIBLE};
+  template <class... ArgTypes,
+            class CheckArgumentsAreValid = internal::InitTypes<
+                decltype(ValidTrait(std::declval<ArgTypes>()))...>>
+  constexpr TaskTraits(ArgTypes... args)
+      : priority_set_explicitly_(
+            internal::HasArgOfType<base::TaskPriority, ArgTypes...>::value),
+        priority_(internal::GetValueFromArgList(
+            internal::EnumArgGetter<base::TaskPriority,
+                                    base::TaskPriority::USER_VISIBLE>(),
+            args...)),
+        shutdown_behavior_(internal::GetValueFromArgList(
+            internal::EnumArgGetter<
+                base::TaskShutdownBehavior,
+                base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN>(),
+            args...)),
+        may_block_(internal::GetValueFromArgList(
+            internal::BooleanArgGetter<base::MayBlock>(),
+            args...)),
+        with_base_sync_primitives_(internal::GetValueFromArgList(
+            internal::BooleanArgGetter<base::WithBaseSyncPrimitives>(),
+            args...)) {}
+
+  constexpr TaskTraits(const TaskTraits& other) = default;
   TaskTraits& operator=(const TaskTraits& other) = default;
-  ~TaskTraits();
 
-  // Tasks with this trait may block. This includes but is not limited to tasks
-  // that wait on synchronous file I/O operations: read or write a file from
-  // disk, interact with a pipe or a socket, rename or delete a file, enumerate
-  // files in a directory, etc. This trait isn't required for the mere use of
-  // locks. For tasks that block on base/ synchronization primitives, see
-  // WithBaseSyncPrimitives().
+  // Deprecated.  Prefer constexpr construction to builder paradigm as
+  // documented above.
+  // TODO(fdoray): Remove these methods. https://crbug.com/713683
+  TaskTraits& WithPriority(TaskPriority priority);
+  TaskTraits& WithShutdownBehavior(TaskShutdownBehavior shutdown_behavior);
   TaskTraits& MayBlock();
-
-  // Tasks with this trait will pass base::AssertWaitAllowed(), i.e. will be
-  // allowed on the following methods :
-  // - base::WaitableEvent::Wait
-  // - base::ConditionVariable::Wait
-  // - base::PlatformThread::Join
-  // - base::PlatformThread::Sleep
-  // - base::Process::WaitForExit
-  // - base::Process::WaitForExitWithTimeout
-  //
-  // Tasks should generally not use these methods.
-  //
-  // Instead of waiting on a WaitableEvent or a ConditionVariable, put the work
-  // that should happen after the wait in a callback and post that callback from
-  // where the WaitableEvent or ConditionVariable would have been signaled. If
-  // something needs to be scheduled after many tasks have executed, use
-  // base::BarrierClosure.
-  //
-  // Avoid creating threads. Instead, use
-  // base::Create(Sequenced|SingleTreaded)TaskRunnerWithTraits(). If a thread is
-  // really needed, make it non-joinable and add cleanup work at the end of the
-  // thread's main function (if using base::Thread, override Cleanup()).
-  //
-  // On Windows, join processes asynchronously using base::win::ObjectWatcher.
-  //
-  // MayBlock() must be specified in conjunction with this trait if and only if
-  // removing usage of methods listed above in the labeled tasks would still
-  // result in tasks that may block (per MayBlock()'s definition).
-  //
-  // In doubt, consult with //base/task_scheduler/OWNERS.
   TaskTraits& WithBaseSyncPrimitives();
 
-  // Applies |priority| to tasks with these traits.
-  TaskTraits& WithPriority(TaskPriority priority);
-
-  // Applies |shutdown_behavior| to tasks with these traits.
-  TaskTraits& WithShutdownBehavior(TaskShutdownBehavior shutdown_behavior);
-
-  // Returns true if tasks with these traits may block.
-  bool may_block() const { return may_block_; }
-
-  // Returns true if tasks with these traits may use base/ sync primitives.
-  bool with_base_sync_primitives() const { return with_base_sync_primitives_; }
-
   // Returns true if the priority was set explicitly.
-  bool priority_set_explicitly() const { return priority_set_explicitly_; }
+  constexpr bool priority_set_explicitly() const {
+    return priority_set_explicitly_;
+  }
 
   // Returns the priority of tasks with these traits.
-  TaskPriority priority() const { return priority_; }
+  constexpr TaskPriority priority() const { return priority_; }
 
   // Returns the shutdown behavior of tasks with these traits.
-  TaskShutdownBehavior shutdown_behavior() const { return shutdown_behavior_; }
+  constexpr TaskShutdownBehavior shutdown_behavior() const {
+    return shutdown_behavior_;
+  }
+
+  // Returns true if tasks with these traits may block.
+  constexpr bool may_block() const { return may_block_; }
+
+  // Returns true if tasks with these traits may use base/ sync primitives.
+  constexpr bool with_base_sync_primitives() const {
+    return with_base_sync_primitives_;
+  }
 
  private:
-  // Do not rely on defaults hard-coded below beyond the guarantees described on
-  // the constructor; anything else is subject to change. Tasks should
-  // explicitly request defaults if the behavior is critical to the task.
-  bool may_block_ = false;
-  bool with_base_sync_primitives_ = false;
-  bool priority_set_explicitly_ = false;
-  TaskPriority priority_ = TaskPriority::USER_VISIBLE;
-  TaskShutdownBehavior shutdown_behavior_ =
-      TaskShutdownBehavior::SKIP_ON_SHUTDOWN;
+  // TODO(fdoray): Make these const after refactoring away deprecated builder
+  // pattern.
+  bool priority_set_explicitly_;
+  TaskPriority priority_;
+  TaskShutdownBehavior shutdown_behavior_;
+  bool may_block_;
+  bool with_base_sync_primitives_;
 };
 
 // Returns string literals for the enums defined in this file. These methods
diff --git a/src/base/task_scheduler/task_traits_details.h b/src/base/task_scheduler/task_traits_details.h
new file mode 100644
index 0000000..05fb605
--- /dev/null
+++ b/src/base/task_scheduler/task_traits_details.h
@@ -0,0 +1,128 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_TASK_SCHEDULER_TASK_TRAITS_DETAILS_H_
+#define BASE_TASK_SCHEDULER_TASK_TRAITS_DETAILS_H_
+
+#include <type_traits>
+#include <utility>
+
+namespace base {
+namespace internal {
+
+// HasArgOfType<CheckedType, ArgTypes...>::value is true iff a type in ArgTypes
+// matches CheckedType.
+template <class...>
+struct HasArgOfType : std::false_type {};
+template <class CheckedType, class FirstArgType, class... ArgTypes>
+struct HasArgOfType<CheckedType, FirstArgType, ArgTypes...>
+    : std::conditional<std::is_same<CheckedType, FirstArgType>::value,
+                       std::true_type,
+                       HasArgOfType<CheckedType, ArgTypes...>>::type {};
+
+// When the following call is made:
+//    GetValueFromArgListImpl(CallFirstTag(), GetterType(), args...);
+// If |args| is empty, the compiler selects the first overload. This overload
+// returns getter.GetDefaultValue(). If |args| is not empty, the compiler
+// prefers using the second overload because the type of the first argument
+// matches exactly. This overload returns getter.GetValueFromArg(first_arg),
+// where |first_arg| is the first element in |args|. If
+// getter.GetValueFromArg(first_arg) isn't defined, the compiler uses the third
+// overload instead. This overload discards the first argument in |args| and
+// makes a recursive call to GetValueFromArgListImpl() with CallFirstTag() as
+// first argument.
+
+// Tag dispatching.
+struct CallSecondTag {};
+struct CallFirstTag : CallSecondTag {};
+
+// Overload 1: Default value.
+template <class GetterType>
+constexpr typename GetterType::ValueType GetValueFromArgListImpl(
+    CallFirstTag,
+    GetterType getter) {
+  return getter.GetDefaultValue();
+}
+
+// Overload 2: Get value from first argument. Check that no argument in |args|
+// has the same type as |first_arg|.
+template <class GetterType,
+          class FirstArgType,
+          class... ArgTypes,
+          class TestGetValueFromArgDefined =
+              decltype(std::declval<GetterType>().GetValueFromArg(
+                  std::declval<FirstArgType>()))>
+constexpr typename GetterType::ValueType GetValueFromArgListImpl(
+    CallFirstTag,
+    GetterType getter,
+    const FirstArgType& first_arg,
+    const ArgTypes&... args) {
+  static_assert(!HasArgOfType<FirstArgType, ArgTypes...>::value,
+                "Multiple arguments of the same type were provided to the "
+                "constructor of TaskTraits.");
+  return getter.GetValueFromArg(first_arg);
+}
+
+// Overload 3: Discard first argument.
+template <class GetterType, class FirstArgType, class... ArgTypes>
+constexpr typename GetterType::ValueType GetValueFromArgListImpl(
+    CallSecondTag,
+    GetterType getter,
+    const FirstArgType&,
+    const ArgTypes&... args) {
+  return GetValueFromArgListImpl(CallFirstTag(), getter, args...);
+}
+
+// If there is an argument |arg_of_type| of type Getter::ArgType in |args|,
+// returns getter.GetValueFromArg(arg_of_type). If there are more than one
+// argument of type Getter::ArgType in |args|, generates a compile-time error.
+// Otherwise, returns getter.GetDefaultValue().
+//
+// |getter| must provide:
+//
+// ValueType:
+//     The return type of GetValueFromArgListImpl().
+//
+// ArgType:
+//     The type of the argument from which GetValueFromArgListImpl() derives its
+//     return value.
+//
+// ValueType GetValueFromArg(ArgType):
+//     Converts an argument of type ArgType into a value returned by
+//     GetValueFromArgListImpl().
+//
+// ValueType GetDefaultValue():
+//     Returns the value returned by GetValueFromArgListImpl() if none of its
+//     arguments is of type ArgType.
+template <class GetterType, class... ArgTypes>
+constexpr typename GetterType::ValueType GetValueFromArgList(
+    GetterType getter,
+    const ArgTypes&... args) {
+  return GetValueFromArgListImpl(CallFirstTag(), getter, args...);
+}
+
+template <typename ArgType>
+struct BooleanArgGetter {
+  using ValueType = bool;
+  constexpr ValueType GetValueFromArg(ArgType) const { return true; }
+  constexpr ValueType GetDefaultValue() const { return false; }
+};
+
+template <typename ArgType, ArgType DefaultValue>
+struct EnumArgGetter {
+  using ValueType = ArgType;
+  constexpr ValueType GetValueFromArg(ArgType arg) const { return arg; }
+  constexpr ValueType GetDefaultValue() const { return DefaultValue; }
+};
+
+// Allows instantiation of multiple types in one statement. Used to prevent
+// instantiation of the constructor of TaskTraits with inappropriate argument
+// types.
+template <class...>
+struct InitTypes {};
+
+}  // namespace internal
+}  // namespace base
+
+#endif  // BASE_TASK_SCHEDULER_TASK_TRAITS_DETAILS_H_
diff --git a/src/base/task_scheduler/task_traits_unittest.cc b/src/base/task_scheduler/task_traits_unittest.cc
new file mode 100644
index 0000000..ed9065f
--- /dev/null
+++ b/src/base/task_scheduler/task_traits_unittest.cc
@@ -0,0 +1,81 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/task_scheduler/task_traits.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+
+TEST(TaskSchedulerTaskTraitsTest, Default) {
+  constexpr TaskTraits traits = {};
+  EXPECT_FALSE(traits.priority_set_explicitly());
+  EXPECT_EQ(TaskPriority::USER_VISIBLE, traits.priority());
+  EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
+  EXPECT_FALSE(traits.may_block());
+  EXPECT_FALSE(traits.with_base_sync_primitives());
+}
+
+TEST(TaskSchedulerTaskTraitsTest, TaskPriority) {
+  constexpr TaskTraits traits = {TaskPriority::BACKGROUND};
+  EXPECT_TRUE(traits.priority_set_explicitly());
+  EXPECT_EQ(TaskPriority::BACKGROUND, traits.priority());
+  EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
+  EXPECT_FALSE(traits.may_block());
+  EXPECT_FALSE(traits.with_base_sync_primitives());
+}
+
+TEST(TaskSchedulerTaskTraitsTest, TaskShutdownBehavior) {
+  constexpr TaskTraits traits = {TaskShutdownBehavior::BLOCK_SHUTDOWN};
+  EXPECT_FALSE(traits.priority_set_explicitly());
+  EXPECT_EQ(TaskPriority::USER_VISIBLE, traits.priority());
+  EXPECT_EQ(TaskShutdownBehavior::BLOCK_SHUTDOWN, traits.shutdown_behavior());
+  EXPECT_FALSE(traits.may_block());
+  EXPECT_FALSE(traits.with_base_sync_primitives());
+}
+
+TEST(TaskSchedulerTaskTraitsTest, MayBlock) {
+  constexpr TaskTraits traits = {MayBlock()};
+  EXPECT_FALSE(traits.priority_set_explicitly());
+  EXPECT_EQ(TaskPriority::USER_VISIBLE, traits.priority());
+  EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
+  EXPECT_TRUE(traits.may_block());
+  EXPECT_FALSE(traits.with_base_sync_primitives());
+}
+
+TEST(TaskSchedulerTaskTraitsTest, WithBaseSyncPrimitives) {
+  constexpr TaskTraits traits = {WithBaseSyncPrimitives()};
+  EXPECT_FALSE(traits.priority_set_explicitly());
+  EXPECT_EQ(TaskPriority::USER_VISIBLE, traits.priority());
+  EXPECT_EQ(TaskShutdownBehavior::SKIP_ON_SHUTDOWN, traits.shutdown_behavior());
+  EXPECT_FALSE(traits.may_block());
+  EXPECT_TRUE(traits.with_base_sync_primitives());
+}
+
+TEST(TaskSchedulerTaskTraitsTest, MultipleTraits) {
+  constexpr TaskTraits traits = {TaskPriority::BACKGROUND,
+                                 TaskShutdownBehavior::BLOCK_SHUTDOWN,
+                                 MayBlock(), WithBaseSyncPrimitives()};
+  EXPECT_TRUE(traits.priority_set_explicitly());
+  EXPECT_EQ(TaskPriority::BACKGROUND, traits.priority());
+  EXPECT_EQ(TaskShutdownBehavior::BLOCK_SHUTDOWN, traits.shutdown_behavior());
+  EXPECT_TRUE(traits.may_block());
+  EXPECT_TRUE(traits.with_base_sync_primitives());
+}
+
+TEST(TaskSchedulerTaskTraitsTest, Copy) {
+  constexpr TaskTraits traits = {TaskPriority::BACKGROUND,
+                                 TaskShutdownBehavior::BLOCK_SHUTDOWN,
+                                 MayBlock(), WithBaseSyncPrimitives()};
+  constexpr TaskTraits traits_copy(traits);
+  EXPECT_EQ(traits.priority_set_explicitly(),
+            traits_copy.priority_set_explicitly());
+  EXPECT_EQ(traits.priority(), traits_copy.priority());
+  EXPECT_EQ(traits.shutdown_behavior(), traits_copy.shutdown_behavior());
+  EXPECT_EQ(traits.may_block(), traits_copy.may_block());
+  EXPECT_EQ(traits.with_base_sync_primitives(),
+            traits_copy.with_base_sync_primitives());
+}
+
+}  // namespace base
diff --git a/src/base/task_scheduler/task_traits_unittest.nc b/src/base/task_scheduler/task_traits_unittest.nc
new file mode 100644
index 0000000..97f9c4b
--- /dev/null
+++ b/src/base/task_scheduler/task_traits_unittest.nc
@@ -0,0 +1,31 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This is a "No Compile Test" suite.
+// http://dev.chromium.org/developers/testing/no-compile-tests
+
+#include "base/task_scheduler/task_traits.h"
+
+namespace base {
+
+#if defined(NCTEST_TASK_TRAITS_MULTIPLE_MAY_BLOCK)  // [r"Multiple arguments of the same type were provided to the constructor of TaskTraits."]
+constexpr TaskTraits traits = {MayBlock(), MayBlock()};
+#elif defined(NCTEST_TASK_TRAITS_MULTIPLE_WITH_BASE_SYNC_PRIMITIVES)  // [r"Multiple arguments of the same type were provided to the constructor of TaskTraits."]
+constexpr TaskTraits traits = {WithBaseSyncPrimitives(),
+                               WithBaseSyncPrimitives()};
+#elif defined(NCTEST_TASK_TRAITS_MULTIPLE_TASK_PRIORITY)  // [r"Multiple arguments of the same type were provided to the constructor of TaskTraits."]
+constexpr TaskTraits traits = {TaskPriority::BACKGROUND,
+                               TaskPriority::USER_BLOCKING};
+#elif defined(NCTEST_TASK_TRAITS_MULTIPLE_SHUTDOWN_BEHAVIOR)  // [r"Multiple arguments of the same type were provided to the constructor of TaskTraits."]
+constexpr TaskTraits traits = {TaskShutdownBehavior::BLOCK_SHUTDOWN,
+                               TaskShutdownBehavior::BLOCK_SHUTDOWN};
+#elif defined(NCTEST_TASK_TRAITS_MULTIPLE_SAME_TYPE_MIX)  // [r"Multiple arguments of the same type were provided to the constructor of TaskTraits."]
+constexpr TaskTraits traits = {TaskShutdownBehavior::BLOCK_SHUTDOWN,
+                               MayBlock(),
+                               TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN};
+#elif defined(NCTEST_TASK_TRAITS_INVALID_TYPE)  // [r"no matching constructor for initialization of 'const base::TaskTraits'"]
+constexpr TaskTraits traits = {TaskShutdownBehavior::BLOCK_SHUTDOWN, true};
+#endif
+
+}  // namespace base
diff --git a/src/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumRunnerCommon.java b/src/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumRunnerCommon.java
index fcda910..e5eb273 100644
--- a/src/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumRunnerCommon.java
+++ b/src/base/test/android/javatests/src/org/chromium/base/test/BaseChromiumRunnerCommon.java
@@ -9,6 +9,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
+import android.support.v4.content.ContextCompat;
 
 import org.chromium.android.support.PackageManagerWrapper;
 import org.chromium.base.Log;
@@ -59,9 +60,8 @@
                     try {
                         ApplicationInfo ai = super.getApplicationInfo(packageName, flags);
                         if (packageName.equals(getPackageName())) {
-                            ApplicationInfo appAi =
-                                    super.getApplicationInfo(mAppContext.getPackageName(), flags);
-                            File dataDir = new File(appAi.dataDir, "test-multidex");
+                            File dataDir = new File(
+                                    ContextCompat.getCodeCacheDir(mAppContext), "test-multidex");
                             if (!dataDir.exists() && !dataDir.mkdirs()) {
                                 throw new IOException(String.format(
                                         "Unable to create test multidex directory \"%s\"",
diff --git a/src/base/test/scoped_async_task_scheduler.cc b/src/base/test/scoped_async_task_scheduler.cc
index 0b5736a..f556d9b 100644
--- a/src/base/test/scoped_async_task_scheduler.cc
+++ b/src/base/test/scoped_async_task_scheduler.cc
@@ -21,10 +21,10 @@
   const SchedulerWorkerPoolParams worker_pool_params(
       SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE, kMaxThreads,
       kSuggestedReclaimTime);
-  TaskScheduler::CreateAndSetDefaultTaskScheduler(
-      "ScopedAsync", {worker_pool_params, worker_pool_params,
-                      worker_pool_params, worker_pool_params});
+  TaskScheduler::Create("ScopedAsync");
   task_scheduler_ = TaskScheduler::GetInstance();
+  TaskScheduler::GetInstance()->Start({worker_pool_params, worker_pool_params,
+                                       worker_pool_params, worker_pool_params});
 }
 
 ScopedAsyncTaskScheduler::~ScopedAsyncTaskScheduler() {
diff --git a/src/base/test/scoped_task_environment.cc b/src/base/test/scoped_task_environment.cc
index 1e8782e..af871e6 100644
--- a/src/base/test/scoped_task_environment.cc
+++ b/src/base/test/scoped_task_environment.cc
@@ -27,10 +27,10 @@
   const SchedulerWorkerPoolParams worker_pool_params(
       SchedulerWorkerPoolParams::StandbyThreadPolicy::ONE, kMaxThreads,
       kSuggestedReclaimTime);
-  TaskScheduler::CreateAndSetDefaultTaskScheduler(
-      "ScopedTaskEnvironment", {worker_pool_params, worker_pool_params,
-                                worker_pool_params, worker_pool_params});
+  TaskScheduler::Create("ScopedTaskEnvironment");
   task_scheduler_ = TaskScheduler::GetInstance();
+  TaskScheduler::GetInstance()->Start({worker_pool_params, worker_pool_params,
+                                       worker_pool_params, worker_pool_params});
 }
 
 ScopedTaskEnvironment::~ScopedTaskEnvironment() {
diff --git a/src/base/test/scoped_task_environment.h b/src/base/test/scoped_task_environment.h
index b0a6db3..7f9387c 100644
--- a/src/base/test/scoped_task_environment.h
+++ b/src/base/test/scoped_task_environment.h
@@ -33,7 +33,7 @@
 class ScopedTaskEnvironment {
  public:
   enum class MainThreadType {
-    // The main thread doesn't pump messages.
+    // The main thread doesn't pump system messages.
     DEFAULT,
     // The main thread pumps UI messages.
     UI,
diff --git a/src/base/threading/sequenced_worker_pool_unittest.cc b/src/base/threading/sequenced_worker_pool_unittest.cc
index d358059..10d1d97 100644
--- a/src/base/threading/sequenced_worker_pool_unittest.cc
+++ b/src/base/threading/sequenced_worker_pool_unittest.cc
@@ -247,9 +247,10 @@
       const SchedulerWorkerPoolParams worker_pool_params(
           SchedulerWorkerPoolParams::StandbyThreadPolicy::LAZY,
           static_cast<int>(kNumWorkerThreads), TimeDelta::Max());
-      TaskScheduler::CreateAndSetDefaultTaskScheduler(
-          "SequencedWorkerPoolTest", {worker_pool_params, worker_pool_params,
-                                      worker_pool_params, worker_pool_params});
+      TaskScheduler::Create("SequencedWorkerPoolTest");
+      TaskScheduler::GetInstance()->Start(
+          {worker_pool_params, worker_pool_params, worker_pool_params,
+           worker_pool_params});
 
       // Unit tests run in an environment where SequencedWorkerPool is enabled
       // without redirection to TaskScheduler. For the current unit test,
diff --git a/src/base/timer/elapsed_timer.cc b/src/base/timer/elapsed_timer.cc
index f2a2f71..ca86ccd 100644
--- a/src/base/timer/elapsed_timer.cc
+++ b/src/base/timer/elapsed_timer.cc
@@ -10,6 +10,14 @@
   begin_ = TimeTicks::Now();
 }
 
+ElapsedTimer::ElapsedTimer(ElapsedTimer&& other) {
+  begin_ = other.begin_;
+}
+
+void ElapsedTimer::operator=(ElapsedTimer&& other) {
+  begin_ = other.begin_;
+}
+
 TimeDelta ElapsedTimer::Elapsed() const {
   return TimeTicks::Now() - begin_;
 }
diff --git a/src/base/timer/elapsed_timer.h b/src/base/timer/elapsed_timer.h
index 592858a..9dfa12c 100644
--- a/src/base/timer/elapsed_timer.h
+++ b/src/base/timer/elapsed_timer.h
@@ -15,6 +15,9 @@
 class BASE_EXPORT ElapsedTimer {
  public:
   ElapsedTimer();
+  ElapsedTimer(ElapsedTimer&& other);
+
+  void operator=(ElapsedTimer&& other);
 
   // Returns the time elapsed since object construction.
   TimeDelta Elapsed() const;
diff --git a/src/base/trace_event/heap_profiler_allocation_context.cc b/src/base/trace_event/heap_profiler_allocation_context.cc
index 0f330a8..c001945 100644
--- a/src/base/trace_event/heap_profiler_allocation_context.cc
+++ b/src/base/trace_event/heap_profiler_allocation_context.cc
@@ -48,10 +48,12 @@
 bool operator!=(const AllocationContext& lhs, const AllocationContext& rhs) {
   return !(lhs == rhs);
 }
+
 }  // namespace trace_event
 }  // namespace base
 
-namespace BASE_HASH_NAMESPACE {
+namespace std {
+
 using base::trace_event::AllocationContext;
 using base::trace_event::Backtrace;
 using base::trace_event::StackFrame;
@@ -85,4 +87,4 @@
   return (backtrace_hash * 3) + type_hash;
 }
 
-}  // BASE_HASH_NAMESPACE
+}  // namespace std
diff --git a/src/base/trace_event/heap_profiler_allocation_context.h b/src/base/trace_event/heap_profiler_allocation_context.h
index 24e2dec..3d8053c 100644
--- a/src/base/trace_event/heap_profiler_allocation_context.h
+++ b/src/base/trace_event/heap_profiler_allocation_context.h
@@ -8,8 +8,9 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <functional>
+
 #include "base/base_export.h"
-#include "base/containers/hash_tables.h"
 
 namespace base {
 namespace trace_event {
@@ -109,7 +110,7 @@
 }  // namespace trace_event
 }  // namespace base
 
-namespace BASE_HASH_NAMESPACE {
+namespace std {
 
 template <>
 struct BASE_EXPORT hash<base::trace_event::StackFrame> {
@@ -126,6 +127,6 @@
   size_t operator()(const base::trace_event::AllocationContext& context) const;
 };
 
-}  // BASE_HASH_NAMESPACE
+}  // namespace std
 
 #endif  // BASE_TRACE_EVENT_HEAP_PROFILER_ALLOCATION_CONTEXT_H_
diff --git a/src/base/trace_event/heap_profiler_allocation_register.cc b/src/base/trace_event/heap_profiler_allocation_register.cc
index b9f440a..bd06bd2 100644
--- a/src/base/trace_event/heap_profiler_allocation_register.cc
+++ b/src/base/trace_event/heap_profiler_allocation_register.cc
@@ -158,7 +158,8 @@
   size_t resident = sizeof(AllocationRegister) +
                     allocations_.EstimateUsedMemory() +
                     backtraces_.EstimateUsedMemory();
-  overhead->Add("AllocationRegister", allocated, resident);
+  overhead->Add(TraceEventMemoryOverhead::kHeapProfilerAllocationRegister,
+                allocated, resident);
 }
 
 AllocationRegister::BacktraceMap::KVIndex AllocationRegister::InsertBacktrace(
diff --git a/src/base/trace_event/heap_profiler_heap_dump_writer.cc b/src/base/trace_event/heap_profiler_heap_dump_writer.cc
index 8043fff..70bd87a 100644
--- a/src/base/trace_event/heap_profiler_heap_dump_writer.cc
+++ b/src/base/trace_event/heap_profiler_heap_dump_writer.cc
@@ -78,8 +78,7 @@
 // |is_broken_down_by_type_name| set depending on the property to group by.
 std::vector<Bucket> GetSubbuckets(const Bucket& bucket,
                                   BreakDownMode break_by) {
-  base::hash_map<const void*, Bucket> breakdown;
-
+  std::unordered_map<const void*, Bucket> breakdown;
 
   if (break_by == BreakDownMode::kByBacktrace) {
     for (const auto& context_and_metrics : bucket.metrics_by_context) {
@@ -241,7 +240,8 @@
 }
 
 const std::set<Entry>& HeapDumpWriter::Summarize(
-    const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context) {
+    const std::unordered_map<AllocationContext, AllocationMetrics>&
+        metrics_by_context) {
   // Start with one bucket that represents the entire heap. Iterate by
   // reference, because the allocation contexts are going to point to allocation
   // contexts stored in |metrics_by_context|.
@@ -309,7 +309,8 @@
 }  // namespace internal
 
 std::unique_ptr<TracedValue> ExportHeapDump(
-    const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context,
+    const std::unordered_map<AllocationContext, AllocationMetrics>&
+        metrics_by_context,
     const MemoryDumpSessionState& session_state) {
   internal::HeapDumpWriter writer(
       session_state.stack_frame_deduplicator(),
diff --git a/src/base/trace_event/heap_profiler_heap_dump_writer.h b/src/base/trace_event/heap_profiler_heap_dump_writer.h
index 6e9d29d..8463906 100644
--- a/src/base/trace_event/heap_profiler_heap_dump_writer.h
+++ b/src/base/trace_event/heap_profiler_heap_dump_writer.h
@@ -9,9 +9,9 @@
 
 #include <memory>
 #include <set>
+#include <unordered_map>
 
 #include "base/base_export.h"
-#include "base/containers/hash_tables.h"
 #include "base/macros.h"
 #include "base/trace_event/heap_profiler_allocation_context.h"
 
@@ -28,7 +28,8 @@
 // trace log, following the format described in https://goo.gl/KY7zVE. The
 // number of entries is kept reasonable because long tails are not included.
 BASE_EXPORT std::unique_ptr<TracedValue> ExportHeapDump(
-    const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context,
+    const std::unordered_map<AllocationContext, AllocationMetrics>&
+        metrics_by_context,
     const MemoryDumpSessionState& session_state);
 
 namespace internal {
@@ -77,7 +78,8 @@
   // in the "entries" array. The number of entries is kept reasonable because
   // long tails are not included. Use |Serialize| to convert to a traced value.
   const std::set<Entry>& Summarize(
-      const hash_map<AllocationContext, AllocationMetrics>& metrics_by_context);
+      const std::unordered_map<AllocationContext, AllocationMetrics>&
+          metrics_by_context);
 
  private:
   // Inserts an |Entry| for |Bucket| into |entries_|. Returns false if the
diff --git a/src/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc b/src/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc
index 800b623..b090eee 100644
--- a/src/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc
+++ b/src/base/trace_event/heap_profiler_heap_dump_writer_unittest.cc
@@ -179,7 +179,7 @@
 }
 
 TEST(HeapDumpWriterTest, BacktraceTypeNameTable) {
-  hash_map<AllocationContext, AllocationMetrics> metrics_by_context;
+  std::unordered_map<AllocationContext, AllocationMetrics> metrics_by_context;
 
   AllocationContext ctx;
   ctx.backtrace.frames[0] = kBrowserMain;
@@ -274,7 +274,7 @@
 }
 
 TEST(HeapDumpWriterTest, InsignificantValuesNotDumped) {
-  hash_map<AllocationContext, AllocationMetrics> metrics_by_context;
+  std::unordered_map<AllocationContext, AllocationMetrics> metrics_by_context;
 
   AllocationContext ctx;
   ctx.backtrace.frames[0] = kBrowserMain;
diff --git a/src/base/trace_event/heap_profiler_stack_frame_deduplicator.cc b/src/base/trace_event/heap_profiler_stack_frame_deduplicator.cc
index fc5da0d..efae0ca 100644
--- a/src/base/trace_event/heap_profiler_stack_frame_deduplicator.cc
+++ b/src/base/trace_event/heap_profiler_stack_frame_deduplicator.cc
@@ -123,7 +123,7 @@
     TraceEventMemoryOverhead* overhead) {
   size_t memory_usage =
       EstimateMemoryUsage(frames_) + EstimateMemoryUsage(roots_);
-  overhead->Add("StackFrameDeduplicator",
+  overhead->Add(TraceEventMemoryOverhead::kHeapProfilerStackFrameDeduplicator,
                 sizeof(StackFrameDeduplicator) + memory_usage);
 }
 
diff --git a/src/base/trace_event/heap_profiler_type_name_deduplicator.cc b/src/base/trace_event/heap_profiler_type_name_deduplicator.cc
index a6dab51..76cf697 100644
--- a/src/base/trace_event/heap_profiler_type_name_deduplicator.cc
+++ b/src/base/trace_event/heap_profiler_type_name_deduplicator.cc
@@ -107,7 +107,7 @@
 void TypeNameDeduplicator::EstimateTraceMemoryOverhead(
     TraceEventMemoryOverhead* overhead) {
   size_t memory_usage = EstimateMemoryUsage(type_ids_);
-  overhead->Add("TypeNameDeduplicator",
+  overhead->Add(TraceEventMemoryOverhead::kHeapProfilerTypeNameDeduplicator,
                 sizeof(TypeNameDeduplicator) + memory_usage);
 }
 
diff --git a/src/base/trace_event/malloc_dump_provider.cc b/src/base/trace_event/malloc_dump_provider.cc
index 7f27060..3a40172 100644
--- a/src/base/trace_event/malloc_dump_provider.cc
+++ b/src/base/trace_event/malloc_dump_provider.cc
@@ -6,6 +6,8 @@
 
 #include <stddef.h>
 
+#include <unordered_map>
+
 #include "base/allocator/allocator_extension.h"
 #include "base/allocator/allocator_shim.h"
 #include "base/allocator/features.h"
@@ -296,7 +298,7 @@
   // profiler does not see unabalanced malloc/free calls from these containers.
   {
     TraceEventMemoryOverhead overhead;
-    hash_map<AllocationContext, AllocationMetrics> metrics_by_context;
+    std::unordered_map<AllocationContext, AllocationMetrics> metrics_by_context;
     {
       AutoLock lock(allocation_register_lock_);
       if (allocation_register_) {
diff --git a/src/base/trace_event/memory_dump_manager.cc b/src/base/trace_event/memory_dump_manager.cc
index c7619a9..1cb0e92 100644
--- a/src/base/trace_event/memory_dump_manager.cc
+++ b/src/base/trace_event/memory_dump_manager.cc
@@ -54,31 +54,6 @@
 StaticAtomicSequenceNumber g_next_guid;
 MemoryDumpManager* g_instance_for_testing = nullptr;
 
-// The list of names of dump providers that are blacklisted from strict thread
-// affinity check on unregistration. These providers could potentially cause
-// crashes on build bots if they do not unregister on right thread.
-// TODO(ssid): Fix all the dump providers to unregister if needed and clear the
-// blacklist, crbug.com/643438.
-const char* const kStrictThreadCheckBlacklist[] = {
-    "ClientDiscardableSharedMemoryManager",
-    "ContextProviderCommandBuffer",
-    "DiscardableSharedMemoryManager",
-    "FontCaches",
-    "GpuMemoryBufferVideoFramePool",
-    "IndexedDBBackingStore",
-    "Sql",
-    "ThreadLocalEventBuffer",
-    "TraceLog",
-    "URLRequestContext",
-    "VpxVideoDecoder",
-    "cc::SoftwareImageDecodeCache",
-    "cc::StagingBufferPool",
-    "gpu::BufferManager",
-    "gpu::MappedMemoryManager",
-    "gpu::RenderbufferManager",
-    "BlacklistTestDumpProvider"  // for testing
-};
-
 // Callback wrapper to hook upon the completion of RequestGlobalDump() and
 // inject trace markers.
 void OnGlobalDumpDone(GlobalMemoryDumpCallback wrapped_callback,
@@ -103,6 +78,7 @@
   if (pmd->has_process_totals()) {
     const ProcessMemoryTotals* totals = pmd->process_totals();
     osDump->resident_set_kb = totals->resident_set_bytes() / 1024;
+    osDump->platform_private_footprint = totals->GetPlatformPrivateFootprint();
   }
 }
 
@@ -182,7 +158,7 @@
 
 MemoryDumpManager::MemoryDumpManager()
     : is_coordinator_(false),
-      memory_tracing_enabled_(0),
+      is_enabled_(0),
       tracing_process_id_(kInvalidTracingProcessId),
       dumper_registrations_ignored_for_testing_(false),
       heap_profiling_enabled_(false) {
@@ -191,12 +167,14 @@
   // At this point the command line may not be initialized but we try to
   // enable the heap profiler to capture allocations as soon as possible.
   EnableHeapProfilingIfNeeded();
-
-  strict_thread_check_blacklist_.insert(std::begin(kStrictThreadCheckBlacklist),
-                                        std::end(kStrictThreadCheckBlacklist));
 }
 
 MemoryDumpManager::~MemoryDumpManager() {
+  AutoLock lock(lock_);
+  if (dump_thread_) {
+    dump_thread_->Stop();
+    dump_thread_.reset();
+  }
 }
 
 void MemoryDumpManager::EnableHeapProfilingIfNeeded() {
@@ -210,7 +188,7 @@
 
   std::string profiling_mode = CommandLine::ForCurrentProcess()
       ->GetSwitchValueASCII(switches::kEnableHeapProfiling);
-  if (profiling_mode == "") {
+  if (profiling_mode == switches::kEnableHeapProfilingModePseudo) {
     AllocationContextTracker::SetCaptureMode(
         AllocationContextTracker::CaptureMode::PSEUDO_STACK);
 #if !defined(OS_NACL)
@@ -393,15 +371,7 @@
     // - When the provider is removed from other clients (MemoryPeakDetector).
     DCHECK(!(*mdp_iter)->owned_dump_provider);
     (*mdp_iter)->owned_dump_provider = std::move(owned_mdp);
-  } else if (strict_thread_check_blacklist_.count((*mdp_iter)->name) == 0 ||
-             subtle::NoBarrier_Load(&memory_tracing_enabled_)) {
-    // If dump provider's name is on |strict_thread_check_blacklist_|, then the
-    // DCHECK is fired only when tracing is enabled. Otherwise the DCHECK is
-    // fired even when tracing is not enabled (stricter).
-    // TODO(ssid): Remove this condition after removing all the dump providers
-    // in the blacklist and the buildbots are no longer flakily hitting the
-    // DCHECK, crbug.com/643438.
-
+  } else {
     // If you hit this DCHECK, your dump provider has a bug.
     // Unregistration of a MemoryDumpProvider is safe only if:
     // - The MDP has specified a sequenced task runner affinity AND the
@@ -437,7 +407,7 @@
     const GlobalMemoryDumpCallback& callback) {
   // Bail out immediately if tracing is not enabled at all or if the dump mode
   // is not allowed.
-  if (!UNLIKELY(subtle::NoBarrier_Load(&memory_tracing_enabled_)) ||
+  if (!UNLIKELY(subtle::NoBarrier_Load(&is_enabled_)) ||
       !IsDumpModeAllowed(level_of_detail)) {
     VLOG(1) << kLogPrefix << " failed because " << kTraceCategory
             << " tracing category is not enabled or the requested dump mode is "
@@ -492,6 +462,20 @@
   return false;
 }
 
+scoped_refptr<base::SequencedTaskRunner>
+MemoryDumpManager::GetOrCreateBgTaskRunnerLocked() {
+  lock_.AssertAcquired();
+
+  if (dump_thread_)
+    return dump_thread_->task_runner();
+
+  dump_thread_ = MakeUnique<Thread>("MemoryInfra");
+  bool started = dump_thread_->Start();
+  CHECK(started);
+
+  return dump_thread_->task_runner();
+}
+
 void MemoryDumpManager::CreateProcessDump(
     const MemoryDumpRequestArgs& args,
     const ProcessMemoryDumpCallback& callback) {
@@ -515,12 +499,9 @@
   {
     AutoLock lock(lock_);
 
-    // |dump_thread_| can be nullptr is tracing was disabled before reaching
-    // here. SetupNextMemoryDump() is robust enough to tolerate it and will
-    // NACK the dump.
     pmd_async_state.reset(new ProcessMemoryDumpAsyncState(
         args, dump_providers_, session_state_, callback,
-        dump_thread_ ? dump_thread_->task_runner() : nullptr));
+        GetOrCreateBgTaskRunnerLocked()));
 
     // Safety check to prevent reaching here without calling RequestGlobalDump,
     // with disallowed modes. If |session_state_| is null then tracing is
@@ -554,22 +535,22 @@
   // (for discounting trace memory overhead) while holding the |lock_|.
   TraceLog::GetInstance()->InitializeThreadLocalEventBufferIfSupported();
 
-  // |dump_thread_| might be destroyed before getting this point.
-  // It means that tracing was disabled right before starting this dump.
-  // Anyway either tracing is stopped or this was the last hop, create a trace
+  // MDM might have been disabled before getting to this point.
+  // Anyway either MDM is disabled or this was the last hop, create a trace
   // event, add it to the trace and finalize process dump invoking the callback.
-  if (!pmd_async_state->dump_thread_task_runner.get()) {
+  if (!subtle::NoBarrier_Load(&is_enabled_)) {
     if (pmd_async_state->pending_dump_providers.empty()) {
-      VLOG(1) << kLogPrefix << " failed because dump thread was destroyed"
+      VLOG(1) << kLogPrefix << " failed because MemoryDumpManager was disabled"
               << " before finalizing the dump";
     } else {
-      VLOG(1) << kLogPrefix << " failed because dump thread was destroyed"
+      VLOG(1) << kLogPrefix << " failed because MemoryDumpManager was disabled"
               << " before dumping "
               << pmd_async_state->pending_dump_providers.back().get()->name;
     }
     pmd_async_state->dump_successful = false;
     pmd_async_state->pending_dump_providers.clear();
   }
+
   if (pmd_async_state->pending_dump_providers.empty())
     return FinalizeDumpAndAddToTrace(std::move(pmd_async_state));
 
@@ -588,7 +569,7 @@
   }
 
   // If the dump provider did not specify a task runner affinity, dump on
-  // |dump_thread_| which is already checked above for presence.
+  // |dump_thread_|.
   SequencedTaskRunner* task_runner = mdpinfo->task_runner.get();
   if (!task_runner) {
     DCHECK(mdpinfo->options.dumps_on_single_thread_task_runner);
@@ -794,12 +775,6 @@
 
 void MemoryDumpManager::Enable(
     const TraceConfig::MemoryDumpConfig& memory_dump_config) {
-  // Spin-up the thread used to invoke unbound dump providers.
-  std::unique_ptr<Thread> dump_thread(new Thread("MemoryInfra"));
-  if (!dump_thread->Start()) {
-    LOG(ERROR) << "Failed to start the memory-infra thread for tracing";
-    return;
-  }
 
   scoped_refptr<MemoryDumpSessionState> session_state =
       new MemoryDumpSessionState;
@@ -835,10 +810,7 @@
   DCHECK(!request_dump_function_.is_null());
   session_state_ = session_state;
 
-  DCHECK(!dump_thread_);
-  dump_thread_ = std::move(dump_thread);
-
-  subtle::NoBarrier_Store(&memory_tracing_enabled_, 1);
+  subtle::NoBarrier_Store(&is_enabled_, 1);
 
   MemoryDumpScheduler::Config periodic_config;
   bool peak_detector_configured = false;
@@ -860,7 +832,7 @@
       MemoryPeakDetector::GetInstance()->Setup(
           BindRepeating(&MemoryDumpManager::GetDumpProvidersForPolling,
                         Unretained(this)),
-          dump_thread_->task_runner(),
+          GetOrCreateBgTaskRunnerLocked(),
           BindRepeating(&OnPeakDetected, trigger.level_of_detail));
 
       MemoryPeakDetector::Config peak_config;
@@ -873,7 +845,7 @@
       // When peak detection is enabled, trigger a dump straight away as it
       // gives a good reference point for analyzing the trace.
       if (is_coordinator_) {
-        dump_thread_->task_runner()->PostTask(
+        GetOrCreateBgTaskRunnerLocked()->PostTask(
             FROM_HERE, BindRepeating(&OnPeakDetected, trigger.level_of_detail));
       }
     }
@@ -882,7 +854,7 @@
   // Only coordinator process triggers periodic global memory dumps.
   if (is_coordinator_ && !periodic_config.triggers.empty()) {
     MemoryDumpScheduler::GetInstance()->Start(periodic_config,
-                                              dump_thread_->task_runner());
+                                              GetOrCreateBgTaskRunnerLocked());
   }
 }
 
@@ -890,22 +862,15 @@
   // There might be a memory dump in progress while this happens. Therefore,
   // ensure that the MDM state which depends on the tracing enabled / disabled
   // state is always accessed by the dumping methods holding the |lock_|.
-  if (!subtle::NoBarrier_Load(&memory_tracing_enabled_))
+  if (!subtle::NoBarrier_Load(&is_enabled_))
     return;
-  subtle::NoBarrier_Store(&memory_tracing_enabled_, 0);
-  std::unique_ptr<Thread> dump_thread;
+  subtle::NoBarrier_Store(&is_enabled_, 0);
   {
     AutoLock lock(lock_);
     MemoryDumpScheduler::GetInstance()->Stop();
     MemoryPeakDetector::GetInstance()->TearDown();
-    dump_thread = std::move(dump_thread_);
     session_state_ = nullptr;
   }
-
-  // Thread stops are blocking and must be performed outside of the |lock_|
-  // or will deadlock (e.g., if SetupNextMemoryDump() tries to acquire it).
-  if (dump_thread)
-    dump_thread->Stop();
 }
 
 bool MemoryDumpManager::IsDumpModeAllowed(MemoryDumpLevelOfDetail dump_mode) {
@@ -920,7 +885,7 @@
     const MemoryDumpProviderInfo::OrderedSet& dump_providers,
     scoped_refptr<MemoryDumpSessionState> session_state,
     ProcessMemoryDumpCallback callback,
-    scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner)
+    scoped_refptr<SequencedTaskRunner> dump_thread_task_runner)
     : req_args(req_args),
       session_state(std::move(session_state)),
       callback(callback),
diff --git a/src/base/trace_event/memory_dump_manager.h b/src/base/trace_event/memory_dump_manager.h
index 7d35ca5..03192bf 100644
--- a/src/base/trace_event/memory_dump_manager.h
+++ b/src/base/trace_event/memory_dump_manager.h
@@ -34,6 +34,7 @@
 
 namespace base {
 
+class SequencedTaskRunner;
 class SingleThreadTaskRunner;
 class Thread;
 
@@ -198,7 +199,7 @@
         const MemoryDumpProviderInfo::OrderedSet& dump_providers,
         scoped_refptr<MemoryDumpSessionState> session_state,
         ProcessMemoryDumpCallback callback,
-        scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner);
+        scoped_refptr<SequencedTaskRunner> dump_thread_task_runner);
     ~ProcessMemoryDumpAsyncState();
 
     // Gets or creates the memory dump container for the given target process.
@@ -239,7 +240,7 @@
     // as a separate variable as it needs to be accessed by arbitrary dumpers'
     // threads outside of the lock_ to avoid races when disabling tracing.
     // It is immutable for all the duration of a tracing session.
-    const scoped_refptr<SingleThreadTaskRunner> dump_thread_task_runner;
+    const scoped_refptr<SequencedTaskRunner> dump_thread_task_runner;
 
    private:
     DISALLOW_COPY_AND_ASSIGN(ProcessMemoryDumpAsyncState);
@@ -257,6 +258,9 @@
   void FinalizeDumpAndAddToTrace(
       std::unique_ptr<ProcessMemoryDumpAsyncState> pmd_async_state);
 
+  // Lazily initializes dump_thread_ and returns its TaskRunner.
+  scoped_refptr<base::SequencedTaskRunner> GetOrCreateBgTaskRunnerLocked();
+
   // Calls InvokeOnMemoryDump() for the next MDP on the task runner specified by
   // the MDP while registration. On failure to do so, skips and continues to
   // next MDP.
@@ -291,11 +295,6 @@
   // Shared among all the PMDs to keep state scoped to the tracing session.
   scoped_refptr<MemoryDumpSessionState> session_state_;
 
-  // The list of names of dump providers that are blacklisted from strict thread
-  // affinity check on unregistration.
-  std::unordered_set<StringPiece, StringPieceHash>
-      strict_thread_check_blacklist_;
-
   std::unique_ptr<MemoryTracingObserver> tracing_observer_;
 
   // Function provided by the embedder to handle global dump requests.
@@ -310,7 +309,7 @@
 
   // Optimization to avoid attempting any memory dump (i.e. to not walk an empty
   // dump_providers_enabled_ list) when tracing is not enabled.
-  subtle::AtomicWord memory_tracing_enabled_;
+  subtle::AtomicWord is_enabled_;
 
   // Thread used for MemoryDumpProviders which don't specify a task runner
   // affinity.
diff --git a/src/base/trace_event/memory_dump_manager_unittest.cc b/src/base/trace_event/memory_dump_manager_unittest.cc
index 946b5b6..48ae454 100644
--- a/src/base/trace_event/memory_dump_manager_unittest.cc
+++ b/src/base/trace_event/memory_dump_manager_unittest.cc
@@ -116,10 +116,8 @@
   event.Wait();
 }
 
-// Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback by
-// trimming off the result argument and calling the global callback.
-// TODO (fmeawad): we should keep the results for verification, but currently
-// all results are empty.
+// Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback
+// and keeps around the process-local result.
 void ProcessDumpCallbackAdapter(
     GlobalMemoryDumpCallback callback,
     uint64_t dump_guid,
@@ -248,6 +246,7 @@
     last_callback_success_ = false;
     message_loop_.reset(new MessageLoop());
     mdm_.reset(new MemoryDumpManager());
+    results_.clear();
     MemoryDumpManager::SetInstanceForTesting(mdm_.get());
     ASSERT_EQ(mdm_.get(), MemoryDumpManager::GetInstance());
   }
@@ -310,13 +309,31 @@
     return MemoryDumpManager::kMaxConsecutiveFailuresCount;
   }
 
+  const std::vector<MemoryDumpCallbackResult>* GetResults() const {
+    return &results_;
+  }
+
   const MemoryDumpProvider::Options kDefaultOptions;
   std::unique_ptr<MemoryDumpManager> mdm_;
   GlobalMemoryDumpHandler global_dump_handler_;
   bool last_callback_success_;
 
+  // Adapts a ProcessMemoryDumpCallback into a GlobalMemoryDumpCallback by
+  // trimming off the result argument and calling the global callback.
+  void ProcessDumpRecordingCallbackAdapter(
+      GlobalMemoryDumpCallback callback,
+      uint64_t dump_guid,
+      bool success,
+      const base::Optional<MemoryDumpCallbackResult>& result) {
+    if (result.has_value()) {
+      results_.push_back(result.value());
+    }
+    callback.Run(dump_guid, success);
+  }
+
  private:
   std::unique_ptr<MessageLoop> message_loop_;
+  std::vector<MemoryDumpCallbackResult> results_;
 
   // We want our singleton torn down after each test.
   ShadowingAtExitManager at_exit_manager_;
@@ -1270,23 +1287,6 @@
   DisableTracing();
 }
 
-TEST_F(MemoryDumpManagerTest, TestBlacklistedUnsafeUnregistration) {
-  InitializeMemoryDumpManager(false /* is_coordinator */);
-  MockMemoryDumpProvider mdp1;
-  RegisterDumpProvider(&mdp1, nullptr, kDefaultOptions,
-                       "BlacklistTestDumpProvider");
-  // Not calling UnregisterAndDeleteDumpProviderSoon() should not crash.
-  mdm_->UnregisterDumpProvider(&mdp1);
-
-  Thread thread("test thread");
-  thread.Start();
-  RegisterDumpProvider(&mdp1, thread.task_runner(), kDefaultOptions,
-                       "BlacklistTestDumpProvider");
-  // Unregistering on wrong thread should not crash.
-  mdm_->UnregisterDumpProvider(&mdp1);
-  thread.Stop();
-}
-
 // Tests that we can manually take a dump without enabling tracing.
 TEST_F(MemoryDumpManagerTest, DumpWithTracingDisabled) {
   InitializeMemoryDumpManager(false /* is_coordinator */);
@@ -1318,5 +1318,84 @@
   mdm_->UnregisterDumpProvider(&mdp);
 }
 
+TEST_F(MemoryDumpManagerTest, TestSummaryComputation) {
+  InitializeMemoryDumpManager(false /* is_coordinator */);
+  MockMemoryDumpProvider mdp;
+  RegisterDumpProvider(&mdp, ThreadTaskRunnerHandle::Get());
+
+  const MemoryDumpSessionState* session_state =
+      mdm_->session_state_for_testing().get();
+
+  EXPECT_CALL(global_dump_handler_, RequestGlobalMemoryDump(_, _))
+      .WillOnce(Invoke([this](const MemoryDumpRequestArgs& args,
+                              const GlobalMemoryDumpCallback& callback) {
+        ProcessMemoryDumpCallback process_callback =
+            Bind(&MemoryDumpManagerTest_TestSummaryComputation_Test::
+                     ProcessDumpRecordingCallbackAdapter,
+                 Unretained(this), callback);
+        mdm_->CreateProcessDump(args, process_callback);
+      }));
+
+  EXPECT_CALL(mdp, OnMemoryDump(_, _))
+      .Times(1)
+      .WillRepeatedly(Invoke([session_state](const MemoryDumpArgs&,
+                                             ProcessMemoryDump* pmd) -> bool {
+        auto* size = MemoryAllocatorDump::kNameSize;
+        auto* bytes = MemoryAllocatorDump::kUnitsBytes;
+        const uint32_t kB = 1024;
+
+        pmd->CreateAllocatorDump("malloc")->AddScalar(size, bytes, 1 * kB);
+        pmd->CreateAllocatorDump("malloc/ignored")
+            ->AddScalar(size, bytes, 99 * kB);
+
+        pmd->CreateAllocatorDump("blink_gc")->AddScalar(size, bytes, 2 * kB);
+        pmd->CreateAllocatorDump("blink_gc/ignored")
+            ->AddScalar(size, bytes, 99 * kB);
+
+        pmd->CreateAllocatorDump("v8/foo")->AddScalar(size, bytes, 1 * kB);
+        pmd->CreateAllocatorDump("v8/bar")->AddScalar(size, bytes, 2 * kB);
+        pmd->CreateAllocatorDump("v8")->AddScalar(size, bytes, 99 * kB);
+
+        pmd->CreateAllocatorDump("partition_alloc")
+            ->AddScalar(size, bytes, 99 * kB);
+        pmd->CreateAllocatorDump("partition_alloc/allocated_objects")
+            ->AddScalar(size, bytes, 99 * kB);
+        pmd->CreateAllocatorDump("partition_alloc/allocated_objects/ignored")
+            ->AddScalar(size, bytes, 99 * kB);
+        pmd->CreateAllocatorDump("partition_alloc/partitions")
+            ->AddScalar(size, bytes, 99 * kB);
+        pmd->CreateAllocatorDump("partition_alloc/partitions/foo")
+            ->AddScalar(size, bytes, 2 * kB);
+        pmd->CreateAllocatorDump("partition_alloc/partitions/bar")
+            ->AddScalar(size, bytes, 2 * kB);
+        pmd->process_totals()->set_resident_set_bytes(5 * kB);
+        pmd->set_has_process_totals();
+        return true;
+      }));
+
+  last_callback_success_ = false;
+
+  EnableTracingWithLegacyCategories(MemoryDumpManager::kTraceCategory);
+  RequestGlobalDumpAndWait(MemoryDumpType::EXPLICITLY_TRIGGERED,
+                           MemoryDumpLevelOfDetail::LIGHT);
+  DisableTracing();
+
+  // We shouldn't see any of the 99 values from above.
+  EXPECT_TRUE(last_callback_success_);
+  ASSERT_EQ(1u, GetResults()->size());
+  MemoryDumpCallbackResult result = GetResults()->front();
+  // For malloc we only count the root "malloc" not children "malloc/*".
+  EXPECT_EQ(1u, result.chrome_dump.malloc_total_kb);
+  // For blink_gc we only count the root "blink_gc" not children "blink_gc/*".
+  EXPECT_EQ(2u, result.chrome_dump.blink_gc_total_kb);
+  // For v8 we count the children ("v8/*") as the root total is not given.
+  EXPECT_EQ(3u, result.chrome_dump.v8_total_kb);
+  // partition_alloc has partition_alloc/allocated_objects/* which is a subset
+  // of partition_alloc/partitions/* so we only count the latter.
+  EXPECT_EQ(4u, result.chrome_dump.partition_alloc_total_kb);
+  // resident_set_kb should read from process_totals.
+  EXPECT_EQ(5u, result.os_dump.resident_set_kb);
+};
+
 }  // namespace trace_event
 }  // namespace base
diff --git a/src/base/trace_event/memory_dump_request_args.h b/src/base/trace_event/memory_dump_request_args.h
index bc5cc38..9eb6ade 100644
--- a/src/base/trace_event/memory_dump_request_args.h
+++ b/src/base/trace_event/memory_dump_request_args.h
@@ -16,6 +16,7 @@
 #include "base/callback.h"
 #include "base/optional.h"
 #include "base/process/process_handle.h"
+#include "base/trace_event/process_memory_totals.h"
 
 namespace base {
 namespace trace_event {
@@ -83,6 +84,7 @@
 struct BASE_EXPORT MemoryDumpCallbackResult {
   struct OSMemDump {
     uint32_t resident_set_kb = 0;
+    ProcessMemoryTotals::PlatformPrivateFootprint platform_private_footprint;
   };
   struct ChromeMemDump {
     uint32_t malloc_total_kb = 0;
diff --git a/src/base/trace_event/process_memory_dump.cc b/src/base/trace_event/process_memory_dump.cc
index 9f71093..da7bcad 100644
--- a/src/base/trace_event/process_memory_dump.cc
+++ b/src/base/trace_event/process_memory_dump.cc
@@ -244,8 +244,9 @@
 }
 
 void ProcessMemoryDump::DumpHeapUsage(
-    const base::hash_map<base::trace_event::AllocationContext,
-        base::trace_event::AllocationMetrics>& metrics_by_context,
+    const std::unordered_map<base::trace_event::AllocationContext,
+                             base::trace_event::AllocationMetrics>&
+        metrics_by_context,
     base::trace_event::TraceEventMemoryOverhead& overhead,
     const char* allocator_name) {
   if (!metrics_by_context.empty()) {
diff --git a/src/base/trace_event/process_memory_dump.h b/src/base/trace_event/process_memory_dump.h
index 45a9739..5a0f4c5 100644
--- a/src/base/trace_event/process_memory_dump.h
+++ b/src/base/trace_event/process_memory_dump.h
@@ -118,11 +118,12 @@
   const AllocatorDumpsMap& allocator_dumps() const { return allocator_dumps_; }
 
   // Dumps heap usage with |allocator_name|.
-  void DumpHeapUsage(const base::hash_map<base::trace_event::AllocationContext,
-                                          base::trace_event::AllocationMetrics>&
-                         metrics_by_context,
-                     base::trace_event::TraceEventMemoryOverhead& overhead,
-                     const char* allocator_name);
+  void DumpHeapUsage(
+      const std::unordered_map<base::trace_event::AllocationContext,
+                               base::trace_event::AllocationMetrics>&
+          metrics_by_context,
+      base::trace_event::TraceEventMemoryOverhead& overhead,
+      const char* allocator_name);
 
   // Adds an ownership relationship between two MemoryAllocatorDump(s) with the
   // semantics: |source| owns |target|, and has the effect of attributing
diff --git a/src/base/trace_event/process_memory_dump_unittest.cc b/src/base/trace_event/process_memory_dump_unittest.cc
index 571774a..4ee6508 100644
--- a/src/base/trace_event/process_memory_dump_unittest.cc
+++ b/src/base/trace_event/process_memory_dump_unittest.cc
@@ -90,7 +90,7 @@
 
 TEST(ProcessMemoryDumpTest, TakeAllDumpsFrom) {
   std::unique_ptr<TracedValue> traced_value(new TracedValue);
-  hash_map<AllocationContext, AllocationMetrics> metrics_by_context;
+  std::unordered_map<AllocationContext, AllocationMetrics> metrics_by_context;
   metrics_by_context[AllocationContext()] = { 1, 1 };
   TraceEventMemoryOverhead overhead;
 
diff --git a/src/base/trace_event/process_memory_totals.h b/src/base/trace_event/process_memory_totals.h
index 207e398..12d6dfb 100644
--- a/src/base/trace_event/process_memory_totals.h
+++ b/src/base/trace_event/process_memory_totals.h
@@ -52,6 +52,9 @@
     // On iOS,
     //   TBD: https://crbug.com/714961
   };
+  const PlatformPrivateFootprint& GetPlatformPrivateFootprint() const {
+    return platform_private_footprint_;
+  }
   PlatformPrivateFootprint& GetPlatformPrivateFootprint() {
     return platform_private_footprint_;
   }
diff --git a/src/base/trace_event/trace_buffer.cc b/src/base/trace_event/trace_buffer.cc
index e26e9fd..0a5770c 100644
--- a/src/base/trace_event/trace_buffer.cc
+++ b/src/base/trace_event/trace_buffer.cc
@@ -105,7 +105,7 @@
 
   void EstimateTraceMemoryOverhead(
       TraceEventMemoryOverhead* overhead) override {
-    overhead->Add("TraceBufferRingBuffer", sizeof(*this));
+    overhead->Add(TraceEventMemoryOverhead::kTraceBuffer, sizeof(*this));
     for (size_t queue_index = queue_head_; queue_index != queue_tail_;
          queue_index = NextQueueIndex(queue_index)) {
       size_t chunk_index = recyclable_chunks_queue_[queue_index];
@@ -221,7 +221,8 @@
         sizeof(*this) + max_chunks_ * sizeof(decltype(chunks_)::value_type);
     const size_t chunks_ptr_vector_resident_size =
         sizeof(*this) + chunks_.size() * sizeof(decltype(chunks_)::value_type);
-    overhead->Add("TraceBufferVector", chunks_ptr_vector_allocated_size,
+    overhead->Add(TraceEventMemoryOverhead::kTraceBuffer,
+                  chunks_ptr_vector_allocated_size,
                   chunks_ptr_vector_resident_size);
     for (size_t i = 0; i < chunks_.size(); ++i) {
       TraceBufferChunk* chunk = chunks_[i].get();
@@ -268,12 +269,13 @@
 
     // When estimating the size of TraceBufferChunk, exclude the array of trace
     // events, as they are computed individually below.
-    cached_overhead_estimate_->Add("TraceBufferChunk",
+    cached_overhead_estimate_->Add(TraceEventMemoryOverhead::kTraceBufferChunk,
                                    sizeof(*this) - sizeof(chunk_));
   }
 
   const size_t num_cached_estimated_events =
-      cached_overhead_estimate_->GetCount("TraceEvent");
+      cached_overhead_estimate_->GetCount(
+          TraceEventMemoryOverhead::kTraceEvent);
   DCHECK_LE(num_cached_estimated_events, size());
 
   if (IsFull() && num_cached_estimated_events == size()) {
@@ -291,7 +293,7 @@
     // changing as new TraceEvents are added to this chunk, so they are
     // computed on the fly.
     const size_t num_unused_trace_events = capacity() - size();
-    overhead->Add("TraceEvent (unused)",
+    overhead->Add(TraceEventMemoryOverhead::kUnusedTraceEvent,
                   num_unused_trace_events * sizeof(TraceEvent));
   }
 
diff --git a/src/base/trace_event/trace_event_argument.cc b/src/base/trace_event/trace_event_argument.cc
index 646b1f2..fa1c91b 100644
--- a/src/base/trace_event/trace_event_argument.cc
+++ b/src/base/trace_event/trace_event_argument.cc
@@ -465,7 +465,7 @@
 
 void TracedValue::EstimateTraceMemoryOverhead(
     TraceEventMemoryOverhead* overhead) {
-  overhead->Add("TracedValue",
+  overhead->Add(TraceEventMemoryOverhead::kTracedValue,
                 /* allocated size */
                 pickle_.GetTotalAllocatedSize(),
                 /* resident size */
diff --git a/src/base/trace_event/trace_event_impl.cc b/src/base/trace_event/trace_event_impl.cc
index cb23eb4..16ce0fa 100644
--- a/src/base/trace_event/trace_event_impl.cc
+++ b/src/base/trace_event/trace_event_impl.cc
@@ -198,7 +198,7 @@
 
 void TraceEvent::EstimateTraceMemoryOverhead(
     TraceEventMemoryOverhead* overhead) {
-  overhead->Add("TraceEvent", sizeof(*this));
+  overhead->Add(TraceEventMemoryOverhead::kTraceEvent, sizeof(*this));
 
   if (parameter_copy_storage_)
     overhead->AddString(*parameter_copy_storage_);
diff --git a/src/base/trace_event/trace_event_memory_overhead.cc b/src/base/trace_event/trace_event_memory_overhead.cc
index d23383f..02a98bd 100644
--- a/src/base/trace_event/trace_event_memory_overhead.cc
+++ b/src/base/trace_event/trace_event_memory_overhead.cc
@@ -10,60 +10,85 @@
 #include "base/memory/ref_counted_memory.h"
 #include "base/strings/stringprintf.h"
 #include "base/trace_event/memory_allocator_dump.h"
+#include "base/trace_event/memory_usage_estimator.h"
 #include "base/trace_event/process_memory_dump.h"
 #include "base/values.h"
 
 namespace base {
 namespace trace_event {
 
-TraceEventMemoryOverhead::TraceEventMemoryOverhead() {
-}
+namespace {
 
-TraceEventMemoryOverhead::~TraceEventMemoryOverhead() {
-}
-
-void TraceEventMemoryOverhead::AddOrCreateInternal(
-    const char* object_type,
-    size_t count,
-    size_t allocated_size_in_bytes,
-    size_t resident_size_in_bytes) {
-  auto it = allocated_objects_.find(object_type);
-  if (it == allocated_objects_.end()) {
-    allocated_objects_.insert(std::make_pair(
-        object_type,
-        ObjectCountAndSize(
-            {count, allocated_size_in_bytes, resident_size_in_bytes})));
-    return;
+const char* ObjectTypeToString(TraceEventMemoryOverhead::ObjectType type) {
+  switch (type) {
+    case TraceEventMemoryOverhead::kOther:
+      return "(Other)";
+    case TraceEventMemoryOverhead::kTraceBuffer:
+      return "TraceBuffer";
+    case TraceEventMemoryOverhead::kTraceBufferChunk:
+      return "TraceBufferChunk";
+    case TraceEventMemoryOverhead::kTraceEvent:
+      return "TraceEvent";
+    case TraceEventMemoryOverhead::kUnusedTraceEvent:
+      return "TraceEvent(Unused)";
+    case TraceEventMemoryOverhead::kTracedValue:
+      return "TracedValue";
+    case TraceEventMemoryOverhead::kConvertableToTraceFormat:
+      return "ConvertableToTraceFormat";
+    case TraceEventMemoryOverhead::kHeapProfilerAllocationRegister:
+      return "AllocationRegister";
+    case TraceEventMemoryOverhead::kHeapProfilerTypeNameDeduplicator:
+      return "TypeNameDeduplicator";
+    case TraceEventMemoryOverhead::kHeapProfilerStackFrameDeduplicator:
+      return "StackFrameDeduplicator";
+    case TraceEventMemoryOverhead::kStdString:
+      return "std::string";
+    case TraceEventMemoryOverhead::kBaseValue:
+      return "base::Value";
+    case TraceEventMemoryOverhead::kTraceEventMemoryOverhead:
+      return "TraceEventMemoryOverhead";
+    case TraceEventMemoryOverhead::kLast:
+      NOTREACHED();
   }
-  it->second.count += count;
-  it->second.allocated_size_in_bytes += allocated_size_in_bytes;
-  it->second.resident_size_in_bytes += resident_size_in_bytes;
+  NOTREACHED();
+  return "BUG";
 }
 
-void TraceEventMemoryOverhead::Add(const char* object_type,
+}  // namespace
+
+TraceEventMemoryOverhead::TraceEventMemoryOverhead() : allocated_objects_() {}
+
+TraceEventMemoryOverhead::~TraceEventMemoryOverhead() {}
+
+void TraceEventMemoryOverhead::AddInternal(ObjectType object_type,
+                                           size_t count,
+                                           size_t allocated_size_in_bytes,
+                                           size_t resident_size_in_bytes) {
+  ObjectCountAndSize& count_and_size =
+      allocated_objects_[static_cast<uint32_t>(object_type)];
+  count_and_size.count += count;
+  count_and_size.allocated_size_in_bytes += allocated_size_in_bytes;
+  count_and_size.resident_size_in_bytes += resident_size_in_bytes;
+}
+
+void TraceEventMemoryOverhead::Add(ObjectType object_type,
                                    size_t allocated_size_in_bytes) {
   Add(object_type, allocated_size_in_bytes, allocated_size_in_bytes);
 }
 
-void TraceEventMemoryOverhead::Add(const char* object_type,
+void TraceEventMemoryOverhead::Add(ObjectType object_type,
                                    size_t allocated_size_in_bytes,
                                    size_t resident_size_in_bytes) {
-  AddOrCreateInternal(object_type, 1, allocated_size_in_bytes,
-                      resident_size_in_bytes);
+  AddInternal(object_type, 1, allocated_size_in_bytes, resident_size_in_bytes);
 }
 
 void TraceEventMemoryOverhead::AddString(const std::string& str) {
-  // The number below are empirical and mainly based on profiling of real-world
-  // std::string implementations:
-  //  - even short string end up malloc()-inc at least 32 bytes.
-  //  - longer strings seem to malloc() multiples of 16 bytes.
-  const size_t capacity = bits::Align(str.capacity(), 16);
-  Add("std::string", sizeof(std::string) + std::max<size_t>(capacity, 32u));
+  Add(kStdString, EstimateMemoryUsage(str));
 }
 
 void TraceEventMemoryOverhead::AddRefCountedString(
     const RefCountedString& str) {
-  Add("RefCountedString", sizeof(RefCountedString));
+  Add(kOther, sizeof(RefCountedString));
   AddString(str.data());
 }
 
@@ -73,24 +98,24 @@
     case Value::Type::BOOLEAN:
     case Value::Type::INTEGER:
     case Value::Type::DOUBLE:
-      Add("FundamentalValue", sizeof(Value));
+      Add(kBaseValue, sizeof(Value));
       break;
 
     case Value::Type::STRING: {
       const Value* string_value = nullptr;
       value.GetAsString(&string_value);
-      Add("StringValue", sizeof(Value));
+      Add(kBaseValue, sizeof(Value));
       AddString(string_value->GetString());
     } break;
 
     case Value::Type::BINARY: {
-      Add("BinaryValue", sizeof(Value) + value.GetBlob().size());
+      Add(kBaseValue, sizeof(Value) + value.GetBlob().size());
     } break;
 
     case Value::Type::DICTIONARY: {
       const DictionaryValue* dictionary_value = nullptr;
       value.GetAsDictionary(&dictionary_value);
-      Add("DictionaryValue", sizeof(DictionaryValue));
+      Add(kBaseValue, sizeof(DictionaryValue));
       for (DictionaryValue::Iterator it(*dictionary_value); !it.IsAtEnd();
            it.Advance()) {
         AddString(it.key());
@@ -101,7 +126,7 @@
     case Value::Type::LIST: {
       const ListValue* list_value = nullptr;
       value.GetAsList(&list_value);
-      Add("ListValue", sizeof(ListValue));
+      Add(kBaseValue, sizeof(ListValue));
       for (const auto& v : *list_value)
         AddValue(v);
     } break;
@@ -112,41 +137,39 @@
 }
 
 void TraceEventMemoryOverhead::AddSelf() {
-  size_t estimated_size = sizeof(*this);
-  // If the small_map did overflow its static capacity, its elements will be
-  // allocated on the heap and have to be accounted separately.
-  if (allocated_objects_.UsingFullMap())
-    estimated_size += sizeof(map_type::value_type) * allocated_objects_.size();
-  Add("TraceEventMemoryOverhead", estimated_size);
+  Add(kTraceEventMemoryOverhead, sizeof(*this));
 }
 
-size_t TraceEventMemoryOverhead::GetCount(const char* object_type) const {
-  const auto& it = allocated_objects_.find(object_type);
-  if (it == allocated_objects_.end())
-    return 0u;
-  return it->second.count;
+size_t TraceEventMemoryOverhead::GetCount(ObjectType object_type) const {
+  CHECK(object_type < kLast);
+  return allocated_objects_[static_cast<uint32_t>(object_type)].count;
 }
 
 void TraceEventMemoryOverhead::Update(const TraceEventMemoryOverhead& other) {
-  for (const auto& it : other.allocated_objects_) {
-    AddOrCreateInternal(it.first, it.second.count,
-                        it.second.allocated_size_in_bytes,
-                        it.second.resident_size_in_bytes);
+  for (uint32_t i = 0; i < kLast; i++) {
+    const ObjectCountAndSize& other_entry = other.allocated_objects_[i];
+    AddInternal(static_cast<ObjectType>(i), other_entry.count,
+                other_entry.allocated_size_in_bytes,
+                other_entry.resident_size_in_bytes);
   }
 }
 
 void TraceEventMemoryOverhead::DumpInto(const char* base_name,
                                         ProcessMemoryDump* pmd) const {
-  for (const auto& it : allocated_objects_) {
-    std::string dump_name = StringPrintf("%s/%s", base_name, it.first);
+  for (uint32_t i = 0; i < kLast; i++) {
+    const ObjectCountAndSize& count_and_size = allocated_objects_[i];
+    if (count_and_size.allocated_size_in_bytes == 0)
+      continue;
+    std::string dump_name = StringPrintf(
+        "%s/%s", base_name, ObjectTypeToString(static_cast<ObjectType>(i)));
     MemoryAllocatorDump* mad = pmd->CreateAllocatorDump(dump_name);
     mad->AddScalar(MemoryAllocatorDump::kNameSize,
                    MemoryAllocatorDump::kUnitsBytes,
-                   it.second.allocated_size_in_bytes);
+                   count_and_size.allocated_size_in_bytes);
     mad->AddScalar("resident_size", MemoryAllocatorDump::kUnitsBytes,
-                   it.second.resident_size_in_bytes);
+                   count_and_size.resident_size_in_bytes);
     mad->AddScalar(MemoryAllocatorDump::kNameObjectCount,
-                   MemoryAllocatorDump::kUnitsObjects, it.second.count);
+                   MemoryAllocatorDump::kUnitsObjects, count_and_size.count);
   }
 }
 
diff --git a/src/base/trace_event/trace_event_memory_overhead.h b/src/base/trace_event/trace_event_memory_overhead.h
index a5d324e..1587a30 100644
--- a/src/base/trace_event/trace_event_memory_overhead.h
+++ b/src/base/trace_event/trace_event_memory_overhead.h
@@ -6,10 +6,11 @@
 #define BASE_TRACE_EVENT_TRACE_EVENT_MEMORY_OVERHEAD_H_
 
 #include <stddef.h>
+#include <stdint.h>
+
+#include <unordered_map>
 
 #include "base/base_export.h"
-#include "base/containers/hash_tables.h"
-#include "base/containers/small_map.h"
 #include "base/macros.h"
 
 namespace base {
@@ -24,18 +25,35 @@
 // Used to estimate the memory overhead of the tracing infrastructure.
 class BASE_EXPORT TraceEventMemoryOverhead {
  public:
+  enum ObjectType : uint32_t {
+    kOther = 0,
+    kTraceBuffer,
+    kTraceBufferChunk,
+    kTraceEvent,
+    kUnusedTraceEvent,
+    kTracedValue,
+    kConvertableToTraceFormat,
+    kHeapProfilerAllocationRegister,
+    kHeapProfilerTypeNameDeduplicator,
+    kHeapProfilerStackFrameDeduplicator,
+    kStdString,
+    kBaseValue,
+    kTraceEventMemoryOverhead,
+    kLast
+  };
+
   TraceEventMemoryOverhead();
   ~TraceEventMemoryOverhead();
 
   // Use this method to account the overhead of an object for which an estimate
   // is known for both the allocated and resident memory.
-  void Add(const char* object_type,
+  void Add(ObjectType object_type,
            size_t allocated_size_in_bytes,
            size_t resident_size_in_bytes);
 
   // Similar to Add() above, but assumes that
   // |resident_size_in_bytes| == |allocated_size_in_bytes|.
-  void Add(const char* object_type, size_t allocated_size_in_bytes);
+  void Add(ObjectType object_type, size_t allocated_size_in_bytes);
 
   // Specialized profiling functions for commonly used object types.
   void AddString(const std::string& str);
@@ -47,7 +65,7 @@
   void AddSelf();
 
   // Retrieves the count, that is, the count of Add*(|object_type|, ...) calls.
-  size_t GetCount(const char* object_type) const;
+  size_t GetCount(ObjectType object_type) const;
 
   // Adds up and merges all the values from |other| to this instance.
   void Update(const TraceEventMemoryOverhead& other);
@@ -60,13 +78,12 @@
     size_t allocated_size_in_bytes;
     size_t resident_size_in_bytes;
   };
-  using map_type = small_map<hash_map<const char*, ObjectCountAndSize>, 16>;
-  map_type allocated_objects_;
+  ObjectCountAndSize allocated_objects_[ObjectType::kLast];
 
-  void AddOrCreateInternal(const char* object_type,
-                           size_t count,
-                           size_t allocated_size_in_bytes,
-                           size_t resident_size_in_bytes);
+  void AddInternal(ObjectType object_type,
+                   size_t count,
+                   size_t allocated_size_in_bytes,
+                   size_t resident_size_in_bytes);
 
   DISALLOW_COPY_AND_ASSIGN(TraceEventMemoryOverhead);
 };
diff --git a/src/base/trace_event/trace_log.cc b/src/base/trace_event/trace_log.cc
index 3e9375d..d1e0fc3 100644
--- a/src/base/trace_event/trace_log.cc
+++ b/src/base/trace_event/trace_log.cc
@@ -398,7 +398,7 @@
   // TODO(ssid): Use MemoryDumpArgs to create light dumps when requested
   // (crbug.com/499731).
   TraceEventMemoryOverhead overhead;
-  overhead.Add("TraceLog", sizeof(*this));
+  overhead.Add(TraceEventMemoryOverhead::kOther, sizeof(*this));
   {
     AutoLock lock(lock_);
     if (logged_events_)
@@ -1229,8 +1229,7 @@
 
       AutoLock thread_info_lock(thread_info_lock_);
 
-      hash_map<int, std::string>::iterator existing_name =
-          thread_names_.find(thread_id);
+      auto existing_name = thread_names_.find(thread_id);
       if (existing_name == thread_names_.end()) {
         // This is a new thread id, and a new name.
         thread_names_[thread_id] = new_name;
@@ -1679,7 +1678,8 @@
 
 void ConvertableToTraceFormat::EstimateTraceMemoryOverhead(
     TraceEventMemoryOverhead* overhead) {
-  overhead->Add("ConvertableToTraceFormat(Unknown)", sizeof(*this));
+  overhead->Add(TraceEventMemoryOverhead::kConvertableToTraceFormat,
+                sizeof(*this));
 }
 
 void TraceLog::AddAsyncEnabledStateObserver(
diff --git a/src/base/trace_event/trace_log.h b/src/base/trace_event/trace_log.h
index 88b6e58..0a13df6 100644
--- a/src/base/trace_event/trace_log.h
+++ b/src/base/trace_event/trace_log.h
@@ -10,10 +10,10 @@
 
 #include <memory>
 #include <string>
+#include <unordered_map>
 #include <vector>
 
 #include "base/atomicops.h"
-#include "base/containers/hash_tables.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
 #include "base/memory/scoped_vector.h"
@@ -452,14 +452,14 @@
       async_observers_;
 
   std::string process_name_;
-  base::hash_map<int, std::string> process_labels_;
+  std::unordered_map<int, std::string> process_labels_;
   int process_sort_index_;
-  base::hash_map<int, int> thread_sort_indices_;
-  base::hash_map<int, std::string> thread_names_;
+  std::unordered_map<int, int> thread_sort_indices_;
+  std::unordered_map<int, std::string> thread_names_;
 
   // The following two maps are used only when ECHO_TO_CONSOLE.
-  base::hash_map<int, std::stack<TimeTicks>> thread_event_start_times_;
-  base::hash_map<std::string, int> thread_colors_;
+  std::unordered_map<int, std::stack<TimeTicks>> thread_event_start_times_;
+  std::unordered_map<std::string, int> thread_colors_;
 
   TimeTicks buffer_limit_reached_timestamp_;
 
diff --git a/src/base/tracked_objects.cc b/src/base/tracked_objects.cc
index 1507c09..d786527 100644
--- a/src/base/tracked_objects.cc
+++ b/src/base/tracked_objects.cc
@@ -8,6 +8,8 @@
 #include <limits.h>
 #include <stdlib.h>
 
+#include <limits>
+
 #include "base/atomicops.h"
 #include "base/base_switches.h"
 #include "base/command_line.h"
@@ -19,6 +21,7 @@
 #include "base/numerics/safe_math.h"
 #include "base/process/process_handle.h"
 #include "base/third_party/valgrind/memcheck.h"
+#include "base/threading/platform_thread.h"
 #include "base/threading/worker_pool.h"
 #include "base/tracking_info.h"
 #include "build/build_config.h"
@@ -110,13 +113,17 @@
       queue_duration_max_(0),
       alloc_ops_(0),
       free_ops_(0),
-      allocated_bytes_(0),
-      freed_bytes_(0),
-      alloc_overhead_bytes_(0),
+#if !defined(ARCH_CPU_64_BITS)
+      byte_update_counter_(0),
+#endif
+      allocated_bytes_(),
+      freed_bytes_(),
+      alloc_overhead_bytes_(),
       max_allocated_bytes_(0),
       run_duration_sample_(0),
       queue_duration_sample_(0),
-      last_phase_snapshot_(nullptr) {}
+      last_phase_snapshot_(nullptr) {
+}
 
 DeathData::DeathData(const DeathData& other)
     : count_(other.count_),
@@ -127,6 +134,9 @@
       queue_duration_max_(other.queue_duration_max_),
       alloc_ops_(other.alloc_ops_),
       free_ops_(other.free_ops_),
+#if !defined(ARCH_CPU_64_BITS)
+      byte_update_counter_(0),
+#endif
       allocated_bytes_(other.allocated_bytes_),
       freed_bytes_(other.freed_bytes_),
       alloc_overhead_bytes_(other.alloc_overhead_bytes_),
@@ -203,16 +213,32 @@
                                   const uint32_t freed_bytes,
                                   const uint32_t alloc_overhead_bytes,
                                   const uint32_t max_allocated_bytes) {
+#if !defined(ARCH_CPU_64_BITS)
+  // On 32 bit systems, we use an even/odd locking scheme to make possible to
+  // read 64 bit sums consistently. Note that since writes are bound to the
+  // thread owning this DeathData, there's no race on these writes.
+  int32_t counter_val =
+      base::subtle::Barrier_AtomicIncrement(&byte_update_counter_, 1);
+  // The counter must be odd.
+  DCHECK_EQ(1, counter_val & 1);
+#endif
+
   // Use saturating arithmetic.
   SaturatingMemberAdd(alloc_ops, &alloc_ops_);
   SaturatingMemberAdd(free_ops, &free_ops_);
-  SaturatingMemberAdd(allocated_bytes, &allocated_bytes_);
-  SaturatingMemberAdd(freed_bytes, &freed_bytes_);
-  SaturatingMemberAdd(alloc_overhead_bytes, &alloc_overhead_bytes_);
+  SaturatingByteCountMemberAdd(allocated_bytes, &allocated_bytes_);
+  SaturatingByteCountMemberAdd(freed_bytes, &freed_bytes_);
+  SaturatingByteCountMemberAdd(alloc_overhead_bytes, &alloc_overhead_bytes_);
 
   int32_t max = base::saturated_cast<int32_t>(max_allocated_bytes);
   if (max > max_allocated_bytes_)
     base::subtle::NoBarrier_Store(&max_allocated_bytes_, max);
+
+#if !defined(ARCH_CPU_64_BITS)
+  // Now release the value while rolling to even.
+  counter_val = base::subtle::Barrier_AtomicIncrement(&byte_update_counter_, 1);
+  DCHECK_EQ(0, counter_val & 1);
+#endif
 }
 
 void DeathData::OnProfilingPhaseCompleted(int profiling_phase) {
@@ -250,15 +276,102 @@
   base::subtle::NoBarrier_Store(&queue_duration_max_, 0);
 }
 
+// static
+int64_t DeathData::UnsafeCumulativeByteCountRead(
+    const CumulativeByteCount* count) {
+#if defined(ARCH_CPU_64_BITS)
+  return base::subtle::NoBarrier_Load(count);
+#else
+  return static_cast<int64_t>(base::subtle::NoBarrier_Load(&count->hi_word))
+             << 32 |
+         static_cast<uint32_t>(base::subtle::NoBarrier_Load(&count->lo_word));
+#endif
+}
+
+int64_t DeathData::ConsistentCumulativeByteCountRead(
+    const CumulativeByteCount* count) const {
+#if defined(ARCH_CPU_64_BITS)
+  return base::subtle::NoBarrier_Load(count);
+#else
+  // We're on a 32 bit system, this is going to be complicated.
+  while (true) {
+    int32_t update_counter = 0;
+    // Acquire the starting count, spin until it's even.
+
+    // The value of |kYieldProcessorTries| is cargo culted from the page
+    // allocator, TCMalloc, Window critical section defaults, and various other
+    // recommendations.
+    // This is not performance critical here, as the reads are vanishingly rare
+    // and only happen under the --enable-heap-profiling=task-profiler flag.
+    constexpr size_t kYieldProcessorTries = 1000;
+    size_t lock_attempts = 0;
+    do {
+      ++lock_attempts;
+      if (lock_attempts == kYieldProcessorTries) {
+        // Yield the current thread periodically to avoid writer starvation.
+        base::PlatformThread::YieldCurrentThread();
+        lock_attempts = 0;
+      }
+
+      update_counter = base::subtle::NoBarrier_Load(&byte_update_counter_);
+    } while (update_counter & 1);
+
+    // Make sure the reads below see all changes before the update counter.
+    base::subtle::MemoryBarrier();
+
+    DCHECK_EQ(update_counter & 1, 0);
+
+    int64_t value =
+        static_cast<int64_t>(base::subtle::NoBarrier_Load(&count->hi_word))
+            << 32 |
+        static_cast<uint32_t>(base::subtle::NoBarrier_Load(&count->lo_word));
+
+    // Release_Load() semantics here ensure that the |byte_update_counter_|
+    // value seen is at least as old as the |hi_word|/|lo_word| values seen
+    // above, which means that if it's still equal to |update_counter|, the read
+    // is consistent, since the above MemoryBarrier() ensures they're at least
+    // as new as the afore-obtained |update_counter|'s value.
+    if (update_counter == base::subtle::Release_Load(&byte_update_counter_))
+      return value;
+  }
+#endif
+}
+
+// static
 void DeathData::SaturatingMemberAdd(const uint32_t addend,
                                     base::subtle::Atomic32* sum) {
+  constexpr int32_t kInt32Max = std::numeric_limits<int32_t>::max();
   // Bail quick if no work or already saturated.
-  if (addend == 0U || *sum == INT_MAX)
+  if (addend == 0U || *sum == kInt32Max)
     return;
 
   base::CheckedNumeric<int32_t> new_sum = *sum;
   new_sum += addend;
-  base::subtle::NoBarrier_Store(sum, new_sum.ValueOrDefault(INT_MAX));
+  base::subtle::NoBarrier_Store(sum, new_sum.ValueOrDefault(kInt32Max));
+}
+
+void DeathData::SaturatingByteCountMemberAdd(const uint32_t addend,
+                                             CumulativeByteCount* sum) {
+  constexpr int64_t kInt64Max = std::numeric_limits<int64_t>::max();
+  // Bail quick if no work or already saturated.
+  if (addend == 0U || UnsafeCumulativeByteCountRead(sum) == kInt64Max)
+    return;
+
+  base::CheckedNumeric<int64_t> new_sum = UnsafeCumulativeByteCountRead(sum);
+  new_sum += addend;
+  int64_t new_value = new_sum.ValueOrDefault(kInt64Max);
+// Update our value.
+#if defined(ARCH_CPU_64_BITS)
+  base::subtle::NoBarrier_Store(sum, new_value);
+#else
+  // This must only be called while the update counter is "locked" (i.e. odd).
+  DCHECK_EQ(base::subtle::NoBarrier_Load(&byte_update_counter_) & 1, 1);
+
+  base::subtle::NoBarrier_Store(&sum->hi_word,
+                                static_cast<int32_t>(new_value >> 32));
+  base::subtle::NoBarrier_Store(&sum->lo_word,
+                                static_cast<int32_t>(new_value & 0xFFFFFFFF));
+#endif
 }
 
 //------------------------------------------------------------------------------
@@ -286,9 +399,9 @@
                                      int32_t queue_duration_sample,
                                      int32_t alloc_ops,
                                      int32_t free_ops,
-                                     int32_t allocated_bytes,
-                                     int32_t freed_bytes,
-                                     int32_t alloc_overhead_bytes,
+                                     int64_t allocated_bytes,
+                                     int64_t freed_bytes,
+                                     int64_t alloc_overhead_bytes,
                                      int32_t max_allocated_bytes)
     : count(count),
       run_duration_sum(run_duration_sum),
diff --git a/src/base/tracked_objects.h b/src/base/tracked_objects.h
index 36caec3..7ec6eae 100644
--- a/src/base/tracked_objects.h
+++ b/src/base/tracked_objects.h
@@ -11,6 +11,7 @@
 #include <set>
 #include <stack>
 #include <string>
+#include <unordered_map>
 #include <utility>
 #include <vector>
 
@@ -27,7 +28,6 @@
 #include "base/process/process_handle.h"
 #include "base/profiler/tracked_time.h"
 #include "base/synchronization/lock.h"
-#include "base/threading/thread_checker.h"
 #include "base/threading/thread_local_storage.h"
 
 namespace base {
@@ -279,9 +279,9 @@
                     int32_t queue_duration_sample,
                     int32_t alloc_ops,
                     int32_t free_ops,
-                    int32_t allocated_bytes,
-                    int32_t freed_bytes,
-                    int32_t alloc_overhead_bytes,
+                    int64_t allocated_bytes,
+                    int64_t freed_bytes,
+                    int64_t alloc_overhead_bytes,
                     int32_t max_allocated_bytes);
   DeathDataSnapshot(const DeathData& death_data);
   DeathDataSnapshot(const DeathDataSnapshot& other);
@@ -301,9 +301,9 @@
 
   int32_t alloc_ops;
   int32_t free_ops;
-  int32_t allocated_bytes;
-  int32_t freed_bytes;
-  int32_t alloc_overhead_bytes;
+  int64_t allocated_bytes;
+  int64_t freed_bytes;
+  int64_t alloc_overhead_bytes;
   int32_t max_allocated_bytes;
 };
 
@@ -392,16 +392,16 @@
     return base::subtle::NoBarrier_Load(&alloc_ops_);
   }
   int32_t free_ops() const { return base::subtle::NoBarrier_Load(&free_ops_); }
-  int32_t allocated_bytes() const {
-    return base::subtle::NoBarrier_Load(&allocated_bytes_);
+  int64_t allocated_bytes() const {
+    return ConsistentCumulativeByteCountRead(&allocated_bytes_);
   }
-  int32_t freed_bytes() const {
-    return base::subtle::NoBarrier_Load(&freed_bytes_);
+  int64_t freed_bytes() const {
+    return ConsistentCumulativeByteCountRead(&freed_bytes_);
   }
-  int32_t alloc_overhead_bytes() const {
-    return base::subtle::NoBarrier_Load(&alloc_overhead_bytes_);
+  int64_t alloc_overhead_bytes() const {
+    return ConsistentCumulativeByteCountRead(&alloc_overhead_bytes_);
   }
-  int32_t max_allocated_bytes() const {
+  int64_t max_allocated_bytes() const {
     return base::subtle::NoBarrier_Load(&max_allocated_bytes_);
   }
   const DeathDataPhaseSnapshot* last_phase_snapshot() const {
@@ -414,12 +414,36 @@
   void OnProfilingPhaseCompleted(int profiling_phase);
 
  private:
+#if defined(ARCH_CPU_64_BITS)
+  using CumulativeByteCount = base::subtle::Atomic64;
+#else
+  struct CumulativeByteCount {
+    base::subtle::Atomic32 hi_word;
+    base::subtle::Atomic32 lo_word;
+  };
+#endif
+
+  // Reads a cumulative byte counter consistently.
+  int64_t ConsistentCumulativeByteCountRead(
+      const CumulativeByteCount* count) const;
+
+  // Reads the value of a cumulative byte count, only returns consistent
+  // results on the owning thread.
+  static int64_t UnsafeCumulativeByteCountRead(
+      const CumulativeByteCount* count);
+
   // A saturating addition operation for member variables. This elides the
   // use of atomic-primitive reads for members that are only written on the
   // owning thread.
   static void SaturatingMemberAdd(const uint32_t addend,
                                   base::subtle::Atomic32* sum);
 
+  // A saturating addition operation for byte count variables.
+  // On 32 bit machines, this may only be called while |byte_update_counter_|
+  // is odd - e.g. locked.
+  void SaturatingByteCountMemberAdd(const uint32_t addend,
+                                    CumulativeByteCount* sum);
+
   // Members are ordered from most regularly read and updated, to least
   // frequently used.  This might help a bit with cache lines.
   // Number of runs seen (divisor for calculating averages).
@@ -447,15 +471,23 @@
   base::subtle::Atomic32 alloc_ops_;
   base::subtle::Atomic32 free_ops_;
 
+#if !defined(ARCH_CPU_64_BITS)
+  // On 32 bit systems this is used to achieve consistent reads for cumulative
+  // byte counts. This is odd while updates are in progress, and even while
+  // quiescent. If this has the same value before and after reading the
+  // cumulative counts, the read is consistent.
+  base::subtle::Atomic32 byte_update_counter_;
+#endif
+
   // The number of bytes allocated by the task.
-  base::subtle::Atomic32 allocated_bytes_;
+  CumulativeByteCount allocated_bytes_;
 
   // The number of bytes freed by the task.
-  base::subtle::Atomic32 freed_bytes_;
+  CumulativeByteCount freed_bytes_;
 
   // The cumulative number of overhead bytes. Where available this yields an
   // estimate of the heap overhead for allocations.
-  base::subtle::Atomic32 alloc_overhead_bytes_;
+  CumulativeByteCount alloc_overhead_bytes_;
 
   // The high-watermark for the number of outstanding heap allocated bytes.
   base::subtle::Atomic32 max_allocated_bytes_;
@@ -522,7 +554,7 @@
     STATUS_LAST = PROFILING_ACTIVE
   };
 
-  typedef base::hash_map<Location, Births*, Location::Hash> BirthMap;
+  typedef std::unordered_map<Location, Births*, Location::Hash> BirthMap;
   typedef std::map<const Births*, DeathData> DeathMap;
 
   // Initialize the current thread context with a new instance of ThreadData.
diff --git a/src/base/tracked_objects_unittest.cc b/src/base/tracked_objects_unittest.cc
index f208e3c..80b4064 100644
--- a/src/base/tracked_objects_unittest.cc
+++ b/src/base/tracked_objects_unittest.cc
@@ -346,13 +346,20 @@
   EXPECT_EQ(data->alloc_overhead_bytes(), 3 * kAllocOverheadBytes);
   EXPECT_EQ(data->max_allocated_bytes(), kLargerMaxAllocatedBytes);
 
-  // Saturate everything.
+  // Saturate everything but aggregate byte counts. The byte counts will be
+  // pushed past the 32 bit value range.
+  data->RecordAllocations(INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX);
   data->RecordAllocations(INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX, INT_MAX);
   EXPECT_EQ(data->alloc_ops(), INT_MAX);
   EXPECT_EQ(data->free_ops(), INT_MAX);
-  EXPECT_EQ(data->allocated_bytes(), INT_MAX);
-  EXPECT_EQ(data->freed_bytes(), INT_MAX);
-  EXPECT_EQ(data->alloc_overhead_bytes(), INT_MAX);
+  // The cumulative byte counts are 64 bit wide, and won't saturate easily.
+  EXPECT_EQ(data->allocated_bytes(),
+            2 * static_cast<int64_t>(INT_MAX) +
+                static_cast<int64_t>(3 * kAllocatedBytes));
+  EXPECT_EQ(data->freed_bytes(),
+            2 * static_cast<int64_t>(INT_MAX) + 3 * kFreedBytes);
+  EXPECT_EQ(data->alloc_overhead_bytes(),
+            2 * static_cast<int64_t>(INT_MAX) + 3 * kAllocOverheadBytes);
   EXPECT_EQ(data->max_allocated_bytes(), INT_MAX);
 }
 
diff --git a/src/base/values.cc b/src/base/values.cc
index aa3407f..768e3f7 100644
--- a/src/base/values.cc
+++ b/src/base/values.cc
@@ -611,7 +611,7 @@
   dict_->clear();
 }
 
-void DictionaryValue::Set(StringPiece path, std::unique_ptr<Value> in_value) {
+Value* DictionaryValue::Set(StringPiece path, std::unique_ptr<Value> in_value) {
   DCHECK(IsStringUTF8(path));
   DCHECK(in_value);
 
@@ -633,67 +633,94 @@
     current_path = current_path.substr(delimiter_position + 1);
   }
 
-  current_dictionary->SetWithoutPathExpansion(current_path,
-                                              std::move(in_value));
+  return current_dictionary->SetWithoutPathExpansion(current_path,
+                                                     std::move(in_value));
 }
 
-void DictionaryValue::Set(StringPiece path, Value* in_value) {
-  Set(path, WrapUnique(in_value));
+Value* DictionaryValue::Set(StringPiece path, Value* in_value) {
+  return Set(path, WrapUnique(in_value));
 }
 
-void DictionaryValue::SetBoolean(StringPiece path, bool in_value) {
-  Set(path, new Value(in_value));
+Value* DictionaryValue::SetBoolean(StringPiece path, bool in_value) {
+  return Set(path, new Value(in_value));
 }
 
-void DictionaryValue::SetInteger(StringPiece path, int in_value) {
-  Set(path, new Value(in_value));
+Value* DictionaryValue::SetInteger(StringPiece path, int in_value) {
+  return Set(path, new Value(in_value));
 }
 
-void DictionaryValue::SetDouble(StringPiece path, double in_value) {
-  Set(path, new Value(in_value));
+Value* DictionaryValue::SetDouble(StringPiece path, double in_value) {
+  return Set(path, new Value(in_value));
 }
 
-void DictionaryValue::SetString(StringPiece path, StringPiece in_value) {
-  Set(path, new Value(in_value));
+Value* DictionaryValue::SetString(StringPiece path, StringPiece in_value) {
+  return Set(path, new Value(in_value));
 }
 
-void DictionaryValue::SetString(StringPiece path, const string16& in_value) {
-  Set(path, new Value(in_value));
+Value* DictionaryValue::SetString(StringPiece path, const string16& in_value) {
+  return Set(path, new Value(in_value));
 }
 
-void DictionaryValue::SetWithoutPathExpansion(StringPiece key,
-                                              std::unique_ptr<Value> in_value) {
-  (*dict_)[key.as_string()] = std::move(in_value);
+DictionaryValue* DictionaryValue::SetDictionary(
+    StringPiece path,
+    std::unique_ptr<DictionaryValue> in_value) {
+  return static_cast<DictionaryValue*>(Set(path, std::move(in_value)));
 }
 
-void DictionaryValue::SetWithoutPathExpansion(StringPiece key,
-                                              Value* in_value) {
-  SetWithoutPathExpansion(key, WrapUnique(in_value));
+ListValue* DictionaryValue::SetList(StringPiece path,
+                                    std::unique_ptr<ListValue> in_value) {
+  return static_cast<ListValue*>(Set(path, std::move(in_value)));
 }
 
-void DictionaryValue::SetBooleanWithoutPathExpansion(StringPiece path,
-                                                     bool in_value) {
-  SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+Value* DictionaryValue::SetWithoutPathExpansion(
+    StringPiece key,
+    std::unique_ptr<Value> in_value) {
+  return ((*dict_)[key.as_string()] = std::move(in_value)).get();
 }
 
-void DictionaryValue::SetIntegerWithoutPathExpansion(StringPiece path,
-                                                     int in_value) {
-  SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+Value* DictionaryValue::SetWithoutPathExpansion(StringPiece key,
+                                                Value* in_value) {
+  return SetWithoutPathExpansion(key, WrapUnique(in_value));
 }
 
-void DictionaryValue::SetDoubleWithoutPathExpansion(StringPiece path,
-                                                    double in_value) {
-  SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+Value* DictionaryValue::SetBooleanWithoutPathExpansion(StringPiece path,
+                                                       bool in_value) {
+  return SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
 }
 
-void DictionaryValue::SetStringWithoutPathExpansion(StringPiece path,
-                                                    StringPiece in_value) {
-  SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+Value* DictionaryValue::SetIntegerWithoutPathExpansion(StringPiece path,
+                                                       int in_value) {
+  return SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
 }
 
-void DictionaryValue::SetStringWithoutPathExpansion(StringPiece path,
-                                                    const string16& in_value) {
-  SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+Value* DictionaryValue::SetDoubleWithoutPathExpansion(StringPiece path,
+                                                      double in_value) {
+  return SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+}
+
+Value* DictionaryValue::SetStringWithoutPathExpansion(StringPiece path,
+                                                      StringPiece in_value) {
+  return SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+}
+
+Value* DictionaryValue::SetStringWithoutPathExpansion(
+    StringPiece path,
+    const string16& in_value) {
+  return SetWithoutPathExpansion(path, base::MakeUnique<base::Value>(in_value));
+}
+
+DictionaryValue* DictionaryValue::SetDictionaryWithoutPathExpansion(
+    StringPiece path,
+    std::unique_ptr<DictionaryValue> in_value) {
+  return static_cast<DictionaryValue*>(
+      SetWithoutPathExpansion(path, std::move(in_value)));
+}
+
+ListValue* DictionaryValue::SetListWithoutPathExpansion(
+    StringPiece path,
+    std::unique_ptr<ListValue> in_value) {
+  return static_cast<ListValue*>(
+      SetWithoutPathExpansion(path, std::move(in_value)));
 }
 
 bool DictionaryValue::Get(StringPiece path,
diff --git a/src/base/values.h b/src/base/values.h
index 920c0a3..8b86b1e 100644
--- a/src/base/values.h
+++ b/src/base/values.h
@@ -238,32 +238,41 @@
   // If the key at any step of the way doesn't exist, or exists but isn't
   // a DictionaryValue, a new DictionaryValue will be created and attached
   // to the path in that location. |in_value| must be non-null.
-  void Set(StringPiece path, std::unique_ptr<Value> in_value);
+  // Returns a pointer to the inserted value.
+  Value* Set(StringPiece path, std::unique_ptr<Value> in_value);
   // Deprecated version of the above. TODO(estade): remove.
-  void Set(StringPiece path, Value* in_value);
+  Value* Set(StringPiece path, Value* in_value);
 
   // Convenience forms of Set().  These methods will replace any existing
   // value at that path, even if it has a different type.
-  void SetBoolean(StringPiece path, bool in_value);
-  void SetInteger(StringPiece path, int in_value);
-  void SetDouble(StringPiece path, double in_value);
-  void SetString(StringPiece path, StringPiece in_value);
-  void SetString(StringPiece path, const string16& in_value);
+  Value* SetBoolean(StringPiece path, bool in_value);
+  Value* SetInteger(StringPiece path, int in_value);
+  Value* SetDouble(StringPiece path, double in_value);
+  Value* SetString(StringPiece path, StringPiece in_value);
+  Value* SetString(StringPiece path, const string16& in_value);
+  DictionaryValue* SetDictionary(StringPiece path,
+                                 std::unique_ptr<DictionaryValue> in_value);
+  ListValue* SetList(StringPiece path, std::unique_ptr<ListValue> in_value);
 
   // Like Set(), but without special treatment of '.'.  This allows e.g. URLs to
   // be used as paths.
-  void SetWithoutPathExpansion(StringPiece key,
-                               std::unique_ptr<Value> in_value);
+  Value* SetWithoutPathExpansion(StringPiece key,
+                                 std::unique_ptr<Value> in_value);
   // Deprecated version of the above. TODO(estade): remove.
-  void SetWithoutPathExpansion(StringPiece key, Value* in_value);
+  Value* SetWithoutPathExpansion(StringPiece key, Value* in_value);
 
   // Convenience forms of SetWithoutPathExpansion().
-  void SetBooleanWithoutPathExpansion(StringPiece path, bool in_value);
-  void SetIntegerWithoutPathExpansion(StringPiece path, int in_value);
-  void SetDoubleWithoutPathExpansion(StringPiece path, double in_value);
-  void SetStringWithoutPathExpansion(StringPiece path, StringPiece in_value);
-  void SetStringWithoutPathExpansion(StringPiece path,
-                                     const string16& in_value);
+  Value* SetBooleanWithoutPathExpansion(StringPiece path, bool in_value);
+  Value* SetIntegerWithoutPathExpansion(StringPiece path, int in_value);
+  Value* SetDoubleWithoutPathExpansion(StringPiece path, double in_value);
+  Value* SetStringWithoutPathExpansion(StringPiece path, StringPiece in_value);
+  Value* SetStringWithoutPathExpansion(StringPiece path,
+                                       const string16& in_value);
+  DictionaryValue* SetDictionaryWithoutPathExpansion(
+      StringPiece path,
+      std::unique_ptr<DictionaryValue> in_value);
+  ListValue* SetListWithoutPathExpansion(StringPiece path,
+                                         std::unique_ptr<ListValue> in_value);
 
   // Gets the Value associated with the given path starting from this object.
   // A path has the form "<key>" or "<key>.<key>.[...]", where "." indexes
diff --git a/src/base/values_unittest.cc b/src/base/values_unittest.cc
index da4d267..125c814 100644
--- a/src/base/values_unittest.cc
+++ b/src/base/values_unittest.cc
@@ -574,6 +574,113 @@
   EXPECT_TRUE(dict.empty());
 }
 
+TEST(ValuesTest, DictionarySetReturnsPointer) {
+  {
+    DictionaryValue dict;
+    Value* blank_ptr = dict.Set("foo.bar", base::MakeUnique<base::Value>());
+    EXPECT_EQ(Value::Type::NONE, blank_ptr->type());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* blank_ptr = dict.SetWithoutPathExpansion(
+        "foo.bar", base::MakeUnique<base::Value>());
+    EXPECT_EQ(Value::Type::NONE, blank_ptr->type());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* bool_ptr = dict.SetBooleanWithoutPathExpansion("foo.bar", false);
+    EXPECT_EQ(Value::Type::BOOLEAN, bool_ptr->type());
+    EXPECT_FALSE(bool_ptr->GetBool());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* int_ptr = dict.SetInteger("foo.bar", 42);
+    EXPECT_EQ(Value::Type::INTEGER, int_ptr->type());
+    EXPECT_EQ(42, int_ptr->GetInt());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* int_ptr = dict.SetIntegerWithoutPathExpansion("foo.bar", 123);
+    EXPECT_EQ(Value::Type::INTEGER, int_ptr->type());
+    EXPECT_EQ(123, int_ptr->GetInt());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* double_ptr = dict.SetDouble("foo.bar", 3.142);
+    EXPECT_EQ(Value::Type::DOUBLE, double_ptr->type());
+    EXPECT_EQ(3.142, double_ptr->GetDouble());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* double_ptr = dict.SetDoubleWithoutPathExpansion("foo.bar", 2.718);
+    EXPECT_EQ(Value::Type::DOUBLE, double_ptr->type());
+    EXPECT_EQ(2.718, double_ptr->GetDouble());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* string_ptr = dict.SetString("foo.bar", "foo");
+    EXPECT_EQ(Value::Type::STRING, string_ptr->type());
+    EXPECT_EQ("foo", string_ptr->GetString());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* string_ptr = dict.SetStringWithoutPathExpansion("foo.bar", "bar");
+    EXPECT_EQ(Value::Type::STRING, string_ptr->type());
+    EXPECT_EQ("bar", string_ptr->GetString());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* string16_ptr = dict.SetString("foo.bar", ASCIIToUTF16("baz"));
+    EXPECT_EQ(Value::Type::STRING, string16_ptr->type());
+    EXPECT_EQ("baz", string16_ptr->GetString());
+  }
+
+  {
+    DictionaryValue dict;
+    Value* string16_ptr =
+        dict.SetStringWithoutPathExpansion("foo.bar", ASCIIToUTF16("qux"));
+    EXPECT_EQ(Value::Type::STRING, string16_ptr->type());
+    EXPECT_EQ("qux", string16_ptr->GetString());
+  }
+
+  {
+    DictionaryValue dict;
+    DictionaryValue* dict_ptr = dict.SetDictionary(
+        "foo.bar", base::MakeUnique<base::DictionaryValue>());
+    EXPECT_EQ(Value::Type::DICTIONARY, dict_ptr->type());
+  }
+
+  {
+    DictionaryValue dict;
+    DictionaryValue* dict_ptr = dict.SetDictionaryWithoutPathExpansion(
+        "foo.bar", base::MakeUnique<base::DictionaryValue>());
+    EXPECT_EQ(Value::Type::DICTIONARY, dict_ptr->type());
+  }
+
+  {
+    DictionaryValue dict;
+    ListValue* list_ptr =
+        dict.SetList("foo.bar", base::MakeUnique<base::ListValue>());
+    EXPECT_EQ(Value::Type::LIST, list_ptr->type());
+  }
+
+  {
+    DictionaryValue dict;
+    ListValue* list_ptr = dict.SetListWithoutPathExpansion(
+        "foo.bar", base::MakeUnique<base::ListValue>());
+    EXPECT_EQ(Value::Type::LIST, list_ptr->type());
+  }
+}
+
 TEST(ValuesTest, DictionaryRemoval) {
   std::string key = "test";
   std::unique_ptr<Value> removed_item;
diff --git a/src/base/win/scoped_comptr.h b/src/base/win/scoped_comptr.h
index 74c429d..598f909 100644
--- a/src/base/win/scoped_comptr.h
+++ b/src/base/win/scoped_comptr.h
@@ -13,11 +13,20 @@
 namespace base {
 namespace win {
 
+namespace details {
+
+template <typename T>
+class ScopedComPtrRef;
+
+}  // details
+
 // DEPRECATED: Use Microsoft::WRL::ComPtr instead.
 // A fairly minimalistic smart class for COM interface pointers.
 template <class Interface, const IID* interface_id = &__uuidof(Interface)>
 class ScopedComPtr {
  public:
+  using InterfaceType = Interface;
+
   // Utility template to prevent users of ScopedComPtr from calling AddRef
   // and/or Release() without going through the ScopedComPtr class.
   class BlockIUnknownMethods : public Interface {
@@ -90,11 +99,6 @@
     return &ptr_;
   }
 
-  // A convenience for whenever a void pointer is needed as an out argument.
-  void** ReceiveVoid() {
-    return reinterpret_cast<void**>(Receive());
-  }
-
   template <class Query>
   HRESULT QueryInterface(Query** p) {
     DCHECK(p);
@@ -210,6 +214,11 @@
     return ptr_ != rhs;
   }
 
+  details::ScopedComPtrRef<ScopedComPtr<Interface, interface_id>> operator&() {
+    return details::ScopedComPtrRef<ScopedComPtr<Interface, interface_id>>(
+        this);
+  }
+
   void swap(ScopedComPtr<Interface, interface_id>& r) {
     Interface* tmp = ptr_;
     ptr_ = r.ptr_;
@@ -220,6 +229,33 @@
   Interface* ptr_ = nullptr;
 };
 
+namespace details {
+
+// ComPtrRef equivalent transitional reference type to handle ComPtr equivalent
+// void** implicit casting. T should be a ScopedComPtr.
+template <typename T>
+class ScopedComPtrRef {
+ public:
+  explicit ScopedComPtrRef(T* scoped_com_ptr)
+      : scoped_com_ptr_(scoped_com_ptr) {}
+
+  // ComPtr equivalent conversion operators.
+  operator void**() const {
+    return reinterpret_cast<void**>(scoped_com_ptr_->Receive());
+  }
+
+  // Allows ScopedComPtr to be passed to functions as a pointer.
+  operator T*() { return scoped_com_ptr_; }
+
+  // Allows IID_PPV_ARGS to perform __uuidof(**(ppType)).
+  typename T::InterfaceType* operator*() { return scoped_com_ptr_->Get(); }
+
+ private:
+  T* const scoped_com_ptr_;
+};
+
+}  // details
+
 template <typename T, typename U>
 bool operator==(const T* lhs, const ScopedComPtr<U>& rhs) {
   return lhs == rhs.Get();
@@ -257,8 +293,8 @@
 
 // Helper to make IID_PPV_ARGS work with ScopedComPtr.
 template <typename T>
-void** IID_PPV_ARGS_Helper(base::win::ScopedComPtr<T>* pp) throw() {
-  return pp->ReceiveVoid();
+void** IID_PPV_ARGS_Helper(base::win::details::ScopedComPtrRef<T> pp) throw() {
+  return pp;
 }
 
 }  // namespace win
diff --git a/src/base/win/win_util.cc b/src/base/win/win_util.cc
index bfa5107..d811a9e 100644
--- a/src/base/win/win_util.cc
+++ b/src/base/win/win_util.cc
@@ -139,10 +139,7 @@
   // TODO(ananta)
   // Avoid using GetForegroundWindow here and pass in the HWND of the window
   // intiating the request to display the keyboard.
-  hr = view_settings_interop->GetForWindow(
-      hwnd,
-      __uuidof(ABI::Windows::UI::ViewManagement::IUIViewSettings),
-      view_settings.ReceiveVoid());
+  hr = view_settings_interop->GetForWindow(hwnd, IID_PPV_ARGS(&view_settings));
   if (FAILED(hr))
     return false;
 
diff --git a/src/build/android/gradle/android.jinja b/src/build/android/gradle/android.jinja
index 850f2fb..7d5752b 100644
--- a/src/build/android/gradle/android.jinja
+++ b/src/build/android/gradle/android.jinja
@@ -4,7 +4,9 @@
 {% macro expand_sourceset(variables, prefix) %}
 {% if variables is defined %}
         {{ prefix }} {
+{% if variables.android_manifest is defined %}
             manifest.srcFile "{{ variables.android_manifest }}"
+{% endif %}
 {% if variables.java_dirs is defined %}
             java.srcDirs = [
 {% for path in variables.java_dirs %}
diff --git a/src/build/android/gradle/generate_gradle.py b/src/build/android/gradle/generate_gradle.py
index 776cded..86786dd 100755
--- a/src/build/android/gradle/generate_gradle.py
+++ b/src/build/android/gradle/generate_gradle.py
@@ -199,6 +199,9 @@
     """Returns the target type from its .build_config."""
     return self.DepsInfo()['type']
 
+  def IsValid(self):
+    return self.GetType() in ('android_apk', 'java_library', 'java_binary')
+
   def ResZips(self):
     return self.DepsInfo().get('owned_resources_zips', [])
 
@@ -545,6 +548,13 @@
       _TemplatePath(target_type.split('_')[0]), variables)
 
 
+def _IsTestDir(path):
+  return ('javatests/' in path or
+          'junit/' in path or
+          'test/' in path or
+          'testing/' in path)
+
+
 def _GenerateModuleAll(gradle_output_dir, generator, build_vars,
     source_properties, jinja_processor):
   """Returns the data for a pseudo build.gradle of all dirs.
@@ -558,12 +568,18 @@
   prebuilts = sorted(generator.processed_prebuilts)
   def Relativize(paths):
     return _RebasePath(paths, os.path.join(gradle_output_dir, _MODULE_ALL))
+  main_java_dirs = [d for d in java_dirs if not _IsTestDir(d)]
+  test_java_dirs = [d for d in java_dirs if _IsTestDir(d)]
   variables['main'] = {
       'android_manifest': Relativize(_DEFAULT_ANDROID_MANIFEST_PATH),
-      'java_dirs': Relativize(java_dirs),
+      'java_dirs': Relativize(main_java_dirs),
       'prebuilts': Relativize(prebuilts),
       'java_excludes': ['**/*.java'],
   }
+  variables['android_test'] = {
+      'java_dirs': Relativize(test_java_dirs),
+      'java_excludes': ['**/*.java'],
+  }
   data = jinja_processor.Render(
       _TemplatePath(target_type.split('_')[0]), variables)
   _WriteFile(
@@ -575,7 +591,7 @@
   return jinja_processor.Render(_TemplatePath('root'))
 
 
-def _GenerateSettingsGradle(project_entries):
+def _GenerateSettingsGradle(project_entries, add_all_module):
   """Returns the data for settings.gradle."""
   project_name = os.path.basename(os.path.dirname(host_paths.DIR_SOURCE_ROOT))
   lines = []
@@ -584,10 +600,11 @@
   lines.append('rootProject.projectDir = settingsDir')
   lines.append('')
 
-  lines.append('include ":{0}"'.format(_MODULE_ALL))
-  lines.append(
-      'project(":{0}").projectDir = new File(settingsDir, "{0}")'.format(
-          _MODULE_ALL))
+  if add_all_module:
+    lines.append('include ":{0}"'.format(_MODULE_ALL))
+    lines.append(
+        'project(":{0}").projectDir = new File(settingsDir, "{0}")'.format(
+            _MODULE_ALL))
   for entry in project_entries:
     # Example target: android_webview:android_webview_java__build_config
     lines.append('include ":%s"' % entry.ProjectName())
@@ -697,7 +714,6 @@
   devil_chromium.Initialize(output_directory=output_dir)
   run_tests_helper.SetLogLevel(args.verbose_count)
 
-  # TODO(wnwen): Fix packaging so that gradle resources work in this case.
   if args.split_projects:
     assert not args.use_gradle_process_resources, (
         'Gradle resources does not work without --split-projects.')
@@ -743,21 +759,22 @@
   if args.split_projects:
     main_entries = _FindAllProjectEntries(main_entries)
     logging.info('Found %d dependent build_config targets.', len(main_entries))
-  entries = _CombineTestEntries(main_entries)
+
+  entries = [e for e in _CombineTestEntries(main_entries) if e.IsValid()]
   logging.info('Creating %d projects for targets.', len(entries))
 
+  # When only one entry will be generated we want it to have a valid
+  # build.gradle file with its own AndroidManifest.
+  add_all_module = not args.split_projects and len(entries) > 1
+
   logging.warning('Writing .gradle files...')
   project_entries = []
   zip_tuples = []
   generated_inputs = []
   for entry in entries:
-    if entry.GetType() not in ('android_apk', 'java_library', 'java_binary'):
-      continue
-
     data = _GenerateGradleFile(entry, generator, build_vars, source_properties,
         jinja_processor)
     if data:
-      project_entries.append(entry)
       # Build all paths references by .gradle that exist within output_dir.
       generated_inputs.extend(generator.GeneratedInputs(entry))
       zip_tuples.extend(
@@ -766,18 +783,21 @@
       zip_tuples.extend(
           (s, os.path.join(generator.EntryOutputDir(entry), _RES_SUBDIR))
           for s in generator.AllResZips(entry))
-      _WriteFile(
-          os.path.join(generator.EntryOutputDir(entry), _GRADLE_BUILD_FILE),
-          data)
+      if not add_all_module:
+        project_entries.append(entry)
+        _WriteFile(
+            os.path.join(generator.EntryOutputDir(entry), _GRADLE_BUILD_FILE),
+            data)
 
-  _GenerateModuleAll(_gradle_output_dir, generator, build_vars,
-      source_properties, jinja_processor)
+  if add_all_module:
+    _GenerateModuleAll(_gradle_output_dir, generator, build_vars,
+        source_properties, jinja_processor)
 
   _WriteFile(os.path.join(generator.project_dir, _GRADLE_BUILD_FILE),
              _GenerateRootGradle(jinja_processor))
 
   _WriteFile(os.path.join(generator.project_dir, 'settings.gradle'),
-             _GenerateSettingsGradle(project_entries))
+             _GenerateSettingsGradle(project_entries, add_all_module))
 
   sdk_path = _RebasePath(build_vars['android_sdk_root'])
   _WriteFile(os.path.join(generator.project_dir, 'local.properties'),
@@ -791,7 +811,7 @@
   if zip_tuples:
     _ExtractZips(generator.project_dir, zip_tuples)
 
-  logging.warning('Project created! (%d subprojects)', len(project_entries))
+  logging.warning('Project created!')
   logging.warning('Generated projects work with Android Studio 2.3')
   logging.warning('For more tips: https://chromium.googlesource.com/chromium'
                   '/src.git/+/master/docs/android_studio.md')
diff --git a/src/build/android/gyp/create_stack_script.py b/src/build/android/gyp/create_stack_script.py
new file mode 100755
index 0000000..5655695
--- /dev/null
+++ b/src/build/android/gyp/create_stack_script.py
@@ -0,0 +1,84 @@
+#!/usr/bin/env python
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+import argparse
+import os
+import sys
+import textwrap
+
+from util import build_utils
+
+SCRIPT_TEMPLATE = textwrap.dedent(
+    """\
+    #!/usr/bin/env python
+    #
+    # This file was generated by build/android/gyp/create_stack_script.py
+
+    import os
+    import sys
+
+    def main(argv):
+      script_directory = os.path.dirname(__file__)
+      resolve = lambda p: os.path.abspath(os.path.join(script_directory, p))
+      script_path = resolve('{script_path}')
+      script_args = {script_args}
+      script_path_args = {script_path_args}
+      for arg, path in script_path_args:
+        script_args.extend([arg, resolve(path)])
+      script_cmd = [script_path] + script_args + argv
+      print ' '.join(script_cmd)
+      os.execv(script_path, script_cmd)
+
+    if __name__ == '__main__':
+      sys.exit(main(sys.argv[1:]))
+    """)
+
+
+def main(args):
+
+  parser = argparse.ArgumentParser()
+  build_utils.AddDepfileOption(parser)
+  parser.add_argument(
+      '--script-path',
+      help='Path to the wrapped script.')
+  parser.add_argument(
+      '--script-output-path',
+      help='Path to the output script.')
+  group = parser.add_argument_group('Path arguments')
+  group.add_argument('--output-directory')
+  group.add_argument('--packed-libs')
+
+  args, script_args = parser.parse_known_args(build_utils.ExpandFileArgs(args))
+
+  def relativize(p):
+    return os.path.relpath(p, os.path.dirname(args.script_output_path))
+
+  script_path = relativize(args.script_path)
+
+  script_path_args = []
+  if args.output_directory:
+    script_path_args.append(
+        ('--output-directory', relativize(args.output_directory)))
+  if args.packed_libs:
+    for p in build_utils.ParseGnList(args.packed_libs):
+      script_path_args.append(('--packed-lib', relativize(p)))
+
+  with open(args.script_output_path, 'w') as script:
+    script.write(SCRIPT_TEMPLATE.format(
+        script_path=script_path,
+        script_args=script_args,
+        script_path_args=script_path_args))
+
+  os.chmod(args.script_output_path, 0750)
+
+  if args.depfile:
+    build_utils.WriteDepfile(args.depfile, args.script_output_path)
+
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/src/build/android/gyp/retrolambda.py b/src/build/android/gyp/retrolambda.py
index 158ed52..90e189a 100755
--- a/src/build/android/gyp/retrolambda.py
+++ b/src/build/android/gyp/retrolambda.py
@@ -16,7 +16,7 @@
 _SRC_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                          '..', '..', '..'))
 _RETROLAMBDA_JAR_PATH = os.path.normpath(os.path.join(
-    _SRC_ROOT, 'third_party', 'retrolambda', 'retrolambda-2.3.0.jar'))
+    _SRC_ROOT, 'third_party', 'retrolambda', 'retrolambda-2.5.1.jar'))
 
 
 def _OnStaleMd5(input_jar, output_jar, classpath, android_sdk_jar):
diff --git a/src/build/android/lint/suppressions.xml b/src/build/android/lint/suppressions.xml
index 099410c..5e32a8d 100644
--- a/src/build/android/lint/suppressions.xml
+++ b/src/build/android/lint/suppressions.xml
@@ -27,6 +27,9 @@
   </issue>
   <!-- We use asserts in Chromium. See https://chromium.googlesource.com/chromium/src/+/master/styleguide/java/java.md#Asserts -->
   <issue id="Assert" severity="ignore"/>
+  <issue id="AuthLeak" severity="Error">
+    <ignore regexp="chrome/android/javatests"/>
+  </issue>
   <issue id="BadHostnameVerifier" severity="Error">
     <!-- Safe, used in test only. -->
     <ignore regexp="net/test/android/javatests/src/org/chromium/net/test/util/TestWebServer.java"/>
@@ -37,6 +40,10 @@
   <issue id="ButtonStyle" severity="Error">
     <ignore regexp="remoting/android/host/res/layout/main.xml"/>
   </issue>
+  <!-- Found in generated android_chrome_strings.xml. -->
+  <issue id="ByteOrderMark" severity="Error">
+    <ignore regexp="values-pt-rBR/android_chrome_strings.xml"/>
+  </issue>
   <issue id="CommitPrefEdits">
     <ignore regexp="third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/ticl/android2/channel/AndroidChannelPreferences.java"/>
   </issue>
@@ -53,7 +60,9 @@
   </issue>
   <!-- TODO(crbug.com/635567): Fix this properly. -->
   <issue id="Deprecated" severity="Error">
+    <ignore regexp="android:singleLine"/>
     <ignore regexp="AndroidManifest.xml"/>
+    <ignore regexp="/test/"/>
   </issue>
   <issue id="DrawAllocation">
     <ignore regexp="content/public/android/java/src/org/chromium/content/browser/ContentViewRenderView.java"/>
@@ -122,8 +131,6 @@
     <ignore regexp="chromecast/internal"/>
     <!-- It is OK for content_shell_apk to have missing assets. -->
     <ignore regexp="content/shell/android/java/res/"/>
-    <!-- TODO(lambroslambrou) remove this once crbug.com/502030 is fixed. -->
-    <ignore regexp="remoting/android/java/res"/>
     <!-- Suppression for chrome/test/chromedriver/test/webview_shell/java/res/drawable/icon.png -->
     <ignore regexp="res/drawable/icon.png"/>
   </issue>
@@ -209,6 +216,8 @@
     <ignore regexp="org/chromium/memconsumer/MemConsumer.*.class"/>
     <ignore regexp="org/chromium/memconsumer/ResidentService.class"/>
     <ignore regexp="org/chromium/mojo/bindings/ValidationTest.class"/>
+    <!-- TODO(crbug.com/635567): Fix this properly. -->
+    <ignore regexp="sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java"/>
   </issue>
   <issue id="OldTargetApi">
     <ignore path="AndroidManifest.xml"/>
@@ -237,6 +246,9 @@
   </issue>
   <issue id="Recycle" severity="ignore"/>
   <issue id="Registered" severity="ignore"/>
+  <issue id="ResourceType" severity="Error">
+    <ignore regexp="/javatests/"/>
+  </issue>
   <issue id="RtlCompat" severity="ignore"/>
   <issue id="RtlEnabled" severity="ignore"/>
   <issue id="RtlSymmetry" severity="ignore"/>
@@ -446,6 +458,10 @@
     <ignore regexp="media/capture/content/android/java/src/org/chromium/media/ScreenCapture.java"/>
   </issue>
   <issue id="ViewConstructor" severity="ignore"/>
+  <issue id="VisibleForTests" severity="Error">
+    <ignore regexp="chrome/android/javatests"/>
+    <ignore regexp="/test/"/>
+  </issue>
   <issue id="WrongCall" severity="ignore"/>
   <issue id="WrongConstant">
     <ignore regexp="chrome/android/java/src/org/chromium/chrome/browser/SSLClientCertificateRequest.java"/>
diff --git a/src/build/android/main_dex_classes.flags b/src/build/android/main_dex_classes.flags
index 9bb7977..33583d5 100644
--- a/src/build/android/main_dex_classes.flags
+++ b/src/build/android/main_dex_classes.flags
@@ -15,5 +15,10 @@
 
 # Required when code coverage is enabled.
 -keep class com.vladium.** {
-    *;
+  *;
+}
+
+# Used by tests for secondary dex extraction.
+-keep class android.support.v4.content.ContextCompat {
+  *;
 }
diff --git a/src/build/android/pylib/results/presentation/test_results_presentation.py b/src/build/android/pylib/results/presentation/test_results_presentation.py
index d7e2b5a..c739413 100755
--- a/src/build/android/pylib/results/presentation/test_results_presentation.py
+++ b/src/build/android/pylib/results/presentation/test_results_presentation.py
@@ -117,6 +117,8 @@
 
 def status_class(status):
   """Returns HTML class for test status."""
+  if not status:
+    return 'failure unknwon'
   status = status.lower()
   if status not in ('success', 'skipped'):
     return 'failure %s' % status
@@ -151,7 +153,8 @@
         test_run = []
 
       test_run.extend([
-          cell(data=result['status'],             # status
+          cell(data=result['status'] or 'UNKNOWN',
+                                                  # status
                html_class=('center %s' %
                   status_class(result['status']))),
           cell(data=result['elapsed_time_ms']),   # elapsed_time_ms
@@ -306,6 +309,7 @@
 
   return '%s/%s/%s' % (server_url, bucket, dest)
 
+
 def main():
   parser = argparse.ArgumentParser()
   parser.add_argument('--json-file', help='Path of json file.')
@@ -347,16 +351,21 @@
   if ((args.build_properties is None) ==
          (args.build_number is None or args.builder_name is None)):
     raise parser.error('Exactly one of build_perperties or '
-                    '(build_number or builder_names) should be given.')
+                       '(build_number or builder_name) should be given.')
 
   if (args.build_number is None) != (args.builder_name is None):
     raise parser.error('args.build_number and args.builder_name '
-                    'has to be be given together'
-                    'or not given at all.')
+                       'has to be be given together'
+                       'or not given at all.')
 
-  if (len(args.positional) == 0) == (args.json_file is None):
+  if len(args.positional) == 0 and args.json_file is None:
+    if args.output_json:
+        with open(args.output_json, 'w') as f:
+          json.dump({}, f)
+    return
+  elif len(args.positional) != 0 and args.json_file:
     raise parser.error('Exactly one of args.positional and '
-                    'args.json_file should be given.')
+                       'args.json_file should be given.')
 
   if args.build_properties:
     build_properties = json.loads(args.build_properties)
diff --git a/src/build/check_gn_headers.py b/src/build/check_gn_headers.py
index be1e797..0850196 100755
--- a/src/build/check_gn_headers.py
+++ b/src/build/check_gn_headers.py
@@ -76,7 +76,12 @@
   all_headers = set()
 
   for _target, properties in gn['targets'].iteritems():
-    for f in properties.get('sources', []):
+    sources = properties.get('sources', [])
+    public = properties.get('public', [])
+    # Exclude '"public": "*"'.
+    if type(public) is list:
+      sources += public
+    for f in sources:
       if f.endswith('.h') or f.endswith('.hh'):
         if f.startswith('//'):
           f = f[2:]  # Strip the '//' prefix.
@@ -107,6 +112,18 @@
   return out
 
 
+def FilterOutDepsedRepo(files, deps):
+  return {f for f in files if not any(f.startswith(d) for d in deps)}
+
+
+def GetNonExistingFiles(lst):
+  out = set()
+  for f in lst:
+    if not os.path.isfile(f):
+      out.add(f)
+  return out
+
+
 def main():
   parser = argparse.ArgumentParser()
   parser.add_argument('--out-dir', default='out/Release')
@@ -129,11 +146,15 @@
   deps_p.start()
 
   d = d_q.get()
+  assert len(GetNonExistingFiles(d)) == 0, \
+      'Found non-existing files in ninja deps'
   gn = gn_q.get()
   missing = d - gn
+  nonexisting = GetNonExistingFiles(gn)
 
   deps = deps_q.get()
-  missing = {m for m in missing if not any(m.startswith(d) for d in deps)}
+  missing = FilterOutDepsedRepo(missing, deps)
+  nonexisting = FilterOutDepsedRepo(nonexisting, deps)
 
   d_p.join()
   gn_p.join()
@@ -144,17 +165,25 @@
     missing -= whitelist
 
   missing = sorted(missing)
+  nonexisting = sorted(nonexisting)
 
   if args.json:
     with open(args.json, 'w') as f:
       json.dump(missing, f)
 
-  if len(missing) == 0:
+  if len(missing) == 0 and len(nonexisting) == 0:
     return 0
 
-  print 'The following files should be included in gn files:'
-  for i in missing:
-    print i
+  if len(missing) > 0:
+    print '\nThe following files should be included in gn files:'
+    for i in missing:
+      print i
+
+  if len(nonexisting) > 0:
+    print '\nThe following non-existing files should be removed from gn files:'
+    for i in nonexisting:
+      print i
+
   return 1
 
 
diff --git a/src/build/check_gn_headers_unittest.py b/src/build/check_gn_headers_unittest.py
index f62fe62..892fa66 100755
--- a/src/build/check_gn_headers_unittest.py
+++ b/src/build/check_gn_headers_unittest.py
@@ -38,8 +38,14 @@
       "//:All": {
       },
       "//:base": {
+         "public": [ "//base/p.h" ],
          "sources": [ "//base/a.cc", "//base/a.h", "//base/b.hh" ],
          "visibility": [ "*" ]
+      },
+      "//:star_public": {
+         "public": "*",
+         "sources": [ "//base/c.h" ],
+         "visibility": [ "*" ]
       }
     }
 }
@@ -88,6 +94,8 @@
     expected = set([
         'base/a.h',
         'base/b.hh',
+        'base/c.h',
+        'base/p.h',
     ])
     self.assertEquals(headers, expected)
 
diff --git a/src/build/config/BUILD.gn b/src/build/config/BUILD.gn
index 4a34178..5092108 100644
--- a/src/build/config/BUILD.gn
+++ b/src/build/config/BUILD.gn
@@ -288,7 +288,10 @@
       "//build/config/mac:mac_executable_flags",
     ]
   } else if (is_ios) {
-    configs += [ "//build/config/ios:ios_dynamic_flags" ]
+    configs += [
+      "//build/config/ios:ios_dynamic_flags",
+      "//build/config/ios:ios_executable_flags",
+    ]
   } else if (is_linux || is_android) {
     configs += [ "//build/config/gcc:executable_ldconfig" ]
     if (is_android) {
diff --git a/src/build/config/BUILDCONFIG.gn b/src/build/config/BUILDCONFIG.gn
index d055e70..9ff1041 100644
--- a/src/build/config/BUILDCONFIG.gn
+++ b/src/build/config/BUILDCONFIG.gn
@@ -544,7 +544,7 @@
     # that shouldn't use the windows subsystem.
     "//build/config/win:console",
   ]
-} else if (is_mac || is_ios) {
+} else if (is_mac) {
   _linker_configs = [ "//build/config/mac:strip_all" ]
 } else {
   _linker_configs = []
diff --git a/src/build/config/android/internal_rules.gni b/src/build/config/android/internal_rules.gni
index 3f592bd..218fdfc 100644
--- a/src/build/config/android/internal_rules.gni
+++ b/src/build/config/android/internal_rules.gni
@@ -638,6 +638,61 @@
   }
 }
 
+template("stack_script") {
+  forward_variables_from(invoker, [ "testonly" ])
+
+  _stack_target_name = invoker.stack_target_name
+
+  action(target_name) {
+    forward_variables_from(invoker,
+                           [
+                             "data_deps",
+                             "deps",
+                           ])
+    if (!defined(deps)) {
+      deps = []
+    }
+    if (!defined(data_deps)) {
+      data_deps = []
+    }
+
+    data_deps +=
+        [ "//third_party/android_platform/development/scripts:stack_py" ]
+
+    script = "//build/android/gyp/create_stack_script.py"
+    depfile = "$target_gen_dir/$target_name.d"
+
+    _stack_script = "//third_party/android_platform/development/scripts/stack"
+
+    _generated_script = "$root_build_dir/bin/stack_${_stack_target_name}"
+
+    outputs = [
+      _generated_script,
+    ]
+    data = [
+      _generated_script,
+    ]
+
+    args = [
+      "--depfile",
+      rebase_path(depfile, root_build_dir),
+      "--output-directory",
+      rebase_path(root_build_dir, root_build_dir),
+      "--script-path",
+      rebase_path(_stack_script, root_build_dir),
+      "--script-output-path",
+      rebase_path(_generated_script, root_build_dir),
+      "--arch=$target_cpu",
+    ]
+    if (defined(invoker.packed_libraries)) {
+      args += [
+        "--packed-libs",
+        invoker.packed_libraries,
+      ]
+    }
+  }
+}
+
 if (enable_java_templates) {
   import("//build/config/zip.gni")
   import("//third_party/ijar/ijar.gni")
@@ -696,7 +751,7 @@
       ]
 
       args = [
-        "--lint-path=$_rebased_lint_android_sdk_root/tools/lint",
+        "--lint-path=$_rebased_lint_android_sdk_root/tools-lint/bin/lint",
         "--cache-dir",
         rebase_path(_cache_dir, root_build_dir),
         "--platform-xml-path",
diff --git a/src/build/config/android/rules.gni b/src/build/config/android/rules.gni
index eddbbf3..a08a475 100644
--- a/src/build/config/android/rules.gni
+++ b/src/build/config/android/rules.gni
@@ -2100,6 +2100,17 @@
         _extra_native_libs_deps +=
             [ "//base/android/linker:chromium_android_linker" ]
       }
+
+      _create_stack_script_rule_name = "${_template_name}__stack_script"
+      _final_deps += [ ":${_create_stack_script_rule_name}" ]
+      stack_script(_create_stack_script_rule_name) {
+        stack_target_name = invoker.target_name
+        deps = _native_libs_deps
+        if (_native_libs_deps != [] && _enable_relocation_packing) {
+          packed_libraries = _native_libs_file_arg
+          deps += [ _native_libs_file_arg_dep ]
+        }
+      }
     }
     if (defined(invoker.loadable_modules) && invoker.loadable_modules != []) {
       _extra_native_libs_even_when_incremental += invoker.loadable_modules
diff --git a/src/build/config/compiler/BUILD.gn b/src/build/config/compiler/BUILD.gn
index f37205e..7bc43b6 100644
--- a/src/build/config/compiler/BUILD.gn
+++ b/src/build/config/compiler/BUILD.gn
@@ -6,7 +6,6 @@
 import("//build/config/chrome_build.gni")
 import("//build/config/chromecast_build.gni")
 import("//build/config/compiler/compiler.gni")
-import("//build/config/nacl/config.gni")
 import("//build/toolchain/cc_wrapper.gni")
 import("//build/toolchain/toolchain.gni")
 import("//build_overrides/build.gni")
@@ -23,6 +22,12 @@
 if (is_ios) {
   import("//build/config/ios/ios_sdk.gni")
 }
+if (is_nacl) {
+  # To keep NaCl variables out of builds that don't include NaCl, all
+  # variables defined in nacl/config.gni referenced here should be protected by
+  # is_nacl conditions.
+  import("//build/config/nacl/config.gni")
+}
 
 declare_args() {
   # Default to warnings as errors for default workflow, where we catch
@@ -94,9 +99,7 @@
   # branches)
   optimize_for_fuzzing = false
 
-  # Optimize symbol files for maximizing goma cache hit rate. This isn't
-  # on by default when goma is enabled because setting this to true may make
-  # it harder to debug binaries.
+  # Optimize symbol files for maximizing goma cache hit rate.
   strip_absolute_paths_from_debug_symbols = false
 }
 
@@ -165,8 +168,10 @@
     configs += [ "//build/config/linux:compiler" ]
   } else if (is_nacl) {
     configs += [ "//build/config/nacl:compiler" ]
-  } else if (is_ios || is_mac) {
+  } else if (is_mac) {
     configs += [ "//build/config/mac:compiler" ]
+  } else if (is_ios) {
+    configs += [ "//build/config/ios:compiler" ]
   }
 
   # See the definitions below.
@@ -1492,7 +1497,7 @@
 # optimization and link-time code generation which is very expensive and should
 # be used sparingly.
 config("optimize_max") {
-  if (is_nacl_irt) {
+  if (is_nacl && is_nacl_irt) {
     # The NaCl IRT is a special case and always wants its own config.
     # Various components do:
     #   if (!is_debug) {
@@ -1539,7 +1544,7 @@
 # TODO(crbug.com/621335) - rework how all of these configs are related
 # so that we don't need this disclaimer.
 config("optimize_speed") {
-  if (is_nacl_irt) {
+  if (is_nacl && is_nacl_irt) {
     # The NaCl IRT is a special case and always wants its own config.
     # Various components do:
     #   if (!is_debug) {
@@ -1585,7 +1590,7 @@
 # The default optimization applied to all targets. This will be equivalent to
 # either "optimize" or "no_optimize", depending on the build flags.
 config("default_optimization") {
-  if (is_nacl_irt) {
+  if (is_nacl && is_nacl_irt) {
     # The NaCl IRT is a special case and always wants its own config.
     # It gets optimized the same way regardless of the type of build.
     configs = [ "//build/config/nacl:irt_optimize" ]
diff --git a/src/build/config/ios/BUILD.gn b/src/build/config/ios/BUILD.gn
index ec6b9e6..71f87de 100644
--- a/src/build/config/ios/BUILD.gn
+++ b/src/build/config/ios/BUILD.gn
@@ -23,6 +23,53 @@
   enable_ios_bitcode = false
 }
 
+# This is included by reference in the //build/config/compiler config that
+# is applied to all targets. It is here to separate out the logic.
+config("compiler") {
+  # These flags are shared between the C compiler and linker.
+  common_ios_flags = []
+
+  # CPU architecture.
+  if (current_cpu == "x64") {
+    common_ios_flags += [
+      "-arch",
+      "x86_64",
+    ]
+  } else if (current_cpu == "x86") {
+    common_ios_flags += [
+      "-arch",
+      "i386",
+    ]
+  } else if (current_cpu == "armv7" || current_cpu == "arm") {
+    common_ios_flags += [
+      "-arch",
+      "armv7",
+    ]
+  } else if (current_cpu == "arm64") {
+    common_ios_flags += [
+      "-arch",
+      "arm64",
+    ]
+  }
+
+  # This is here so that all files get recompiled after an Xcode update.
+  # (defines are passed via the command line, and build system rebuild things
+  # when their commandline changes). Nothing should ever read this define.
+  defines = [ "CR_XCODE_VERSION=$xcode_version" ]
+
+  asmflags = common_ios_flags
+  cflags = common_ios_flags
+
+  # Without this, the constructors and destructors of a C++ object inside
+  # an Objective C struct won't be called, which is very bad.
+  cflags_objcc = [ "-fobjc-call-cxx-cdtors" ]
+
+  cflags_c = [ "-std=c99" ]
+  cflags_objc = cflags_c
+
+  ldflags = common_ios_flags
+}
+
 # This is included by reference in the //build/config/compiler:runtime_library
 # config that is applied to all targets. It is here to separate out the logic
 # that is iOS-only. Please see that target for advice on what should go in
@@ -67,6 +114,9 @@
   }
 }
 
+config("ios_executable_flags") {
+}
+
 config("ios_dynamic_flags") {
   ldflags = [ "-Wl,-ObjC" ]  # Always load Objective-C categories and class.
 }
diff --git a/src/build/config/ios/rules.gni b/src/build/config/ios/rules.gni
index 2cafb96..5be23dd 100644
--- a/src/build/config/ios/rules.gni
+++ b/src/build/config/ios/rules.gni
@@ -102,25 +102,11 @@
     }
 
     if (enable_stripping) {
-      # Check whether //build/config/mac:strip_all has been removed from the
-      # configs variables (as this is how stripping is disabled for a single
-      # target).
-      _strip_all_in_config = false
-      if (defined(invoker.configs)) {
-        foreach(_config, invoker.configs) {
-          if (_config == "//build/config/mac:strip_all") {
-            _strip_all_in_config = true
-          }
-        }
-      }
-
-      if (_strip_all_in_config) {
-        args += [ "-Wcrl,strip,-x,-S" ]
-        if (save_unstripped_output) {
-          outputs += [ "$root_out_dir/$_output_name.unstripped" ]
-          args += [ "-Wcrl,unstripped," +
-                    rebase_path("$root_out_dir/.", root_build_dir) ]
-        }
+      args += [ "-Wcrl,strip,-x,-S" ]
+      if (save_unstripped_output) {
+        outputs += [ "$root_out_dir/$_output_name.unstripped" ]
+        args += [ "-Wcrl,unstripped," +
+                  rebase_path("$root_out_dir/.", root_build_dir) ]
       }
     }
   }
diff --git a/src/build/config/linux/gtk/gtk.gni b/src/build/config/linux/gtk/gtk.gni
index 0521a8c..53e943e 100644
--- a/src/build/config/linux/gtk/gtk.gni
+++ b/src/build/config/linux/gtk/gtk.gni
@@ -8,8 +8,5 @@
 
 declare_args() {
   # Whether to compile against GTKv3 instead of GTKv2.
-  # TODO(thomasanderson): Currently, the 32-bit clusterfuzz schroot does not
-  # have libgtk-3-0 installed.  set use_gtk3 = true on all architectures when
-  # the package is added (crbug.com/699669).
-  use_gtk3 = target_cpu == "x64"
+  use_gtk3 = true
 }
diff --git a/src/build/config/mac/BUILD.gn b/src/build/config/mac/BUILD.gn
index 84180e6..0f7cecc 100644
--- a/src/build/config/mac/BUILD.gn
+++ b/src/build/config/mac/BUILD.gn
@@ -6,16 +6,8 @@
 import("//build/config/mac/mac_sdk.gni")
 import("//build/config/mac/symbols.gni")
 
-if (is_ios) {
-  # This needs to be imported after mac_sdk.gni as it overrides some of the
-  # variables defined by it.
-  import("//build/config/ios/ios_sdk.gni")
-}
-
 # This is included by reference in the //build/config/compiler config that
 # is applied to all targets. It is here to separate out the logic.
-#
-# This is applied to BOTH desktop Mac and iOS targets.
 config("compiler") {
   # These flags are shared between the C compiler and linker.
   common_mac_flags = []
@@ -31,16 +23,6 @@
       "-arch",
       "i386",
     ]
-  } else if (current_cpu == "armv7" || current_cpu == "arm") {
-    common_mac_flags += [
-      "-arch",
-      "armv7",
-    ]
-  } else if (current_cpu == "arm64") {
-    common_mac_flags += [
-      "-arch",
-      "arm64",
-    ]
   }
 
   # This is here so that all files get recompiled after an Xcode update.
@@ -60,16 +42,7 @@
 
   ldflags = common_mac_flags
 
-  if (is_ios && additional_toolchains != []) {
-    # For fat build, the generation of the dSYM happens after the fat binary has
-    # been created with "lipo" thus the stripping cannot happen at link time but
-    # after running "lipo" too.
-    _save_unstripped_output = false
-  } else {
-    _save_unstripped_output = save_unstripped_output
-  }
-
-  if (_save_unstripped_output) {
+  if (save_unstripped_output) {
     ldflags += [ "-Wcrl,unstripped," + rebase_path(root_out_dir) ]
   }
 }
@@ -89,13 +62,11 @@
   cflags = common_flags
   ldflags = common_flags
 
-  if (is_mac) {
-    # Prevent Mac OS X AssertMacros.h from defining macros that collide
-    # with common names, like 'check', 'require', and 'verify'.
-    # (Included by system header. Also exists on iOS but not included.)
-    # http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/AssertMacros.h
-    defines = [ "__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORE=0" ]
-  }
+  # Prevent Mac OS X AssertMacros.h (included by system header) from defining
+  # macros that collide with common names, like 'check', 'require', and
+  # 'verify'.
+  # http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/AssertMacros.h
+  defines = [ "__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORE=0" ]
 }
 
 # On Mac, this is used for everything except static libraries.
@@ -127,10 +98,7 @@
 # from a binary, but some targets may wish to specify a saves file to preserve
 # specific symbols.
 config("strip_all") {
-  # On iOS, the final applications are assembled using lipo (to support fat
-  # builds). This configuration is thus always empty and the correct flags
-  # are passed to the linker_driver.py script directly during the lipo call.
-  if (enable_stripping && !is_ios) {
+  if (enable_stripping) {
     ldflags = [ "-Wcrl,strip,-x,-S" ]
   }
 }
diff --git a/src/build/config/sanitizers/sanitizers.gni b/src/build/config/sanitizers/sanitizers.gni
index 585a065..17f4d96 100644
--- a/src/build/config/sanitizers/sanitizers.gni
+++ b/src/build/config/sanitizers/sanitizers.gni
@@ -92,10 +92,10 @@
 
   # Value for -fsanitize-coverage flag. Setting this causes
   # use_sanitizer_coverage to be enabled.
-  # Default value when unset and use_afl=true:
-  # trace-pc
+  # Default value when unset and use_afl=true or use_libfuzzer=true:
+  #     trace-pc-guard
   # Default value when unset and use_sanitizer_coverage=true:
-  #     edge,indirect-calls,8bit-counters
+  #     trace-pc-guard,indirect-calls
   sanitizer_coverage_flags = ""
 
   # Keep symbol level when building with sanitizers. When sanitizers are
@@ -154,7 +154,7 @@
 if ((use_afl || use_libfuzzer) && sanitizer_coverage_flags == "") {
   sanitizer_coverage_flags = "trace-pc-guard"
 } else if (use_sanitizer_coverage && sanitizer_coverage_flags == "") {
-  sanitizer_coverage_flags = "edge,indirect-calls,8bit-counters"
+  sanitizer_coverage_flags = "trace-pc-guard,indirect-calls"
 }
 
 using_sanitizer =
diff --git a/src/build/fix_gn_headers.py b/src/build/fix_gn_headers.py
index aa98c73..01ff764 100755
--- a/src/build/fix_gn_headers.py
+++ b/src/build/fix_gn_headers.py
@@ -132,12 +132,73 @@
     open(gnfile, 'w').write('\n'.join(lines) + '\n')
 
 
+def RemoveHeader(headers, skip_ambiguous=True):
+  """Remove non-existing headers in GN files.
+
+  When skip_ambiguous is True, skip if multiple matches are found.
+  """
+  edits = {}
+  unhandled = []
+  for filename in headers:
+    filename = filename.strip()
+    if not (filename.endswith('.h') or filename.endswith('.hh')):
+      continue
+    basename = os.path.basename(filename)
+    print filename
+    out, returncode = GitGrep('(/|")' + basename + '"')
+    if returncode != 0 or not out:
+      unhandled.append(filename)
+      print '  Not found'
+      continue
+
+    grep_lines = out.splitlines()
+    matches = []
+    for line in grep_lines:
+      gnfile, linenr, contents = line.split(':')
+      print '    ', gnfile, linenr, contents
+      linenr = int(linenr)
+      lines = open(gnfile).read().splitlines()
+      assert contents in lines[linenr - 1]
+      matches.append((gnfile, linenr, contents))
+
+    if len(matches) == 0:
+      continue
+    if len(matches) > 1:
+      print '\n[WARNING] Ambiguous matching for', filename
+      for i in enumerate(matches, 1):
+        print '%d: %s' % (i[0], i[1])
+      print
+      if skip_ambiguous:
+        continue
+
+      picked = raw_input('Pick the matches ("2,3" for multiple): ')
+      try:
+        matches = [matches[int(i) - 1] for i in picked.split(',')]
+      except (ValueError, IndexError):
+        continue
+
+    for match in matches:
+      gnfile, linenr, contents = match
+      print '  ', gnfile, linenr, contents
+      edits.setdefault(gnfile, set()).add(linenr)
+
+  for gnfile in edits:
+    lines = open(gnfile).read().splitlines()
+    for l in sorted(edits[gnfile], reverse=True):
+      lines.pop(l - 1)
+    open(gnfile, 'w').write('\n'.join(lines) + '\n')
+
+  return unhandled
+
+
 def main():
   parser = argparse.ArgumentParser()
-  parser.add_argument('input_file',
-                      help="missing headers, output of check_gn_headers.py")
+  parser.add_argument('input_file', help="missing or non-existing headers, "
+                      "output of check_gn_headers.py")
   parser.add_argument('--prefix',
                       help="only handle path name with this prefix")
+  parser.add_argument('--remove', action='store_true',
+                      help="treat input_file as non-existing headers")
 
   args, _extras = parser.parse_known_args()
 
@@ -146,8 +207,11 @@
   if args.prefix:
     headers = [i for i in headers if i.startswith(args.prefix)]
 
-  unhandled = AddHeadersNextToCC(headers)
-  AddHeadersToSources(unhandled)
+  if args.remove:
+    RemoveHeader(headers, False)
+  else:
+    unhandled = AddHeadersNextToCC(headers)
+    AddHeadersToSources(unhandled)
 
 
 if __name__ == '__main__':
diff --git a/src/build/print_python_deps.py b/src/build/print_python_deps.py
index 50a1f08..92c75a5 100755
--- a/src/build/print_python_deps.py
+++ b/src/build/print_python_deps.py
@@ -38,7 +38,8 @@
     if not path.startswith(_SRC_ROOT):
       continue
 
-    if path.endswith('.pyc'):
+    if (path.endswith('.pyc')
+        or (path.endswith('c') and not os.path.splitext(path)[1])):
       path = path[:-1]
     src_paths.add(path)
 
diff --git a/src/build/secondary/third_party/android_platform/development/scripts/BUILD.gn b/src/build/secondary/third_party/android_platform/development/scripts/BUILD.gn
new file mode 100644
index 0000000..6dabf5e
--- /dev/null
+++ b/src/build/secondary/third_party/android_platform/development/scripts/BUILD.gn
@@ -0,0 +1,13 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+group("stack_py") {
+  _py_files = read_file(
+          "//build/secondary/third_party/android_platform/development/scripts/stack.pydeps",
+          "list lines")
+
+  set_sources_assignment_filter([ "#*" ])
+  sources = _py_files
+  data = sources
+}
diff --git a/src/build/secondary/third_party/android_platform/development/scripts/stack.pydeps b/src/build/secondary/third_party/android_platform/development/scripts/stack.pydeps
new file mode 100644
index 0000000..2f46729
--- /dev/null
+++ b/src/build/secondary/third_party/android_platform/development/scripts/stack.pydeps
@@ -0,0 +1,19 @@
+# Generated by running:
+#   build/print_python_deps.py --root third_party/android_platform/development/scripts --output build/secondary/third_party/android_platform/development/scripts/stack.pydeps third_party/android_platform/development/scripts/stack
+../../../../build/android/pylib/__init__.py
+../../../../build/android/pylib/constants/__init__.py
+../../../../build/android/pylib/symbols/__init__.py
+../../../../build/android/pylib/symbols/elf_symbolizer.py
+../../../catapult/devil/devil/__init__.py
+../../../catapult/devil/devil/android/__init__.py
+../../../catapult/devil/devil/android/constants/__init__.py
+../../../catapult/devil/devil/android/constants/chrome.py
+../../../catapult/devil/devil/android/sdk/__init__.py
+../../../catapult/devil/devil/android/sdk/keyevent.py
+../../../catapult/devil/devil/android/sdk/version_codes.py
+../../../catapult/devil/devil/constants/__init__.py
+../../../catapult/devil/devil/constants/exit_codes.py
+stack
+stack_core.py
+stack_libs.py
+symbol.py
diff --git a/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn b/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
index dc44fb1..ac12546 100644
--- a/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
+++ b/src/build/secondary/third_party/crashpad/crashpad/util/BUILD.gn
@@ -78,6 +78,7 @@
     "misc/clock_mac.cc",
     "misc/clock_posix.cc",
     "misc/clock_win.cc",
+    "misc/from_pointer_cast.h",
     "misc/implicit_cast.h",
     "misc/initialization_state.h",
     "misc/initialization_state_dcheck.cc",
diff --git a/src/build/toolchain/gcc_toolchain.gni b/src/build/toolchain/gcc_toolchain.gni
index dfd1879..be55c0f 100644
--- a/src/build/toolchain/gcc_toolchain.gni
+++ b/src/build/toolchain/gcc_toolchain.gni
@@ -248,8 +248,10 @@
       extra_ldflags = ""
     }
 
-    enable_linker_map =
-        defined(invoker.enable_linker_map) && invoker.enable_linker_map
+    # Currently disabled on LLD because of a bug (fixed upstream).
+    # See https://crbug.com/716209.
+    enable_linker_map = defined(invoker.enable_linker_map) &&
+                        invoker.enable_linker_map && !use_lld
 
     # These library switches can apply to all tools below.
     lib_switch = "-l"
diff --git a/src/build/util/LASTCHANGE b/src/build/util/LASTCHANGE
index 971f97b..4619efb 100644
--- a/src/build/util/LASTCHANGE
+++ b/src/build/util/LASTCHANGE
@@ -1 +1 @@
-LASTCHANGE=e34b576533b449d23735b55136c9264ccf41c1b2-refs/heads/master@{#467649}
+LASTCHANGE=3a06c69d34196768c6273d5ba15fa4d2711bf300-refs/heads/master@{#469163}
diff --git a/src/build/util/LASTCHANGE.blink b/src/build/util/LASTCHANGE.blink
index d874e2b..1cf5b35 100644
--- a/src/build/util/LASTCHANGE.blink
+++ b/src/build/util/LASTCHANGE.blink
@@ -1 +1 @@
-LASTCHANGE=4a9d385908fab7738773cb99d06296c0a4fc7846
+LASTCHANGE=338c3cf69ad3be3981fb05e48dc3061a5148f198
diff --git a/src/build/vs_toolchain.py b/src/build/vs_toolchain.py
index 8c7d6b9..1004d9e 100755
--- a/src/build/vs_toolchain.py
+++ b/src/build/vs_toolchain.py
@@ -325,6 +325,10 @@
 
   debug_file = 'dbghelp.dll'
   full_path = os.path.join(win_sdk_dir, 'Debuggers', target_cpu, debug_file)
+  if not os.path.exists(full_path):
+    raise Exception('dbghelp.dll not found in "%s"\r\nYou must install the '
+                    '"Debugging Tools for Windows" feature from the Windows '
+                    '10 SDK.' % full_path)
   target_path = os.path.join(target_dir, debug_file)
   _CopyRuntimeImpl(target_path, full_path)
 
@@ -398,7 +402,7 @@
 def SetEnvironmentAndGetSDKDir():
   """Gets location information about the current sdk (must have been
   previously updated by 'update'). This is used for the GN build."""
-  runtime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs()
+  SetEnvironmentAndGetRuntimeDllDirs()
 
   # If WINDOWSSDKDIR is not set, search the default SDK path and set it.
   if not 'WINDOWSSDKDIR' in os.environ:
diff --git a/src/chrome/VERSION b/src/chrome/VERSION
index 92ea6e4..daef779 100644
--- a/src/chrome/VERSION
+++ b/src/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=60
 MINOR=0
-BUILD=3083
+BUILD=3089
 PATCH=0
diff --git a/src/net/BUILD.gn b/src/net/BUILD.gn
index 150b514..35c642f 100644
--- a/src/net/BUILD.gn
+++ b/src/net/BUILD.gn
@@ -41,7 +41,7 @@
 # in addition to use_openssl_certs or use_nss_certs, in that case byte certs
 # are used internally but OpenSSL or NSS are used for certificate verification.
 # TODO(mattm): crbug.com/671420: Implement and enable this for all platforms.
-use_byte_certs = is_mac
+use_byte_certs = is_mac || is_android
 
 buildflag_header("features") {
   header = "net_features.h"
@@ -532,8 +532,6 @@
       "cert/cert_verify_proc_mac.h",
       "cert/cert_verify_proc_nss.cc",
       "cert/cert_verify_proc_nss.h",
-      "cert/cert_verify_proc_openssl.cc",
-      "cert/cert_verify_proc_openssl.h",
       "cert/cert_verify_proc_whitelist.cc",
       "cert/cert_verify_proc_whitelist.h",
       "cert/cert_verify_proc_win.cc",
@@ -557,8 +555,6 @@
       "cert/ct_signed_certificate_timestamp_log_param.h",
       "cert/ev_root_ca_metadata.cc",
       "cert/ev_root_ca_metadata.h",
-      "cert/internal/cert_issuer_source_nss.cc",
-      "cert/internal/cert_issuer_source_nss.h",
       "cert/internal/system_trust_store.cc",
       "cert/internal/system_trust_store.h",
       "cert/internal/trust_store_mac.cc",
@@ -596,7 +592,6 @@
       "cert/test_root_certs_android.cc",
       "cert/test_root_certs_mac.cc",
       "cert/test_root_certs_nss.cc",
-      "cert/test_root_certs_openssl.cc",
       "cert/test_root_certs_win.cc",
       "cert/x509_cert_types_mac.cc",
       "cert/x509_cert_types_win.cc",
@@ -1402,8 +1397,7 @@
       "quic/platform/impl/quic_url_impl.h",
       "quic/platform/impl/quic_url_utils_impl.cc",
       "quic/platform/impl/quic_url_utils_impl.h",
-      "quic/quartc/quartc_alarm_factory.cc",
-      "quic/quartc/quartc_alarm_factory.h",
+      "quic/quartc/quartc_clock_interface.h",
       "quic/quartc/quartc_factory.cc",
       "quic/quartc/quartc_factory.h",
       "quic/quartc/quartc_factory_interface.h",
@@ -1424,12 +1418,12 @@
       "reporting/reporting_client.h",
       "reporting/reporting_context.cc",
       "reporting/reporting_context.h",
-      "reporting/reporting_delegate.cc",
-      "reporting/reporting_delegate.h",
       "reporting/reporting_delivery_agent.cc",
       "reporting/reporting_delivery_agent.h",
       "reporting/reporting_endpoint_manager.cc",
       "reporting/reporting_endpoint_manager.h",
+      "reporting/reporting_feature.cc",
+      "reporting/reporting_feature.h",
       "reporting/reporting_garbage_collector.cc",
       "reporting/reporting_garbage_collector.h",
       "reporting/reporting_header_parser.cc",
@@ -1585,7 +1579,6 @@
       "spdy/core/hpack/hpack_static_table.h",
       "spdy/core/http2_frame_decoder_adapter.cc",
       "spdy/core/http2_frame_decoder_adapter.h",
-      "spdy/core/lifo_write_scheduler.h",
       "spdy/core/priority_write_scheduler.h",
       "spdy/core/spdy_alt_svc_wire_format.cc",
       "spdy/core/spdy_alt_svc_wire_format.h",
@@ -1601,8 +1594,6 @@
       "spdy/core/spdy_framer_decoder_adapter.h",
       "spdy/core/spdy_header_block.cc",
       "spdy/core/spdy_header_block.h",
-      "spdy/core/spdy_header_indexing.cc",
-      "spdy/core/spdy_header_indexing.h",
       "spdy/core/spdy_headers_handler_interface.h",
       "spdy/core/spdy_pinnable_buffer_piece.cc",
       "spdy/core/spdy_pinnable_buffer_piece.h",
@@ -1613,10 +1604,14 @@
       "spdy/core/write_scheduler.h",
       "spdy/core/zero_copy_output_buffer.h",
       "spdy/platform/api/spdy_estimate_memory_usage.h",
+      "spdy/platform/api/spdy_export.h",
+      "spdy/platform/api/spdy_ptr_util.h",
       "spdy/platform/api/spdy_string.h",
       "spdy/platform/api/spdy_string_piece.h",
       "spdy/platform/api/spdy_string_utils.h",
       "spdy/platform/impl/spdy_estimate_memory_usage_impl.h",
+      "spdy/platform/impl/spdy_export_impl.h",
+      "spdy/platform/impl/spdy_ptr_util_impl.h",
       "spdy/platform/impl/spdy_string_impl.h",
       "spdy/platform/impl/spdy_string_piece_impl.h",
       "spdy/platform/impl/spdy_string_utils_impl.h",
@@ -1779,21 +1774,14 @@
     if (!use_openssl_certs) {
       sources -= [
         "cert/cert_database_openssl.cc",
-        "cert/cert_verify_proc_openssl.cc",
-        "cert/cert_verify_proc_openssl.h",
-        "cert/test_root_certs_openssl.cc",
         "cert/x509_certificate_openssl.cc",
         "ssl/openssl_client_key_store.cc",
         "ssl/openssl_client_key_store.h",
       ]
     } else {
       if (is_android) {
-        # Android doesn't use these even when using OpenSSL.
-        sources -= [
-          "cert/cert_database_openssl.cc",
-          "cert/cert_verify_proc_openssl.cc",
-          "cert/test_root_certs_openssl.cc",
-        ]
+        # Android doesn't use this file even when using OpenSSL.
+        sources -= [ "cert/cert_database_openssl.cc" ]
       }
     }
 
@@ -1811,8 +1799,6 @@
     if (!use_nss_certs) {
       sources -= [
         "cert/cert_database_nss.cc",
-        "cert/internal/cert_issuer_source_nss.cc",
-        "cert/internal/cert_issuer_source_nss.h",
         "cert/internal/trust_store_nss.cc",
         "cert/internal/trust_store_nss.h",
         "cert/known_roots_nss.cc",
@@ -3399,61 +3385,108 @@
     "data/url_request_unittest/two-content-lengths.html.mock-http-headers",
     "data/url_request_unittest/with-headers.html",
     "data/url_request_unittest/with-headers.html.mock-http-headers",
-    "data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem",
-    "data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem",
-    "data/verify_certificate_chain_unittest/constrained-root-bad-eku.pem",
-    "data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem",
-    "data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem",
-    "data/verify_certificate_chain_unittest/expired-constrained-root.pem",
-    "data/verify_certificate_chain_unittest/expired-intermediate.pem",
-    "data/verify_certificate_chain_unittest/expired-target-notBefore.pem",
-    "data/verify_certificate_chain_unittest/expired-target.pem",
-    "data/verify_certificate_chain_unittest/expired-unconstrained-root.pem",
-    "data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem",
-    "data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem",
-    "data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem",
-    "data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem",
-    "data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem",
-    "data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail.pem",
-    "data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok.pem",
-    "data/verify_certificate_chain_unittest/intermediate-sets-eku-any.pem",
-    "data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem",
-    "data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem",
-    "data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem",
-    "data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem",
-    "data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem",
-    "data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem",
-    "data/verify_certificate_chain_unittest/key-rollover-newchain.pem",
-    "data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-    "data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem",
-    "data/verify_certificate_chain_unittest/non-self-signed-root.pem",
-    "data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly.pem",
-    "data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature.pem",
-    "data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement.pem",
-    "data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment.pem",
-    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly.pem",
-    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature.pem",
-    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement.pem",
-    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment.pem",
-    "data/verify_certificate_chain_unittest/target-and-intermediate.pem",
-    "data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem",
-    "data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem",
-    "data/verify_certificate_chain_unittest/target-lacks-eku.pem",
-    "data/verify_certificate_chain_unittest/target-not-end-entity.pem",
-    "data/verify_certificate_chain_unittest/target-restricts-eku-fail.pem",
-    "data/verify_certificate_chain_unittest/target-sets-eku-any.pem",
-    "data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem",
-    "data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem",
-    "data/verify_certificate_chain_unittest/target-signed-with-md5.pem",
-    "data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem",
-    "data/verify_certificate_chain_unittest/target-wrong-signature.pem",
-    "data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem",
-    "data/verify_certificate_chain_unittest/unconstrained-root-bad-eku.pem",
-    "data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem",
-    "data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem",
-    "data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem",
-    "data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem",
-    "data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem",
+    "data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem",
+    "data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test",
+    "data/verify_certificate_chain_unittest/expired-intermediate/chain.pem",
+    "data/verify_certificate_chain_unittest/expired-intermediate/main.test",
+    "data/verify_certificate_chain_unittest/expired-root/chain.pem",
+    "data/verify_certificate_chain_unittest/expired-root/main.test",
+    "data/verify_certificate_chain_unittest/expired-root/ta-with-constraints.test",
+    "data/verify_certificate_chain_unittest/expired-target-notBefore/chain.pem",
+    "data/verify_certificate_chain_unittest/expired-target-notBefore/main.test",
+    "data/verify_certificate_chain_unittest/expired-target/chain.pem",
+    "data/verify_certificate_chain_unittest/expired-target/main.test",
+    "data/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem",
+    "data/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-sets-eku-any/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-sets-eku-any/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-signed-with-md5/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-signed-with-md5/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test",
+    "data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem",
+    "data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test",
+    "data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem",
+    "data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test",
+    "data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem",
+    "data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test",
+    "data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem",
+    "data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test",
+    "data/verify_certificate_chain_unittest/key-rollover/newchain.pem",
+    "data/verify_certificate_chain_unittest/key-rollover/newchain.test",
+    "data/verify_certificate_chain_unittest/key-rollover/oldchain.pem",
+    "data/verify_certificate_chain_unittest/key-rollover/oldchain.test",
+    "data/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem",
+    "data/verify_certificate_chain_unittest/key-rollover/rolloverchain.test",
+    "data/verify_certificate_chain_unittest/non-self-signed-root/chain.pem",
+    "data/verify_certificate_chain_unittest/non-self-signed-root/main.test",
+    "data/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test",
+    "data/verify_certificate_chain_unittest/root-bad-eku/chain.pem",
+    "data/verify_certificate_chain_unittest/root-bad-eku/main.test",
+    "data/verify_certificate_chain_unittest/root-bad-eku/ta-with-constraints.test",
+    "data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem",
+    "data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test",
+    "data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test",
+    "data/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem",
+    "data/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test",
+    "data/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/main.test",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/chain.pem",
+    "data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/main.test",
+    "data/verify_certificate_chain_unittest/target-and-intermediate/chain.pem",
+    "data/verify_certificate_chain_unittest/target-and-intermediate/main.test",
+    "data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem",
+    "data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test",
+    "data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem",
+    "data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test",
+    "data/verify_certificate_chain_unittest/target-lacks-eku/chain.pem",
+    "data/verify_certificate_chain_unittest/target-lacks-eku/main.test",
+    "data/verify_certificate_chain_unittest/target-not-end-entity/chain.pem",
+    "data/verify_certificate_chain_unittest/target-not-end-entity/main.test",
+    "data/verify_certificate_chain_unittest/target-restricts-eku-fail/chain.pem",
+    "data/verify_certificate_chain_unittest/target-restricts-eku-fail/main.test",
+    "data/verify_certificate_chain_unittest/target-sets-eku-any/chain.pem",
+    "data/verify_certificate_chain_unittest/target-sets-eku-any/main.test",
+    "data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem",
+    "data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test",
+    "data/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem",
+    "data/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test",
+    "data/verify_certificate_chain_unittest/target-signed-with-md5/chain.pem",
+    "data/verify_certificate_chain_unittest/target-signed-with-md5/main.test",
+    "data/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem",
+    "data/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test",
+    "data/verify_certificate_chain_unittest/target-wrong-signature/chain.pem",
+    "data/verify_certificate_chain_unittest/target-wrong-signature/main.test",
+    "data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem",
+    "data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test",
+    "data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem",
+    "data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test",
+    "data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test",
     "data/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-dupe_attr.pem",
     "data/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_attr.pem",
     "data/verify_name_match_unittest/names/ascii-BMPSTRING-case_swap-extra_rdn.pem",
@@ -4225,7 +4258,6 @@
     "cert/ct_serialization_unittest.cc",
     "cert/ev_root_ca_metadata_unittest.cc",
     "cert/internal/cert_issuer_source_aia_unittest.cc",
-    "cert/internal/cert_issuer_source_nss_unittest.cc",
     "cert/internal/cert_issuer_source_static_unittest.cc",
     "cert/internal/cert_issuer_source_sync_unittest.h",
     "cert/internal/certificate_policies_unittest.cc",
@@ -4609,12 +4641,12 @@
     "quic/platform/api/quic_lru_cache_test.cc",
     "quic/platform/api/quic_reference_counted_test.cc",
     "quic/platform/api/quic_str_cat_test.cc",
+    "quic/platform/api/quic_test.h",
     "quic/platform/api/quic_text_utils_test.cc",
     "quic/platform/api/quic_url_test.cc",
     "quic/platform/impl/quic_chromium_clock_test.cc",
-    "quic/quartc/quartc_alarm_factory_test.cc",
-    "quic/quartc/quartc_session_test.cc",
-    "quic/quartc/quartc_stream_test.cc",
+    "quic/platform/impl/quic_test_impl.cc",
+    "quic/platform/impl/quic_test_impl.h",
     "quic/test_tools/crypto_test_utils.cc",
     "quic/test_tools/crypto_test_utils.h",
     "quic/test_tools/crypto_test_utils_test.cc",
@@ -4771,7 +4803,6 @@
     "spdy/core/hpack/hpack_output_stream_test.cc",
     "spdy/core/hpack/hpack_round_trip_test.cc",
     "spdy/core/hpack/hpack_static_table_test.cc",
-    "spdy/core/lifo_write_scheduler_test.cc",
     "spdy/core/mock_spdy_framer_visitor.cc",
     "spdy/core/mock_spdy_framer_visitor.h",
     "spdy/core/priority_write_scheduler_test.cc",
@@ -4783,7 +4814,6 @@
     "spdy/core/spdy_frame_reader_test.cc",
     "spdy/core/spdy_framer_test.cc",
     "spdy/core/spdy_header_block_test.cc",
-    "spdy/core/spdy_header_indexing_test.cc",
     "spdy/core/spdy_no_op_visitor.cc",
     "spdy/core/spdy_no_op_visitor.h",
     "spdy/core/spdy_pinnable_buffer_piece_test.cc",
@@ -4986,7 +5016,6 @@
 
   if (!use_nss_certs) {
     sources -= [
-      "cert/internal/cert_issuer_source_nss_unittest.cc",
       "cert/internal/trust_store_nss_unittest.cc",
       "cert/nss_cert_database_unittest.cc",
       "ssl/client_cert_store_nss_unittest.cc",
diff --git a/src/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java b/src/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java
index 2d0fe8d..6549e02 100644
--- a/src/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java
+++ b/src/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java
@@ -4,6 +4,7 @@
 
 package org.chromium.net;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 
 import org.chromium.base.ObserverList;
@@ -41,6 +42,7 @@
     private double mCurrentMaxBandwidth = Double.POSITIVE_INFINITY;
     private int mMaxBandwidthConnectionType = mCurrentConnectionType;
 
+    @SuppressLint("StaticFieldLeak")
     private static NetworkChangeNotifier sInstance;
 
     @VisibleForTesting
diff --git a/src/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/src/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
index e1da29a..6603ad2 100644
--- a/src/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
+++ b/src/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
@@ -350,6 +350,7 @@
 
         // Lazily determine if app has ACCESS_WIFI_STATE permission.
         @GuardedBy("mLock")
+        @SuppressLint("WifiManagerPotentialLeak")
         private boolean hasPermissionLocked() {
             if (mHasWifiPermissionComputed) {
                 return mHasWifiPermission;
@@ -357,6 +358,7 @@
             mHasWifiPermission = mContext.getPackageManager().checkPermission(
                                          permission.ACCESS_WIFI_STATE, mContext.getPackageName())
                     == PackageManager.PERMISSION_GRANTED;
+            // TODO(crbug.com/635567): Fix lint properly.
             mWifiManager = mHasWifiPermission
                     ? (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE)
                     : null;
diff --git a/src/net/base/directory_lister.cc b/src/net/base/directory_lister.cc
index 268648d..946f4a1 100644
--- a/src/net/base/directory_lister.cc
+++ b/src/net/base/directory_lister.cc
@@ -17,7 +17,6 @@
 #include "base/task_scheduler/post_task.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/threading/worker_pool.h"
 #include "net/base/net_errors.h"
 
 namespace net {
diff --git a/src/net/base/file_stream_context_win.cc b/src/net/base/file_stream_context_win.cc
index 4e417dc..77cd65a 100644
--- a/src/net/base/file_stream_context_win.cc
+++ b/src/net/base/file_stream_context_win.cc
@@ -13,7 +13,6 @@
 #include "base/single_thread_task_runner.h"
 #include "base/task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/threading/worker_pool.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 
diff --git a/src/net/base/network_interfaces_unittest.cc b/src/net/base/network_interfaces_unittest.cc
index 7f36c55..754a902 100644
--- a/src/net/base/network_interfaces_unittest.cc
+++ b/src/net/base/network_interfaces_unittest.cc
@@ -8,16 +8,10 @@
 #include <string>
 #include <unordered_set>
 
-// TODO(eroman): Remove unneeeded headers.
-#include "base/files/file_path.h"
-#include "base/format_macros.h"
-#include "base/scoped_native_library.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
-#include "base/sys_byteorder.h"
-#include "base/time/time.h"
+#include "build/build_config.h"
 #include "net/base/ip_endpoint.h"
+#include "testing/gtest/include/gtest/gtest.h"
 
 #if !defined(OS_NACL) && !defined(OS_WIN)
 #include <net/if.h>
@@ -29,8 +23,6 @@
 #endif  // !OS_IOS
 #endif  // OS_MACOSX
 #endif  // !OS_NACL && !OS_WIN
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
 
 #if defined(OS_WIN)
 #include <iphlpapi.h>
diff --git a/src/net/cert/cert_verify_proc.cc b/src/net/cert/cert_verify_proc.cc
index a2a8a9e..13f0375 100644
--- a/src/net/cert/cert_verify_proc.cc
+++ b/src/net/cert/cert_verify_proc.cc
@@ -33,8 +33,6 @@
 
 #if defined(USE_NSS_CERTS)
 #include "net/cert/cert_verify_proc_nss.h"
-#elif defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-#include "net/cert/cert_verify_proc_openssl.h"
 #elif defined(OS_ANDROID)
 #include "net/cert/cert_verify_proc_android.h"
 #elif defined(OS_IOS)
@@ -504,8 +502,6 @@
 CertVerifyProc* CertVerifyProc::CreateDefault() {
 #if defined(USE_NSS_CERTS)
   return new CertVerifyProcNSS();
-#elif defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-  return new CertVerifyProcOpenSSL();
 #elif defined(OS_ANDROID)
   return new CertVerifyProcAndroid();
 #elif defined(OS_IOS)
@@ -515,7 +511,7 @@
 #elif defined(OS_WIN)
   return new CertVerifyProcWin();
 #else
-  return NULL;
+#error Unsupported platform
 #endif
 }
 
diff --git a/src/net/cert/cert_verify_proc_builtin.cc b/src/net/cert/cert_verify_proc_builtin.cc
index ee85d5e..efba79b 100644
--- a/src/net/cert/cert_verify_proc_builtin.cc
+++ b/src/net/cert/cert_verify_proc_builtin.cc
@@ -103,15 +103,12 @@
   hashes->push_back(sha256);
 }
 
-// Appends the SubjectPublicKeyInfo hashes for all certificates (and trust
-// anchor) in |partial_path| to |*hashes|.
+// Appends the SubjectPublicKeyInfo hashes for all certificates in
+// |partial_path| to |*hashes|.
 void AppendPublicKeyHashes(const CertPathBuilder::ResultPath& partial_path,
                            HashValueVector* hashes) {
   for (const scoped_refptr<ParsedCertificate>& cert : partial_path.path.certs)
     AppendPublicKeyHashes(cert->tbs().spki_tlv, hashes);
-
-  if (partial_path.path.trust_anchor)
-    AppendPublicKeyHashes(partial_path.path.trust_anchor->spki(), hashes);
 }
 
 // Sets the bits on |cert_status| for all the errors present in |errors| (the
@@ -159,12 +156,6 @@
   for (size_t i = 1; i < path.path.certs.size(); ++i)
     intermediates.push_back(CreateOSCertHandle(path.path.certs[i]));
 
-  if (path.path.trust_anchor) {
-    // TODO(eroman): This assumes that TrustAnchor::cert() cannot be null,
-    //               which disagrees with the documentation.
-    intermediates.push_back(CreateOSCertHandle(path.path.trust_anchor->cert()));
-  }
-
   scoped_refptr<X509Certificate> result = X509Certificate::CreateFromHandle(
       target_cert->os_cert_handle(), intermediates);
   // |target_cert| was already successfully parsed, so this should never fail.
@@ -205,10 +196,8 @@
   for (const auto& x509_cert : additional_trust_anchors) {
     scoped_refptr<ParsedCertificate> cert = ParseCertificateFromOSHandle(
         x509_cert->os_cert_handle(), &parsing_errors);
-    if (cert) {
-      ssl_trust_store->AddTrustAnchor(
-          TrustAnchor::CreateFromCertificateNoConstraints(std::move(cert)));
-    }
+    if (cert)
+      ssl_trust_store->AddTrustAnchor(cert);
     // TODO(eroman): Surface parsing errors of additional trust anchor.
   }
 
@@ -236,10 +225,6 @@
                                &signature_policy, verification_time,
                                KeyPurpose::SERVER_AUTH, &result);
 
-  // Allow the path builder to discover intermediates from the trust store.
-  if (ssl_trust_store->GetCertIssuerSource())
-    path_builder.AddCertIssuerSource(ssl_trust_store->GetCertIssuerSource());
-
   // Allow the path builder to discover the explicitly provided intermediates in
   // |input_cert|.
   CertIssuerSourceStatic intermediates;
@@ -264,17 +249,13 @@
   const CertPathBuilder::ResultPath& partial_path =
       *result.paths[result.best_result_index].get();
 
-  if (partial_path.path.trust_anchor) {
+  const ParsedCertificate* trusted_cert = partial_path.path.GetTrustedCert();
+  if (trusted_cert) {
     verify_result->is_issued_by_known_root =
-        ssl_trust_store->IsKnownRoot(partial_path.path.trust_anchor);
+        ssl_trust_store->IsKnownRoot(trusted_cert);
 
     verify_result->is_issued_by_additional_trust_anchor =
-        ssl_trust_store->IsAdditionalTrustAnchor(
-            partial_path.path.trust_anchor);
-  } else {
-    // TODO(eroman): This shouldn't be necessary -- partial_path.errors should
-    // contain an error if it didn't chain to trust anchor.
-    verify_result->cert_status |= CERT_STATUS_AUTHORITY_INVALID;
+        ssl_trust_store->IsAdditionalTrustAnchor(trusted_cert);
   }
 
   verify_result->verified_cert =
diff --git a/src/net/cert/cert_verify_proc_openssl.cc b/src/net/cert/cert_verify_proc_openssl.cc
deleted file mode 100644
index 20c0ad5..0000000
--- a/src/net/cert/cert_verify_proc_openssl.cc
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/cert/cert_verify_proc_openssl.h"
-
-#include <string>
-#include <vector>
-
-#include "base/logging.h"
-#include "base/sha1.h"
-#include "crypto/openssl_util.h"
-#include "crypto/sha2.h"
-#include "net/base/net_errors.h"
-#include "net/cert/asn1_util.h"
-#include "net/cert/cert_status_flags.h"
-#include "net/cert/cert_verifier.h"
-#include "net/cert/cert_verify_result.h"
-#include "net/cert/test_root_certs.h"
-#include "net/cert/x509_certificate.h"
-#include "third_party/boringssl/src/include/openssl/x509v3.h"
-
-namespace net {
-
-namespace {
-
-// Maps X509_STORE_CTX_get_error() return values to our cert status flags.
-CertStatus MapCertErrorToCertStatus(int err) {
-  switch (err) {
-    case X509_V_ERR_SUBJECT_ISSUER_MISMATCH:
-      return CERT_STATUS_COMMON_NAME_INVALID;
-    case X509_V_ERR_CERT_NOT_YET_VALID:
-    case X509_V_ERR_CERT_HAS_EXPIRED:
-    case X509_V_ERR_CRL_NOT_YET_VALID:
-    case X509_V_ERR_CRL_HAS_EXPIRED:
-    case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
-    case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
-    case X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD:
-    case X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD:
-      return CERT_STATUS_DATE_INVALID;
-    case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
-    case X509_V_ERR_UNABLE_TO_GET_CRL:
-    case X509_V_ERR_INVALID_CA:
-    case X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER:
-    case X509_V_ERR_INVALID_NON_CA:
-    case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
-    case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
-    case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
-      return CERT_STATUS_AUTHORITY_INVALID;
-#if 0
-// TODO(bulach): what should we map to these status?
-      return CERT_STATUS_NO_REVOCATION_MECHANISM;
-      return CERT_STATUS_UNABLE_TO_CHECK_REVOCATION;
-#endif
-    case X509_V_ERR_CERT_REVOKED:
-      return CERT_STATUS_REVOKED;
-    // All these status are mapped to CERT_STATUS_INVALID.
-    case X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
-    case X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE:
-    case X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
-    case X509_V_ERR_CERT_SIGNATURE_FAILURE:
-    case X509_V_ERR_CRL_SIGNATURE_FAILURE:
-    case X509_V_ERR_OUT_OF_MEM:
-    case X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
-    case X509_V_ERR_CERT_CHAIN_TOO_LONG:
-    case X509_V_ERR_PATH_LENGTH_EXCEEDED:
-    case X509_V_ERR_INVALID_PURPOSE:
-    case X509_V_ERR_CERT_UNTRUSTED:
-    case X509_V_ERR_CERT_REJECTED:
-    case X509_V_ERR_AKID_SKID_MISMATCH:
-    case X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH:
-    case X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION:
-    case X509_V_ERR_KEYUSAGE_NO_CERTSIGN:
-    case X509_V_ERR_KEYUSAGE_NO_CRL_SIGN:
-    case X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION:
-    case X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED:
-    case X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE:
-    case X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED:
-    case X509_V_ERR_INVALID_EXTENSION:
-    case X509_V_ERR_INVALID_POLICY_EXTENSION:
-    case X509_V_ERR_NO_EXPLICIT_POLICY:
-    case X509_V_ERR_UNNESTED_RESOURCE:
-    case X509_V_ERR_APPLICATION_VERIFICATION:
-      return CERT_STATUS_INVALID;
-    default:
-      NOTREACHED() << "Invalid X509 err " << err;
-      return CERT_STATUS_INVALID;
-  }
-}
-
-struct ShallowX509StackDeleter {
-  void operator()(STACK_OF(X509) * st) const { sk_X509_free(st); }
-};
-
-void GetCertChainInfo(X509_STORE_CTX* store_ctx,
-                      CertVerifyResult* verify_result) {
-  STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(store_ctx);
-  X509* verified_cert = NULL;
-  std::vector<X509*> verified_chain;
-  for (size_t i = 0; i < sk_X509_num(chain); ++i) {
-    X509* cert = sk_X509_value(chain, i);
-    if (i == 0) {
-      verified_cert = cert;
-    } else {
-      verified_chain.push_back(cert);
-    }
-  }
-
-  // Set verify_result->verified_cert and
-  // verify_result->is_issued_by_known_root.
-  if (verified_cert) {
-    scoped_refptr<X509Certificate> verified_cert_with_chain =
-        X509Certificate::CreateFromHandle(verified_cert, verified_chain);
-    if (verified_cert_with_chain)
-      verify_result->verified_cert = std::move(verified_cert_with_chain);
-    else
-      verify_result->cert_status |= CERT_STATUS_INVALID;
-
-    // For OpenSSL builds, only certificates used for unit tests are treated
-    // as not issued by known roots. The only way to determine whether a
-    // certificate is issued by a known root using OpenSSL is to examine
-    // distro-and-release specific hardcoded lists.
-    verify_result->is_issued_by_known_root = true;
-    if (TestRootCerts::HasInstance()) {
-      X509* root = NULL;
-      if (verified_chain.empty()) {
-        root = verified_cert;
-      } else {
-        root = verified_chain.back();
-      }
-      TestRootCerts* root_certs = TestRootCerts::GetInstance();
-      if (root_certs->Contains(root))
-          verify_result->is_issued_by_known_root = false;
-    }
-  }
-}
-
-void AppendPublicKeyHashes(X509_STORE_CTX* store_ctx,
-                           HashValueVector* hashes) {
-  STACK_OF(X509)* chain = X509_STORE_CTX_get_chain(store_ctx);
-  for (size_t i = 0; i < sk_X509_num(chain); ++i) {
-    X509* cert = sk_X509_value(chain, i);
-
-    std::string der_data;
-    if (!X509Certificate::GetDEREncoded(cert, &der_data))
-      continue;
-
-    base::StringPiece der_bytes(der_data);
-    base::StringPiece spki_bytes;
-    if (!asn1::ExtractSPKIFromDERCert(der_bytes, &spki_bytes))
-      continue;
-
-    HashValue sha1(HASH_VALUE_SHA1);
-    base::SHA1HashBytes(reinterpret_cast<const uint8_t*>(spki_bytes.data()),
-                        spki_bytes.size(), sha1.data());
-    hashes->push_back(sha1);
-
-    HashValue sha256(HASH_VALUE_SHA256);
-    crypto::SHA256HashString(spki_bytes, sha256.data(), crypto::kSHA256Length);
-    hashes->push_back(sha256);
-  }
-}
-
-}  // namespace
-
-CertVerifyProcOpenSSL::CertVerifyProcOpenSSL() {}
-
-CertVerifyProcOpenSSL::~CertVerifyProcOpenSSL() {}
-
-bool CertVerifyProcOpenSSL::SupportsAdditionalTrustAnchors() const {
-  return false;
-}
-
-bool CertVerifyProcOpenSSL::SupportsOCSPStapling() const {
-  return false;
-}
-
-int CertVerifyProcOpenSSL::VerifyInternal(
-    X509Certificate* cert,
-    const std::string& hostname,
-    const std::string& ocsp_response,
-    int flags,
-    CRLSet* crl_set,
-    const CertificateList& additional_trust_anchors,
-    CertVerifyResult* verify_result) {
-  crypto::EnsureOpenSSLInit();
-
-  bssl::UniquePtr<X509_STORE_CTX> ctx(X509_STORE_CTX_new());
-
-  std::unique_ptr<STACK_OF(X509), ShallowX509StackDeleter> intermediates(
-      sk_X509_new_null());
-  if (!intermediates.get())
-    return ERR_OUT_OF_MEMORY;
-
-  const X509Certificate::OSCertHandles& os_intermediates =
-      cert->GetIntermediateCertificates();
-  for (X509Certificate::OSCertHandles::const_iterator it =
-       os_intermediates.begin(); it != os_intermediates.end(); ++it) {
-    if (!sk_X509_push(intermediates.get(), *it))
-      return ERR_OUT_OF_MEMORY;
-  }
-  if (X509_STORE_CTX_init(ctx.get(), X509Certificate::cert_store(),
-                          cert->os_cert_handle(), intermediates.get()) != 1) {
-    NOTREACHED();
-    return ERR_FAILED;
-  }
-
-  if (X509_verify_cert(ctx.get()) != 1) {
-    int x509_error = X509_STORE_CTX_get_error(ctx.get());
-    CertStatus cert_status = MapCertErrorToCertStatus(x509_error);
-    LOG(ERROR) << "X509 Verification error "
-        << X509_verify_cert_error_string(x509_error)
-        << " : " << x509_error
-        << " : " << X509_STORE_CTX_get_error_depth(ctx.get())
-        << " : " << cert_status;
-    verify_result->cert_status |= cert_status;
-  }
-
-  GetCertChainInfo(ctx.get(), verify_result);
-  AppendPublicKeyHashes(ctx.get(), &verify_result->public_key_hashes);
-
-  if (IsCertStatusError(verify_result->cert_status))
-    return MapCertStatusToNetError(verify_result->cert_status);
-
-  return OK;
-}
-
-}  // namespace net
diff --git a/src/net/cert/cert_verify_proc_openssl.h b/src/net/cert/cert_verify_proc_openssl.h
deleted file mode 100644
index 5836386..0000000
--- a/src/net/cert/cert_verify_proc_openssl.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_CERT_CERT_VERIFY_PROC_OPENSSL_H_
-#define NET_CERT_CERT_VERIFY_PROC_OPENSSL_H_
-
-#include "net/cert/cert_verify_proc.h"
-
-namespace net {
-
-// Performs certificate path construction and validation using OpenSSL.
-class CertVerifyProcOpenSSL : public CertVerifyProc {
- public:
-  CertVerifyProcOpenSSL();
-
-  bool SupportsAdditionalTrustAnchors() const override;
-  bool SupportsOCSPStapling() const override;
-
- protected:
-  ~CertVerifyProcOpenSSL() override;
-
- private:
-  int VerifyInternal(X509Certificate* cert,
-                     const std::string& hostname,
-                     const std::string& ocsp_response,
-                     int flags,
-                     CRLSet* crl_set,
-                     const CertificateList& additional_trust_anchors,
-                     CertVerifyResult* verify_result) override;
-};
-
-}  // namespace net
-
-#endif  // NET_CERT_CERT_VERIFY_PROC_OPENSSL_H_
diff --git a/src/net/cert/cert_verify_proc_unittest.cc b/src/net/cert/cert_verify_proc_unittest.cc
index a1bde4f..7eafa71 100644
--- a/src/net/cert/cert_verify_proc_unittest.cc
+++ b/src/net/cert/cert_verify_proc_unittest.cc
@@ -112,7 +112,6 @@
 // needs to be known for some of the test expectations.
 enum CertVerifyProcType {
   CERT_VERIFY_PROC_NSS,
-  CERT_VERIFY_PROC_OPENSSL,
   CERT_VERIFY_PROC_ANDROID,
   CERT_VERIFY_PROC_IOS,
   CERT_VERIFY_PROC_MAC,
@@ -126,8 +125,6 @@
 CertVerifyProcType GetDefaultCertVerifyProcType() {
 #if defined(USE_NSS_CERTS)
   return CERT_VERIFY_PROC_NSS;
-#elif defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-  return CERT_VERIFY_PROC_OPENSSL;
 #elif defined(OS_ANDROID)
   return CERT_VERIFY_PROC_ANDROID;
 #elif defined(OS_IOS)
@@ -157,8 +154,6 @@
   switch (params.param) {
     case CERT_VERIFY_PROC_NSS:
       return "CertVerifyProcNSS";
-    case CERT_VERIFY_PROC_OPENSSL:
-      return "CertVerifyProcOpenSSL";
     case CERT_VERIFY_PROC_ANDROID:
       return "CertVerifyProcAndroid";
     case CERT_VERIFY_PROC_IOS:
@@ -1228,8 +1223,7 @@
   }
 
   // TODO(crbug.com/649017): Don't special-case builtin verifier.
-  if (verify_proc_type() == CERT_VERIFY_PROC_OPENSSL ||
-      verify_proc_type() == CERT_VERIFY_PROC_BUILTIN) {
+  if (verify_proc_type() == CERT_VERIFY_PROC_BUILTIN) {
     EXPECT_THAT(error, IsError(ERR_CERT_AUTHORITY_INVALID));
   } else {
     EXPECT_THAT(error, IsError(ERR_CERT_INVALID));
diff --git a/src/net/cert/internal/cert_errors.cc b/src/net/cert/internal/cert_errors.cc
index be4814d..8d38e3c 100644
--- a/src/net/cert/internal/cert_errors.cc
+++ b/src/net/cert/internal/cert_errors.cc
@@ -171,11 +171,8 @@
     if (cert_errors_string.empty())
       continue;
 
-    // Add a header for the CertErrors that describes which certificate they
-    // apply to.
-    //
-    // TODO(eroman): Show the subject for trust anchor (which currently uses the
-    // bucket cert_errors_[certs.size()]).
+    // Add a header that identifies which certificate this CertErrors pertains
+    // to.
     std::string cert_name_debug_str;
     if (i < certs.size() && certs[i]) {
       RDNSequence subject;
diff --git a/src/net/cert/internal/cert_issuer_source_nss.cc b/src/net/cert/internal/cert_issuer_source_nss.cc
deleted file mode 100644
index 24218e8..0000000
--- a/src/net/cert/internal/cert_issuer_source_nss.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/cert/internal/cert_issuer_source_nss.h"
-
-#include <cert.h>
-#include <certdb.h>
-
-#include "crypto/nss_util.h"
-#include "net/cert/internal/cert_errors.h"
-#include "net/cert/internal/parsed_certificate.h"
-#include "net/cert/x509_util.h"
-
-namespace net {
-
-CertIssuerSourceNSS::CertIssuerSourceNSS() = default;
-CertIssuerSourceNSS::~CertIssuerSourceNSS() = default;
-
-void CertIssuerSourceNSS::SyncGetIssuersOf(const ParsedCertificate* cert,
-                                           ParsedCertificateList* issuers) {
-  crypto::EnsureNSSInit();
-
-  SECItem name;
-  // Use the original issuer value instead of the normalized version. NSS does a
-  // less extensive normalization in its Name comparisons, so our normalized
-  // version may not match the unnormalized version.
-  name.len = cert->tbs().issuer_tlv.Length();
-  name.data = const_cast<uint8_t*>(cert->tbs().issuer_tlv.UnsafeData());
-  // |validOnly| in CERT_CreateSubjectCertList controls whether to return only
-  // certs that are valid at |sorttime|. Including expired certs could lead to
-  // more useful error messages in the case where a valid path can't be found,
-  // so request all matches.
-  CERTCertList* found_certs = CERT_CreateSubjectCertList(
-      nullptr /* certList */, CERT_GetDefaultCertDB(), &name,
-      PR_Now() /* sorttime */, PR_FALSE /* validOnly */);
-  if (!found_certs)
-    return;
-
-  for (CERTCertListNode* node = CERT_LIST_HEAD(found_certs);
-       !CERT_LIST_END(node, found_certs); node = CERT_LIST_NEXT(node)) {
-    CertErrors errors;
-    scoped_refptr<ParsedCertificate> issuer_cert = ParsedCertificate::Create(
-        x509_util::CreateCryptoBuffer(node->cert->derCert.data,
-                                      node->cert->derCert.len),
-        {}, &errors);
-    if (!issuer_cert) {
-      // TODO(crbug.com/634443): return errors better.
-      LOG(ERROR) << "Error parsing issuer certificate:\n"
-                 << errors.ToDebugString();
-      continue;
-    }
-
-    issuers->push_back(std::move(issuer_cert));
-  }
-  CERT_DestroyCertList(found_certs);
-}
-
-void CertIssuerSourceNSS::AsyncGetIssuersOf(const ParsedCertificate* cert,
-                                            std::unique_ptr<Request>* out_req) {
-  // CertIssuerSourceNSS never returns asynchronous results.
-  out_req->reset();
-}
-
-}  // namespace net
diff --git a/src/net/cert/internal/cert_issuer_source_nss.h b/src/net/cert/internal/cert_issuer_source_nss.h
deleted file mode 100644
index 1621b3b..0000000
--- a/src/net/cert/internal/cert_issuer_source_nss.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_CERT_INTERNAL_CERT_ISSUER_SOURCE_NSS_H_
-#define NET_CERT_INTERNAL_CERT_ISSUER_SOURCE_NSS_H_
-
-#include "net/base/net_export.h"
-#include "net/cert/internal/cert_issuer_source.h"
-
-namespace net {
-
-// Returns issuers from NSS. Always returns results synchronously.
-// This will return any matches from NSS, possibly including trust anchors,
-// blacklisted/distrusted certs, and temporary/cached certs. In the current
-// implementation, trust is checked in a separate stage of path building, so
-// including trusted certs here doesn't cause any issues. In particular, a trust
-// anchor being returned here indicates the path ending in that trust anchor
-// must already have been tested and failed to verify, and now the pathbuilder
-// is trying to find a different path through that certificate. Including
-// distrusted certs is desirable so that those paths can be built (and then fail
-// to verify), leading to a better error message.
-class NET_EXPORT CertIssuerSourceNSS : public CertIssuerSource {
- public:
-  CertIssuerSourceNSS();
-  ~CertIssuerSourceNSS() override;
-
-  // CertIssuerSource implementation:
-  void SyncGetIssuersOf(const ParsedCertificate* cert,
-                        ParsedCertificateList* issuers) override;
-  void AsyncGetIssuersOf(const ParsedCertificate* cert,
-                         std::unique_ptr<Request>* out_req) override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(CertIssuerSourceNSS);
-};
-
-}  // namespace net
-
-#endif  // NET_CERT_INTERNAL_CERT_ISSUER_SOURCE_NSS_H_
diff --git a/src/net/cert/internal/cert_issuer_source_nss_unittest.cc b/src/net/cert/internal/cert_issuer_source_nss_unittest.cc
deleted file mode 100644
index 1653998..0000000
--- a/src/net/cert/internal/cert_issuer_source_nss_unittest.cc
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/cert/internal/cert_issuer_source_nss.h"
-
-#include <cert.h>
-#include <certdb.h>
-
-#include "base/strings/string_number_conversions.h"
-#include "crypto/scoped_test_nss_db.h"
-#include "net/cert/internal/cert_issuer_source_sync_unittest.h"
-#include "net/cert/scoped_nss_types.h"
-#include "net/cert/x509_certificate.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-
-namespace {
-
-class CertIssuerSourceNSSTestDelegate {
- public:
-  void AddCert(scoped_refptr<ParsedCertificate> cert) {
-    ASSERT_TRUE(test_nssdb_.is_open());
-    std::string nickname = GetUniqueNickname();
-    ScopedCERTCertificate nss_cert(
-        X509Certificate::CreateOSCertHandleFromBytesWithNickname(
-            cert->der_cert().AsStringPiece().data(), cert->der_cert().Length(),
-            nickname.c_str()));
-    ASSERT_TRUE(nss_cert);
-    SECStatus srv =
-        PK11_ImportCert(test_nssdb_.slot(), nss_cert.get(), CK_INVALID_HANDLE,
-                        nickname.c_str(), PR_FALSE /* includeTrust (unused) */);
-    ASSERT_EQ(SECSuccess, srv);
-  }
-
-  CertIssuerSource& source() { return cert_issuer_source_nss_; }
-
- protected:
-  std::string GetUniqueNickname() {
-    return "cert_issuer_source_nss_unittest" +
-           base::UintToString(nickname_counter_++);
-  }
-
-  crypto::ScopedTestNSSDB test_nssdb_;
-  CertIssuerSourceNSS cert_issuer_source_nss_;
-  unsigned int nickname_counter_ = 0;
-};
-
-INSTANTIATE_TYPED_TEST_CASE_P(CertIssuerSourceNSSTest,
-                              CertIssuerSourceSyncTest,
-                              CertIssuerSourceNSSTestDelegate);
-
-// NSS doesn't normalize UTF8String values, so use the not-normalized version of
-// those tests.
-INSTANTIATE_TYPED_TEST_CASE_P(CertIssuerSourceNSSNotNormalizedTest,
-                              CertIssuerSourceSyncNotNormalizedTest,
-                              CertIssuerSourceNSSTestDelegate);
-
-}  // namespace
-
-}  // namespace net
diff --git a/src/net/cert/internal/path_builder.cc b/src/net/cert/internal/path_builder.cc
index 291bcf5..7f4284b 100644
--- a/src/net/cert/internal/path_builder.cc
+++ b/src/net/cert/internal/path_builder.cc
@@ -40,24 +40,36 @@
   return subject_str + "(" + issuer_str + ")";
 }
 
-// This structure contains either a ParsedCertificate or a TrustAnchor. It is
-// used to describe the result of getting a certificate's issuer, which may
-// either be another certificate, or a trust anchor.
-struct CertificateOrTrustAnchor {
-  CertificateOrTrustAnchor() {}
-
-  explicit CertificateOrTrustAnchor(scoped_refptr<ParsedCertificate> cert)
-      : cert(std::move(cert)) {}
-
-  explicit CertificateOrTrustAnchor(scoped_refptr<TrustAnchor> anchor)
-      : anchor(std::move(anchor)) {}
-
-  bool IsTrustAnchor() const { return anchor.get() != nullptr; }
-  bool IsCertificate() const { return cert.get() != nullptr; }
-  bool IsEmpty() const { return !IsTrustAnchor() && !IsCertificate(); }
-
+// This structure describes a certificate and its trust level. Note that |cert|
+// may be null to indicate an "empty" entry.
+struct IssuerEntry {
   scoped_refptr<ParsedCertificate> cert;
-  scoped_refptr<TrustAnchor> anchor;
+  CertificateTrust trust;
+};
+
+// Simple comparator of IssuerEntry that defines the order in which issuers
+// should be explored. It puts trust anchors ahead of unknown or distrusted
+// ones.
+struct IssuerEntryComparator {
+  bool operator()(const IssuerEntry& issuer1, const IssuerEntry& issuer2) {
+    return CertificateTrustToOrder(issuer1.trust) <
+           CertificateTrustToOrder(issuer2.trust);
+  }
+
+  static int CertificateTrustToOrder(const CertificateTrust& trust) {
+    switch (trust.type) {
+      case CertificateTrustType::TRUSTED_ANCHOR:
+      case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+        return 1;
+      case CertificateTrustType::UNSPECIFIED:
+        return 2;
+      case CertificateTrustType::DISTRUSTED:
+        return 4;
+    }
+
+    NOTREACHED();
+    return 5;
+  }
 };
 
 // CertIssuersIter iterates through the intermediates from |cert_issuer_sources|
@@ -72,7 +84,7 @@
 
   // Gets the next candidate issuer, or clears |*out| when all issuers have been
   // exhausted.
-  void GetNextIssuer(CertificateOrTrustAnchor* out);
+  void GetNextIssuer(IssuerEntry* out);
 
   // Returns the |cert| for which issuers are being retrieved.
   const ParsedCertificate* cert() const { return cert_.get(); }
@@ -85,15 +97,14 @@
   // Returns true if |issuers_| contains unconsumed certificates.
   bool HasCurrentIssuer() const { return cur_issuer_ < issuers_.size(); }
 
+  // Sorts the remaining entries in |issuers_| in the preferred order to
+  // explore. Does not change the ordering for indices before cur_issuer_.
+  void SortRemainingIssuers();
+
   scoped_refptr<ParsedCertificate> cert_;
   CertIssuerSources* cert_issuer_sources_;
   const TrustStore* trust_store_;
 
-  // The list of trust anchors that match the issuer name for |cert_|.
-  TrustAnchors anchors_;
-  // The index of the next trust anchor in |anchors_| to return.
-  size_t cur_anchor_ = 0;
-
   // The list of issuers for |cert_|. This is added to incrementally (first
   // synchronous results, then possibly multiple times as asynchronous results
   // arrive.) The issuers may be re-sorted each time new issuers are added, but
@@ -101,9 +112,12 @@
   // results were already returned.
   // Elements should not be removed from |issuers_| once added, since
   // |present_issuers_| will point to data owned by the certs.
-  ParsedCertificateList issuers_;
+  std::vector<IssuerEntry> issuers_;
   // The index of the next cert in |issuers_| to return.
   size_t cur_issuer_ = 0;
+  // Set to true whenever new issuers are appended at the end, to indicate the
+  // ordering needs to be checked.
+  bool issuers_needs_sort_ = false;
 
   // Set of DER-encoded values for the certs in |issuers_|. Used to prevent
   // duplicates. This is based on the full DER of the cert to allow different
@@ -133,36 +147,17 @@
   DVLOG(1) << "CertIssuersIter(" << CertDebugString(cert()) << ") created";
 }
 
-void CertIssuersIter::GetNextIssuer(CertificateOrTrustAnchor* out) {
+void CertIssuersIter::GetNextIssuer(IssuerEntry* out) {
   if (!did_initial_query_) {
     did_initial_query_ = true;
-    trust_store_->FindTrustAnchorsForCert(cert_, &anchors_);
-
     for (auto* cert_issuer_source : *cert_issuer_sources_) {
       ParsedCertificateList new_issuers;
       cert_issuer_source->SyncGetIssuersOf(cert(), &new_issuers);
       AddIssuers(std::move(new_issuers));
     }
-    DVLOG(1) << anchors_.size() << " sync anchors, " << issuers_.size()
-             << " sync issuers";
-    // TODO(mattm): sort by notbefore, etc (eg if cert issuer matches a trust
-    // anchor subject (or is a trust anchor), that should be sorted higher too.
-    // See big list of possible sorting hints in RFC 4158.)
-    // (Update PathBuilderKeyRolloverTest.TestRolloverBothRootsTrusted once that
-    // is done)
   }
 
-  // Return possible trust anchors first.
-  if (cur_anchor_ < anchors_.size()) {
-    DVLOG(1) << "CertIssuersIter(" << CertDebugString(cert())
-             << "): returning anchor " << cur_anchor_ << " of "
-             << anchors_.size();
-    // Still have anchors that haven't been returned yet, return one of them.
-    *out = CertificateOrTrustAnchor(anchors_[cur_anchor_++]);
-    return;
-  }
-
-  // If there aren't any issuers left, block until async results are ready.
+  // If there aren't any issuers, block until async results are ready.
   if (!HasCurrentIssuer()) {
     if (!did_async_issuer_query_) {
       // Now issue request(s) for async ones (AIA, etc).
@@ -186,20 +181,22 @@
   }
 
   if (HasCurrentIssuer()) {
+    SortRemainingIssuers();
+
     DVLOG(1) << "CertIssuersIter(" << CertDebugString(cert())
              << "): returning issuer " << cur_issuer_ << " of "
              << issuers_.size();
-    // Still have issuers that haven't been returned yet, return one of them.
-    // A reference to the returned issuer is retained, since |present_issuers_|
-    // points to data owned by it.
-    *out = CertificateOrTrustAnchor(issuers_[cur_issuer_++]);
+    // Still have issuers that haven't been returned yet, return the highest
+    // priority one (head of remaining list). A reference to the returned issuer
+    // is retained, since |present_issuers_| points to data owned by it.
+    *out = issuers_[cur_issuer_++];
     return;
   }
 
   DVLOG(1) << "CertIssuersIter(" << CertDebugString(cert())
            << ") Reached the end of all available issuers.";
   // Reached the end of all available issuers.
-  *out = CertificateOrTrustAnchor();
+  *out = IssuerEntry();
 }
 
 void CertIssuersIter::AddIssuers(ParsedCertificateList new_issuers) {
@@ -208,7 +205,14 @@
         present_issuers_.end())
       continue;
     present_issuers_.insert(issuer->der_cert().AsStringPiece());
-    issuers_.push_back(std::move(issuer));
+
+    // Look up the trust for this issuer.
+    IssuerEntry entry;
+    entry.cert = std::move(issuer);
+    trust_store_->GetTrust(entry.cert, &entry.trust);
+
+    issuers_.push_back(std::move(entry));
+    issuers_needs_sort_ = true;
   }
 }
 
@@ -227,6 +231,21 @@
   }
 }
 
+void CertIssuersIter::SortRemainingIssuers() {
+  // TODO(mattm): sort by notbefore, etc (eg if cert issuer matches a trust
+  // anchor subject (or is a trust anchor), that should be sorted higher too.
+  // See big list of possible sorting hints in RFC 4158.)
+  // (Update PathBuilderKeyRolloverTest.TestRolloverBothRootsTrusted once that
+  // is done)
+  if (!issuers_needs_sort_)
+    return;
+
+  std::stable_sort(issuers_.begin() + cur_issuer_, issuers_.end(),
+                   IssuerEntryComparator());
+
+  issuers_needs_sort_ = false;
+}
+
 // CertIssuerIterPath tracks which certs are present in the path and prevents
 // paths from being built which repeat any certs (including different versions
 // of the same cert, based on Subject+SubjectAltName+SPKI).
@@ -305,7 +324,7 @@
 CertPath::~CertPath() = default;
 
 void CertPath::Clear() {
-  trust_anchor = nullptr;
+  last_cert_trust = CertificateTrust::ForUnspecified();
   certs.clear();
 }
 
@@ -313,6 +332,23 @@
   return certs.empty();
 }
 
+const ParsedCertificate* CertPath::GetTrustedCert() const {
+  if (certs.empty())
+    return nullptr;
+
+  switch (last_cert_trust.type) {
+    case CertificateTrustType::TRUSTED_ANCHOR:
+    case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+      return certs.back().get();
+    case CertificateTrustType::UNSPECIFIED:
+    case CertificateTrustType::DISTRUSTED:
+      return nullptr;
+  }
+
+  NOTREACHED();
+  return nullptr;
+}
+
 // CertPathIter generates possible paths from |cert| to a trust anchor in
 // |trust_store|, using intermediates from the |cert_issuer_source| objects if
 // necessary.
@@ -345,7 +381,7 @@
 
   // Stores the next candidate issuer, until it is used during the
   // STATE_GET_NEXT_ISSUER_COMPLETE step.
-  CertificateOrTrustAnchor next_issuer_;
+  IssuerEntry next_issuer_;
   // The current path being explored, made up of CertIssuerIters. Each node
   // keeps track of the state of searching for issuers of that cert, so that
   // when backtracking it can resume the search where it left off.
@@ -365,9 +401,11 @@
 
 CertPathIter::CertPathIter(scoped_refptr<ParsedCertificate> cert,
                            const TrustStore* trust_store)
-    : next_issuer_(std::move(cert)),
-      trust_store_(trust_store),
-      next_state_(STATE_GET_NEXT_ISSUER_COMPLETE) {}
+    : trust_store_(trust_store), next_state_(STATE_GET_NEXT_ISSUER_COMPLETE) {
+  // Initialize |next_issuer_| to the target certificate.
+  next_issuer_.cert = std::move(cert);
+  trust_store_->GetTrust(next_issuer_.cert, &next_issuer_.trust);
+}
 
 void CertPathIter::AddCertIssuerSource(CertIssuerSource* cert_issuer_source) {
   cert_issuer_sources_.push_back(cert_issuer_source);
@@ -406,42 +444,57 @@
 }
 
 void CertPathIter::DoGetNextIssuer() {
-  next_state_ = STATE_GET_NEXT_ISSUER_COMPLETE;
-  cur_path_.back()->GetNextIssuer(&next_issuer_);
+  if (cur_path_.Empty()) {
+    // Exhausted all paths.
+    next_state_ = STATE_NONE;
+  } else {
+    next_state_ = STATE_GET_NEXT_ISSUER_COMPLETE;
+    cur_path_.back()->GetNextIssuer(&next_issuer_);
+  }
 }
 
 void CertPathIter::DoGetNextIssuerComplete() {
-  // If the issuer is a trust anchor signal readiness.
-  if (next_issuer_.IsTrustAnchor()) {
-    DVLOG(1) << "CertPathIter got anchor("
-             << CertDebugString(next_issuer_.anchor->cert().get());
-    next_state_ = STATE_RETURN_A_PATH;
-    cur_path_.CopyPath(&out_path_->certs);
-    out_path_->trust_anchor = std::move(next_issuer_.anchor);
-    next_issuer_ = CertificateOrTrustAnchor();
-    return;
-  }
-
-  if (next_issuer_.IsCertificate()) {
-    // Skip this cert if it is already in the chain.
-    if (cur_path_.IsPresent(next_issuer_.cert.get())) {
-      next_state_ = STATE_GET_NEXT_ISSUER;
-      return;
-    }
-
-    cur_path_.Append(base::MakeUnique<CertIssuersIter>(
-        std::move(next_issuer_.cert), &cert_issuer_sources_, trust_store_));
-    next_issuer_ = CertificateOrTrustAnchor();
-    DVLOG(1) << "CertPathIter cur_path_ = " << cur_path_.PathDebugString();
-    // Continue descending the tree.
-    next_state_ = STATE_GET_NEXT_ISSUER;
-  } else {
+  if (!next_issuer_.cert) {
     // TODO(mattm): should also include such paths in CertPathBuilder::Result,
     // maybe with a flag to enable it. Or use a visitor pattern so the caller
     // can decide what to do with any failed paths.
     // No more issuers for current chain, go back up and see if there are any
     // more for the previous cert.
     next_state_ = STATE_BACKTRACK;
+    return;
+  }
+
+  switch (next_issuer_.trust.type) {
+    // If the trust for this issuer is "known" (either becuase it is distrusted,
+    // or because it is trusted) then stop building and return the path.
+    case CertificateTrustType::DISTRUSTED:
+    case CertificateTrustType::TRUSTED_ANCHOR:
+    case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS: {
+      // If the issuer has a known trust level, can stop building the path.
+      DVLOG(1) << "CertPathIter got anchor: "
+               << CertDebugString(next_issuer_.cert.get());
+      next_state_ = STATE_RETURN_A_PATH;
+      cur_path_.CopyPath(&out_path_->certs);
+      out_path_->certs.push_back(std::move(next_issuer_.cert));
+      out_path_->last_cert_trust = next_issuer_.trust;
+      next_issuer_ = IssuerEntry();
+      break;
+    }
+    case CertificateTrustType::UNSPECIFIED: {
+      // Skip this cert if it is already in the chain.
+      if (cur_path_.IsPresent(next_issuer_.cert.get())) {
+        next_state_ = STATE_GET_NEXT_ISSUER;
+        break;
+      }
+
+      cur_path_.Append(base::MakeUnique<CertIssuersIter>(
+          std::move(next_issuer_.cert), &cert_issuer_sources_, trust_store_));
+      next_issuer_ = IssuerEntry();
+      DVLOG(1) << "CertPathIter cur_path_ = " << cur_path_.PathDebugString();
+      // Continue descending the tree.
+      next_state_ = STATE_GET_NEXT_ISSUER;
+      break;
+    }
   }
 }
 
@@ -461,8 +514,7 @@
 CertPathBuilder::ResultPath::~ResultPath() = default;
 
 bool CertPathBuilder::ResultPath::IsValid() const {
-  return !path.certs.empty() && path.trust_anchor &&
-         !errors.ContainsHighSeverityErrors();
+  return path.GetTrustedCert() && !errors.ContainsHighSeverityErrors();
 }
 
 CertPathBuilder::Result::Result() = default;
@@ -488,7 +540,7 @@
 }
 
 CertPathBuilder::CertPathBuilder(scoped_refptr<ParsedCertificate> cert,
-                                 const TrustStore* trust_store,
+                                 TrustStore* trust_store,
                                  const SignaturePolicy* signature_policy,
                                  const der::GeneralizedTime& time,
                                  KeyPurpose key_purpose,
@@ -498,7 +550,10 @@
       time_(time),
       key_purpose_(key_purpose),
       next_state_(STATE_NONE),
-      out_result_(result) {}
+      out_result_(result) {
+  // The TrustStore also implements the CertIssuerSource interface.
+  AddCertIssuerSource(trust_store);
+}
 
 CertPathBuilder::~CertPathBuilder() {}
 
@@ -543,13 +598,15 @@
 
   // Verify the entire certificate chain.
   auto result_path = base::MakeUnique<ResultPath>();
-  bool verify_result = VerifyCertificateChain(
-      next_path_.certs, next_path_.trust_anchor.get(), signature_policy_, time_,
-      key_purpose_, &result_path->errors);
+  VerifyCertificateChain(next_path_.certs, next_path_.last_cert_trust,
+                         signature_policy_, time_, key_purpose_,
+                         &result_path->errors);
+  bool verify_result = !result_path->errors.ContainsHighSeverityErrors();
+
   DVLOG(1) << "CertPathBuilder VerifyCertificateChain result = "
-           << verify_result;
+           << verify_result << "\n"
+           << result_path->errors.ToDebugString(next_path_.certs);
   result_path->path = next_path_;
-  DCHECK_EQ(verify_result, !result_path->errors.ContainsHighSeverityErrors());
   AddResultPath(std::move(result_path));
 
   if (verify_result) {
diff --git a/src/net/cert/internal/path_builder.h b/src/net/cert/internal/path_builder.h
index 361e745..04a571a 100644
--- a/src/net/cert/internal/path_builder.h
+++ b/src/net/cert/internal/path_builder.h
@@ -32,17 +32,18 @@
 // By convention:
 //   certs[0] is the target certificate
 //   certs[i] was issued by certs[i+1]
-//   certs.back() was issued by trust_anchor
+//   certs.back() is the root certificate.
 //
-// TODO(eroman): The current code doesn't allow for the target certificate to
-//               be the trust anchor. Should it?
+// Note that the final certificate may or may not be a trust achor -- inspect
+// |last_cert_trust| to determine it (or use GetTrustedCert())
 struct NET_EXPORT CertPath {
   CertPath();
   ~CertPath();
 
-  scoped_refptr<TrustAnchor> trust_anchor;
+  // Contains information on whether certs.back() is trusted.
+  CertificateTrust last_cert_trust;
 
-  // Path in the forward direction (path[0] is the target cert).
+  // Path in the forward direction (see class description).
   ParsedCertificateList certs;
 
   // Resets the path to empty path (same as if default constructed).
@@ -50,6 +51,10 @@
 
   // TODO(eroman): Can we remove this? Unclear on how this relates to validity.
   bool IsEmpty() const;
+
+  // Returns the chain's root certificate or nullptr if the chain doesn't chain
+  // to a trust anchor.
+  const ParsedCertificate* GetTrustedCert() const;
 };
 
 // Checks whether a certificate is trusted by building candidate paths to trust
@@ -116,7 +121,7 @@
   // The caller must keep |trust_store|, |signature_policy|, and |*result| valid
   // for the lifetime of the CertPathBuilder.
   CertPathBuilder(scoped_refptr<ParsedCertificate> cert,
-                  const TrustStore* trust_store,
+                  TrustStore* trust_store,
                   const SignaturePolicy* signature_policy,
                   const der::GeneralizedTime& time,
                   KeyPurpose key_purpose,
diff --git a/src/net/cert/internal/path_builder_pkits_unittest.cc b/src/net/cert/internal/path_builder_pkits_unittest.cc
index a7b02e3..c985020 100644
--- a/src/net/cert/internal/path_builder_pkits_unittest.cc
+++ b/src/net/cert/internal/path_builder_pkits_unittest.cc
@@ -74,9 +74,7 @@
     // TODO(mattm): test with all possible trust anchors in the trust store?
     TrustStoreInMemory trust_store;
 
-    scoped_refptr<TrustAnchor> trust_anchor =
-        TrustAnchor::CreateFromCertificateNoConstraints(certs[0]);
-    trust_store.AddTrustAnchor(std::move(trust_anchor));
+    trust_store.AddTrustAnchor(certs[0]);
 
     // TODO(mattm): test with other irrelevant certs in cert_issuer_sources?
     CertIssuerSourceStatic cert_issuer_source;
diff --git a/src/net/cert/internal/path_builder_unittest.cc b/src/net/cert/internal/path_builder_unittest.cc
index 44471fa..2bfae78 100644
--- a/src/net/cert/internal/path_builder_unittest.cc
+++ b/src/net/cert/internal/path_builder_unittest.cc
@@ -137,26 +137,17 @@
   der::GeneralizedTime time_ = {2017, 3, 1, 0, 0, 0};
 };
 
-void AddTrustedCertificate(scoped_refptr<ParsedCertificate> cert,
-                           TrustStoreInMemory* trust_store) {
-  ASSERT_TRUE(cert.get());
-  scoped_refptr<TrustAnchor> anchor =
-      TrustAnchor::CreateFromCertificateNoConstraints(std::move(cert));
-  ASSERT_TRUE(anchor.get());
-  trust_store->AddTrustAnchor(std::move(anchor));
-}
-
-// If the target cert is has the same name and key as a trust anchor, however
-// is signed but a different trust anchor. This should successfully build a
-// path, however the trust anchor will be the signer of this cert.
+// Tests when the target cert has the same name and key as a trust anchor,
+// however is signed by a different trust anchor. This should successfully build
+// a path, however the trust anchor will be the signer of this cert.
 //
 // (This test is very similar to TestEndEntityHasSameNameAndSpkiAsTrustAnchor
 // but with different data; also in this test the target cert itself is in the
 // trust store).
 TEST_F(PathBuilderMultiRootTest, TargetHasNameAndSpkiOfTrustAnchor) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(a_by_b_, &trust_store);
-  AddTrustedCertificate(b_by_f_, &trust_store);
+  trust_store.AddTrustAnchor(a_by_b_);
+  trust_store.AddTrustAnchor(b_by_f_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(a_by_b_, &trust_store, &signature_policy_, time_,
@@ -164,11 +155,16 @@
 
   path_builder.Run();
 
-  ASSERT_TRUE(result.HasValidPath());
-  const auto& path = result.GetBestValidPath()->path;
-  ASSERT_EQ(1U, path.certs.size());
-  EXPECT_EQ(a_by_b_, path.certs[0]);
-  EXPECT_EQ(b_by_f_, path.trust_anchor->cert());
+  ASSERT_FALSE(result.HasValidPath());
+
+  // TODO(eroman): This probably should have succeeded and found the path below.
+  // It fails right now because path building stops on trust anchors (and the
+  // end entity is added as a trust anchor).
+  //
+  // const auto& path = result.GetBestValidPath()->path;
+  // ASSERT_EQ(2U, path.certs.size());
+  // EXPECT_EQ(a_by_b_, path.certs[0]);
+  // EXPECT_EQ(b_by_f_, path.certs[1]);
 }
 
 // If the target cert is has the same name and key as a trust anchor, however
@@ -176,7 +172,7 @@
 // is trusted, the certificate contents cannot be verified.
 TEST_F(PathBuilderMultiRootTest, TargetWithSameNameAsTrustAnchorFails) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(a_by_b_, &trust_store);
+  trust_store.AddTrustAnchor(a_by_b_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(a_by_b_, &trust_store, &signature_policy_, time_,
@@ -188,16 +184,15 @@
 }
 
 // Test a failed path building when the trust anchor is provided as a
-// supplemental certificate. Conceptually the following paths can be built:
+// supplemental certificate. Conceptually the following paths could be built:
 //
 //   B(C) <- C(D) <- [Trust anchor D]
 //   B(C) <- C(D) <- D(D) <- [Trust anchor D]
 //
-// The second one is extraneous given the shorter one, however path building
-// will enumerate it if the shorter one failed validation.
+// However the second one is extraneous given the shorter path.
 TEST_F(PathBuilderMultiRootTest, SelfSignedTrustAnchorSupplementalCert) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(d_by_d_, &trust_store);
+  trust_store.AddTrustAnchor(d_by_d_);
 
   // The (extraneous) trust anchor D(D) is supplied as a certificate, as is the
   // intermediate needed for path building C(D).
@@ -216,30 +211,22 @@
   path_builder.Run();
 
   EXPECT_FALSE(result.HasValidPath());
-  ASSERT_EQ(2U, result.paths.size());
+  ASSERT_EQ(1U, result.paths.size());
 
   EXPECT_FALSE(result.paths[0]->IsValid());
   const auto& path0 = result.paths[0]->path;
-  ASSERT_EQ(2U, path0.certs.size());
+  ASSERT_EQ(3U, path0.certs.size());
   EXPECT_EQ(b_by_c_, path0.certs[0]);
   EXPECT_EQ(c_by_d_, path0.certs[1]);
-  EXPECT_EQ(d_by_d_, path0.trust_anchor->cert());
-
-  const auto& path1 = result.paths[1]->path;
-  ASSERT_EQ(3U, path1.certs.size());
-  EXPECT_EQ(b_by_c_, path1.certs[0]);
-  EXPECT_EQ(c_by_d_, path1.certs[1]);
-  EXPECT_EQ(d_by_d_, path1.certs[2]);
-  EXPECT_EQ(d_by_d_, path1.trust_anchor->cert());
+  EXPECT_EQ(d_by_d_, path0.certs[2]);
 }
 
-// If the target cert is a self-signed cert whose key is a trust anchor, it
-// should verify.
+// Test verifying a certificate that is a trust anchor.
 TEST_F(PathBuilderMultiRootTest, TargetIsSelfSignedTrustAnchor) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(e_by_e_, &trust_store);
+  trust_store.AddTrustAnchor(e_by_e_);
   // This is not necessary for the test, just an extra...
-  AddTrustedCertificate(f_by_e_, &trust_store);
+  trust_store.AddTrustAnchor(f_by_e_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(e_by_e_, &trust_store, &signature_policy_, time_,
@@ -247,18 +234,23 @@
 
   path_builder.Run();
 
-  ASSERT_TRUE(result.HasValidPath());
-  const auto& path = result.GetBestValidPath()->path;
-  ASSERT_EQ(1U, path.certs.size());
-  EXPECT_EQ(e_by_e_, path.certs[0]);
-  EXPECT_EQ(e_by_e_, path.trust_anchor->cert());
+  ASSERT_FALSE(result.HasValidPath());
+
+  // TODO(eroman): This test currently fails because path building stops
+  // searching once it identifies a certificate as a trust anchor. In this case
+  // the target is a trust anchor, however could be verified using the
+  // self-signedness (or even the cert itself).
+  // const auto& path = result.GetBestValidPath()->path;
+  // ASSERT_EQ(2U, path.certs.size());
+  // EXPECT_EQ(e_by_e_, path.certs[0]);
+  // EXPECT_EQ(e_by_e_, path.certs[1]);
 }
 
 // If the target cert is directly issued by a trust anchor, it should verify
 // without any intermediate certs being provided.
 TEST_F(PathBuilderMultiRootTest, TargetDirectlySignedByTrustAnchor) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(b_by_f_, &trust_store);
+  trust_store.AddTrustAnchor(b_by_f_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(a_by_b_, &trust_store, &signature_policy_, time_,
@@ -268,16 +260,16 @@
 
   ASSERT_TRUE(result.HasValidPath());
   const auto& path = result.GetBestValidPath()->path;
-  ASSERT_EQ(1U, path.certs.size());
+  ASSERT_EQ(2U, path.certs.size());
   EXPECT_EQ(a_by_b_, path.certs[0]);
-  EXPECT_EQ(b_by_f_, path.trust_anchor->cert());
+  EXPECT_EQ(b_by_f_, path.certs[1]);
 }
 
 // Test that async cert queries are not made if the path can be successfully
 // built with synchronously available certs.
 TEST_F(PathBuilderMultiRootTest, TriesSyncFirst) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(e_by_e_, &trust_store);
+  trust_store.AddTrustAnchor(e_by_e_);
 
   CertIssuerSourceStatic sync_certs;
   sync_certs.AddCert(b_by_f_);
@@ -303,7 +295,7 @@
 // simultaneously.
 TEST_F(PathBuilderMultiRootTest, TestAsyncSimultaneous) {
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(e_by_e_, &trust_store);
+  trust_store.AddTrustAnchor(e_by_e_);
 
   CertIssuerSourceStatic sync_certs;
   sync_certs.AddCert(b_by_c_);
@@ -334,8 +326,8 @@
 TEST_F(PathBuilderMultiRootTest, TestLongChain) {
   // Both D(D) and C(D) are trusted roots.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(d_by_d_, &trust_store);
-  AddTrustedCertificate(c_by_d_, &trust_store);
+  trust_store.AddTrustAnchor(d_by_d_);
+  trust_store.AddTrustAnchor(c_by_d_);
 
   // Certs B(C), and C(D) are all supplied.
   CertIssuerSourceStatic sync_certs;
@@ -353,7 +345,7 @@
 
   // The result path should be A(B) <- B(C) <- C(D)
   // not the longer but also valid A(B) <- B(C) <- C(D) <- D(D)
-  EXPECT_EQ(2U, result.GetBestValidPath()->path.certs.size());
+  EXPECT_EQ(3U, result.GetBestValidPath()->path.certs.size());
 }
 
 // Test that PathBuilder will backtrack and try a different path if the first
@@ -361,7 +353,7 @@
 TEST_F(PathBuilderMultiRootTest, TestBacktracking) {
   // Only D(D) is a trusted root.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(d_by_d_, &trust_store);
+  trust_store.AddTrustAnchor(d_by_d_);
 
   // Certs B(F) and F(E) are supplied synchronously, thus the path
   // A(B) <- B(F) <- F(E) should be built first, though it won't verify.
@@ -387,11 +379,11 @@
 
   // The result path should be A(B) <- B(C) <- C(D) <- D(D)
   const auto& path = result.GetBestValidPath()->path;
-  ASSERT_EQ(3U, path.certs.size());
+  ASSERT_EQ(4U, path.certs.size());
   EXPECT_EQ(a_by_b_, path.certs[0]);
   EXPECT_EQ(b_by_c_, path.certs[1]);
   EXPECT_EQ(c_by_d_, path.certs[2]);
-  EXPECT_EQ(d_by_d_, path.trust_anchor->cert());
+  EXPECT_EQ(d_by_d_, path.certs[3]);
 }
 
 // Test that whichever order CertIssuerSource returns the issuers, the path
@@ -399,7 +391,7 @@
 TEST_F(PathBuilderMultiRootTest, TestCertIssuerOrdering) {
   // Only D(D) is a trusted root.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(d_by_d_, &trust_store);
+  trust_store.AddTrustAnchor(d_by_d_);
 
   for (bool reverse_order : {false, true}) {
     SCOPED_TRACE(reverse_order);
@@ -425,11 +417,11 @@
 
     // The result path should be A(B) <- B(C) <- C(D) <- D(D)
     const auto& path = result.GetBestValidPath()->path;
-    ASSERT_EQ(3U, path.certs.size());
+    ASSERT_EQ(4U, path.certs.size());
     EXPECT_EQ(a_by_b_, path.certs[0]);
     EXPECT_EQ(b_by_c_, path.certs[1]);
     EXPECT_EQ(c_by_d_, path.certs[2]);
-    EXPECT_EQ(d_by_d_, path.trust_anchor->cert());
+    EXPECT_EQ(d_by_d_, path.certs[3]);
   }
 }
 
@@ -442,25 +434,25 @@
 
     VerifyCertChainTest test;
     ReadVerifyCertChainTestFromFile(
-        "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
+        "net/data/verify_certificate_chain_unittest/key-rollover/oldchain.test",
         &test);
     path = test.chain;
-    oldroot_ = test.trust_anchor;
-    time_ = test.time;
-
-    ASSERT_EQ(2U, path.size());
+    ASSERT_EQ(3U, path.size());
     target_ = path[0];
     oldintermediate_ = path[1];
+    oldroot_ = path[2];
+    time_ = test.time;
+
     ASSERT_TRUE(target_);
     ASSERT_TRUE(oldintermediate_);
 
     ReadVerifyCertChainTestFromFile(
         "net/data/verify_certificate_chain_unittest/"
-        "key-rollover-longrolloverchain.pem",
+        "key-rollover/longrolloverchain.test",
         &test);
     path = test.chain;
 
-    ASSERT_EQ(4U, path.size());
+    ASSERT_EQ(5U, path.size());
     newintermediate_ = path[1];
     newroot_ = path[2];
     newrootrollover_ = path[3];
@@ -482,7 +474,7 @@
   scoped_refptr<ParsedCertificate> target_;
   scoped_refptr<ParsedCertificate> oldintermediate_;
   scoped_refptr<ParsedCertificate> newintermediate_;
-  scoped_refptr<TrustAnchor> oldroot_;
+  scoped_refptr<ParsedCertificate> oldroot_;
   scoped_refptr<ParsedCertificate> newroot_;
   scoped_refptr<ParsedCertificate> newrootrollover_;
 
@@ -517,10 +509,10 @@
   ASSERT_EQ(2U, result.paths.size());
   const auto& path0 = result.paths[0]->path;
   EXPECT_FALSE(result.paths[0]->IsValid());
-  ASSERT_EQ(2U, path0.certs.size());
+  ASSERT_EQ(3U, path0.certs.size());
   EXPECT_EQ(target_, path0.certs[0]);
   EXPECT_EQ(newintermediate_, path0.certs[1]);
-  EXPECT_EQ(oldroot_, path0.trust_anchor);
+  EXPECT_EQ(oldroot_, path0.certs[2]);
 
   // Path builder will next attempt:
   // target <- newintermediate <- newrootrollover <- oldroot
@@ -528,11 +520,11 @@
   const auto& path1 = result.paths[1]->path;
   EXPECT_EQ(1U, result.best_result_index);
   EXPECT_TRUE(result.paths[1]->IsValid());
-  ASSERT_EQ(3U, path1.certs.size());
+  ASSERT_EQ(4U, path1.certs.size());
   EXPECT_EQ(target_, path1.certs[0]);
   EXPECT_EQ(newintermediate_, path1.certs[1]);
   EXPECT_EQ(newrootrollover_, path1.certs[2]);
-  EXPECT_EQ(oldroot_, path1.trust_anchor);
+  EXPECT_EQ(oldroot_, path1.certs[3]);
 }
 
 // Tests that if both old and new roots are trusted it can build a path through
@@ -543,7 +535,7 @@
   // Both oldroot and newroot are trusted.
   TrustStoreInMemory trust_store;
   trust_store.AddTrustAnchor(oldroot_);
-  AddTrustedCertificate(newroot_, &trust_store);
+  trust_store.AddTrustAnchor(newroot_);
 
   // Both old and new intermediates + rollover cert are provided.
   CertIssuerSourceStatic sync_certs;
@@ -567,16 +559,16 @@
   ASSERT_EQ(1U, result.paths.size());
   const auto& path = result.paths[0]->path;
   EXPECT_TRUE(result.paths[0]->IsValid());
-  ASSERT_EQ(2U, path.certs.size());
+  ASSERT_EQ(3U, path.certs.size());
   EXPECT_EQ(target_, path.certs[0]);
   if (path.certs[1] != newintermediate_) {
     DVLOG(1) << "USED OLD";
     EXPECT_EQ(oldintermediate_, path.certs[1]);
-    EXPECT_EQ(oldroot_, path.trust_anchor);
+    EXPECT_EQ(oldroot_, path.certs[2]);
   } else {
     DVLOG(1) << "USED NEW";
     EXPECT_EQ(newintermediate_, path.certs[1]);
-    EXPECT_EQ(newroot_, path.trust_anchor->cert());
+    EXPECT_EQ(newroot_, path.certs[2]);
   }
 }
 
@@ -584,8 +576,7 @@
 // sources, path building should fail at that point.
 TEST_F(PathBuilderKeyRolloverTest, TestAnchorsNoMatchAndNoIssuerSources) {
   TrustStoreInMemory trust_store;
-  trust_store.AddTrustAnchor(
-      TrustAnchor::CreateFromCertificateNoConstraints(newroot_));
+  trust_store.AddTrustAnchor(newroot_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(target_, &trust_store, &signature_policy_, time_,
@@ -610,8 +601,7 @@
   // Add two trust anchors (newroot_ and oldroot_). Path building will attempt
   // them in this same order, as trust_store1 was added to
   // trust_store_collection first.
-  trust_store1.AddTrustAnchor(
-      TrustAnchor::CreateFromCertificateNoConstraints(newroot_));
+  trust_store1.AddTrustAnchor(newroot_);
   trust_store2.AddTrustAnchor(oldroot_);
 
   // Only oldintermediate is supplied, so the path with newroot should fail,
@@ -635,10 +625,10 @@
     // but it will fail since oldintermediate is signed by oldroot.
     EXPECT_FALSE(result.paths[0]->IsValid());
     const auto& path = result.paths[0]->path;
-    ASSERT_EQ(2U, path.certs.size());
+    ASSERT_EQ(3U, path.certs.size());
     EXPECT_EQ(target_, path.certs[0]);
     EXPECT_EQ(oldintermediate_, path.certs[1]);
-    EXPECT_EQ(newroot_, path.trust_anchor->cert());
+    EXPECT_EQ(newroot_, path.certs[2]);
   }
 
   {
@@ -647,10 +637,10 @@
     // which should succeed.
     EXPECT_TRUE(result.paths[result.best_result_index]->IsValid());
     const auto& path = result.paths[result.best_result_index]->path;
-    ASSERT_EQ(2U, path.certs.size());
+    ASSERT_EQ(3U, path.certs.size());
     EXPECT_EQ(target_, path.certs[0]);
     EXPECT_EQ(oldintermediate_, path.certs[1]);
-    EXPECT_EQ(oldroot_, path.trust_anchor);
+    EXPECT_EQ(oldroot_, path.certs[2]);
   }
 }
 
@@ -685,21 +675,21 @@
   // but it will fail since newintermediate is signed by newroot.
   EXPECT_FALSE(result.paths[0]->IsValid());
   const auto& path0 = result.paths[0]->path;
-  ASSERT_EQ(2U, path0.certs.size());
+  ASSERT_EQ(3U, path0.certs.size());
   EXPECT_EQ(target_, path0.certs[0]);
   EXPECT_EQ(newintermediate_, path0.certs[1]);
-  EXPECT_EQ(oldroot_, path0.trust_anchor);
+  EXPECT_EQ(oldroot_, path0.certs[2]);
 
   // Path builder will next attempt:
   // target <- newintermediate <- newroot <- oldroot
   // but it will fail since newroot is self-signed.
   EXPECT_FALSE(result.paths[1]->IsValid());
   const auto& path1 = result.paths[1]->path;
-  ASSERT_EQ(3U, path1.certs.size());
+  ASSERT_EQ(4U, path1.certs.size());
   EXPECT_EQ(target_, path1.certs[0]);
   EXPECT_EQ(newintermediate_, path1.certs[1]);
   EXPECT_EQ(newroot_, path1.certs[2]);
-  EXPECT_EQ(oldroot_, path1.trust_anchor);
+  EXPECT_EQ(oldroot_, path1.certs[3]);
 
   // Path builder will skip:
   // target <- newintermediate <- newroot <- newrootrollover <- ...
@@ -710,11 +700,11 @@
   EXPECT_EQ(2U, result.best_result_index);
   EXPECT_TRUE(result.paths[2]->IsValid());
   const auto& path2 = result.paths[2]->path;
-  ASSERT_EQ(3U, path2.certs.size());
+  ASSERT_EQ(4U, path2.certs.size());
   EXPECT_EQ(target_, path2.certs[0]);
   EXPECT_EQ(newintermediate_, path2.certs[1]);
   EXPECT_EQ(newrootrollover_, path2.certs[2]);
-  EXPECT_EQ(oldroot_, path2.trust_anchor);
+  EXPECT_EQ(oldroot_, path2.certs[3]);
 }
 
 // If the target cert is a trust anchor, however is not itself *signed* by a
@@ -724,7 +714,7 @@
 TEST_F(PathBuilderKeyRolloverTest, TestEndEntityIsTrustRoot) {
   // Trust newintermediate.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(newintermediate_, &trust_store);
+  trust_store.AddTrustAnchor(newintermediate_);
 
   CertPathBuilder::Result result;
   // Newintermediate is also the target cert.
@@ -770,7 +760,7 @@
        TestEndEntityHasSameNameAndSpkiAsTrustAnchor) {
   // Trust newrootrollover.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(newrootrollover_, &trust_store);
+  trust_store.AddTrustAnchor(newrootrollover_);
 
   CertPathBuilder::Result result;
   // Newroot is the target cert.
@@ -786,9 +776,9 @@
   // Newroot has same name+SPKI as newrootrollover, thus the path is valid and
   // only contains newroot.
   EXPECT_TRUE(best_result->IsValid());
-  ASSERT_EQ(1U, best_result->path.certs.size());
+  ASSERT_EQ(2U, best_result->path.certs.size());
   EXPECT_EQ(newroot_, best_result->path.certs[0]);
-  EXPECT_EQ(newrootrollover_, best_result->path.trust_anchor->cert());
+  EXPECT_EQ(newrootrollover_, best_result->path.certs[1]);
 }
 
 // Test that PathBuilder will not try the same path twice if multiple
@@ -804,7 +794,7 @@
 
   // Only newroot is a trusted root.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(newroot_, &trust_store);
+  trust_store.AddTrustAnchor(newroot_);
 
   // The oldintermediate is supplied synchronously by |sync_certs1| and
   // another copy of oldintermediate is supplied synchronously by |sync_certs2|.
@@ -838,26 +828,26 @@
   EXPECT_FALSE(result.paths[0]->IsValid());
   const auto& path0 = result.paths[0]->path;
 
-  ASSERT_EQ(2U, path0.certs.size());
+  ASSERT_EQ(3U, path0.certs.size());
   EXPECT_EQ(target_, path0.certs[0]);
   // Compare the DER instead of ParsedCertificate pointer, don't care which copy
   // of oldintermediate was used in the path.
   EXPECT_EQ(oldintermediate_->der_cert(), path0.certs[1]->der_cert());
-  EXPECT_EQ(newroot_, path0.trust_anchor->cert());
+  EXPECT_EQ(newroot_, path0.certs[2]);
 
   // Path builder will next attempt: target <- newintermediate <- newroot
   // which will succeed.
   EXPECT_EQ(1U, result.best_result_index);
   EXPECT_TRUE(result.paths[1]->IsValid());
   const auto& path1 = result.paths[1]->path;
-  ASSERT_EQ(2U, path1.certs.size());
+  ASSERT_EQ(3U, path1.certs.size());
   EXPECT_EQ(target_, path1.certs[0]);
   EXPECT_EQ(newintermediate_, path1.certs[1]);
-  EXPECT_EQ(newroot_, path1.trust_anchor->cert());
+  EXPECT_EQ(newroot_, path1.certs[2]);
 }
 
-// Test when PathBuilder is given a cert CertIssuerSources that has the same
-// SPKI as a TrustAnchor.
+// Test when PathBuilder is given a cert via CertIssuerSources that has the same
+// SPKI as a trust anchor.
 TEST_F(PathBuilderKeyRolloverTest, TestDuplicateIntermediateAndRoot) {
   // Create a separate copy of newroot.
   scoped_refptr<ParsedCertificate> newroot_dupe(ParsedCertificate::Create(
@@ -868,7 +858,7 @@
 
   // Only newroot is a trusted root.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(newroot_, &trust_store);
+  trust_store.AddTrustAnchor(newroot_);
 
   // The oldintermediate and newroot are supplied synchronously by |sync_certs|.
   CertIssuerSourceStatic sync_certs;
@@ -883,19 +873,18 @@
   path_builder.Run();
 
   EXPECT_FALSE(result.HasValidPath());
-  ASSERT_EQ(2U, result.paths.size());
-  // TODO(eroman): Is this right?
+  ASSERT_EQ(1U, result.paths.size());
 
   // Path builder attempt: target <- oldintermediate <- newroot
   // but it will fail since oldintermediate is signed by oldroot.
   EXPECT_FALSE(result.paths[0]->IsValid());
   const auto& path = result.paths[0]->path;
-  ASSERT_EQ(2U, path.certs.size());
+  ASSERT_EQ(3U, path.certs.size());
   EXPECT_EQ(target_, path.certs[0]);
   EXPECT_EQ(oldintermediate_, path.certs[1]);
   // Compare the DER instead of ParsedCertificate pointer, don't care which copy
   // of newroot was used in the path.
-  EXPECT_EQ(newroot_->der_cert(), path.trust_anchor->cert()->der_cert());
+  EXPECT_EQ(newroot_->der_cert(), path.certs[2]->der_cert());
 }
 
 class MockCertIssuerSourceRequest : public CertIssuerSource::Request {
@@ -948,7 +937,7 @@
 
   // Only newroot is a trusted root.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(newroot_, &trust_store);
+  trust_store.AddTrustAnchor(newroot_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(target_, &trust_store, &signature_policy_, time_,
@@ -1005,19 +994,19 @@
   // but it will fail since oldintermediate is signed by oldroot.
   EXPECT_FALSE(result.paths[0]->IsValid());
   const auto& path0 = result.paths[0]->path;
-  ASSERT_EQ(2U, path0.certs.size());
+  ASSERT_EQ(3U, path0.certs.size());
   EXPECT_EQ(target_, path0.certs[0]);
   EXPECT_EQ(oldintermediate_, path0.certs[1]);
-  EXPECT_EQ(newroot_, path0.trust_anchor->cert());
+  EXPECT_EQ(newroot_, path0.certs[2]);
 
   // After the second batch of async results, path builder will attempt:
   // target <- newintermediate <- newroot which will succeed.
   EXPECT_TRUE(result.paths[1]->IsValid());
   const auto& path1 = result.paths[1]->path;
-  ASSERT_EQ(2U, path1.certs.size());
+  ASSERT_EQ(3U, path1.certs.size());
   EXPECT_EQ(target_, path1.certs[0]);
   EXPECT_EQ(newintermediate_, path1.certs[1]);
-  EXPECT_EQ(newroot_, path1.trust_anchor->cert());
+  EXPECT_EQ(newroot_, path1.certs[2]);
 }
 
 // Test that PathBuilder will not try the same path twice if CertIssuerSources
@@ -1027,7 +1016,7 @@
 
   // Only newroot is a trusted root.
   TrustStoreInMemory trust_store;
-  AddTrustedCertificate(newroot_, &trust_store);
+  trust_store.AddTrustAnchor(newroot_);
 
   CertPathBuilder::Result result;
   CertPathBuilder path_builder(target_, &trust_store, &signature_policy_, time_,
@@ -1091,10 +1080,10 @@
   // but it will fail since oldintermediate is signed by oldroot.
   EXPECT_FALSE(result.paths[0]->IsValid());
   const auto& path0 = result.paths[0]->path;
-  ASSERT_EQ(2U, path0.certs.size());
+  ASSERT_EQ(3U, path0.certs.size());
   EXPECT_EQ(target_, path0.certs[0]);
   EXPECT_EQ(oldintermediate_, path0.certs[1]);
-  EXPECT_EQ(newroot_, path0.trust_anchor->cert());
+  EXPECT_EQ(newroot_, path0.certs[2]);
 
   // The second async result does not generate any path.
 
@@ -1102,10 +1091,10 @@
   // target <- newintermediate <- newroot which will succeed.
   EXPECT_TRUE(result.paths[1]->IsValid());
   const auto& path1 = result.paths[1]->path;
-  ASSERT_EQ(2U, path1.certs.size());
+  ASSERT_EQ(3U, path1.certs.size());
   EXPECT_EQ(target_, path1.certs[0]);
   EXPECT_EQ(newintermediate_, path1.certs[1]);
-  EXPECT_EQ(newroot_, path1.trust_anchor->cert());
+  EXPECT_EQ(newroot_, path1.certs[2]);
 }
 
 }  // namespace
diff --git a/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc b/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
index 43ba879..e6dfa42 100644
--- a/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
+++ b/src/net/cert/internal/path_builder_verify_certificate_chain_unittest.cc
@@ -21,7 +21,21 @@
     ASSERT_FALSE(test.chain.empty());
 
     TrustStoreInMemory trust_store;
-    trust_store.AddTrustAnchor(test.trust_anchor);
+
+    switch (test.last_cert_trust.type) {
+      case CertificateTrustType::TRUSTED_ANCHOR:
+        trust_store.AddTrustAnchor(test.chain.back());
+        break;
+      case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+        trust_store.AddTrustAnchorWithConstraints(test.chain.back());
+        break;
+      case CertificateTrustType::UNSPECIFIED:
+        LOG(ERROR) << "Unexpected CertificateTrustType";
+        break;
+      case CertificateTrustType::DISTRUSTED:
+        trust_store.AddDistrustedCertificateForTest(test.chain.back());
+        break;
+    }
 
     CertIssuerSourceStatic intermediate_cert_issuer_source;
     for (size_t i = 1; i < test.chain.size(); ++i)
@@ -35,7 +49,7 @@
     path_builder.AddCertIssuerSource(&intermediate_cert_issuer_source);
 
     path_builder.Run();
-    EXPECT_EQ(test.expected_result, result.HasValidPath());
+    EXPECT_EQ(!test.HasHighSeverityErrors(), result.HasValidPath());
   }
 };
 
diff --git a/src/net/cert/internal/system_trust_store.cc b/src/net/cert/internal/system_trust_store.cc
index 099501a..199ca6e 100644
--- a/src/net/cert/internal/system_trust_store.cc
+++ b/src/net/cert/internal/system_trust_store.cc
@@ -17,7 +17,6 @@
 
 #if defined(USE_NSS_CERTS)
 #include "crypto/nss_util.h"
-#include "net/cert/internal/cert_issuer_source_nss.h"
 #include "net/cert/internal/trust_store_nss.h"
 #include "net/cert/known_roots_nss.h"
 #include "net/cert/scoped_nss_types.h"
@@ -39,17 +38,16 @@
     trust_store_.AddTrustStore(&additional_trust_store_);
   }
 
-  void AddTrustAnchor(const scoped_refptr<TrustAnchor>& trust_anchor) override {
+  void AddTrustAnchor(
+      const scoped_refptr<ParsedCertificate>& trust_anchor) override {
     additional_trust_store_.AddTrustAnchor(trust_anchor);
   }
 
   TrustStore* GetTrustStore() override { return &trust_store_; }
 
-  CertIssuerSource* GetCertIssuerSource() override { return nullptr; }
-
   bool IsAdditionalTrustAnchor(
-      const scoped_refptr<TrustAnchor>& trust_anchor) const override {
-    return additional_trust_store_.Contains(trust_anchor.get());
+      const ParsedCertificate* trust_anchor) const override {
+    return additional_trust_store_.Contains(trust_anchor);
   }
 
  protected:
@@ -68,40 +66,32 @@
     trust_store_.AddTrustStore(&trust_store_nss_);
   }
 
-  CertIssuerSource* GetCertIssuerSource() override {
-    return &cert_issuer_source_nss_;
-  }
-
   bool UsesSystemTrustStore() const override { return true; }
 
   // IsKnownRoot returns true if the given trust anchor is a standard one (as
   // opposed to a user-installed root)
-  bool IsKnownRoot(
-      const scoped_refptr<TrustAnchor>& trust_anchor) const override {
-    // TODO(eroman): Based on how the TrustAnchors are created by this
-    // integration, there will always be an associated certificate. However this
-    // contradicts the API for TrustAnchor that states it is optional.
-    DCHECK(trust_anchor->cert());
-
+  bool IsKnownRoot(const ParsedCertificate* trust_anchor) const override {
     // TODO(eroman): The overall approach of IsKnownRoot() is inefficient -- it
     // requires searching for the trust anchor by DER in NSS, however path
     // building already had a handle to it.
     SECItem der_cert;
-    der_cert.data =
-        const_cast<uint8_t*>(trust_anchor->cert()->der_cert().UnsafeData());
-    der_cert.len = trust_anchor->cert()->der_cert().Length();
+    der_cert.data = const_cast<uint8_t*>(trust_anchor->der_cert().UnsafeData());
+    der_cert.len = trust_anchor->der_cert().Length();
     der_cert.type = siDERCertBuffer;
     ScopedCERTCertificate nss_cert(
         CERT_FindCertByDERCert(CERT_GetDefaultCertDB(), &der_cert));
     if (!nss_cert)
       return false;
 
-    return net::IsKnownRoot(nss_cert.get());
+    if (!net::IsKnownRoot(nss_cert.get()))
+      return false;
+
+    return trust_anchor->der_cert() ==
+           der::Input(nss_cert->derCert.data, nss_cert->derCert.len);
   }
 
  private:
   TrustStoreNSS trust_store_nss_;
-  CertIssuerSourceNSS cert_issuer_source_nss_;
 };
 
 }  // namespace
@@ -120,21 +110,12 @@
     trust_store_.AddTrustStore(&trust_store_mac_);
   }
 
-  CertIssuerSource* GetCertIssuerSource() override {
-    // TODO(eroman): Implement.
-    return nullptr;
-  }
-
   bool UsesSystemTrustStore() const override { return true; }
 
   // IsKnownRoot returns true if the given trust anchor is a standard one (as
   // opposed to a user-installed root)
-  bool IsKnownRoot(
-      const scoped_refptr<TrustAnchor>& trust_anchor) const override {
-    if (!trust_anchor->cert())
-      return false;
-
-    der::Input bytes = trust_anchor->cert()->der_cert();
+  bool IsKnownRoot(const ParsedCertificate* trust_anchor) const override {
+    der::Input bytes = trust_anchor->der_cert();
     base::ScopedCFTypeRef<SecCertificateRef> cert_ref =
         x509_util::CreateSecCertificateFromBytes(bytes.UnsafeData(),
                                                  bytes.Length());
@@ -157,8 +138,7 @@
  public:
   bool UsesSystemTrustStore() const override { return false; }
 
-  bool IsKnownRoot(
-      const scoped_refptr<TrustAnchor>& trust_anchor) const override {
+  bool IsKnownRoot(const ParsedCertificate* trust_anchor) const override {
     return false;
   }
 };
diff --git a/src/net/cert/internal/system_trust_store.h b/src/net/cert/internal/system_trust_store.h
index 2783ce2..e13f2b8 100644
--- a/src/net/cert/internal/system_trust_store.h
+++ b/src/net/cert/internal/system_trust_store.h
@@ -14,8 +14,6 @@
 namespace net {
 
 class TrustStore;
-class CertIssuerSource;
-class TrustAnchor;
 
 // The SystemTrustStore interface is used to encapsulate a TrustStore for the
 // current platform, with some extra bells and whistles.
@@ -46,34 +44,18 @@
   // trust anchors (via AddTrustAnchor()).
   virtual bool UsesSystemTrustStore() const = 0;
 
-  // TODO(eroman): Expose this through the TrustStore interface instead?
-  //
-  // Returns a CertIssuerSource that finds any intermediates that are present in
-  // the system trust store. These intermediates are not necessarily trusted,
-  // however may be used during path building as another means of finding
-  // certificates. If the implementation of SystemTrustStore doesn't support
-  // this feature may return nullptr.
-  virtual CertIssuerSource* GetCertIssuerSource() = 0;
-
-  // IsKnownRoot() returns true if the given trust anchor originated from the
+  // IsKnownRoot() returns true if the given certificate originated from the
   // system trust store and is a "standard" one. The meaning of "standard" is
   // that it is one of default trust anchors for the system, as opposed to a
-  // user-installed one. IsKnownRoot() is only guaranteed to work for
-  // TrustAnchors returned by GetTrustStore().
-  virtual bool IsKnownRoot(
-      const scoped_refptr<TrustAnchor>& trust_anchor) const = 0;
+  // user-installed one.
+  virtual bool IsKnownRoot(const ParsedCertificate* cert) const = 0;
 
-  // Adds a trust anchor to this particular instance of SystemTrustStore, and
-  // not globally for the system.
-  virtual void AddTrustAnchor(
-      const scoped_refptr<TrustAnchor>& trust_anchor) = 0;
+  // Adds a trust anchor to this particular instance of SystemTrustStore,
+  // and not globally for the system.
+  virtual void AddTrustAnchor(const scoped_refptr<ParsedCertificate>& cert) = 0;
 
-  // Returns true if |trust_anchor| was one added via |AddTrustAnchor()|. This
-  // is only guaranteed to work if |trust_anchor| was one returned by
-  // GetTrustStore(), as it may be implemented by pointer comparison rather than
-  // SPKI comparison.
-  virtual bool IsAdditionalTrustAnchor(
-      const scoped_refptr<TrustAnchor>& trust_anchor) const = 0;
+  // Returns true if |trust_anchor| was one added via |AddTrustAnchor()|.
+  virtual bool IsAdditionalTrustAnchor(const ParsedCertificate* cert) const = 0;
 };
 
 // Creates an instance of SystemTrustStore that wraps the current platform's SSL
diff --git a/src/net/cert/internal/test_helpers.cc b/src/net/cert/internal/test_helpers.cc
index 80948c2..16c39cf 100644
--- a/src/net/cert/internal/test_helpers.cc
+++ b/src/net/cert/internal/test_helpers.cc
@@ -8,6 +8,8 @@
 #include "base/base_paths.h"
 #include "base/files/file_util.h"
 #include "base/path_service.h"
+#include "base/strings/string_split.h"
+#include "net/cert/internal/cert_error_params.h"
 #include "net/cert/internal/cert_errors.h"
 #include "net/cert/pem_tokenizer.h"
 #include "net/der/parser.h"
@@ -16,6 +18,27 @@
 
 namespace net {
 
+namespace {
+
+bool GetValue(base::StringPiece prefix,
+              base::StringPiece line,
+              std::string* value,
+              bool* has_value) {
+  if (!line.starts_with(prefix))
+    return false;
+
+  if (*has_value) {
+    ADD_FAILURE() << "Duplicated " << prefix;
+    return false;
+  }
+
+  *has_value = true;
+  *value = line.substr(prefix.size()).as_string();
+  return true;
+}
+
+}  // namespace
+
 namespace der {
 
 void PrintTo(const Input& data, ::std::ostream* os) {
@@ -56,8 +79,8 @@
   // Read the full contents of the PEM file.
   std::string file_data;
   if (!base::ReadFileToString(filepath, &file_data)) {
-    return ::testing::AssertionFailure() << "Couldn't read file: "
-                                         << filepath.value();
+    return ::testing::AssertionFailure()
+           << "Couldn't read file: " << filepath.value();
   }
 
   // mappings_copy is used to keep track of which mappings have already been
@@ -94,8 +117,8 @@
   // Ensure that all specified blocks were found.
   for (const auto& mapping : mappings_copy) {
     if (mapping.value && !mapping.optional) {
-      return ::testing::AssertionFailure() << "PEM block missing: "
-                                           << mapping.block_name;
+      return ::testing::AssertionFailure()
+             << "PEM block missing: " << mapping.block_name;
     }
   }
 
@@ -105,100 +128,167 @@
 VerifyCertChainTest::VerifyCertChainTest() = default;
 VerifyCertChainTest::~VerifyCertChainTest() = default;
 
-void ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
+bool VerifyCertChainTest::HasHighSeverityErrors() const {
+  // This function assumes that high severity warnings are prefixed with
+  // "ERROR: " and warnings are prefixed with "WARNING: ". This is an
+  // implementation detail of CertError::ToDebugString).
+  //
+  // Do a quick sanity-check to confirm this.
+  CertError error(CertError::SEVERITY_HIGH, "unused", nullptr);
+  EXPECT_EQ("ERROR: unused\n", error.ToDebugString());
+  CertError warning(CertError::SEVERITY_WARNING, "unused", nullptr);
+  EXPECT_EQ("WARNING: unused\n", warning.ToDebugString());
+
+  // Do a simple substring test (not perfect, but good enough for our test
+  // corpus).
+  return expected_errors.find("ERROR: ") != std::string::npos;
+}
+
+bool ReadCertChainFromFile(const std::string& file_path_ascii,
+                           ParsedCertificateList* chain) {
+  // Reset all the out parameters to their defaults.
+  *chain = ParsedCertificateList();
+
+  std::string file_data = ReadTestFileToString(file_path_ascii);
+  if (file_data.empty())
+    return false;
+
+  std::vector<std::string> pem_headers = {"CERTIFICATE"};
+
+  PEMTokenizer pem_tokenizer(file_data, pem_headers);
+  while (pem_tokenizer.GetNext()) {
+    const std::string& block_data = pem_tokenizer.data();
+
+    CertErrors errors;
+    if (!net::ParsedCertificate::CreateAndAddToVector(
+            bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
+                reinterpret_cast<const uint8_t*>(block_data.data()),
+                block_data.size(), nullptr)),
+            {}, chain, &errors)) {
+      ADD_FAILURE() << errors.ToDebugString();
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
                                      VerifyCertChainTest* test) {
   // Reset all the out parameters to their defaults.
   *test = {};
 
   std::string file_data = ReadTestFileToString(file_path_ascii);
+  if (file_data.empty())
+    return false;
 
-  std::vector<std::string> pem_headers;
+  std::vector<std::string> lines = base::SplitString(
+      file_data, "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
 
-  // For details on the file format refer to:
-  // net/data/verify_certificate_chain_unittest/README.
-  const char kCertificateHeader[] = "CERTIFICATE";
-  const char kTrustAnchorUnconstrained[] = "TRUST_ANCHOR_UNCONSTRAINED";
-  const char kTrustAnchorConstrained[] = "TRUST_ANCHOR_CONSTRAINED";
-  const char kTimeHeader[] = "TIME";
-  const char kResultHeader[] = "VERIFY_RESULT";
-  const char kErrorsHeader[] = "ERRORS";
-  const char kKeyPurpose[] = "KEY_PURPOSE";
-
-  pem_headers.push_back(kCertificateHeader);
-  pem_headers.push_back(kTrustAnchorUnconstrained);
-  pem_headers.push_back(kTrustAnchorConstrained);
-  pem_headers.push_back(kTimeHeader);
-  pem_headers.push_back(kResultHeader);
-  pem_headers.push_back(kErrorsHeader);
-  pem_headers.push_back(kKeyPurpose);
-
+  bool has_chain = false;
+  bool has_trust = false;
   bool has_time = false;
-  bool has_result = false;
   bool has_errors = false;
   bool has_key_purpose = false;
 
-  PEMTokenizer pem_tokenizer(file_data, pem_headers);
-  while (pem_tokenizer.GetNext()) {
-    const std::string& block_type = pem_tokenizer.block_type();
-    const std::string& block_data = pem_tokenizer.data();
+  base::StringPiece kExpectedErrors = "expected_errors:";
 
-    if (block_type == kCertificateHeader) {
-      CertErrors errors;
-      ASSERT_TRUE(net::ParsedCertificate::CreateAndAddToVector(
-          bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
-              reinterpret_cast<const uint8_t*>(block_data.data()),
-              block_data.size(), nullptr)),
-          {}, &test->chain, &errors))
-          << errors.ToDebugString();
-    } else if (block_type == kTrustAnchorUnconstrained ||
-               block_type == kTrustAnchorConstrained) {
-      ASSERT_FALSE(test->trust_anchor) << "Duplicate trust anchor";
-      CertErrors errors;
-      scoped_refptr<ParsedCertificate> root = net::ParsedCertificate::Create(
-          bssl::UniquePtr<CRYPTO_BUFFER>(CRYPTO_BUFFER_new(
-              reinterpret_cast<const uint8_t*>(block_data.data()),
-              block_data.size(), nullptr)),
-          {}, &errors);
-      ASSERT_TRUE(root) << errors.ToDebugString();
-      test->trust_anchor =
-          block_type == kTrustAnchorUnconstrained
-              ? TrustAnchor::CreateFromCertificateNoConstraints(std::move(root))
-              : TrustAnchor::CreateFromCertificateWithConstraints(
-                    std::move(root));
-    } else if (block_type == kTimeHeader) {
-      ASSERT_FALSE(has_time) << "Duplicate " << kTimeHeader;
-      has_time = true;
-      ASSERT_TRUE(der::ParseUTCTime(der::Input(&block_data), &test->time));
-    } else if (block_type == kKeyPurpose) {
-      ASSERT_FALSE(has_key_purpose) << "Duplicate " << kKeyPurpose;
-      has_key_purpose = true;
+  for (const std::string& line : lines) {
+    base::StringPiece line_piece(line);
 
-      if (block_data == "anyExtendedKeyUsage") {
+    std::string value;
+
+    // For details on the file format refer to:
+    // net/data/verify_certificate_chain_unittest/README.
+    if (GetValue("chain: ", line_piece, &value, &has_chain)) {
+      // Interpret the |chain| path as being relative to the .test file.
+      size_t slash = file_path_ascii.rfind('/');
+      if (slash == std::string::npos) {
+        ADD_FAILURE() << "Bad path - expecting slashes";
+        return false;
+      }
+      std::string chain_path = file_path_ascii.substr(0, slash) + "/" + value;
+
+      ReadCertChainFromFile(chain_path, &test->chain);
+    } else if (GetValue("utc_time: ", line_piece, &value, &has_time)) {
+      if (!der::ParseUTCTime(der::Input(&value), &test->time)) {
+        ADD_FAILURE() << "Failed parsing UTC time";
+        return false;
+      }
+    } else if (GetValue("key_purpose: ", line_piece, &value,
+                        &has_key_purpose)) {
+      if (value == "ANY_EKU") {
         test->key_purpose = KeyPurpose::ANY_EKU;
-      } else if (block_data == "serverAuth") {
+      } else if (value == "SERVER_AUTH") {
         test->key_purpose = KeyPurpose::SERVER_AUTH;
-      } else if (block_data == "clientAuth") {
+      } else if (value == "CLIENT_AUTH") {
         test->key_purpose = KeyPurpose::CLIENT_AUTH;
       } else {
-        ADD_FAILURE() << "Unrecognized " << block_type << ": " << block_data;
+        ADD_FAILURE() << "Unrecognized key_purpose: " << value;
+        return false;
       }
-    } else if (block_type == kResultHeader) {
-      ASSERT_FALSE(has_result) << "Duplicate " << kResultHeader;
-      ASSERT_TRUE(block_data == "SUCCESS" || block_data == "FAIL")
-          << "Unrecognized result: " << block_data;
-      has_result = true;
-      test->expected_result = block_data == "SUCCESS";
-    } else if (block_type == kErrorsHeader) {
-      ASSERT_FALSE(has_errors) << "Duplicate " << kErrorsHeader;
+    } else if (GetValue("last_cert_trust: ", line_piece, &value, &has_trust)) {
+      if (value == "TRUSTED_ANCHOR") {
+        test->last_cert_trust = CertificateTrust::ForTrustAnchor();
+      } else if (value == "TRUSTED_ANCHOR_WITH_CONSTRAINTS") {
+        test->last_cert_trust =
+            CertificateTrust::ForTrustAnchorEnforcingConstraints();
+      } else if (value == "DISTRUSTED") {
+        test->last_cert_trust = CertificateTrust::ForDistrusted();
+      } else if (value == "UNSPECIFIED") {
+        test->last_cert_trust = CertificateTrust::ForUnspecified();
+      } else {
+        ADD_FAILURE() << "Unrecognized last_cert_trust: " << value;
+        return false;
+      }
+    } else if (line_piece.starts_with("#")) {
+      // Skip comments.
+      continue;
+    } else if (line_piece == kExpectedErrors) {
       has_errors = true;
-      test->expected_errors = block_data;
+      // The errors start on the next line, and extend until the end of the
+      // file.
+      std::string prefix =
+          std::string("\n") + kExpectedErrors.as_string() + std::string("\n");
+      size_t errors_start = file_data.find(prefix);
+      if (errors_start == std::string::npos) {
+        ADD_FAILURE() << "expected_errors not found";
+        return false;
+      }
+      test->expected_errors = file_data.substr(errors_start + prefix.size());
+      break;
+    } else {
+      ADD_FAILURE() << "Unknown line: " << line_piece;
+      return false;
     }
   }
 
-  ASSERT_TRUE(has_time);
-  ASSERT_TRUE(has_result);
-  ASSERT_TRUE(test->trust_anchor);
-  ASSERT_TRUE(has_key_purpose);
+  if (!has_chain) {
+    ADD_FAILURE() << "Missing chain: ";
+    return false;
+  }
+
+  if (!has_trust) {
+    ADD_FAILURE() << "Missing last_cert_trust: ";
+    return false;
+  }
+
+  if (!has_time) {
+    ADD_FAILURE() << "Missing time: ";
+    return false;
+  }
+
+  if (!has_key_purpose) {
+    ADD_FAILURE() << "Missing key_purpose: ";
+    return false;
+  }
+
+  if (!has_errors) {
+    ADD_FAILURE() << "Missing errors:";
+    return false;
+  }
+
+  return true;
 }
 
 std::string ReadTestFileToString(const std::string& file_path_ascii) {
diff --git a/src/net/cert/internal/test_helpers.h b/src/net/cert/internal/test_helpers.h
index 25afc28..dceb068 100644
--- a/src/net/cert/internal/test_helpers.h
+++ b/src/net/cert/internal/test_helpers.h
@@ -86,8 +86,8 @@
   // The chain of certificates (with the zero-th being the target).
   ParsedCertificateList chain;
 
-  // The trust anchor to use when verifying the chain.
-  scoped_refptr<TrustAnchor> trust_anchor;
+  // Details on the trustedness of the last certificate.
+  CertificateTrust last_cert_trust;
 
   // The time to use when verifying the chain.
   der::GeneralizedTime time;
@@ -95,19 +95,25 @@
   // The Key Purpose to use when verifying the chain.
   KeyPurpose key_purpose = KeyPurpose::ANY_EKU;
 
-  // The expected result from verification.
-  bool expected_result = false;
-
-  // The expected errors from verification (as a string).
+  // The expected errors/warnings from verification (as a string).
   std::string expected_errors;
+
+  // Returns true if |expected_errors| contains any high severity errors (a
+  // non-empty expected_errors doesn't necessarily mean verification is
+  // expected to fail, as it may have contained warnings).
+  bool HasHighSeverityErrors() const;
 };
 
 // Reads a test case from |file_path_ascii| (which is relative to //src).
 // Generally |file_path_ascii| will start with:
 //   net/data/verify_certificate_chain_unittest/
-void ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
+bool ReadVerifyCertChainTestFromFile(const std::string& file_path_ascii,
                                      VerifyCertChainTest* test);
 
+// Reads a certificate chain from |file_path_ascii|
+bool ReadCertChainFromFile(const std::string& file_path_ascii,
+                           ParsedCertificateList* chain);
+
 // Reads a data file relative to the src root directory.
 std::string ReadTestFileToString(const std::string& file_path_ascii);
 
diff --git a/src/net/cert/internal/trust_store.cc b/src/net/cert/internal/trust_store.cc
index 7540cfd..1ef02d7 100644
--- a/src/net/cert/internal/trust_store.cc
+++ b/src/net/cert/internal/trust_store.cc
@@ -6,37 +6,77 @@
 
 namespace net {
 
-scoped_refptr<TrustAnchor> TrustAnchor::CreateFromCertificateNoConstraints(
-    scoped_refptr<ParsedCertificate> cert) {
-  return scoped_refptr<TrustAnchor>(new TrustAnchor(std::move(cert), false));
+CertificateTrust CertificateTrust::ForTrustAnchor() {
+  CertificateTrust result;
+  result.type = CertificateTrustType::TRUSTED_ANCHOR;
+  return result;
 }
 
-scoped_refptr<TrustAnchor> TrustAnchor::CreateFromCertificateWithConstraints(
-    scoped_refptr<ParsedCertificate> cert) {
-  return scoped_refptr<TrustAnchor>(new TrustAnchor(std::move(cert), true));
+CertificateTrust CertificateTrust::ForTrustAnchorEnforcingConstraints() {
+  CertificateTrust result;
+  result.type = CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS;
+  return result;
 }
 
-der::Input TrustAnchor::spki() const {
-  return cert_->tbs().spki_tlv;
+CertificateTrust CertificateTrust::ForUnspecified() {
+  CertificateTrust result;
+  result.type = CertificateTrustType::UNSPECIFIED;
+  return result;
 }
 
-der::Input TrustAnchor::normalized_subject() const {
-  return cert_->normalized_subject();
+CertificateTrust CertificateTrust::ForDistrusted() {
+  CertificateTrust result;
+  result.type = CertificateTrustType::DISTRUSTED;
+  return result;
 }
 
-const scoped_refptr<ParsedCertificate>& TrustAnchor::cert() const {
-  return cert_;
+bool CertificateTrust::IsTrustAnchor() const {
+  switch (type) {
+    case CertificateTrustType::DISTRUSTED:
+    case CertificateTrustType::UNSPECIFIED:
+      return false;
+    case CertificateTrustType::TRUSTED_ANCHOR:
+    case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+      return true;
+  }
+
+  NOTREACHED();
+  return false;
 }
 
-TrustAnchor::TrustAnchor(scoped_refptr<ParsedCertificate> cert,
-                         bool enforces_constraints)
-    : cert_(std::move(cert)), enforces_constraints_(enforces_constraints) {
-  DCHECK(cert_);
+bool CertificateTrust::IsDistrusted() const {
+  switch (type) {
+    case CertificateTrustType::DISTRUSTED:
+      return true;
+    case CertificateTrustType::UNSPECIFIED:
+    case CertificateTrustType::TRUSTED_ANCHOR:
+    case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+      return false;
+  }
+
+  NOTREACHED();
+  return false;
 }
 
-TrustAnchor::~TrustAnchor() = default;
+bool CertificateTrust::HasUnspecifiedTrust() const {
+  switch (type) {
+    case CertificateTrustType::UNSPECIFIED:
+      return true;
+    case CertificateTrustType::DISTRUSTED:
+    case CertificateTrustType::TRUSTED_ANCHOR:
+    case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+      return false;
+  }
+
+  NOTREACHED();
+  return true;
+}
 
 TrustStore::TrustStore() = default;
-TrustStore::~TrustStore() = default;
+
+void TrustStore::AsyncGetIssuersOf(const ParsedCertificate* cert,
+                                   std::unique_ptr<Request>* out_req) {
+  out_req->reset();
+}
 
 }  // namespace net
diff --git a/src/net/cert/internal/trust_store.h b/src/net/cert/internal/trust_store.h
index 383e83a..6014226 100644
--- a/src/net/cert/internal/trust_store.h
+++ b/src/net/cert/internal/trust_store.h
@@ -9,119 +9,59 @@
 
 #include "base/memory/ref_counted.h"
 #include "net/base/net_export.h"
+#include "net/cert/internal/cert_issuer_source.h"
 #include "net/cert/internal/parsed_certificate.h"
 
 namespace net {
 
-namespace der {
-class Input;
-}
+enum class CertificateTrustType {
+  // This certificate is explicitly blacklisted (distrusted).
+  DISTRUSTED,
 
-// A TrustAnchor represents a trust anchor used during RFC 5280 path validation.
-//
-// At its core, each trust anchor has two parts:
-//  * Name
-//  * Public Key
-//
-// Optionally a trust anchor may contain:
-//  * An associated certificate (used when pretty-printing)
-//  * Mandatory trust anchor constraints
-//
-// Relationship between ParsedCertificate and TrustAnchor:
-//
-// For convenience trust anchors are often described using a
-// (self-signed) certificate. TrustAnchor facilitates this by allowing
-// construction of a TrustAnchor given a ParsedCertificate.
-//
-// When constructing a TrustAnchor from a certificate there are different
-// interpretations for the meaning of properties other than the Subject and
-// SPKI in the certificate.
-//
-// * CreateFromCertificateNoConstraints() -- Extracts the Subject and SPKI from
-// the source certificate. ALL other information in the certificate is
-// considered irrelevant during path validation.
-//
-// * CreateFromCertificateWithConstraints() -- Extracts the Subject and SPKI
-// from the source certificate, and additionally interprets some properties of
-// the source certificate as mandatory anchor constraints.
-//
-// Trust anchor constraints are described in more detail by RFC 5937. This
-// implementation follows that description, and fixes
-// "enforceTrustAnchorConstraints" to true.
-class NET_EXPORT TrustAnchor : public base::RefCountedThreadSafe<TrustAnchor> {
- public:
-  // Creates a TrustAnchor given a certificate. The ONLY parts of the
-  // certificate that are relevant to the resulting trust anchor are:
-  //
-  //  * Subject
-  //  * SPKI
-  //
-  // Everything else, including the source certiticate's expiration, basic
-  // constraints, policy constraints, etc is not used.
-  //
-  // This is the common interpretation for a trust anchor when given as a
-  // certificate.
-  static scoped_refptr<TrustAnchor> CreateFromCertificateNoConstraints(
-      scoped_refptr<ParsedCertificate> cert);
+  // The trustedness of this certificate is unknown (inherits trust from
+  // its issuer).
+  UNSPECIFIED,
 
-  // Creates a TrustAnchor given a certificate. The resulting trust anchor is
-  // initialized using the source certificate's subject and SPKI as usual,
-  // however other parts of the certificate are applied as anchor constraints.
-  //
-  // The implementation matches the properties identified by RFC 5937,
-  // resulting in the following hodgepodge of enforcement on the source
-  // certificate:
-  //
-  //  * Signature:             No
-  //  * Validity (expiration): No
-  //  * Key usage:             No
-  //  * Extended key usage:    Yes (not part of RFC 5937)
-  //  * Basic constraints:     Yes, but only the pathlen (CA=false is accepted)
-  //  * Name constraints:      Yes
-  //  * Certificate policies:  Not currently, TODO(crbug.com/634453)
-  //  * inhibitAnyPolicy:      Not currently, TODO(crbug.com/634453)
-  //  * PolicyConstraints:     Not currently, TODO(crbug.com/634452)
-  //
-  // The presence of any other unrecognized extension marked as critical fails
-  // validation.
-  static scoped_refptr<TrustAnchor> CreateFromCertificateWithConstraints(
-      scoped_refptr<ParsedCertificate> cert);
+  // This certificate is a trust anchor (as defined by RFC 5280). The only
+  // fields in the certificate that are meaningful are its name and SPKI.
+  TRUSTED_ANCHOR,
 
-  der::Input spki() const;
-  der::Input normalized_subject() const;
-
-  // Returns the optional certificate representing this trust anchor.
-  // In the current implementation it will never return nullptr...
-  // however clients should be prepared to handle this case.
-  const scoped_refptr<ParsedCertificate>& cert() const;
-
-  // Returns true if the trust anchor has attached (mandatory) trust anchor
-  // constraints. This returns true when the anchor was constructed using
-  // CreateFromCertificateWithConstraints.
-  bool enforces_constraints() const { return enforces_constraints_; }
-
- private:
-  friend class base::RefCountedThreadSafe<TrustAnchor>;
-  TrustAnchor(scoped_refptr<ParsedCertificate>, bool enforces_constraints);
-  ~TrustAnchor();
-
-  scoped_refptr<ParsedCertificate> cert_;
-  bool enforces_constraints_ = false;
+  // This certificate is a trust anchor, and additionally some of the fields in
+  // the certificate (other than name and SPKI) should be used during the
+  // verification process. See VerifyCertificateChain() for details on how
+  // constraints are applied.
+  TRUSTED_ANCHOR_WITH_CONSTRAINTS,
 };
 
-using TrustAnchors = std::vector<scoped_refptr<TrustAnchor>>;
+// Describes the level of trust in a certificate. See CertificateTrustType for
+// details.
+//
+// TODO(eroman): Right now this is just a glorified wrapper around an enum...
+struct NET_EXPORT CertificateTrust {
+  static CertificateTrust ForTrustAnchor();
+  static CertificateTrust ForTrustAnchorEnforcingConstraints();
+  static CertificateTrust ForUnspecified();
+  static CertificateTrust ForDistrusted();
 
-// Interface for finding trust anchors.
-class NET_EXPORT TrustStore {
+  bool IsTrustAnchor() const;
+  bool IsDistrusted() const;
+  bool HasUnspecifiedTrust() const;
+
+  CertificateTrustType type = CertificateTrustType::UNSPECIFIED;
+};
+
+// Interface for finding intermediates / trust anchors, and testing the
+// trustedness of certificates.
+class NET_EXPORT TrustStore : public CertIssuerSource {
  public:
   TrustStore();
-  virtual ~TrustStore();
 
-  // Appends the trust anchors that match |cert|'s issuer name to |*matches|.
-  // |cert| and |matches| must not be null.
-  virtual void FindTrustAnchorsForCert(
-      const scoped_refptr<ParsedCertificate>& cert,
-      TrustAnchors* matches) const = 0;
+  virtual void GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                        CertificateTrust* trust) const = 0;
+
+  // Disable async issuers for TrustStore, as it isn't needed.
+  void AsyncGetIssuersOf(const ParsedCertificate* cert,
+                         std::unique_ptr<Request>* out_req) final;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TrustStore);
diff --git a/src/net/cert/internal/trust_store_collection.cc b/src/net/cert/internal/trust_store_collection.cc
index 7e004ae..b9a72e5 100644
--- a/src/net/cert/internal/trust_store_collection.cc
+++ b/src/net/cert/internal/trust_store_collection.cc
@@ -14,12 +14,34 @@
   stores_.push_back(store);
 }
 
-void TrustStoreCollection::FindTrustAnchorsForCert(
-    const scoped_refptr<ParsedCertificate>& cert,
-    TrustAnchors* matches) const {
+void TrustStoreCollection::SyncGetIssuersOf(const ParsedCertificate* cert,
+                                            ParsedCertificateList* issuers) {
   for (auto* store : stores_) {
-    store->FindTrustAnchorsForCert(cert, matches);
+    store->SyncGetIssuersOf(cert, issuers);
   }
 }
 
+void TrustStoreCollection::GetTrust(
+    const scoped_refptr<ParsedCertificate>& cert,
+    CertificateTrust* out_trust) const {
+  // The current aggregate result.
+  CertificateTrust result = CertificateTrust::ForUnspecified();
+
+  for (auto* store : stores_) {
+    CertificateTrust cur_trust;
+    store->GetTrust(cert, &cur_trust);
+
+    // * If any stores distrust the certificate, consider it untrusted.
+    // * If multiple stores consider it trusted, use the trust result from the
+    //   last one
+    if (!cur_trust.HasUnspecifiedTrust()) {
+      result = cur_trust;
+      if (result.IsDistrusted())
+        break;
+    }
+  }
+
+  *out_trust = result;
+}
+
 }  // namespace net
diff --git a/src/net/cert/internal/trust_store_collection.h b/src/net/cert/internal/trust_store_collection.h
index 74ece5f..3c5b004 100644
--- a/src/net/cert/internal/trust_store_collection.h
+++ b/src/net/cert/internal/trust_store_collection.h
@@ -26,8 +26,10 @@
   void AddTrustStore(TrustStore* store);
 
   // TrustStore implementation:
-  void FindTrustAnchorsForCert(const scoped_refptr<ParsedCertificate>& cert,
-                               TrustAnchors* matches) const override;
+  void SyncGetIssuersOf(const ParsedCertificate* cert,
+                        ParsedCertificateList* issuers) override;
+  void GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                CertificateTrust* trust) const override;
 
  private:
   std::vector<TrustStore*> stores_;
diff --git a/src/net/cert/internal/trust_store_collection_unittest.cc b/src/net/cert/internal/trust_store_collection_unittest.cc
index 198988e..20f73a3 100644
--- a/src/net/cert/internal/trust_store_collection_unittest.cc
+++ b/src/net/cert/internal/trust_store_collection_unittest.cc
@@ -16,41 +16,36 @@
  public:
   void SetUp() override {
     ParsedCertificateList chain;
+    ASSERT_TRUE(ReadCertChainFromFile(
+        "net/data/verify_certificate_chain_unittest/key-rollover/oldchain.pem",
+        &chain));
 
-    VerifyCertChainTest test;
-    ReadVerifyCertChainTestFromFile(
-        "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &test);
-    chain = test.chain;
-    oldroot_ = test.trust_anchor;
-
-    ASSERT_EQ(2U, chain.size());
+    ASSERT_EQ(3U, chain.size());
     target_ = chain[0];
     oldintermediate_ = chain[1];
+    oldroot_ = chain[2];
     ASSERT_TRUE(target_);
     ASSERT_TRUE(oldintermediate_);
     ASSERT_TRUE(oldroot_);
 
-    ReadVerifyCertChainTestFromFile(
-        "net/data/verify_certificate_chain_unittest/"
-        "key-rollover-longrolloverchain.pem",
-        &test);
-    chain = test.chain;
+    ASSERT_TRUE(
+        ReadCertChainFromFile("net/data/verify_certificate_chain_unittest/"
+                              "key-rollover/longrolloverchain.pem",
+                              &chain));
 
-    ASSERT_EQ(4U, chain.size());
+    ASSERT_EQ(5U, chain.size());
     newintermediate_ = chain[1];
-    newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]);
-    newrootrollover_ =
-        TrustAnchor::CreateFromCertificateNoConstraints(chain[3]);
+    newroot_ = chain[2];
+    newrootrollover_ = chain[3];
     ASSERT_TRUE(newintermediate_);
     ASSERT_TRUE(newroot_);
     ASSERT_TRUE(newrootrollover_);
   }
 
  protected:
-  scoped_refptr<TrustAnchor> oldroot_;
-  scoped_refptr<TrustAnchor> newroot_;
-  scoped_refptr<TrustAnchor> newrootrollover_;
+  scoped_refptr<ParsedCertificate> oldroot_;
+  scoped_refptr<ParsedCertificate> newroot_;
+  scoped_refptr<ParsedCertificate> newrootrollover_;
 
   scoped_refptr<ParsedCertificate> target_;
   scoped_refptr<ParsedCertificate> oldintermediate_;
@@ -59,31 +54,67 @@
 
 // Collection contains no stores, should return no results.
 TEST_F(TrustStoreCollectionTest, NoStores) {
-  TrustAnchors matches;
+  ParsedCertificateList issuers;
 
   TrustStoreCollection collection;
-  collection.FindTrustAnchorsForCert(target_, &matches);
+  collection.SyncGetIssuersOf(target_.get(), &issuers);
 
-  EXPECT_TRUE(matches.empty());
+  EXPECT_TRUE(issuers.empty());
 }
 
 // Collection contains only one store.
 TEST_F(TrustStoreCollectionTest, OneStore) {
-  TrustAnchors matches;
+  ParsedCertificateList issuers;
 
   TrustStoreCollection collection;
   TrustStoreInMemory in_memory;
   in_memory.AddTrustAnchor(newroot_);
   collection.AddTrustStore(&in_memory);
-  collection.FindTrustAnchorsForCert(newintermediate_, &matches);
+  collection.SyncGetIssuersOf(newintermediate_.get(), &issuers);
 
-  ASSERT_EQ(1U, matches.size());
-  EXPECT_EQ(newroot_, matches[0]);
+  ASSERT_EQ(1U, issuers.size());
+  EXPECT_EQ(newroot_.get(), issuers[0].get());
+
+  // newroot_ is trusted.
+  CertificateTrust trust;
+  collection.GetTrust(newroot_, &trust);
+  EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type);
+
+  // oldroot_ is not.
+  collection.GetTrust(oldroot_, &trust);
+  EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type);
+}
+
+// SyncGetIssuersOf() should append to its output parameters rather than assign
+// them.
+TEST_F(TrustStoreCollectionTest, OutputVectorsAppendedTo) {
+  ParsedCertificateList issuers;
+
+  // Populate the out-parameter with some values.
+  issuers.resize(3);
+
+  TrustStoreCollection collection;
+  TrustStoreInMemory in_memory;
+  in_memory.AddTrustAnchor(newroot_);
+  collection.AddTrustStore(&in_memory);
+  collection.SyncGetIssuersOf(newintermediate_.get(), &issuers);
+
+  ASSERT_EQ(4U, issuers.size());
+  EXPECT_EQ(newroot_.get(), issuers[3].get());
+
+  // newroot_ is trusted.
+  CertificateTrust trust;
+  collection.GetTrust(newroot_, &trust);
+  EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type);
+
+  // newrootrollover_ is not.
+  collection.GetTrust(newrootrollover_, &trust);
+  EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type);
 }
 
 // Collection contains two stores.
 TEST_F(TrustStoreCollectionTest, TwoStores) {
-  TrustAnchors matches;
+  ParsedCertificateList issuers;
 
   TrustStoreCollection collection;
   TrustStoreInMemory in_memory1;
@@ -92,11 +123,58 @@
   in_memory2.AddTrustAnchor(oldroot_);
   collection.AddTrustStore(&in_memory1);
   collection.AddTrustStore(&in_memory2);
-  collection.FindTrustAnchorsForCert(newintermediate_, &matches);
+  collection.SyncGetIssuersOf(newintermediate_.get(), &issuers);
 
-  ASSERT_EQ(2U, matches.size());
-  EXPECT_EQ(newroot_, matches[0]);
-  EXPECT_EQ(oldroot_, matches[1]);
+  ASSERT_EQ(2U, issuers.size());
+  EXPECT_EQ(newroot_.get(), issuers[0].get());
+  EXPECT_EQ(oldroot_.get(), issuers[1].get());
+
+  // newroot_ is trusted.
+  CertificateTrust trust;
+  collection.GetTrust(newroot_, &trust);
+  EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type);
+
+  // oldroot_ is trusted.
+  collection.GetTrust(oldroot_, &trust);
+  EXPECT_EQ(CertificateTrustType::TRUSTED_ANCHOR, trust.type);
+
+  // newrootrollover_ is not.
+  collection.GetTrust(newrootrollover_, &trust);
+  EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type);
+}
+
+// Collection contains two stores. The certificate is marked as trusted in one,
+// but distrusted in the other.
+TEST_F(TrustStoreCollectionTest, DistrustTakesPriority) {
+  ParsedCertificateList issuers;
+
+  TrustStoreCollection collection;
+  TrustStoreInMemory in_memory1;
+  TrustStoreInMemory in_memory2;
+
+  // newroot_ is trusted in store1, distrusted in store2.
+  in_memory1.AddTrustAnchor(newroot_);
+  in_memory2.AddDistrustedCertificateForTest(newroot_);
+
+  // oldintermediate is distrusted in store1, trusted in store2.
+  in_memory1.AddDistrustedCertificateForTest(oldintermediate_);
+  in_memory2.AddTrustAnchor(oldintermediate_);
+
+  collection.AddTrustStore(&in_memory1);
+  collection.AddTrustStore(&in_memory2);
+
+  // newroot_ is distrusted..
+  CertificateTrust trust;
+  collection.GetTrust(newroot_, &trust);
+  EXPECT_EQ(CertificateTrustType::DISTRUSTED, trust.type);
+
+  // oldintermediate_ is distrusted.
+  collection.GetTrust(oldintermediate_, &trust);
+  EXPECT_EQ(CertificateTrustType::DISTRUSTED, trust.type);
+
+  // newrootrollover_ is unspecified.
+  collection.GetTrust(newrootrollover_, &trust);
+  EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type);
 }
 
 }  // namespace
diff --git a/src/net/cert/internal/trust_store_in_memory.cc b/src/net/cert/internal/trust_store_in_memory.cc
index a3e9e3e..34f53b5 100644
--- a/src/net/cert/internal/trust_store_in_memory.cc
+++ b/src/net/cert/internal/trust_store_in_memory.cc
@@ -10,29 +10,66 @@
 TrustStoreInMemory::~TrustStoreInMemory() = default;
 
 void TrustStoreInMemory::Clear() {
-  anchors_.clear();
+  entries_.clear();
 }
 
-void TrustStoreInMemory::AddTrustAnchor(scoped_refptr<TrustAnchor> anchor) {
-  // TODO(mattm): should this check for duplicate anchors?
-  anchors_.insert(std::make_pair(anchor->normalized_subject().AsStringPiece(),
-                                 std::move(anchor)));
+void TrustStoreInMemory::AddTrustAnchor(scoped_refptr<ParsedCertificate> cert) {
+  AddCertificate(std::move(cert), CertificateTrust::ForTrustAnchor());
 }
 
-void TrustStoreInMemory::FindTrustAnchorsForCert(
-    const scoped_refptr<ParsedCertificate>& cert,
-    TrustAnchors* matches) const {
-  auto range = anchors_.equal_range(cert->normalized_issuer().AsStringPiece());
+void TrustStoreInMemory::AddTrustAnchorWithConstraints(
+    scoped_refptr<ParsedCertificate> cert) {
+  AddCertificate(std::move(cert),
+                 CertificateTrust::ForTrustAnchorEnforcingConstraints());
+}
+
+void TrustStoreInMemory::AddDistrustedCertificateForTest(
+    scoped_refptr<ParsedCertificate> cert) {
+  AddCertificate(std::move(cert), CertificateTrust::ForDistrusted());
+}
+
+void TrustStoreInMemory::SyncGetIssuersOf(const ParsedCertificate* cert,
+                                          ParsedCertificateList* issuers) {
+  auto range = entries_.equal_range(cert->normalized_issuer().AsStringPiece());
   for (auto it = range.first; it != range.second; ++it)
-    matches->push_back(it->second);
+    issuers->push_back(it->second.cert);
 }
 
-bool TrustStoreInMemory::Contains(const TrustAnchor* anchor) const {
-  for (const auto& it : anchors_) {
-    if (anchor == it.second.get())
+void TrustStoreInMemory::GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                                  CertificateTrust* trust) const {
+  auto range = entries_.equal_range(cert->normalized_subject().AsStringPiece());
+  for (auto it = range.first; it != range.second; ++it) {
+    if (cert.get() == it->second.cert.get() ||
+        cert->der_cert() == it->second.cert->der_cert()) {
+      *trust = it->second.trust;
+      // NOTE: ambiguity when there are duplicate entries.
+      return;
+    }
+  }
+  *trust = CertificateTrust::ForUnspecified();
+}
+
+bool TrustStoreInMemory::Contains(const ParsedCertificate* cert) const {
+  for (const auto& it : entries_) {
+    if (cert->der_cert() == it.second.cert->der_cert())
       return true;
   }
   return false;
 }
 
+TrustStoreInMemory::Entry::Entry() = default;
+TrustStoreInMemory::Entry::Entry(const Entry& other) = default;
+TrustStoreInMemory::Entry::~Entry() = default;
+
+void TrustStoreInMemory::AddCertificate(scoped_refptr<ParsedCertificate> cert,
+                                        const CertificateTrust& trust) {
+  Entry entry;
+  entry.cert = std::move(cert);
+  entry.trust = trust;
+
+  // TODO(mattm): should this check for duplicate certificates?
+  entries_.insert(
+      std::make_pair(entry.cert->normalized_subject().AsStringPiece(), entry));
+}
+
 }  // namespace net
diff --git a/src/net/cert/internal/trust_store_in_memory.h b/src/net/cert/internal/trust_store_in_memory.h
index 214d73e..19d542f 100644
--- a/src/net/cert/internal/trust_store_in_memory.h
+++ b/src/net/cert/internal/trust_store_in_memory.h
@@ -15,7 +15,7 @@
 namespace net {
 
 // A very simple implementation of a TrustStore, which contains a set of
-// trust anchors.
+// certificates and their trustedness.
 class NET_EXPORT TrustStoreInMemory : public TrustStore {
  public:
   TrustStoreInMemory();
@@ -24,23 +24,47 @@
   // Empties the trust store, resetting it to original state.
   void Clear();
 
-  void AddTrustAnchor(scoped_refptr<TrustAnchor> anchor);
+  // Adds a certificate as a trust anchor (only the SPKI and subject will be
+  // used during verification).
+  void AddTrustAnchor(scoped_refptr<ParsedCertificate> cert);
+
+  // Adds a certificate as a trust achor and extracts anchor constraints from
+  // the certificate. See VerifyCertificateChain for details.
+  void AddTrustAnchorWithConstraints(scoped_refptr<ParsedCertificate> cert);
+
+  // TODO(eroman): This is marked "ForTest" as the current implementation
+  // requires an exact match on the certificate DER (a wider match by say
+  // issuer/serial is probably what we would want for a real implementation).
+  void AddDistrustedCertificateForTest(scoped_refptr<ParsedCertificate> cert);
 
   // TrustStore implementation:
-  void FindTrustAnchorsForCert(const scoped_refptr<ParsedCertificate>& cert,
-                               TrustAnchors* matches) const override;
+  void SyncGetIssuersOf(const ParsedCertificate* cert,
+                        ParsedCertificateList* issuers) override;
+  void GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                CertificateTrust* trust) const override;
 
-  // Returns true if the trust store contains the given TrustAnchor instance.
-  // Note that this considers only pointer equality and not a more
-  // broad notion of equivalence based on the object's content.
-  bool Contains(const TrustAnchor* anchor) const;
+  // Returns true if the trust store contains the given ParsedCertificate
+  // (matches by DER).
+  bool Contains(const ParsedCertificate* cert) const;
 
  private:
-  // Multimap from normalized subject -> TrustAnchor.
-  std::unordered_multimap<base::StringPiece,
-                          scoped_refptr<TrustAnchor>,
-                          base::StringPieceHash>
-      anchors_;
+  struct Entry {
+    Entry();
+    Entry(const Entry& other);
+    ~Entry();
+
+    scoped_refptr<ParsedCertificate> cert;
+    CertificateTrust trust;
+  };
+
+  // Multimap from normalized subject -> Entry.
+  std::unordered_multimap<base::StringPiece, Entry, base::StringPieceHash>
+      entries_;
+
+  // Adds a certificate with the specified trust settings. Both trusted and
+  // distrusted certificates require a full DER match.
+  void AddCertificate(scoped_refptr<ParsedCertificate> cert,
+                      const CertificateTrust& trust);
 
   DISALLOW_COPY_AND_ASSIGN(TrustStoreInMemory);
 };
diff --git a/src/net/cert/internal/trust_store_mac.cc b/src/net/cert/internal/trust_store_mac.cc
index ba31ffb..13c4be1 100644
--- a/src/net/cert/internal/trust_store_mac.cc
+++ b/src/net/cert/internal/trust_store_mac.cc
@@ -178,20 +178,30 @@
   return TrustStatus::UNSPECIFIED;
 }
 
-// Filters an array of SecCertificateRef by trust for |policy_oid|, returning
-// the results as TrustAnchors in |out_anchors|.
-void FilterTrustedCertificates(CFArrayRef matching_items,
-                               const CFStringRef policy_oid,
-                               TrustAnchors* out_anchors) {
+}  // namespace
+
+TrustStoreMac::TrustStoreMac(CFTypeRef policy_oid)
+    : policy_oid_(base::mac::CFCastStrict<CFStringRef>(policy_oid)) {
+  DCHECK(policy_oid_);
+}
+
+TrustStoreMac::~TrustStoreMac() = default;
+
+void TrustStoreMac::SyncGetIssuersOf(const ParsedCertificate* cert,
+                                     ParsedCertificateList* issuers) {
+  base::ScopedCFTypeRef<CFDataRef> name_data = GetMacNormalizedIssuer(cert);
+
+  base::ScopedCFTypeRef<CFArrayRef> matching_items =
+      FindMatchingCertificatesForMacNormalizedSubject(name_data);
+  if (!matching_items)
+    return;
+
+  // Convert to ParsedCertificate.
   for (CFIndex i = 0, item_count = CFArrayGetCount(matching_items);
        i < item_count; ++i) {
     SecCertificateRef match_cert_handle = reinterpret_cast<SecCertificateRef>(
         const_cast<void*>(CFArrayGetValueAtIndex(matching_items, i)));
 
-    if (IsSecCertificateTrustedForPolicy(match_cert_handle, policy_oid) !=
-        TrustStatus::TRUSTED)
-      continue;
-
     base::ScopedCFTypeRef<CFDataRef> der_data(
         SecCertificateCopyData(match_cert_handle));
     if (!der_data) {
@@ -213,26 +223,35 @@
       continue;
     }
 
-    out_anchors->push_back(TrustAnchor::CreateFromCertificateNoConstraints(
-        std::move(anchor_cert)));
+    issuers->push_back(std::move(anchor_cert));
   }
 }
 
-}  // namespace
+void TrustStoreMac::GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                             CertificateTrust* trust) const {
+  // TODO(eroman): Inefficient -- path building will convert between
+  // SecCertificateRef and ParsedCertificate representations multiple times
+  // (when getting the issuers, and again here).
+  base::ScopedCFTypeRef<SecCertificateRef> cert_handle =
+      x509_util::CreateSecCertificateFromBytes(cert->der_cert().UnsafeData(),
+                                               cert->der_cert().Length());
 
-TrustStoreMac::TrustStoreMac(CFTypeRef policy_oid)
-    : policy_oid_(base::mac::CFCastStrict<CFStringRef>(policy_oid)) {
-  DCHECK(policy_oid_);
-}
+  TrustStatus trust_status =
+      IsSecCertificateTrustedForPolicy(cert_handle, policy_oid_);
+  switch (trust_status) {
+    case TrustStatus::TRUSTED:
+      *trust = CertificateTrust::ForTrustAnchor();
+      return;
+    case TrustStatus::DISTRUSTED:
+      *trust = CertificateTrust::ForDistrusted();
+      return;
+    case TrustStatus::UNSPECIFIED:
+      *trust = CertificateTrust::ForUnspecified();
+      return;
+  }
 
-TrustStoreMac::~TrustStoreMac() = default;
-
-void TrustStoreMac::FindTrustAnchorsForCert(
-    const scoped_refptr<ParsedCertificate>& cert,
-    TrustAnchors* out_anchors) const {
-  base::ScopedCFTypeRef<CFDataRef> name_data = GetMacNormalizedIssuer(cert);
-
-  FindTrustAnchorsByMacNormalizedSubject(name_data, out_anchors);
+  *trust = CertificateTrust::ForUnspecified();
+  return;
 }
 
 // static
@@ -315,7 +334,7 @@
 
 // static
 base::ScopedCFTypeRef<CFDataRef> TrustStoreMac::GetMacNormalizedIssuer(
-    const scoped_refptr<ParsedCertificate>& cert) {
+    const ParsedCertificate* cert) {
   base::ScopedCFTypeRef<CFDataRef> name_data;
   // There does not appear to be any public API to get the normalized version
   // of a Name without creating a SecCertificate.
@@ -336,16 +355,4 @@
   return name_data;
 }
 
-void TrustStoreMac::FindTrustAnchorsByMacNormalizedSubject(
-    CFDataRef name_data,
-    TrustAnchors* out_anchors) const {
-  base::ScopedCFTypeRef<CFArrayRef> scoped_matching_items =
-      FindMatchingCertificatesForMacNormalizedSubject(name_data);
-  if (!scoped_matching_items)
-    return;
-
-  FilterTrustedCertificates(scoped_matching_items.get(), policy_oid_,
-                            out_anchors);
-}
-
 }  // namespace net
diff --git a/src/net/cert/internal/trust_store_mac.h b/src/net/cert/internal/trust_store_mac.h
index 1c99b90..666da71 100644
--- a/src/net/cert/internal/trust_store_mac.h
+++ b/src/net/cert/internal/trust_store_mac.h
@@ -31,8 +31,10 @@
   ~TrustStoreMac() override;
 
   // TrustStore implementation:
-  void FindTrustAnchorsForCert(const scoped_refptr<ParsedCertificate>& cert,
-                               TrustAnchors* matches) const override;
+  void SyncGetIssuersOf(const ParsedCertificate* cert,
+                        ParsedCertificateList* issuers) override;
+  void GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                CertificateTrust* trust) const override;
 
  private:
   FRIEND_TEST_ALL_PREFIXES(TrustStoreMacTest, MultiRootNotTrusted);
@@ -48,12 +50,7 @@
   // comparing, roughly similar to RFC3280's normalization scheme. The
   // normalized form is used for any database lookups and comparisons.
   static base::ScopedCFTypeRef<CFDataRef> GetMacNormalizedIssuer(
-      const scoped_refptr<ParsedCertificate>& cert);
-
-  // Finds trust anchors with the Subject |name_data|, which should be
-  // normalized as by the OS.
-  void FindTrustAnchorsByMacNormalizedSubject(CFDataRef name_data,
-                                              TrustAnchors* matches) const;
+      const ParsedCertificate* cert);
 
   const CFStringRef policy_oid_;
 
diff --git a/src/net/cert/internal/trust_store_mac_unittest.cc b/src/net/cert/internal/trust_store_mac_unittest.cc
index bba5995..6c1bccf 100644
--- a/src/net/cert/internal/trust_store_mac_unittest.cc
+++ b/src/net/cert/internal/trust_store_mac_unittest.cc
@@ -127,23 +127,24 @@
   ASSERT_TRUE(ReadTestCert("multi-root-E-by-E.pem", &e_by_e));
 
   base::ScopedCFTypeRef<CFDataRef> normalized_name_b =
-      TrustStoreMac::GetMacNormalizedIssuer(a_by_b);
+      TrustStoreMac::GetMacNormalizedIssuer(a_by_b.get());
   ASSERT_TRUE(normalized_name_b);
   base::ScopedCFTypeRef<CFDataRef> normalized_name_c =
-      TrustStoreMac::GetMacNormalizedIssuer(b_by_c);
+      TrustStoreMac::GetMacNormalizedIssuer(b_by_c.get());
   ASSERT_TRUE(normalized_name_c);
   base::ScopedCFTypeRef<CFDataRef> normalized_name_f =
-      TrustStoreMac::GetMacNormalizedIssuer(b_by_f);
+      TrustStoreMac::GetMacNormalizedIssuer(b_by_f.get());
   ASSERT_TRUE(normalized_name_f);
   base::ScopedCFTypeRef<CFDataRef> normalized_name_d =
-      TrustStoreMac::GetMacNormalizedIssuer(c_by_d);
+      TrustStoreMac::GetMacNormalizedIssuer(c_by_d.get());
   ASSERT_TRUE(normalized_name_d);
   base::ScopedCFTypeRef<CFDataRef> normalized_name_e =
-      TrustStoreMac::GetMacNormalizedIssuer(f_by_e);
+      TrustStoreMac::GetMacNormalizedIssuer(f_by_e.get());
   ASSERT_TRUE(normalized_name_e);
 
   // Test that the matching keychain items are found, even though they aren't
   // trusted.
+  // TODO(eroman): These tests could be using TrustStore::SyncGetIssuersOf().
   {
     base::ScopedCFTypeRef<CFArrayRef> scoped_matching_items =
         TrustStoreMac::FindMatchingCertificatesForMacNormalizedSubject(
@@ -190,14 +191,14 @@
         UnorderedElementsAreArray(ParsedCertificateListAsDER({e_by_e})));
   }
 
-  // None of the certs should return any matching TrustAnchors, since the test
-  // certs in the keychain aren't trusted (unless someone manually added and
-  // trusted the test certs on the machine the test is being run on).
+  // Verify that none of the added certificates are considered trusted (since
+  // the test certs in the keychain aren't trusted, unless someone manually
+  // added and trusted the test certs on the machine the test is being run on).
   for (const auto& cert :
        {a_by_b, b_by_c, b_by_f, c_by_d, c_by_e, f_by_e, d_by_d, e_by_e}) {
-    TrustAnchors matching_anchors;
-    trust_store.FindTrustAnchorsForCert(cert, &matching_anchors);
-    EXPECT_EQ(0u, matching_anchors.size());
+    CertificateTrust trust = CertificateTrust::ForTrustAnchor();
+    trust_store.GetTrust(cert.get(), &trust);
+    EXPECT_EQ(CertificateTrustType::UNSPECIFIED, trust.type);
   }
 }
 
@@ -262,7 +263,12 @@
                    << errors.ToDebugString();
       continue;
     }
+    // Check if this cert is considered a trust anchor by TrustStoreMac.
+    CertificateTrust cert_trust;
+    trust_store.GetTrust(cert, &cert_trust);
+    bool is_trust_anchor = cert_trust.IsTrustAnchor();
 
+    // Check if this cert is considered a trust anchor by the OS.
     base::ScopedCFTypeRef<SecCertificateRef> cert_handle(
         x509_util::CreateSecCertificateFromBytes(cert->der_cert().UnsafeData(),
                                                  cert->der_cert().Length()));
@@ -270,30 +276,6 @@
       ADD_FAILURE() << "CreateOSCertHandleFromBytes " << hash_text;
       continue;
     }
-    base::ScopedCFTypeRef<CFDataRef> mac_normalized_subject;
-    {
-      base::AutoLock lock(crypto::GetMacSecurityServicesLock());
-      mac_normalized_subject.reset(
-          SecCertificateCopyNormalizedSubjectContent(cert_handle, nullptr));
-    }
-    if (!mac_normalized_subject) {
-      ADD_FAILURE() << "SecCertificateCopyNormalizedSubjectContent "
-                    << hash_text;
-      continue;
-    }
-
-    // Check if this cert is considered a trust anchor by TrustStoreMac.
-    TrustAnchors trust_anchors;
-    trust_store.FindTrustAnchorsByMacNormalizedSubject(mac_normalized_subject,
-                                                       &trust_anchors);
-    bool is_trust_anchor = false;
-    for (const auto& anchor : trust_anchors) {
-      ASSERT_TRUE(anchor->cert());
-      if (anchor->cert()->der_cert() == cert->der_cert())
-        is_trust_anchor = true;
-    }
-
-    // Check if this cert is considered a trust anchor by the OS.
     base::ScopedCFTypeRef<SecTrustRef> trust;
     {
       base::AutoLock lock(crypto::GetMacSecurityServicesLock());
diff --git a/src/net/cert/internal/trust_store_nss.cc b/src/net/cert/internal/trust_store_nss.cc
index 0a67939..fb43321 100644
--- a/src/net/cert/internal/trust_store_nss.cc
+++ b/src/net/cert/internal/trust_store_nss.cc
@@ -11,6 +11,7 @@
 #include "crypto/nss_util.h"
 #include "net/cert/internal/cert_errors.h"
 #include "net/cert/internal/parsed_certificate.h"
+#include "net/cert/scoped_nss_types.h"
 #include "net/cert/x509_util.h"
 
 // TODO(mattm): structure so that supporting ChromeOS multi-profile stuff is
@@ -24,9 +25,8 @@
 
 TrustStoreNSS::~TrustStoreNSS() = default;
 
-void TrustStoreNSS::FindTrustAnchorsForCert(
-    const scoped_refptr<ParsedCertificate>& cert,
-    TrustAnchors* out_anchors) const {
+void TrustStoreNSS::SyncGetIssuersOf(const ParsedCertificate* cert,
+                                     ParsedCertificateList* issuers) {
   crypto::EnsureNSSInit();
 
   SECItem name;
@@ -46,31 +46,71 @@
 
   for (CERTCertListNode* node = CERT_LIST_HEAD(found_certs);
        !CERT_LIST_END(node, found_certs); node = CERT_LIST_NEXT(node)) {
-    CERTCertTrust trust;
-    if (CERT_GetCertTrust(node->cert, &trust) != SECSuccess)
-      continue;
-
-    // TODO(mattm): handle explicit distrust (blacklisting)?
-    const int ca_trust = CERTDB_TRUSTED_CA;
-    if ((SEC_GET_TRUST_FLAGS(&trust, trust_type_) & ca_trust) != ca_trust)
-      continue;
-
-    CertErrors errors;
-    scoped_refptr<ParsedCertificate> anchor_cert = ParsedCertificate::Create(
+    CertErrors parse_errors;
+    scoped_refptr<ParsedCertificate> cur_cert = ParsedCertificate::Create(
         x509_util::CreateCryptoBuffer(node->cert->derCert.data,
                                       node->cert->derCert.len),
-        {}, &errors);
-    if (!anchor_cert) {
+        {}, &parse_errors);
+
+    if (!cur_cert) {
       // TODO(crbug.com/634443): return errors better.
       LOG(ERROR) << "Error parsing issuer certificate:\n"
-                 << errors.ToDebugString();
+                 << parse_errors.ToDebugString();
       continue;
     }
 
-    out_anchors->push_back(TrustAnchor::CreateFromCertificateNoConstraints(
-        std::move(anchor_cert)));
+    issuers->push_back(std::move(cur_cert));
   }
   CERT_DestroyCertList(found_certs);
 }
 
+void TrustStoreNSS::GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                             CertificateTrust* out_trust) const {
+  // TODO(eroman): Inefficient -- path building will convert between
+  // CERTCertificate and ParsedCertificate representations multiple times
+  // (when getting the issuers, and again here).
+
+  // Lookup the certificate by Issuer + Serial number. Note that
+  // CERT_FindCertByDERCert() doesn't check for equal DER, just matching issuer
+  // + serial number.
+  SECItem der_cert;
+  der_cert.data = const_cast<uint8_t*>(cert->der_cert().UnsafeData());
+  der_cert.len = cert->der_cert().Length();
+  der_cert.type = siDERCertBuffer;
+  ScopedCERTCertificate nss_matched_cert(
+      CERT_FindCertByDERCert(CERT_GetDefaultCertDB(), &der_cert));
+  if (!nss_matched_cert) {
+    *out_trust = CertificateTrust::ForUnspecified();
+    return;
+  }
+
+  // Determine the trustedness of the matched certificate.
+  CERTCertTrust trust;
+  if (CERT_GetCertTrust(nss_matched_cert.get(), &trust) != SECSuccess) {
+    *out_trust = CertificateTrust::ForUnspecified();
+    return;
+  }
+
+  // TODO(eroman): Determine if |nss_matched_cert| is distrusted.
+
+  // Determine if the certificate is a trust anchor.
+  const int ca_trust = CERTDB_TRUSTED_CA;
+  bool is_trusted =
+      (SEC_GET_TRUST_FLAGS(&trust, trust_type_) & ca_trust) == ca_trust;
+
+  // To consider |cert| trusted, need to additionally check that
+  // |cert| is the same as |nss_matched_cert|. This is because the lookup in NSS
+  // was only by issuer + serial number, so could be for a different
+  // SPKI.
+  if (is_trusted &&
+      (cert->der_cert() == der::Input(nss_matched_cert->derCert.data,
+                                      nss_matched_cert->derCert.len))) {
+    *out_trust = CertificateTrust::ForTrustAnchor();
+    return;
+  }
+
+  *out_trust = CertificateTrust::ForUnspecified();
+  return;
+}
+
 }  // namespace net
diff --git a/src/net/cert/internal/trust_store_nss.h b/src/net/cert/internal/trust_store_nss.h
index 760d499..fd66b45 100644
--- a/src/net/cert/internal/trust_store_nss.h
+++ b/src/net/cert/internal/trust_store_nss.h
@@ -22,9 +22,13 @@
   explicit TrustStoreNSS(SECTrustType trust_type);
   ~TrustStoreNSS() override;
 
+  // CertIssuerSource implementation:
+  void SyncGetIssuersOf(const ParsedCertificate* cert,
+                        ParsedCertificateList* issuers) override;
+
   // TrustStore implementation:
-  void FindTrustAnchorsForCert(const scoped_refptr<ParsedCertificate>& cert,
-                               TrustAnchors* matches) const override;
+  void GetTrust(const scoped_refptr<ParsedCertificate>& cert,
+                CertificateTrust* trust) const override;
 
  private:
   SECTrustType trust_type_;
diff --git a/src/net/cert/internal/trust_store_nss_unittest.cc b/src/net/cert/internal/trust_store_nss_unittest.cc
index e83ba67..53f4ef1 100644
--- a/src/net/cert/internal/trust_store_nss_unittest.cc
+++ b/src/net/cert/internal/trust_store_nss_unittest.cc
@@ -10,6 +10,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "crypto/scoped_test_nss_db.h"
+#include "net/cert/internal/cert_issuer_source_sync_unittest.h"
 #include "net/cert/internal/test_helpers.h"
 #include "net/cert/scoped_nss_types.h"
 #include "net/cert/x509_certificate.h"
@@ -23,31 +24,27 @@
  public:
   void SetUp() override {
     ASSERT_TRUE(test_nssdb_.is_open());
-
-    VerifyCertChainTest test;
     ParsedCertificateList chain;
-    ReadVerifyCertChainTestFromFile(
-        "net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem",
-        &test);
-    chain = test.chain;
-    oldroot_ = test.trust_anchor;
+    ReadCertChainFromFile(
+        "net/data/verify_certificate_chain_unittest/key-rollover/oldchain.pem",
+        &chain);
 
-    ASSERT_EQ(2U, chain.size());
+    ASSERT_EQ(3U, chain.size());
     target_ = chain[0];
     oldintermediate_ = chain[1];
+    oldroot_ = chain[2];
     ASSERT_TRUE(target_);
     ASSERT_TRUE(oldintermediate_);
     ASSERT_TRUE(oldroot_);
 
-    ReadVerifyCertChainTestFromFile(
+    ReadCertChainFromFile(
         "net/data/verify_certificate_chain_unittest/"
-        "key-rollover-longrolloverchain.pem",
-        &test);
-    chain = test.chain;
+        "key-rollover/longrolloverchain.pem",
+        &chain);
 
-    ASSERT_EQ(4U, chain.size());
+    ASSERT_EQ(5U, chain.size());
     newintermediate_ = chain[1];
-    newroot_ = TrustAnchor::CreateFromCertificateNoConstraints(chain[2]);
+    newroot_ = chain[2];
     newrootrollover_ = chain[3];
     ASSERT_TRUE(newintermediate_);
     ASSERT_TRUE(newroot_);
@@ -77,13 +74,27 @@
     AddCertToNSS(target_.get());
     AddCertToNSS(oldintermediate_.get());
     AddCertToNSS(newintermediate_.get());
-    AddCertToNSS(oldroot_->cert().get());
-    AddCertToNSS(newroot_->cert().get());
+    AddCertToNSS(oldroot_.get());
+    AddCertToNSS(newroot_.get());
     AddCertToNSS(newrootrollover_.get());
+
+    // Check that the certificates can be retrieved as expected.
+    EXPECT_TRUE(
+        TrustStoreContains(target_, {newintermediate_, oldintermediate_}));
+
+    EXPECT_TRUE(TrustStoreContains(newintermediate_,
+                                   {newroot_, newrootrollover_, oldroot_}));
+    EXPECT_TRUE(TrustStoreContains(oldintermediate_,
+                                   {newroot_, newrootrollover_, oldroot_}));
+    EXPECT_TRUE(TrustStoreContains(newrootrollover_,
+                                   {newroot_, newrootrollover_, oldroot_}));
+    EXPECT_TRUE(
+        TrustStoreContains(oldroot_, {newroot_, newrootrollover_, oldroot_}));
+    EXPECT_TRUE(
+        TrustStoreContains(newroot_, {newroot_, newrootrollover_, oldroot_}));
   }
 
   // Trusts |cert|. Assumes the cert was already imported into NSS.
-  void TrustCert(const TrustAnchor* anchor) { TrustCert(anchor->cert().get()); }
   void TrustCert(const ParsedCertificate* cert) {
     SECItem der_cert;
     der_cert.data = const_cast<uint8_t*>(cert->der_cert().UnsafeData());
@@ -104,30 +115,64 @@
 
  protected:
   bool TrustStoreContains(scoped_refptr<ParsedCertificate> cert,
-                          TrustAnchors expected_matches) {
-    TrustAnchors matches;
-    trust_store_nss_->FindTrustAnchorsForCert(cert, &matches);
+                          ParsedCertificateList expected_matches) {
+    ParsedCertificateList matches;
+    trust_store_nss_->SyncGetIssuersOf(cert.get(), &matches);
 
-    std::vector<der::Input> der_result_matches;
+    std::vector<std::string> name_result_matches;
     for (const auto& it : matches)
-      der_result_matches.push_back(it->cert()->der_cert());
-    std::sort(der_result_matches.begin(), der_result_matches.end());
+      name_result_matches.push_back(GetCertString(it));
+    std::sort(name_result_matches.begin(), name_result_matches.end());
 
-    std::vector<der::Input> der_expected_matches;
+    std::vector<std::string> name_expected_matches;
     for (const auto& it : expected_matches)
-      der_expected_matches.push_back(it->cert()->der_cert());
-    std::sort(der_expected_matches.begin(), der_expected_matches.end());
+      name_expected_matches.push_back(GetCertString(it));
+    std::sort(name_expected_matches.begin(), name_expected_matches.end());
 
-    if (der_expected_matches == der_result_matches)
+    if (name_expected_matches == name_result_matches)
       return true;
 
     // Print some extra information for debugging.
-    EXPECT_EQ(der_expected_matches, der_result_matches);
+    EXPECT_EQ(name_expected_matches, name_result_matches);
     return false;
   }
 
-  scoped_refptr<TrustAnchor> oldroot_;
-  scoped_refptr<TrustAnchor> newroot_;
+  // Give simpler names to certificate DER (for identifying them in tests by
+  // their symbolic name).
+  std::string GetCertString(
+      const scoped_refptr<ParsedCertificate>& cert) const {
+    if (cert->der_cert() == oldroot_->der_cert())
+      return "oldroot_";
+    if (cert->der_cert() == newroot_->der_cert())
+      return "newroot_";
+    if (cert->der_cert() == target_->der_cert())
+      return "target_";
+    if (cert->der_cert() == oldintermediate_->der_cert())
+      return "oldintermediate_";
+    if (cert->der_cert() == newintermediate_->der_cert())
+      return "newintermediate_";
+    if (cert->der_cert() == newrootrollover_->der_cert())
+      return "newrootrollover_";
+    return cert->der_cert().AsString();
+  }
+
+  bool HasTrust(const ParsedCertificateList& certs,
+                CertificateTrustType expected_trust) {
+    bool success = true;
+    for (const scoped_refptr<ParsedCertificate>& cert : certs) {
+      CertificateTrust trust;
+      trust_store_nss_->GetTrust(cert.get(), &trust);
+      if (trust.type != expected_trust) {
+        EXPECT_EQ(expected_trust, trust.type) << GetCertString(cert);
+        success = false;
+      }
+    }
+
+    return success;
+  }
+
+  scoped_refptr<ParsedCertificate> oldroot_;
+  scoped_refptr<ParsedCertificate> newroot_;
 
   scoped_refptr<ParsedCertificate> target_;
   scoped_refptr<ParsedCertificate> oldintermediate_;
@@ -141,64 +186,101 @@
 // Without adding any certs to the NSS DB, should get no anchor results for any
 // of the test certs.
 TEST_F(TrustStoreNSSTest, CertsNotPresent) {
-  EXPECT_TRUE(TrustStoreContains(target_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newintermediate_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newroot_->cert(), TrustAnchors()));
+  EXPECT_TRUE(TrustStoreContains(target_, ParsedCertificateList()));
+  EXPECT_TRUE(TrustStoreContains(newintermediate_, ParsedCertificateList()));
+  EXPECT_TRUE(TrustStoreContains(newroot_, ParsedCertificateList()));
 }
 
 // If certs are present in NSS DB but aren't marked as trusted, should get no
 // anchor results for any of the test certs.
 TEST_F(TrustStoreNSSTest, CertsPresentButNotTrusted) {
   AddCertsToNSS();
-  EXPECT_TRUE(TrustStoreContains(newintermediate_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(target_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newintermediate_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newroot_->cert(), TrustAnchors()));
+
+  // None of the certificates are trusted.
+  EXPECT_TRUE(HasTrust({oldroot_, newroot_, target_, oldintermediate_,
+                        newintermediate_, newrootrollover_},
+                       CertificateTrustType::UNSPECIFIED));
 }
 
-// A self-signed CA certificate is trusted. FindTrustAnchorsForCert should
-// return the cert on any intermediates with a matching issuer, and on any
-// matching self-signed/self-issued CA certs.
+// Trust a single self-signed CA certificate.
 TEST_F(TrustStoreNSSTest, TrustedCA) {
   AddCertsToNSS();
   TrustCert(newroot_.get());
-  EXPECT_TRUE(TrustStoreContains(target_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newintermediate_, {newroot_}));
-  EXPECT_TRUE(TrustStoreContains(oldintermediate_, {newroot_}));
-  EXPECT_TRUE(TrustStoreContains(newrootrollover_, {newroot_}));
-  EXPECT_TRUE(TrustStoreContains(oldroot_->cert(), {newroot_}));
-  EXPECT_TRUE(TrustStoreContains(newroot_->cert(), {newroot_}));
+
+  // Only one of the certificates are trusted.
+  EXPECT_TRUE(HasTrust(
+      {oldroot_, target_, oldintermediate_, newintermediate_, newrootrollover_},
+      CertificateTrustType::UNSPECIFIED));
+
+  EXPECT_TRUE(HasTrust({newroot_}, CertificateTrustType::TRUSTED_ANCHOR));
 }
 
-// When an intermediate certificate is trusted, FindTrustAnchorsForCert should
-// return that cert on any certs issued by the intermediate, but not for the
-// intermediate itself (or the CAs).
+// Trust a single intermediate certificate.
 TEST_F(TrustStoreNSSTest, TrustedIntermediate) {
   AddCertsToNSS();
   TrustCert(newintermediate_.get());
-  EXPECT_TRUE(TrustStoreContains(
-      target_,
-      {TrustAnchor::CreateFromCertificateNoConstraints(newintermediate_)}));
-  EXPECT_TRUE(TrustStoreContains(newintermediate_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(oldintermediate_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newrootrollover_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(oldroot_->cert(), TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newroot_->cert(), TrustAnchors()));
+
+  EXPECT_TRUE(HasTrust(
+      {oldroot_, newroot_, target_, oldintermediate_, newrootrollover_},
+      CertificateTrustType::UNSPECIFIED));
+  EXPECT_TRUE(
+      HasTrust({newintermediate_}, CertificateTrustType::TRUSTED_ANCHOR));
 }
 
-// Multiple self-signed CA certificates with the same name are trusted.
-// FindTrustAnchorsForCert should return all these certs on any intermediates
-// with a matching issuer, and on any matching self-signed/self-issued CA certs.
+// Trust multiple self-signed CA certificates with the same name.
 TEST_F(TrustStoreNSSTest, MultipleTrustedCAWithSameSubject) {
   AddCertsToNSS();
   TrustCert(oldroot_.get());
   TrustCert(newroot_.get());
-  EXPECT_TRUE(TrustStoreContains(target_, TrustAnchors()));
-  EXPECT_TRUE(TrustStoreContains(newintermediate_, {newroot_, oldroot_}));
-  EXPECT_TRUE(TrustStoreContains(oldintermediate_, {newroot_, oldroot_}));
-  EXPECT_TRUE(TrustStoreContains(oldroot_->cert(), {newroot_, oldroot_}));
+
+  EXPECT_TRUE(
+      HasTrust({target_, oldintermediate_, newintermediate_, newrootrollover_},
+               CertificateTrustType::UNSPECIFIED));
+  EXPECT_TRUE(
+      HasTrust({oldroot_, newroot_}, CertificateTrustType::TRUSTED_ANCHOR));
 }
 
+class TrustStoreNSSTestDelegate {
+ public:
+  TrustStoreNSSTestDelegate() : trust_store_nss_(trustSSL) {}
+
+  void AddCert(scoped_refptr<ParsedCertificate> cert) {
+    ASSERT_TRUE(test_nssdb_.is_open());
+    std::string nickname = GetUniqueNickname();
+    ScopedCERTCertificate nss_cert(
+        X509Certificate::CreateOSCertHandleFromBytesWithNickname(
+            cert->der_cert().AsStringPiece().data(), cert->der_cert().Length(),
+            nickname.c_str()));
+    ASSERT_TRUE(nss_cert);
+    SECStatus srv =
+        PK11_ImportCert(test_nssdb_.slot(), nss_cert.get(), CK_INVALID_HANDLE,
+                        nickname.c_str(), PR_FALSE /* includeTrust (unused) */);
+    ASSERT_EQ(SECSuccess, srv);
+  }
+
+  CertIssuerSource& source() { return trust_store_nss_; }
+
+ protected:
+  std::string GetUniqueNickname() {
+    return "cert_issuer_source_nss_unittest" +
+           base::UintToString(nickname_counter_++);
+  }
+
+  crypto::ScopedTestNSSDB test_nssdb_;
+  TrustStoreNSS trust_store_nss_;
+  unsigned int nickname_counter_ = 0;
+};
+
+INSTANTIATE_TYPED_TEST_CASE_P(TrustStoreNSSTest2,
+                              CertIssuerSourceSyncTest,
+                              TrustStoreNSSTestDelegate);
+
+// NSS doesn't normalize UTF8String values, so use the not-normalized version of
+// those tests.
+INSTANTIATE_TYPED_TEST_CASE_P(TrustStoreNSSNotNormalizedTest,
+                              CertIssuerSourceSyncNotNormalizedTest,
+                              TrustStoreNSSTestDelegate);
+
 }  // namespace
 
 }  // namespace net
diff --git a/src/net/cert/internal/verify_certificate_chain.cc b/src/net/cert/internal/verify_certificate_chain.cc
index 9a1f6e0..1a0010e 100644
--- a/src/net/cert/internal/verify_certificate_chain.cc
+++ b/src/net/cert/internal/verify_certificate_chain.cc
@@ -37,6 +37,8 @@
 DEFINE_CERT_ERROR_ID(kInvalidOrUnsupportedSignatureAlgorithm,
                      "Invalid or unsupported signature algorithm");
 DEFINE_CERT_ERROR_ID(kChainIsEmpty, "Chain is empty");
+DEFINE_CERT_ERROR_ID(kChainIsLength1,
+                     "TODO: Cannot verify a chain of length 1");
 DEFINE_CERT_ERROR_ID(kUnconsumedCriticalExtension,
                      "Unconsumed critical extension");
 DEFINE_CERT_ERROR_ID(
@@ -60,6 +62,9 @@
                      "The extended key usage does not include server auth");
 DEFINE_CERT_ERROR_ID(kEkuLacksClientAuth,
                      "The extended key usage does not include client auth");
+DEFINE_CERT_ERROR_ID(kCertIsDistrusted, "Certificate is distrusted");
+DEFINE_CERT_ERROR_ID(kCertIsNotTrustAnchor,
+                     "Certificate is not a trust anchor");
 
 bool IsHandledCriticalExtensionOid(const der::Input& oid) {
   if (oid == BasicConstraintsOid())
@@ -439,24 +444,16 @@
   VerifyTargetCertHasConsistentCaBits(cert, errors);
 }
 
-// Initializes the path validation algorithm given anchor constraints. This
-// follows the description in RFC 5937
-void ProcessTrustAnchorConstraints(
-    const TrustAnchor& trust_anchor,
+// Enforces trust anchor constraints compatibile with RFC 5937.
+//
+// Note that the anchor constraints are encoded via the attached certificate
+// itself.
+void ApplyTrustAnchorConstraints(
+    const ParsedCertificate& cert,
     KeyPurpose required_key_purpose,
     size_t* max_path_length_ptr,
     std::vector<const NameConstraints*>* name_constraints_list,
     CertErrors* errors) {
-  // In RFC 5937 the enforcement of anchor constraints is governed by the input
-  // enforceTrustAnchorConstraints to path validation. In our implementation
-  // this is always on, and enforcement is controlled solely by whether or not
-  // the trust anchor specified constraints.
-  if (!trust_anchor.enforces_constraints())
-    return;
-
-  // Anchor constraints are encoded via the attached certificate.
-  const ParsedCertificate& cert = *trust_anchor.cert();
-
   // This is not part of RFC 5937 nor RFC 5280, but matches the EKU handling
   // done for intermediates (described in Web PKI's Baseline Requirements).
   VerifyExtendedKeyUsage(cert, required_key_purpose, errors);
@@ -498,16 +495,57 @@
   VerifyNoUnconsumedCriticalExtensions(cert, errors);
 }
 
+// Initializes the path validation algorithm given anchor constraints. This
+// follows the description in RFC 5937
+void ProcessRootCertificate(
+    const ParsedCertificate& cert,
+    const CertificateTrust& trust,
+    KeyPurpose required_key_purpose,
+    size_t* max_path_length_ptr,
+    std::vector<const NameConstraints*>* name_constraints_list,
+    der::Input* working_spki,
+    der::Input* working_normalized_issuer_name,
+    CertErrors* errors) {
+  // Use the certificate's SPKI and subject when verifying the next certificate.
+  // Note this is initialized even in the case of untrusted roots (they already
+  // emit an error for the distrust).
+  *working_spki = cert.tbs().spki_tlv;
+  *working_normalized_issuer_name = cert.normalized_subject();
+
+  switch (trust.type) {
+    case CertificateTrustType::UNSPECIFIED:
+      // Doesn't chain to a trust anchor - implicitly distrusted
+      errors->AddError(kCertIsNotTrustAnchor);
+      break;
+    case CertificateTrustType::DISTRUSTED:
+      // Chains to an actively distrusted certificate.
+      //
+      // TODO(eroman): There are not currently any verification or path building
+      //               tests for the distrusted case.
+      errors->AddError(kCertIsDistrusted);
+      break;
+    case CertificateTrustType::TRUSTED_ANCHOR:
+    case CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS:
+      // If the trust anchor has constraints, enforce them.
+      if (trust.type == CertificateTrustType::TRUSTED_ANCHOR_WITH_CONSTRAINTS) {
+        ApplyTrustAnchorConstraints(cert, required_key_purpose,
+                                    max_path_length_ptr, name_constraints_list,
+                                    errors);
+      }
+      break;
+  }
+}
+
+}  // namespace
+
 // This implementation is structured to mimic the description of certificate
 // path verification given by RFC 5280 section 6.1.
-void VerifyCertificateChainNoReturnValue(
-    const ParsedCertificateList& certs,
-    const TrustAnchor* trust_anchor,
-    const SignaturePolicy* signature_policy,
-    const der::GeneralizedTime& time,
-    KeyPurpose required_key_purpose,
-    CertPathErrors* errors) {
-  DCHECK(trust_anchor);
+void VerifyCertificateChain(const ParsedCertificateList& certs,
+                            const CertificateTrust& last_cert_trust,
+                            const SignaturePolicy* signature_policy,
+                            const der::GeneralizedTime& time,
+                            KeyPurpose required_key_purpose,
+                            CertPathErrors* errors) {
   DCHECK(signature_policy);
   DCHECK(errors);
 
@@ -517,6 +555,13 @@
     return;
   }
 
+  // TODO(eroman): Verifying a trusted leaf certificate is not currently
+  // permitted.
+  if (certs.size() == 1) {
+    errors->GetOtherErrors()->AddError(kChainIsLength1);
+    return;
+  }
+
   // Will contain a NameConstraints for each previous cert in the chain which
   // had nameConstraints. This corresponds to the permitted_subtrees and
   // excluded_subtrees state variables from RFC 5280.
@@ -536,15 +581,14 @@
   //
   //    working_public_key:  the public key used to verify the
   //    signature of a certificate.
-  der::Input working_spki = trust_anchor->spki();
+  der::Input working_spki;
 
   // |working_normalized_issuer_name| is the normalized value of the
   // working_issuer_name variable in RFC 5280 section 6.1.2:
   //
   //    working_issuer_name:  the issuer distinguished name expected
   //    in the next certificate in the chain.
-  der::Input working_normalized_issuer_name =
-      trust_anchor->normalized_subject();
+  der::Input working_normalized_issuer_name;
 
   // |max_path_length| corresponds with the same named variable in RFC 5280
   // section 6.1.2:
@@ -556,23 +600,12 @@
   //    certificate.
   size_t max_path_length = certs.size();
 
-  // Apply any trust anchor constraints per RFC 5937.
-  //
-  // TODO(eroman): Errors on the trust anchor are put into a certificate bucket
-  //               GetErrorsForCert(certs.size()). This is a bit magical, and
-  //               has some integration issues.
-  ProcessTrustAnchorConstraints(*trust_anchor, required_key_purpose,
-                                &max_path_length, &name_constraints_list,
-                                errors->GetErrorsForCert(certs.size()));
-
   // Iterate over all the certificates in the reverse direction: starting from
-  // the certificate signed by trust anchor and progressing towards the target
-  // certificate.
+  // the root certificate and progressing towards the target certificate.
   //
-  // Note that |i| uses 0-based indexing whereas in RFC 5280 it is 1-based.
-  //
-  //   * i=0    :  Certificated signed by trust anchor.
-  //   * i=N-1  :  Target certificate.
+  //   * i=0               :  Root certificate (i.e. trust anchor)
+  //   * i=1               :  Certificated signed by the root certificate
+  //   * i=certs.size()-1  :  Target certificate.
   for (size_t i = 0; i < certs.size(); ++i) {
     const size_t index_into_certs = certs.size() - i - 1;
 
@@ -580,6 +613,7 @@
     // certificate being verified. The target certificate isn't necessarily an
     // end-entity certificate.
     const bool is_target_cert = index_into_certs == 0;
+    const bool is_root_cert = i == 0;
 
     const ParsedCertificate& cert = *certs[index_into_certs];
 
@@ -587,6 +621,16 @@
     // associated with that certificate.
     CertErrors* cert_errors = errors->GetErrorsForCert(index_into_certs);
 
+    if (is_root_cert) {
+      ProcessRootCertificate(cert, last_cert_trust, required_key_purpose,
+                             &max_path_length, &name_constraints_list,
+                             &working_spki, &working_normalized_issuer_name,
+                             cert_errors);
+
+      // Don't do any other checks for root certificates.
+      continue;
+    }
+
     // Per RFC 5280 section 6.1:
     //  * Do basic processing for each certificate
     //  * If it is the last certificate in the path (target certificate)
@@ -617,20 +661,4 @@
   //    certification path.
 }
 
-}  // namespace
-
-bool VerifyCertificateChain(const ParsedCertificateList& certs,
-                            const TrustAnchor* trust_anchor,
-                            const SignaturePolicy* signature_policy,
-                            const der::GeneralizedTime& time,
-                            KeyPurpose required_key_purpose,
-                            CertPathErrors* errors) {
-  // TODO(eroman): This function requires that |errors| is empty upon entry,
-  // which is not part of the API contract.
-  DCHECK(!errors->ContainsHighSeverityErrors());
-  VerifyCertificateChainNoReturnValue(certs, trust_anchor, signature_policy,
-                                      time, required_key_purpose, errors);
-  return !errors->ContainsHighSeverityErrors();
-}
-
 }  // namespace net
diff --git a/src/net/cert/internal/verify_certificate_chain.h b/src/net/cert/internal/verify_certificate_chain.h
index e77c6fe..fa83584 100644
--- a/src/net/cert/internal/verify_certificate_chain.h
+++ b/src/net/cert/internal/verify_certificate_chain.h
@@ -21,7 +21,7 @@
 }
 
 class SignaturePolicy;
-class TrustAnchor;
+struct CertificateTrust;
 
 // The key purpose (extended key usage) to check for during verification.
 enum class KeyPurpose {
@@ -58,15 +58,19 @@
 //
 //   cert_chain:
 //     A non-empty chain of N DER-encoded certificates, listed in the
-//     "forward" direction.
+//     "forward" direction. The first certificate is the target certificate to
+//     verify, and the last certificate has trustedness given by
+//     |last_cert_trust|.
 //
 //      * cert_chain[0] is the target certificate to verify.
 //      * cert_chain[i+1] holds the certificate that issued cert_chain[i].
-//      * cert_chain[N-1] must be issued by the trust anchor.
+//      * cert_chain[N-1] the root certificate
 //
-//   trust_anchor:
-//     Contains the trust anchor (root) used to verify the chain. Must be
-//     non-null.
+//   last_cert_trust:
+//     Trustedness of certs.back(). The trustedness of certs.back() MUST BE
+//     decided by the caller -- this function takes it purely as an input.
+//     Moreover, the CertificateTrust can be used to specify trust anchor
+//     constraints [1]
 //
 //   signature_policy:
 //     The policy to use when verifying signatures (what hash algorithms are
@@ -81,17 +85,32 @@
 // ---------
 // Outputs
 // ---------
-//
-//   Returns true if the target certificate can be verified.
-//   TODO(eroman): This return value is redundant with the |errors| parameter.
-//
 //   errors:
 //     Must be non-null. The set of errors/warnings encountered while
 //     validating the path are appended to this structure. If verification
-//     failed, then there is guaranteed to be at least 1 error written to
-//     |errors|.
-NET_EXPORT bool VerifyCertificateChain(const ParsedCertificateList& certs,
-                                       const TrustAnchor* trust_anchor,
+//     failed, then there is guaranteed to be at least 1 high severity error
+//     written to |errors|.
+//
+// [1] Conceptually VerifyCertificateChain() sets RFC 5937's
+// "enforceTrustAnchorConstraints" to true. And one specifies whether to
+// interpret a root certificate as having trust anchor constraints through the
+// |last_cert_trust| parameter. The constraints are just a subset of the
+// extensions present in the certificate:
+//
+//  * Signature:             No
+//  * Validity (expiration): No
+//  * Key usage:             No
+//  * Extended key usage:    Yes (not part of RFC 5937)
+//  * Basic constraints:     Yes, but only the pathlen (CA=false is accepted)
+//  * Name constraints:      Yes
+//  * Certificate policies:  Not currently, TODO(crbug.com/634453)
+//  * inhibitAnyPolicy:      Not currently, TODO(crbug.com/634453)
+//  * PolicyConstraints:     Not currently, TODO(crbug.com/634452)
+//
+// The presence of any other unrecognized extension marked as critical fails
+// validation.
+NET_EXPORT void VerifyCertificateChain(const ParsedCertificateList& certs,
+                                       const CertificateTrust& last_cert_trust,
                                        const SignaturePolicy* signature_policy,
                                        const der::GeneralizedTime& time,
                                        KeyPurpose required_key_purpose,
diff --git a/src/net/cert/internal/verify_certificate_chain_pkits_unittest.cc b/src/net/cert/internal/verify_certificate_chain_pkits_unittest.cc
index 97a81cc..2039a60 100644
--- a/src/net/cert/internal/verify_certificate_chain_pkits_unittest.cc
+++ b/src/net/cert/internal/verify_certificate_chain_pkits_unittest.cc
@@ -70,23 +70,18 @@
       }
     }
 
-    scoped_refptr<TrustAnchor> trust_anchor =
-        TrustAnchor::CreateFromCertificateNoConstraints(input_chain.back());
-    input_chain.pop_back();
-
     SimpleSignaturePolicy signature_policy(1024);
 
     // Run all tests at the time the PKITS was published.
     der::GeneralizedTime time = {2011, 4, 15, 0, 0, 0};
 
     CertPathErrors path_errors;
-    bool result = VerifyCertificateChain(input_chain, trust_anchor.get(),
-                                         &signature_policy, time,
-                                         KeyPurpose::ANY_EKU, &path_errors);
+    VerifyCertificateChain(input_chain, CertificateTrust::ForTrustAnchor(),
+                           &signature_policy, time, KeyPurpose::ANY_EKU,
+                           &path_errors);
 
     //  TODO(crbug.com/634443): Test errors on failure?
-    EXPECT_EQ(result, !path_errors.ContainsHighSeverityErrors());
-    return result;
+    return !path_errors.ContainsHighSeverityErrors();
   }
 };
 
diff --git a/src/net/cert/internal/verify_certificate_chain_typed_unittest.h b/src/net/cert/internal/verify_certificate_chain_typed_unittest.h
index 148aad4..63bba1c 100644
--- a/src/net/cert/internal/verify_certificate_chain_typed_unittest.h
+++ b/src/net/cert/internal/verify_certificate_chain_typed_unittest.h
@@ -26,7 +26,10 @@
 
     SCOPED_TRACE("Test file: " + path);
 
-    ReadVerifyCertChainTestFromFile(path, &test);
+    if (!ReadVerifyCertChainTestFromFile(path, &test)) {
+      ADD_FAILURE() << "Couldn't load test case: " << path;
+      return;
+    }
 
     TestDelegate::Verify(test, path);
   }
@@ -41,106 +44,105 @@
 TYPED_TEST_CASE_P(VerifyCertificateChainSingleRootTest);
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, Simple) {
-  this->RunTest("target-and-intermediate.pem");
+  this->RunTest("target-and-intermediate/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, BasicConstraintsCa) {
-  this->RunTest("intermediate-lacks-basic-constraints.pem");
-  this->RunTest("intermediate-basic-constraints-ca-false.pem");
-  this->RunTest("intermediate-basic-constraints-not-critical.pem");
-  this->RunTest("unconstrained-root-lacks-basic-constraints.pem");
-  this->RunTest("constrained-root-lacks-basic-constraints.pem");
-  this->RunTest("unconstrained-root-basic-constraints-ca-false.pem");
-  this->RunTest("constrained-root-basic-constraints-ca-false.pem");
+  this->RunTest("intermediate-lacks-basic-constraints/main.test");
+  this->RunTest("intermediate-basic-constraints-ca-false/main.test");
+  this->RunTest("intermediate-basic-constraints-not-critical/main.test");
+  this->RunTest("root-lacks-basic-constraints/main.test");
+  this->RunTest("root-lacks-basic-constraints/ta-with-constraints.test");
+  this->RunTest("root-basic-constraints-ca-false/main.test");
+  this->RunTest("root-basic-constraints-ca-false/ta-with-constraints.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, BasicConstraintsPathlen) {
-  this->RunTest("violates-basic-constraints-pathlen-0.pem");
-  this->RunTest("basic-constraints-pathlen-0-self-issued.pem");
-  this->RunTest("target-has-pathlen-but-not-ca.pem");
-  this->RunTest("violates-pathlen-1-constrained-root.pem");
-  this->RunTest("violates-pathlen-1-unconstrained-root.pem");
+  this->RunTest("violates-basic-constraints-pathlen-0/main.test");
+  this->RunTest("basic-constraints-pathlen-0-self-issued/main.test");
+  this->RunTest("target-has-pathlen-but-not-ca/main.test");
+  this->RunTest("violates-pathlen-1-from-root/main.test");
+  this->RunTest("violates-pathlen-1-from-root/ta-with-constraints.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, UnknownExtension) {
-  this->RunTest("intermediate-unknown-critical-extension.pem");
-  this->RunTest("intermediate-unknown-non-critical-extension.pem");
-  this->RunTest("target-unknown-critical-extension.pem");
+  this->RunTest("intermediate-unknown-critical-extension/main.test");
+  this->RunTest("intermediate-unknown-non-critical-extension/main.test");
+  this->RunTest("target-unknown-critical-extension/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, Md5) {
-  this->RunTest("target-signed-with-md5.pem");
-  this->RunTest("intermediate-signed-with-md5.pem");
+  this->RunTest("target-signed-with-md5/main.test");
+  this->RunTest("intermediate-signed-with-md5/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, WrongSignature) {
-  this->RunTest("target-wrong-signature.pem");
-  this->RunTest("incorrect-trust-anchor.pem");
+  this->RunTest("target-wrong-signature/main.test");
+  this->RunTest("incorrect-trust-anchor/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, TargetSignedBy512bitRsa) {
-  this->RunTest("target-signed-by-512bit-rsa.pem");
+  this->RunTest("target-signed-by-512bit-rsa/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, TargetSignedUsingEcdsa) {
-  this->RunTest("target-signed-using-ecdsa.pem");
+  this->RunTest("target-signed-using-ecdsa/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, Expired) {
-  this->RunTest("expired-target.pem");
-  this->RunTest("expired-intermediate.pem");
-  this->RunTest("expired-target-notBefore.pem");
-  this->RunTest("expired-unconstrained-root.pem");
-  this->RunTest("expired-constrained-root.pem");
+  this->RunTest("expired-target/main.test");
+  this->RunTest("expired-intermediate/main.test");
+  this->RunTest("expired-target-notBefore/main.test");
+  this->RunTest("expired-root/main.test");
+  this->RunTest("expired-root/ta-with-constraints.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, TargetNotEndEntity) {
-  this->RunTest("target-not-end-entity.pem");
+  this->RunTest("target-not-end-entity/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, KeyUsage) {
-  this->RunTest("intermediate-lacks-signing-key-usage.pem");
-  this->RunTest("target-has-keycertsign-but-not-ca.pem");
+  this->RunTest("intermediate-lacks-signing-key-usage/main.test");
+  this->RunTest("target-has-keycertsign-but-not-ca/main.test");
 
-  this->RunTest("serverauth-ec-ku-decipheronly.pem");
-  this->RunTest("serverauth-ec-ku-digitalsignature.pem");
-  this->RunTest("serverauth-ec-ku-keyagreement.pem");
-  this->RunTest("serverauth-ec-ku-keyencipherment.pem");
+  this->RunTest("serverauth-ec-ku-decipheronly/main.test");
+  this->RunTest("serverauth-ec-ku-digitalsignature/main.test");
+  this->RunTest("serverauth-ec-ku-keyagreement/main.test");
+  this->RunTest("serverauth-ec-ku-keyencipherment/main.test");
 
-  this->RunTest("serverauth-rsa-ku-decipheronly.pem");
-  this->RunTest("serverauth-rsa-ku-digitalsignature.pem");
-  this->RunTest("serverauth-rsa-ku-keyagreement.pem");
-  this->RunTest("serverauth-rsa-ku-keyencipherment.pem");
+  this->RunTest("serverauth-rsa-ku-decipheronly/main.test");
+  this->RunTest("serverauth-rsa-ku-digitalsignature/main.test");
+  this->RunTest("serverauth-rsa-ku-keyagreement/main.test");
+  this->RunTest("serverauth-rsa-ku-keyencipherment/main.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, ExtendedKeyUsage) {
-  this->RunTest("target-lacks-eku.pem");
-  this->RunTest("target-restricts-eku-fail.pem");
-  this->RunTest("intermediate-restricts-eku-fail.pem");
-  this->RunTest("intermediate-restricts-eku-ok.pem");
-  this->RunTest("intermediate-sets-eku-any.pem");
-  this->RunTest("target-sets-eku-any.pem");
-  this->RunTest("constrained-root-bad-eku.pem");
-  this->RunTest("unconstrained-root-bad-eku.pem");
+  this->RunTest("target-lacks-eku/main.test");
+  this->RunTest("target-restricts-eku-fail/main.test");
+  this->RunTest("intermediate-restricts-eku-fail/main.test");
+  this->RunTest("intermediate-restricts-eku-ok/main.test");
+  this->RunTest("intermediate-sets-eku-any/main.test");
+  this->RunTest("target-sets-eku-any/main.test");
+  this->RunTest("root-bad-eku/main.test");
+  this->RunTest("root-bad-eku/ta-with-constraints.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest,
              IssuerAndSubjectNotByteForByteEqual) {
-  this->RunTest("issuer-and-subject-not-byte-for-byte-equal.pem");
-  this->RunTest("issuer-and-subject-not-byte-for-byte-equal-anchor.pem");
+  this->RunTest("issuer-and-subject-not-byte-for-byte-equal/target.test");
+  this->RunTest("issuer-and-subject-not-byte-for-byte-equal/anchor.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, TrustAnchorNotSelfSigned) {
-  this->RunTest("non-self-signed-root.pem");
-  this->RunTest("unconstrained-non-self-signed-root.pem");
-  this->RunTest("constrained-non-self-signed-root.pem");
+  this->RunTest("non-self-signed-root/main.test");
+  this->RunTest("non-self-signed-root/ta-with-constraints.test");
 }
 
 TYPED_TEST_P(VerifyCertificateChainSingleRootTest, KeyRollover) {
-  this->RunTest("key-rollover-oldchain.pem");
-  this->RunTest("key-rollover-rolloverchain.pem");
-  this->RunTest("key-rollover-longrolloverchain.pem");
-  this->RunTest("key-rollover-newchain.pem");
+  this->RunTest("key-rollover/oldchain.test");
+  this->RunTest("key-rollover/rolloverchain.test");
+  this->RunTest("key-rollover/longrolloverchain.test");
+  this->RunTest("key-rollover/newchain.test");
 }
 
 // TODO(eroman): Add test that invalid validity dates where the day or month
diff --git a/src/net/cert/internal/verify_certificate_chain_unittest.cc b/src/net/cert/internal/verify_certificate_chain_unittest.cc
index 62d3b3b..13c689f 100644
--- a/src/net/cert/internal/verify_certificate_chain_unittest.cc
+++ b/src/net/cert/internal/verify_certificate_chain_unittest.cc
@@ -16,18 +16,13 @@
  public:
   static void Verify(const VerifyCertChainTest& test,
                      const std::string& test_file_path) {
-    ASSERT_TRUE(test.trust_anchor);
-
     SimpleSignaturePolicy signature_policy(1024);
 
     CertPathErrors errors;
-    bool result = VerifyCertificateChain(test.chain, test.trust_anchor.get(),
-                                         &signature_policy, test.time,
-                                         test.key_purpose, &errors);
-    EXPECT_EQ(test.expected_result, result);
+    VerifyCertificateChain(test.chain, test.last_cert_trust, &signature_policy,
+                           test.time, test.key_purpose, &errors);
     EXPECT_EQ(test.expected_errors, errors.ToDebugString(test.chain))
         << "Test file: " << test_file_path;
-    EXPECT_EQ(result, !errors.ContainsHighSeverityErrors());
   }
 };
 
diff --git a/src/net/cert/test_root_certs.h b/src/net/cert/test_root_certs.h
index 6fa22c1..7b2ab5e 100644
--- a/src/net/cert/test_root_certs.h
+++ b/src/net/cert/test_root_certs.h
@@ -14,8 +14,6 @@
 #if defined(USE_NSS_CERTS)
 #include <cert.h>
 #include <vector>
-#elif defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-#include <vector>
 #elif defined(OS_WIN)
 #include <windows.h>
 #include "crypto/wincrypt_shim.h"
@@ -25,10 +23,6 @@
 #include "base/mac/scoped_cftyperef.h"
 #endif
 
-#if defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-typedef struct x509_st X509;
-#endif
-
 namespace base {
 class FilePath;
 }
@@ -79,10 +73,6 @@
   // be trusted. By default, this is true, indicating that the TestRootCerts
   // are used in addition to OS trust store.
   void SetAllowSystemTrust(bool allow_system_trust);
-#elif defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-  const std::vector<scoped_refptr<X509Certificate> >&
-      temporary_roots() const { return temporary_roots_; }
-  bool Contains(X509* cert) const;
 #elif defined(OS_WIN)
   HCERTSTORE temporary_roots() const { return temporary_roots_; }
 
@@ -130,8 +120,6 @@
   // It is necessary to maintain a cache of the original certificate trust
   // settings, in order to restore them when Clear() is called.
   std::vector<std::unique_ptr<TrustEntry>> trust_cache_;
-#elif defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-  std::vector<scoped_refptr<X509Certificate>> temporary_roots_;
 #elif defined(OS_WIN)
   HCERTSTORE temporary_roots_;
 #elif defined(OS_MACOSX)
diff --git a/src/net/cert/test_root_certs_openssl.cc b/src/net/cert/test_root_certs_openssl.cc
deleted file mode 100644
index 0cac6ab..0000000
--- a/src/net/cert/test_root_certs_openssl.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/cert/test_root_certs.h"
-
-#include "base/location.h"
-#include "base/logging.h"
-#include "crypto/openssl_util.h"
-#include "net/cert/x509_certificate.h"
-#include "third_party/boringssl/src/include/openssl/err.h"
-#include "third_party/boringssl/src/include/openssl/x509v3.h"
-
-namespace net {
-
-bool TestRootCerts::Add(X509Certificate* certificate) {
-  if (!X509_STORE_add_cert(X509Certificate::cert_store(),
-                           certificate->os_cert_handle())) {
-    uint32_t error_code = ERR_peek_error();
-    if (ERR_GET_LIB(error_code) != ERR_LIB_X509 ||
-        ERR_GET_REASON(error_code) != X509_R_CERT_ALREADY_IN_HASH_TABLE) {
-      crypto::ClearOpenSSLERRStack(FROM_HERE);
-      return false;
-    }
-    ERR_clear_error();
-  }
-
-  temporary_roots_.push_back(certificate);
-  return true;
-}
-
-void TestRootCerts::Clear() {
-  if (temporary_roots_.empty())
-    return;
-
-  temporary_roots_.clear();
-  X509Certificate::ResetCertStore();
-}
-
-bool TestRootCerts::IsEmpty() const {
-  return temporary_roots_.empty();
-}
-
-bool TestRootCerts::Contains(X509* cert) const {
-  for (std::vector<scoped_refptr<X509Certificate> >::const_iterator it =
-           temporary_roots_.begin();
-       it != temporary_roots_.end(); ++it) {
-    if (X509Certificate::IsSameOSCert(cert, (*it)->os_cert_handle()))
-      return true;
-  }
-  return false;
-}
-
-TestRootCerts::~TestRootCerts() {}
-
-void TestRootCerts::Init() {}
-
-}  // namespace net
diff --git a/src/net/cert/test_root_certs_unittest.cc b/src/net/cert/test_root_certs_unittest.cc
index b08926f..bc7e09f 100644
--- a/src/net/cert/test_root_certs_unittest.cc
+++ b/src/net/cert/test_root_certs_unittest.cc
@@ -129,8 +129,7 @@
   EXPECT_EQ(bad_verify_result.cert_status, restored_verify_result.cert_status);
 }
 
-#if defined(USE_NSS_CERTS) || \
-    (defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID))
+#if defined(USE_NSS_CERTS)
 TEST(TestRootCertsTest, Contains) {
   // Another test root certificate.
   const char kRootCertificateFile2[] = "2048-rsa-root.pem";
diff --git a/src/net/data/parse_certificate_unittest/rebase-errors.py b/src/net/data/parse_certificate_unittest/rebase-errors.py
new file mode 100755
index 0000000..ebb8722
--- /dev/null
+++ b/src/net/data/parse_certificate_unittest/rebase-errors.py
@@ -0,0 +1,139 @@
+#!/usr/bin/python
+# Copyright (c) 2016 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Helper script to update the test error expectations based on actual results.
+
+This is useful for regenerating test expectations after making changes to the
+error format.
+
+To use this run the affected tests, and then pass the input to this script
+(either via stdin, or as the first argument). For instance:
+
+  $ ./out/Release/net_unittests --gtest_filter="*ParseCertificate*" | \
+     net/data/parse_certificate_unittest/rebase-errors.py
+
+The script works by scanning the stdout looking for gtest failures when
+comparing "errors.ToDebugString()". The C++ test side should have been
+instrumented to dump out the test file's path on mismatch.
+
+This script will then update the corresponding .pem file
+"""
+
+import sys
+sys.path += ['../verify_certificate_chain_unittest']
+
+import common
+
+import os
+import sys
+import re
+
+
+# Regular expression to find the failed errors in test stdout.
+#  * Group 1 of the match is the actual error text (backslash-escaped)
+#  * Group 2 of the match is file path (relative to //src) where the expected
+#    errors were read from.
+failed_test_regex = re.compile(r"""
+Value of: errors.ToDebugString\(\)
+  Actual: "(.*)"
+(?:.|\n)+?
+Test file: (.*[.]pem)
+""", re.MULTILINE)
+
+
+# Regular expression to find the ERRORS block (and any text above it) in a PEM
+# file. The assumption is that ERRORS is not the very first block in the file
+# (since it looks for an -----END to precede it).
+#  * Group 1 of the match is the ERRORS block content and any comments
+#    immediately above it.
+errors_block_regex = re.compile(r""".*
+-----END .*?-----
+
+(.*?
+-----BEGIN ERRORS-----
+.*?
+-----END ERRORS-----
+)""", re.MULTILINE | re.DOTALL)
+
+
+def read_file_to_string(path):
+  """Reads a file entirely to a string"""
+  with open(path, 'r') as f:
+    return f.read()
+
+
+def write_string_to_file(data, path):
+  """Writes a string to a file"""
+  print "Writing file %s ..." % (path)
+  with open(path, "w") as f:
+    f.write(data)
+
+
+def replace_string(original, start, end, replacement):
+  """Replaces the specified range of |original| with |replacement|"""
+  return original[0:start] + replacement + original[end:]
+
+
+def fixup_pem_file(path, actual_errors):
+  """Updates the ERRORS block in the test .pem file"""
+  contents = read_file_to_string(path)
+
+  m = errors_block_regex.search(contents)
+
+  if not m:
+    contents += '\n' + common.text_data_to_pem('ERRORS', actual_errors)
+  else:
+    contents = replace_string(contents, m.start(1), m.end(1),
+                              common.text_data_to_pem('ERRORS', actual_errors))
+
+  # Update the file.
+  write_string_to_file(contents, path)
+
+
+def get_src_root():
+  """Returns the path to the enclosing //src directory. This assumes the
+  current script is inside the source tree."""
+  cur_dir = os.path.dirname(os.path.realpath(__file__))
+
+  while True:
+    parent_dir, dirname = os.path.split(cur_dir)
+    # Check if it looks like the src/ root.
+    if dirname == "src" and os.path.isdir(os.path.join(cur_dir, "net")):
+      return cur_dir
+    if not parent_dir or parent_dir == cur_dir:
+      break
+    cur_dir = parent_dir
+
+  print "Couldn't find src dir"
+  sys.exit(1)
+
+
+def get_abs_path(rel_path):
+  """Converts |rel_path| (relative to src) to a full path"""
+  return os.path.join(get_src_root(), rel_path)
+
+
+def main():
+  if len(sys.argv) > 2:
+    print 'Usage: %s [path-to-unittest-stdout]' % (sys.argv[0])
+    sys.exit(1)
+
+  # Read the input either from a file, or from stdin.
+  test_stdout = None
+  if len(sys.argv) == 2:
+    test_stdout = read_file_to_string(sys.argv[1])
+  else:
+    print 'Reading input from stdin...'
+    test_stdout = sys.stdin.read()
+
+  for m in failed_test_regex.finditer(test_stdout):
+    actual_errors = m.group(1)
+    actual_errors = actual_errors.decode('string-escape')
+    relative_test_path = m.group(2)
+    fixup_pem_file(get_abs_path(relative_test_path), actual_errors)
+
+
+if __name__ == "__main__":
+  main()
diff --git a/src/net/data/ssl/certificates/quic_test.example.com.key.pkcs8.pem b/src/net/data/ssl/certificates/quic_test.example.com.key.pkcs8.pem
new file mode 100644
index 0000000..e52b455
--- /dev/null
+++ b/src/net/data/ssl/certificates/quic_test.example.com.key.pkcs8.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVyhl5jqmrRvBO
+t1hts6OaaBBSr/AAlK40vbRQH6MmpJ4ckDdbPejXO7yT+wD7x0lUm/HQmvJRhHtZ
+i71m866SWrljjGSn0J7jDFDSz5Od6UoRV5PB3q97WkQdCowiph3GremPFo1OkfHT
+8fOC/vZV3HLxEQd17LvpOjWHQ4Fe3ENKt3yhGtXSwUA5aX2JrWQbMTSo6p5eJvxx
+0sZr5cJzMD9ZpzWNqaXpPUNBvVTyKuEVDDUwa4vyd8pcB49Y9FR3Xq/OscErp7vA
+6X3vGtcD7o9nrcbmHannkT9B59aGIIxTs9h5CeJLFVrYkjtiT2jky9CkTrZ9Pl+w
+JOpiYc97AgMBAAECggEAEjCHylfhB7mZaJkg5PSLzu9btC1T9jiwObyKQubuMrN+
+4F9E1naGAQoMGWsZwlJKYvCBuoX0aAslk5DYJJJHIByn+VhQmBaf7iF2HvmaTa0z
+qBYTdENGGvCrKu1izu/jSKwzWwFINI8mTCoh1dtrihKflPMl91qVAlr5gvCzaSac
+ovZwe8cm51rN5XclJx+o6SONhPUdlUWJ5yEpA4mjV3eC6/IvPOoMmr8GRS9oBB6k
+m7yhcaGrSUClc+K3lpFF+3gXD57ABtT23usrNGnti6xnURDYDm+fUX2j8kZEREvj
+YGrCNGp+EecrTzhjgaFukysyRXRp7mLvGEqekodcgQKBgQDm1bmKZmE+0FZJIDXD
+4xMiipc+srd6KuaCYdJ5i0xt9xTC5KJA5eSmoQn0+hWa8065A91tHiR8u49Ql5xP
+6oQw8kA3dpZliZJSL/o7V+aXoMO9/R3H8tbiZn0y7cMYaYr7PGmXC/giSQ5Yi7qE
++yKjKgx35DGEiTajt4FWJ6/siQKBgQDtGKlPyT/k8XGz305qw2W7d8nFFsR4kSJl
+pbbWBwrfouiw0hOARCzevZDq6zSGx9QK8Sv5ACM06TrOxSVNsljKayFK0E+Hc5N/
+bNjCDxJd+4CgUNhM2Ta4wvZqW8FGQgphJVUnYu/YahjETWhMiAEOPcm/j7E9k/HQ
+BiZixroC4wKBgB3zBuKtC9rxfvB37GHg+V+W6a6p02JXZJbwCDXa2+y8jQYIUgDn
+kvYHmNofBGSZQtKAbN82dPd2Ak8rjI1V2Rbcp3ZKvZKo+cIOFYJTkkiEBEGHMLD7
+kePH9mCANrrZHr4gBXcih2wzXFgisO2GA+V1lC6N/dq7TsqJCY/bEFk5AoGBAMAI
+nnHCBd9P85EFiAUPGCHb5u+b/ivNGXgM3WbCs3ro/uDgde0IyvLpxSuQr62Owl7O
+cZgvFVTwprH8mbcxgZsJZCCtUgzafpfRuEqNXIoEf2zZrieoMxs4xc7lXEikirWe
+QDczeiHl5QNx0s1RxtEbGIHwR1Uhs9SSdprAbL6TAoGBAMT3QpWdPNlDoPbSkAC9
+hoUIaRZS8rN/8Ls1lwYf5RxaiTcEKuQ2IYphMRsSzqHbpDxLtWbsWJGd9VARbgc8
+W5DzCmditgUlt9FsawbxqDGO7bkqD4QEkZS67zehDzM2Ir8sy00QZxCi1dJXEBR2
+DUChLmnVRf1yCYz0xmGSRskj
+-----END PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/README b/src/net/data/verify_certificate_chain_unittest/README
index 87a4698..073abd7 100644
--- a/src/net/data/verify_certificate_chain_unittest/README
+++ b/src/net/data/verify_certificate_chain_unittest/README
@@ -1,79 +1,78 @@
 This directory contains test data for verifying certificate chains.
 
-It contains the following types of files:
+Tests are grouped into directories that contain the keys, python to generate
+chains, and test expectations. "DIR" is used as a generic placeholder below to
+identify such a directory.
 
 ===============================
-generate-*.py
+DIR/generate-chains.py
 ===============================
 
-Generates the file for an individual test case. If the python file was
-named generate-XXX.py, then the corresponding output will be named
-XXX.pem.
+Python script that generates one or more ".pem" file containing a sequence of
+CERTIFICATE blocks. In most cases it will generate a single chain called
+"chain.pem".
+
+===============================
+DIR/keys/*.key
+===============================
+
+The keys used (as well as generated) by the .py file generate-chains.py. The
+private keys shouldn't be needed to run the tests, however are useful when
+re-generating the test data to have stable results (at least for signature
+types which are deterministic, like RSASSA PKCS#1 which is used by most of the
+certificates data).
+
+===============================
+DIR/*.pem
+===============================
+
+A sequence of CERTIFICATE blocks that was created by the generate-chains.py
+script. (Although in a few cases there are manually created .pem files that
+lack a generator script).
+
+===============================
+DIR/*.test
+===============================
+
+A sequence of key-value pairs that identify the inputs to certificate
+verification, as well as the expected outputs. The format is essentially a
+newline separated sequence of key/value pairs:
+
+key: value\n
+
+All keys must be specified by tests, although they can be in any order.
+The possible keys are:
+
+  "chain" - The value is a file path (relative to the test file) to a .pem
+      containing the CERTIFICATE chain.
+
+  "last_cert_trust" - The value identifies the trustedness of the last
+      certificate in the chain (i.e. whether it is a trust anchor or not). This
+      maps to the CertificateTrustType enum. Possible values are:
+          "TRUSTED_ANCHOR"
+          "TRUSTED_ANCHOR_WITH_CONSTRAINTS"
+          "UNSPECIFIED"
+          "DISTRUSTED"
+
+  "utc_time" - A string encoding for the generalized time at which verification
+      should be done. Example "150302120000Z"
+
+  "key_purpose" - The expected EKU to use when verifying. Maps to
+      KeyPurpose enum. Possible values are:
+      "ANY_EKU"
+      "SERVER_AUTH"
+      "CLIENT_AUTH"
+
+  "errors" - This has special parsing rules: it is interpreted as the
+      final key in the file. All lines after "errors:\n" are read as being the
+      error string (this allows embedding newlines in it).
+
+Additionally, it is possible to add python-style comments by starting a line
+with "#".
 
 ===============================
 generate-all.sh
 ===============================
 
-Runs all of the generate-*.py scripts and does some cleanup.
-
-===============================
-keys/XXX/*.key
-===============================
-
-The keys used/generated by test XXX. The private keys shouldn't be needed to run
-the tests, however are useful when re-generating the test data to have stable
-results (at least for signature types which are deterministic, like RSASSA
-PKCS#1 which is used by most of the certificates data).
-
-===============================
-*.pem
-===============================
-
-Each .pem file describes the inputs for certificate chain verification, and the
-expected result. These are the PEM blocks that each file contains and their
-interpretation:
-
-CERTIFICATE:
-
-These PEM blocks describe the ordered chain of certificates starting from the
-target certificate and progressing towards the trust anchor (but not including
-the trust anchor).
-
- - There must be one or more such PEM blocks
- - Its contents are a DER-encoded X.509 certificate
- - The first block is the target certificate
- - The (i+1)th CERTIFICATE is (allegedly) the one which issued the ith
-   CERTIFICATE.
-
-TRUST_ANCHOR_{XXX}:
-
-This PEM block describes the trust anchor to use when verifying the chain.
-There are two possible names for this PEM block, which affect how it is
-interpreted: TRUST_ANCHOR_CONSTRAINED or TRUST_ANCHOR_UNCONSTRAINED.
-
- - There must be exactly one TRUST_ANCHOR_{XXX} block.
- - Its contents are a DER-encoded X.509 certificate
- - The subject and SPKI from the certificate define the trust anchor
- - If the block was named TRUST_ANCHOR_CONSTRAINED, then any constraints on the
-   certificate are also considered normative when verifying paths. Otherwise
-   any standard extensions provided by the root certificate are not used during
-   path validation.
-
-TIMESTAMP:
-
-This PEM block describes the time to use when verifying the chain.
-
- - There must be exactly one such PEM block
- - Its contents are a DER-encoded UTCTime.
-
-VERIFY_RESULT:
-
-This PEM block describes the expected result from verifying the path.
-
- - There must be exactly one such PEM block
- - Its contents are a string with value of either "SUCCESS" or "FAIL"
-
-ERRORS:
-
-This PEM block is a pretty-printed textual dump of all the errors, as given by
-CertErrors::ToDebugString().
+Runs all of the generate-chains.py scripts and cleans up the temp files
+afterwards.
diff --git a/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem
similarity index 97%
rename from src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
rename to src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem
index 85fc329..1df6f70 100644
--- a/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued.pem
+++ b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-basic-constraints-pathlen-0-self-issued.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 2 intermediates. The first intermediate has a basic
 constraints path length of 0. The second one is self-issued so does not count
@@ -339,7 +339,7 @@
          b8:c1:90:b0:ea:f9:5f:40:af:50:a7:93:1c:7a:c8:fd:20:6d:
          ae:65:cc:63:08:e4:9c:dd:4a:f2:16:d9:1a:5e:dc:a8:d0:67:
          c7:27:27:18
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN5hHn4gYcDrHBPudTw2
@@ -359,19 +359,4 @@
 WlYS6LhZXuiM8KjFe79TVvBGunCUOmIKzjkfROIRuo2IRxS9w2ijGHM9Jdyj5BfL
 ffZS6qY/ofsK221gwpwen664wZCw6vlfQK9Qp5Mcesj9IG2uZcxjCOSc3UryFtka
 Xtyo0GfHJycY
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/generate-chains.py
similarity index 78%
rename from src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
rename to src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/generate-chains.py
index 9db4ffe..46b6b84 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-basic-constraints-pathlen-0-self-issued.py
+++ b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/generate-chains.py
@@ -7,6 +7,9 @@
 constraints path length of 0. The second one is self-issued so does not count
 against the path length."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -27,12 +30,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate2)
 
-chain = [target, intermediate2, intermediate1]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate2, intermediate1, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Intermediate_1.key b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Intermediate_1.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Intermediate_1.key
rename to src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Intermediate_1.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Root.key b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Root.key
rename to src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Target.key b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/basic-constraints-pathlen-0-self-issued/Target.key
rename to src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/basic-constraints-pathlen-0-self-issued/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/common.py b/src/net/data/verify_certificate_chain_unittest/common.py
index a9b2ed7..ac5ae7d 100755
--- a/src/net/data/verify_certificate_chain_unittest/common.py
+++ b/src/net/data/verify_certificate_chain_unittest/common.py
@@ -52,16 +52,11 @@
 g_cur_path_id = {}
 
 # Output paths used:
-#   - g_out_dir: where any temporary files (cert req, signing db etc) are
+#   - g_tmp_dir: where any temporary files (cert req, signing db etc) are
 #                saved to.
-#   - g_script_name: the name of the invoking script. For instance if this is
-#                    being run by generate-foo.py then g_script_name will be
-#                    'foo'
-#
-# See init() for how these are assigned, based on the name of the calling
-# script.
-g_out_dir = None
-g_script_name = None
+
+# See init() for how these are assigned.
+g_tmp_dir = None
 
 # The default validity range of generated certificates. Can be modified with
 # set_default_validity_range().
@@ -95,8 +90,8 @@
   return '%s_%d' % (name, path_id)
 
 
-def get_path_in_output_dir(name, suffix):
-  return os.path.join(g_out_dir, '%s%s' % (name, suffix))
+def get_path_in_tmp_dir(name, suffix):
+  return os.path.join(g_tmp_dir, '%s%s' % (name, suffix))
 
 
 class Key(object):
@@ -159,12 +154,8 @@
   "keys/" directory. If create_key_path(xxx) is called more than once during
   the script run, a suffix will be added."""
 
-  # Save keys to CWD/keys/<generate-script-name>/*.key
-  # Hack: if the script name was generate-certs.py, then just save to
-  # 'keys/*.key' (used by external consumers of common.py)
+  # Save keys to CWD/keys/*.key
   keys_dir = 'keys'
-  if g_script_name != 'certs':
-    keys_dir = os.path.join(keys_dir, g_script_name)
 
   # Create the keys directory if it doesn't exist
   if not os.path.exists(keys_dir):
@@ -259,14 +250,14 @@
   def get_path(self, suffix):
     """Forms a path to an output file for this certificate, containing the
     indicated suffix. The certificate's name will be used as its basis."""
-    return os.path.join(g_out_dir, '%s%s' % (self.path_id, suffix))
+    return os.path.join(g_tmp_dir, '%s%s' % (self.path_id, suffix))
 
 
   def get_name_path(self, suffix):
     """Forms a path to an output file for this CA, containing the indicated
     suffix. If multiple certificates have the same name, they will use the same
     path."""
-    return get_path_in_output_dir(self.name, suffix)
+    return get_path_in_tmp_dir(self.name, suffix)
 
 
   def set_key(self, key):
@@ -414,7 +405,7 @@
 
     section = self.config.get_section('root_ca')
     section.set_property('certificate', self.get_cert_path())
-    section.set_property('new_certs_dir', g_out_dir)
+    section.set_property('new_certs_dir', g_tmp_dir)
     section.set_property('serial', self.get_serial_path())
     section.set_property('database', self.get_database_path())
     section.set_property('unique_subject', 'no')
@@ -466,30 +457,8 @@
           block_header, base64.b64encode(text_data), block_header)
 
 
-class TrustAnchor(object):
-  """Structure that represents a trust anchor."""
-
-  def __init__(self, cert, constrained=False):
-    self.cert = cert
-    self.constrained = constrained
-
-
-  def get_pem(self):
-    """Returns a PEM block string describing this trust anchor."""
-
-    cert_data = self.cert.get_cert_pem()
-    block_name = 'TRUST_ANCHOR_UNCONSTRAINED'
-    if self.constrained:
-      block_name = 'TRUST_ANCHOR_CONSTRAINED'
-
-    # Use a different block name in the .pem file, depending on the anchor type.
-    return cert_data.replace('CERTIFICATE', block_name)
-
-
-def write_test_file(description, chain, trust_anchor, utc_time, key_purpose,
-                    verify_result, errors, out_pem=None):
-  """Writes a test file that contains all the inputs necessary to run a
-  verification on a certificate chain."""
+def write_chain(description, chain, out_pem):
+  """Writes the chain to a .pem file as a series of CERTIFICATE blocks"""
 
   # Prepend the script name that generated the file to the description.
   test_data = '[Created by: %s]\n\n%s\n' % (sys.argv[0], description)
@@ -498,19 +467,6 @@
   for cert in chain:
     test_data += '\n' + cert.get_cert_pem()
 
-  test_data += '\n' + trust_anchor.get_pem()
-  test_data += '\n' + text_data_to_pem('TIME', utc_time)
-
-  verify_result_string = 'SUCCESS' if verify_result else 'FAIL'
-  test_data += '\n' + text_data_to_pem('VERIFY_RESULT', verify_result_string)
-
-  test_data += '\n' + text_data_to_pem('KEY_PURPOSE', key_purpose)
-
-  if errors is not None:
-    test_data += '\n' + text_data_to_pem('ERRORS', errors)
-
-  if not out_pem:
-    out_pem = g_script_name + '.pem'
   write_string_to_file(test_data, out_pem)
 
 
@@ -530,8 +486,7 @@
   are all based off of the name of the calling script.
   """
 
-  global g_out_dir
-  global g_script_name
+  global g_tmp_dir
 
   # The scripts assume to be run from within their containing directory (paths
   # to things like "keys/" are written relative).
@@ -544,22 +499,13 @@
         % (expected_cwd))
     sys.exit(1)
 
-  # Base the output name off of the invoking script's name.
-  out_name = os.path.splitext(os.path.basename(invoking_script_path))[0]
-
-  # Strip the leading 'generate-'
-  if out_name.startswith('generate-'):
-    out_name = out_name[9:]
-
   # Use an output directory with the same name as the invoking script.
-  g_out_dir = os.path.join('out', out_name)
+  g_tmp_dir = 'out'
 
   # Ensure the output directory exists and is empty.
-  sys.stdout.write('Creating output directory: %s\n' % (g_out_dir))
-  shutil.rmtree(g_out_dir, True)
-  os.makedirs(g_out_dir)
-
-  g_script_name = out_name
+  sys.stdout.write('Creating output directory: %s\n' % (g_tmp_dir))
+  shutil.rmtree(g_tmp_dir, True)
+  os.makedirs(g_tmp_dir)
 
 
 def create_self_signed_root_certificate(name):
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem b/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
deleted file mode 100644
index 07d17fe..0000000
--- a/src/net/data/verify_certificate_chain_unittest/constrained-non-self-signed-root.pem
+++ /dev/null
@@ -1,288 +0,0 @@
-[Created by: generate-constrained-non-self-signed-root.py]
-
-Certificate chain with 1 intermediate and a non-self-signed trust anchor.
-Verification should succeed, it doesn't matter that the root was not
-self-signed if it is designated as the trust anchor.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:ef:a6:fc:7a:0a:92:7b:00:d2:de:17:b1:d3:77:
-                    c9:bb:1e:1b:fe:db:d7:5d:5e:0d:4e:be:08:c1:c9:
-                    ed:4f:d7:40:0c:dc:ca:78:34:15:fa:ab:eb:1b:b8:
-                    fe:c2:f9:c4:27:23:82:ec:f9:e5:69:7e:40:9d:14:
-                    24:d4:b0:19:cf:2d:3f:88:dc:fb:59:f1:a8:91:19:
-                    e7:b4:e9:99:0d:bf:62:f8:73:8d:8b:80:d4:84:14:
-                    9a:3b:06:5b:81:2a:36:a0:10:b8:94:7f:c7:aa:a1:
-                    1a:69:4e:e1:0a:00:73:f9:7e:30:e0:ca:ac:2a:09:
-                    e3:08:ce:27:cc:08:27:8b:68:7d:fe:d8:c7:1c:38:
-                    8f:f5:39:49:fc:6a:fa:95:45:5c:ab:c2:60:a9:e6:
-                    25:4f:c6:66:af:61:25:3b:72:17:17:4c:43:b6:74:
-                    13:83:7c:91:0c:f4:4a:82:fb:e2:84:6f:2a:00:e1:
-                    7e:94:71:3d:2f:2a:16:47:22:67:a9:b5:16:4f:e1:
-                    1f:5a:a0:2b:87:26:d0:b4:0c:6d:f9:e4:dd:32:a0:
-                    07:c2:25:ec:89:74:0c:b0:b8:fd:1a:3d:9a:c1:ef:
-                    7d:16:3d:c9:ef:c3:ef:71:b4:f7:a6:db:64:4c:5b:
-                    7b:6c:1c:75:ae:94:26:28:6c:1e:b2:da:51:da:54:
-                    32:f9
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                C2:9D:FF:9F:33:B6:74:1F:15:7D:7F:15:6A:7B:3C:8F:E6:C8:E3:7E
-            X509v3 Authority Key Identifier: 
-                keyid:22:F5:B2:95:50:F0:FB:08:B5:6F:A0:B1:26:B1:43:CA:6A:CA:AB:AA
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         ca:c3:44:a2:1e:39:c0:77:09:a6:77:50:8a:d9:ab:5b:43:d1:
-         ee:12:c2:02:61:0e:2d:28:6a:af:92:2a:02:27:c6:f9:80:f5:
-         c1:4d:d8:35:f2:ed:16:31:3a:a1:54:65:44:e5:80:c2:9f:6d:
-         89:49:63:7c:93:78:55:d0:32:00:77:a1:9f:09:dc:1f:07:6e:
-         30:f0:9b:14:ba:60:9c:5c:62:bb:69:f2:59:c3:92:23:47:7a:
-         b5:5f:06:4d:61:9c:f5:5a:c1:7a:70:2b:fb:79:51:98:e4:e1:
-         43:8e:f0:e3:e9:8f:0a:52:59:e0:ab:26:5b:e1:a3:7c:dd:d6:
-         49:4d:a7:7c:8d:58:67:c2:3d:2d:b3:b9:55:02:73:cf:d8:16:
-         82:36:bc:7b:be:70:07:09:81:46:9a:a6:e0:51:df:3b:25:1c:
-         ba:40:54:5d:ad:74:26:33:f6:c2:89:6b:aa:42:f7:ba:12:0c:
-         16:5f:87:26:89:a2:c5:70:ee:7e:52:d3:c0:a0:0d:36:a8:5d:
-         26:8b:85:68:3c:8e:04:b9:05:ef:2c:9f:91:3c:17:36:95:6f:
-         d4:8e:51:66:9b:7d:bd:7e:24:f3:6d:d2:f0:66:1e:1a:76:50:
-         db:e1:26:24:ae:41:31:ea:ad:cf:68:e2:7e:d2:8c:8a:c9:11:
-         2f:ba:45:43
------BEGIN CERTIFICATE-----
-MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
-cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvpvx6
-CpJ7ANLeF7HTd8m7Hhv+29ddXg1OvgjBye1P10AM3Mp4NBX6q+sbuP7C+cQnI4Ls
-+eVpfkCdFCTUsBnPLT+I3PtZ8aiRGee06ZkNv2L4c42LgNSEFJo7BluBKjagELiU
-f8eqoRppTuEKAHP5fjDgyqwqCeMIzifMCCeLaH3+2MccOI/1OUn8avqVRVyrwmCp
-5iVPxmavYSU7chcXTEO2dBODfJEM9EqC++KEbyoA4X6UcT0vKhZHImeptRZP4R9a
-oCuHJtC0DG355N0yoAfCJeyJdAywuP0aPZrB730WPcnvw+9xtPem22RMW3tsHHWu
-lCYobB6y2lHaVDL5AgMBAAGjgekwgeYwHQYDVR0OBBYEFMKd/58ztnQfFX1/FWp7
-PI/myON+MB8GA1UdIwQYMBaAFCL1spVQ8PsItW+gsSaxQ8pqyquqMD8GCCsGAQUF
-BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
-aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
-dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAysNEoh45wHcJpndQitmr
-W0PR7hLCAmEOLShqr5IqAifG+YD1wU3YNfLtFjE6oVRlROWAwp9tiUljfJN4VdAy
-AHehnwncHwduMPCbFLpgnFxiu2nyWcOSI0d6tV8GTWGc9VrBenAr+3lRmOThQ47w
-4+mPClJZ4KsmW+GjfN3WSU2nfI1YZ8I9LbO5VQJzz9gWgja8e75wBwmBRpqm4FHf
-OyUcukBUXa10JjP2wolrqkL3uhIMFl+HJomixXDuflLTwKANNqhdJouFaDyOBLkF
-7yyfkTwXNpVv1I5RZpt9vX4k823S8GYeGnZQ2+EmJK5BMeqtz2jiftKMiskRL7pF
-Qw==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:df:7c:3d:65:45:14:01:09:48:a1:8b:0c:cb:91:
-                    7e:9c:65:f1:1b:40:dd:b7:4c:b1:ac:1b:9e:af:b5:
-                    8a:03:59:f1:77:d4:ab:15:14:53:b5:94:fa:34:20:
-                    f8:35:65:18:da:c5:37:f0:39:bf:f3:bc:7e:73:8a:
-                    77:1c:db:4d:aa:f1:82:37:7c:ca:b5:f5:23:81:71:
-                    0f:21:63:7e:73:64:85:d6:7d:77:41:69:89:5e:c2:
-                    35:41:83:77:61:6c:03:31:aa:ad:83:dd:4b:42:b8:
-                    20:f8:0b:ec:eb:0a:97:b7:5b:b9:d2:16:3b:f4:c2:
-                    61:d3:93:0f:dd:be:19:13:3a:3c:e1:3d:67:47:02:
-                    53:9d:c1:80:5c:24:e3:ba:e5:16:85:10:99:3b:72:
-                    6a:6c:40:13:4b:d0:b4:84:2c:4d:1f:ea:50:44:00:
-                    eb:8c:70:2d:ab:67:68:a4:15:09:9c:46:09:61:64:
-                    3f:ba:c3:1b:d9:bf:29:84:f4:14:8a:25:fe:e2:8a:
-                    fa:1d:ae:da:56:f8:e8:da:02:31:5a:96:c0:21:79:
-                    3c:38:b7:0e:5d:74:c2:2d:14:16:f1:05:ca:f1:1b:
-                    1f:df:fa:d7:33:e2:cb:a1:cf:ef:31:b5:10:eb:f8:
-                    e8:7a:2e:9b:2f:89:3b:73:be:a8:b8:f6:66:1c:b8:
-                    3b:f3
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                22:F5:B2:95:50:F0:FB:08:B5:6F:A0:B1:26:B1:43:CA:6A:CA:AB:AA
-            X509v3 Authority Key Identifier: 
-                keyid:F0:A1:F4:41:56:B9:33:53:7B:7C:DB:DC:AF:9B:3C:66:11:E1:DE:B3
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         8d:16:59:e5:09:e5:3b:8a:bb:cc:4d:0c:d9:17:55:49:b0:47:
-         3e:e2:89:82:5c:82:c2:8a:78:b5:09:3a:a0:9d:27:4e:60:40:
-         16:f6:88:17:95:8d:88:ee:64:af:13:df:a9:6d:24:75:27:a2:
-         15:bb:de:0c:fc:c6:16:f2:55:cc:61:e2:12:92:d9:8f:2d:7a:
-         f5:0d:c4:8d:6b:2b:1a:2f:82:52:b3:9c:ac:cb:40:b7:73:39:
-         60:a0:a1:0b:23:40:fb:cb:d1:86:84:76:17:ad:cd:05:24:e2:
-         81:ce:65:d7:56:34:a4:62:19:e1:a2:2d:ce:ac:36:41:d3:33:
-         a3:58:ea:6e:88:0d:43:38:fe:44:cd:36:b9:10:69:6c:21:2d:
-         2e:ee:5d:96:db:86:7d:42:72:de:42:36:65:e1:f1:0b:e3:b3:
-         c2:42:d9:93:6d:b7:e8:41:b3:12:0a:91:f1:9b:40:01:ae:a7:
-         24:3b:df:6b:35:5a:f2:86:92:c2:31:7f:f5:e8:31:cb:75:54:
-         a6:57:fd:f7:bb:6b:79:ba:ea:77:3a:b9:20:3b:16:89:1a:21:
-         00:4f:ee:23:47:43:50:58:d5:cc:a7:70:01:a3:02:ce:a6:b0:
-         be:5f:ce:7f:12:7c:f2:09:0f:15:a5:5e:10:ed:0d:42:05:49:
-         1a:25:df:22
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33w9ZUUU
-AQlIoYsMy5F+nGXxG0Ddt0yxrBuer7WKA1nxd9SrFRRTtZT6NCD4NWUY2sU38Dm/
-87x+c4p3HNtNqvGCN3zKtfUjgXEPIWN+c2SF1n13QWmJXsI1QYN3YWwDMaqtg91L
-Qrgg+Avs6wqXt1u50hY79MJh05MP3b4ZEzo84T1nRwJTncGAXCTjuuUWhRCZO3Jq
-bEATS9C0hCxNH+pQRADrjHAtq2dopBUJnEYJYWQ/usMb2b8phPQUiiX+4or6Ha7a
-Vvjo2gIxWpbAIXk8OLcOXXTCLRQW8QXK8Rsf3/rXM+LLoc/vMbUQ6/joei6bL4k7
-c76ouPZmHLg78wIDAQABo4HLMIHIMB0GA1UdDgQWBBQi9bKVUPD7CLVvoLEmsUPK
-asqrqjAfBgNVHSMEGDAWgBTwofRBVrkzU3t829yvmzxmEeHeszA3BggrBgEFBQcB
-AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
-BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AI0WWeUJ5TuKu8xNDNkXVUmwRz7iiYJcgsKKeLUJOqCdJ05gQBb2iBeVjYjuZK8T
-36ltJHUnohW73gz8xhbyVcxh4hKS2Y8tevUNxI1rKxovglKznKzLQLdzOWCgoQsj
-QPvL0YaEdhetzQUk4oHOZddWNKRiGeGiLc6sNkHTM6NY6m6IDUM4/kTNNrkQaWwh
-LS7uXZbbhn1Cct5CNmXh8Qvjs8JC2ZNtt+hBsxIKkfGbQAGupyQ732s1WvKGksIx
-f/XoMct1VKZX/fe7a3m66nc6uSA7FokaIQBP7iNHQ1BY1cyncAGjAs6msL5fzn8S
-fPIJDxWlXhDtDUIFSRol3yI=
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=UberRoot
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:f3:dc:12:03:cd:db:fd:7e:72:7d:ec:23:30:07:
-                    d3:f6:13:be:72:df:82:73:3f:bb:ea:c9:93:e6:74:
-                    99:81:e2:dd:a0:00:5a:c6:43:6e:fa:79:00:36:fe:
-                    d7:d8:6a:5d:8f:0a:19:53:3c:aa:b5:9f:0d:6c:8a:
-                    23:ae:04:da:f3:f0:23:f2:b2:7b:ab:cc:d1:d7:b6:
-                    d9:7a:3a:e3:2a:b9:ca:d5:42:3c:be:66:83:8a:2e:
-                    0c:53:6c:10:e9:ce:5e:f7:4f:83:f7:c4:32:7b:b7:
-                    33:ff:b1:89:09:39:fd:f4:7b:98:f5:02:8a:5b:9c:
-                    89:04:07:0f:8e:72:13:f1:33:a1:ae:6c:92:51:a8:
-                    07:87:df:32:c9:4b:86:f5:8a:cf:b1:ac:04:17:b1:
-                    6b:09:41:17:51:01:78:c9:4a:b8:3d:31:5c:f1:97:
-                    36:6d:3c:99:cf:66:b2:8b:22:b1:04:66:de:9b:cb:
-                    1c:d7:75:28:75:9f:97:f5:46:e0:53:6a:9c:4e:26:
-                    19:5a:2d:2d:6b:cb:dd:37:6b:08:cd:0d:de:df:6c:
-                    cd:1d:81:8b:e8:35:de:2b:16:c1:e5:f8:58:41:5c:
-                    65:38:d8:c1:e4:b7:df:b1:ad:79:e0:c5:05:a5:9a:
-                    54:25:41:33:61:6e:5c:4b:1b:08:07:25:ce:c0:84:
-                    1a:57
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                F0:A1:F4:41:56:B9:33:53:7B:7C:DB:DC:AF:9B:3C:66:11:E1:DE:B3
-            X509v3 Authority Key Identifier: 
-                keyid:24:E4:04:3C:15:03:89:2D:99:71:16:0F:70:8E:32:24:76:BD:99:C6
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/UberRoot.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/UberRoot.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         94:82:81:b0:49:b8:87:5c:c1:eb:62:24:0b:3c:de:26:15:28:
-         2a:1a:5c:c7:e7:61:85:46:48:df:5c:2c:a2:d0:3e:ca:2e:8c:
-         6a:fd:3b:4d:58:52:72:58:c1:d9:10:0c:1f:af:ac:40:38:c7:
-         60:67:8e:14:6b:f9:7a:cb:1c:e0:b6:58:b2:32:f0:c3:2e:c7:
-         26:af:08:7f:06:42:ec:99:3a:dc:71:2b:cf:35:5f:45:c2:39:
-         4c:1a:ab:86:99:1f:68:08:94:45:20:eb:49:28:06:a7:b1:69:
-         5d:0c:da:dc:79:99:b4:46:eb:6c:b5:a9:d2:15:ce:1a:2f:e7:
-         53:0f:6c:7f:67:a2:f9:63:34:f6:a0:22:7c:fb:31:0b:aa:5c:
-         02:39:17:9e:c1:60:b7:06:3f:a6:9c:2f:6c:ef:56:36:be:b9:
-         45:a4:d2:e5:a5:8f:c1:28:0b:1f:e2:c1:8f:29:40:10:86:e5:
-         f5:12:e5:f7:33:7f:ae:a4:3c:11:2e:03:be:0f:5f:4a:25:83:
-         d4:28:6a:e5:a8:04:a3:dd:f5:3f:6b:12:ee:45:84:19:32:5e:
-         ea:32:0c:96:f3:cb:a8:b6:15:d5:0c:99:00:ed:68:84:ef:8b:
-         d3:86:74:b0:ee:70:60:0e:65:43:62:59:54:b3:26:6b:a7:d0:
-         3f:71:57:2f
------BEGIN TRUST_ANCHOR_CONSTRAINED-----
-MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhVYmVy
-Um9vdDAeFw0xNTAxMDExMjAwMDBaFw0xNjAxMDExMjAwMDBaMA8xDTALBgNVBAMM
-BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDz3BIDzdv9fnJ9
-7CMwB9P2E75y34JzP7vqyZPmdJmB4t2gAFrGQ276eQA2/tfYal2PChlTPKq1nw1s
-iiOuBNrz8CPysnurzNHXttl6OuMqucrVQjy+ZoOKLgxTbBDpzl73T4P3xDJ7tzP/
-sYkJOf30e5j1AopbnIkEBw+OchPxM6GubJJRqAeH3zLJS4b1is+xrAQXsWsJQRdR
-AXjJSrg9MVzxlzZtPJnPZrKLIrEEZt6byxzXdSh1n5f1RuBTapxOJhlaLS1ry903
-awjNDd7fbM0dgYvoNd4rFsHl+FhBXGU42MHkt9+xrXngxQWlmlQlQTNhblxLGwgH
-Jc7AhBpXAgMBAAGjgdMwgdAwHQYDVR0OBBYEFPCh9EFWuTNTe3zb3K+bPGYR4d6z
-MB8GA1UdIwQYMBaAFCTkBDwVA4ktmXEWD3COMiR2vZnGMDsGCCsGAQUFBwEBBC8w
-LTArBggrBgEFBQcwAoYfaHR0cDovL3VybC1mb3ItYWlhL1ViZXJSb290LmNlcjAw
-BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vdXJsLWZvci1jcmwvVWJlclJvb3QuY3Js
-MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
-A4IBAQCUgoGwSbiHXMHrYiQLPN4mFSgqGlzH52GFRkjfXCyi0D7KLoxq/TtNWFJy
-WMHZEAwfr6xAOMdgZ44Ua/l6yxzgtliyMvDDLscmrwh/BkLsmTrccSvPNV9FwjlM
-GquGmR9oCJRFIOtJKAansWldDNrceZm0RutstanSFc4aL+dTD2x/Z6L5YzT2oCJ8
-+zELqlwCOReewWC3Bj+mnC9s71Y2vrlFpNLlpY/BKAsf4sGPKUAQhuX1EuX3M3+u
-pDwRLgO+D19KJYPUKGrlqASj3fU/axLuRYQZMl7qMgyW88uothXVDJkA7WiE74vT
-hnSw7nBgDmVDYllUsyZrp9A/cVcv
------END TRUST_ANCHOR_CONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-root-bad-eku.pem b/src/net/data/verify_certificate_chain_unittest/constrained-root-bad-eku.pem
deleted file mode 100644
index 5fe160a..0000000
--- a/src/net/data/verify_certificate_chain_unittest/constrained-root-bad-eku.pem
+++ /dev/null
@@ -1,299 +0,0 @@
-[Created by: generate-constrained-root-bad-eku.py]
-
-Certificate chain with 1 intermediate and a trust anchor. The trust anchor
-has an EKU that restricts it to clientAuth. Verification is expected to fail as
-the end-entity is verified for serverAuth, and the trust anchor enforces
-constraints.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:f0:08:00:ea:5d:93:fb:9f:3d:fd:b5:ae:6f:89:
-                    02:b9:7f:4b:75:b9:51:cb:ef:6f:dd:7b:50:b6:2a:
-                    a7:fa:9c:41:88:6e:a1:be:2b:8b:54:2a:02:c8:c0:
-                    2c:ed:c8:ad:75:9d:84:22:c5:12:d8:63:ac:60:85:
-                    42:3d:e2:c5:59:00:01:c7:4d:63:08:bf:a2:63:cf:
-                    dd:fc:48:e6:55:e6:2c:5c:d6:bf:e1:d1:19:09:56:
-                    8b:43:f2:be:ba:04:81:33:7d:5c:ee:26:3b:f7:c2:
-                    15:d5:57:11:4c:08:fc:48:e4:f5:8b:d1:62:cb:72:
-                    10:7e:fe:ae:84:ff:f8:d6:35:20:80:f3:b9:59:a3:
-                    7f:1d:bf:6f:f5:6d:6b:29:e4:b1:5e:2e:20:cc:80:
-                    04:f8:6d:67:04:18:71:ac:c3:cf:53:4b:ca:1a:a1:
-                    06:c1:7d:d7:fe:24:a8:6b:d2:52:18:4a:7a:ad:c4:
-                    2f:70:e1:a8:66:9a:94:dc:13:b2:26:4d:e0:60:f1:
-                    67:57:31:f1:00:d5:b2:3c:31:6a:34:52:75:2b:d2:
-                    f3:d3:b0:d6:f7:54:be:9c:ba:99:39:82:50:02:ee:
-                    b6:d8:c4:b7:ce:08:30:a7:8e:2d:b0:6b:78:f1:19:
-                    27:cd:c5:c3:a4:f2:c7:91:b3:5e:61:94:e6:a7:94:
-                    3b:c7
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                F2:29:C1:07:7D:FB:62:7D:1B:06:45:F8:E8:F4:FE:77:B2:8C:BC:AE
-            X509v3 Authority Key Identifier: 
-                keyid:8B:3C:5F:76:85:CD:27:14:00:7B:0B:92:AF:4A:D5:52:9B:BA:53:BE
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         3a:2e:7b:e3:cd:20:6b:b0:dc:d6:a3:4f:00:98:53:76:bd:36:
-         82:12:c8:ed:11:8a:31:17:90:55:45:07:0d:72:4e:94:dd:a6:
-         22:ad:c0:b9:ee:4e:5f:d5:0d:1c:62:d8:04:5d:75:75:10:ed:
-         e1:4b:79:16:cf:bd:b1:2e:bc:0d:1b:10:0c:4b:77:8f:61:51:
-         7f:41:fb:35:2d:5c:2d:b4:51:15:01:68:51:72:ae:ec:eb:bb:
-         f8:e1:45:7a:80:5c:e5:5b:c5:c0:27:1d:12:7a:d5:80:be:06:
-         64:38:f7:59:57:f5:c8:54:aa:42:0f:71:f0:d5:b9:a3:dc:7e:
-         e0:e8:08:d2:d3:6d:12:aa:51:24:fa:5d:58:64:73:a7:8a:b6:
-         4a:83:9c:a2:12:04:4c:cb:2f:40:e6:6e:e1:b2:fe:1a:d0:7e:
-         2c:fd:e8:21:5c:08:fe:e8:d4:81:cd:07:2f:c1:ca:96:c8:79:
-         2e:53:30:36:41:8e:bd:49:95:76:1e:18:b6:53:a5:45:d0:08:
-         b4:e7:21:13:bc:f1:21:00:18:34:dc:d1:86:71:ea:05:70:54:
-         ac:42:89:20:e1:9f:4a:0e:11:09:00:bf:fd:46:91:3e:13:14:
-         7c:c6:68:e1:df:c1:16:5d:3f:e9:2f:91:dd:17:0a:e4:95:3d:
-         a6:96:e4:cf
------BEGIN CERTIFICATE-----
-MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
-cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDwCADq
-XZP7nz39ta5viQK5f0t1uVHL72/de1C2Kqf6nEGIbqG+K4tUKgLIwCztyK11nYQi
-xRLYY6xghUI94sVZAAHHTWMIv6Jjz938SOZV5ixc1r/h0RkJVotD8r66BIEzfVzu
-Jjv3whXVVxFMCPxI5PWL0WLLchB+/q6E//jWNSCA87lZo38dv2/1bWsp5LFeLiDM
-gAT4bWcEGHGsw89TS8oaoQbBfdf+JKhr0lIYSnqtxC9w4ahmmpTcE7ImTeBg8WdX
-MfEA1bI8MWo0UnUr0vPTsNb3VL6cupk5glAC7rbYxLfOCDCnji2wa3jxGSfNxcOk
-8seRs15hlOanlDvHAgMBAAGjgekwgeYwHQYDVR0OBBYEFPIpwQd9+2J9GwZF+Oj0
-/neyjLyuMB8GA1UdIwQYMBaAFIs8X3aFzScUAHsLkq9K1VKbulO+MD8GCCsGAQUF
-BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
-aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
-dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAOi57480ga7Dc1qNPAJhT
-dr02ghLI7RGKMReQVUUHDXJOlN2mIq3Aue5OX9UNHGLYBF11dRDt4Ut5Fs+9sS68
-DRsQDEt3j2FRf0H7NS1cLbRRFQFoUXKu7Ou7+OFFeoBc5VvFwCcdEnrVgL4GZDj3
-WVf1yFSqQg9x8NW5o9x+4OgI0tNtEqpRJPpdWGRzp4q2SoOcohIETMsvQOZu4bL+
-GtB+LP3oIVwI/ujUgc0HL8HKlsh5LlMwNkGOvUmVdh4YtlOlRdAItOchE7zxIQAY
-NNzRhnHqBXBUrEKJIOGfSg4RCQC//UaRPhMUfMZo4d/BFl0/6S+R3RcK5JU9ppbk
-zw==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:b6:0a:f3:0b:43:2a:d8:e5:15:f6:48:94:21:e9:
-                    23:61:0f:0e:cc:5a:a6:ba:45:b0:8b:99:54:44:0b:
-                    56:4e:b1:13:e2:ce:b9:58:0a:dc:77:41:36:86:ac:
-                    eb:b4:54:04:77:1f:cf:f6:1d:12:c5:58:38:65:ff:
-                    20:41:f0:43:9d:a4:bf:fa:61:3b:75:52:f0:39:9d:
-                    5b:fb:e2:88:fb:69:32:b2:b9:4d:a8:34:88:e3:ce:
-                    e1:2f:f4:03:d5:1b:3f:1a:ab:95:98:a1:6f:87:2b:
-                    10:76:02:4f:ba:67:7f:9a:23:5c:90:8a:dc:b3:27:
-                    a5:28:14:98:1e:b2:06:92:0a:60:37:fe:56:b6:16:
-                    84:59:01:a5:e9:1d:04:d5:46:66:e4:30:fa:0e:0e:
-                    c2:d7:66:21:4a:fc:99:4f:85:33:96:36:7d:dc:5c:
-                    04:16:bc:5c:ee:f3:6d:4d:b6:a2:0f:39:fc:e2:63:
-                    96:bf:3d:5a:61:02:8f:db:d7:07:c4:24:02:f0:02:
-                    52:e7:2c:08:78:b9:8d:d9:5f:2d:cc:6c:1e:9e:f9:
-                    91:95:e8:be:13:77:02:b3:86:ab:cb:24:ed:4a:bf:
-                    36:29:2d:66:36:1e:fc:3d:3a:c5:0f:23:5d:e9:2e:
-                    41:d8:79:97:ee:8b:cc:75:2d:c7:3a:be:4d:e5:fd:
-                    a2:33
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                8B:3C:5F:76:85:CD:27:14:00:7B:0B:92:AF:4A:D5:52:9B:BA:53:BE
-            X509v3 Authority Key Identifier: 
-                keyid:1A:DD:A6:8B:40:A4:5B:6A:1B:06:BF:9B:76:54:8A:9B:88:F8:8B:07
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         83:84:de:b3:56:ad:2a:16:56:6e:7b:64:3e:35:bd:39:38:2e:
-         6e:2a:fa:09:a9:c3:ea:86:30:8c:4e:e0:2b:13:80:a1:40:f3:
-         10:15:9d:4f:77:90:0f:12:c9:a5:60:2e:87:43:0b:c1:90:5a:
-         b3:95:fb:37:0c:c7:86:d0:2f:bb:4c:b8:97:40:d6:61:a6:47:
-         e6:30:42:9f:e6:28:ac:b7:99:83:52:a0:c0:4b:dd:e2:ad:1b:
-         e7:5d:c5:9a:fb:6c:d9:bc:7c:bc:64:1a:47:9b:01:9f:4e:10:
-         aa:f7:6a:25:a0:0b:64:6b:8f:54:42:74:23:d3:83:a8:b7:fc:
-         78:95:65:11:27:f2:b5:1e:90:78:31:9d:f3:5f:7f:8d:63:3f:
-         ce:cf:1e:11:bd:8b:01:a7:fa:33:d2:9b:ac:9c:c0:ee:b1:f2:
-         ee:02:ea:73:07:28:1d:8c:23:98:93:cc:23:92:26:35:a4:d7:
-         57:f7:d1:28:b0:4e:6a:9c:78:01:c9:f2:52:e0:1d:13:86:76:
-         7e:13:3c:07:69:a5:3f:d6:3e:2e:36:70:0a:be:4d:1a:14:ac:
-         73:bd:5a:ad:78:68:a6:35:a2:50:5b:ab:c1:e3:a1:f7:47:f2:
-         76:2b:e8:5d:4a:e4:f3:4a:dc:93:53:64:9c:83:f3:af:a5:0f:
-         e1:83:1d:89
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtgrzC0Mq
-2OUV9kiUIekjYQ8OzFqmukWwi5lURAtWTrET4s65WArcd0E2hqzrtFQEdx/P9h0S
-xVg4Zf8gQfBDnaS/+mE7dVLwOZ1b++KI+2kysrlNqDSI487hL/QD1Rs/GquVmKFv
-hysQdgJPumd/miNckIrcsyelKBSYHrIGkgpgN/5WthaEWQGl6R0E1UZm5DD6Dg7C
-12YhSvyZT4UzljZ93FwEFrxc7vNtTbaiDzn84mOWvz1aYQKP29cHxCQC8AJS5ywI
-eLmN2V8tzGwenvmRlei+E3cCs4aryyTtSr82KS1mNh78PTrFDyNd6S5B2HmX7ovM
-dS3HOr5N5f2iMwIDAQABo4HLMIHIMB0GA1UdDgQWBBSLPF92hc0nFAB7C5KvStVS
-m7pTvjAfBgNVHSMEGDAWgBQa3aaLQKRbahsGv5t2VIqbiPiLBzA3BggrBgEFBQcB
-AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
-BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AIOE3rNWrSoWVm57ZD41vTk4Lm4q+gmpw+qGMIxO4CsTgKFA8xAVnU93kA8SyaVg
-LodDC8GQWrOV+zcMx4bQL7tMuJdA1mGmR+YwQp/mKKy3mYNSoMBL3eKtG+ddxZr7
-bNm8fLxkGkebAZ9OEKr3aiWgC2Rrj1RCdCPTg6i3/HiVZREn8rUekHgxnfNff41j
-P87PHhG9iwGn+jPSm6ycwO6x8u4C6nMHKB2MI5iTzCOSJjWk11f30SiwTmqceAHJ
-8lLgHROGdn4TPAdppT/WPi42cAq+TRoUrHO9Wq14aKY1olBbq8HjofdH8nYr6F1K
-5PNK3JNTZJyD86+lD+GDHYk=
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:d9:e2:08:ac:46:4f:3e:c9:2c:0e:1b:2e:0d:cb:
-                    05:2e:b2:60:dd:39:3b:31:90:3c:89:ee:6f:32:3f:
-                    4e:9c:4a:93:d7:97:e5:e9:9d:0a:72:a5:77:c8:e6:
-                    67:db:e0:e2:d7:35:ab:d5:7b:26:2a:97:39:4c:04:
-                    e3:32:93:df:69:9e:5e:c7:fb:3a:53:70:18:91:39:
-                    76:23:aa:65:5b:e0:87:32:cb:2c:6c:6f:e7:38:9f:
-                    79:db:23:ea:3c:86:9b:f2:03:d3:df:15:5c:ce:58:
-                    b5:46:77:5d:21:09:f9:e3:ae:16:ce:e6:d5:95:41:
-                    d5:ee:c7:74:89:bf:dc:c8:80:47:e0:49:6e:ff:26:
-                    6b:0a:d4:c2:04:21:a0:b5:b0:07:4d:1b:1c:e1:a8:
-                    53:23:13:3f:01:31:d9:3f:dc:2d:70:8b:61:49:b1:
-                    6d:6f:c6:4e:f7:35:45:17:40:39:9d:28:1d:77:68:
-                    82:c2:75:9a:c2:9f:90:ab:4c:c9:8a:3e:68:2a:2c:
-                    ba:62:ab:e1:58:c8:3b:fe:c0:95:8e:55:33:53:ca:
-                    3f:fb:9a:ae:95:13:65:3f:a6:9a:d6:98:f1:ad:72:
-                    74:ce:d8:65:12:9f:63:fd:63:c5:3f:90:3d:d8:b2:
-                    2b:fe:48:fa:da:ab:f2:49:c6:1d:2a:ba:f8:73:e1:
-                    50:a1
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                1A:DD:A6:8B:40:A4:5B:6A:1B:06:BF:9B:76:54:8A:9B:88:F8:8B:07
-            X509v3 Authority Key Identifier: 
-                keyid:1A:DD:A6:8B:40:A4:5B:6A:1B:06:BF:9B:76:54:8A:9B:88:F8:8B:07
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-            X509v3 Extended Key Usage: 
-                TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         7f:58:39:4d:ec:e0:7e:11:fa:c1:29:d1:c8:56:42:19:33:f4:
-         8c:e0:a1:22:90:fc:9d:cc:d2:36:4f:f7:91:51:cc:0a:40:49:
-         da:cc:70:81:3e:59:ae:65:a3:c5:86:42:5f:df:fe:1d:51:93:
-         fb:77:99:01:b0:02:c5:95:1f:32:6f:a2:4a:21:28:50:f8:bc:
-         5d:67:01:28:a0:4f:6c:a0:43:ea:7b:7a:66:3a:33:a0:c2:0c:
-         a5:44:10:9b:e4:f9:4a:09:43:02:e0:01:ca:fd:c2:b1:07:31:
-         c8:6b:0d:ec:c8:c1:4f:53:2e:10:1b:d9:8a:42:00:74:d5:cc:
-         ec:47:51:c5:12:63:a7:f2:93:4f:0e:cd:82:3c:70:3b:9f:c8:
-         0c:9f:5b:fa:15:47:e5:e6:6d:5d:37:7c:fa:e2:a2:4b:aa:d8:
-         be:c4:2e:e5:3e:71:ae:c9:7b:79:86:1c:29:3c:00:e3:d5:9b:
-         30:23:12:c0:33:12:7d:36:8c:99:cb:6a:39:74:fa:8f:6e:8f:
-         5c:53:6e:53:94:59:c9:59:7d:1e:3c:e2:ac:32:43:5e:4c:14:
-         87:cf:39:c9:55:38:e0:29:a6:19:e9:62:21:8d:f0:1b:9d:31:
-         c9:c3:93:12:fd:b3:0e:83:fc:21:dc:bb:df:09:a6:57:6e:18:
-         58:ff:ad:73
------BEGIN TRUST_ANCHOR_CONSTRAINED-----
-MIIDejCCAmKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANniCKxGTz7JLA4bLg3L
-BS6yYN05OzGQPInubzI/TpxKk9eX5emdCnKld8jmZ9vg4tc1q9V7JiqXOUwE4zKT
-32meXsf7OlNwGJE5diOqZVvghzLLLGxv5zifedsj6jyGm/ID098VXM5YtUZ3XSEJ
-+eOuFs7m1ZVB1e7HdIm/3MiAR+BJbv8mawrUwgQhoLWwB00bHOGoUyMTPwEx2T/c
-LXCLYUmxbW/GTvc1RRdAOZ0oHXdogsJ1msKfkKtMyYo+aCosumKr4VjIO/7AlY5V
-M1PKP/uarpUTZT+mmtaY8a1ydM7YZRKfY/1jxT+QPdiyK/5I+tqr8knGHSq6+HPh
-UKECAwEAAaOB4DCB3TAdBgNVHQ4EFgQUGt2mi0CkW2obBr+bdlSKm4j4iwcwHwYD
-VR0jBBgwFoAUGt2mi0CkW2obBr+bdlSKm4j4iwcwNwYIKwYBBQUHAQEEKzApMCcG
-CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
-IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqG
-SIb3DQEBCwUAA4IBAQB/WDlN7OB+EfrBKdHIVkIZM/SM4KEikPydzNI2T/eRUcwK
-QEnazHCBPlmuZaPFhkJf3/4dUZP7d5kBsALFlR8yb6JKIShQ+LxdZwEooE9soEPq
-e3pmOjOgwgylRBCb5PlKCUMC4AHK/cKxBzHIaw3syMFPUy4QG9mKQgB01czsR1HF
-EmOn8pNPDs2CPHA7n8gMn1v6FUfl5m1dN3z64qJLqti+xC7lPnGuyXt5hhwpPADj
-1ZswIxLAMxJ9NoyZy2o5dPqPbo9cU25TlFnJWX0ePOKsMkNeTBSHzznJVTjgKaYZ
-6WIhjfAbnTHJw5MS/bMOg/wh3LvfCaZXbhhY/61z
------END TRUST_ANCHOR_CONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=2 -----
-ERROR: The extended key usage does not include server auth
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0yIC0tLS0tCkVSUk9SOiBUaGUgZXh0ZW5kZWQga2V5IHVzYWdlIGRvZXMgbm90IGluY2x1ZGUgc2VydmVyIGF1dGgKCg==
------END ERRORS-----
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem b/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
deleted file mode 100644
index 6e57e66..0000000
--- a/src/net/data/verify_certificate_chain_unittest/constrained-root-lacks-basic-constraints.pem
+++ /dev/null
@@ -1,285 +0,0 @@
-[Created by: generate-constrained-root-lacks-basic-constraints.py]
-
-Certificate chain with 1 intermediate and a trust anchor. The trust anchor
-lacks the basic constraints extension, and is loaded with anchor constraints.
-This is not a problem and verification should succeed.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:b6:ec:ef:24:7e:2c:a4:bb:5b:e1:b1:a0:d6:fd:
-                    a0:3d:be:ea:69:1b:dc:65:d0:35:ab:1a:cf:0a:08:
-                    f5:ba:f3:96:99:55:87:14:d5:fb:43:e0:a9:ab:f7:
-                    e6:d1:fc:09:53:e3:81:5b:1a:ba:b6:a9:93:3e:21:
-                    c9:65:11:54:ca:77:74:e5:dc:d3:a2:78:72:b8:59:
-                    3b:4b:85:1f:f2:b8:3b:38:1e:56:55:c9:fa:fb:ed:
-                    3b:0b:55:11:76:24:23:4d:bd:92:fb:2c:87:ce:0c:
-                    2a:1d:16:60:91:5f:92:d6:e3:a6:c5:02:4e:24:22:
-                    76:5d:45:0e:35:9e:f4:4b:f5:a1:d2:5e:0b:15:90:
-                    34:64:c7:13:3a:97:32:01:25:06:55:34:34:c1:95:
-                    17:e6:93:03:6e:59:2f:68:0a:a6:ea:83:70:9f:3c:
-                    0e:b1:29:f2:eb:14:69:19:ec:ef:43:64:9e:bf:15:
-                    28:d9:e6:d0:b3:a9:da:9e:da:a8:86:36:21:a4:9b:
-                    21:c8:c2:dc:d8:04:fd:a9:1a:3b:15:64:eb:fa:50:
-                    a1:71:85:9b:9f:14:e1:6f:9c:32:98:2d:82:64:71:
-                    1c:4a:8f:bc:fb:0b:98:18:ef:e3:d9:3f:9a:df:1e:
-                    b9:09:ab:bf:b0:d4:09:05:e5:47:14:c1:b8:05:59:
-                    cc:2d
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                83:4E:85:AD:B6:23:89:9C:16:DE:68:3B:75:E5:29:7B:D8:06:2D:49
-            X509v3 Authority Key Identifier: 
-                keyid:89:BF:48:AC:C6:30:B7:51:CE:94:B6:45:9D:D8:C8:16:8B:7D:47:F7
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         68:d1:c1:bd:2a:ed:8b:6b:14:e1:52:15:16:6c:2f:d9:0b:e4:
-         24:2a:55:e7:dc:58:ff:b4:c3:05:2d:f3:7c:36:aa:db:cd:6b:
-         ae:19:df:63:e8:6d:91:1d:a7:02:b7:b5:e4:a2:60:9b:3d:9f:
-         a3:0d:5c:f6:72:87:1e:bf:2e:e8:4c:c1:61:48:4b:8a:d6:8f:
-         9b:82:3f:fe:f1:d7:94:04:82:cb:6a:7f:33:b7:97:f6:6c:bf:
-         79:f3:94:e9:46:ed:00:e5:16:e5:12:f5:f1:e4:e7:45:1c:8b:
-         fa:b3:ca:03:27:74:df:69:b2:e3:75:3b:b0:96:c2:42:97:07:
-         03:b7:34:8e:e0:c5:01:7b:1d:b8:24:7d:9c:b5:4f:d5:0a:c1:
-         45:9a:f6:a5:72:e6:ca:84:78:f2:b9:ac:4e:68:75:23:57:9e:
-         0e:f5:06:2e:d1:38:5f:d8:81:b6:e0:f6:72:cb:7d:dc:16:5f:
-         72:66:b7:0d:60:aa:7e:48:4e:16:62:74:3d:d7:de:b1:d3:ae:
-         e2:07:d0:e9:4c:7f:ef:32:80:1a:8b:7f:ae:14:0d:59:31:59:
-         ab:39:39:df:27:c0:23:82:d7:39:e8:8e:48:b9:53:f3:c5:e9:
-         84:93:be:f4:32:44:d8:ed:1a:d5:49:3d:14:d8:07:f6:a1:6f:
-         93:f9:1b:21
------BEGIN CERTIFICATE-----
-MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
-cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC27O8k
-fiyku1vhsaDW/aA9vuppG9xl0DWrGs8KCPW685aZVYcU1ftD4Kmr9+bR/AlT44Fb
-Grq2qZM+IcllEVTKd3Tl3NOieHK4WTtLhR/yuDs4HlZVyfr77TsLVRF2JCNNvZL7
-LIfODCodFmCRX5LW46bFAk4kInZdRQ41nvRL9aHSXgsVkDRkxxM6lzIBJQZVNDTB
-lRfmkwNuWS9oCqbqg3CfPA6xKfLrFGkZ7O9DZJ6/FSjZ5tCzqdqe2qiGNiGkmyHI
-wtzYBP2pGjsVZOv6UKFxhZufFOFvnDKYLYJkcRxKj7z7C5gY7+PZP5rfHrkJq7+w
-1AkF5UcUwbgFWcwtAgMBAAGjgekwgeYwHQYDVR0OBBYEFINOha22I4mcFt5oO3Xl
-KXvYBi1JMB8GA1UdIwQYMBaAFIm/SKzGMLdRzpS2RZ3YyBaLfUf3MD8GCCsGAQUF
-BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
-aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
-dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAaNHBvSrti2sU4VIVFmwv
-2QvkJCpV59xY/7TDBS3zfDaq281rrhnfY+htkR2nAre15KJgmz2fow1c9nKHHr8u
-6EzBYUhLitaPm4I//vHXlASCy2p/M7eX9my/efOU6UbtAOUW5RL18eTnRRyL+rPK
-Ayd032my43U7sJbCQpcHA7c0juDFAXsduCR9nLVP1QrBRZr2pXLmyoR48rmsTmh1
-I1eeDvUGLtE4X9iBtuD2cst93BZfcma3DWCqfkhOFmJ0PdfesdOu4gfQ6Ux/7zKA
-Got/rhQNWTFZqzk53yfAI4LXOeiOSLlT88XphJO+9DJE2O0a1Uk9FNgH9qFvk/kb
-IQ==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:ac:2a:39:80:53:9e:de:12:59:e3:e1:77:4d:62:
-                    f3:bc:5e:ba:8a:e3:a0:72:81:10:b5:55:37:e9:16:
-                    8b:f3:39:42:71:11:e7:d8:50:5e:08:f5:60:f8:bb:
-                    73:89:eb:73:65:30:49:c7:10:5f:fa:f7:0d:a2:ae:
-                    7e:8e:cb:ba:b8:64:ba:36:92:e1:c0:16:15:a6:93:
-                    13:62:71:0e:5f:a6:a9:4f:54:d1:62:d8:14:a9:b5:
-                    4a:ef:27:74:83:2a:33:ed:9e:3a:ba:e4:c4:d9:04:
-                    73:34:1b:fc:68:ea:4d:6f:d2:3d:ba:25:04:18:2c:
-                    3d:c4:81:dd:01:b8:b4:fe:3a:09:c6:2a:72:84:e6:
-                    fa:00:a7:db:7f:4c:a0:c9:46:b5:9c:fc:15:d4:4c:
-                    98:8e:60:43:2f:41:2d:6d:a7:f9:99:d8:ef:92:c5:
-                    6c:f2:cc:d2:50:c0:44:1b:a4:c2:0c:a8:7a:66:64:
-                    ae:76:4d:11:03:b4:d0:0a:6f:01:d4:e2:6d:90:42:
-                    33:78:17:78:8b:e1:b3:55:77:9b:f8:8f:d2:5f:08:
-                    08:bf:f9:51:fe:8e:8b:ab:ea:fb:31:15:cb:b2:ed:
-                    fc:16:78:c8:ec:fb:43:c4:35:4b:da:78:a5:53:0e:
-                    7a:5e:63:93:e4:f6:02:93:aa:9a:a4:c0:e1:7f:45:
-                    1b:39
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                89:BF:48:AC:C6:30:B7:51:CE:94:B6:45:9D:D8:C8:16:8B:7D:47:F7
-            X509v3 Authority Key Identifier: 
-                keyid:FA:67:7E:92:9E:B8:4B:2B:0A:B0:E7:68:CC:C8:EA:A9:97:AF:A2:FD
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         c0:f6:2e:12:b6:74:1d:04:70:30:75:1b:4e:ab:8d:e3:66:1e:
-         7d:eb:6d:51:f7:ee:a0:92:5c:2d:1b:fe:63:de:4e:5e:62:fc:
-         14:45:43:cb:c3:00:b9:ad:44:cb:a6:2a:43:e6:1d:8d:6c:09:
-         30:70:eb:fa:be:6a:bc:04:c9:7f:c4:cd:d0:ac:d5:07:34:1b:
-         d8:77:97:3f:82:41:4e:d1:7a:ff:d0:36:85:2c:7f:2f:ff:e5:
-         48:67:c8:71:a7:a0:fe:21:e4:8a:10:2e:45:e8:69:99:2e:2f:
-         aa:86:ad:e1:b6:4a:a2:49:cc:8e:a7:32:6a:ee:ff:ea:be:e4:
-         ed:f4:09:a2:b7:5f:39:a0:2c:c2:60:cd:67:0c:e1:4a:c8:02:
-         17:02:30:49:0d:31:df:30:fc:5a:ae:24:ab:ad:66:93:0f:34:
-         8b:62:a6:eb:86:44:4d:8f:cf:31:5f:df:91:c9:4c:8d:10:89:
-         a5:67:ad:ff:38:2b:56:81:76:e5:42:d4:6a:78:04:93:41:6b:
-         b1:ee:62:f6:da:8f:35:35:d2:26:54:c0:7a:f7:44:b7:b6:81:
-         ae:f5:e6:50:c9:f7:06:35:a1:9b:aa:19:2c:3c:31:b1:84:00:
-         47:3c:1a:31:11:5c:69:0b:a9:b6:e9:3b:34:32:e1:7e:66:0e:
-         0d:6a:9b:ca
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArCo5gFOe
-3hJZ4+F3TWLzvF66iuOgcoEQtVU36RaL8zlCcRHn2FBeCPVg+LtzietzZTBJxxBf
-+vcNoq5+jsu6uGS6NpLhwBYVppMTYnEOX6apT1TRYtgUqbVK7yd0gyoz7Z46uuTE
-2QRzNBv8aOpNb9I9uiUEGCw9xIHdAbi0/joJxipyhOb6AKfbf0ygyUa1nPwV1EyY
-jmBDL0Etbaf5mdjvksVs8szSUMBEG6TCDKh6ZmSudk0RA7TQCm8B1OJtkEIzeBd4
-i+GzVXeb+I/SXwgIv/lR/o6Lq+r7MRXLsu38FnjI7PtDxDVL2nilUw56XmOT5PYC
-k6qapMDhf0UbOQIDAQABo4HLMIHIMB0GA1UdDgQWBBSJv0isxjC3Uc6UtkWd2MgW
-i31H9zAfBgNVHSMEGDAWgBT6Z36SnrhLKwqw52jMyOqpl6+i/TA3BggrBgEFBQcB
-AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
-BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AMD2LhK2dB0EcDB1G06rjeNmHn3rbVH37qCSXC0b/mPeTl5i/BRFQ8vDALmtRMum
-KkPmHY1sCTBw6/q+arwEyX/EzdCs1Qc0G9h3lz+CQU7Rev/QNoUsfy//5UhnyHGn
-oP4h5IoQLkXoaZkuL6qGreG2SqJJzI6nMmru/+q+5O30CaK3XzmgLMJgzWcM4UrI
-AhcCMEkNMd8w/FquJKutZpMPNItipuuGRE2PzzFf35HJTI0QiaVnrf84K1aBduVC
-1Gp4BJNBa7HuYvbajzU10iZUwHr3RLe2ga715lDJ9wY1oZuqGSw8MbGEAEc8GjER
-XGkLqbbpOzQy4X5mDg1qm8o=
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:d5:a0:85:97:01:89:b2:31:f1:f5:fb:99:66:f9:
-                    47:a6:fd:65:be:1e:35:ef:8b:ad:75:bf:81:61:9e:
-                    aa:54:d6:02:87:61:07:d4:4e:0a:c5:2d:9a:78:e0:
-                    93:ee:b9:b1:aa:06:14:91:13:23:ec:dd:a2:b1:80:
-                    9e:d4:af:8d:77:38:d6:3b:f6:53:a6:c2:cf:af:37:
-                    40:9e:c4:70:23:c9:da:e5:31:77:c8:1b:a3:9d:dc:
-                    14:b2:79:77:86:1d:0e:48:58:60:b0:46:69:1d:6a:
-                    4b:1b:19:bb:c6:e2:c5:b3:ea:1a:79:dc:ba:db:10:
-                    0f:31:52:9b:73:55:09:d1:97:a8:a1:02:e5:12:c8:
-                    39:6d:c0:75:0e:90:2f:48:1c:26:b5:19:f2:cb:00:
-                    ac:42:f0:3b:e5:dd:8e:55:b5:d5:61:e3:47:c4:fb:
-                    0f:79:83:ae:6a:ca:ec:4b:e3:89:db:af:ec:47:10:
-                    c5:42:82:90:8b:61:1e:c7:f0:39:8b:63:31:1c:8c:
-                    d5:90:48:82:9a:a0:a4:84:a1:2d:7f:4d:3a:7d:3a:
-                    31:f5:03:bc:ce:cf:a4:e5:53:43:23:ed:dc:46:cf:
-                    8c:28:d1:dd:97:c8:93:0f:6c:cf:0f:6e:1c:a8:c2:
-                    c4:51:73:6a:f1:33:fb:22:26:fb:c3:e2:e6:b9:37:
-                    72:e5
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                FA:67:7E:92:9E:B8:4B:2B:0A:B0:E7:68:CC:C8:EA:A9:97:AF:A2:FD
-            X509v3 Authority Key Identifier: 
-                keyid:FA:67:7E:92:9E:B8:4B:2B:0A:B0:E7:68:CC:C8:EA:A9:97:AF:A2:FD
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-    Signature Algorithm: sha256WithRSAEncryption
-         54:d6:3d:d6:97:11:fc:2b:66:e3:f1:e4:4a:55:45:7d:33:7e:
-         54:69:c4:49:02:aa:f7:84:0b:2a:1e:87:d1:55:77:f3:93:c8:
-         25:d4:74:37:48:0d:de:22:4b:9d:f2:dc:8f:f9:49:9f:0d:e7:
-         e9:1a:69:70:2d:66:ee:f0:38:07:5d:16:55:34:40:6a:29:2f:
-         a1:51:29:3f:de:1f:55:18:78:22:b2:41:d0:2c:85:7c:2c:e2:
-         a7:18:d3:8e:17:50:b7:f6:c1:e7:b6:de:57:1c:a1:8e:33:e2:
-         4c:c7:08:78:bd:13:47:b0:1b:d4:4c:07:17:7e:a7:84:17:d3:
-         7d:12:43:05:bc:8e:8b:b4:52:46:95:bf:87:ac:ae:92:30:39:
-         14:59:fe:55:47:37:a1:4f:7c:97:f9:f5:55:92:7d:95:47:26:
-         be:1e:b6:e8:86:c6:09:8a:a2:27:1e:c5:c9:29:89:e1:ea:e2:
-         70:09:d6:af:6f:74:91:b8:12:fa:03:ad:ab:4a:89:a8:d2:1d:
-         3b:9e:f7:8a:cc:90:43:5d:4d:aa:3a:a3:25:8a:25:15:53:68:
-         b5:66:2d:fe:f3:b3:03:26:b8:f1:2b:89:5a:e9:fc:fa:2d:e2:
-         bb:57:ac:5b:15:de:3e:eb:34:3a:34:ad:5b:40:5b:16:c9:c2:
-         c4:ae:a1:45
------BEGIN TRUST_ANCHOR_CONSTRAINED-----
-MIIDVDCCAjygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWghZcBibIx8fX7mWb5
-R6b9Zb4eNe+LrXW/gWGeqlTWAodhB9ROCsUtmnjgk+65saoGFJETI+zdorGAntSv
-jXc41jv2U6bCz683QJ7EcCPJ2uUxd8gbo53cFLJ5d4YdDkhYYLBGaR1qSxsZu8bi
-xbPqGnncutsQDzFSm3NVCdGXqKEC5RLIOW3AdQ6QL0gcJrUZ8ssArELwO+XdjlW1
-1WHjR8T7D3mDrmrK7Evjiduv7EcQxUKCkIthHsfwOYtjMRyM1ZBIgpqgpIShLX9N
-On06MfUDvM7PpOVTQyPt3EbPjCjR3ZfIkw9szw9uHKjCxFFzavEz+yIm+8Pi5rk3
-cuUCAwEAAaOBujCBtzAdBgNVHQ4EFgQU+md+kp64SysKsOdozMjqqZevov0wHwYD
-VR0jBBgwFoAU+md+kp64SysKsOdozMjqqZevov0wNwYIKwYBBQUHAQEEKzApMCcG
-CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
-IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjANBgkqhkiG9w0BAQsFAAOCAQEAVNY91pcR/Ctm4/HkSlVFfTN+VGnESQKq
-94QLKh6H0VV385PIJdR0N0gN3iJLnfLcj/lJnw3n6RppcC1m7vA4B10WVTRAaikv
-oVEpP94fVRh4IrJB0CyFfCzipxjTjhdQt/bB57beVxyhjjPiTMcIeL0TR7Ab1EwH
-F36nhBfTfRJDBbyOi7RSRpW/h6yukjA5FFn+VUc3oU98l/n1VZJ9lUcmvh626IbG
-CYqiJx7FySmJ4ericAnWr290kbgS+gOtq0qJqNIdO573isyQQ11NqjqjJYolFVNo
-tWYt/vOzAya48SuJWun8+i3iu1esWxXePus0OjStW0BbFsnCxK6hRQ==
------END TRUST_ANCHOR_CONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem b/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
deleted file mode 100644
index 7e6b3a2..0000000
--- a/src/net/data/verify_certificate_chain_unittest/expired-constrained-root.pem
+++ /dev/null
@@ -1,289 +0,0 @@
-[Created by: generate-expired-constrained-root.py]
-
-Certificate chain with 1 intermediate, where the root certificate is expired
-(violates validity.notAfter). Verification is expected to succeed even though
-the trust anchor is initialized with anchor constraints, since validity is
-not enforced.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:d9:a8:d1:eb:ee:56:1e:d5:3c:a1:b9:bf:1b:f7:
-                    d0:1f:49:ad:af:ad:b4:af:e0:64:f3:f9:19:6b:95:
-                    c9:ab:b1:25:65:74:91:dc:84:bc:03:0d:73:95:dd:
-                    0d:6a:1b:b8:8c:75:a3:03:6f:c8:01:ff:23:b0:e9:
-                    26:03:6c:24:2a:d4:e5:6b:6a:00:07:fd:b3:d4:4c:
-                    ab:c3:42:15:5a:4a:68:66:58:8b:60:df:d2:22:f6:
-                    e0:4e:ee:1c:c9:d0:3d:8f:bf:3c:90:d8:af:54:9e:
-                    eb:1b:76:55:dc:f6:2a:a9:80:97:84:93:61:56:2c:
-                    f4:b8:d3:ac:a7:db:47:37:c9:8b:4f:d2:bc:79:18:
-                    52:bf:e7:ca:3f:47:6f:b9:11:da:aa:53:33:ee:05:
-                    b9:8f:2f:4e:c3:a5:b6:e4:87:8d:21:e4:39:3f:a2:
-                    0b:b4:87:e2:c4:b0:10:d7:0c:dd:bd:cf:2f:1f:2b:
-                    a4:af:89:5a:69:00:4d:6c:74:74:4c:6f:67:cc:a2:
-                    58:d3:09:d6:a8:93:98:93:11:cb:a9:6a:15:f2:bc:
-                    ea:d7:1a:b3:ae:4f:45:a8:58:2f:a7:0d:d6:bf:32:
-                    65:be:a9:27:be:00:c1:2c:85:bf:17:e3:b7:95:61:
-                    a5:cc:ba:c7:50:ca:5e:25:03:3c:f9:33:53:f6:bd:
-                    18:69
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                B2:8B:FD:28:C3:5D:3E:84:62:BD:4D:6B:A4:EB:64:94:E5:60:35:D3
-            X509v3 Authority Key Identifier: 
-                keyid:ED:60:6E:83:A7:52:C3:36:D0:36:B1:A5:B5:BD:8B:AB:3F:EC:CB:1B
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         7f:ea:a3:4e:d2:f6:37:e7:5d:65:58:13:c4:65:a2:00:fb:1f:
-         40:1f:1d:ed:05:2d:4c:80:bf:08:59:8b:f4:d0:e4:f9:c4:0d:
-         1a:c9:ff:ff:10:d1:0e:91:dc:1a:ed:16:08:de:10:de:c0:28:
-         34:0c:d7:c8:52:6e:53:34:1d:93:ec:1d:38:41:7a:84:cd:c8:
-         65:6e:8e:9a:95:ae:b7:0b:14:c2:90:26:29:4a:d6:ae:0b:90:
-         8b:88:55:d3:86:70:f4:d4:bb:7c:e2:08:ec:47:b3:a6:fa:bc:
-         fc:bb:9f:b1:8f:82:75:e0:72:b8:59:df:96:41:7c:ef:f7:f5:
-         ae:c6:09:c7:f2:b9:9d:f4:d2:32:3e:0f:ab:9c:d8:d4:27:72:
-         5d:e1:b7:48:47:d0:55:e8:70:a3:d5:e1:66:8c:00:71:91:c6:
-         10:57:63:58:03:fd:7f:c0:29:c2:40:65:63:fc:1f:8b:56:29:
-         5a:47:cc:03:fe:18:c9:0d:63:9d:01:a6:6a:dd:60:10:64:d1:
-         b7:11:2e:85:de:b1:4a:07:ab:09:9d:1b:56:0e:1f:f3:2c:bf:
-         82:80:61:61:9c:fb:54:5f:0e:db:8f:ac:d8:c7:7d:e1:7d:c7:
-         c9:ea:d9:fe:00:2f:ab:a9:20:17:fa:0a:82:22:e8:87:66:58:
-         f9:21:bf:41
------BEGIN CERTIFICATE-----
-MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
-cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZqNHr
-7lYe1Tyhub8b99AfSa2vrbSv4GTz+RlrlcmrsSVldJHchLwDDXOV3Q1qG7iMdaMD
-b8gB/yOw6SYDbCQq1OVragAH/bPUTKvDQhVaSmhmWItg39Ii9uBO7hzJ0D2PvzyQ
-2K9UnusbdlXc9iqpgJeEk2FWLPS406yn20c3yYtP0rx5GFK/58o/R2+5EdqqUzPu
-BbmPL07Dpbbkh40h5Dk/ogu0h+LEsBDXDN29zy8fK6SviVppAE1sdHRMb2fMoljT
-Cdaok5iTEcupahXyvOrXGrOuT0WoWC+nDda/MmW+qSe+AMEshb8X47eVYaXMusdQ
-yl4lAzz5M1P2vRhpAgMBAAGjgekwgeYwHQYDVR0OBBYEFLKL/SjDXT6EYr1Na6Tr
-ZJTlYDXTMB8GA1UdIwQYMBaAFO1gboOnUsM20DaxpbW9i6s/7MsbMD8GCCsGAQUF
-BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
-aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
-dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAf+qjTtL2N+ddZVgTxGWi
-APsfQB8d7QUtTIC/CFmL9NDk+cQNGsn//xDRDpHcGu0WCN4Q3sAoNAzXyFJuUzQd
-k+wdOEF6hM3IZW6OmpWutwsUwpAmKUrWrguQi4hV04Zw9NS7fOII7Eezpvq8/Luf
-sY+CdeByuFnflkF87/f1rsYJx/K5nfTSMj4Pq5zY1CdyXeG3SEfQVehwo9XhZowA
-cZHGEFdjWAP9f8ApwkBlY/wfi1YpWkfMA/4YyQ1jnQGmat1gEGTRtxEuhd6xSger
-CZ0bVg4f8yy/goBhYZz7VF8O24+s2Md94X3HyerZ/gAvq6kgF/oKgiLoh2ZY+SG/
-QQ==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:9d:df:80:0d:53:d7:49:a6:44:47:34:0c:ca:ea:
-                    55:9a:e0:de:39:61:df:1a:b5:97:4e:37:5b:11:78:
-                    51:73:f3:2d:9a:8a:e9:b3:d7:44:f9:27:36:e9:1b:
-                    d6:7a:9d:c7:7d:11:7e:cb:6d:92:2a:73:73:b9:76:
-                    7b:32:b3:b9:a2:a5:ae:ea:6e:5f:fa:aa:b4:55:8b:
-                    61:69:ce:1f:a3:87:ee:f1:fb:d0:18:0a:ca:34:2a:
-                    57:9a:18:92:75:21:52:21:ee:23:e4:5a:41:90:34:
-                    4f:08:2e:2b:1b:35:25:88:a1:4c:4b:2e:6b:21:f5:
-                    6b:f6:63:63:a3:7a:d3:98:3d:6f:d0:bb:98:d0:8c:
-                    cb:d5:fd:cf:3b:1d:9d:99:d1:46:2f:43:3a:86:1b:
-                    ba:27:e3:d8:85:d2:03:56:7f:84:a7:d2:3a:55:2c:
-                    84:02:b8:6d:75:f9:16:9f:2f:7c:93:16:48:16:b6:
-                    65:df:c5:0f:6c:dc:d8:7e:24:f9:f2:89:37:90:f3:
-                    da:33:48:be:08:d1:4d:f7:f3:fe:4e:dc:fd:78:a1:
-                    dc:d5:45:2f:bf:a2:78:d3:5b:91:90:3e:d8:71:d4:
-                    97:24:51:44:5f:28:bb:ec:ba:c7:70:af:fa:bd:fa:
-                    cf:87:ca:a4:87:15:90:66:6f:79:c2:9c:3c:cb:d5:
-                    74:ad
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                ED:60:6E:83:A7:52:C3:36:D0:36:B1:A5:B5:BD:8B:AB:3F:EC:CB:1B
-            X509v3 Authority Key Identifier: 
-                keyid:A1:21:61:FE:00:0C:7D:FD:88:EC:4D:62:35:1D:2C:0A:05:F8:5A:4F
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         bc:5b:90:b2:4b:fe:df:d9:0e:5a:ba:c2:2b:26:ba:f7:ec:a1:
-         ac:4b:37:a5:cf:66:cc:e2:e8:48:46:ad:36:d4:05:4f:d0:d1:
-         a3:15:4f:72:2c:f1:18:d6:82:de:e4:39:50:3c:0f:91:bf:24:
-         4c:21:30:8d:56:7b:13:de:bd:99:8c:02:a3:eb:26:90:f1:9e:
-         7a:e5:00:b5:6a:33:ca:2e:68:98:df:bf:1c:01:e1:34:42:d5:
-         dd:f6:25:78:74:fa:26:09:4a:21:c5:02:39:6a:31:9f:6d:71:
-         68:2b:fc:5c:8a:4e:5b:f2:0d:c9:b5:d6:5e:85:ab:39:1d:67:
-         a6:ef:82:ec:2e:e0:bf:ac:12:20:62:fc:3b:05:a6:25:f7:36:
-         51:83:59:27:99:39:f8:5f:3c:4a:0d:e1:c1:fd:f8:b0:d2:2d:
-         6b:34:9f:43:32:53:62:61:d1:67:ac:de:f4:05:7e:20:86:ad:
-         b9:c9:91:29:d2:ab:84:fd:b9:5c:94:43:b9:81:55:c9:b1:b4:
-         6d:ae:44:c7:a2:72:c1:ec:53:17:c5:46:36:b2:31:58:60:85:
-         fc:95:45:d9:a6:75:45:3d:54:b7:fc:da:31:20:a0:33:09:0c:
-         bd:75:ca:c1:f3:99:0c:c9:5e:6b:2b:3a:f6:26:f6:1b:bb:85:
-         18:a8:9c:03
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnd+ADVPX
-SaZERzQMyupVmuDeOWHfGrWXTjdbEXhRc/Mtmorps9dE+Sc26RvWep3HfRF+y22S
-KnNzuXZ7MrO5oqWu6m5f+qq0VYthac4fo4fu8fvQGArKNCpXmhiSdSFSIe4j5FpB
-kDRPCC4rGzUliKFMSy5rIfVr9mNjo3rTmD1v0LuY0IzL1f3POx2dmdFGL0M6hhu6
-J+PYhdIDVn+Ep9I6VSyEArhtdfkWny98kxZIFrZl38UPbNzYfiT58ok3kPPaM0i+
-CNFN9/P+Ttz9eKHc1UUvv6J401uRkD7YcdSXJFFEXyi77LrHcK/6vfrPh8qkhxWQ
-Zm95wpw8y9V0rQIDAQABo4HLMIHIMB0GA1UdDgQWBBTtYG6Dp1LDNtA2saW1vYur
-P+zLGzAfBgNVHSMEGDAWgBShIWH+AAx9/YjsTWI1HSwKBfhaTzA3BggrBgEFBQcB
-AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
-BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-ALxbkLJL/t/ZDlq6wismuvfsoaxLN6XPZszi6EhGrTbUBU/Q0aMVT3Is8RjWgt7k
-OVA8D5G/JEwhMI1WexPevZmMAqPrJpDxnnrlALVqM8ouaJjfvxwB4TRC1d32JXh0
-+iYJSiHFAjlqMZ9tcWgr/FyKTlvyDcm11l6FqzkdZ6bvguwu4L+sEiBi/DsFpiX3
-NlGDWSeZOfhfPEoN4cH9+LDSLWs0n0MyU2Jh0Wes3vQFfiCGrbnJkSnSq4T9uVyU
-Q7mBVcmxtG2uRMeicsHsUxfFRjayMVhghfyVRdmmdUU9VLf82jEgoDMJDL11ysHz
-mQzJXmsrOvYm9hu7hRionAM=
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Mar  1 12:00:00 2015 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:df:26:c9:a6:b0:71:99:f9:d6:a0:38:5c:35:52:
-                    50:89:0a:36:ac:e3:f6:8e:0a:1c:00:a4:25:5d:f5:
-                    25:e9:26:36:a4:8b:ae:ac:a5:9d:db:95:23:9b:b2:
-                    b6:2d:ae:70:66:7f:74:5d:31:17:f2:2d:3c:ac:b2:
-                    15:69:70:d7:53:7a:5e:2a:91:b2:77:03:6d:28:26:
-                    a3:d3:41:c6:9f:2c:21:02:88:e3:68:03:b4:27:ae:
-                    16:eb:14:59:2c:0d:8f:44:83:22:d9:d5:f6:e3:80:
-                    62:0b:2f:3b:ab:f4:d3:76:55:2e:39:d8:4a:62:1e:
-                    fa:b1:6f:6b:6f:3b:19:5b:fe:2c:04:d2:5e:64:7d:
-                    38:67:5d:e5:71:4f:9f:94:f9:23:c5:72:b1:c7:0d:
-                    fc:5f:b5:5e:8e:97:7f:00:94:c2:28:c7:4e:1f:15:
-                    62:ba:e0:fb:b7:86:59:22:7e:f8:72:83:ed:1b:59:
-                    32:4c:44:eb:54:78:85:5c:6d:87:0a:4a:b9:b2:9f:
-                    60:6a:50:9d:ce:6e:4c:8f:64:44:de:ab:f5:db:c4:
-                    49:c7:72:30:8c:bc:9f:cd:32:8e:a6:9c:d3:13:e9:
-                    20:34:d9:3c:71:9f:64:ed:f0:47:29:20:53:f0:d1:
-                    45:bd:b0:a7:87:12:74:b6:ce:8c:c5:3f:76:92:17:
-                    73:ad
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                A1:21:61:FE:00:0C:7D:FD:88:EC:4D:62:35:1D:2C:0A:05:F8:5A:4F
-            X509v3 Authority Key Identifier: 
-                keyid:A1:21:61:FE:00:0C:7D:FD:88:EC:4D:62:35:1D:2C:0A:05:F8:5A:4F
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         97:67:0c:df:fc:10:7e:ef:ec:3d:93:14:55:26:8e:55:1b:76:
-         c2:b2:6a:9b:00:64:75:30:e1:13:81:11:7f:98:02:f4:bd:41:
-         6a:90:d3:ac:cc:c1:4c:93:d8:4f:5e:3b:e0:70:7f:7c:fd:53:
-         64:29:3d:bc:8a:a5:41:64:65:36:5f:77:c9:05:2f:2b:b2:97:
-         bd:80:0b:30:94:40:3c:20:51:dc:2e:8e:0d:e5:89:68:76:36:
-         c5:c7:80:31:7e:e4:76:e0:2d:87:86:c3:eb:6b:9f:82:a1:d6:
-         66:ce:4d:e0:d7:fa:27:e3:b6:9e:8d:5b:19:66:03:b7:27:71:
-         90:b9:a7:9a:00:89:67:a5:fe:31:e2:0f:92:66:47:c0:ba:96:
-         87:21:c1:63:f1:37:a3:d4:39:f6:25:47:40:52:71:9c:7e:f2:
-         64:57:be:13:ec:a7:7d:d3:ac:72:cc:2e:4b:af:b1:59:05:bb:
-         f9:d0:bd:e1:68:1e:21:a6:f2:5b:8d:23:ec:2a:3f:5a:bd:96:
-         3e:c9:35:72:e3:10:4a:1a:66:b0:a6:44:13:54:cc:85:10:d5:
-         0f:f0:90:3f:e8:7a:14:2b:c3:da:a6:af:6a:9f:d6:95:c5:5a:
-         5a:30:29:9d:66:c7:6f:13:da:b9:1f:74:6b:d8:0b:07:57:5e:
-         ac:e1:85:3b
------BEGIN TRUST_ANCHOR_CONSTRAINED-----
-MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN8myaawcZn51qA4XDVS
-UIkKNqzj9o4KHACkJV31JekmNqSLrqylnduVI5uyti2ucGZ/dF0xF/ItPKyyFWlw
-11N6XiqRsncDbSgmo9NBxp8sIQKI42gDtCeuFusUWSwNj0SDItnV9uOAYgsvO6v0
-03ZVLjnYSmIe+rFva287GVv+LATSXmR9OGdd5XFPn5T5I8VysccN/F+1Xo6XfwCU
-wijHTh8VYrrg+7eGWSJ++HKD7RtZMkxE61R4hVxthwpKubKfYGpQnc5uTI9kRN6r
-9dvEScdyMIy8n80yjqac0xPpIDTZPHGfZO3wRykgU/DRRb2wp4cSdLbOjMU/dpIX
-c60CAwEAAaOByzCByDAdBgNVHQ4EFgQUoSFh/gAMff2I7E1iNR0sCgX4Wk8wHwYD
-VR0jBBgwFoAUoSFh/gAMff2I7E1iNR0sCgX4Wk8wNwYIKwYBBQUHAQEEKzApMCcG
-CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
-IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQCXZwzf/BB+
-7+w9kxRVJo5VG3bCsmqbAGR1MOETgRF/mAL0vUFqkNOszMFMk9hPXjvgcH98/VNk
-KT28iqVBZGU2X3fJBS8rspe9gAswlEA8IFHcLo4N5YlodjbFx4AxfuR24C2HhsPr
-a5+CodZmzk3g1/on47aejVsZZgO3J3GQuaeaAIlnpf4x4g+SZkfAupaHIcFj8Tej
-1Dn2JUdAUnGcfvJkV74T7Kd906xyzC5Lr7FZBbv50L3haB4hpvJbjSPsKj9avZY+
-yTVy4xBKGmawpkQTVMyFENUP8JA/6HoUK8Papq9qn9aVxVpaMCmdZsdvE9q5H3Rr
-2AsHV16s4YU7
------END TRUST_ANCHOR_CONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/chain.pem
similarity index 95%
rename from src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
rename to src/net/data/verify_certificate_chain_unittest/expired-intermediate/chain.pem
index a455ab5..d885d20 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-intermediate.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-expired-intermediate.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, where the intermediate is expired
 (violates validity.notAfter). Verification is expected to fail.
@@ -249,7 +249,7 @@
          3a:7a:15:a8:8b:2b:da:9e:be:44:46:f6:3a:96:37:a3:09:f4:
          6b:00:74:22:c3:1f:c0:0e:65:09:14:97:f0:d9:bc:e5:4e:12:
          3a:16:93:e9
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMWZw1qs7t2IVZ7kOwLp
@@ -269,27 +269,4 @@
 MqCT6cXGmEnlJzwTlMEAxSajoCi+nUnIkBg/BMVfz/k4QkefrYgUTFdZaVDY5/xe
 muzEDFRoxUDwN6jtyfBACoY6ehWoiyvanr5ERvY6ljejCfRrAHQiwx/ADmUJFJfw
 2bzlThI6FpPp
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: Time is after notAfter
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBUaW1lIGlzIGFmdGVyIG5vdEFmdGVyCgo=
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/generate-chains.py
similarity index 72%
rename from src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
rename to src/net/data/verify_certificate_chain_unittest/expired-intermediate/generate-chains.py
index 037bf01..63729ee 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-intermediate.py
+++ b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, where the intermediate is expired
 (violates validity.notAfter). Verification is expected to fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,18 +24,9 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.set_validity_range(common.JANUARY_1_2015_UTC, common.JANUARY_1_2016_UTC)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
 
 # Both the root and target are valid at this time, however the
 # intermediate certificate is not.
-time = common.MARCH_2_2015_UTC
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: Time is after notAfter
 
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-intermediate/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-intermediate/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/expired-intermediate/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-intermediate/Root.key b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-intermediate/Root.key
rename to src/net/data/verify_certificate_chain_unittest/expired-intermediate/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-intermediate/Target.key b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-intermediate/Target.key
rename to src/net/data/verify_certificate_chain_unittest/expired-intermediate/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-intermediate/main.test b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/main.test
new file mode 100644
index 0000000..0ff4346
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/expired-intermediate/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: Time is after notAfter
+
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem b/src/net/data/verify_certificate_chain_unittest/expired-root/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
rename to src/net/data/verify_certificate_chain_unittest/expired-root/chain.pem
index 90f131a..bb7ddcd 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-unconstrained-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-root/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-expired-unconstrained-root.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, where the root certificate is expired
 (violates validity.notAfter). Verification is expected to succeed as
@@ -251,7 +251,7 @@
          05:36:0b:3b:4b:65:93:82:74:61:e9:ed:11:2e:5c:99:eb:73:
          b0:e2:c7:ec:dd:a2:17:91:17:be:d1:45:df:9e:fc:a3:67:be:
          5f:c7:e1:2e
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE1MDMwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKmR4LDMrvQqwTIXz8/I
@@ -271,19 +271,4 @@
 DbFc9Co8IzagQELziCH2dMAsU/NENH+BzVPL0ebfsw6Z8q43lajqDfA3QKZoB/lC
 /Q2HYxqwgvcfWkZJTHsk08UFNgs7S2WTgnRh6e0RLlyZ63Ow4sfs3aIXkRe+0UXf
 nvyjZ75fx+Eu
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py b/src/net/data/verify_certificate_chain_unittest/expired-root/generate-chains.py
similarity index 79%
rename from src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
rename to src/net/data/verify_certificate_chain_unittest/expired-root/generate-chains.py
index e415072..c9228b1 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-unconstrained-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/expired-root/generate-chains.py
@@ -8,6 +8,9 @@
 the trust anchor has no constraints (so expiration of the certificate is not
 enforced)."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -23,16 +26,10 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.set_validity_range(common.JANUARY_1_2015_UTC, common.JANUARY_1_2016_UTC)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
 
 # Both the target and intermediate are valid at this time, however the
 # root is not. This doesn't matter since the root certificate is
 # just a delivery mechanism for the name + SPKI.
-time = common.MARCH_2_2015_UTC
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
 
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/expired-root/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/expired-root/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/Root.key b/src/net/data/verify_certificate_chain_unittest/expired-root/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/Root.key
rename to src/net/data/verify_certificate_chain_unittest/expired-root/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/Target.key b/src/net/data/verify_certificate_chain_unittest/expired-root/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/Target.key
rename to src/net/data/verify_certificate_chain_unittest/expired-root/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/expired-unconstrained-root_Root.key b/src/net/data/verify_certificate_chain_unittest/expired-root/keys/expired-unconstrained-root_Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/expired-unconstrained-root_Root.key
rename to src/net/data/verify_certificate_chain_unittest/expired-root/keys/expired-unconstrained-root_Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/expired-unconstrained-root_Target.key b/src/net/data/verify_certificate_chain_unittest/expired-root/keys/expired-unconstrained-root_Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-unconstrained-root/expired-unconstrained-root_Target.key
rename to src/net/data/verify_certificate_chain_unittest/expired-root/keys/expired-unconstrained-root_Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-root/main.test b/src/net/data/verify_certificate_chain_unittest/expired-root/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/expired-root/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-root/ta-with-constraints.test b/src/net/data/verify_certificate_chain_unittest/expired-root/ta-with-constraints.test
new file mode 100644
index 0000000..d0fc9af
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/expired-root/ta-with-constraints.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR_WITH_CONSTRAINTS
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/chain.pem
similarity index 95%
rename from src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
rename to src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/chain.pem
index c4a7c8e..b3e14b6 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-expired-target-notBefore.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, where the target is expired (violates
 validity.notBefore). Verification is expected to fail.
@@ -249,7 +249,7 @@
          92:bb:5b:3f:c3:a5:8c:1a:8f:68:23:c8:9e:32:90:81:cb:7e:
          a8:a1:88:b3:30:2d:a6:f5:e4:eb:8b:67:38:b6:f9:6d:42:56:
          8e:cc:07:44
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANnsgT9xwoayHoRjafAX
@@ -269,27 +269,4 @@
 YmwTueCSVv+TVZOlAhRmNzbv2uGq4UkzCDeDYU4NPjmVjU5rPAAbaRR0qvfX48dh
 LEqS0VeJ+xvvpXB5+WWGfpeSu1s/w6WMGo9oI8ieMpCBy36ooYizMC2m9eTri2c4
 tvltQlaOzAdE
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150301120000Z
------BEGIN TIME-----
-MTUwMzAxMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Time is before notBefore
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBUaW1lIGlzIGJlZm9yZSBub3RCZWZvcmUKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/generate-chains.py
similarity index 72%
rename from src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
rename to src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/generate-chains.py
index a04f2f4..1021c8d 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-target-notBefore.py
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, where the target is expired (violates
 validity.notBefore). Verification is expected to fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,18 +24,9 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.set_validity_range(common.MARCH_2_2015_UTC, common.JANUARY_1_2016_UTC)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
 
 # Both the root and intermediate are valid at this time, however the
 # target is not.
-time = common.MARCH_1_2015_UTC
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Time is before notBefore
 
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-target-notBefore/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-target-notBefore/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-target-notBefore/Root.key b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-target-notBefore/Root.key
rename to src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-target-notBefore/Target.key b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-target-notBefore/Target.key
rename to src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/main.test b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/main.test
new file mode 100644
index 0000000..af5d894
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target-notBefore/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150301120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Time is before notBefore
+
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-target.pem b/src/net/data/verify_certificate_chain_unittest/expired-target/chain.pem
similarity index 95%
rename from src/net/data/verify_certificate_chain_unittest/expired-target.pem
rename to src/net/data/verify_certificate_chain_unittest/expired-target/chain.pem
index 5344140..27ff002 100644
--- a/src/net/data/verify_certificate_chain_unittest/expired-target.pem
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-expired-target.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, where the target is expired (violates
 validity.notAfter). Verification is expected to fail.
@@ -249,7 +249,7 @@
          da:e5:0c:12:3a:0c:21:d7:e3:ff:6f:f8:bb:6a:bf:65:55:60:
          f1:24:e3:ed:fa:0f:d7:64:f2:16:b1:7c:eb:b8:8e:36:fa:a0:
          01:33:ef:9a
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKh1RA61vwKE9qJxGP4C
@@ -269,27 +269,4 @@
 QM5MNVGbbw3y9QY2Em0U3jDGiXzGv1KqxlwR6hDHkRq353mM5gLqHocuC+08A/S5
 ef+1ekx+y9+SLnpQpVbBkMXa5QwSOgwh1+P/b/i7ar9lVWDxJOPt+g/XZPIWsXzr
 uI42+qABM++a
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Time is after notAfter
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBUaW1lIGlzIGFmdGVyIG5vdEFmdGVyCgo=
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-target.py b/src/net/data/verify_certificate_chain_unittest/expired-target/generate-chains.py
similarity index 72%
rename from src/net/data/verify_certificate_chain_unittest/generate-expired-target.py
rename to src/net/data/verify_certificate_chain_unittest/expired-target/generate-chains.py
index 9245676..b7162de 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-target.py
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, where the target is expired (violates
 validity.notAfter). Verification is expected to fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,18 +24,9 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.set_validity_range(common.JANUARY_1_2015_UTC, common.MARCH_1_2015_UTC)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
 
 # Both the root and intermediate are valid at this time, however the
 # target is not.
-time = common.MARCH_2_2015_UTC
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Time is after notAfter
 
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-target/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/expired-target/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-target/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/expired-target/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-target/Root.key b/src/net/data/verify_certificate_chain_unittest/expired-target/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-target/Root.key
rename to src/net/data/verify_certificate_chain_unittest/expired-target/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-target/Target.key b/src/net/data/verify_certificate_chain_unittest/expired-target/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/expired-target/Target.key
rename to src/net/data/verify_certificate_chain_unittest/expired-target/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/expired-target/main.test b/src/net/data/verify_certificate_chain_unittest/expired-target/main.test
new file mode 100644
index 0000000..ab2b228
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/expired-target/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Time is after notAfter
+
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-all.sh b/src/net/data/verify_certificate_chain_unittest/generate-all.sh
index 63374a0..91e936b 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-all.sh
+++ b/src/net/data/verify_certificate_chain_unittest/generate-all.sh
@@ -5,12 +5,17 @@
 # found in the LICENSE file.
 
 set -e
-set -x
 
-for script in generate-*.py ; do
-  python "$script"
+for dir in */ ; do
+  cd "$dir"
+
+  if [ -f generate-chains.py ]; then
+    python generate-chains.py
+
+    # Cleanup temporary files.
+    rm -rf */*.pyc
+    rm -rf out/
+  fi
+
+  cd ..
 done
-
-# Cleanup temporary files.
-rm -rf *.pyc
-rm -rf out/
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py b/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
deleted file mode 100755
index b51c0da..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-non-self-signed-root.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 1 intermediate and a non-self-signed trust anchor.
-Verification should succeed, it doesn't matter that the root was not
-self-signed if it is designated as the trust anchor."""
-
-import common
-
-uber_root = common.create_self_signed_root_certificate('UberRoot')
-
-# Non-self-signed root certificate (used as trust anchor)
-root = common.create_intermediate_certificate('Root', uber_root)
-
-# Intermediate certificate.
-intermediate = common.create_intermediate_certificate('Intermediate', root)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate)
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=True)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
-
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-bad-eku.py b/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-bad-eku.py
deleted file mode 100755
index ae9db3b..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-bad-eku.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 1 intermediate and a trust anchor. The trust anchor
-has an EKU that restricts it to clientAuth. Verification is expected to fail as
-the end-entity is verified for serverAuth, and the trust anchor enforces
-constraints."""
-
-import common
-
-# Self-signed root certificate (used as trust anchor) with non-CA basic
-# constraints.
-root = common.create_self_signed_root_certificate('Root')
-root.get_extensions().set_property('extendedKeyUsage', 'clientAuth')
-
-# Intermediate certificate.
-intermediate = common.create_intermediate_certificate('Intermediate', root)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate)
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=True)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = False
-errors = """----- Certificate i=2 -----
-ERROR: The extended key usage does not include server auth
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py b/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
deleted file mode 100755
index fe632b9..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-lacks-basic-constraints.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 1 intermediate and a trust anchor. The trust anchor
-lacks the basic constraints extension, and is loaded with anchor constraints.
-This is not a problem and verification should succeed."""
-
-import common
-
-# Self-signed root certificate (used as trust anchor).
-root = common.create_self_signed_root_certificate('Root')
-root.get_extensions().remove_property('basicConstraints')
-
-# Intermediate.
-intermediate = common.create_intermediate_certificate('Intermediate', root)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate)
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=True)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py b/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
deleted file mode 100755
index e62caa9..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-expired-constrained-root.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 1 intermediate, where the root certificate is expired
-(violates validity.notAfter). Verification is expected to succeed even though
-the trust anchor is initialized with anchor constraints, since validity is
-not enforced."""
-
-import common
-
-# Self-signed root certificate (used as trust anchor).
-root = common.create_self_signed_root_certificate('Root')
-root.set_validity_range(common.JANUARY_1_2015_UTC, common.MARCH_1_2015_UTC)
-
-# Intermediate certificate.
-intermediate = common.create_intermediate_certificate('Intermediate', root)
-intermediate.set_validity_range(common.JANUARY_1_2015_UTC,
-                                common.JANUARY_1_2016_UTC)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate)
-target.set_validity_range(common.JANUARY_1_2015_UTC, common.JANUARY_1_2016_UTC)
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=True)
-
-# Both the target and intermediate are valid at this time, however the
-# root is not.
-time = common.MARCH_2_2015_UTC
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
deleted file mode 100755
index 80a147b..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-non-self-signed-root.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 1 intermediate and a non-self-signed trust anchor.
-Verification should succeed, it doesn't matter that the root was not
-self-signed if it is designated as the trust anchor."""
-
-import common
-
-uber_root = common.create_self_signed_root_certificate('UberRoot')
-
-# Non-self-signed root certificate (used as trust anchor)
-root = common.create_intermediate_certificate('Root', uber_root)
-
-# Intermediate certificate.
-intermediate = common.create_intermediate_certificate('Intermediate', root)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate)
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py b/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
deleted file mode 100755
index 1f71d1e..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-basic-constraints-ca-false.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 1 intermediate and a trust anchor. The trust anchor
-has a basic constraints extension that indicates it is NOT a CA. Verification
-is expected to succeed as constraints on the root certificate are not applied
-to the trust anchor."""
-
-import common
-
-# Self-signed root certificate (used as trust anchor) with non-CA basic
-# constraints.
-root = common.create_self_signed_root_certificate('Root')
-root.get_extensions().set_property('basicConstraints', 'critical,CA:false')
-
-# Intermediate certificate.
-intermediate = common.create_intermediate_certificate('Intermediate', root)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate)
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py b/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
deleted file mode 100755
index ac8ed03..0000000
--- a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-constrained-root.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/python
-# Copyright (c) 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Certificate chain with 2 intermediates and one end entity certificate. The
-root certificate has a pathlen:1 restriction, and constraints are enforced
-on this trust anchor making it an invalid chain."""
-
-import common
-
-# Self-signed root certificate (used as trust anchor).
-root = common.create_self_signed_root_certificate('Root')
-root.get_extensions().set_property('basicConstraints',
-                                   'critical,CA:true,pathlen:1')
-
-# Intermediate 1 (no pathlen restriction).
-intermediate1 = common.create_intermediate_certificate('Intermediate1', root)
-
-# Intermediate 2 (no pathlen restriction).
-intermediate2 = common.create_intermediate_certificate('Intermediate2',
-                                                       intermediate1)
-
-# Target certificate.
-target = common.create_end_entity_certificate('Target', intermediate2)
-
-chain = [target, intermediate2, intermediate1]
-trusted = common.TrustAnchor(root, constrained=True)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate2) -----
-ERROR: max_path_length reached
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
diff --git a/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
rename to src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem
index 4c7ba69..d363a06 100644
--- a/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor.pem
+++ b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-incorrect-trust-anchor.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, but the trust anchor used is
 incorrect (neither subject nor signature matches). Verification is expected to
@@ -250,7 +250,7 @@
          a5:98:6b:bc:6e:3b:4b:c1:0c:10:ae:90:e7:9e:c3:b8:cd:08:
          ea:80:55:9f:74:1c:6e:9f:2a:5c:76:b5:45:84:4d:62:cd:fd:
          68:12:d8:8c
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDeTCCAmGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAlCb2d1
 c1Jvb3QwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjAUMRIwEAYDVQQD
 DAlCb2d1c1Jvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4yC/c
@@ -270,29 +270,4 @@
 Fv2BnJsexSyd9Abaj7tvm2T/M5ugqfffbK5IezRqBcVu3jHlZMWAiEWrKXw57F+Y
 z84j9OcGmcHJtgSM2H17jOSkh+5/ZrLVkmEsVpuGXA2OaITJlqWYa7xuO0vBDBCu
 kOeew7jNCOqAVZ90HG6fKlx2tUWETWLN/WgS2Iw=
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: Signature verification failed
-ERROR: VerifySignedData failed
-ERROR: subject does not match issuer
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZApFUlJPUjogVmVyaWZ5U2lnbmVkRGF0YSBmYWlsZWQKRVJST1I6IHN1YmplY3QgZG9lcyBub3QgbWF0Y2ggaXNzdWVyCgo=
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/generate-chains.py
similarity index 64%
rename from src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
rename to src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/generate-chains.py
index 1d6eb5b..3348296 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-incorrect-trust-anchor.py
+++ b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/generate-chains.py
@@ -7,6 +7,9 @@
 incorrect (neither subject nor signature matches). Verification is expected to
 fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate, which is NOT saved as the trust anchor.
@@ -22,17 +25,5 @@
 # anchor.
 bogus_root = common.create_self_signed_root_certificate('BogusRoot')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(bogus_root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: Signature verification failed
-ERROR: VerifySignedData failed
-ERROR: subject does not match issuer
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, bogus_root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/BogusRoot.key b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/BogusRoot.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/BogusRoot.key
rename to src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/BogusRoot.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/Root.key b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/Root.key
rename to src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/Target.key b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/incorrect-trust-anchor/Target.key
rename to src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test
new file mode 100644
index 0000000..4b470c1
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/incorrect-trust-anchor/main.test
@@ -0,0 +1,10 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: Signature verification failed
+ERROR: VerifySignedData failed
+ERROR: subject does not match issuer
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem
index c51ee5b..3c33888 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-basic-constraints-ca-false.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 has a basic constraints extension that indicates it is NOT a CA. Verification
@@ -250,7 +250,7 @@
          d1:be:a5:aa:71:35:50:30:92:50:97:04:9c:68:27:27:ce:19:
          bf:c5:6a:f0:86:4e:19:ef:4a:2b:14:9f:39:cc:5b:4d:d8:3e:
          8b:9d:bb:cb
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALt0BvqmA9FkxvpijPZA
@@ -270,27 +270,4 @@
 g+vS6bJJ9xEvLsn08TZGcj9jIYjyumDIa5+NnL1kmxjZwLjEYmqFR+kHEaEP/6c4
 f+01Vcpgye1RU9jpHECbzzrRvqWqcTVQMJJQlwScaCcnzhm/xWrwhk4Z70orFJ85
 zFtN2D6LnbvL
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: Basic Constraints indicates not a CA
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBCYXNpYyBDb25zdHJhaW50cyBpbmRpY2F0ZXMgbm90IGEgQ0EKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/generate-chains.py
similarity index 67%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/generate-chains.py
index faa9247..bd80f25 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-ca-false.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/generate-chains.py
@@ -7,6 +7,9 @@
 has a basic constraints extension that indicates it is NOT a CA. Verification
 is expected to fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,15 +23,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: Basic Constraints indicates not a CA
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-ca-false/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-ca-false/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-ca-false/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-ca-false/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-ca-false/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-ca-false/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test
new file mode 100644
index 0000000..b4981ff
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-ca-false/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: Basic Constraints indicates not a CA
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem
index ee35a5e..e4eda0b 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-basic-constraints-not-critical.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 has a basic constraints extension but does not mark it as critical.
@@ -251,7 +251,7 @@
          b5:05:f3:9d:cc:74:95:30:a3:a1:0b:df:8a:d1:1c:f1:98:5e:
          a1:a8:3a:92:87:6a:aa:9e:d6:23:f3:0c:37:db:cb:e7:fa:70:
          e0:d3:13:ae
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqUHWWMeQTwydE8I3bp
@@ -271,19 +271,4 @@
 pI9lM9mzpzlcFcsvDyureb5lhTR4JI+NghzEL3WuY+sHkmuJJhmodhrSFMgB6q48
 G9iU6QzbsL/xN535i8gMcLu1BfOdzHSVMKOhC9+K0RzxmF6hqDqSh2qqntYj8ww3
 28vn+nDg0xOu
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/generate-chains.py
index ee4ab5e..a0f50e7 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-basic-constraints-not-critical.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/generate-chains.py
@@ -8,6 +8,9 @@
 Verification is expected to succeed, since although not critical, the
 basicConstraints indicates CA=true as expected."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,12 +23,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-not-critical/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-not-critical/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-not-critical/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-not-critical/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-not-critical/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-basic-constraints-not-critical/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-basic-constraints-not-critical/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem
index 5130b18..3941ad6 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-lacks-basic-constraints.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 lacks the basic constraints extension, and hence is expected to fail validation
@@ -247,7 +247,7 @@
          b6:52:fe:b5:df:a7:33:f2:c9:f3:fd:f9:a2:72:68:f0:0c:5b:
          77:9b:f0:27:88:29:fd:3b:81:4d:9b:5c:d9:82:8c:e8:0f:71:
          e2:5f:c9:73
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKnzqEhQRv6x+u6vGlzB
@@ -267,27 +267,4 @@
 bsHRD+KiJStWxlAJ9iyREfI1Q60ixa97mChWw7wJWWGq8wKkGb4li9VV8+CYRh6P
 9QJP3OdBKmmofqUTaDHT62m2Uv6136cz8snz/fmicmjwDFt3m/AniCn9O4FNm1zZ
 gozoD3HiX8lz
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: Does not have Basic Constraints
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBEb2VzIG5vdCBoYXZlIEJhc2ljIENvbnN0cmFpbnRzCgo=
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/generate-chains.py
similarity index 67%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/generate-chains.py
index 80743e7..b1219af 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-basic-constraints.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/generate-chains.py
@@ -7,6 +7,9 @@
 lacks the basic constraints extension, and hence is expected to fail validation
 (RFC 5280 requires v3 signing certificates have a BasicConstaints)."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -19,15 +22,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: Does not have Basic Constraints
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-basic-constraints/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-basic-constraints/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-basic-constraints/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-basic-constraints/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-basic-constraints/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-basic-constraints/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test
new file mode 100644
index 0000000..2d762aa
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-basic-constraints/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: Does not have Basic Constraints
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem
index 2cb3c72..e646cf6 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-lacks-signing-key-usage.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 contains a keyUsage extension, HOWEVER it does not contain the keyCertSign bit.
@@ -250,7 +250,7 @@
          4a:ad:4d:30:a4:59:bb:ed:66:fa:c5:e5:b8:a3:7d:4c:eb:a3:
          90:e0:03:b1:ae:35:5a:f8:29:56:9f:d7:b9:ae:79:20:4a:75:
          bc:4d:9f:c8
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu4Qe7V2tJF1klgIBT7
@@ -270,27 +270,4 @@
 hon2awJLIzhmizmtKab/aI1io7BG6S7n2QHAUlkCfdFTuY84SvlWFj4KW7Ey0C6k
 dT/u/GVgwF+sgbjk3cbfh4pKrU0wpFm77Wb6xeW4o31M66OQ4AOxrjVa+ClWn9e5
 rnkgSnW8TZ/I
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: keyCertSign bit is not set
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBrZXlDZXJ0U2lnbiBiaXQgaXMgbm90IHNldAoK
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/generate-chains.py
similarity index 67%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/generate-chains.py
index b04faef..42cb22f 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-lacks-signing-key-usage.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/generate-chains.py
@@ -7,6 +7,9 @@
 contains a keyUsage extension, HOWEVER it does not contain the keyCertSign bit.
 Hence validation is expected to fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,15 +23,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: keyCertSign bit is not set
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-signing-key-usage/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-signing-key-usage/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-signing-key-usage/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-signing-key-usage/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-signing-key-usage/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-lacks-signing-key-usage/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test
new file mode 100644
index 0000000..db41f83
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-lacks-signing-key-usage/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: keyCertSign bit is not set
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/chain.pem
index 80580ad..f51209a 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-restricts-eku-fail.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 restricts the EKU to clientAuth, and the target has serverAuth +
@@ -252,7 +252,7 @@
          8a:76:28:dd:e6:01:e1:f0:f9:45:5b:91:7c:0a:92:90:be:1b:
          9c:0c:1f:b9:24:df:d2:f7:f5:fa:8c:76:cd:00:01:73:35:04:
          a7:08:6a:dd
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALYwY9iwEXFfAzjlJKeI
@@ -272,27 +272,4 @@
 gQuogpZy/7tFpueb8wMk0CHkZyuo2WGqq5u58D+3Fvx7MtxKM+ij03n1/BZulSOl
 7Kd1dv//j2vEMtJN50UsHX6Kdijd5gHh8PlFW5F8CpKQvhucDB+5JN/S9/X6jHbN
 AAFzNQSnCGrd
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: The extended key usage does not include server auth
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBUaGUgZXh0ZW5kZWQga2V5IHVzYWdlIGRvZXMgbm90IGluY2x1ZGUgc2VydmVyIGF1dGgKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-restricts-eku-fail.py b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/generate-chains.py
similarity index 69%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-restricts-eku-fail.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/generate-chains.py
index 1465979..8f8eae7 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-restricts-eku-fail.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/generate-chains.py
@@ -7,6 +7,9 @@
 restricts the EKU to clientAuth, and the target has serverAuth +
 clientAuth. Verification is expected to fail when requesting serverAuth."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -22,15 +25,5 @@
 target.get_extensions().set_property('extendedKeyUsage',
                                      'serverAuth,clientAuth')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: The extended key usage does not include server auth
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-fail/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-fail/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-fail/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-fail/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-fail/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-fail/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/main.test
new file mode 100644
index 0000000..03661ae
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-fail/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: The extended key usage does not include server auth
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/chain.pem
index d3c332c..05a6b8a 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-restricts-eku-ok.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 restricts the EKU to serverAuth, and the target has serverAuth +
@@ -253,7 +253,7 @@
          25:4c:97:03:62:78:45:f4:ba:6a:e5:61:e9:a6:13:26:3d:f9:
          14:90:7f:2d:83:70:bd:58:20:a9:40:a0:a5:81:55:40:d0:ce:
          f0:81:b5:23
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALM1g3R758RWuzPDtRmG
@@ -273,19 +273,4 @@
 VyIFU0aIaJIi92vkYpitezfkzl6slxGTaa3TPNvt3Ok+ghQMH1V5X3iCD8hyKhk7
 kqeAvU3H19K+NunSVhfnjnElTJcDYnhF9Lpq5WHpphMmPfkUkH8tg3C9WCCpQKCl
 gVVA0M7wgbUj
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-restricts-eku-ok.py b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/generate-chains.py
similarity index 76%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-restricts-eku-ok.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/generate-chains.py
index ef5b82a..93d7ecb 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-restricts-eku-ok.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/generate-chains.py
@@ -8,6 +8,9 @@
 clientAuth. Verification is expected to succeed as this is consistent with
 the requested key purpose."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -23,12 +26,5 @@
 target.get_extensions().set_property('extendedKeyUsage',
                                      'serverAuth,clientAuth')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-ok/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-ok/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-ok/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-ok/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-ok/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-restricts-eku-ok/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-restricts-eku-ok/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/chain.pem
index bdf50fd..9d67a50 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-sets-eku-any.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 restricts the EKU to clientAuth + any, and the target has serverAuth +
@@ -253,7 +253,7 @@
          f3:df:66:e1:86:7a:f0:1c:72:6b:96:2a:29:c7:3a:f5:c3:c0:
          c4:5f:a6:86:7f:c1:f5:ae:6f:4c:14:3a:b1:15:5e:c9:c8:77:
          52:d1:da:c5
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOWZsfn/SEU7N9KBRqM
@@ -273,19 +273,4 @@
 T9aTm8E//d001MoWhEuSTNURTcOuEaeNwM/IlCdbf53g2PpnenXOpOfV0Mj8zjEg
 q3o7WY9Bzlh/cJab4wA7yp7z32bhhnrwHHJrliopxzr1w8DEX6aGf8H1rm9MFDqx
 FV7JyHdS0drF
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-sets-eku-any.py b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/generate-chains.py
similarity index 76%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-sets-eku-any.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/generate-chains.py
index 01ae7a9..1a1460a 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-sets-eku-any.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/generate-chains.py
@@ -8,6 +8,9 @@
 clientAuth. Verification is expected to succeed because intermediate will match
 the "any"."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -23,12 +26,5 @@
 target.get_extensions().set_property('extendedKeyUsage',
                                      'serverAuth,clientAuth')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-sets-eku-any/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-sets-eku-any/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-sets-eku-any/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-sets-eku-any/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-sets-eku-any/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-sets-eku-any/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-sets-eku-any/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/chain.pem
index 46dbabb..55aae06 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-signed-with-md5.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 however is signed using the MD5 hash. Verification is expected to fail because
@@ -250,7 +250,7 @@
          ca:29:be:61:a9:52:a3:18:91:35:31:74:bf:18:91:f8:6b:d0:
          f0:23:9d:78:37:b4:21:69:ff:e2:b1:65:16:b1:60:f7:16:74:
          be:a7:42:a4
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyyzXePvsmlF63lrC2y
@@ -270,28 +270,4 @@
 SI9wKUGHWNr5awm1gEuqFpyoRhOl+Mu5gDuP/4vGPCkTO+10N013TytgmNLO+7KG
 SijVmDZ+0amufJc1hvVY5CbKKb5hqVKjGJE1MXS/GJH4a9DwI514N7Qhaf/isWUW
 sWD3FnS+p0Kk
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: Unacceptable signature algorithm
-ERROR: VerifySignedData failed
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBVbmFjY2VwdGFibGUgc2lnbmF0dXJlIGFsZ29yaXRobQpFUlJPUjogVmVyaWZ5U2lnbmVkRGF0YSBmYWlsZWQKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/generate-chains.py
similarity index 62%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/generate-chains.py
index a1d208c..cfdbb1a 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-signed-with-md5.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/generate-chains.py
@@ -7,6 +7,9 @@
 however is signed using the MD5 hash. Verification is expected to fail because
 MD5 is too weak."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -19,16 +22,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: Unacceptable signature algorithm
-ERROR: VerifySignedData failed
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-signed-with-md5/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-signed-with-md5/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-signed-with-md5/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-signed-with-md5/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-signed-with-md5/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-signed-with-md5/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/main.test
new file mode 100644
index 0000000..7548ff8
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-signed-with-md5/main.test
@@ -0,0 +1,9 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: Unacceptable signature algorithm
+ERROR: VerifySignedData failed
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem
index c53ac2a..36aeef7 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-unknown-critical-extension.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 has an unknown X.509v3 extension (OID=1.2.3.4) that is marked as critical.
@@ -253,7 +253,7 @@
          d6:8e:46:64:65:46:d4:2b:52:28:67:41:37:8e:ce:20:f9:8a:
          fa:cc:fc:c6:df:06:7c:bd:c7:fc:ab:24:31:03:94:e0:b2:4b:
          a5:66:40:1d
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANSuJlDFrOF+t50gJDy1
@@ -273,29 +273,4 @@
 XEEcb8c6N/Jg3XBV4LkXzNw7PKfJAT2bagFnnIm/qEbf38N8wYONROH2yZE9NvS4
 RP7iE3ubRrQuKnkYKIje1iTWjkZkZUbUK1IoZ0E3js4g+Yr6zPzG3wZ8vcf8qyQx
 A5TgskulZkAd
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate) -----
-ERROR: Unconsumed critical extension
-  oid: 2A0304
-  value: 01020304
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUpIC0tLS0tCkVSUk9SOiBVbmNvbnN1bWVkIGNyaXRpY2FsIGV4dGVuc2lvbgogIG9pZDogMkEwMzA0CiAgdmFsdWU6IDAxMDIwMzA0Cgo=
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/generate-chains.py
similarity index 68%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/generate-chains.py
index 357cd90..f7863df 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-critical-extension.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/generate-chains.py
@@ -8,6 +8,9 @@
 Verifying this certificate chain is expected to fail because there is an
 unrecognized critical extension."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,17 +24,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate) -----
-ERROR: Unconsumed critical extension
-  oid: 2A0304
-  value: 01020304
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-critical-extension/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-critical-extension/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-critical-extension/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-critical-extension/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-critical-extension/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-critical-extension/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test
new file mode 100644
index 0000000..2dacc1d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-critical-extension/main.test
@@ -0,0 +1,10 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate) -----
+ERROR: Unconsumed critical extension
+  oid: 2A0304
+  value: 01020304
+
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem
index 18d55a5..9769849 100644
--- a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension.pem
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-intermediate-unknown-non-critical-extension.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The intermediate
 has an unknown X.509v3 extension that is marked as non-critical. Verification
@@ -253,7 +253,7 @@
          ac:7b:f0:4d:4c:57:a8:cc:dc:5d:01:2e:68:00:da:a4:c0:eb:
          e7:87:8a:d3:59:cb:e1:88:a1:8b:97:22:81:3d:da:f6:be:d8:
          26:ee:1b:db
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANDJBCrjLGH1uP6Vz/BP
@@ -273,19 +273,4 @@
 W6gF5h7NgdXxZxh/QSgHNy8wym0RLZZ8uh26zLcwIOh7Qx4v15/I3/zQoRN+BJs8
 A2RdAFp/ftnZ9xYM5wmO1+use/BNTFeozNxdAS5oANqkwOvnh4rTWcvhiKGLlyKB
 Pdr2vtgm7hvb
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/generate-chains.py
index ae4b03d..108c919 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-intermediate-unknown-non-critical-extension.py
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/generate-chains.py
@@ -8,6 +8,9 @@
 is expected to succeed because although unrecognized, the extension is not
 critical."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,12 +23,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-non-critical-extension/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-non-critical-extension/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-non-critical-extension/Root.key b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-non-critical-extension/Root.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-non-critical-extension/Target.key b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/intermediate-unknown-non-critical-extension/Target.key
rename to src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/intermediate-unknown-non-critical-extension/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem
similarity index 97%
rename from src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
rename to src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem
index 2e3e137..48a3d21 100644
--- a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal-anchor.pem
+++ b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.pem
@@ -253,7 +253,7 @@
          36:8b:f6:6c:f7:61:b9:08:ee:30:ad:1a:a8:44:f1:2e:32:ec:
          83:a2:48:48:3a:67:5f:e9:6f:1b:17:33:08:2a:c1:c9:c3:67:
          9a:0e:85:67
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDijCCAnKgAwIBAgIQRfjg5AHFPnHmvXFtl5xBIzANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQ
 GEwJLUjEcMBoGA1UEChMTR292ZXJubWVudCBvZiBLb3JlYTENMAsGA1UECxMER1BLSTETMBEGA1
 UEAxMKR1BLSVJvb3RDQTAeFw0wNzAzMTUwNjAwMDRaFw0xNzAzMTUwNjAwMDRaME8xCzAJBgNVB
@@ -271,17 +271,4 @@
 +RkPwOazhbsnWpV5xXZPWYIKT/1DAE5M4fkMkvwd9aVrjLqqq0v+u49yJKTcE19GW9eLxveBtWO
 oHoDfXCpRcw041Xd8ulwUyxMN00uKuSCiICNov2bPdhuQjuMK0aqETxLjLsg6JISDpnX+lvGxcz
 CCrBycNnmg6FZw==
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
------BEGIN TIME-----
-MTIwNTAyMDQ1ODU0Wg==
------END TIME-----
-
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test
new file mode 100644
index 0000000..55cd0c3
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/anchor.test
@@ -0,0 +1,5 @@
+chain: anchor.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 120502045854Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem
similarity index 98%
rename from src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
rename to src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem
index d423277..abc8cd3 100644
--- a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal.pem
+++ b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.pem
@@ -423,7 +423,7 @@
          e9:b8:c9:66:f4:db:26:f3:3a:a4:74:f2:49:24:5b:c9:b0:d0:
          57:c1:fa:3e:7a:e1:97:c9
 
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRU
 wEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHh
 cNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU
@@ -451,17 +451,4 @@
 2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPI
 vSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0F
 fB+j564ZfJ
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
------BEGIN TIME-----
-MTMwNTIwMTUxODMzWg==
------END TIME-----
-
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test
new file mode 100644
index 0000000..d1fc665
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/issuer-and-subject-not-byte-for-byte-equal/target.test
@@ -0,0 +1,5 @@
+chain: target.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 130520151833Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py b/src/net/data/verify_certificate_chain_unittest/key-rollover/generate-chains.py
similarity index 70%
rename from src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/generate-chains.py
index f838098..2dd5ba3 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-key-rollover.py
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/generate-chains.py
@@ -37,6 +37,9 @@
 All of these chains should verify successfully.
 """
 
+import sys
+sys.path += ['..']
+
 import common
 
 # The new certs should have a newer notbefore date than "old" certs. This should
@@ -69,28 +72,12 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', oldintermediate)
 
-oldchain = [target, oldintermediate]
-rolloverchain = [target, newintermediate, newrootrollover]
-longrolloverchain = [target, newintermediate, newroot, newrootrollover]
-oldtrusted = common.TrustAnchor(oldroot, constrained=False)
-
-newchain = [target, newintermediate]
-newtrusted = common.TrustAnchor(newroot, constrained=False)
-
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, oldchain, oldtrusted, time, key_purpose,
-                       verify_result, errors,
-                       out_pem="key-rollover-oldchain.pem")
-common.write_test_file(__doc__, rolloverchain, oldtrusted, time, key_purpose,
-                       verify_result, errors,
-                       out_pem="key-rollover-rolloverchain.pem")
-common.write_test_file(__doc__, longrolloverchain, oldtrusted, time,
-                       key_purpose, verify_result, errors,
-                       out_pem="key-rollover-longrolloverchain.pem")
-common.write_test_file(__doc__, newchain, newtrusted, time, key_purpose,
-                       verify_result, errors,
-                       out_pem="key-rollover-newchain.pem")
+common.write_chain(__doc__, [target, oldintermediate, oldroot],
+                   out_pem="oldchain.pem")
+common.write_chain(__doc__, [target, newintermediate, newrootrollover, oldroot],
+                   out_pem="rolloverchain.pem")
+common.write_chain(__doc__,
+                  [target, newintermediate, newroot, newrootrollover, oldroot],
+                  out_pem="longrolloverchain.pem")
+common.write_chain(__doc__, [target, newintermediate, newroot],
+                   out_pem="newchain.pem")
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Root.key b/src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Root.key
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Root_1.key b/src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Root_1.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Root_1.key
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Root_1.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Target.key b/src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/key-rollover/Target.key
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem
similarity index 98%
rename from src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem
index fbd9de8..919915c 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-longrolloverchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-key-rollover.py]
+[Created by: generate-chains.py]
 
 A certificate tree with two self-signed root certificates(oldroot, newroot),
 and a third root certificate (newrootrollover) which has the same key as newroot
@@ -458,7 +458,7 @@
          04:ee:d5:28:63:bb:df:ab:58:84:02:95:2e:1e:66:42:b1:e2:
          49:6a:62:f1:e0:1d:fa:86:b0:fb:6d:0b:05:8b:8a:ca:f6:0b:
          85:96:d6:ab
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO9fP1cArS2CgVYZwNqY
@@ -478,19 +478,4 @@
 BByvl9Mrzm6lzAVIgvVGBUIpp+jl861PkE+dTnaUhcYmbBqyhlATgWjgO1tRLL7w
 n+qY+p0We1mP4ZE5O6Ai5RME7tUoY7vfq1iEApUuHmZCseJJamLx4B36hrD7bQsF
 i4rK9guFltar
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test b/src/net/data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test
new file mode 100644
index 0000000..6298c8b
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/longrolloverchain.test
@@ -0,0 +1,5 @@
+chain: longrolloverchain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover/newchain.pem
similarity index 97%
rename from src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/newchain.pem
index 8ef333d..c352d45 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-newchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/newchain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-key-rollover.py]
+[Created by: generate-chains.py]
 
 A certificate tree with two self-signed root certificates(oldroot, newroot),
 and a third root certificate (newrootrollover) which has the same key as newroot
@@ -280,7 +280,7 @@
          d6:13:f4:78:72:a8:20:08:94:c1:4a:b9:d6:f1:d8:05:11:ad:
          03:8b:62:d8:80:8f:96:b5:34:6a:7d:a6:11:52:e0:c4:ea:bf:
          83:3c:66:f5
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBAzANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMjEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMcEGciy/Ch35ZmO8AWL
@@ -300,19 +300,4 @@
 GuQzIekoFiOCGu6R5rkkzanmY0ZLBHIs0HmryvzPp8jllOf1TA2ZPc9KSqvHpl5e
 6xK4PzW15pnWMOyqM0SBIHfWE/R4cqggCJTBSrnW8dgFEa0Di2LYgI+WtTRqfaYR
 UuDE6r+DPGb1
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover/newchain.test b/src/net/data/verify_certificate_chain_unittest/key-rollover/newchain.test
new file mode 100644
index 0000000..83e850f
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/newchain.test
@@ -0,0 +1,5 @@
+chain: newchain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover/oldchain.pem
similarity index 97%
rename from src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/oldchain.pem
index cf54874..e853dbb 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-oldchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/oldchain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-key-rollover.py]
+[Created by: generate-chains.py]
 
 A certificate tree with two self-signed root certificates(oldroot, newroot),
 and a third root certificate (newrootrollover) which has the same key as newroot
@@ -280,7 +280,7 @@
          04:ee:d5:28:63:bb:df:ab:58:84:02:95:2e:1e:66:42:b1:e2:
          49:6a:62:f1:e0:1d:fa:86:b0:fb:6d:0b:05:8b:8a:ca:f6:0b:
          85:96:d6:ab
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO9fP1cArS2CgVYZwNqY
@@ -300,19 +300,4 @@
 BByvl9Mrzm6lzAVIgvVGBUIpp+jl861PkE+dTnaUhcYmbBqyhlATgWjgO1tRLL7w
 n+qY+p0We1mP4ZE5O6Ai5RME7tUoY7vfq1iEApUuHmZCseJJamLx4B36hrD7bQsF
 i4rK9guFltar
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover/oldchain.test b/src/net/data/verify_certificate_chain_unittest/key-rollover/oldchain.test
new file mode 100644
index 0000000..76f7dd5
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/oldchain.test
@@ -0,0 +1,5 @@
+chain: oldchain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem b/src/net/data/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem
similarity index 97%
rename from src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
rename to src/net/data/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem
index 0c5da6f..1309e00 100644
--- a/src/net/data/verify_certificate_chain_unittest/key-rollover-rolloverchain.pem
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/rolloverchain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-key-rollover.py]
+[Created by: generate-chains.py]
 
 A certificate tree with two self-signed root certificates(oldroot, newroot),
 and a third root certificate (newrootrollover) which has the same key as newroot
@@ -369,7 +369,7 @@
          04:ee:d5:28:63:bb:df:ab:58:84:02:95:2e:1e:66:42:b1:e2:
          49:6a:62:f1:e0:1d:fa:86:b0:fb:6d:0b:05:8b:8a:ca:f6:0b:
          85:96:d6:ab
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO9fP1cArS2CgVYZwNqY
@@ -389,19 +389,4 @@
 BByvl9Mrzm6lzAVIgvVGBUIpp+jl861PkE+dTnaUhcYmbBqyhlATgWjgO1tRLL7w
 n+qY+p0We1mP4ZE5O6Ai5RME7tUoY7vfq1iEApUuHmZCseJJamLx4B36hrD7bQsF
 i4rK9guFltar
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/key-rollover/rolloverchain.test b/src/net/data/verify_certificate_chain_unittest/key-rollover/rolloverchain.test
new file mode 100644
index 0000000..cae1a51
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/key-rollover/rolloverchain.test
@@ -0,0 +1,5 @@
+chain: rolloverchain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Intermediate.key
deleted file mode 100644
index 1dc07f9..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Intermediate.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA33w9ZUUUAQlIoYsMy5F+nGXxG0Ddt0yxrBuer7WKA1nxd9Sr
-FRRTtZT6NCD4NWUY2sU38Dm/87x+c4p3HNtNqvGCN3zKtfUjgXEPIWN+c2SF1n13
-QWmJXsI1QYN3YWwDMaqtg91LQrgg+Avs6wqXt1u50hY79MJh05MP3b4ZEzo84T1n
-RwJTncGAXCTjuuUWhRCZO3JqbEATS9C0hCxNH+pQRADrjHAtq2dopBUJnEYJYWQ/
-usMb2b8phPQUiiX+4or6Ha7aVvjo2gIxWpbAIXk8OLcOXXTCLRQW8QXK8Rsf3/rX
-M+LLoc/vMbUQ6/joei6bL4k7c76ouPZmHLg78wIDAQABAoIBAEu10S7PmhlHxd1E
-OA92uMfPGUE8VmBUkRRXPwkTnS/Jdq4708GOY1VupNyoFq4wE515lpvBVLADuWr3
-C6cw/DzfGFgn5JyD8YVWgeOzyxDYiybA1nfIgwshC92n5feRGfvncGTtwSNXMYQW
-tipiKkepwWfUtHcUqwN8HLHoRqJmRBPKhO4zzLIpAELuFqNCLWEkiyirP6odNlVm
-/9SQn6vTTKpzlAIEgSqcpYw0uWs/Nf3rxz/oRXtaVV9nZOqj/xX93UnatsXraVV+
-0c2MqCQZsGdw9ecK3sPoULFCVMY6TW5Vq7O5QEU1MeKl5PtH+8ptM3VgUNkjuvU5
-W+KeC6ECgYEA/B0tC/+nYL46w/TYi1WJP6Ky2Mlzzp0izWRcyKLOkoYeODKZRn7O
-4PUl5iGj9QJmjEBYVi/IHz1jg2/nvnCOGPXdbeuPIBfhYoH0H9QqoEzXXwA+EERR
-tPe+kOD0HCAY8PyESQkvuHaMq+s4UgKte+diDl6A87nElJUrFHxXGjsCgYEA4u4Y
-4Xw/ribhaCmbJlCj/Wdn6wxKebWNe49YMBmJlpMHeGtuoH3oeasBGT/WpTeCuSTO
-4SEXA02DvlKFGl8if3EPYXGoLBFzuzB1HO+fC+uUdbugtg4+RAnUHx+ZsjkX6RlA
-bkfKnsZgiaLfRDyCtkWIhX/iIn1AKO4JEDnOEakCgYEA2RxvDKQvChsIFHSofuU8
-erar+hEST932eJZzaLz71Cb3o0G/yXuuwP+ckaBqx7Y3hZRr/lzLpEuDhU87bT8U
-v94LwHtZGDQ4flKXX0mhI8bIuiFFUVDkZEntrGptDkN99xoe+Z6Vn+9HmU3JhKaV
-q9xJD0LHHhzec246WTvy7r0CgYEAoOwLBMthNRQpP/5RIWiKAga0MIA0x/4w6HAM
-L3/Mi9STtZcpifH/S1gynT8h7WNh9fzeH9OhSBxN0kceUEcqZYk9SPKaOTXfBd0l
-D3H1LTTPwHVfT/rluMXngHKeQT4vcIMRp6KNUu6GQtQW04K9hpfkahb3u1FqkBvM
-nY8ATJECgYAc7Xrh9WhiP2K4r+DoQDl7i1fVZON9iaMazYRCtUPVwyZGb6Pd+PoA
-rXCzEwTNBrmHUmZsqtjhf9OIF85bmQqxzXGoxBXcOU53vPo1I/fQzekllyC+iSox
-CSv5QZ4tXW+fVmuNIxFT48FPDdf3KunPqs1/Vi0KTU9mqdb+HOKv6w==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Root.key
deleted file mode 100644
index f437ee2..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA89wSA83b/X5yfewjMAfT9hO+ct+Ccz+76smT5nSZgeLdoABa
-xkNu+nkANv7X2GpdjwoZUzyqtZ8NbIojrgTa8/Aj8rJ7q8zR17bZejrjKrnK1UI8
-vmaDii4MU2wQ6c5e90+D98Qye7cz/7GJCTn99HuY9QKKW5yJBAcPjnIT8TOhrmyS
-UagHh98yyUuG9YrPsawEF7FrCUEXUQF4yUq4PTFc8Zc2bTyZz2ayiyKxBGbem8sc
-13UodZ+X9UbgU2qcTiYZWi0ta8vdN2sIzQ3e32zNHYGL6DXeKxbB5fhYQVxlONjB
-5Lffsa154MUFpZpUJUEzYW5cSxsIByXOwIQaVwIDAQABAoIBAQCtFlY/Fv3/xqGT
-WWl8bQH41vjF5nlcPi+urddpqvdOZu2x5K6JrVF3PS1225nvBUhU//EL0LLGaReJ
-I9/BY7bZkGijmiYHwkBroWBpzqRxLiCXEAW3i2HwUVD0YW771Tw4w9rCoSLIBzhE
-VAoVX3Eu+A+QUHZOIiRqlGxpSfV3rDBsLmyp3JNB0k6o1DhoQ2tW8BdabyFJoN3w
-C9Jx3FEG9IfRu/xntK76q624nYnCrXhQhyAQICqasNW19KiEskj7UzOubxjaMAJv
-zeforITYfGbX2WNI1XjmyCxeYhLr4uDskGdq6RWOM3ZWY990qfYOZhU096XGgvsV
-mTL5d8cxAoGBAP00YbulAhD+uPs4r3/iUlddOGqjBHlpUP092mggn+uj06NGdx9v
-W48yiYCP6mbodbNuu2VfCibFHhpw3KRJx6vD81UQzeuiA8oGbJM+DjH6eJdwInU8
-vTVvpomrLC1zUyjQQuzcyaXrjNUH0AoMloNIaZKEFY2kMj2yFJx2/c5JAoGBAPaN
-RwYzK9TrRAJ2UKhjFLNKfPQcG3VcMM1CY6jwTkhj6KuBwIuN/sRQ+uOlEwTFZRdw
-40/x+Zx7v4cLcvGY4Q7PfBJPT7r8u4HhruBrczzXH2SMShkVpimR7nuFkb3ni5b2
-xh5n1b6ApFYjoYZvAsyeGmnzqIkwCbrvqocsRSOfAoGAd9bU8uTUJ4sHrg9UMOjD
-JApA62egdH4+EL23o1Tdm798KWjudHhWE15N6gUzYeVf377m/sGOom7lIoqMQ02Q
-LWGex4IelAmoVXPY64+RVGJBtRsjk+1dd+8SGVJkpFZS45w+MLEG13q2uxTph/gR
-PK2HGgtd0B4IkV65lpxS39ECgYAHxq7tyCFixsTPWxHyLaXSfc/xFw3apry3TJe+
-FU4yxEvrVN1QyXq2kGNJWMR/ywYENkBFHjmkMNb6mGbYrdyzTeH45d165Uu4rfiJ
-BXqN+a74yd/waJlkCEFAThcpqSri6QeYn+fC6WXFfbwzdD7fW0E0BEZVhVlZNwPm
-3YOUuwKBgQDPIAkDEX3Yrzlj7xZUNJvAET2HZ4Pr2nb4Q0MwRg0/DUCLKqnW2E/B
-lYDNK/tZc3cd+Vnx7bHJCh5mWfOhRt+PZBuu8LJTGuexMnNOLzBha8RBvL1FuC+d
-Rr6Taa9ZmhU5C0okldbF+ynWBwJs6C32ZOCAQfjZNuHf/c8WnUcHzA==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Target.key
deleted file mode 100644
index 24a6e84..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA76b8egqSewDS3hex03fJux4b/tvXXV4NTr4IwcntT9dADNzK
-eDQV+qvrG7j+wvnEJyOC7PnlaX5AnRQk1LAZzy0/iNz7WfGokRnntOmZDb9i+HON
-i4DUhBSaOwZbgSo2oBC4lH/HqqEaaU7hCgBz+X4w4MqsKgnjCM4nzAgni2h9/tjH
-HDiP9TlJ/Gr6lUVcq8JgqeYlT8Zmr2ElO3IXF0xDtnQTg3yRDPRKgvvihG8qAOF+
-lHE9LyoWRyJnqbUWT+EfWqArhybQtAxt+eTdMqAHwiXsiXQMsLj9Gj2awe99Fj3J
-78PvcbT3pttkTFt7bBx1rpQmKGwestpR2lQy+QIDAQABAoIBACEES4Jw1G931JVe
-hFRTC4rpAghht1EYtRKlIcW5ESXPzPY4sPhQjLqlVtXR7d9k075kqRQG9bFMAJDj
-hpN604N0g21SrJperc+X1xFYoYqAVJ1QJi8TB7ROtlTtckvgSfhRdWyYEiUS3vWl
-NWHQYCn+VbOSmJeOFyZOaLM2aGRPM9MUJaumeQ1uMerNrQLMSMy63aw9DGBLJ5mX
-hyiEzcmTzF5R+946ZXq5RZ+Y+qnrDRdIu2WOe5PDKZO9dHP1BOdeLd/FjVIqrC/2
-H6er/+sHyZ4JYzMotzPZawD5Uv7NDz5wdRty6i4PidYfVG6d3e/L7OCXjiU4LJNF
-FioQMMUCgYEA+xMYlaOHRFji1qPCQmSWNaY/8VJtE/vBsoEXd/0KhGwwwJEpZ/Z6
-9+97z3xL4i/nMGFdoP7Zam5IJky0xHEYT9l4sXldprsObdoSMpTwENwcfy69zB7O
-mYvrHulWl6jyeqqH0qllALirjNFnFEeyB8kYhkEekzqwZky/yOt3c0cCgYEA9FqG
-7VhAqC+ugWGSzs1wpTE9THblYyyB6gCM9zc0N4CeMXUCtGQV0nhSKmwIXtV9M15r
-402xbBu7tTR+llZQJAuK9NeNDm5cMlmHeDevqBoSyIRZ4v0B3t6Vl1qZuPNj/JDc
-n8Bm4cQhffQSKrUCdvawcdZL9YTKGeR7ocQfx78CgYEA0pCyVpT91blCDMbsHWhk
-fXv/NnFtX4wNZ5pSR2QlVOezf1x+wFz7xkHHsTxKG9kW6AFQV7xENLlmsxAzrmg2
-/oihax4hB7rrH//6sQctysX+9D8MGEth825f8t24rJqZOX0ZSfic55z46rGX5G84
-hMUHV1j3vnxDApitY2DvHfMCgYEA01WMRrBCU3PRwHKMTzHdT/HzKzPVlt2Cisjp
-IlLrZWlm6C1kJnI9cWfA4JHI94Q7IXdzZgbnATJHOSRqq0mBTHtzNelLRQTr1lwa
-Tz4SPRg30JavSyM5P/FQfbPNKenPOzxqo/v6vx4rPU0ffTJKLGuVFQ+baH/tb1Fu
-H+2I8u8CgYA+nZ0TIj65F5bGH/Dx/CNRH63UNAyKNyemIh7jr0GLn0/h+MaxR70I
-Ya1HtS997ZeFznX143Bmr9WoD5c1ULAtXi6i5f0URyanJvOexD3BdSInwGQe7YUi
-nw7fGbmNv0o/39YPBOhRbOdG87EsANra0M/kUf22v3iD2TS2GimkVw==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/UberRoot.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/UberRoot.key
deleted file mode 100644
index fd34c3c..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-non-self-signed-root/UberRoot.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA0Z+w3c6ZOoqCimKyAC9zsGpJBInUFbuo564y5ukqdflvzKnJ
-hje50IODsZv2Q5+UHXYn6U00pZ/PnaC3Mc7EvDU77PIOcr3C+wsNwDkW9So+6jGs
-S/N8DZ0pTgwXyCYtcP/c8uoHxZWAvcMBoU6PI8fZWHNuzGhhAo6weYgyiTbWyFzv
-1ABAxyl6NWdMojBZSs0iWjqOyDyUrgozFmA+But5SsoeJ/CTvzPuYYb7I34lA3aA
-noJMsC8aWFSVQ6Tx2l44j/vDRJNP18IYDUEn4ibHzw64I8p7mOW0FOywo5juIzmV
-vN2JDm9LSoVZpQWo2R8K0xPmLJTf6Cqbov97UwIDAQABAoIBAHxHqC2pGlGJ4yE2
-qH/Rok5ahVXqfVIxQ0+wiL88SA9PxofZtgAcM8862a5IYDXxe3gIIFuCiY8Uc5vp
-uBMQmrVW/mNZk1VVyi7ae9mWP1U1Kb3hm1wgTFEp914tb0Ab2l8fYxilxdvP6lcX
-MXU4RUcaanK1ZWBNFg7VGC3FoOiWBj27/oeBpMtrlCdigd7oETrOkFzW8zkTUwTi
-ynUI+7g2OkkH9ZY6j1495bLXVkd9BtGcpKB79NkeUhq7eJKteC9GzTk2KyZX3O3d
-yuQMY3SOZaYn8XEWuzVtvrI3XZlBkok0YLwYjPwsVEGOgpjce8QnAT2rDhkZ8Tvi
-tjoHyskCgYEA+g+0W+NFuNaVjYmchSDoA9EoJGe1XpPJk2DMbFGT571PHk9eEC3p
-HiWu6DpFqTOauEcsRY6RxiMoTB3a6CBSx31S077gzBF7UC++wSDet21RX7XBBr34
-RxVc2ZyQVzzGuI+94vMq5MKVbUOs0ggSYeOoGwYbWPmU6o5mJ1IDItUCgYEA1poj
-eSk2KFGqOs404xNYeZ1NqLOOvBm1h5ATyqg71Lix4+eYawvFcbvFodmpNwK3cZ66
-/+VTxige/1iYNmQDnfta/nTNljSYilkcHUEhv8UyG1uYFLUdH0O3vK7wtmb3BxoC
-gGN5TPkLIJ5TaaVMKpqaTT4JMHayikfM91G0KYcCgYEAtSzJtUWuT2SRyJGqqL4V
-vCY/WlkVjGexRal9kwFsExwTBdflQ/2viBsvZaxKqnPsJpXSmrbYIWF5oeSDpWk9
-8LF5YFdM0i3cVVWydIUXOHjo21p5dyQOjZoJwtTvs3UiWbgzkQozyri8wQSmYypb
-/zaNpr6+87Eo1uTDWLvP790CgYAZ0CKSMVXVVbVfK2yLH8mVn0k3EJoLoCAItVjc
-GI5R0QF8w1+/CIRwYMCt7it/dXExVoFxxFjmTe8kkbiFWlRhDVntn4kXFy59/af3
-EN2JXqPfTI4nd32QRCn2pShJGGuATC2e2dg+XPpsqv6nh3145m3G+r5KOQzSuz45
-RXehQwKBgQCytIAtyYQkyXp5H/KQZSIEcj9wjP90xFKJZfoaJkdkr2eUnNZJw3K/
-LCMr8Qvc5omLnK0zjnvZRiJMzuP4R+t37eP7lfO2RLD84GRG+bGSAu5geg/qTd9l
-zuFjDqUxQOOhMmSg0la+Cgydge9IyZ6urVx0fjJKiAGHAQ1kG/za/Q==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Intermediate.key
deleted file mode 100644
index 4118dab..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Intermediate.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAtgrzC0Mq2OUV9kiUIekjYQ8OzFqmukWwi5lURAtWTrET4s65
-WArcd0E2hqzrtFQEdx/P9h0SxVg4Zf8gQfBDnaS/+mE7dVLwOZ1b++KI+2kysrlN
-qDSI487hL/QD1Rs/GquVmKFvhysQdgJPumd/miNckIrcsyelKBSYHrIGkgpgN/5W
-thaEWQGl6R0E1UZm5DD6Dg7C12YhSvyZT4UzljZ93FwEFrxc7vNtTbaiDzn84mOW
-vz1aYQKP29cHxCQC8AJS5ywIeLmN2V8tzGwenvmRlei+E3cCs4aryyTtSr82KS1m
-Nh78PTrFDyNd6S5B2HmX7ovMdS3HOr5N5f2iMwIDAQABAoIBAQCjf7AMZHYeOZqB
-CWyqDEdvS+PhnGV0lVTb/IlXV8tbf+U5ZqvGrHKYVSTQzowf+PnNt+/Cvxf10KdO
-zFY/grhn5OlbympplGUXigJsd2jKTRBwvsdFlHGCEXPk6sdqZj9GB+ejHxMZFo+B
-PdA3ve84FBx14ZIZAjluhxidMQ1/qXgisxdfDB90OcR+3KKAwsPNzNqmlWf0H2Wo
-ntCB2qlgihzcF+WnmZRonDED7GZ2PlBO+CuDFVX5wFoHD0Qa+Q9Megk+WRofPnfx
-i/Y4P9wf1LJh0MUibA2CSIUxNgeiFETMmrc4D6483sZ80CfjKhZkAwaOpaLeAO/V
-bjT2oF0JAoGBANzUmwLwGoT2YvaeyYyfrso6HH+qYiDk2eQraV+YudLMUwMv00K2
-LpEiqTM0E7lgL0R1C5YlzAj23JihAdWQbCK0Cc4bNrtl5uxO9eliybX7g1AN3vGK
-FfsZ8Apzeq1S0AHp/ujdx8xQJRQffBkz/cVz6km+1V+ngoXxI1nuVmctAoGBANMI
-8d0+Q7bWrHozbl9QCM10t2gue6dSH/zFpfutlh3NCQmTYRrDxHqZ9mAcpgjKk+xU
-YImsRoV3QWW1CCWIHCjF0XJMOoEDzoHTdhXe4FGCuvxl7lM6Ip915gPA7bCQsnjT
-dSgcHx/U4ZcWC6vxrJstHS76TIKllCBkh/v6ugrfAoGAMWlA5f9jb6zRp+0Pm+9+
-5LDr/4TYQBP0zSEJiuJZcdlWGbhxxNOOx9rBkTttzmS/LsohtY7vgHH8GgqspmSS
-TZGLQBrGvFeou+dPDtGT4KxOTXNNFy6WjIDZPP1pza5h7Iu3BdPaCNVF9qK02c7Q
-UYYGPkn85FJO2jmCd3Tk0GECgYEAyWxILbs4NlM/3IMqXZ6uSCuWwsFbFKC2FzUu
-78EG/vqsHY+lpz4jUkGRfrrZXpq8BV2jpsPfq5Pfv4vCctAu0Fu/RTCsxmczu4Zx
-tv47bJEyl6VSi+15DmohWIPUWipBrkFmGRp+Ooudpe9MxJiu/o1YxXXxgOE5OJG7
-mS3+VFECgYAWZ4DZUS8jTIRwmRkCgNOfWPUCvY6UL7JmnwhJvBnPBR4pA2Y48Uii
-V428PV8LjtWiaS6iz80chAz+DQSm639My5VX7wDhlSh2fl3JWaMk0pCwFn7PCC2C
-mCLSXcny7p0KfbTGEMtvQ5PyMM5hipY6aePKxEB3OKpdot++KahXPQ==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Root.key
deleted file mode 100644
index f1ce6e3..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEA2eIIrEZPPsksDhsuDcsFLrJg3Tk7MZA8ie5vMj9OnEqT15fl
-6Z0KcqV3yOZn2+Di1zWr1XsmKpc5TATjMpPfaZ5ex/s6U3AYkTl2I6plW+CHMsss
-bG/nOJ952yPqPIab8gPT3xVczli1RnddIQn5464WzubVlUHV7sd0ib/cyIBH4Elu
-/yZrCtTCBCGgtbAHTRsc4ahTIxM/ATHZP9wtcIthSbFtb8ZO9zVFF0A5nSgdd2iC
-wnWawp+Qq0zJij5oKiy6YqvhWMg7/sCVjlUzU8o/+5qulRNlP6aa1pjxrXJ0zthl
-Ep9j/WPFP5A92LIr/kj62qvyScYdKrr4c+FQoQIDAQABAoIBADZsYWI2xcCXG2wC
-mgRT+91oLQ3VJ9X/gz+o0Rmp+obLkhY+GO27jkqIzlzeQH8Js1+yRlOyyRvGXkeA
-yQdvLFUDfAVT2YPR8jEEO2A5RcwnT13+pgAIC6d3HkcAt5eawAU5s4h7m4znV5Bc
-bGS+Sy714ziXLC52HWvhYliuFgX2nv+3BRCvN1kntFwezoxpWo1+s01n/sjLwfoW
-JdWco+rdI+XMQf4XPlS19bNP8fzfqyiCfblynlj96rlOvRJassn10e4PkWWX/lhA
-45acCzl5ob2HHPOcVesNYm8JGZCTSaRh4eQbvPwCJnzBzlVPhl2ZaMjdvGFoA/Ym
-saSo32ECgYEA7nUHhZFdO8blZipnBpMB928BNM+RdJ1CVaurSfhGMMOI4Gw/3Xh2
-kpd7Ctw1jVyiPJEO43OVE8OSxU/TVxB7/EupcTSGDpWUAtwFmFGVV2iglCCv+bfO
-T01mFJaUh0r/x4SPtgWsbg2qQowbsWymewyVgp7li9V/zAzth2R5lp0CgYEA6emF
-dRWEwColgaKx5Y5N/v8EGBwr4lt9e/469w8/w7KHeuhjVbErcr/OFO3LMSpSZYKl
-NuhItpsF2vn+RgOpgdivk07W+6+CWnkI7uuflYWwDGNlJbsQdFFYHXdqZkraGwuc
-4F/Gj9poTvSBmuq/+a0dXdznkLjzwZW9DkxjANUCgYBDsN0NwZIh4fhE5EySxTCN
-uOkywKmd3PZzs2PQf7YNKbS1YIVQrV2bh3zaPGDHXECByPvc/XaYQbBsapin4noP
-yLq09CAKC9QUa7j64E3wnjbXVeAel1rtkB8mQQiwz02EqdDR7xJfu2lVssg5uYoY
-7B2VEt4+r8CzgAf9ozwQ0QKBgBTxn813+8bo/yq4Uo1nTHyEgO1XuGYwIvAzNzxf
-1SnElnTe0eYeUvGXUvB0yjjAvVfxdrGP4tLW1pNgxu+l7EuAB1h9OqqWcGmBZNdf
-qY5NxhGV5LyYH0UK84TP6Gr4UMcTJxy/9ptyxtwq8F/anQ3R/kslOGaw6MJwkdjx
-5ftxAoGANxbKqR7qdhOrsR+oeESl6xBTFVxYv0lQPul70rjV4/GHQ5jY4+N61FFj
-5K5MHWEngoBVmIwVDNmo5hAgdDssslzMYp22d05alkgkcear7pk5dZd5BcYV+AmY
-qbAXbA6Gn/s/+juYQQiTbR55xxeQr3W3V/D38PVi18++TYKmFzs=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Target.key
deleted file mode 100644
index 37b7714..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-bad-eku/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEA8AgA6l2T+589/bWub4kCuX9LdblRy+9v3XtQtiqn+pxBiG6h
-viuLVCoCyMAs7citdZ2EIsUS2GOsYIVCPeLFWQABx01jCL+iY8/d/EjmVeYsXNa/
-4dEZCVaLQ/K+ugSBM31c7iY798IV1VcRTAj8SOT1i9Fiy3IQfv6uhP/41jUggPO5
-WaN/Hb9v9W1rKeSxXi4gzIAE+G1nBBhxrMPPU0vKGqEGwX3X/iSoa9JSGEp6rcQv
-cOGoZpqU3BOyJk3gYPFnVzHxANWyPDFqNFJ1K9Lz07DW91S+nLqZOYJQAu622MS3
-zggwp44tsGt48RknzcXDpPLHkbNeYZTmp5Q7xwIDAQABAoIBAQDYFAxm7sjJ6keO
-/p/CTk/Cl2Jh3utQsAI/GsTEyM+hHkssO5OlM2Pg51TMTZvkjxP/3kXWWxyk6c2C
-slO4jE1l2ki/lt3BQWo5eiX299VKnMNw6+2epnJoYp1KFNs3b9izdnZS+N5hIjov
-bIrorOoX4O1e6aaLSOqquDB5EEl84mY/pdUvbDaIParYrTUAw8Rpc+InNYB4jMGP
-M1uWWkVzfRwg7BdwGYC5g7Dd/1vAlT9PUwug8fDpkhCM1+qaMzaWIvt1WMyFVzkt
-7tIhgd3FVQvHtb8XPLNvMnaSfoqfjiQpw/YUR9Cg49XleCP7oU32gVhp0370gvZL
-jBnLW2sxAoGBAPtavP2uay8uBICyZkBCpV74JmnFyA5sjCkKJyK4sxsb7T7uxK0z
-z60dfrvVN318QiNnpAaqFfpdJPOMxTkSAOMVsDsOeterHXXdxK36pq+Ppsv3Mr07
-s2H7wzijXwOXiRSMIjKvsvI8yQMjeL6KGKwTyvMbhz6xXwRuvlaGhN5PAoGBAPR3
-sNAeTpOv0lF1+ovWP1IzzFkBBLUmaTKStpvMLyqBB3mO8PASJvMyYSwTmDcNoyR4
-7ouHNxNjzUOfWHAsvFAISh4qzLVyHdTolcH/1FRJWvDFloW9eJZ3ah/LLgh/XxMH
-JpAI7ZtOxGzVvhMDpDzpuhzzDdSc2vD30ECYCSUJAoGBAMg43qVBhDYf9QxDj/oO
-XMcK6yaEmzkKNJgYc1ZQRLQKifEAqADEbeEbxrF/ReWazuB/FYUNhdZazi2H7C7q
-7XP2+dwBS89yilQypRJlwNPGnXqKXouo+9rIfxkl4nDtDBAnFLLFjMkzrHfokK1P
-OhoQ5jDDs/c3uVXBlbM9Eqg3AoGBANYZjOx33nFRZmyZWpflRweC/dBlJ+5OeYsl
-GnBP3m7nGdjH6xMVkq8izB+B+akddGeY0bG49e8xVK+IejejtjiRSfgpm6a9DotM
-Nvv0Rcybgd2j7jOqwFVmt7aohuRCSM2tUYSLjSybS0PV3eVhJxGB0NFRvCccSFMJ
-dYVcoYWhAoGAZTI9EAk+bdmt59VzagxQlPw8lCO9Xr7k1fLsy/NBGS6WK1DonMPc
-K3eofw5F43kAef5RGewWA1lkrMm0uKt85mrBc4VDEMI+Rziwvb5sOA/mtBvJ1N42
-JIQ5DewZVQujBRdoWk+JOEtI5s97kHURj93EJiuHzSKOoFw1pjhU63g=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Intermediate.key
deleted file mode 100644
index 5ca2025..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Intermediate.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEArCo5gFOe3hJZ4+F3TWLzvF66iuOgcoEQtVU36RaL8zlCcRHn
-2FBeCPVg+LtzietzZTBJxxBf+vcNoq5+jsu6uGS6NpLhwBYVppMTYnEOX6apT1TR
-YtgUqbVK7yd0gyoz7Z46uuTE2QRzNBv8aOpNb9I9uiUEGCw9xIHdAbi0/joJxipy
-hOb6AKfbf0ygyUa1nPwV1EyYjmBDL0Etbaf5mdjvksVs8szSUMBEG6TCDKh6ZmSu
-dk0RA7TQCm8B1OJtkEIzeBd4i+GzVXeb+I/SXwgIv/lR/o6Lq+r7MRXLsu38FnjI
-7PtDxDVL2nilUw56XmOT5PYCk6qapMDhf0UbOQIDAQABAoIBAH2nc8BNR64dBq5j
-aId6qRnaqZuk9v2bZW5zfBMK+anTKMMNpoEiZv9y2AuyBGmtBtPbon0/Xk308mbB
-pGzkFKtwGNir60ge1j51Kbi3ex4krX3REeFqg+o4/y/9Q/RXYP8UdRjizyj1Ln/h
-zR9loo7yi0rIqWxbHdnGTl9rR+4jiviLV/3wkHx0kEJok1EhNAvAM7h+pwNNRFhw
-uibPMefe/Syh7aBeGrch8FfKk+lgnRHBAC2MK9DGjE/vdyJkWsuRbtFmvYbyUeJs
-uAD4Kof+imLiPo7eNQVWEJdQ2449J8IXjiOX1bPrKHohTToVRl0aex7zNOPEzYbP
-SdqYAYECgYEA3mlvy9pSfKiv1/qeZN4wMqN3WnEzxxYb7FwimDZ87RlJVpjcLQIx
-EaEaHXfMRjCzXvDD+8VAdefGjaW1ciMsX8wxWM6TbrMuQg2JLBG24QmYvuT/jRNO
-ScL6YxtEWbOtAaDblc72d4qEFBXqZwYyjd5zKbY3iFgXNcEoUZ6as5UCgYEAxio2
-8c1uAYjAq2hJ7VdC14LD+Y2O6Kp3w4FbBqOSiFUj4xJ+HFjYv+4i4Nb+6cp2zoxf
-pj1g54KXkkwVywcnfWOT3CVEwulxajvSYRl/m9QJliWUgBtZ7TMqyvccZtOprOw4
-Mbrzv/Wx7BUrbR+Wr+bSnP+GwKvf24OpQcUq4BUCgYAC41WbTQtzKPGXmV6DKstv
-bOX4261zcVsNd6jPVy3KGmD0aem5/+RJOVFQfqS9aJZ7rh6tX0NWBJt0bWlswP4r
-hEhDwfLyJgt8uhZE5zn7tBcyq2CSIWUL2idMMCd0Drw5YDBZwqU6qibK5/nyOodf
-hjrymLYh5BrxDMAMR0X0/QKBgFMxweN+NWLbgNf1bqP/8IX91jzc21R+zMz9b7O3
-1Hr8E5bvWpaYDld1qJrwaBDK+Vn5wOZP+nD3eJ7o5nVYSZHwzlCsLNQPoZfSCZ7O
-T66iNGwe1tt5oCVfR+XyHLBmyGNawLTQIilDAzF0Kckka+TpaR6UgIQ/JDpKajK8
-jiWJAoGBAJBA5yY8jbL+nQUTD2BAY7KeRFzx+4564QyaLdTFQkqZTAFSy9iqoQ2m
-Y2hQLAbn8eO93yvmcVZo0LMhOtBzUE08vyvCMIG/VvU7w21EvC9EXTjQSRBn4D/J
-4zqlnFhCKSTgnDUwbeIjKzxbNDIsZaR2zNGP4F+34bbBgFdxbi1D
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Root.key
deleted file mode 100644
index cda85e8..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEA1aCFlwGJsjHx9fuZZvlHpv1lvh4174utdb+BYZ6qVNYCh2EH
-1E4KxS2aeOCT7rmxqgYUkRMj7N2isYCe1K+NdzjWO/ZTpsLPrzdAnsRwI8na5TF3
-yBujndwUsnl3hh0OSFhgsEZpHWpLGxm7xuLFs+oaedy62xAPMVKbc1UJ0ZeooQLl
-Esg5bcB1DpAvSBwmtRnyywCsQvA75d2OVbXVYeNHxPsPeYOuasrsS+OJ26/sRxDF
-QoKQi2Eex/A5i2MxHIzVkEiCmqCkhKEtf006fTox9QO8zs+k5VNDI+3cRs+MKNHd
-l8iTD2zPD24cqMLEUXNq8TP7Iib7w+LmuTdy5QIDAQABAoIBAA4pw1Gcp31p9EnD
-sYrzMf3vROSS6i6Eiy6IUNKhC1fujGJfW36G4g3qlRg4g3ZLV20XVBu+Mh6NHzE3
-ftBJB08FNKbrEOa4eb57IkykZ27n/hw96FwbAQEBS1n91Z/No1nGijqFoIhzuKEG
-Vr274TGpbrHvoW/Oo8M4X9gIpkr/7QY/I+NWVGWMfxniMN5hqflx/lEP0Yimv+xQ
-D7PcynujOkyHIChhwkBwfwEZvIpeI9QTFXgiowZj1uHw5Mjel2ld2K4r0L9kiVpG
-QGDIzOWn7Un1sRdjiglZCSFkAl+GCwTKdBjGh/YS3aQeZ8dPW6qdpI8+dB+2RXiS
-4QjjMwECgYEA8fR2BMREcqbxwfUMktVf+zKHeEHlrw4BBgjzs4b7fXPkUTbGMElP
-7uub+WEMj2+kjXzs+4gGrgNaInuuEZ3Xgnma8yx1BtvUZeq8al1Oa7PVaOoQALCP
-B1zvhR+emls+xIfl6kz4+WdPbOgX8jvW65sEPtcMgoZLFfrCTaNN7MECgYEA4gcZ
-GAPpTvGlto2vDGsLVc6UJHPjCmB1VWFr8gacvwLt0lXL9PVJ7ENWVs7AQcQWUUjg
-0yR4wLXuwQn9D5vNxZ37A49WZ5U+YmAtT6acI2zm/31udWlWCVwjQejnhCv/ZXsC
-Z6RylXAX+s/XFcMNQS0i6/JiMOU/dXAFsgWT+yUCgYBqOf7apuS6RYtcsV581MtX
-+N47MQtLKOXQJXwBNOETOh9ifJ7UsksyxSRsf2xJSSXArLlK0XTFT1lyTESnHVpx
-wTwDSWBzy23b9QwV0rNMW971OdYex2V0QRwzoSc785WCKXwKuxKQRQg880UYJ6d7
-N0rM4BNw9s7eboKCHZFnwQKBgDz1Yxwp+eNToriwT5SOzhjPRP7rzkC/MQXc52r3
-w5B0bsV6ZC5ldRFmO8PfsNRL2SUE/bWUMYjvyDuBwSFTiNSSPd+A6fG3u4J2o+HG
-cnfPaCFhp8e8p/qQQeYFtWLdJt0spsJjBJAvEhiPs1doKov4a2GtFjRPr6SxmKeh
-f36NAoGAI91xdaBDOBiJ9TeTIfPLvdwJ3kxU2jtg11p1OmOnSR8Eb5hE8FjorHLI
-1PewSI7OZpJ/RDbbm+e0+tlR2czTerjp4sYphYZcAm/wmcBmLSi0LMOuTLPuDJ0Z
-0S3wD1WbmvNJZe+80EoCLEt26WshDyBqTy5MOTE/lhcWOA7LBbM=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Target.key
deleted file mode 100644
index 341337a..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-lacks-basic-constraints/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAtuzvJH4spLtb4bGg1v2gPb7qaRvcZdA1qxrPCgj1uvOWmVWH
-FNX7Q+Cpq/fm0fwJU+OBWxq6tqmTPiHJZRFUynd05dzTonhyuFk7S4Uf8rg7OB5W
-Vcn6++07C1URdiQjTb2S+yyHzgwqHRZgkV+S1uOmxQJOJCJ2XUUONZ70S/Wh0l4L
-FZA0ZMcTOpcyASUGVTQ0wZUX5pMDblkvaAqm6oNwnzwOsSny6xRpGezvQ2SevxUo
-2ebQs6nantqohjYhpJshyMLc2AT9qRo7FWTr+lChcYWbnxThb5wymC2CZHEcSo+8
-+wuYGO/j2T+a3x65Cau/sNQJBeVHFMG4BVnMLQIDAQABAoIBAHX4HU3ClVXzgpDt
-9hVQYbwQWKpKjnuWqFXdpzIIjzjvCOuALepxCWdABwxhhplbWkSgjvbLKSjN+ahz
-L6efYrhkC56GKHI6DXn4CfZtNypYR9CsN++Bn/xChPaM+QLg0We8X4LeuAJY8/vo
-R4TZRyCQlietkelZ1E3YUA6ioVguTADw08W/CfRPbkgI/gPPpCABpN1QhkhFgg24
-Ea//16/j11CBtXrnM2e/m1m6z2L0oVRHZy71+fIY6XlQuqpQoTgVnGjz3vqTkqaK
-ST9rxPPB3CAjl14q7J9YWCqeGKW0+WslxL5+X20CP3GuVxpvgBYv2+GNn6CXbaWi
-EkvZCF0CgYEA61mQECrCpI9+bZXKRyDLGCb6y0RDy72HxqJsY8fPfsab0PXAwGwh
-gxN5hT2fof0hQyhj/MgPqRWBKrwbEqXNdAJNqbpHIvrjDl7RozQ+hpk3zMm7+Z2o
-P5TB1I+g2xAiayKxbpXv1nXWlYZ51Pbu2Yvr3icznR7PQVvo6Hav6hsCgYEAxvnQ
-arO9X4zuKebsXYApbRhwRXNTwlP3GI5ZO1dX/wVQSascYVPQY6+iepsMd3/XT5cZ
-ejDhuAEvn/wT3nhAJcIxoL6F2pGqL6CN2b0/+oYw+xGtnbTfuqHt53ep9LV+nUm4
-Th1f2ZQE0w0fyat0pbcV66sjGDYl4l3qINMnh1cCgYEA2gIo9RDnJNDXaGOs8J5s
-A394KfqeYoi60UF77iIVD3ait7ouRxDjKixMESS4TrHQsgkkNfCMsS/+aru8yFVW
-L/RCRMsNQlXtJk6nGus2UDB2A/mLavqj8+G0e1Zgxwv3Fg8ZFTtG4/5cPD5JdQEY
-1+RJJYxiv1Te38hnw47N/akCgYBWRG0mNfN+/90qcaI9D5nmYNgcZFoGQN062ky5
-u669NJKQvg057VrGPZnWSm7nSJgTO9Gh9puGaY06cdIzfDNjq4RUywXBs7HzoEqg
-ArtAZPnLgOijHY56nkZFOs6G+EGC9DliNL4f2VsWHfSQPTP/vRdV7Ab1MlTOhiVC
-Qgo7VQKBgECd6EihKCU1642VDAMTM1opuP4kDYQHvsf1o1CU6m3vjYFfqPSkZWRd
-Ah/DyF/pry30Kxrh/9a95pYMdHI9eyik7gPt3MEYz67n8URzCo9h+seP3x3U0LzT
-cuWXbkPNENe0SeZDxD4H6hTW7YvIkQlB8cJrBhTNmmHwlnOAMWBO
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Intermediate.key
deleted file mode 100644
index 4e93deb..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Intermediate.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAnd+ADVPXSaZERzQMyupVmuDeOWHfGrWXTjdbEXhRc/Mtmorp
-s9dE+Sc26RvWep3HfRF+y22SKnNzuXZ7MrO5oqWu6m5f+qq0VYthac4fo4fu8fvQ
-GArKNCpXmhiSdSFSIe4j5FpBkDRPCC4rGzUliKFMSy5rIfVr9mNjo3rTmD1v0LuY
-0IzL1f3POx2dmdFGL0M6hhu6J+PYhdIDVn+Ep9I6VSyEArhtdfkWny98kxZIFrZl
-38UPbNzYfiT58ok3kPPaM0i+CNFN9/P+Ttz9eKHc1UUvv6J401uRkD7YcdSXJFFE
-Xyi77LrHcK/6vfrPh8qkhxWQZm95wpw8y9V0rQIDAQABAoIBAG4Xm+6vVuSPQ/H7
-hChE/emBgra1X6X6mEb9J06pfvPC0zyAPrUhG4I8LHim5wye1qyK9Mbb5CAiXsMo
-soUK/BtGOxJUYi4luJgnGIl2Km4ZrzGkjtsVOyjhljFpjUiNMf9jWDg4EJyFPc/Q
-klLo3wHGqbOL7T3DLcSmTqeEUeZJaTrHYMnvbMbfFYToe9PgwoXYmgxRl4tXta6L
-Oea2MURqmL0TSlkAQ53IA1y+vgk52/PLor6DiYdV2WHy7qhrfkWDVsIcGM1nJBcr
-a/FsuFGPyXfapssZO+imICGfTfW4IBhDr1WJhse+GwdKB3WBPkDT0vkGi3we/gad
-kCfmzSkCgYEAyXqHp4j8ABRKizGiWS5+2BB5C9FEFzpALU0MfHvx/dKxuFG4+K2Y
-dtfmXLsvGZtAEFFveYYvqUrorcsCtTYnBuXIFvs5pZ9qp/cLPD38uI+7qQ68RjyW
-9sIwFltXxGapEE6ONavep7tPihYLjghQN8e0Qiev9T6roAr0DWThxt8CgYEAyJgv
-az1HsTnrqNd+YKj1KbBa+2FZKppLCTxrLuY0FPvvWpHL8HMC1QIYgB+oLlBrabcv
-m1Q0XpOwssAPdIrxnk6Ozo88auna4e09TQu1Lw/zzAPne/4e/uREmvI5uanIIncN
-jGnnouDxVdvDI5zTS29ei0JFkuUdm7BD6fUrMfMCgYAnRuO7HVFDErGVgQ+NIytH
-I671Rs5nWMu6CRMuEVuTh8dtj0Dn+a+HO3+FBFiiPUm35Kg+oJIaBqhlePYGLZBe
-H91p3X/XccRxCg/+pnbl499Jjb3WU2l6oVCOizAI8Zpzu1ytyduWB0XyPWnzPlul
-BCF35BTBUn5SrM/27Hu3MQKBgG28++wSCT+GbUrgIS4mIIEfDpcJaatp33T9DbIJ
-lCKKtSX6LvSrJrh7PgYRy4MS0cByy+ORDFlVOMyBT7M1M/ukBHIyYB4pM2p3zBpz
-Njq54mkRFbl6i2BsZq/RpgzROkDImqvfYC52GvEamcXIzLsvASz0I3W6TBlZM74x
-NuFLAoGAJ0UAI7UeK/sZ4plQQKDRk8tE0fuYjFaxnYfr2xDvgdvYbyjlJ97Lv5Cp
-nwOGJW3L4uwqqQLgS2PUcwwjE+2z2dc0VrDs4vh9XnoP8cmJqyRsVgXkjIMsFk/f
-NmLMLaZiZKIsaUWGUN2kBe4g5SIWR5jSmp23K4NspiGwoDa65Ug=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Root.key
deleted file mode 100644
index 8a5f3d1..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA3ybJprBxmfnWoDhcNVJQiQo2rOP2jgocAKQlXfUl6SY2pIuu
-rKWd25Ujm7K2La5wZn90XTEX8i08rLIVaXDXU3peKpGydwNtKCaj00HGnywhAojj
-aAO0J64W6xRZLA2PRIMi2dX244BiCy87q/TTdlUuOdhKYh76sW9rbzsZW/4sBNJe
-ZH04Z13lcU+flPkjxXKxxw38X7Vejpd/AJTCKMdOHxViuuD7t4ZZIn74coPtG1ky
-TETrVHiFXG2HCkq5sp9galCdzm5Mj2RE3qv128RJx3IwjLyfzTKOppzTE+kgNNk8
-cZ9k7fBHKSBT8NFFvbCnhxJ0ts6MxT92khdzrQIDAQABAoIBAGiFuYRLNxrBLGel
-noMXSEO4Nf3rVSwYzh76w8nrrtMzI/sUtj+F35fflmsyXSSuhVVtM6sG+MllqPrW
-+zKFOUaPlZXo4qfeQf3Bg5DLSWZ6/Ac86Q9qVLMVVwTLZi09OLMFnYhdMSREmSfV
-+uRDa90MbveHOOgWzKPZpX/XNbyhRDgHJaRoYmer38Eyiw8/sE/7iYquLw1nhyw6
-qnGpCcV0qcBm1cshIyFcIRJcK5mrDC+LcYummN6ObELpouU8fDXO9RQCjGlnHhtR
-zI8CP2UNqTUCjTyDGjxcHbPLV1PujUSFV8Uh984qBp7owfeR+kZYhRDyQI5u8kcL
-oy2xvsECgYEA88CJ/nT1k3VWRxkMOAlv21UnbOydRSAn8nc9aOI365G6EeF+N7Ug
-wr/KHTPVEXQN4Nb4JF6sFF9Fr6xpXxUop3uqh8ZJ8zLcJc6DYS84NBNvpUBNoe68
-HJWh5kl6NxzFs6FkWztq/PmtJeyZ11kT2kLq2w4V2l+si9E8d/c6Ap0CgYEA6l1B
-ttRVkzcLt9JTw7uEFS2SADmfRySLRi54djzjy0TlGF8cV1S4CguMRyc8wzoVbUKB
-fHwvmSTBuf9Tk1KEOWiCQMkfo9P5sxz7Rt6bEx/P9TUs0/GNq5wv/jy4CWlmYYRh
-wTEvvIZSr1fmqOPMHY9qMYCwmaJVvq/cg409IFECgYEA2qDRpPgG5HIUJsUinoho
-WdQw/pPkJAJJkkK9Q/vTqGkW+b7FVPYTIlqf0D2TWIo9gHOQMh7wPX2OpZkBEhWK
-V16mgA2seoQdzZNDZ8HQqXTdaN0aRKo683CKvGEfS5t1AD88IlBTEABp+2ASRINT
-OStYN46Urz+tJeNQV1HaKEkCgYA2zK987JFF5u0agleLwODVgt5MpyyTGfxm4J7S
-JtKsyOM4m6So1uphjumyCX6vt3kjHxXf4bnPeUTDFOyZ2gWI1uL9+wkm6X3NX81x
-eMOR6TJbB5//vs99fPvL2q69pKOH0ch5v+KFlnLnBQquGvWzQ8F06b5hbg/WkpBh
-Qjk0wQKBgC8/UWyYPc19IdrgG4lqosqnPx5zycm+TwY+MyJPGYJYV69VjON6QSpl
-UUmSw/Q+oVBmgrE5GfbJi4Sn1h/fXnkYuzpWN/dht8rloxiqsPlvrBB8SVCFsegl
-l3cGoZz4sP3d2f3KuOpHwDfOPKHLjp0Y9yn5wokTP7awrJOXYTuP
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Target.key
deleted file mode 100644
index c44412a..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/expired-constrained-root/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEA2ajR6+5WHtU8obm/G/fQH0mtr620r+Bk8/kZa5XJq7ElZXSR
-3IS8Aw1zld0Nahu4jHWjA2/IAf8jsOkmA2wkKtTla2oAB/2z1Eyrw0IVWkpoZliL
-YN/SIvbgTu4cydA9j788kNivVJ7rG3ZV3PYqqYCXhJNhViz0uNOsp9tHN8mLT9K8
-eRhSv+fKP0dvuRHaqlMz7gW5jy9Ow6W25IeNIeQ5P6ILtIfixLAQ1wzdvc8vHyuk
-r4laaQBNbHR0TG9nzKJY0wnWqJOYkxHLqWoV8rzq1xqzrk9FqFgvpw3WvzJlvqkn
-vgDBLIW/F+O3lWGlzLrHUMpeJQM8+TNT9r0YaQIDAQABAoIBAAdmSdyveZYKwcjt
-u6WDwzuNEa6LRT1Fb6krqsWRjg2cNB1C3UKV8J5Z8rgBj9cvohKEXUpcnnwS5G+7
-PWOYZZJfMn14WQ/sfBSXlq9Iq9kp9mqkT/i3Izm1EuMcDTZ/MdiVM8Xo1+0UigGh
-AEJGzCR/DqefKwv280rlR1VdiwpGa7U4rnwAFeEJbXJiM/2XRso6btR1OVEWPXJq
-yhrlvomC+ODXlAR1XHeiqV5wLvOPjxCJSy5OUZvdwqBjRVyo4VKFBd2bN3AOufzm
-0tAL4zbNVMz95B0LlHxQ7iFIobmKLIknc22SKvERCMaLXrDVxzGun9RZ5mRRItTZ
-45eqdgECgYEA+0PbnY6ccEjjYdMbG4qGIzq6UBWKI5sIlV2AMXh4eojSQhMvGArN
-tKorssDIKyMoJrJ2whDmJZoLS7GWqcZmMkOY5P5H6kWbbZdR8NtuwhX2Q0LSaQvi
-2uuU3a3cRlq5UUx/CPfTW0BOeSNG0x1aS95L8E0SEzhXrbf7p6XehhkCgYEA3cLX
-5sQKmxjgu6H8t3rspkH0sH9QLdFFr6v6t8jqmVkC+8qALnz8t2k1qOBQ8oTDOg0R
-TF/1fEF4oIGoRp/50H28p3bfrYEN/nHGUm6IguSG0K1AWex0g5FlvURAYqRepNbR
-zyUh2V8es9l6vWD+nY4qpQkJU9yjYnHaUoOmTtECgYA8rgeUhkNLbp7TGhtazFpW
-mbEy8/C3ZpJtF/aEe/aEiRRV9rIR2VISRmJlOd9dY5Env0Ok3FXoUMpXjly3RX2a
-t+5tpucRMZw2nCuiwit+XbVqSvHrgn5Xpjr+SiV/LBvDAXlQXiFB0UbiRF2vUFBl
-MBsgvkwWLi4met8gfpM9yQKBgQChYoDY8eZ+BNbX9gUCSjUasXkvURe6oEfElrX5
-NgB05PBk6XPrYQ5RNAHXCpgeRjwFbSkfmd3/NW5h8LnT2+xjrH20qbASho72kzov
-Fz3FdCYgi1T/nDMW5KNT3+2zW8d80tERnQZLOQwQ+r52P7ZMVv/15uOg4jsNE6o8
-zo4jYQKBgAcx/PAlX1VRDTKgTpmElwGxPkXLQM8wj87nbIUZk5+kAAYzgsS+JNXj
-bO0cpmrrsfrsX98XAIfezuaMM+4pExTqZnZAi48ay/a8j3+dpL5wcStJ0TeP5Lai
-Cm+iZm8BYARqrgwaWMWAU4D6JL86S/SQdjjBehUMLSENnKVVRXk/
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Intermediate.key
deleted file mode 100644
index 9c4c551..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Intermediate.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAwDDX9okNa21TOtIheSJBRzwa1dyp6hefoIS7s0HwrH1IgURx
-QbmqMq1JEEQxAC2EAeEt5Xf9/sO8vaM9lcSUaPiPBUHTb5S51S6Eb7KK4fIgrlYb
-fPBYPMaCrIWmGdOgGzp+/9jWWqN1VqkgJlJIDr4lKsj1OSKPxzviYItMMjSzyQ+I
-uAQAYyXI+CVDebt6p0pSNvLdOsklXslVby+sf+qIhlN+3N5JOm7HM8SucxqFr03M
-sBlAVIxplmyKfg6OF0crg0V21fAjSOkJSZn9U26BMF8ZCfWjsLAoJEAAbOjJzHyd
-9jKfyEQZsUiP849mPvpbf9/Fr7KPDX6OgxAijwIDAQABAoIBAHR6ZbjF0TtFU8b3
-aVAH4bYxiDYK+XOlg5n+N9/pW9q+Rz4I4/codi0mdnyER4pLC5E0DuPeuDI6IN5x
-27Y0IJoJ4mwWO/WJFqNMAPnNJHzRiNr/1sL+ywtyZ+n1SfinGIbICgY3PZpLLKcr
-8w8mmQNOXCo1BuHsv2TJN2a5paFa3o6/UD4bBmD7kI/jaC22qp5b23AJwVsuL4Zb
-JoI1z9P6LsfFok/pJz+n6yfE3Qq2xCzYZ7wb2jCMyOwiSqkCY+L7JpFa49Xr3N3f
-fLhtcQsaoFDeDEmn/om0JAvS8i2kWlMYisgiG3MwD6mV/aKxgKm3QAet1YzhtUOc
-sF6huhECgYEA+10NDzV+nYD0AOPcBtmWumGefIUpAliOWnutkUTInATqJvv3k4f/
-TldjICZiotJSEsr7EZEKIdnbKHwA7OmlQn8EW0CPGpYKSNJMMmr3eBYamJtTeR1V
-v6UvmRsoR473VRo29xHQDKr63A+zVl4ldbP2iZaKoVJVKgG+nbMzJ6kCgYEAw7xg
-bXKyN2xKlf8barpU68IeusXytYb8n475US+dYOSjuARdkZclEkcto8RnKgh9H6C6
-UNKOZ6mtu228ss78VQPvgTgJODjCKSlw6TNZvMMaBVGKqqUMRfn3dnxVk9QfpJad
-wnk7p4FfHExpKeDoDvuQHAn/hYDZ0eKfbKL2+3cCgYBC9YyvCn8KEfnt6sUIBhqC
-19JSNV6xQ0nYjK21zu7psN13ORPAdy/pfJnpTJBl80TtwKiVC1/5mIErDa1pbuwZ
-BKDydgYo/OMMdwjZPWli0fCPyoC3+LqI7MX7MSLPvSPhxbPyqQoU9c8RpBUP4tBz
-xFbeW/3d74LER+axN7Ve0QKBgDWTEAmlBSaqW1fm9Ygm7CuDfIm+uIn7IpZBufgA
-wmDM9ArgFwRMjHcOSG20yk/09tp7UcPhfdzd0pGknauLgAF9DEcgIVXkIzDFCQSr
-a3qBJFQkV4IRnuRgYN1rdrj5rJeOKiwaprtYa8IBIB+4UYwYSv+BtRDDjdsm3mAL
-0vJNAoGAC5IALDVBNvxFXaL2q3YevF0bi07IlXHjsjNpvuTr1+uvR7wzhWuLw/12
-qia7JJuy+eg5FDttar4/JCenBt6oEnidjbuRud1sGaAUijGVnIL07Pkuz0DzHbFl
-meETYwGfUa2sqtb5IpxFugtQznXKqhRepTiqFVb+Knxr4X0HbtE=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Root.key
deleted file mode 100644
index 42f635e..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEA6o0lzyK61UbGj+/5r0URyfGuWYVdCVg6r0n0PzYb/Ikg9zWR
-uH4+dconpJKbP6jkNoRLOVVNk6YhDsbHCap7cAOJWrXSUgdo4va+5WuK+nUuq7RD
-DvMnxHnuYGKYsD7/BeC1dCsATmwAf86mvfigLRuLxE7uR9J4u/a7rgnXcW7/R3Pq
-KwB6S3Gknm9emCVA7HCB7grkxk1wQXRpEdHYdaZ/QonPnyWqaN33GWt2vnyomfw1
-9grL/zF6SJOhC1EdcJe7fMcwCQyPVm7940iK8ufc9wqr7X33DBdN7Hty/nxjSVxk
-BtXgCY0mnSeW8ExBIlD35bvnuQlcdG4AzaVUwwIDAQABAoIBAQCW1G2b5hl/TSQj
-K47ExwXJd0FHEBvkBni2gDgw7frRSt2IG0q5+XTxCi60BhMPvOwEos488D4S1KIt
-fmZAMQFv5tZNHt9BIMKyMTpRDfcxWGnKwQDefD72efJwyPanX9tfTEFjksN/qrQn
-fBx9zYQzfaNDef6A8Tfyp5fJM0r4Bc24iytjU83nqaupkiOvOlrxJnFgzHZM0lH8
-8Wc9PoJcBUeNu/LSxTRN1edEPMbngWwf8Kvb1DkCL9l1PgI6qyHrHQTcvfrc9hi9
-BF8X1lTTWm38FlxjJhwG/sPwol0zI9iXPW2ENsoOGYVOa6RTNUQRzpw+LttQzS64
-cNk7/9oBAoGBAPc61A6NSqLuFQmdIr6ZymR1KrD1aDM3aRbTHwFJ92J50VPlcW2u
-9RVhC5+1fPQUisMg6zsy70sHjYrm5HaqZ1NHKyIVl8KV+wde17LeQ6p1Cb3qGnRA
-4ccr0f2FQau4m3ZxMrX8S8Rxlc6DkrTQagUUW9zW6Yf/WzhXYLZeLFypAoGBAPLf
-LrRDU/Z+Q2m1ssn4utLfEFia9PiMUAsycZC0xOMQlceH1nvlWlTE5Hwp+0WaJkKS
-vn2BNjOpcgFtl+RAXtPwq97VxViucjN9V8EIMYH2rhncH02twt+2HyYhBAuQg77O
-T1xkH4APGaG43wXlzX0hFnQzfg1PTVeXIDuVnP2LAoGAMeHNvW3mnD8bQYhR5VEU
-U/aL+Y5aStMoQfGw9MqevmDDyoClxTKiwoCFHuE4Z+rpIHu42oXpYCMS/O6fNA4n
-sNbQLh1bNGiccJ1DOhS8ZF0e7RGZ6tDYfR4rTVKgsGwb+ebXC37vLqCYUEWdyRuv
-+HxmGIXIMqdkGVcP7VvM6ZkCgYEA4LaJAvaskAuhGgSoqOD/Eq6a9DBjajiAsut4
-Ufg/lwu4WYYgeD/sBTSrZwp815hZwA0APSU5XjFwL0wUVncMhjJPA31s+7FkLqnR
-cOPA0svHqFuXhwq3nL9oMKIpmP2cOAWxPf3Re239PDnN+Cn4p8befKNMBMqT9+/3
-PcofGCMCgYEA78gV4dbFktqMYomIC8zbApZ7zcQUfil3cDcmKJ7S1ExflDacfYVn
-n4AQ+9S91hUdrO8/Dubd0oqXOGce0/CNjGDj8LMn2DzaUK+npNnhv9ST2hgc5Rja
-fBk8Mv0xLtKBjmzwhX+TGm83ymN7037tJ/QrF2X6cykZe++ca3CvcLc=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Target.key
deleted file mode 100644
index 7a8852e..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAk7PRw1pl5D2fa+h0j/ZJz4frDjQxDES1dIJO0MLByzaY0oKy
-oDYnAfoeRqys/BVBclTIr+4VMb1EatrsTKi5xEfKcpN7EQIiQ7wcfCa3k9eIr3XL
-Qz+UEyyNt8msDih4ZRyHadPw8L3EOX48d8+MgqQsgd4cl8Y9j7IXhk2FYgG7/bPC
-4jthNs3MTU1ZAzm5XL4NVfFJzzOiFCJBaghotT/WnkkWiBRyavTtdPnVedK2Cirn
-QmcxGhexe0cA2fq8Nb+MzTYWN8w7m5pdh4bAaKaToi8bAYnxOWfIOAXGjkqmUjH+
-9lyWYcY2xchdUzk+PVr1ChQO+K4gTkva6e3tnQIDAQABAoIBAEocjEAtd7rSgM+w
-T+x8dATB+luiLIovX60aRVnSn1LMDlpyYhaplWEUk2R6+EF0mOY5TImaOOBAS7gi
-KTc94hhuvVJIVhPusiqylMhm1O5F07vWqysPF8mXLXTuqHpiLCbv7bJYOilRzsfa
-Y5Tqe2KB5iMzw70UJ4eWoN8uvqKx4PDo/livaKHJrncjLoYRkCgfzGgFffu5I2Mu
-3VpBd5BPjIHrwd9HotI9xKLumXLf9TdH/LlWJqa3LfVZ6cScfOx0RvEGhoXXt0UA
-8o88XRffd4q1mPwOGK1jzpmO7PkvfJzzlqeglySAS9jNz31RilcDDzG36PB2tGJU
-8qjVrzECgYEAw8dUfINMQ9nRd58nicp+eD+An/IupLuRneNPwBPbo6WZ8TY/tM/C
-Y/z4TkE5L2O197pWM/fEaly0/ZRYGoLM0/eH3707Dlew1jv/oAiXQqrPtId1vyY9
-UaLRrHPAL/Mz6fYpFmJgWZPxhM/AoBaJF6HPnerXkKVvWusxQXeGM+MCgYEAwSK1
-OfbR9ScImQ6LKA26DcBppEJlFdr/GZzELUAjGi7zTZ6nWvhdAE8Hf5cAO7OTOsCU
-Hc90qI8BEwepfv/ImPwpI3IXL0Osr3sBeURmsQ7cU1UKOy2b3k7GOC/JGlt3eRge
-DjN1OZ6IridHyppRPU3e7vQVZHHzp8PgPFs0EH8CgYAoohxU42NWycSB0VSBcreg
-+X0WtUsdAZkNbfpFYVm6s0oqGBpMyroLyps2kq7tuQIxckkl7AymDqu53aoThoZA
-kCVxOHMjXOvk6vr5Gg9a1NzbGSpFDAi6AtMFudhvm0hxDJgmfzCEJwJ/kCbokwTN
-FNZkbjNjYBKmih3k+ouuBQKBgHKbkANHjiv178ozsSwhiSij54yLwcSIYhzmxBs+
-FhZxifujjBgVjcqjGwYBqyfCVjnlEX/nHYjw42hRgalVS8pMyHS6PTvU4uJ3EdbO
-WknzUZc5vYqEdBwljsbExIeZg3oeb6dprcR1aRI/SQDXNiI01Xfi69bhL/974tKu
-JGUtAoGATD4oHACxjYFT0+94EyhnYpzZtC9HiwxEuTv9ItP41lxLXjqIxHaUbhLz
-651CePaErkGLA9OVoiur6jWIgzyT+vH3wxL9XcQHUkoJt4uaz3DtQ14Z4rAleZMa
-l+YsqR08BM+xNM3dqGSQ32urELX01JDKMCJv+B9qhlpm5x+tPLY=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/UberRoot.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/UberRoot.key
deleted file mode 100644
index f40c45c..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-non-self-signed-root/UberRoot.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA5QJWQBElpg0n0D+XxUiP/7Aa5ZPPgF6slNRodbQS+BS4KtBK
-PGkKOEsAXV99D05e9Af9e0qUtee1G5EUaQfa0IfEaCj3Q179qsbhnVWvwVrwq+3I
-ibCCcSehtBh9z51hmKRJh8ytefzcmFFgrF58+CLJeSldup0gJx9fNgKgHFPE+4RZ
-dWS5WMOIkP2mBKh078dTCkY/ehHLOuM/YMtvkc3n4CvKj+pL2KNi+7V4oBt7zdp3
-smVAXE5Mf92cyuj8+XVr9ird33kNM+V1BbiVd8VU+uKtEI2Id7zkJGcZilsLheMU
-CExNP/sDenCvYlI7Mq1gzFK6sPQm0hPjz8u2NwIDAQABAoIBAF7hzfxzXkbjMnis
-sGQTwV2tiCdQS2ujThvHuZPyzN0uMHPEos1Os+ZI5NjK5FTAIsU2vkYjy2NmofnO
-7Ubq8zTs22pQdsnaBH2KMxXt14jj9c02Ep1BnXnmcq/cadvoF/SXNMPoAIQHSRpu
-tQAVke948kKZ6fSUfyrWa6tEATRalA0EOV63X9EJ0jnnoIH4KVjNS8DQXZ7xHnyx
-y8nGl6lnibAH1PelgCHFieBYr8DX0BPnkqMrcyQ9fdWdZORgkZKnx5rqO6v2t5OY
-5hDLk6Mvi8fb0NKS+3iCbfwNLdqX8EQwnrBjzwgK/RvxecLLnCu+7IfdZqoT4EUQ
-OEzTnHECgYEA+S6Mia3PmtcIaCD2oeYMrBU0DZ2s4yaODRydl53aIoAamt0+0bHf
-rtfQY9l4g5/C32cawAo3n1pkCY5yHaYJgtfNE9rfXTq0/fIZWtDvXTBiG29827Ih
-DXkvwiWnlZtXv9EaM3Kx/yDYu1Rkb6KecJxZzHTARhRcbHm1jGwvXX8CgYEA60Z7
-z2mYvAlIEtq3d7rtxwQD09fod6VVb/rzsVNZOO5L0U9aoT93cYS5zuQ3DduvPJYx
-tPjtwDxyqni12dgWJp2a3A4dtHVWzVyDDCuzY8qkrLa+B508PJXc9JqaDJYF/lQ0
-ajI58kszUR/xP/aPiAf9f6sYi7cgqGA6Fkm2c0kCgYBv8HJf8z39IDZ9mLlS96af
-s5LDvx6ImKxdxYoiL15r+0J4aYWr7A1BXWAXSv2xm5aOh6HjvXNJWfDwvhYTraA+
-MDXHgp6vIg1mu1iajJvLME4SZx4fD8F7bQKAZCwJsFRWLlhn3lGJ/DaAySOpZtNo
-YUSR7azmjoUKkg51u6/3fwKBgQCFYaYbRkBCifiER96vUBgxNYN9++9ctSykmV7C
-bwAsGFx/Qz+cHsD2aEp2kkbr4lmMPZHciSswSpSvNFPUNn8IUV1T1+TbQ5J8RjA9
-HCFNN7r393nwEyHtLwDe4y7mZ77qGo7EjcjwJdXn7fX1TzC769u5HySBQMaQ7kzA
-CfYXkQKBgQCVcXPYGsjmF/glLLiYgK7KKoFv0OHeINO0dbxcYJs5fg9b+j9bRDDY
-ICqqqXwgih3r39PJTNvcMGSdR3GM4/zW6Su6mMkGA8BqqWqjVswQlk0T3ER8dX1G
-XhSYaA1zycKtxFJ71lbKctj9jfYnqKeRrAbwtISYXHEUWA5gKlEJeA==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Intermediate.key
deleted file mode 100644
index 530c397..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Intermediate.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEAw+movQZgaYU6p/ADwCqvKWyeQ3An3r9ZTKGKsCVUk9RdUDf2
-l4jBFJXMrtlPt7K0eUNnLpQCE4edlo2LEQQn2Xdt0Ub6wDmpHTielgb72UNJ3u2S
-eqJ0SMYGjlIiU1cFsTqJjdYzoUYQh/09ct590xKr+BomBkHeCbu2UFi2SGlK18mw
-I7UNv+URDAPtQjd5kYbNxpU+i06OhXlEIg+rizecRlXRPE6AvDU3t8fu97RJDDNn
-jZ9hcgIjKnRf9ZzYSwK/R8fZshNrDnk9zY7YkL6WXhtPraVlhTlfw9mZQwmKzwpP
-pYdk8wh8sExZ5yLdXZfRpmiw7vx9vOxQFf21AQIDAQABAoIBAEFCqZHl+OHNnp9o
-pWczEMxEwWeHidB6fz22piNNHCJuYHMjYUJTLLY1vEwWWabAobuvR0TNyu9Egqsv
-FT8i2j9nuC45bbfwvTPds34Yb3aNIqNfEidFzGSdinuIQqTuXRgPfti/nM1BMKqM
-IhcMpG9WTfDEjRwSfutRG0cidf4id4OZ9d43wjGn8g2XB2QKcmha6X8A7rKDGA1k
-JKUen7Wgg2noGKOuUbGuJS8JlGQLBHNNlYAgdSG9XbRskyBdWlz2yG1oW3MA/CTb
-MOzL3alf9VDbSuAxeJDXKIz1TYh3FvjiDXUV7kmFOXtBJtx9LbLZVmKvwVthFPM6
-xagZAc0CgYEA6+WKWCFPJvLK6pkbCigxFJItrUZSu/zqIuxcEKNQFnrlpW6DB1ZW
-iB1BchuenD+WGutzK7luWKohIxdxvw0CwwdRTq27Bs19B8FikXZ9FxT77slkwCFb
-b8MKdBLqJCV31irue3sMCHfTW83oOf7i7FVOoO9z48JgO1BlfY5gANMCgYEA1JvO
-ZqFRtyzb0Nns8ddKrB7jdy8SlmdkfurnWld8LkFMhc6TtKoSCN+vIHzgxz/Sv/pJ
-q4DRJ+aDpw+wO2q8gNzQuK6V61mcvezJfghUKENNT8yGHDZ1gMuaVI8zOwaB9q9I
-oauV4dFAC7Zl1djjPeYdV6VsbyNpZeSM0OC6rlsCgYEAr06mwVf/urI0mqOttJ6p
-2t/Hkj3wvkP2vH1q7fJwUkSC5a57Mbi4Fe+n82UTOosGwnq33IaxurK0bZ++qHzC
-0K1ff1kc5LFRebH9zpx/2ed+UrbYaPBhQ21vF1P3LWWq6T5+fMW065YhPNiI/JCv
-k3LSPEe3mEubuHjG88gbEIECgYEAjEc0+wBLc0m0y2tObA755PEIcjXr1LLpWthQ
-x4nblIVfIRY43MYt2g8EdLIQeUbCHgrdGryGxAXTLaIrTDjToU6QpJoEruFUive1
-xmNma55kX1d50RmZk95CuLI3QiW8EHB8wrb80J8I2/F/5YYSAWBYUeEC152MyD7x
-Lkxov+sCgYBLtXAvc+tgmnIIAJX/m2/stoPkQp0ft1xvrroOr4QOt0SlpIxPE6oI
-qS5yhAys4f3Bczo7Akrswqrp6J+JqzNZebLDOOgX+ZpD/YlwGXpPCW/0AVeJTLO1
-4x2gQwtB84ZaJpAIT3lYWf2OW/HQDrsFiu8RMO2fYo1yTAn05Cc83w==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Root.key
deleted file mode 100644
index d845fb7..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAy+WtE+2zr4c31AYN+nl5TNHoa31l51KOhych1CJARwjUdIZ7
-Zz6RtP/XeQrmHth/Hx9dtQLjKq+hk4mDrnF8ZAZk/P8IkrCrFiGHXzoFjNZkQl4T
-wPxuONHRZSulahC6uvDwD/U6I8XP7jmhUTWEHR8jIOVkMSy11KxwR6h970X1BFOn
-4H3M6rRYE7uc9gtbrJuoYfOsoo6UgiiKqxZXzZ51HGtsjzNHKOL8kYLXgd+cJzvd
-bpexZ5oqzN1Ux7fo1lfBQY8Y42h/YjM23CZT9RXFl4JUcbZE3VJ7yq/eL2ZwoqqO
-8YtXRnZRHTjvT7JMRcrwRNr4fQeQZELlGDOdsQIDAQABAoIBAQCWvItByl8miu6I
-/pji7V7xndUXcjMd2nioDhQCQfgHC84U/z7HywfpKaLgR2BsuVzxYzzhjurmKcVn
-zyfclOWDBP8v0lNCLv2sdMkha0GjJvQj5GzyJSxPMT5+bs/xI8EIZwryoTaEL79S
-vKQ35zpuVRChRzTU7drXCUxQjY3cjyddwkXlBNUwfHFJkfkjyCZEDepNl8xojWJz
-4gwDl6TMvAck0gUhOyDdE4pITakdOhlvI26/SGn/mmLWXkOQu5UNAMlxvEcqDgZz
-awxO6fYS+1Y0MarUwQwZvHk2IcOGGvplonWj6o7Z8qL7HmSPd/oQAS6uRgA+IIyU
-gVAoiePhAoGBAOxYrve9Hn3PfR9ZhB9La7kDXIMPPGzxGxk7Pw4T9R5TdwJl6xfh
-FIxTIaQhlzF6FdXi9UEvKwCReMUKOVKDGE+fGSF28SOZpHc+JSClqPd4WyLXMAlp
-zZkpMYonJY9BoQ2RlXqe1XiC7MPXKFTiU0yhkXQ5C5w1PydFFSEda53lAoGBANza
-N3Pf+plF9q0Ix7loCnk5eOVUDq9hVtk/eEbNnjyywqT6fK9q4IdJANl6msnUKLiI
-aT2vZIabtfRVlnuRdwUjuiV9bBW9Tji5F6xLRlShaYtYtPUSZH9OFb9whnwTAjNq
-CSxtAGY82yOsSdwzX4+oI3f4THJFWR6apq/hfiPdAoGAGXxaqbZIAnMMYAQMHj/I
-xvOY1z0eW/UH4gmkfAUk6nc/nw+UcUfBKnyQZR2GKzyp/B10KupGLdKB/mVi1wXx
-6iwSzqv/xsH7nSwjXsjeVokw8qnXsTwqgniRsf8UqsT98/Od9dII3OzpURjzbWvW
-Za4KfEjmepq3S6nEZITCpQ0CgYAxopV95GPE2NWEtAl3IOvhrMn/+HFIdz72mm4k
-s4eRqrdWLrmhDwshPIYFWqm5HIZ+WqIUa/vSyOIO5MFqShoOvKXUUSjeheozk12/
-qjdHQ/OdjrU0swqFFf6LRPXkor0G4xjmtCS31YuGq+z5oU4j0i0OhG5h7DYIS8eU
-lcAsvQKBgG7UqIjSbLDszMn5WhjCbfO7jMqFjMRuQ/AUNhO091yhQ3fRMqbWU5SA
-naMx5rVErXd3MFCBsQVOM5yOVgedLh5fDT3SDFKepHK+KJxMM4oTxDyu8tWQOA0Q
-4JaUcXYAKtW3dO26saf+K3fKUERdVP0KHyYA6P7Zprbo5//jBpjz
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Target.key
deleted file mode 100644
index ac916f1..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-basic-constraints-ca-false/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEAvIslgviTva6Jz1lZCloF+Vl271qKGmWPN5mLIV3fRyLB1JSI
-FbYUusHsuKza9w+7z2H69cvO56cnFZcZOii25lF/CSDwNqPMz47njYfCPdJm5wEK
-3N/+61pOjgfeKyaV049j4lu6DPylHNJD7n2QBluHI62nT47uDirjlCSs1fe8qypm
-duR4CjoVRMYaR5s7VLa3dtmAX9AHuEhAANBuPs2kpQg6mwTJaMXVOw2iJAqJzgkM
-kH0cTCR8mfA433aDb5FfVCrZidPMbjzBkJuVXDJ3/Wpc+53JW7PgnZOfhnhraa3O
-kj2rSObYfPyyVUNQ0S9uoF7V5JkZ7AVb1fIr+wIDAQABAoIBAQC0BawQbKYsM23T
-9DynPKN9nOWJzooUgCoJ7WpBtq7M7ivifNue11bdpvIOtsTvpy8s6SHE9Q+eciRI
-YhgtRtiz+tZv8epKUYXqHEmNAjX971pfcMhdcuak83oT9QE1dEcUVFILvIddhRFl
-/oHsQil1WIklENayiQdVsa/QMGByftAz86VPMOGyx1x27HJ6ubXDKZ110ylqI3Tv
-ZH3Fx0K//m4obwHg0towhtlnGpa2NZSml5vjgcstlRiiqOe2ao3tfDslyIw9vq5h
-73i6chm4AKWyggyOnIAqu4/6u1+kda2Hj/Yqm1XwJ61IKVqyzgEvAOx7Pjl3Zzt0
-ds767yQhAoGBANwDsJBkUckHhxBOpG6DoHVX1QhgLJHppfygSoqSvATIYIosu8i7
-ryp9DfJBvUCHtbMuaasMZODRCRvEqt93GbDwQnJeLF7BxFir3TXiKVCcO0iVhfMs
-Gejce6bV/wZgGi29hL+fk9INRF7eRH4UUfoG/4DrAaXzTiMP1Q2Lw/0xAoGBANth
-uj/XFnZTZmA6ekc6+fL3PhUwKRQo5XXB2wDZIIgduPB3nV6RNkuVbcoAhtBizi01
-8+agmTztds4YR982shZdPseTk3CyHKp3hv5JFhEk+R0B72OzLQlIv3QrqMxrjBLN
-DP2TJpu1iM07/7mihk7WMKaTczgPkGUQJPvkZMDrAoGAcmdAwnRHyr6tTp92BTlQ
-kHPRhH9t7ZmPBCPdXt0aA2qmOHM2WhSt6uwH+naQkCOBKeDydU0Gj5hiohvLtlNZ
-+pWUF6A8djFPhcQoTMKDNTVn5kBJ3L6L4nfznDceWxRRyIMJqhKybMEVUjdFakHq
-tpY4+bI5sy8m7DhpUpfgm6ECgYEAvie5bria6blklahacP93w9f24hq6oJTKQAXm
-NJf/kLxin1yu9Vdc/qrpXRyTvnDGUX3giVlPOfaC8iUttxcLykLMteT++cIJAuFU
-C3mCPR4VJ8WToJGgSdnayXFGgNn/shQ2XF1+K51wlKSbBmcPj6osxVYtmrwy5sbV
-p9jSVD0CgYEAu21oKJOOb/fGteEoQUOclQEZbHgXQ6bI/ZopVPTWrnr1i/hWJCFe
-VMNVoTj3Kbe3WuKXaate4I28EReRoWwU6L2sjkwNLHh05+SBFSso6SYwq6xzNvOO
-BLeOp0TsTOX3PffZJqUJCeIELtrqVuh2pCmbgtey/WHPImeBC7mDDk0=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Intermediate1.key b/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Intermediate1.key
deleted file mode 100644
index dcbff70..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Intermediate1.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAp1qVH9Rd3CQFjbyGBu0n/k8bSzhCGRVTH4ybi5Bo5Ux94y6p
-mlUpS1Fewk1WthxFyqz/VoJ3ke5DFQt2g5a8Afx9F7Cgt0mT/jOsl1HRhWUikOIg
-1vM+fcr23rWRdJBet1UYT3DNrW/dQu1pgsYvHzKgd10xHClPdtDEB8B2lIzNl4D9
-ff1mNdiAbDqDluMZwpIKBZ0VGu9QKD/Vps0gAYb4w3WctsuL2DMEKthBlkEVdrQF
-oqsVojbY6SLX39O3OvkBhA4V9Q1mDAKv4boDcz8C49u1GQXH6qs8rxSofVCBabr5
-64ztsXaYNkFXo4/rqIQTD7qWDscFDTFnK53iawIDAQABAoIBABIRsbAyGcA/E2pu
-RHpS+NJ4cBX7CQf0SXlKkTDMcsbvL1hsHVvQfhjnvDd2ajpXayGq9Ba/F3HmK9AF
-4NHsYHhGbqs0IuYnR5dWtPfRmbGxbb3+7FTJBqJGW8lICWBwhgl9YpaRM2PahCVJ
-xO6dv1C7AqBgq4DC5RWLDN9ZZHQ9YurKcaiSJEpzQZjI7qYqPdXg80rCsDjbn518
-nEJs3kLheHb1rTXG2Zwdby3t3Ku4jl7e0Umg0LkcDq3tnk7SXHEAYi8UPCggXn7/
-OEA1hMQbScVw44uJmUjsCpKLo2weNZ2+1RNZxq6Wstrgj/JTYGacgdrmLCyxkox0
-i7FDuUECgYEA1vGyWDwXiHz1WNhZKn8CHIVG1C6AYFsZrb7ampOuJdMlbm7EqrHy
-V3Z3k+GmQD7xNYfmbmImo+Q7kdrpXSiQCJhyB5e6FzVLauO88JK7CHwEf7TmYB1f
-vTuZVRq7C76bTrHcF40fBWdNzUsr9U/fO3Rume48ddCKA9QJnKsW3CkCgYEAx1HS
-03T9R1en0ee5I0rJQYpTaqvqYdgm8mYPD/wSEqWir4HDwIvdbGx5w4URyNhaXPyn
-F07pqM8Hlf9z73wNS9FiiaTldfsSWPSMGxQIfwgDc/ZHWXQniA9m3s2Tt2GY6oHg
-OrXg4cOrauphi+Z0iHrRAZ48UHldA5wsRZawnHMCgYBmUWWhRPG64ij0owBHD3CU
-3QirZntr4tHleE2deaFTliBiYk4yJ0UCR32Cos6+FHhEEC4r64MTT0jgFIIz+2Qd
-A1x8qshF1fPRrRk6t85aqpaFqDpmFHWHogBKl8/kNla97kKj32Sd8OADUr5ZJy1P
-owwnMFYNizi3u87bikH2iQKBgEc7Ian6LC3b0Ji+RDatmmD2yzra92dCNSD5gjaH
-MfpCAXLRYCCmm1oNJjLOkn2BfEGw9RHqXKy8WAyt/0O9xI6s5JcmO+6+7F6n/o4K
-ycKEHZ/KitMYJKyGPJAxTbICigB8q6Kvrw9fuxn5ayTxFgJUSe9XGlz0El6g6F1y
-LemrAoGAPsj8tWQq0i8re4NlOvOLLu7efLe5J/lLzRVa19GNtQe+SZK94FGT6DsA
-OkWOXRXfxsRftgSXfNyKX3wzDmESb3oN6VxqLAfLt71fqPVI0U/1v9Bb7A7SBASE
-52/hv5/9YSMdpqMyttLQX5MsTsIl4+ZaHq6iK/oHDg98A/IUBsE=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Intermediate2.key b/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Intermediate2.key
deleted file mode 100644
index 52fd0c3..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Intermediate2.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAwxLTa4HsGsp9qphYuMHzOpfihpGutm0CLghnbJhe887sOvHe
-k+a1tWgMZGeHDMgMLzNk8npwHTK5hCGrRd6ZHEqXMH4eDvDFDGnqGMxzjOsjKGr1
-K7aVZ/18mTRGZ/j1EBbIBNvrMM4jsf5xp4zdribVMa/syi3XsCT5BqytpCqxuxt9
-z62y0+LXSuCn8j10Xb7tPL4eKt7mie+Kwz06QTT+pVQl9xG+Zf2wal1wE99BkhkE
-/r4UWkyBa6iMFTQ+UTCNGQedAjFcekcqCj107JreeH89iuOZKlJxrNC8QHJi0mzo
-KCNWYvFXuEtgTVpUQjQsiimaBaj7Z5CREfMZpwIDAQABAoIBAA/2k2yBxkNu/Jeg
-PeponLHXyga/FzAAfaQsteHyGhsTfMtaDZ/Gymnc6N6yhh+qoyydpQ4erNwG0Z2Z
-b72Y+KiTBgpG18jbNRTN+gUrfe0zNL5S+lsoZtOKr86Ns5FAkzVM1/Nl17o3tD4V
-l1FhuqZMsTeOsO7ej37vl51PNipv2xHmxD7dHRP/mL1Ad3SsT/FbP5frxDThpzGl
-/iMC6G4L5h+sZEVD0rv6uLLSkIf6MBCCo4vPdslypd+RbswgrKc4e3GeI8ra5wik
-sySwqWegReewktBqoHarOzVd/YMDZ5NoFmQWect/udj+n9C/X2QFgiBeTtEQwZc0
-G/eQq9ECgYEA/5ULNfxSZVFNzDvlpzz8ARWIs9d4S4NFyka6I9qEMQ6efBWjIMyr
-72SGbNrK9pJq27TbV6zi4SHwQMe1iJPBMC0bybexVb9ks+VRra5RwLRJkti13h5R
-JUgRz3i0BHIw7GJHx9BrSvwAnB5hdzkDupjbq5ntXbEug+xPgvvIcW8CgYEAw2R1
-2j6xwLAi7C55tDsRBKY9Vsq9M2GsfKv6FAq1JfvSH0tDbKucRhCfqaOPc1JzG2mw
-nnPwLLuDkgR0Km4kZjdPx27RaeqZx2Rs+bDx8+JQvra5W47fQ18XuyPfev3mEhv1
-HXhgK8RtZhMKkeYG4IdEo5l7JBAkm9tn2uIOz0kCgYEAtVJpLLjBQA4pco7ABCD4
-7E/5txVTy8brGXGKF2uswx0LBR9YpylthZ483DdxLPN9ijfKMW5/W5d3Wo4U1Tt2
-IJawEzEWR65MZHB5vQ1iBKQjWmISzO2XRirWL+oDVPAqk1m6cSEFLaKRUDEhlrLF
-WXmexySiSQkt5fweAOBeOVMCgYBd9kWmelfIretdYMwuG+mHLtp4jm6F8wabvag5
-Uxzh80OMwQjfjXdNSlk9nuYxMwkfuaexy1dIa7RN1851SRo//YFkCqqyIJtrA6RU
-Pv9bpQ3naL+ihAZhw60J1ap23vpw4vjw/x5gbcmeOLHwj4nnF6WudvR81zaDrPM4
-k1VD4QKBgCSYHChmN+5n+FzMYT6pQoyasja28wV0TuFj/acKKhle1iSvjaAin6SQ
-wslGAbplvEgqpwIf9GzXsJC10k7YGu9eETLmRJW8/pd12lrj5YGz1vLqHrh4ewt3
-aKo2zHS0HIYrt/FAKIzKmHijbK8FsU5S4611J0oexF8pvn1sMSaL
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Root.key b/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Root.key
deleted file mode 100644
index 0ca703b..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Root.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEAs2JAM3OcyWStMFJzeAAIrLUqgIuefZ1QV+7fQb5mqlOi1ZBy
-At1zZT5plKJvXASg37JOcFdxugCadT6gYOuLBpTDZReT6BErdiC/fyD0CRS3uMQX
-mom8NVO3kov6+2KdxuQ0c7TSVfgV9za9qyRvKCaJHmNQyOhJSk1dDopjeq/detri
-Z5tLV5s6sibMDEvW9Dv22aTmVqIbeKCqS8YGH3w/UnXO5RihI2ks7rrDpDPIZahd
-fQlRehajrqHuET4ffKlGLa1/Bch1Gj130AJLgPmwuntP2L7Qy2pM8+MAD7Vc02V6
-ukkhVC2EXn6FrYRw54ZYkS5Mc0pSzpwEhiqM/QIDAQABAoIBAQCpPiFkacebGylr
-Vd8rcJy+lY6sCQ5XZXzP+ccZuBIU0SPoaoemvFiLRP9IBJkcMCG36/qlc1sRKlCQ
-Ha4iwxg/9UsEreIWKVzf7rW9s9GKX8mWwSuj2h+AEKQ512fMlZZWeCgkoo1wHsha
-nYMFXTKipvjnerxVURMUzzjk5xxEOuL50iYHRTb+KNsW+ut+2uArGVGIGB5UpYDe
-ONLkHFOlk5zNKWHJwwjLPACCzzH6XifmGPhrwuBYV2avkVjBQJyQo9ZEo9tfF78e
-5QKjqcCZLfeyxhwFLW/SgvmqK06dXl72SdMkxmMKOxtPHKsyuDmMfsNs66jn1phC
-7ZQ2HdzhAoGBAOiY2QAeDWPiIOGOQiOsM34QbFlFUIxTyN7cfJ+asT5e0R8x8Fhb
-yZpxronTv9thL7vw0ph1YjZThe2diFYs3dr0ldpZ4eW6LIZQP0q4mKzlUyVNgduv
-iufrkD5wsA8cE///geTzDA0FVStp4zJdpzyzLc2P0UznfRfYXIlHCe5rAoGBAMVu
-wTKAwVmM3NkO3nQidjgTCW1qBp7rFY/t8fTo/o5xk3/ppUwxg/HNKtbH2FdYtc4a
-aIoWFI6quR/DbcFIqfCpVCVocCYeL5kbp5a/dJkybYm7v2VXgFWltgkolvdoXWDZ
-ash+bhnFQ5LX9M/A/qO07JlEAi/KVo3CuBUMxfw3AoGBAJV6LPKjXY2UM/dgWebc
-8paQbWENZ49XBN8cKUbUvhVMD+6RRFk0W6JSbo2KtGCC249XW6+4uC4bjRVASO7A
-lK7ywh755m+hLp3+kj4t1Yg/NCjj35FUBdu3ihJmju6W589733lILLVteOeWe/jR
-MPmUWNojE6ntlnmthQJ/0cUTAoGBAMShnOrmjyrX/zBy/Zzeoa0RUKdXHIb0DUKO
-shbAYp6NgWC427c57XZKZysIWHAN2uwNIya7/PdmEwAOjGYfL5mPm02yaVedYrxz
-bYLW5ZKaRbwSb/nHnvouE1Glyk1X9QA7KX3LZW5nJ/i8+oZbaYCz9ZxjvmXIeFGx
-p9LXKOwbAoGAUA7+5C/cAK7heWE/hMoBTOfaf9Q5IG2bA0un0747aefzPHRIUNlI
-hjRIaHaXVV2IXF0Y5HZbSKu4E8oBVo6TsB252Xo0JJpZfplV2K8f6AhdP8ES1HAx
-fL37+UymBT9rNXOcicJDDm6ZJo6+y5NR0YSLzf2ENGTkXCPIWSAsK5Q=
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Target.key b/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Target.key
deleted file mode 100644
index a8282be..0000000
--- a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-constrained-root/Target.key
+++ /dev/null
@@ -1,28 +0,0 @@
-openssl genrsa 2048
------BEGIN RSA PRIVATE KEY-----
-MIIEpAIBAAKCAQEA3pRoRdqFD6SuxNtJHvZIuqMYZ/yrBiQlnvl7MNZPTx9L6pon
-K33XJYdkI5yW18bP/GxzW9riOUeR9aiF8eyA5/cgNjkJBkAzn5hJmve/g/LrqB0g
-8x9f4n7lvq+/up10DFridZh5QVPKx5uRt1F1rvGg+gbu7YAfAcmBGnOc392dNKP1
-R9thUkYlutU9CFSjAoxN/tiBMbEuTEizNrpF6OhB09EqtB4QEaRRRfQiuZxlmtxB
-OHvrLmbuoOvzRMhGJXVEv5l8saypuHUOZaWxG8r+GPeg5CRN2Fxms82xwprg/mhx
-ewooEDj+ZGWQ0C265bShapcTgJxJr0SRv/eN0wIDAQABAoIBAAhZFJgaHAd8K7ni
-Z5mrrwqg91dfGKMAVBDkVoR8ZTkYeWZxJarx61HTBCR5yQaKxF45SxJU4Us4rfbC
-vVNXhXYtxJ2EAhyj58vCkHApfptaTxBdF1FHCfeavs8qFEzRfvq/peK3N0UF+YMH
-CK4RdhJ7qYf3Hpr1xTPx9M+jKm0S9tvQ4FdLP5HClOSK9NqzlF+qtZpk8DhNH1+2
-9YUA1LNddFAuGpkWV/Z777VlF6TpkjOmafeHoHEVh/RgQRHps/qwOHuKfFNT5gHh
-xEXSoa3Cr1uqCAWCqUaNws6smwRBw10mZsfgC2GieK3tLcZCKXRtGGGYmeoh6u1C
-+Rw2jrECgYEA8wvEmOnsqoqBcJRVje0723b/GrCBeUoOhb3MK6oa1vXzpfzPxk0g
-TjYe1wnbCnRV0Y7V0WEX6AcBFkNIB4NAH+qZ6fOzw05ZtkX472pO0moNYBsU6Odr
-uxiOt/abSj3h2Zq4/cZiHO2rNNn2x89x8lvS2srI6VsmwVHkFzh3ozUCgYEA6nFj
-aAOSw5cCtn3KvA5YaDjzwoBGguF0cyUNYJnq3l5r/3Hv0GK6KKvU0cpIepZiyn6G
-lLda2aDW1/V4BwabUvk4wlibYAwF8w2xA1IbI88SsfO+FzpOd4s0O4EPO+TgOok0
-JVs1w7jAybUmHqwrq4YTRF12utaH9gQG3wOuRecCgYEAqkBQEx2qHzyut4Hw/F52
-U6HjyXpi9+ecjKsLXnrmGjZn2pphoXNdcewPZmsM+SHNC+KWfPkamfpuFH5E8p5K
-SRE5h9yiy+kShtA1NOCvHk4T2IKf/xY9LO5i6xLgbP00PA5aD8rr53/FMlyMtiLm
-mvMfnQv3+R9U4o7OzEVN6RECgYB5seAa5vfxBVtIJWXuVjf36dBGn1V6rNNIzevy
-wBLV2QeQcrE8Z3Mgl4mCWNFkqNmhKSps2fyTyVSch3QFmZ1Y5btbzqjgo30XHH1N
-LvqdjOi0bMS4w/BlR2IWnTiuK3FlkUD7Pyxaa3XPfnPKKi8E+zTXIPj3pVKwFokG
-jJ+S8wKBgQDWCOTubNSsvBPHogSpnXBvUVhBUg1wi/4cPXwTMwHDNbp3xxPx7CTW
-3dbIcEV5PTnRvMOZIPpsWIZj4baNqFiVsfMtVcwgtOsubwbl525nOwwFAorIaLXT
-KG93gWsHz7vlz2XUWG724SxQ6kdn9o8qs6guMSCYTNAehrYwzpKNUw==
------END RSA PRIVATE KEY-----
diff --git a/src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
rename to src/net/data/verify_certificate_chain_unittest/non-self-signed-root/chain.pem
index b91bb7c..dd52298 100644
--- a/src/net/data/verify_certificate_chain_unittest/non-self-signed-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-non-self-signed-root.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The trusted root
 is NOT self signed, however its issuer is not included in the chain or root
@@ -250,7 +250,7 @@
          8c:fa:7f:a2:2b:f3:e5:88:f3:f3:6c:f4:6c:f9:5b:08:90:bb:
          83:f8:12:da:1c:59:63:ad:4a:4d:12:22:d3:e3:69:6e:47:d9:
          67:84:68:78
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDdzCCAl+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDDApTaGFk
 b3dSb290MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UE
 AwwEUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALv6hznLQ9kk
@@ -270,19 +270,4 @@
 F0dLMBKCyxb9Y1hSx6dctaPxuIsJPPEykB5cLBXDMssnjbyWQ19fMuH5FWHq0X8y
 TbUXRPgA2Vmr0w5cAnkGoycAQOCCd0p44f9gg9WqoIZiVvCM+n+iK/PliPPzbPRs
 +VsIkLuD+BLaHFljrUpNEiLT42luR9lnhGh4
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/generate-chains.py
similarity index 72%
rename from src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
rename to src/net/data/verify_certificate_chain_unittest/non-self-signed-root/generate-chains.py
index 709c83c..858b18e 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-non-self-signed-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/generate-chains.py
@@ -7,6 +7,9 @@
 is NOT self signed, however its issuer is not included in the chain or root
 store. Verification is expected to succeed since the root is trusted."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 shadow_root = common.create_self_signed_root_certificate('ShadowRoot')
@@ -20,12 +23,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/Root.key b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/Root.key
rename to src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/ShadowRoot.key b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/ShadowRoot.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/ShadowRoot.key
rename to src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/ShadowRoot.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/Target.key b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/non-self-signed-root/Target.key
rename to src/net/data/verify_certificate_chain_unittest/non-self-signed-root/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/main.test b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test
new file mode 100644
index 0000000..d0fc9af
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/non-self-signed-root/ta-with-constraints.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR_WITH_CONSTRAINTS
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/rebase-errors.py b/src/net/data/verify_certificate_chain_unittest/rebase-errors.py
index a99d7db..bc74482 100755
--- a/src/net/data/verify_certificate_chain_unittest/rebase-errors.py
+++ b/src/net/data/verify_certificate_chain_unittest/rebase-errors.py
@@ -18,16 +18,14 @@
 comparing "errors.ToDebugString(chain)". The C++ test side should have been
 instrumented to dump out the test file's path on mismatch.
 
-This script will then update the corresponding file(s) -- a .pem file, and
-possibly an accompanying .py file.
+This script will then update the corresponding .test file that contains the
+error expectation.
 """
 
-import common
 import os
 import sys
 import re
 
-
 # Regular expression to find the failed errors in test stdout.
 #  * Group 1 of the match is the actual error text (backslash-escaped)
 #  * Group 2 of the match is file path (relative to //src) where the expected
@@ -36,25 +34,10 @@
 Value of: errors.ToDebugString\((?:test.chain)?\)
   Actual: "(.*)"
 (?:.|\n)+?
-Test file: (.*)
+Test file: (.*[.]test)
 """, re.MULTILINE)
 
 
-# Regular expression to find the ERRORS block (and any text above it) in a PEM
-# file. The assumption is that ERRORS is not the very first block in the file
-# (since it looks for an -----END to precede it).
-#  * Group 1 of the match is the ERRORS block content and any comments
-#    immediately above it.
-errors_block_regex = re.compile(r""".*
------END .*?-----
-
-(.*?
------BEGIN ERRORS-----
-.*?
------END ERRORS-----
-)""", re.MULTILINE | re.DOTALL)
-
-
 def read_file_to_string(path):
   """Reads a file entirely to a string"""
   with open(path, 'r') as f:
@@ -68,56 +51,6 @@
     f.write(data)
 
 
-def get_py_path(pem_path):
-  """Returns the .py filepath used to generate the given .pem path, which may
-  or may not exist.
-
-  Some test files (notably those in verify_certificate_chain_unittest/ have a
-  "generate-XXX.py" script that builds the "XXX.pem" file. Build the path to
-  the corresponding "generate-XXX.py" (which may or may not exist)."""
-  file_name = os.path.basename(pem_path)
-  file_name_no_extension = os.path.splitext(file_name)[0]
-  py_file_name = 'generate-' + file_name_no_extension + '.py'
-  return os.path.join(os.path.dirname(pem_path), py_file_name)
-
-
-def replace_string(original, start, end, replacement):
-  """Replaces the specified range of |original| with |replacement|"""
-  return original[0:start] + replacement + original[end:]
-
-
-def fixup_pem_file(path, actual_errors):
-  """Updates the ERRORS block in the test .pem file"""
-  contents = read_file_to_string(path)
-
-  m = errors_block_regex.search(contents)
-
-  if not m:
-    contents += '\n' + common.text_data_to_pem('ERRORS', actual_errors)
-  else:
-    contents = replace_string(contents, m.start(1), m.end(1),
-                              common.text_data_to_pem('ERRORS', actual_errors))
-
-  # Update the file.
-  write_string_to_file(contents, path)
-
-
-def fixup_py_file(path, actual_errors):
-  """Replaces the 'errors = XXX' section of the test's python script"""
-  contents = read_file_to_string(path)
-
-  # This assumes that the errors variable uses triple quotes.
-  prog = re.compile(r'^errors = (""".*?"""|None)', re.MULTILINE | re.DOTALL)
-  result = prog.search(contents)
-
-  # Replace the stuff in between the triple quotes with the actual errors.
-  contents = replace_string(contents, result.start(1), result.end(1),
-                            '"""' + actual_errors + '"""')
-
-  # Update the file.
-  write_string_to_file(contents, path)
-
-
 def get_src_root():
   """Returns the path to the enclosing //src directory. This assumes the
   current script is inside the source tree."""
@@ -141,16 +74,20 @@
   return os.path.join(get_src_root(), rel_path)
 
 
-def fixup_errors_for_file(actual_errors, pem_path):
-  """Updates the errors in |test_file_path| (.pem file) to match
-  |actual_errors|"""
+def fixup_errors_for_file(actual_errors, test_file_path):
+  """Updates the errors in |test_file_path| to match |actual_errors|"""
+  contents = read_file_to_string(test_file_path)
 
-  fixup_pem_file(pem_path, actual_errors)
+  header = "\nexpected_errors:\n"
+  index = contents.find(header)
+  if index < 0:
+    print "Couldn't find expected_errors"
+    sys.exit(1)
 
-  # If the test has a generator script update it too.
-  py_path = get_py_path(pem_path)
-  if os.path.isfile(py_path):
-    fixup_py_file(py_path, actual_errors)
+  # The rest of the file contains the errors (overwrite).
+  contents = contents[0:index] + header + actual_errors
+
+  write_string_to_file(contents, test_file_path)
 
 
 def main():
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-bad-eku.pem b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/unconstrained-root-bad-eku.pem
rename to src/net/data/verify_certificate_chain_unittest/root-bad-eku/chain.pem
index 5c47ad5..6985faf 100644
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-bad-eku.pem
+++ b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-unconstrained-root-bad-eku.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trust anchor. The trust anchor
 has an EKU that restricts it to clientAuth. Verification is expected to fail as
@@ -253,7 +253,7 @@
          b7:8b:38:13:3a:ca:52:b8:02:4f:01:5c:52:aa:d0:f5:c2:1c:
          bf:ed:60:12:30:fa:c8:ce:86:91:8a:c2:eb:30:88:53:15:e8:
          7f:14:93:1a
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDejCCAmKgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+d19GlkW5dF9SJhZW4
@@ -273,19 +273,4 @@
 IQ3jfGDLhhBklsrkArN6lFfIHtXftmQGi0I+PORECS7+vM1g9vjg1ZPRjTaPMRFT
 JY4N5VJLtgU17n+kodV1Jnne4HEZE7ZF57XjZuhqNVG5iFYLttm3izgTOspSuAJP
 AVxSqtD1why/7WASMPrIzoaRisLrMIhTFeh/FJMa
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-bad-eku.py b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-bad-eku.py
rename to src/net/data/verify_certificate_chain_unittest/root-bad-eku/generate-chains.py
index 4da8905..e58cd0a 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-bad-eku.py
+++ b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/generate-chains.py
@@ -8,6 +8,9 @@
 the end-entity is verified for serverAuth, and the trust anchor enforces
 constraints."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor) with non-CA basic
@@ -21,12 +24,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-bad-eku/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-bad-eku/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/root-bad-eku/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-bad-eku/Root.key b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-bad-eku/Root.key
rename to src/net/data/verify_certificate_chain_unittest/root-bad-eku/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-bad-eku/Target.key b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-bad-eku/Target.key
rename to src/net/data/verify_certificate_chain_unittest/root-bad-eku/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/root-bad-eku/main.test b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/root-bad-eku/ta-with-constraints.test b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/ta-with-constraints.test
new file mode 100644
index 0000000..3b9472a
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/root-bad-eku/ta-with-constraints.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR_WITH_CONSTRAINTS
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=2 (CN=Root) -----
+ERROR: The extended key usage does not include server auth
+
diff --git a/src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
rename to src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem
index 789a3fb..cf378a4 100644
--- a/src/net/data/verify_certificate_chain_unittest/constrained-root-basic-constraints-ca-false.pem
+++ b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-constrained-root-basic-constraints-ca-false.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trust anchor. The trust anchor
 has a basic constraints extension that indicates it is NOT a CA. Verification
@@ -251,7 +251,7 @@
          b8:d6:50:25:5c:da:17:eb:03:3a:b2:f8:df:77:5b:cb:4a:5f:
          c6:b6:11:21:9c:4f:c4:f8:00:e3:e1:96:db:0c:88:a7:9c:35:
          03:8f:2c:e3
------BEGIN TRUST_ANCHOR_CONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKilDga3mVGt/VdQugA8
@@ -271,19 +271,4 @@
 kPOIz26NGUCybhD5H2z77QK4MO2Drxve6xLdPA150t7leH8pLK7SyuhF1DDu0fFB
 9Z6fzkwSi+MrbAITkLO41lAlXNoX6wM6svjfd1vLSl/GthEhnE/E+ADj4ZbbDIin
 nDUDjyzj
------END TRUST_ANCHOR_CONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/generate-chains.py
similarity index 74%
rename from src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
rename to src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/generate-chains.py
index d8f1d3f..4919d35 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-constrained-root-basic-constraints-ca-false.py
+++ b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/generate-chains.py
@@ -8,6 +8,9 @@
 is expected to succeed even though the trust anchor enforces constraints, since
 the CA part of basic constraints is not enforced."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor) with non-CA basic
@@ -21,12 +24,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=True)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-basic-constraints-ca-false/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/constrained-root-basic-constraints-ca-false/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-basic-constraints-ca-false/Root.key b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/constrained-root-basic-constraints-ca-false/Root.key
rename to src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/constrained-root-basic-constraints-ca-false/Target.key b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/constrained-root-basic-constraints-ca-false/Target.key
rename to src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test
new file mode 100644
index 0000000..d0fc9af
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/root-basic-constraints-ca-false/ta-with-constraints.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR_WITH_CONSTRAINTS
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
rename to src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem
index 0622fc7..13eb9fc 100644
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-lacks-basic-constraints.pem
+++ b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-unconstrained-root-lacks-basic-constraints.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trust anchor. The trust anchor
 lacks the basic constraints extension. This is not a problem and verification
@@ -248,7 +248,7 @@
          4e:f2:e4:55:b2:6d:0b:5e:94:78:ed:57:5d:c4:84:4e:8c:df:
          e6:81:9d:80:c4:3b:45:b8:f6:53:b1:96:ea:76:55:25:b0:84:
          ea:37:c1:71
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDVDCCAjygAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALcODC7hRl+d3DoWUVYv
@@ -267,19 +267,4 @@
 388MTKSTyNDDnnAqKjc0m3NRzhRq1sr/IcQUQ/KaxF3wWPSTzEwok5YZcAx7RhjR
 AQe2Mu0frvnE9fSka5U+q0Yt4pJUca+hfet14kEGl4CvYJCxQKanFqMuyVhXi3JG
 TvLkVbJtC16UeO1XXcSETozf5oGdgMQ7Rbj2U7GW6nZVJbCE6jfBcQ==
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/generate-chains.py
similarity index 70%
rename from src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
rename to src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/generate-chains.py
index 68a4941..268cc1e 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-unconstrained-root-lacks-basic-constraints.py
+++ b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/generate-chains.py
@@ -7,6 +7,9 @@
 lacks the basic constraints extension. This is not a problem and verification
 should succeed."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -19,12 +22,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-lacks-basic-constraints/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-lacks-basic-constraints/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-lacks-basic-constraints/Root.key b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-lacks-basic-constraints/Root.key
rename to src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-lacks-basic-constraints/Target.key b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/unconstrained-root-lacks-basic-constraints/Target.key
rename to src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test
new file mode 100644
index 0000000..d0fc9af
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/root-lacks-basic-constraints/ta-with-constraints.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR_WITH_CONSTRAINTS
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/chain.pem
index 1ff051c..972d141 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-ec-ku-decipheronly.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only decipherOnly.
@@ -234,7 +234,7 @@
          fd:e2:aa:56:05:b4:15:f7:4f:41:b3:88:31:29:97:51:71:52:
          04:95:00:64:7c:7a:c7:35:b9:22:d0:32:9a:bd:2f:c6:ea:7d:
          3a:2d:29:39
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALP+ocwOvWGd0k0wyuqa
@@ -254,19 +254,4 @@
 pZRlYhTkGOdkLW1AbrpbZjmk2B8cqJ+AWtc1WkdEMraiGCYICC6Pmmv29VyVRieO
 1fvA1VI95aQjDvQwus55uGP94qpWBbQV909Bs4gxKZdRcVIElQBkfHrHNbki0DKa
 vS/G6n06LSk5
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-decipheronly.py b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-decipheronly.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/generate-chains.py
index 4431180..ca79468 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-decipheronly.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only decipherOnly."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,decipherOnly')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-decipheronly/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-decipheronly/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-decipheronly/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-decipheronly/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-decipheronly/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-decipheronly/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-decipheronly/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/chain.pem
index 67a7e67..0a8d35c 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-ec-ku-digitalsignature.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only digitalSignature.
@@ -234,7 +234,7 @@
          c8:bd:1d:a0:80:5f:da:59:19:20:ef:f4:df:a8:bf:2c:e7:77:
          6b:63:77:c6:a8:e1:59:1e:8f:63:b6:0e:66:aa:1e:11:61:91:
          7d:20:75:b6
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWdX49yxT1HVTGAV+DM
@@ -254,19 +254,4 @@
 jzwuirAKNckq1wSbRW6OE1IMZ7A3o3Tf+8soNad1QI5+EjQJuCSTz2EvqPhznqG8
 tpp9f0lk7qACQV9Dr6uKKhXIvR2ggF/aWRkg7/TfqL8s53drY3fGqOFZHo9jtg5m
 qh4RYZF9IHW2
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-digitalsignature.py b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-digitalsignature.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/generate-chains.py
index 50fcc9b..7fd4623 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-digitalsignature.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only digitalSignature."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,digitalSignature')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-digitalsignature/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-digitalsignature/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-digitalsignature/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-digitalsignature/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-digitalsignature/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-digitalsignature/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-digitalsignature/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/chain.pem
index ad18c23..aae671f 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-ec-ku-keyagreement.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyAgreement.
@@ -234,7 +234,7 @@
          8b:98:75:b7:1e:ee:f1:8f:b8:2d:c6:bc:73:a6:74:69:f6:3c:
          ca:75:1e:65:10:35:e8:d0:9f:d0:69:6b:cc:d4:fb:d4:93:05:
          a1:2a:26:34
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAME+05Y79CdwMO3A7ak4
@@ -254,19 +254,4 @@
 FaEf2A39RrkHOGohQFADrnPNLkk+KaZlZ+QcW25B7XxuDel8MtuZF5ByP9VM1+wF
 Re4jQNucTsPKQtEYw1SU8RCLmHW3Hu7xj7gtxrxzpnRp9jzKdR5lEDXo0J/QaWvM
 1PvUkwWhKiY0
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-keyagreement.py b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-keyagreement.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/generate-chains.py
index 25bf78d..a6be795 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-keyagreement.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyAgreement."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,keyAgreement')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyagreement/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyagreement/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyagreement/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyagreement/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyagreement/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyagreement/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyagreement/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/chain.pem
index bb2ed6b..76790305 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-ec-ku-keyencipherment.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyEncipherment.
@@ -234,7 +234,7 @@
          31:9a:a2:b7:72:7d:4a:90:90:9c:dd:d0:cd:89:b5:90:32:b2:
          2d:e2:4f:3c:b4:ae:46:00:96:72:6f:8e:bc:d3:59:e5:08:57:
          b9:3f:f6:b2
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANYpeIJjomFhU3KBDOYW
@@ -254,19 +254,4 @@
 3oXSY6PmYdsoaXV0YaDuw+hvxM6jMTxInTSE/oN+fb4vyr348jkcDrI8wkryP/5j
 LFN7Hudk4JcFRmRgoDVUX0QxmqK3cn1KkJCc3dDNibWQMrIt4k88tK5GAJZyb468
 01nlCFe5P/ay
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-keyencipherment.py b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-keyencipherment.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/generate-chains.py
index f1d82d6..8374c84 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-ec-ku-keyencipherment.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyEncipherment."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,keyEncipherment')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyencipherment/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyencipherment/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyencipherment/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyencipherment/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyencipherment/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-ec-ku-keyencipherment/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-ec-ku-keyencipherment/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/chain.pem
index ed7d723..3e12d68 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-rsa-ku-decipheronly.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only decipherOnly.
@@ -248,7 +248,7 @@
          46:86:80:fb:14:63:e9:30:1b:d0:21:83:1c:71:aa:88:11:f0:
          53:43:17:b5:ae:10:8f:d2:11:3a:7c:1c:62:2f:e3:3a:bd:e2:
          76:81:67:68
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJOxsSXX6FIbtdvg+y71
@@ -268,19 +268,4 @@
 bmCyIGccz1V0TezTwsLw7+OcVUj4SSrwbRAlvlBk+DuQJGtsmCwbTNs1GmgSv3l/
 b8dl9jsxVIzEF7xyikgBjMJGhoD7FGPpMBvQIYMccaqIEfBTQxe1rhCP0hE6fBxi
 L+M6veJ2gWdo
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-decipheronly.py b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-decipheronly.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/generate-chains.py
index a481523..f3196b7 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-decipheronly.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only decipherOnly."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,decipherOnly')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-decipheronly/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-decipheronly/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-decipheronly/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-decipheronly/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-decipheronly/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-decipheronly/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-decipheronly/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/chain.pem
index 0bf4b42..1b2223d 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-rsa-ku-digitalsignature.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only digitalSignature.
@@ -248,7 +248,7 @@
          e5:8b:ca:70:72:12:f5:5d:6b:b6:05:7c:e2:1b:87:0e:25:4e:
          dd:63:91:a6:ca:b3:70:69:97:ce:9a:7c:c8:15:b0:23:b5:1a:
          59:43:cd:3f
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMdmjDGHX9l3iFadXfUO
@@ -268,19 +268,4 @@
 jRIIBkqvB/slYIMXriduMTn/3tmp9QS8psNupGoH1oLnJvubb4j6x2FjzBXStCyv
 qknZQKarwjx74QdcUOVpWcfli8pwchL1XWu2BXziG4cOJU7dY5GmyrNwaZfOmnzI
 FbAjtRpZQ80/
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-digitalsignature.py b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-digitalsignature.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/generate-chains.py
index 354b9b2..7a45e97 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-digitalsignature.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only digitalSignature."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,digitalSignature')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-digitalsignature/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-digitalsignature/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-digitalsignature/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-digitalsignature/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-digitalsignature/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-digitalsignature/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-digitalsignature/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/chain.pem
index af47df9..a79ff5c 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-rsa-ku-keyagreement.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyAgreement.
@@ -248,7 +248,7 @@
          1f:19:02:7c:f6:54:1e:77:f8:18:e2:1e:c0:0b:2a:b9:6a:6a:
          69:25:5d:a7:f9:c9:3b:bd:22:cc:3b:f1:fd:41:f1:a5:fc:6b:
          65:9e:df:7c
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALLfCwuiipycaK0k+fnm
@@ -268,19 +268,4 @@
 PpzG/+dhOyApMF9ftUdxxoeuqjHO0bE/J+7KZg5tK+GZZmaUgRAYKE9RMnrE4c4W
 rmkmDq0u4DDMUgAYPeJ1doMfGQJ89lQed/gY4h7ACyq5amppJV2n+ck7vSLMO/H9
 QfGl/Gtlnt98
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-keyagreement.py b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-keyagreement.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/generate-chains.py
index dcce524..d7a0a77 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-keyagreement.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyAgreement."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,keyAgreement')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyagreement/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyagreement/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyagreement/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyagreement/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyagreement/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyagreement/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyagreement/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment.pem b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment.pem
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/chain.pem
index ae9a30a..c2dc57a 100644
--- a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment.pem
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-serverauth-rsa-ku-keyencipherment.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyEncipherment.
@@ -248,7 +248,7 @@
          27:ad:64:69:bc:bd:b2:4f:b5:ba:9f:6b:8c:c0:6f:1d:f3:72:
          89:ab:88:80:e9:13:ac:cf:7d:79:bb:12:87:74:01:17:df:d8:
          bc:f4:20:c5
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ/rfezXgrKCwyJCjNEJ
@@ -268,19 +268,4 @@
 i/DMufi2WOtveNgATPR8ynxjIkObxIgLawApYUlK9FGHRmnGFLPMhbhB7F2Cxk/y
 9LqHgasGXtQqqQgM/yTLF0AnrWRpvL2yT7W6n2uMwG8d83KJq4iA6ROsz315uxKH
 dAEX39i89CDF
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-keyencipherment.py b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-keyencipherment.py
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/generate-chains.py
index d450ce9..6c92eba 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-serverauth-rsa-ku-keyencipherment.py
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate, a trusted root, and a target
 certificate for serverAuth that has only keyEncipherment."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,13 +24,5 @@
 target.get_extensions().set_property('extendedKeyUsage', 'serverAuth')
 target.get_extensions().set_property('keyUsage', 'critical,keyEncipherment')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyencipherment/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyencipherment/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyencipherment/Root.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyencipherment/Root.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyencipherment/Target.key b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/serverauth-rsa-ku-keyencipherment/Target.key
rename to src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/main.test b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/serverauth-rsa-ku-keyencipherment/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
rename to src/net/data/verify_certificate_chain_unittest/target-and-intermediate/chain.pem
index f375653..975f4fc 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-and-intermediate.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-and-intermediate.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. Verification is
 expected to succeed.
@@ -249,7 +249,7 @@
          b4:b1:e1:0c:73:29:f2:32:86:76:13:dc:13:0e:32:9a:ef:07:
          6f:c4:f8:ab:58:16:68:47:36:25:4e:9c:52:09:38:12:31:b7:
          2c:be:5a:08
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJueSo7NRw6mLxetJMfW
@@ -269,19 +269,4 @@
 jFFk1IfyXEvNXFmKWL0nKMiczB+mn5wcedblElSkZVFQcVDEwdMtWFYlI6mTjFQr
 IyRxe3CWamBMDZxvcLYiI7e0seEMcynyMoZ2E9wTDjKa7wdvxPirWBZoRzYlTpxS
 CTgSMbcsvloI
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/generate-chains.py
similarity index 66%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
rename to src/net/data/verify_certificate_chain_unittest/target-and-intermediate/generate-chains.py
index 0132b2b..d118a7c 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-and-intermediate.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with 1 intermediate and a trusted root. Verification is
 expected to succeed."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -17,12 +20,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-and-intermediate/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-and-intermediate/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-and-intermediate/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-and-intermediate/Root.key b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-and-intermediate/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-and-intermediate/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-and-intermediate/Target.key b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-and-intermediate/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-and-intermediate/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/main.test b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-and-intermediate/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
rename to src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem
index 6de49f4..6ddc5ff 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-has-keycertsign-but-not-ca.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate that is not a CA, and yet has the keyCertSign bit set. Verification
@@ -251,7 +251,7 @@
          cf:1e:ac:13:67:8b:8a:a1:8e:f0:62:d1:03:ed:aa:25:ca:0b:
          82:32:6e:24:4e:95:96:b3:ea:a0:33:fc:20:a3:3e:e4:ce:a4:
          60:af:33:78
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOROlvbeAgXnFoD67bE8
@@ -271,27 +271,4 @@
 XGStAYqYGsE4ALKOqYtQJ0IxFuTHOxGnVrT097/1/OS4K1ks1j01b6em5syFzTbu
 mNyvNTMk8g1f5d4bJubeLPbPHqwTZ4uKoY7wYtED7aolyguCMm4kTpWWs+qgM/wg
 oz7kzqRgrzN4
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Target certificate looks like a CA but does not set all CA properties
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBUYXJnZXQgY2VydGlmaWNhdGUgbG9va3MgbGlrZSBhIENBIGJ1dCBkb2VzIG5vdCBzZXQgYWxsIENBIHByb3BlcnRpZXMKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/generate-chains.py
similarity index 67%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
rename to src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/generate-chains.py
index 7d361df..01f4509 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-has-keycertsign-but-not-ca.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/generate-chains.py
@@ -8,6 +8,9 @@
 is expected to fail, since keyCertSign should only be asserted when CA is
 true."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,16 +24,5 @@
 target.get_extensions().set_property('keyUsage',
     'critical,digitalSignature,keyEncipherment,keyCertSign')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Target certificate looks like a CA but does not set all CA properties
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-has-keycertsign-but-not-ca/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-has-keycertsign-but-not-ca/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-has-keycertsign-but-not-ca/Root.key b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-has-keycertsign-but-not-ca/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-has-keycertsign-but-not-ca/Target.key b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-has-keycertsign-but-not-ca/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test
new file mode 100644
index 0000000..66bf3a2
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-keycertsign-but-not-ca/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Target certificate looks like a CA but does not set all CA properties
+
diff --git a/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
rename to src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem
index a6759fa..a9755a0 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-has-pathlen-but-not-ca.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate that is not a CA, and yet has a pathlen set. Verification is
@@ -252,7 +252,7 @@
          a1:3b:f5:b4:cd:11:57:fe:fc:ab:a1:75:63:f9:60:85:50:b3:
          18:eb:84:53:d0:73:ca:51:f6:2f:3c:cd:af:75:b0:f2:9b:a5:
          83:62:cd:81
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNZwNaw88sxRp3v3mPz
@@ -272,27 +272,4 @@
 0UzOvx5avf4veJ13lRUXR1dovxg2ul34VpQURHaCI9wfeQ5VUIMc2nJwqOhgyOsJ
 mVZtTfkjn5XogiNbFv8uKaShO/W0zRFX/vyroXVj+WCFULMY64RT0HPKUfYvPM2v
 dbDym6WDYs2B
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Target certificate looks like a CA but does not set all CA properties
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBUYXJnZXQgY2VydGlmaWNhdGUgbG9va3MgbGlrZSBhIENBIGJ1dCBkb2VzIG5vdCBzZXQgYWxsIENBIHByb3BlcnRpZXMKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/generate-chains.py
similarity index 67%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
rename to src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/generate-chains.py
index b8e7673..44405c9 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-has-pathlen-but-not-ca.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/generate-chains.py
@@ -7,6 +7,9 @@
 certificate that is not a CA, and yet has a pathlen set. Verification is
 expected to fail, since pathlen should only be set for CAs."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,16 +23,5 @@
 target.get_extensions().set_property('basicConstraints',
                                      'critical,CA:false,pathlen:1')
 
-
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Target certificate looks like a CA but does not set all CA properties
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-has-pathlen-but-not-ca/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-has-pathlen-but-not-ca/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-has-pathlen-but-not-ca/Root.key b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-has-pathlen-but-not-ca/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-has-pathlen-but-not-ca/Target.key b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-has-pathlen-but-not-ca/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test
new file mode 100644
index 0000000..66bf3a2
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-has-pathlen-but-not-ca/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Target certificate looks like a CA but does not set all CA properties
+
diff --git a/src/net/data/verify_certificate_chain_unittest/target-lacks-eku.pem b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/target-lacks-eku.pem
rename to src/net/data/verify_certificate_chain_unittest/target-lacks-eku/chain.pem
index 46c3751..3d9fd07 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-lacks-eku.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-lacks-eku.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The target has no
 Extended Key Usage extension (meaning it is unrestricted). Verification is
@@ -247,7 +247,7 @@
          93:82:cd:af:30:f1:d9:c6:d7:cf:a6:0b:b4:76:a1:72:48:de:
          f9:6c:8a:28:58:56:10:ed:d9:67:cf:a0:77:9c:e6:2d:ba:36:
          31:ef:5c:a8
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM3lCamJkJPIM25b2+iO
@@ -267,19 +267,4 @@
 uGK+JBC+w/rzxZ9/Hqf+mV2qMA/2YSkdoY+el0/3kqKrox12WvHH3re52mFpaU70
 WmmyD15rSkpSaAi/72GbBj6Tgs2vMPHZxtfPpgu0dqFySN75bIooWFYQ7dlnz6B3
 nOYtujYx71yo
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-lacks-eku.py b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/generate-chains.py
similarity index 70%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-lacks-eku.py
rename to src/net/data/verify_certificate_chain_unittest/target-lacks-eku/generate-chains.py
index 846b481..666b1c3 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-lacks-eku.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/generate-chains.py
@@ -7,6 +7,9 @@
 Extended Key Usage extension (meaning it is unrestricted). Verification is
 expected to succeed."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -19,12 +22,5 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.get_extensions().remove_property('extendedKeyUsage')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-lacks-eku/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-lacks-eku/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-lacks-eku/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-lacks-eku/Root.key b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-lacks-eku/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-lacks-eku/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-lacks-eku/Target.key b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-lacks-eku/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-lacks-eku/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/main.test b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-lacks-eku/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
rename to src/net/data/verify_certificate_chain_unittest/target-not-end-entity/chain.pem
index e742e6e..25b2680 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-not-end-entity.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-not-end-entity.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate, a trusted root, and a target
 certificate that is also a CA. Verification is expected to succeed, as the test
@@ -249,7 +249,7 @@
          cf:38:14:c0:14:31:e9:59:51:20:94:8a:7d:cc:25:d3:69:8c:
          ac:41:3c:1e:05:ed:30:f5:ee:ef:ca:68:fe:f0:42:ff:0c:c9:
          9f:fc:59:3b
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM3PADctMAexec4cL+Xe
@@ -269,19 +269,4 @@
 fUaKMbk29r2wTYwWj2ISbL2VmoZDh4b9wbjjutxPLX81fmII0CMcsXZl4EJimxKV
 jPeyDTYuHafLPm81hs/hX5nPOBTAFDHpWVEglIp9zCXTaYysQTweBe0w9e7vymj+
 8EL/DMmf/Fk7
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/generate-chains.py
similarity index 70%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
rename to src/net/data/verify_certificate_chain_unittest/target-not-end-entity/generate-chains.py
index 59bc3aa..d1c8b49 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-not-end-entity.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/generate-chains.py
@@ -7,6 +7,9 @@
 certificate that is also a CA. Verification is expected to succeed, as the test
 code accepts any target certificate."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -18,12 +21,5 @@
 # Target certificate (is also a CA)
 target = common.create_intermediate_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-not-end-entity/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-not-end-entity/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-not-end-entity/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-not-end-entity/Root.key b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-not-end-entity/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-not-end-entity/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-not-end-entity/Target.key b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-not-end-entity/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-not-end-entity/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/main.test b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-not-end-entity/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail.pem b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail.pem
rename to src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/chain.pem
index 8771bab..1132c0d 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-restricts-eku-fail.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The target
 certificate has only clientAuth EKU, so is expected to fail when verifying for
@@ -249,7 +249,7 @@
          93:48:b4:19:04:a6:18:8b:03:11:dd:d0:3a:ff:32:62:da:c4:
          f0:37:1a:7a:9c:ba:67:6d:bd:a0:b1:13:ea:54:58:78:8c:b8:
          f7:91:a7:7a
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKmGghGDcqJ6WoZCWK6A
@@ -269,27 +269,4 @@
 kJ/GZg9iSS2qvo064+c8ChZI3BHgdJ0R2M6YlXyZpXulOjs+6SndSgmIoO9sob+O
 RgcB7ZP9ZMkVsIzlziObIrSTSLQZBKYYiwMR3dA6/zJi2sTwNxp6nLpnbb2gsRPq
 VFh4jLj3kad6
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: The extended key usage does not include server auth
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBUaGUgZXh0ZW5kZWQga2V5IHVzYWdlIGRvZXMgbm90IGluY2x1ZGUgc2VydmVyIGF1dGgKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-restricts-eku-fail.py b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/generate-chains.py
similarity index 64%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-restricts-eku-fail.py
rename to src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/generate-chains.py
index 43a6846..fa5256c 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-restricts-eku-fail.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/generate-chains.py
@@ -7,6 +7,9 @@
 certificate has only clientAuth EKU, so is expected to fail when verifying for
 serverAuth."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -19,15 +22,5 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.get_extensions().set_property('extendedKeyUsage', 'clientAuth')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: The extended key usage does not include server auth
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-restricts-eku-fail/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-restricts-eku-fail/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-restricts-eku-fail/Root.key b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-restricts-eku-fail/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-restricts-eku-fail/Target.key b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-restricts-eku-fail/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/main.test b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/main.test
new file mode 100644
index 0000000..cb91d32
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-restricts-eku-fail/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: The extended key usage does not include server auth
+
diff --git a/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any.pem b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/chain.pem
similarity index 96%
rename from src/net/data/verify_certificate_chain_unittest/target-sets-eku-any.pem
rename to src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/chain.pem
index c779a18..9355f0a 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-sets-eku-any.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The target
 restricts EKU to clientAuth+any and requests serverAuth during verification.
@@ -249,7 +249,7 @@
          a2:ed:95:28:e1:59:b9:b7:e2:85:69:e7:c4:12:36:c4:60:00:
          fb:a3:74:69:cf:a0:ee:46:76:bd:45:c4:24:69:5b:5b:55:2e:
          43:3e:b2:1c
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOgXMbYOhBCkm7+erp4p
@@ -269,19 +269,4 @@
 AxPpoYLSuBPwViBv9Vkf+ZZ+effJU2hy5ZS/n4RMfOkB9OkfFEyDB8JjZRB1MOW4
 7h503Sl4Zpt5RjsnRcRdqaqi7ZUo4Vm5t+KFaefEEjbEYAD7o3Rpz6DuRna9RcQk
 aVtbVS5DPrIc
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-sets-eku-any.py b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/generate-chains.py
similarity index 72%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-sets-eku-any.py
rename to src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/generate-chains.py
index cf9c857..c7b5e68 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-sets-eku-any.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/generate-chains.py
@@ -7,6 +7,9 @@
 restricts EKU to clientAuth+any and requests serverAuth during verification.
 This should succeed."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,12 +23,5 @@
 target.get_extensions().set_property('extendedKeyUsage',
                                      'clientAuth,anyExtendedKeyUsage')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.KEY_PURPOSE_SERVER_AUTH
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-sets-eku-any/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-sets-eku-any/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-sets-eku-any/Root.key b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-sets-eku-any/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-sets-eku-any/Target.key b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-sets-eku-any/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/main.test b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-sets-eku-any/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem
similarity index 92%
rename from src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
rename to src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem
index 91b78ba..dd509cd 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-signed-by-512bit-rsa.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The target
 certificate is signed using a weak RSA key (512-bit modulus), and so
@@ -217,7 +217,7 @@
          9c:b2:0b:d3:22:f5:88:2f:53:e6:e8:a5:43:a4:65:97:a6:36:
          f6:57:d3:4b:15:28:55:05:df:52:b5:19:c8:7e:a8:3a:4a:79:
          52:33:b9:52
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMo/+B9Cj1WY+J/7lANC
@@ -237,31 +237,4 @@
 KYCXmijx9IxlonTzeaUK+k+n39LCqCOfURUZLED9Z3U6JIxbmnHfApKQ2OJYInlE
 EOUs/X4lbuJC7AJnRBeKrOWcsgvTIvWIL1Pm6KVDpGWXpjb2V9NLFShVBd9StRnI
 fqg6SnlSM7lS
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: RSA modulus too small
-  actual: 512
-  minimum: 1024
-ERROR: Unacceptable modulus length for RSA key
-ERROR: VerifySignedData failed
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBSU0EgbW9kdWx1cyB0b28gc21hbGwKICBhY3R1YWw6IDUxMgogIG1pbmltdW06IDEwMjQKRVJST1I6IFVuYWNjZXB0YWJsZSBtb2R1bHVzIGxlbmd0aCBmb3IgUlNBIGtleQpFUlJPUjogVmVyaWZ5U2lnbmVkRGF0YSBmYWlsZWQKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/generate-chains.py
similarity index 62%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
rename to src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/generate-chains.py
index e57026c..411a831 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-by-512bit-rsa.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/generate-chains.py
@@ -7,6 +7,9 @@
 certificate is signed using a weak RSA key (512-bit modulus), and so
 verification is expected to fail."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -20,19 +23,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: RSA modulus too small
-  actual: 512
-  minimum: 1024
-ERROR: Unacceptable modulus length for RSA key
-ERROR: VerifySignedData failed
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-by-512bit-rsa/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-by-512bit-rsa/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-by-512bit-rsa/Root.key b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-by-512bit-rsa/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-by-512bit-rsa/Target.key b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-by-512bit-rsa/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test
new file mode 100644
index 0000000..d30b49c
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-by-512bit-rsa/main.test
@@ -0,0 +1,12 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: RSA modulus too small
+  actual: 512
+  minimum: 1024
+ERROR: Unacceptable modulus length for RSA key
+ERROR: VerifySignedData failed
+
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem
similarity index 91%
rename from src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
rename to src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem
index 09f6130..86a472a 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-signed-using-ecdsa.py]
+[Created by: generate-chains.py]
 
 Certificate chain with a trusted root using RSA, and intermediate using EC,
 and a target certificate using RSA. Verification is expected to succeed.
@@ -55,14 +55,14 @@
             X509v3 Extended Key Usage: 
                 TLS Web Server Authentication, TLS Web Client Authentication
     Signature Algorithm: ecdsa-with-SHA256
-         30:65:02:31:00:cb:9d:26:67:f3:0a:fe:93:3b:6b:f5:54:47:
-         6f:0b:d6:4d:e7:5a:35:7f:c1:a5:29:85:b0:e0:53:7f:ea:6c:
-         b1:7a:62:46:b9:89:65:71:63:13:7d:c2:7a:73:7a:92:c3:02:
-         30:54:0f:04:1c:7d:73:1e:e1:c2:f5:d0:61:39:11:e0:05:2a:
-         b4:b8:3e:3f:a1:94:47:f5:54:85:6e:e3:a3:67:5b:d0:0c:06:
-         5d:4f:55:03:75:ba:56:5e:59:c3:d8:e8:98
+         30:66:02:31:00:8b:f2:b6:e1:e9:b7:8d:6b:0e:21:17:26:a8:
+         5f:79:f8:2e:86:d1:4f:0e:3a:34:2f:75:ad:0a:14:26:5a:8d:
+         51:64:2c:80:b2:55:2a:36:07:f7:1a:92:79:63:24:61:b2:02:
+         31:00:a6:52:af:91:62:28:e6:06:25:8c:55:93:41:07:5a:ca:
+         a3:71:14:5f:91:b6:fa:4a:45:de:7e:2f:01:a4:cf:02:4f:86:
+         66:1e:bd:09:79:f7:3d:91:c8:1b:8f:c9:6a:d8
 -----BEGIN CERTIFICATE-----
-MIIC7DCCAnKgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxJbnRlcm1l
+MIIC7TCCAnKgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxJbnRlcm1l
 ZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYDVQQD
 DAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDmkBTXbF6F
 JCEXes7yij6DIOQ+689MBrsK1SHZK+EuFIogFsjJS1Xt6epI7e8DK94l3UGbDAu9
@@ -75,9 +75,9 @@
 BDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVkaWF0
 ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0ludGVy
 bWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB
-BggrBgEFBQcDAjAKBggqhkjOPQQDAgNoADBlAjEAy50mZ/MK/pM7a/VUR28L1k3n
-WjV/waUphbDgU3/qbLF6Yka5iWVxYxN9wnpzepLDAjBUDwQcfXMe4cL10GE5EeAF
-KrS4Pj+hlEf1VIVu46NnW9AMBl1PVQN1ulZeWcPY6Jg=
+BggrBgEFBQcDAjAKBggqhkjOPQQDAgNpADBmAjEAi/K24em3jWsOIRcmqF95+C6G
+0U8OOjQvda0KFCZajVFkLICyVSo2B/caknljJGGyAjEAplKvkWIo5gYljFWTQQda
+yqNxFF+RtvpKRd5+LwGkzwJPhmYevQl59z2RyBuPyWrY
 -----END CERTIFICATE-----
 
 Certificate:
@@ -221,7 +221,7 @@
          de:87:5c:b9:5f:d1:26:46:5e:26:25:f8:b8:bc:b8:58:d5:79:
          40:61:7d:de:a4:74:25:f0:cc:7a:45:e0:98:88:a9:7f:d1:93:
          ce:45:dc:59
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPXGTu4/8Hxkw10JFQIc
@@ -241,19 +241,4 @@
 1nvHGG3GLtympzqrtCckobbUGtC2XIBufGYxmVanVb9l7lM2hzd9b4xk0Ponv0GV
 4kJuco8UNOLNsxVvcs27Qw3eh1y5X9EmRl4mJfi4vLhY1XlAYX3epHQl8Mx6ReCY
 iKl/0ZPORdxZ
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/generate-chains.py
similarity index 73%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
rename to src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/generate-chains.py
index c986a55..b852f3f 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-using-ecdsa.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with a trusted root using RSA, and intermediate using EC,
 and a target certificate using RSA. Verification is expected to succeed."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor). using RSA.
@@ -19,12 +22,5 @@
 # Target certificate contains an RSA key (but is signed using ECDSA).
 target = common.create_end_entity_certificate('Target', intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-using-ecdsa/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-using-ecdsa/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-using-ecdsa/Root.key b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-using-ecdsa/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-using-ecdsa/Target.key b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-using-ecdsa/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-using-ecdsa/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
rename to src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/chain.pem
index b9b31a9..88bbc11 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-signed-with-md5.py]
+[Created by: generate-chains.py]
 
 Certificate chain with an intermediate that uses MD5 to sign the target
 certificate. This is expected to fail because MD5 is too weak.
@@ -249,7 +249,7 @@
          e0:3d:95:b7:f9:30:0a:fe:e8:0b:06:2d:26:31:21:05:b0:8a:
          d4:27:fb:24:3d:7b:a7:fb:e6:0f:a5:c2:a8:ec:fd:65:76:86:
          4d:ef:24:0a
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPYiqM4dlIiXuefnq1ba
@@ -269,28 +269,4 @@
 EM75y6oP6Efjup3RgdZx4nT5Ns9FYpPwAu+gQ0f7AzJrU2MM/gU7ewAKAsHfzBUW
 TA4TJhuF2u3PFOKtyoKfW6DgPZW3+TAK/ugLBi0mMSEFsIrUJ/skPXun++YPpcKo
 7P1ldoZN7yQK
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Unacceptable signature algorithm
-ERROR: VerifySignedData failed
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBVbmFjY2VwdGFibGUgc2lnbmF0dXJlIGFsZ29yaXRobQpFUlJPUjogVmVyaWZ5U2lnbmVkRGF0YSBmYWlsZWQKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/generate-chains.py
similarity index 61%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
rename to src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/generate-chains.py
index 6b9adc0..0a4d747 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-signed-with-md5.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/generate-chains.py
@@ -6,6 +6,9 @@
 """Certificate chain with an intermediate that uses MD5 to sign the target
 certificate. This is expected to fail because MD5 is too weak."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -18,16 +21,5 @@
 target = common.create_end_entity_certificate('Target', intermediate)
 target.set_signature_hash('md5')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Unacceptable signature algorithm
-ERROR: VerifySignedData failed
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-with-md5/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-with-md5/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-with-md5/Root.key b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-with-md5/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-signed-with-md5/Target.key b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-signed-with-md5/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/main.test b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/main.test
new file mode 100644
index 0000000..7d0c1c5
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-signed-with-md5/main.test
@@ -0,0 +1,9 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Unacceptable signature algorithm
+ERROR: VerifySignedData failed
+
diff --git a/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
rename to src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem
index e1cba8b..465b565 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-unknown-critical-extension.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 1 intermediate and a trusted root. The target
 certificate has an unknown X.509v3 extension (OID=1.2.3.4) that is marked as
@@ -253,7 +253,7 @@
          d8:1e:aa:c8:47:3e:f0:4a:7f:36:ff:1d:a8:be:c1:0f:0c:08:
          16:e5:f6:47:5a:49:4a:b6:2a:9f:3f:8a:65:90:89:c9:f2:6c:
          41:7b:25:dd
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMCOg3x+DGrokyz45oAX
@@ -273,29 +273,4 @@
 AavVhlUwUt29bQpeaySbSFLwOW0YFAiRZlja7HNWHQdhVm9kbYVOsFPBvICffFXk
 Gn6qczFKkmH6g4bCjPBOrCbYHqrIRz7wSn82/x2ovsEPDAgW5fZHWklKtiqfP4pl
 kInJ8mxBeyXd
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Unconsumed critical extension
-  oid: 2A0304
-  value: 01020304
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBVbmNvbnN1bWVkIGNyaXRpY2FsIGV4dGVuc2lvbgogIG9pZDogMkEwMzA0CiAgdmFsdWU6IDAxMDIwMzA0Cgo=
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/generate-chains.py
similarity index 68%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
rename to src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/generate-chains.py
index 375522c..f1d43a4 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-unknown-critical-extension.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/generate-chains.py
@@ -8,6 +8,9 @@
 critical. Verifying this certificate chain is expected to fail because there is
 an unrecognized critical extension."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -21,17 +24,5 @@
 target.get_extensions().add_property('1.2.3.4',
                                      'critical,DER:01:02:03:04')
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Unconsumed critical extension
-  oid: 2A0304
-  value: 01020304
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-unknown-critical-extension/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-unknown-critical-extension/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-unknown-critical-extension/Root.key b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-unknown-critical-extension/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-unknown-critical-extension/Target.key b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-unknown-critical-extension/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test
new file mode 100644
index 0000000..016a31a
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-unknown-critical-extension/main.test
@@ -0,0 +1,10 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Unconsumed critical extension
+  oid: 2A0304
+  value: 01020304
+
diff --git a/src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/chain.pem
similarity index 94%
rename from src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
rename to src/net/data/verify_certificate_chain_unittest/target-wrong-signature/chain.pem
index 4d9b6aa..56a5c00 100644
--- a/src/net/data/verify_certificate_chain_unittest/target-wrong-signature.pem
+++ b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-target-wrong-signature.py]
+[Created by: generate-chains.py]
 
 Certificate chain where the target has an incorrect signature. Everything
 else should check out, however the digital signature contained in the target
@@ -250,7 +250,7 @@
          52:cd:91:0c:78:59:15:85:64:46:90:21:a2:f5:81:cc:34:b1:
          fc:6f:12:51:9f:be:c1:f0:62:84:4e:e6:35:39:61:44:cb:53:
          7e:eb:28:9b
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN/5s0lfyB+mpbyeXQgX
@@ -270,28 +270,4 @@
 awNpFw9Nz258ms574wZwe00XN0ZUQxVM8ZmVTVzRV5YRVnuza/Guc5iK9Olf6QDj
 hwGCPZYPQQpZir/keXgou3NSzZEMeFkVhWRGkCGi9YHMNLH8bxJRn77B8GKETuY1
 OWFEy1N+6yib
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=0 (CN=Target) -----
-ERROR: Signature verification failed
-ERROR: VerifySignedData failed
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0wIChDTj1UYXJnZXQpIC0tLS0tCkVSUk9SOiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxlZApFUlJPUjogVmVyaWZ5U2lnbmVkRGF0YSBmYWlsZWQKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/generate-chains.py
similarity index 72%
rename from src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
rename to src/net/data/verify_certificate_chain_unittest/target-wrong-signature/generate-chains.py
index b803a39..55c7e16 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-target-wrong-signature.py
+++ b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/generate-chains.py
@@ -7,6 +7,9 @@
 else should check out, however the digital signature contained in the target
 certificate is wrong."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -24,16 +27,5 @@
 # Target certificate, signed using |wrong_intermediate| NOT |intermediate|.
 target = common.create_end_entity_certificate('Target', wrong_intermediate)
 
-chain = [target, intermediate]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=0 (CN=Target) -----
-ERROR: Signature verification failed
-ERROR: VerifySignedData failed
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Intermediate.key b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Intermediate.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Intermediate.key
rename to src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Intermediate.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Intermediate_1.key b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Intermediate_1.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Intermediate_1.key
rename to src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Intermediate_1.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Root.key b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Root.key
rename to src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Target.key b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/target-wrong-signature/Target.key
rename to src/net/data/verify_certificate_chain_unittest/target-wrong-signature/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/main.test b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/main.test
new file mode 100644
index 0000000..b4423e8
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/target-wrong-signature/main.test
@@ -0,0 +1,9 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=0 (CN=Target) -----
+ERROR: Signature verification failed
+ERROR: VerifySignedData failed
+
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem b/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
deleted file mode 100644
index d22b60a..0000000
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-non-self-signed-root.pem
+++ /dev/null
@@ -1,288 +0,0 @@
-[Created by: generate-unconstrained-non-self-signed-root.py]
-
-Certificate chain with 1 intermediate and a non-self-signed trust anchor.
-Verification should succeed, it doesn't matter that the root was not
-self-signed if it is designated as the trust anchor.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:93:b3:d1:c3:5a:65:e4:3d:9f:6b:e8:74:8f:f6:
-                    49:cf:87:eb:0e:34:31:0c:44:b5:74:82:4e:d0:c2:
-                    c1:cb:36:98:d2:82:b2:a0:36:27:01:fa:1e:46:ac:
-                    ac:fc:15:41:72:54:c8:af:ee:15:31:bd:44:6a:da:
-                    ec:4c:a8:b9:c4:47:ca:72:93:7b:11:02:22:43:bc:
-                    1c:7c:26:b7:93:d7:88:af:75:cb:43:3f:94:13:2c:
-                    8d:b7:c9:ac:0e:28:78:65:1c:87:69:d3:f0:f0:bd:
-                    c4:39:7e:3c:77:cf:8c:82:a4:2c:81:de:1c:97:c6:
-                    3d:8f:b2:17:86:4d:85:62:01:bb:fd:b3:c2:e2:3b:
-                    61:36:cd:cc:4d:4d:59:03:39:b9:5c:be:0d:55:f1:
-                    49:cf:33:a2:14:22:41:6a:08:68:b5:3f:d6:9e:49:
-                    16:88:14:72:6a:f4:ed:74:f9:d5:79:d2:b6:0a:2a:
-                    e7:42:67:31:1a:17:b1:7b:47:00:d9:fa:bc:35:bf:
-                    8c:cd:36:16:37:cc:3b:9b:9a:5d:87:86:c0:68:a6:
-                    93:a2:2f:1b:01:89:f1:39:67:c8:38:05:c6:8e:4a:
-                    a6:52:31:fe:f6:5c:96:61:c6:36:c5:c8:5d:53:39:
-                    3e:3d:5a:f5:0a:14:0e:f8:ae:20:4e:4b:da:e9:ed:
-                    ed:9d
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                BD:4E:69:85:59:D4:51:15:94:CD:DA:AD:CA:6B:3E:77:12:65:07:03
-            X509v3 Authority Key Identifier: 
-                keyid:09:46:B4:2B:37:45:A9:E7:56:0E:E3:B1:47:93:F7:5F:E3:5C:E2:E4
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         ae:c7:48:7b:63:f9:09:1c:52:c0:e7:65:ce:2d:d3:d9:89:de:
-         c0:ce:b4:c6:07:b2:33:9c:80:3e:eb:c0:cd:6a:7c:18:fa:2c:
-         e7:b3:d9:c5:01:0f:39:4a:b3:10:29:0d:84:ea:2a:13:20:f1:
-         d9:e1:8c:04:b6:11:73:de:9e:1f:2c:bf:cb:17:98:b6:d6:0a:
-         5e:b9:81:ee:93:c8:a4:ed:51:ba:d1:95:c1:36:c4:e4:a2:26:
-         08:77:76:4a:56:05:b2:9c:16:f0:10:86:a1:2b:15:75:cb:bb:
-         02:5d:50:16:85:4c:c3:06:41:c0:b6:49:99:a3:26:c2:8f:95:
-         39:ef:f5:4e:1c:c9:6b:1e:e5:8d:1e:58:82:9d:64:7a:d7:59:
-         84:7e:94:32:08:b8:55:0a:30:77:96:26:31:ba:6a:37:9f:12:
-         21:c6:f7:d3:ba:72:ae:08:29:3e:f9:0c:0e:7c:1c:29:68:d5:
-         4f:a6:49:8a:c9:86:aa:20:b2:69:21:c5:5f:cd:a1:13:86:01:
-         0f:80:87:79:b1:9b:72:3a:ca:a7:70:98:b6:07:48:c5:53:80:
-         a1:b1:ed:2e:9a:cb:5f:f8:d2:95:f6:c0:b1:5a:df:e8:7c:f6:
-         49:89:11:0e:1c:75:23:fe:20:62:bd:df:d5:5f:40:94:31:1b:
-         78:24:89:4b
------BEGIN CERTIFICATE-----
-MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
-cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCTs9HD
-WmXkPZ9r6HSP9knPh+sONDEMRLV0gk7QwsHLNpjSgrKgNicB+h5GrKz8FUFyVMiv
-7hUxvURq2uxMqLnER8pyk3sRAiJDvBx8JreT14ivdctDP5QTLI23yawOKHhlHIdp
-0/DwvcQ5fjx3z4yCpCyB3hyXxj2PsheGTYViAbv9s8LiO2E2zcxNTVkDOblcvg1V
-8UnPM6IUIkFqCGi1P9aeSRaIFHJq9O10+dV50rYKKudCZzEaF7F7RwDZ+rw1v4zN
-NhY3zDubml2HhsBoppOiLxsBifE5Z8g4BcaOSqZSMf72XJZhxjbFyF1TOT49WvUK
-FA74riBOS9rp7e2dAgMBAAGjgekwgeYwHQYDVR0OBBYEFL1OaYVZ1FEVlM3arcpr
-PncSZQcDMB8GA1UdIwQYMBaAFAlGtCs3RannVg7jsUeT91/jXOLkMD8GCCsGAQUF
-BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
-aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
-dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEArsdIe2P5CRxSwOdlzi3T
-2YnewM60xgeyM5yAPuvAzWp8GPos57PZxQEPOUqzECkNhOoqEyDx2eGMBLYRc96e
-Hyy/yxeYttYKXrmB7pPIpO1RutGVwTbE5KImCHd2SlYFspwW8BCGoSsVdcu7Al1Q
-FoVMwwZBwLZJmaMmwo+VOe/1ThzJax7ljR5Ygp1ketdZhH6UMgi4VQowd5YmMbpq
-N58SIcb307pyrggpPvkMDnwcKWjVT6ZJismGqiCyaSHFX82hE4YBD4CHebGbcjrK
-p3CYtgdIxVOAobHtLprLX/jSlfbAsVrf6Hz2SYkRDhx1I/4gYr3f1V9AlDEbeCSJ
-Sw==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:c0:30:d7:f6:89:0d:6b:6d:53:3a:d2:21:79:22:
-                    41:47:3c:1a:d5:dc:a9:ea:17:9f:a0:84:bb:b3:41:
-                    f0:ac:7d:48:81:44:71:41:b9:aa:32:ad:49:10:44:
-                    31:00:2d:84:01:e1:2d:e5:77:fd:fe:c3:bc:bd:a3:
-                    3d:95:c4:94:68:f8:8f:05:41:d3:6f:94:b9:d5:2e:
-                    84:6f:b2:8a:e1:f2:20:ae:56:1b:7c:f0:58:3c:c6:
-                    82:ac:85:a6:19:d3:a0:1b:3a:7e:ff:d8:d6:5a:a3:
-                    75:56:a9:20:26:52:48:0e:be:25:2a:c8:f5:39:22:
-                    8f:c7:3b:e2:60:8b:4c:32:34:b3:c9:0f:88:b8:04:
-                    00:63:25:c8:f8:25:43:79:bb:7a:a7:4a:52:36:f2:
-                    dd:3a:c9:25:5e:c9:55:6f:2f:ac:7f:ea:88:86:53:
-                    7e:dc:de:49:3a:6e:c7:33:c4:ae:73:1a:85:af:4d:
-                    cc:b0:19:40:54:8c:69:96:6c:8a:7e:0e:8e:17:47:
-                    2b:83:45:76:d5:f0:23:48:e9:09:49:99:fd:53:6e:
-                    81:30:5f:19:09:f5:a3:b0:b0:28:24:40:00:6c:e8:
-                    c9:cc:7c:9d:f6:32:9f:c8:44:19:b1:48:8f:f3:8f:
-                    66:3e:fa:5b:7f:df:c5:af:b2:8f:0d:7e:8e:83:10:
-                    22:8f
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                09:46:B4:2B:37:45:A9:E7:56:0E:E3:B1:47:93:F7:5F:E3:5C:E2:E4
-            X509v3 Authority Key Identifier: 
-                keyid:47:BA:6A:C7:D7:B6:D1:62:EE:2F:10:C5:1B:4E:09:B4:11:29:89:3E
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         a8:a8:01:73:29:1c:e7:16:98:ae:60:46:2f:71:42:3d:82:c7:
-         b9:b2:84:6e:b1:4f:04:94:a3:00:37:7c:d0:51:9f:44:90:54:
-         f3:58:10:da:f5:0d:ac:d7:cb:f4:7c:e8:d9:9e:cf:d6:2c:5d:
-         7c:d0:13:e1:e0:b3:ef:05:23:f3:8f:14:a5:fd:15:38:12:86:
-         b4:13:22:82:34:89:12:99:2f:77:50:86:f5:1f:1a:e2:77:27:
-         b0:ef:10:93:71:f8:83:76:59:c3:6d:c4:7b:11:5d:07:96:54:
-         91:d1:a3:0b:58:ef:ee:b1:80:ca:c2:0c:d2:31:8d:20:89:7b:
-         1b:c4:9f:df:53:31:ab:76:7b:71:b9:75:aa:ce:d6:be:8d:48:
-         0b:55:8c:64:83:39:a5:9e:c2:7e:6c:17:95:2c:29:9e:8a:2a:
-         9f:e9:6b:c6:28:c9:41:3f:33:2a:34:df:d2:b6:d0:19:04:cf:
-         40:a4:f8:74:ca:70:32:eb:44:34:d5:2a:a5:99:8f:8d:8b:62:
-         d3:76:67:b8:18:f7:ee:d1:73:8c:8b:e2:a7:a0:d2:61:48:05:
-         e1:f3:24:9f:4f:ef:2d:b8:cd:aa:86:13:85:d1:06:75:b0:f4:
-         d2:44:0a:9a:24:a7:1e:b8:f8:ef:55:59:d6:2e:4f:68:96:24:
-         96:bc:d0:29
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwDDX9okN
-a21TOtIheSJBRzwa1dyp6hefoIS7s0HwrH1IgURxQbmqMq1JEEQxAC2EAeEt5Xf9
-/sO8vaM9lcSUaPiPBUHTb5S51S6Eb7KK4fIgrlYbfPBYPMaCrIWmGdOgGzp+/9jW
-WqN1VqkgJlJIDr4lKsj1OSKPxzviYItMMjSzyQ+IuAQAYyXI+CVDebt6p0pSNvLd
-OsklXslVby+sf+qIhlN+3N5JOm7HM8SucxqFr03MsBlAVIxplmyKfg6OF0crg0V2
-1fAjSOkJSZn9U26BMF8ZCfWjsLAoJEAAbOjJzHyd9jKfyEQZsUiP849mPvpbf9/F
-r7KPDX6OgxAijwIDAQABo4HLMIHIMB0GA1UdDgQWBBQJRrQrN0Wp51YO47FHk/df
-41zi5DAfBgNVHSMEGDAWgBRHumrH17bRYu4vEMUbTgm0ESmJPjA3BggrBgEFBQcB
-AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
-BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AKioAXMpHOcWmK5gRi9xQj2Cx7myhG6xTwSUowA3fNBRn0SQVPNYENr1DazXy/R8
-6Nmez9YsXXzQE+Hgs+8FI/OPFKX9FTgShrQTIoI0iRKZL3dQhvUfGuJ3J7DvEJNx
-+IN2WcNtxHsRXQeWVJHRowtY7+6xgMrCDNIxjSCJexvEn99TMat2e3G5darO1r6N
-SAtVjGSDOaWewn5sF5UsKZ6KKp/pa8YoyUE/Myo039K20BkEz0Ck+HTKcDLrRDTV
-KqWZj42LYtN2Z7gY9+7Rc4yL4qeg0mFIBeHzJJ9P7y24zaqGE4XRBnWw9NJECpok
-px64+O9VWdYuT2iWJJa80Ck=
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=UberRoot
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:ea:8d:25:cf:22:ba:d5:46:c6:8f:ef:f9:af:45:
-                    11:c9:f1:ae:59:85:5d:09:58:3a:af:49:f4:3f:36:
-                    1b:fc:89:20:f7:35:91:b8:7e:3e:75:ca:27:a4:92:
-                    9b:3f:a8:e4:36:84:4b:39:55:4d:93:a6:21:0e:c6:
-                    c7:09:aa:7b:70:03:89:5a:b5:d2:52:07:68:e2:f6:
-                    be:e5:6b:8a:fa:75:2e:ab:b4:43:0e:f3:27:c4:79:
-                    ee:60:62:98:b0:3e:ff:05:e0:b5:74:2b:00:4e:6c:
-                    00:7f:ce:a6:bd:f8:a0:2d:1b:8b:c4:4e:ee:47:d2:
-                    78:bb:f6:bb:ae:09:d7:71:6e:ff:47:73:ea:2b:00:
-                    7a:4b:71:a4:9e:6f:5e:98:25:40:ec:70:81:ee:0a:
-                    e4:c6:4d:70:41:74:69:11:d1:d8:75:a6:7f:42:89:
-                    cf:9f:25:aa:68:dd:f7:19:6b:76:be:7c:a8:99:fc:
-                    35:f6:0a:cb:ff:31:7a:48:93:a1:0b:51:1d:70:97:
-                    bb:7c:c7:30:09:0c:8f:56:6e:fd:e3:48:8a:f2:e7:
-                    dc:f7:0a:ab:ed:7d:f7:0c:17:4d:ec:7b:72:fe:7c:
-                    63:49:5c:64:06:d5:e0:09:8d:26:9d:27:96:f0:4c:
-                    41:22:50:f7:e5:bb:e7:b9:09:5c:74:6e:00:cd:a5:
-                    54:c3
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                47:BA:6A:C7:D7:B6:D1:62:EE:2F:10:C5:1B:4E:09:B4:11:29:89:3E
-            X509v3 Authority Key Identifier: 
-                keyid:07:80:F2:64:04:3C:8E:5C:B9:3E:E5:22:7C:93:29:EA:1B:79:A6:59
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/UberRoot.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/UberRoot.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         80:5b:ee:28:80:48:ee:50:45:d0:d0:b4:53:db:85:df:46:02:
-         54:6b:90:0c:63:15:d4:e5:d7:9c:30:70:b0:08:3c:a6:f3:31:
-         02:dd:a3:2a:52:5e:04:76:fd:ac:87:6e:61:64:25:94:67:ad:
-         0a:57:60:54:f1:2f:5a:ed:51:67:2e:f5:2d:9d:6f:f5:f4:aa:
-         81:7f:a0:44:be:4f:e0:4e:48:22:e7:d6:96:c0:6b:d9:5d:a2:
-         14:79:dc:80:1b:f1:6e:fb:ab:8d:08:f1:57:33:54:67:b9:e6:
-         97:0e:49:7d:43:ba:a1:4c:05:3e:05:b3:a8:ce:ab:9b:1e:4a:
-         9c:45:b8:99:a0:19:a5:41:b9:19:43:83:6d:8c:ba:c7:cc:09:
-         d4:95:c5:d5:ad:05:8a:78:d6:61:47:7d:d2:9b:ba:5b:1c:d8:
-         64:1c:63:9b:33:5f:90:e4:ee:f3:37:55:e3:22:69:14:30:e8:
-         63:45:bc:93:ab:dd:90:04:18:c2:96:e0:5a:8a:62:24:77:8a:
-         53:b5:45:cf:d3:d8:99:a7:40:7f:62:c4:ec:0f:b4:f5:f0:53:
-         a2:9d:c9:2b:7c:0d:69:3b:0a:d7:f3:94:8f:58:f5:e8:4c:fb:
-         c6:c2:29:35:90:2f:a4:58:5c:ae:f7:04:69:5b:a3:08:57:85:
-         5f:12:b6:b9
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
-MIIDcTCCAlmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhVYmVy
-Um9vdDAeFw0xNTAxMDExMjAwMDBaFw0xNjAxMDExMjAwMDBaMA8xDTALBgNVBAMM
-BFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDqjSXPIrrVRsaP
-7/mvRRHJ8a5ZhV0JWDqvSfQ/Nhv8iSD3NZG4fj51yiekkps/qOQ2hEs5VU2TpiEO
-xscJqntwA4latdJSB2ji9r7la4r6dS6rtEMO8yfEee5gYpiwPv8F4LV0KwBObAB/
-zqa9+KAtG4vETu5H0ni79ruuCddxbv9Hc+orAHpLcaSeb16YJUDscIHuCuTGTXBB
-dGkR0dh1pn9Cic+fJapo3fcZa3a+fKiZ/DX2Csv/MXpIk6ELUR1wl7t8xzAJDI9W
-bv3jSIry59z3CqvtffcMF03se3L+fGNJXGQG1eAJjSadJ5bwTEEiUPflu+e5CVx0
-bgDNpVTDAgMBAAGjgdMwgdAwHQYDVR0OBBYEFEe6asfXttFi7i8QxRtOCbQRKYk+
-MB8GA1UdIwQYMBaAFAeA8mQEPI5cuT7lInyTKeobeaZZMDsGCCsGAQUFBwEBBC8w
-LTArBggrBgEFBQcwAoYfaHR0cDovL3VybC1mb3ItYWlhL1ViZXJSb290LmNlcjAw
-BgNVHR8EKTAnMCWgI6Ahhh9odHRwOi8vdXJsLWZvci1jcmwvVWJlclJvb3QuY3Js
-MA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUA
-A4IBAQCAW+4ogEjuUEXQ0LRT24XfRgJUa5AMYxXU5decMHCwCDym8zEC3aMqUl4E
-dv2sh25hZCWUZ60KV2BU8S9a7VFnLvUtnW/19KqBf6BEvk/gTkgi59aWwGvZXaIU
-edyAG/Fu+6uNCPFXM1RnueaXDkl9Q7qhTAU+BbOozqubHkqcRbiZoBmlQbkZQ4Nt
-jLrHzAnUlcXVrQWKeNZhR33Sm7pbHNhkHGObM1+Q5O7zN1XjImkUMOhjRbyTq92Q
-BBjCluBaimIkd4pTtUXP09iZp0B/YsTsD7T18FOinckrfA1pOwrX85SPWPXoTPvG
-wik1kC+kWFyu9wRpW6MIV4VfEra5
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem b/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
deleted file mode 100644
index d059ac4..0000000
--- a/src/net/data/verify_certificate_chain_unittest/unconstrained-root-basic-constraints-ca-false.pem
+++ /dev/null
@@ -1,289 +0,0 @@
-[Created by: generate-unconstrained-root-basic-constraints-ca-false.py]
-
-Certificate chain with 1 intermediate and a trust anchor. The trust anchor
-has a basic constraints extension that indicates it is NOT a CA. Verification
-is expected to succeed as constraints on the root certificate are not applied
-to the trust anchor.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:bc:8b:25:82:f8:93:bd:ae:89:cf:59:59:0a:5a:
-                    05:f9:59:76:ef:5a:8a:1a:65:8f:37:99:8b:21:5d:
-                    df:47:22:c1:d4:94:88:15:b6:14:ba:c1:ec:b8:ac:
-                    da:f7:0f:bb:cf:61:fa:f5:cb:ce:e7:a7:27:15:97:
-                    19:3a:28:b6:e6:51:7f:09:20:f0:36:a3:cc:cf:8e:
-                    e7:8d:87:c2:3d:d2:66:e7:01:0a:dc:df:fe:eb:5a:
-                    4e:8e:07:de:2b:26:95:d3:8f:63:e2:5b:ba:0c:fc:
-                    a5:1c:d2:43:ee:7d:90:06:5b:87:23:ad:a7:4f:8e:
-                    ee:0e:2a:e3:94:24:ac:d5:f7:bc:ab:2a:66:76:e4:
-                    78:0a:3a:15:44:c6:1a:47:9b:3b:54:b6:b7:76:d9:
-                    80:5f:d0:07:b8:48:40:00:d0:6e:3e:cd:a4:a5:08:
-                    3a:9b:04:c9:68:c5:d5:3b:0d:a2:24:0a:89:ce:09:
-                    0c:90:7d:1c:4c:24:7c:99:f0:38:df:76:83:6f:91:
-                    5f:54:2a:d9:89:d3:cc:6e:3c:c1:90:9b:95:5c:32:
-                    77:fd:6a:5c:fb:9d:c9:5b:b3:e0:9d:93:9f:86:78:
-                    6b:69:ad:ce:92:3d:ab:48:e6:d8:7c:fc:b2:55:43:
-                    50:d1:2f:6e:a0:5e:d5:e4:99:19:ec:05:5b:d5:f2:
-                    2b:fb
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                3B:DE:3D:EC:2F:D9:87:55:C0:F8:45:12:9B:5D:4E:DD:4D:04:19:9A
-            X509v3 Authority Key Identifier: 
-                keyid:42:65:98:98:17:C6:9F:8F:D0:8C:4C:77:98:94:8A:0A:81:D7:64:D1
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         3b:3a:6d:c6:68:b7:6f:f7:d3:35:38:a9:38:d1:6c:19:e1:65:
-         a0:8f:4a:2d:88:e0:ae:a2:d0:41:21:a0:88:ca:0b:07:bf:3b:
-         6b:4a:4e:57:96:65:0b:a1:f9:2c:82:dd:5b:4f:ae:27:ee:33:
-         2c:10:81:98:79:43:e1:c7:d3:32:0e:cd:c6:7b:c0:ec:f6:f9:
-         a5:e1:d9:dd:d8:d8:84:9f:2f:ae:d1:1a:36:ac:a1:c6:3b:23:
-         fb:e7:62:5a:eb:e9:80:cb:80:32:b4:d6:d6:79:9d:55:43:63:
-         5e:d0:af:a4:19:2d:64:40:8e:6b:bd:ad:72:70:b4:91:97:7b:
-         e3:46:22:8f:ac:5b:a0:55:07:09:1e:68:c4:4b:94:1e:3d:e6:
-         e3:28:55:5c:ad:20:7c:52:71:e9:24:f6:bd:81:61:53:f0:20:
-         06:81:58:af:ed:73:22:9d:71:5d:09:78:9a:bb:dd:53:f1:d1:
-         27:48:c7:ef:5b:02:40:56:07:c9:c6:ec:60:88:41:cc:0b:15:
-         5c:65:8c:28:15:15:76:19:f9:38:79:f3:3c:1b:de:c2:c6:87:
-         f8:d2:f8:48:4e:6e:e8:5a:b8:b0:2e:2a:76:67:95:a9:50:f2:
-         ad:2c:6b:d4:c0:72:e0:58:b8:0b:20:5b:bb:84:80:69:50:b9:
-         b7:9c:05:9d
------BEGIN CERTIFICATE-----
-MIIDjTCCAnWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxJbnRl
-cm1lZGlhdGUwHhcNMTUwMTAxMTIwMDAwWhcNMTYwMTAxMTIwMDAwWjARMQ8wDQYD
-VQQDDAZUYXJnZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC8iyWC
-+JO9ronPWVkKWgX5WXbvWooaZY83mYshXd9HIsHUlIgVthS6wey4rNr3D7vPYfr1
-y87npycVlxk6KLbmUX8JIPA2o8zPjueNh8I90mbnAQrc3/7rWk6OB94rJpXTj2Pi
-W7oM/KUc0kPufZAGW4cjradPju4OKuOUJKzV97yrKmZ25HgKOhVExhpHmztUtrd2
-2YBf0Ae4SEAA0G4+zaSlCDqbBMloxdU7DaIkConOCQyQfRxMJHyZ8DjfdoNvkV9U
-KtmJ08xuPMGQm5VcMnf9alz7nclbs+Cdk5+GeGtprc6SPatI5th8/LJVQ1DRL26g
-XtXkmRnsBVvV8iv7AgMBAAGjgekwgeYwHQYDVR0OBBYEFDvePewv2YdVwPhFEptd
-Tt1NBBmaMB8GA1UdIwQYMBaAFEJlmJgXxp+P0IxMd5iUigqB12TRMD8GCCsGAQUF
-BwEBBDMwMTAvBggrBgEFBQcwAoYjaHR0cDovL3VybC1mb3ItYWlhL0ludGVybWVk
-aWF0ZS5jZXIwNAYDVR0fBC0wKzApoCegJYYjaHR0cDovL3VybC1mb3ItY3JsL0lu
-dGVybWVkaWF0ZS5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUF
-BwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAOzptxmi3b/fTNTipONFs
-GeFloI9KLYjgrqLQQSGgiMoLB787a0pOV5ZlC6H5LILdW0+uJ+4zLBCBmHlD4cfT
-Mg7NxnvA7Pb5peHZ3djYhJ8vrtEaNqyhxjsj++diWuvpgMuAMrTW1nmdVUNjXtCv
-pBktZECOa72tcnC0kZd740Yij6xboFUHCR5oxEuUHj3m4yhVXK0gfFJx6ST2vYFh
-U/AgBoFYr+1zIp1xXQl4mrvdU/HRJ0jH71sCQFYHycbsYIhBzAsVXGWMKBUVdhn5
-OHnzPBvewsaH+NL4SE5u6Fq4sC4qdmeVqVDyrSxr1MBy4Fi4CyBbu4SAaVC5t5wF
-nQ==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:c3:e9:a8:bd:06:60:69:85:3a:a7:f0:03:c0:2a:
-                    af:29:6c:9e:43:70:27:de:bf:59:4c:a1:8a:b0:25:
-                    54:93:d4:5d:50:37:f6:97:88:c1:14:95:cc:ae:d9:
-                    4f:b7:b2:b4:79:43:67:2e:94:02:13:87:9d:96:8d:
-                    8b:11:04:27:d9:77:6d:d1:46:fa:c0:39:a9:1d:38:
-                    9e:96:06:fb:d9:43:49:de:ed:92:7a:a2:74:48:c6:
-                    06:8e:52:22:53:57:05:b1:3a:89:8d:d6:33:a1:46:
-                    10:87:fd:3d:72:de:7d:d3:12:ab:f8:1a:26:06:41:
-                    de:09:bb:b6:50:58:b6:48:69:4a:d7:c9:b0:23:b5:
-                    0d:bf:e5:11:0c:03:ed:42:37:79:91:86:cd:c6:95:
-                    3e:8b:4e:8e:85:79:44:22:0f:ab:8b:37:9c:46:55:
-                    d1:3c:4e:80:bc:35:37:b7:c7:ee:f7:b4:49:0c:33:
-                    67:8d:9f:61:72:02:23:2a:74:5f:f5:9c:d8:4b:02:
-                    bf:47:c7:d9:b2:13:6b:0e:79:3d:cd:8e:d8:90:be:
-                    96:5e:1b:4f:ad:a5:65:85:39:5f:c3:d9:99:43:09:
-                    8a:cf:0a:4f:a5:87:64:f3:08:7c:b0:4c:59:e7:22:
-                    dd:5d:97:d1:a6:68:b0:ee:fc:7d:bc:ec:50:15:fd:
-                    b5:01
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                42:65:98:98:17:C6:9F:8F:D0:8C:4C:77:98:94:8A:0A:81:D7:64:D1
-            X509v3 Authority Key Identifier: 
-                keyid:33:6B:8D:78:C0:44:69:F0:4C:2A:3C:D6:97:9C:61:81:70:86:42:C7
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         1f:29:f6:78:fc:b5:44:a5:bf:ab:a3:bc:35:44:b9:52:01:09:
-         3f:5f:dd:97:5e:d0:2b:ed:3d:f1:de:0c:47:a0:97:b6:7b:fe:
-         43:c1:79:05:f2:b5:e7:9d:10:c6:12:0f:86:a7:d1:dd:57:d0:
-         dc:c7:73:62:37:6f:07:39:2a:6c:7a:7a:b8:a7:7e:dc:62:09:
-         54:e8:4f:5e:31:e2:d4:8f:a5:aa:91:cc:a0:a3:b9:85:d6:0b:
-         66:7d:f2:77:40:25:48:10:a1:fc:ce:b2:5c:15:0c:af:0e:a2:
-         9f:eb:c7:e5:9a:00:de:85:1b:b9:9b:54:a4:68:f7:7c:b5:dd:
-         6a:bb:27:01:9c:b5:8f:8a:b9:2e:b3:88:8d:17:29:1f:ee:c0:
-         e1:7c:ef:5b:15:27:c2:a0:29:bb:2a:a9:f4:ba:b7:3a:f2:9d:
-         17:75:3a:39:05:2f:90:23:9a:9a:82:6d:d7:7b:31:88:03:40:
-         50:99:62:a9:e6:04:2c:d4:8f:2c:85:12:1e:c9:d0:e5:f4:ea:
-         8c:d5:55:a4:95:e4:03:5a:d1:4e:f2:27:a2:95:7f:6f:31:45:
-         ed:ca:4f:20:5e:30:e4:65:cf:40:14:3a:97:c6:d0:b2:4e:b3:
-         dc:df:70:ed:c8:41:de:1e:15:63:19:51:52:7e:b0:87:9d:ba:
-         03:b0:70:72
------BEGIN CERTIFICATE-----
-MIIDbTCCAlWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowFzEVMBMGA1UEAwwMSW50
-ZXJtZWRpYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+movQZg
-aYU6p/ADwCqvKWyeQ3An3r9ZTKGKsCVUk9RdUDf2l4jBFJXMrtlPt7K0eUNnLpQC
-E4edlo2LEQQn2Xdt0Ub6wDmpHTielgb72UNJ3u2SeqJ0SMYGjlIiU1cFsTqJjdYz
-oUYQh/09ct590xKr+BomBkHeCbu2UFi2SGlK18mwI7UNv+URDAPtQjd5kYbNxpU+
-i06OhXlEIg+rizecRlXRPE6AvDU3t8fu97RJDDNnjZ9hcgIjKnRf9ZzYSwK/R8fZ
-shNrDnk9zY7YkL6WXhtPraVlhTlfw9mZQwmKzwpPpYdk8wh8sExZ5yLdXZfRpmiw
-7vx9vOxQFf21AQIDAQABo4HLMIHIMB0GA1UdDgQWBBRCZZiYF8afj9CMTHeYlIoK
-gddk0TAfBgNVHSMEGDAWgBQza414wERp8EwqPNaXnGGBcIZCxzA3BggrBgEFBQcB
-AQQrMCkwJwYIKwYBBQUHMAKGG2h0dHA6Ly91cmwtZm9yLWFpYS9Sb290LmNlcjAs
-BgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vdXJsLWZvci1jcmwvUm9vdC5jcmwwDgYD
-VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
-AB8p9nj8tUSlv6ujvDVEuVIBCT9f3Zde0CvtPfHeDEegl7Z7/kPBeQXyteedEMYS
-D4an0d1X0NzHc2I3bwc5Kmx6erinftxiCVToT14x4tSPpaqRzKCjuYXWC2Z98ndA
-JUgQofzOslwVDK8Oop/rx+WaAN6FG7mbVKRo93y13Wq7JwGctY+KuS6ziI0XKR/u
-wOF871sVJ8KgKbsqqfS6tzrynRd1OjkFL5AjmpqCbdd7MYgDQFCZYqnmBCzUjyyF
-Eh7J0OX06ozVVaSV5ANa0U7yJ6KVf28xRe3KTyBeMORlz0AUOpfG0LJOs9zfcO3I
-Qd4eFWMZUVJ+sIedugOwcHI=
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:cb:e5:ad:13:ed:b3:af:87:37:d4:06:0d:fa:79:
-                    79:4c:d1:e8:6b:7d:65:e7:52:8e:87:27:21:d4:22:
-                    40:47:08:d4:74:86:7b:67:3e:91:b4:ff:d7:79:0a:
-                    e6:1e:d8:7f:1f:1f:5d:b5:02:e3:2a:af:a1:93:89:
-                    83:ae:71:7c:64:06:64:fc:ff:08:92:b0:ab:16:21:
-                    87:5f:3a:05:8c:d6:64:42:5e:13:c0:fc:6e:38:d1:
-                    d1:65:2b:a5:6a:10:ba:ba:f0:f0:0f:f5:3a:23:c5:
-                    cf:ee:39:a1:51:35:84:1d:1f:23:20:e5:64:31:2c:
-                    b5:d4:ac:70:47:a8:7d:ef:45:f5:04:53:a7:e0:7d:
-                    cc:ea:b4:58:13:bb:9c:f6:0b:5b:ac:9b:a8:61:f3:
-                    ac:a2:8e:94:82:28:8a:ab:16:57:cd:9e:75:1c:6b:
-                    6c:8f:33:47:28:e2:fc:91:82:d7:81:df:9c:27:3b:
-                    dd:6e:97:b1:67:9a:2a:cc:dd:54:c7:b7:e8:d6:57:
-                    c1:41:8f:18:e3:68:7f:62:33:36:dc:26:53:f5:15:
-                    c5:97:82:54:71:b6:44:dd:52:7b:ca:af:de:2f:66:
-                    70:a2:aa:8e:f1:8b:57:46:76:51:1d:38:ef:4f:b2:
-                    4c:45:ca:f0:44:da:f8:7d:07:90:64:42:e5:18:33:
-                    9d:b1
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                33:6B:8D:78:C0:44:69:F0:4C:2A:3C:D6:97:9C:61:81:70:86:42:C7
-            X509v3 Authority Key Identifier: 
-                keyid:33:6B:8D:78:C0:44:69:F0:4C:2A:3C:D6:97:9C:61:81:70:86:42:C7
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:FALSE
-    Signature Algorithm: sha256WithRSAEncryption
-         15:0d:7f:73:f4:b2:c3:bc:a2:c4:e4:d4:4f:2a:d9:59:40:6c:
-         85:d6:47:3c:b9:bd:78:4e:6f:f5:2a:fe:17:03:21:2f:16:eb:
-         2c:69:1b:1d:da:d3:c7:80:44:c0:64:eb:7e:08:92:64:57:f3:
-         cd:ef:4f:4f:96:c9:5f:61:03:1e:15:7c:b1:34:db:83:4f:77:
-         76:7d:8a:19:38:f5:c8:a6:5b:19:2f:96:6d:d0:35:b7:d7:52:
-         8c:52:2b:f5:6f:b2:ec:5e:4e:5a:22:7e:7a:25:33:b7:20:12:
-         6a:89:a4:f4:49:47:82:13:59:c8:c8:0c:1b:83:d0:03:13:dc:
-         e7:fa:77:66:c1:cd:95:8e:71:b3:63:ce:1d:cd:66:b9:f0:f0:
-         46:7d:cc:60:0f:4f:82:81:c6:48:71:61:09:73:bd:65:1d:93:
-         26:7c:55:9b:35:62:af:98:0c:4d:ce:3e:32:3b:1e:80:07:26:
-         5b:9a:fd:29:de:f0:60:7c:37:34:4e:d0:42:c7:d2:14:7a:41:
-         ac:e9:d7:f4:70:d0:14:2b:3d:4c:cf:a1:11:a0:3a:93:22:44:
-         7c:ef:8d:01:60:2d:92:72:45:57:41:4b:c2:26:21:31:e0:54:
-         cd:e0:8f:0c:a0:d7:90:86:1f:4d:03:3f:ac:e6:12:26:a9:2a:
-         9d:34:3f:e1
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
-MIIDYjCCAkqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMvlrRPts6+HN9QGDfp5
-eUzR6Gt9ZedSjocnIdQiQEcI1HSGe2c+kbT/13kK5h7Yfx8fXbUC4yqvoZOJg65x
-fGQGZPz/CJKwqxYhh186BYzWZEJeE8D8bjjR0WUrpWoQurrw8A/1OiPFz+45oVE1
-hB0fIyDlZDEstdSscEeofe9F9QRTp+B9zOq0WBO7nPYLW6ybqGHzrKKOlIIoiqsW
-V82edRxrbI8zRyji/JGC14HfnCc73W6XsWeaKszdVMe36NZXwUGPGONof2IzNtwm
-U/UVxZeCVHG2RN1Se8qv3i9mcKKqjvGLV0Z2UR0470+yTEXK8ETa+H0HkGRC5Rgz
-nbECAwEAAaOByDCBxTAdBgNVHQ4EFgQUM2uNeMBEafBMKjzWl5xhgXCGQscwHwYD
-VR0jBBgwFoAUM2uNeMBEafBMKjzWl5xhgXCGQscwNwYIKwYBBQUHAQEEKzApMCcG
-CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
-IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAVDX9z9LLDvKLE
-5NRPKtlZQGyF1kc8ub14Tm/1Kv4XAyEvFussaRsd2tPHgETAZOt+CJJkV/PN709P
-lslfYQMeFXyxNNuDT3d2fYoZOPXIplsZL5Zt0DW311KMUiv1b7LsXk5aIn56JTO3
-IBJqiaT0SUeCE1nIyAwbg9ADE9zn+ndmwc2VjnGzY84dzWa58PBGfcxgD0+CgcZI
-cWEJc71lHZMmfFWbNWKvmAxNzj4yOx6AByZbmv0p3vBgfDc0TtBCx9IUekGs6df0
-cNAUKz1Mz6ERoDqTIkR8740BYC2SckVXQUvCJiEx4FTN4I8MoNeQhh9NAz+s5hIm
-qSqdND/h
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem
similarity index 95%
rename from src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
rename to src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem
index a2f92bc..9502729 100644
--- a/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0.pem
+++ b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-violates-basic-constraints-pathlen-0.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 2 intermediates. The first intermediate has a basic
 constraints path length of 0, so it is a violation for it to have a subordinate
@@ -339,7 +339,7 @@
          3d:a5:88:dc:3b:fa:b4:ea:e0:b1:e6:e3:f8:6c:b1:21:3d:4a:
          86:47:cf:63:16:b1:7c:50:9d:cb:5e:81:71:03:0d:2d:f5:94:
          ed:31:05:80
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDZTCCAk2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJIIVoK5MK8UpLkQZklN
@@ -359,27 +359,4 @@
 TZWYK3Yra0GpcNc68BQJHOrzWKT6V8R0Jzdt0ueitBy/t7KvBi65oUJaCMdsBNHN
 PYdvghNfZaVA/i1ckI+lQbk9pYjcO/q06uCx5uP4bLEhPUqGR89jFrF8UJ3LXoFx
 Aw0t9ZTtMQWA
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate2) -----
-ERROR: max_path_length reached
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUyKSAtLS0tLQpFUlJPUjogbWF4X3BhdGhfbGVuZ3RoIHJlYWNoZWQKCg==
------END ERRORS-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/generate-chains.py
similarity index 74%
rename from src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
rename to src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/generate-chains.py
index 30e375a..e8092f7 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-violates-basic-constraints-pathlen-0.py
+++ b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/generate-chains.py
@@ -7,6 +7,9 @@
 constraints path length of 0, so it is a violation for it to have a subordinate
 intermediate."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -26,15 +29,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate2)
 
-chain = [target, intermediate2, intermediate1]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = False
-errors = """----- Certificate i=1 (CN=Intermediate2) -----
-ERROR: max_path_length reached
-
-"""
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate2, intermediate1, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Intermediate1.key b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Intermediate1.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Intermediate1.key
rename to src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Intermediate1.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Intermediate2.key b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Intermediate2.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Intermediate2.key
rename to src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Intermediate2.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Root.key b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Root.key
rename to src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Target.key b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-basic-constraints-pathlen-0/Target.key
rename to src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test
new file mode 100644
index 0000000..03b4dcb
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/violates-basic-constraints-pathlen-0/main.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate2) -----
+ERROR: max_path_length reached
+
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
deleted file mode 100644
index 76fb0ab..0000000
--- a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-constrained-root.pem
+++ /dev/null
@@ -1,385 +0,0 @@
-[Created by: generate-violates-pathlen-1-constrained-root.py]
-
-Certificate chain with 2 intermediates and one end entity certificate. The
-root certificate has a pathlen:1 restriction, and constraints are enforced
-on this trust anchor making it an invalid chain.
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate2
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Target
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:de:94:68:45:da:85:0f:a4:ae:c4:db:49:1e:f6:
-                    48:ba:a3:18:67:fc:ab:06:24:25:9e:f9:7b:30:d6:
-                    4f:4f:1f:4b:ea:9a:27:2b:7d:d7:25:87:64:23:9c:
-                    96:d7:c6:cf:fc:6c:73:5b:da:e2:39:47:91:f5:a8:
-                    85:f1:ec:80:e7:f7:20:36:39:09:06:40:33:9f:98:
-                    49:9a:f7:bf:83:f2:eb:a8:1d:20:f3:1f:5f:e2:7e:
-                    e5:be:af:bf:ba:9d:74:0c:5a:e2:75:98:79:41:53:
-                    ca:c7:9b:91:b7:51:75:ae:f1:a0:fa:06:ee:ed:80:
-                    1f:01:c9:81:1a:73:9c:df:dd:9d:34:a3:f5:47:db:
-                    61:52:46:25:ba:d5:3d:08:54:a3:02:8c:4d:fe:d8:
-                    81:31:b1:2e:4c:48:b3:36:ba:45:e8:e8:41:d3:d1:
-                    2a:b4:1e:10:11:a4:51:45:f4:22:b9:9c:65:9a:dc:
-                    41:38:7b:eb:2e:66:ee:a0:eb:f3:44:c8:46:25:75:
-                    44:bf:99:7c:b1:ac:a9:b8:75:0e:65:a5:b1:1b:ca:
-                    fe:18:f7:a0:e4:24:4d:d8:5c:66:b3:cd:b1:c2:9a:
-                    e0:fe:68:71:7b:0a:28:10:38:fe:64:65:90:d0:2d:
-                    ba:e5:b4:a1:6a:97:13:80:9c:49:af:44:91:bf:f7:
-                    8d:d3
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                C6:90:8A:0F:9C:B9:F7:72:87:B8:1C:1F:E5:C2:A0:34:BE:F6:16:4C
-            X509v3 Authority Key Identifier: 
-                keyid:4D:EB:21:3C:9D:C2:4C:9B:05:E6:17:BD:AE:50:A2:8D:56:0E:9D:DC
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate2.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate2.crl
-
-            X509v3 Key Usage: critical
-                Digital Signature, Key Encipherment
-            X509v3 Extended Key Usage: 
-                TLS Web Server Authentication, TLS Web Client Authentication
-    Signature Algorithm: sha256WithRSAEncryption
-         7a:ea:15:42:29:c5:20:9a:c5:81:64:0b:7a:8a:1b:d7:ea:83:
-         61:c9:8d:00:94:11:8b:78:b5:c7:43:bd:fe:4d:83:ea:68:b0:
-         17:c2:6f:ff:3c:e1:1a:d4:33:34:c4:18:8c:a0:ad:92:b8:1e:
-         84:ef:f9:aa:9b:46:ee:51:43:9e:56:78:30:6d:c6:ae:37:41:
-         41:47:68:b4:84:00:c6:66:45:15:4d:11:6c:b3:e1:04:a4:ae:
-         56:bb:d1:96:62:da:e9:ab:d8:0c:8a:37:63:bc:b6:d4:ec:fa:
-         5f:5d:f4:ae:d8:94:f9:ce:cf:98:ac:f5:5a:22:f1:d4:76:2e:
-         9d:33:cb:e7:e7:dc:de:6d:f8:cc:36:51:33:f3:23:23:a3:35:
-         fa:84:2f:7f:64:74:9c:7b:e4:85:b4:e2:22:af:54:da:fb:66:
-         d4:1b:2a:bc:18:3d:26:04:05:52:1e:97:c9:d3:db:1e:4c:c5:
-         3e:8a:f0:dd:bc:05:eb:00:b1:3f:31:14:6a:1c:f9:de:e6:98:
-         9b:d6:87:8e:79:76:7a:6a:0d:26:c4:e1:d1:c1:ec:0d:0f:12:
-         85:98:9f:36:63:3e:14:4e:48:f8:d3:d8:13:81:00:fc:e1:b2:
-         f3:53:c8:e7:4d:8f:60:cf:44:9a:0d:dd:a4:95:d3:70:e2:7b:
-         2e:d3:e5:3c
------BEGIN CERTIFICATE-----
-MIIDkDCCAnigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
-cm1lZGlhdGUyMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowETEPMA0G
-A1UEAwwGVGFyZ2V0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3pRo
-RdqFD6SuxNtJHvZIuqMYZ/yrBiQlnvl7MNZPTx9L6ponK33XJYdkI5yW18bP/Gxz
-W9riOUeR9aiF8eyA5/cgNjkJBkAzn5hJmve/g/LrqB0g8x9f4n7lvq+/up10DFri
-dZh5QVPKx5uRt1F1rvGg+gbu7YAfAcmBGnOc392dNKP1R9thUkYlutU9CFSjAoxN
-/tiBMbEuTEizNrpF6OhB09EqtB4QEaRRRfQiuZxlmtxBOHvrLmbuoOvzRMhGJXVE
-v5l8saypuHUOZaWxG8r+GPeg5CRN2Fxms82xwprg/mhxewooEDj+ZGWQ0C265bSh
-apcTgJxJr0SRv/eN0wIDAQABo4HrMIHoMB0GA1UdDgQWBBTGkIoPnLn3coe4HB/l
-wqA0vvYWTDAfBgNVHSMEGDAWgBRN6yE8ncJMmwXmF72uUKKNVg6d3DBABggrBgEF
-BQcBAQQ0MDIwMAYIKwYBBQUHMAKGJGh0dHA6Ly91cmwtZm9yLWFpYS9JbnRlcm1l
-ZGlhdGUyLmNlcjA1BgNVHR8ELjAsMCqgKKAmhiRodHRwOi8vdXJsLWZvci1jcmwv
-SW50ZXJtZWRpYXRlMi5jcmwwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsG
-AQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEAeuoVQinFIJrFgWQL
-eoob1+qDYcmNAJQRi3i1x0O9/k2D6miwF8Jv/zzhGtQzNMQYjKCtkrgehO/5qptG
-7lFDnlZ4MG3GrjdBQUdotIQAxmZFFU0RbLPhBKSuVrvRlmLa6avYDIo3Y7y21Oz6
-X130rtiU+c7PmKz1WiLx1HYunTPL5+fc3m34zDZRM/MjI6M1+oQvf2R0nHvkhbTi
-Iq9U2vtm1BsqvBg9JgQFUh6XydPbHkzFPorw3bwF6wCxPzEUahz53uaYm9aHjnl2
-emoNJsTh0cHsDQ8ShZifNmM+FE5I+NPYE4EA/OGy81PI502PYM9Emg3dpJXTcOJ7
-LtPlPA==
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Intermediate1
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate2
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:c3:12:d3:6b:81:ec:1a:ca:7d:aa:98:58:b8:c1:
-                    f3:3a:97:e2:86:91:ae:b6:6d:02:2e:08:67:6c:98:
-                    5e:f3:ce:ec:3a:f1:de:93:e6:b5:b5:68:0c:64:67:
-                    87:0c:c8:0c:2f:33:64:f2:7a:70:1d:32:b9:84:21:
-                    ab:45:de:99:1c:4a:97:30:7e:1e:0e:f0:c5:0c:69:
-                    ea:18:cc:73:8c:eb:23:28:6a:f5:2b:b6:95:67:fd:
-                    7c:99:34:46:67:f8:f5:10:16:c8:04:db:eb:30:ce:
-                    23:b1:fe:71:a7:8c:dd:ae:26:d5:31:af:ec:ca:2d:
-                    d7:b0:24:f9:06:ac:ad:a4:2a:b1:bb:1b:7d:cf:ad:
-                    b2:d3:e2:d7:4a:e0:a7:f2:3d:74:5d:be:ed:3c:be:
-                    1e:2a:de:e6:89:ef:8a:c3:3d:3a:41:34:fe:a5:54:
-                    25:f7:11:be:65:fd:b0:6a:5d:70:13:df:41:92:19:
-                    04:fe:be:14:5a:4c:81:6b:a8:8c:15:34:3e:51:30:
-                    8d:19:07:9d:02:31:5c:7a:47:2a:0a:3d:74:ec:9a:
-                    de:78:7f:3d:8a:e3:99:2a:52:71:ac:d0:bc:40:72:
-                    62:d2:6c:e8:28:23:56:62:f1:57:b8:4b:60:4d:5a:
-                    54:42:34:2c:8a:29:9a:05:a8:fb:67:90:91:11:f3:
-                    19:a7
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                4D:EB:21:3C:9D:C2:4C:9B:05:E6:17:BD:AE:50:A2:8D:56:0E:9D:DC
-            X509v3 Authority Key Identifier: 
-                keyid:E9:93:8B:79:FC:DC:BA:88:E7:D0:26:76:B8:10:17:87:32:50:76:45
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Intermediate1.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Intermediate1.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         55:2c:94:ca:bf:56:78:14:ab:d8:27:5d:4a:35:3a:a4:84:3a:
-         d5:fc:ca:20:42:b6:6a:ce:11:f6:8f:9a:06:fa:91:5f:24:ad:
-         fc:a4:7a:b3:1e:fd:54:35:f0:9c:00:3c:ca:95:8b:e1:f3:2e:
-         44:e1:69:d5:7b:63:81:41:da:cb:6f:e1:14:73:54:48:a6:a9:
-         15:4e:c2:cf:9a:da:b8:8b:7f:bb:da:d8:1b:d7:cc:6e:6e:9c:
-         6a:54:cc:c6:52:2a:9c:c6:4f:9a:31:13:20:6d:b2:37:2f:62:
-         7f:30:56:91:c7:09:bd:da:85:b4:35:1b:54:a5:e0:8a:dc:87:
-         37:b6:84:5c:fa:c4:5f:0e:fa:62:35:f8:3e:94:4e:ad:03:6f:
-         ed:1e:53:1c:c0:52:75:b4:41:fc:a9:ea:ae:ba:46:5d:3b:d4:
-         56:21:54:48:2a:19:6c:3b:a3:2c:02:70:d7:25:70:60:1e:cc:
-         5f:2d:eb:d9:24:b1:ff:6d:dd:e6:84:bd:33:f0:6c:75:28:cb:
-         94:2e:d9:51:60:a3:da:df:e5:a1:54:a6:73:75:e4:5e:21:9b:
-         35:12:6b:c0:e1:5a:cf:f3:3a:ac:18:a3:27:15:ef:84:65:07:
-         8c:8f:41:d6:af:65:d8:91:0b:b7:77:14:49:fc:8c:c5:f2:1a:
-         13:15:4d:fb
------BEGIN CERTIFICATE-----
-MIIDiTCCAnGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1JbnRl
-cm1lZGlhdGUxMB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQG
-A1UEAwwNSW50ZXJtZWRpYXRlMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAMMS02uB7BrKfaqYWLjB8zqX4oaRrrZtAi4IZ2yYXvPO7Drx3pPmtbVoDGRn
-hwzIDC8zZPJ6cB0yuYQhq0XemRxKlzB+Hg7wxQxp6hjMc4zrIyhq9Su2lWf9fJk0
-Rmf49RAWyATb6zDOI7H+caeM3a4m1TGv7Mot17Ak+QasraQqsbsbfc+tstPi10rg
-p/I9dF2+7Ty+Hire5onvisM9OkE0/qVUJfcRvmX9sGpdcBPfQZIZBP6+FFpMgWuo
-jBU0PlEwjRkHnQIxXHpHKgo9dOya3nh/PYrjmSpScazQvEByYtJs6CgjVmLxV7hL
-YE1aVEI0LIopmgWo+2eQkRHzGacCAwEAAaOB3TCB2jAdBgNVHQ4EFgQUTeshPJ3C
-TJsF5he9rlCijVYOndwwHwYDVR0jBBgwFoAU6ZOLefzcuojn0CZ2uBAXhzJQdkUw
-QAYIKwYBBQUHAQEENDAyMDAGCCsGAQUFBzAChiRodHRwOi8vdXJsLWZvci1haWEv
-SW50ZXJtZWRpYXRlMS5jZXIwNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL3VybC1m
-b3ItY3JsL0ludGVybWVkaWF0ZTEuY3JsMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
-Af8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBVLJTKv1Z4FKvYJ11KNTqkhDrV
-/MogQrZqzhH2j5oG+pFfJK38pHqzHv1UNfCcADzKlYvh8y5E4WnVe2OBQdrLb+EU
-c1RIpqkVTsLPmtq4i3+72tgb18xubpxqVMzGUiqcxk+aMRMgbbI3L2J/MFaRxwm9
-2oW0NRtUpeCK3Ic3toRc+sRfDvpiNfg+lE6tA2/tHlMcwFJ1tEH8qequukZdO9RW
-IVRIKhlsO6MsAnDXJXBgHsxfLevZJLH/bd3mhL0z8Gx1KMuULtlRYKPa3+WhVKZz
-deReIZs1EmvA4VrP8zqsGKMnFe+EZQeMj0HWr2XYkQu3dxRJ/IzF8hoTFU37
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 2 (0x2)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Intermediate1
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:a7:5a:95:1f:d4:5d:dc:24:05:8d:bc:86:06:ed:
-                    27:fe:4f:1b:4b:38:42:19:15:53:1f:8c:9b:8b:90:
-                    68:e5:4c:7d:e3:2e:a9:9a:55:29:4b:51:5e:c2:4d:
-                    56:b6:1c:45:ca:ac:ff:56:82:77:91:ee:43:15:0b:
-                    76:83:96:bc:01:fc:7d:17:b0:a0:b7:49:93:fe:33:
-                    ac:97:51:d1:85:65:22:90:e2:20:d6:f3:3e:7d:ca:
-                    f6:de:b5:91:74:90:5e:b7:55:18:4f:70:cd:ad:6f:
-                    dd:42:ed:69:82:c6:2f:1f:32:a0:77:5d:31:1c:29:
-                    4f:76:d0:c4:07:c0:76:94:8c:cd:97:80:fd:7d:fd:
-                    66:35:d8:80:6c:3a:83:96:e3:19:c2:92:0a:05:9d:
-                    15:1a:ef:50:28:3f:d5:a6:cd:20:01:86:f8:c3:75:
-                    9c:b6:cb:8b:d8:33:04:2a:d8:41:96:41:15:76:b4:
-                    05:a2:ab:15:a2:36:d8:e9:22:d7:df:d3:b7:3a:f9:
-                    01:84:0e:15:f5:0d:66:0c:02:af:e1:ba:03:73:3f:
-                    02:e3:db:b5:19:05:c7:ea:ab:3c:af:14:a8:7d:50:
-                    81:69:ba:f9:eb:8c:ed:b1:76:98:36:41:57:a3:8f:
-                    eb:a8:84:13:0f:ba:96:0e:c7:05:0d:31:67:2b:9d:
-                    e2:6b
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                E9:93:8B:79:FC:DC:BA:88:E7:D0:26:76:B8:10:17:87:32:50:76:45
-            X509v3 Authority Key Identifier: 
-                keyid:1A:BB:F8:5E:15:84:6A:6A:59:FE:DB:C2:73:30:0A:85:34:FD:08:E9
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE
-    Signature Algorithm: sha256WithRSAEncryption
-         94:ea:af:a5:b1:c3:bb:d3:ed:be:26:df:cf:1d:ee:32:4a:68:
-         ac:45:e3:c7:8f:db:a3:63:bf:93:be:2c:26:02:15:0b:48:75:
-         e1:15:2c:ce:a7:0e:6f:94:9b:e6:e2:72:99:4c:4c:fa:e9:e3:
-         70:5a:05:89:97:84:4a:a7:b4:fe:e1:3b:1f:4b:5c:da:15:06:
-         fb:dd:8d:f6:20:4f:0a:83:ec:3b:07:26:15:d6:79:3e:6d:37:
-         74:63:60:11:a3:df:af:ee:14:6f:6a:9b:c9:2e:cc:e8:85:17:
-         9a:06:bc:26:b4:5d:bc:70:39:b2:ca:5e:be:80:cd:25:e2:df:
-         7d:bb:d9:b5:6c:a0:8d:5e:db:d5:9a:70:0e:c7:5d:d2:45:96:
-         62:3f:39:59:a4:2a:37:f7:9e:b2:17:aa:7e:29:7d:58:eb:59:
-         1a:db:89:69:b0:5b:aa:7e:cc:5f:c6:f7:81:e2:a8:8e:79:9b:
-         ff:a8:e8:c1:46:65:9a:c8:d9:af:00:2d:00:b5:10:0e:f9:3e:
-         c5:bb:7e:6c:9c:8b:3e:4a:d6:85:c4:29:05:cf:e8:cf:34:5e:
-         24:b9:af:9a:b1:53:cd:98:82:0e:98:3e:52:24:f1:f6:4a:bf:
-         ed:79:0b:76:92:4b:3d:52:a4:73:29:ec:66:a7:f1:65:2c:dc:
-         b3:14:d0:88
------BEGIN CERTIFICATE-----
-MIIDbjCCAlagAwIBAgIBAjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowGDEWMBQGA1UEAwwNSW50
-ZXJtZWRpYXRlMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdalR/U
-XdwkBY28hgbtJ/5PG0s4QhkVUx+Mm4uQaOVMfeMuqZpVKUtRXsJNVrYcRcqs/1aC
-d5HuQxULdoOWvAH8fRewoLdJk/4zrJdR0YVlIpDiINbzPn3K9t61kXSQXrdVGE9w
-za1v3ULtaYLGLx8yoHddMRwpT3bQxAfAdpSMzZeA/X39ZjXYgGw6g5bjGcKSCgWd
-FRrvUCg/1abNIAGG+MN1nLbLi9gzBCrYQZZBFXa0BaKrFaI22Oki19/Ttzr5AYQO
-FfUNZgwCr+G6A3M/AuPbtRkFx+qrPK8UqH1QgWm6+euM7bF2mDZBV6OP66iEEw+6
-lg7HBQ0xZyud4msCAwEAAaOByzCByDAdBgNVHQ4EFgQU6ZOLefzcuojn0CZ2uBAX
-hzJQdkUwHwYDVR0jBBgwFoAUGrv4XhWEampZ/tvCczAKhTT9COkwNwYIKwYBBQUH
-AQEEKzApMCcGCCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIw
-LAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4G
-A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IB
-AQCU6q+lscO70+2+Jt/PHe4ySmisRePHj9ujY7+TviwmAhULSHXhFSzOpw5vlJvm
-4nKZTEz66eNwWgWJl4RKp7T+4TsfS1zaFQb73Y32IE8Kg+w7ByYV1nk+bTd0Y2AR
-o9+v7hRvapvJLszohReaBrwmtF28cDmyyl6+gM0l4t99u9m1bKCNXtvVmnAOx13S
-RZZiPzlZpCo3956yF6p+KX1Y61ka24lpsFuqfsxfxveB4qiOeZv/qOjBRmWayNmv
-AC0AtRAO+T7Fu35snIs+StaFxCkFz+jPNF4kua+asVPNmIIOmD5SJPH2Sr/teQt2
-kks9UqRzKexmp/FlLNyzFNCI
------END CERTIFICATE-----
-
-Certificate:
-    Data:
-        Version: 3 (0x2)
-        Serial Number: 1 (0x1)
-    Signature Algorithm: sha256WithRSAEncryption
-        Issuer: CN=Root
-        Validity
-            Not Before: Jan  1 12:00:00 2015 GMT
-            Not After : Jan  1 12:00:00 2016 GMT
-        Subject: CN=Root
-        Subject Public Key Info:
-            Public Key Algorithm: rsaEncryption
-                Public-Key: (2048 bit)
-                Modulus:
-                    00:b3:62:40:33:73:9c:c9:64:ad:30:52:73:78:00:
-                    08:ac:b5:2a:80:8b:9e:7d:9d:50:57:ee:df:41:be:
-                    66:aa:53:a2:d5:90:72:02:dd:73:65:3e:69:94:a2:
-                    6f:5c:04:a0:df:b2:4e:70:57:71:ba:00:9a:75:3e:
-                    a0:60:eb:8b:06:94:c3:65:17:93:e8:11:2b:76:20:
-                    bf:7f:20:f4:09:14:b7:b8:c4:17:9a:89:bc:35:53:
-                    b7:92:8b:fa:fb:62:9d:c6:e4:34:73:b4:d2:55:f8:
-                    15:f7:36:bd:ab:24:6f:28:26:89:1e:63:50:c8:e8:
-                    49:4a:4d:5d:0e:8a:63:7a:af:dd:7a:da:e2:67:9b:
-                    4b:57:9b:3a:b2:26:cc:0c:4b:d6:f4:3b:f6:d9:a4:
-                    e6:56:a2:1b:78:a0:aa:4b:c6:06:1f:7c:3f:52:75:
-                    ce:e5:18:a1:23:69:2c:ee:ba:c3:a4:33:c8:65:a8:
-                    5d:7d:09:51:7a:16:a3:ae:a1:ee:11:3e:1f:7c:a9:
-                    46:2d:ad:7f:05:c8:75:1a:3d:77:d0:02:4b:80:f9:
-                    b0:ba:7b:4f:d8:be:d0:cb:6a:4c:f3:e3:00:0f:b5:
-                    5c:d3:65:7a:ba:49:21:54:2d:84:5e:7e:85:ad:84:
-                    70:e7:86:58:91:2e:4c:73:4a:52:ce:9c:04:86:2a:
-                    8c:fd
-                Exponent: 65537 (0x10001)
-        X509v3 extensions:
-            X509v3 Subject Key Identifier: 
-                1A:BB:F8:5E:15:84:6A:6A:59:FE:DB:C2:73:30:0A:85:34:FD:08:E9
-            X509v3 Authority Key Identifier: 
-                keyid:1A:BB:F8:5E:15:84:6A:6A:59:FE:DB:C2:73:30:0A:85:34:FD:08:E9
-
-            Authority Information Access: 
-                CA Issuers - URI:http://url-for-aia/Root.cer
-
-            X509v3 CRL Distribution Points: 
-
-                Full Name:
-                  URI:http://url-for-crl/Root.crl
-
-            X509v3 Key Usage: critical
-                Certificate Sign, CRL Sign
-            X509v3 Basic Constraints: critical
-                CA:TRUE, pathlen:1
-    Signature Algorithm: sha256WithRSAEncryption
-         00:12:bd:de:29:91:db:be:5c:8c:a0:df:6c:68:22:0a:6b:5a:
-         7a:7e:0b:2c:b3:4b:39:95:ec:f7:a1:9b:27:1b:02:4e:70:4b:
-         e9:c7:ca:59:a5:27:de:48:d7:b3:69:0a:b6:d4:10:a6:a8:7f:
-         08:f2:37:a2:b4:04:bf:d2:d7:5f:40:56:81:53:80:9c:ff:32:
-         63:a6:73:6d:76:d3:14:bd:27:99:8e:9b:4d:aa:9e:1c:4e:1f:
-         8a:8c:6d:00:6e:d7:e6:c0:a9:e4:23:f5:88:0b:66:a7:72:68:
-         c0:4e:38:4c:4f:75:0e:55:eb:ee:36:ec:1e:11:05:a1:df:4b:
-         cf:a0:49:d0:82:74:4b:6b:ec:67:61:24:00:c4:81:68:d7:74:
-         36:82:79:45:ab:24:21:17:70:44:3b:e3:96:12:7e:68:4a:4a:
-         bc:3c:81:72:cf:52:c3:e9:ac:01:df:9b:38:0d:c2:b9:84:33:
-         e0:60:64:14:b4:b3:c5:79:7c:af:cd:c9:9e:44:95:b6:cb:23:
-         7f:07:c6:ec:67:44:aa:4b:80:8c:c8:b4:e7:b5:af:07:7c:0e:
-         00:91:54:fe:9f:b5:a2:9d:52:68:20:29:1d:02:ed:cb:22:4e:
-         d9:a3:c6:84:ab:b4:69:b7:83:7d:bc:f2:41:ec:37:38:df:9d:
-         5b:11:56:c0
------BEGIN TRUST_ANCHOR_CONSTRAINED-----
-MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
-MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNiQDNznMlkrTBSc3gA
-CKy1KoCLnn2dUFfu30G+ZqpTotWQcgLdc2U+aZSib1wEoN+yTnBXcboAmnU+oGDr
-iwaUw2UXk+gRK3Ygv38g9AkUt7jEF5qJvDVTt5KL+vtincbkNHO00lX4Ffc2vask
-bygmiR5jUMjoSUpNXQ6KY3qv3Xra4mebS1ebOrImzAxL1vQ79tmk5laiG3igqkvG
-Bh98P1J1zuUYoSNpLO66w6QzyGWoXX0JUXoWo66h7hE+H3ypRi2tfwXIdRo9d9AC
-S4D5sLp7T9i+0MtqTPPjAA+1XNNlerpJIVQthF5+ha2EcOeGWJEuTHNKUs6cBIYq
-jP0CAwEAAaOBzjCByzAdBgNVHQ4EFgQUGrv4XhWEampZ/tvCczAKhTT9COkwHwYD
-VR0jBBgwFoAUGrv4XhWEampZ/tvCczAKhTT9COkwNwYIKwYBBQUHAQEEKzApMCcG
-CCsGAQUFBzAChhtodHRwOi8vdXJsLWZvci1haWEvUm9vdC5jZXIwLAYDVR0fBCUw
-IzAhoB+gHYYbaHR0cDovL3VybC1mb3ItY3JsL1Jvb3QuY3JsMA4GA1UdDwEB/wQE
-AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMA0GCSqGSIb3DQEBCwUAA4IBAQAAEr3e
-KZHbvlyMoN9saCIKa1p6fgsss0s5lez3oZsnGwJOcEvpx8pZpSfeSNezaQq21BCm
-qH8I8jeitAS/0tdfQFaBU4Cc/zJjpnNtdtMUvSeZjptNqp4cTh+KjG0AbtfmwKnk
-I/WIC2ancmjATjhMT3UOVevuNuweEQWh30vPoEnQgnRLa+xnYSQAxIFo13Q2gnlF
-qyQhF3BEO+OWEn5oSkq8PIFyz1LD6awB35s4DcK5hDPgYGQUtLPFeXyvzcmeRJW2
-yyN/B8bsZ0SqS4CMyLTnta8HfA4AkVT+n7WinVJoICkdAu3LIk7Zo8aEq7Rpt4N9
-vPJB7Dc4351bEVbA
------END TRUST_ANCHOR_CONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-FAIL
------BEGIN VERIFY_RESULT-----
-RkFJTA==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
-
------ Certificate i=1 (CN=Intermediate2) -----
-ERROR: max_path_length reached
-
-
------BEGIN ERRORS-----
-LS0tLS0gQ2VydGlmaWNhdGUgaT0xIChDTj1JbnRlcm1lZGlhdGUyKSAtLS0tLQpFUlJPUjogbWF4X3BhdGhfbGVuZ3RoIHJlYWNoZWQKCg==
------END ERRORS-----
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem
similarity index 97%
rename from src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
rename to src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem
index 21ae6b8..df5cb82 100644
--- a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-unconstrained-root.pem
+++ b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/chain.pem
@@ -1,4 +1,4 @@
-[Created by: generate-violates-pathlen-1-unconstrained-root.py]
+[Created by: generate-chains.py]
 
 Certificate chain with 2 intermediates and one end entity certificate. The
 root certificate has a pathlen:1 restriction. Ordinarily this would be an
@@ -339,7 +339,7 @@
          58:2c:60:d0:0a:05:c6:42:88:56:b6:1a:3d:24:c9:93:57:de:
          73:67:16:fc:93:32:06:fe:2e:9c:f5:5f:08:2d:73:63:e6:05:
          d2:78:a7:8f
------BEGIN TRUST_ANCHOR_UNCONSTRAINED-----
+-----BEGIN CERTIFICATE-----
 MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARSb290
 MB4XDTE1MDEwMTEyMDAwMFoXDTE2MDEwMTEyMDAwMFowDzENMAsGA1UEAwwEUm9v
 dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALb1Ly0Lvwkgklbtbxuz
@@ -359,19 +359,4 @@
 0sdzSQxvHS64U6vAohcRue6RlEOQit5eCALj1L5vzfygwo+RBwKw//8Do3dHiLej
 JC6PAJbmIz6aQ0spujnuFixDPn5YLGDQCgXGQohWtho9JMmTV95zZxb8kzIG/i6c
 9V8ILXNj5gXSeKeP
------END TRUST_ANCHOR_UNCONSTRAINED-----
-
-150302120000Z
------BEGIN TIME-----
-MTUwMzAyMTIwMDAwWg==
------END TIME-----
-
-SUCCESS
------BEGIN VERIFY_RESULT-----
-U1VDQ0VTUw==
------END VERIFY_RESULT-----
-
-serverAuth
------BEGIN KEY_PURPOSE-----
-c2VydmVyQXV0aA==
------END KEY_PURPOSE-----
+-----END CERTIFICATE-----
diff --git a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/generate-chains.py
similarity index 76%
rename from src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
rename to src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/generate-chains.py
index 1a83ab0..121b880 100755
--- a/src/net/data/verify_certificate_chain_unittest/generate-violates-pathlen-1-unconstrained-root.py
+++ b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/generate-chains.py
@@ -7,6 +7,9 @@
 root certificate has a pathlen:1 restriction. Ordinarily this would be an
 invalid chain, however constraints on this trust anchor are not enforced."""
 
+import sys
+sys.path += ['..']
+
 import common
 
 # Self-signed root certificate (used as trust anchor).
@@ -24,12 +27,5 @@
 # Target certificate.
 target = common.create_end_entity_certificate('Target', intermediate2)
 
-chain = [target, intermediate2, intermediate1]
-trusted = common.TrustAnchor(root, constrained=False)
-time = common.DEFAULT_TIME
-key_purpose = common.DEFAULT_KEY_PURPOSE
-verify_result = True
-errors = None
-
-common.write_test_file(__doc__, chain, trusted, time, key_purpose,
-                       verify_result, errors)
+chain = [target, intermediate2, intermediate1, root]
+common.write_chain(__doc__, chain, 'chain.pem')
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Intermediate1.key b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Intermediate1.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Intermediate1.key
rename to src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Intermediate1.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Intermediate2.key b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Intermediate2.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Intermediate2.key
rename to src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Intermediate2.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Root.key b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Root.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Root.key
rename to src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Root.key
diff --git a/src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Target.key b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Target.key
similarity index 100%
rename from src/net/data/verify_certificate_chain_unittest/keys/violates-pathlen-1-unconstrained-root/Target.key
rename to src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/keys/Target.key
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test
new file mode 100644
index 0000000..0bcea7d
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/main.test
@@ -0,0 +1,5 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
diff --git a/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test
new file mode 100644
index 0000000..3015a93
--- /dev/null
+++ b/src/net/data/verify_certificate_chain_unittest/violates-pathlen-1-from-root/ta-with-constraints.test
@@ -0,0 +1,8 @@
+chain: chain.pem
+last_cert_trust: TRUSTED_ANCHOR_WITH_CONSTRAINTS
+utc_time: 150302120000Z
+key_purpose: SERVER_AUTH
+expected_errors:
+----- Certificate i=1 (CN=Intermediate2) -----
+ERROR: max_path_length reached
+
diff --git a/src/net/disk_cache/simple/simple_entry_impl.cc b/src/net/disk_cache/simple/simple_entry_impl.cc
index b60d7a4..0af01e1 100644
--- a/src/net/disk_cache/simple/simple_entry_impl.cc
+++ b/src/net/disk_cache/simple/simple_entry_impl.cc
@@ -717,7 +717,7 @@
           last_used_, last_modified_, data_size_, sparse_data_size_)));
   Closure task =
       base::Bind(&SimpleSynchronousEntry::OpenEntry, cache_type_, path_, key_,
-                 entry_hash_, have_index, results.get());
+                 entry_hash_, have_index, start_time, results.get());
   Closure reply =
       base::Bind(&SimpleEntryImpl::CreationOperationComplete, this, callback,
                  start_time, base::Passed(&results), out_entry,
@@ -757,13 +757,9 @@
   std::unique_ptr<SimpleEntryCreationResults> results(
       new SimpleEntryCreationResults(SimpleEntryStat(
           last_used_, last_modified_, data_size_, sparse_data_size_)));
-  Closure task = base::Bind(&SimpleSynchronousEntry::CreateEntry,
-                            cache_type_,
-                            path_,
-                            key_,
-                            entry_hash_,
-                            have_index,
-                            results.get());
+  Closure task =
+      base::Bind(&SimpleSynchronousEntry::CreateEntry, cache_type_, path_, key_,
+                 entry_hash_, have_index, start_time, results.get());
   Closure reply =
       base::Bind(&SimpleEntryImpl::CreationOperationComplete, this, callback,
                  start_time, base::Passed(&results), out_entry,
diff --git a/src/net/disk_cache/simple/simple_index.cc b/src/net/disk_cache/simple/simple_index.cc
index 43869ef..0fdceef 100644
--- a/src/net/disk_cache/simple/simple_index.cc
+++ b/src/net/disk_cache/simple/simple_index.cc
@@ -21,7 +21,6 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_tokenizer.h"
 #include "base/task_runner.h"
-#include "base/threading/worker_pool.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_usage_estimator.h"
 #include "net/base/net_errors.h"
diff --git a/src/net/disk_cache/simple/simple_synchronous_entry.cc b/src/net/disk_cache/simple/simple_synchronous_entry.cc
index 3ae0d27..4ab3dde 100644
--- a/src/net/disk_cache/simple/simple_synchronous_entry.cc
+++ b/src/net/disk_cache/simple/simple_synchronous_entry.cc
@@ -258,8 +258,12 @@
     const std::string& key,
     const uint64_t entry_hash,
     const bool had_index,
+    const base::TimeTicks& time_enqueued,
     SimpleEntryCreationResults* out_results) {
-  base::ElapsedTimer open_time;
+  base::TimeTicks start_sync_open_entry = base::TimeTicks::Now();
+  SIMPLE_CACHE_UMA(TIMES, "QueueLatency.OpenEntry", cache_type,
+                   (start_sync_open_entry - time_enqueued));
+
   SimpleSynchronousEntry* sync_entry =
       new SimpleSynchronousEntry(cache_type, path, key, entry_hash, had_index);
   out_results->result = sync_entry->InitializeForOpen(
@@ -272,7 +276,8 @@
     out_results->stream_0_data = NULL;
     return;
   }
-  UMA_HISTOGRAM_TIMES("SimpleCache.DiskOpenLatency", open_time.Elapsed());
+  SIMPLE_CACHE_UMA(TIMES, "DiskOpenLatency", cache_type,
+                   base::TimeTicks::Now() - start_sync_open_entry);
   out_results->sync_entry = sync_entry;
 }
 
@@ -283,8 +288,13 @@
     const std::string& key,
     const uint64_t entry_hash,
     const bool had_index,
+    const base::TimeTicks& time_enqueued,
     SimpleEntryCreationResults* out_results) {
   DCHECK_EQ(entry_hash, GetEntryHashKey(key));
+  base::TimeTicks start_sync_create_entry = base::TimeTicks::Now();
+  SIMPLE_CACHE_UMA(TIMES, "QueueLatency.CreateEntry", cache_type,
+                   (start_sync_create_entry - time_enqueued));
+
   SimpleSynchronousEntry* sync_entry =
       new SimpleSynchronousEntry(cache_type, path, key, entry_hash, had_index);
   out_results->result =
@@ -297,6 +307,8 @@
     return;
   }
   out_results->sync_entry = sync_entry;
+  SIMPLE_CACHE_UMA(TIMES, "DiskCreateLatency", cache_type,
+                   base::TimeTicks::Now() - start_sync_create_entry);
 }
 
 // static
@@ -365,6 +377,7 @@
                                        net::IOBuffer* in_buf,
                                        SimpleEntryStat* out_entry_stat,
                                        int* out_result) {
+  base::ElapsedTimer write_time;
   DCHECK(initialized_);
   DCHECK_NE(0, in_entry_op.index);
   int index = in_entry_op.index;
@@ -445,6 +458,8 @@
     }
   }
 
+  SIMPLE_CACHE_UMA(TIMES, "DiskWriteLatency", cache_type_,
+                   write_time.Elapsed());
   RecordWriteResult(cache_type_, WRITE_RESULT_SUCCESS);
   base::Time modification_time = Time::Now();
   out_entry_stat->set_last_used(modification_time);
@@ -686,6 +701,7 @@
     const SimpleEntryStat& entry_stat,
     std::unique_ptr<std::vector<CRCRecord>> crc32s_to_write,
     net::GrowableIOBuffer* stream_0_data) {
+  base::ElapsedTimer close_time;
   DCHECK(stream_0_data);
 
   for (std::vector<CRCRecord>::const_iterator it = crc32s_to_write->begin();
@@ -772,6 +788,8 @@
     SIMPLE_CACHE_UMA(BOOLEAN, "EntryCreatedAndStream2Omitted", cache_type_,
                      empty_file_omitted_[stream2_file_index]);
   }
+  SIMPLE_CACHE_UMA(TIMES, "DiskCloseLatency", cache_type_,
+                   close_time.Elapsed());
   RecordCloseResult(cache_type_, CLOSE_RESULT_SUCCESS);
   have_open_files_ = false;
   delete this;
diff --git a/src/net/disk_cache/simple/simple_synchronous_entry.h b/src/net/disk_cache/simple/simple_synchronous_entry.h
index 3b37c09..c244f92 100644
--- a/src/net/disk_cache/simple/simple_synchronous_entry.h
+++ b/src/net/disk_cache/simple/simple_synchronous_entry.h
@@ -118,11 +118,14 @@
   // Opens a disk cache entry on disk. The |key| parameter is optional, if empty
   // the operation may be slower. The |entry_hash| parameter is required.
   // |had_index| is provided only for histograms.
+  // |time_enqueued| is when this operation was added to the I/O thread pool,
+  //  and is provided only for histograms.
   static void OpenEntry(net::CacheType cache_type,
                         const base::FilePath& path,
                         const std::string& key,
                         uint64_t entry_hash,
                         bool had_index,
+                        const base::TimeTicks& time_enqueued,
                         SimpleEntryCreationResults* out_results);
 
   static void CreateEntry(net::CacheType cache_type,
@@ -130,6 +133,7 @@
                           const std::string& key,
                           uint64_t entry_hash,
                           bool had_index,
+                          const base::TimeTicks& time_enqueued,
                           SimpleEntryCreationResults* out_results);
 
   // Deletes an entry from the file system without affecting the state of the
diff --git a/src/net/docs/bug-triage-suggested-workflow.md b/src/net/docs/bug-triage-suggested-workflow.md
index 147dd8b..3c548e0 100644
--- a/src/net/docs/bug-triage-suggested-workflow.md
+++ b/src/net/docs/bug-triage-suggested-workflow.md
@@ -49,6 +49,9 @@
 
 ## Investigating component=Internals>Network bugs
 
+* Note that you may want to investigate Needs-Feedback bugs first, as
+  that may result in some bugs being added to this list.  
+
 * It's recommended that while on triage duty, you subscribe to the
   Internals>Network component (but not its subcomponents). To do this, go
   to the issue tracker and then click "Saved Queries".
@@ -177,6 +180,20 @@
                bug.  Make sure to indicate if there is a defined point in the
                past before which the signature is not present.
 
+As an alternative to the above, you can use [Eric Roman's new crash
+tool](https://ericroman.users.x20web.corp.google.com/www/net-crash-triage/index.html)
+(internal link).  Note that it isn't a perfect fit with the triage
+responsibilities, specifically:
+  
+* It's only showing Windows releases; Android, iOS, and WebView are
+  usually different, and Mac is sometimes different.
+* The instructions are to look at the latest canary which has a days
+  worth of data.  If canaries are being pushed fast, that may be more
+  than one canary into the past, and hence not visible on the tool.
+* Eric's tool filters based on files in "src/net" rather than looking
+  for magic signature's including the string "net::" ("src/net" is
+  probably the better filter).    
+
 ## Investigating crashers
 
 * Only investigate crashers that are still occurring, as identified by above
diff --git a/src/net/http/http_cache.cc b/src/net/http/http_cache.cc
index 968cffa..519f192 100644
--- a/src/net/http/http_cache.cc
+++ b/src/net/http/http_cache.cc
@@ -25,7 +25,6 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/threading/worker_pool.h"
 #include "base/time/default_clock.h"
 #include "base/time/time.h"
 #include "base/trace_event/memory_allocator_dump.h"
diff --git a/src/net/http/http_network_session.cc b/src/net/http/http_network_session.cc
index 45e7ceb..8aa8a29 100644
--- a/src/net/http/http_network_session.cc
+++ b/src/net/http/http_network_session.cc
@@ -146,8 +146,7 @@
       quic_estimate_initial_rtt(false),
       proxy_delegate(nullptr),
       enable_token_binding(false),
-      http_09_on_non_default_ports_enabled(false),
-      restrict_to_one_preconnect_for_proxies(false) {
+      http_09_on_non_default_ports_enabled(false) {
   quic_supported_versions.push_back(QUIC_VERSION_37);
 }
 
diff --git a/src/net/http/http_network_session.h b/src/net/http/http_network_session.h
index 84f2767..f3eb086 100644
--- a/src/net/http/http_network_session.h
+++ b/src/net/http/http_network_session.h
@@ -188,10 +188,6 @@
     // Enable HTTP/0.9 for HTTP/HTTPS on ports other than the default one for
     // each protocol.
     bool http_09_on_non_default_ports_enabled;
-
-    // If true, only one pending preconnect is allowed to proxies that support
-    // request priorities.
-    bool restrict_to_one_preconnect_for_proxies;
   };
 
   enum SocketPoolType {
diff --git a/src/net/http/http_network_transaction.cc b/src/net/http/http_network_transaction.cc
index fbdf5ce..2db34f1 100644
--- a/src/net/http/http_network_transaction.cc
+++ b/src/net/http/http_network_transaction.cc
@@ -1801,6 +1801,7 @@
   if (allowed_encodings.find("*") != allowed_encodings.end())
     return true;
 
+  bool result = true;
   for (auto const& encoding : used_encodings) {
     SourceStream::SourceType source_type =
         FilterSourceStream::ParseEncodingType(encoding);
@@ -1808,11 +1809,21 @@
     if (source_type == SourceStream::TYPE_UNKNOWN)
       continue;
     if (allowed_encodings.find(encoding) == allowed_encodings.end()) {
-      FilterSourceStream::ReportContentDecodingFailed(source_type);
-      return false;
+      FilterSourceStream::ReportContentDecodingFailed(
+          SourceStream::TYPE_REJECTED);
+      result = false;
+      break;
     }
   }
-  return true;
+
+  // Temporary workaround for http://crbug.com/714514
+  if (headers->IsRedirect(nullptr)) {
+    UMA_HISTOGRAM_BOOLEAN("Net.RedirectWithUnadvertisedContentEncoding",
+                          !result);
+    return true;
+  }
+
+  return result;
 }
 
 }  // namespace net
diff --git a/src/net/http/http_network_transaction_unittest.cc b/src/net/http/http_network_transaction_unittest.cc
index 967939c..e3c33c2 100644
--- a/src/net/http/http_network_transaction_unittest.cc
+++ b/src/net/http/http_network_transaction_unittest.cc
@@ -16679,6 +16679,7 @@
 void CheckContentEncodingMatching(SpdySessionDependencies* session_deps,
                                   const std::string& accept_encoding,
                                   const std::string& content_encoding,
+                                  const std::string& location,
                                   bool should_match) {
   HttpRequestInfo request;
   request.method = "GET";
@@ -16697,9 +16698,19 @@
       MockWrite(accept_encoding.data()), MockWrite("\r\n\r\n"),
   };
 
+  std::string response_code = "200 OK";
+  std::string extra;
+  if (!location.empty()) {
+    response_code = "301 Redirect\r\nLocation: ";
+    response_code.append(location);
+  }
+
   MockRead data_reads[] = {
-      MockRead("HTTP/1.0 200 OK\r\n"),   MockRead("Content-Encoding: "),
-      MockRead(content_encoding.data()), MockRead("\r\n\r\n"),
+      MockRead("HTTP/1.0 "),
+      MockRead(response_code.data()),
+      MockRead("\r\nContent-Encoding: "),
+      MockRead(content_encoding.data()),
+      MockRead("\r\n\r\n"),
       MockRead(SYNCHRONOUS, OK),
   };
   StaticSocketDataProvider data(data_reads, arraysize(data_reads), data_writes,
@@ -16720,16 +16731,22 @@
 }
 
 TEST_F(HttpNetworkTransactionTest, MatchContentEncoding1) {
-  CheckContentEncodingMatching(&session_deps_, "gzip,sdch", "br", false);
+  CheckContentEncodingMatching(&session_deps_, "gzip,sdch", "br", "", false);
 }
 
 TEST_F(HttpNetworkTransactionTest, MatchContentEncoding2) {
-  CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "", true);
+  CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "", "",
+                               true);
 }
 
 TEST_F(HttpNetworkTransactionTest, MatchContentEncoding3) {
   CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip",
-                               false);
+                               "", false);
+}
+
+TEST_F(HttpNetworkTransactionTest, MatchContentEncoding4) {
+  CheckContentEncodingMatching(&session_deps_, "identity;q=1, *;q=0", "gzip",
+                               "www.foo.com/other", true);
 }
 
 }  // namespace net
diff --git a/src/net/http/http_stream_factory_impl.cc b/src/net/http/http_stream_factory_impl.cc
index 48bfd1d..2579933 100644
--- a/src/net/http/http_stream_factory_impl.cc
+++ b/src/net/http/http_stream_factory_impl.cc
@@ -300,10 +300,8 @@
     return false;
   }
 
-  if (!session_->params().restrict_to_one_preconnect_for_proxies ||
-      !ProxyServerSupportsPriorities(proxy_info)) {
+  if (!ProxyServerSupportsPriorities(proxy_info))
     return false;
-  }
 
   PreconnectingProxyServer preconnecting_proxy_server(proxy_info.proxy_server(),
                                                       privacy_mode);
@@ -312,7 +310,7 @@
                         preconnecting_proxy_server)) {
     UMA_HISTOGRAM_EXACT_LINEAR("Net.PreconnectSkippedToProxyServers", 1, 2);
     // Skip preconnect to the proxy server since we are already preconnecting
-    // (probably via some other job).
+    // (probably via some other job). See crbug.com/682041 for details.
     return true;
   }
 
diff --git a/src/net/http/http_stream_factory_impl_unittest.cc b/src/net/http/http_stream_factory_impl_unittest.cc
index 9565d7f..dc37a7a 100644
--- a/src/net/http/http_stream_factory_impl_unittest.cc
+++ b/src/net/http/http_stream_factory_impl_unittest.cc
@@ -1187,13 +1187,11 @@
       }
 
       SpdySessionDependencies session_deps;
-      session_deps.restrict_to_one_preconnect_for_proxies = true;
       HttpNetworkSession::Params params =
           SpdySessionDependencies::CreateSessionParams(&session_deps);
       params.enable_quic = true;
       params.proxy_service = proxy_service.get();
       params.http_server_properties = &http_server_properties;
-      ASSERT_TRUE(params.restrict_to_one_preconnect_for_proxies);
 
       std::unique_ptr<HttpNetworkSession> session(
           new HttpNetworkSession(params));
@@ -1278,13 +1276,11 @@
   http_server_properties.SetSupportsSpdy(spdy_server, true);
 
   SpdySessionDependencies session_deps;
-  session_deps.restrict_to_one_preconnect_for_proxies = true;
   HttpNetworkSession::Params params =
       SpdySessionDependencies::CreateSessionParams(&session_deps);
   params.enable_quic = true;
   params.proxy_service = proxy_service.get();
   params.http_server_properties = &http_server_properties;
-  ASSERT_TRUE(params.restrict_to_one_preconnect_for_proxies);
 
   std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
 
@@ -1700,7 +1696,6 @@
 TEST_F(HttpStreamFactoryTest, RequestHttpStreamOverProxyWithPreconnects) {
   SpdySessionDependencies session_deps(
       ProxyService::CreateFixed("https://myproxy.org:443"));
-  session_deps.restrict_to_one_preconnect_for_proxies = true;
 
   // Set up the proxy server as a server that supports request priorities.
   std::unique_ptr<HttpServerPropertiesImpl> http_server_properties(
diff --git a/src/net/http/transport_security_state.cc b/src/net/http/transport_security_state.cc
index 05b749d..4486954 100644
--- a/src/net/http/transport_security_state.cc
+++ b/src/net/http/transport_security_state.cc
@@ -76,7 +76,9 @@
   }
 };
 
-void RecordUMAForHPKPReportFailure(const GURL& report_uri, int net_error) {
+void RecordUMAForHPKPReportFailure(const GURL& report_uri,
+                                   int net_error,
+                                   int http_response_code) {
   UMA_HISTOGRAM_SPARSE_SLOWLY("Net.PublicKeyPinReportSendingFailure2",
                               -net_error);
 }
@@ -839,7 +841,7 @@
   }
   report_sender_->Send(expect_staple_state.report_uri,
                        "application/json; charset=utf-8", serialized_report,
-                       base::Closure(),
+                       base::Callback<void()>(),
                        base::Bind(RecordUMAForHPKPReportFailure));
 }
 
@@ -1141,7 +1143,7 @@
           base::TimeDelta::FromMinutes(kTimeToRememberHPKPReportsMins));
 
   report_sender_->Send(pkp_state.report_uri, "application/json; charset=utf-8",
-                       serialized_report, base::Closure(),
+                       serialized_report, base::Callback<void()>(),
                        base::Bind(RecordUMAForHPKPReportFailure));
   return PKPStatus::VIOLATED;
 }
diff --git a/src/net/http/transport_security_state.h b/src/net/http/transport_security_state.h
index b410567..f2d182c 100644
--- a/src/net/http/transport_security_state.h
+++ b/src/net/http/transport_security_state.h
@@ -284,14 +284,19 @@
     // Sends the given serialized |report| to |report_uri| with
     // Content-Type header as specified in
     // |content_type|. |content_type| should be non-empty.
-    // |report_id| could be any non-negative integer. It's passed back to the
-    // error or success callbacks.
-    virtual void Send(
-        const GURL& report_uri,
-        base::StringPiece content_type,
-        base::StringPiece report,
-        const base::Callback<void()>& success_callback,
-        const base::Callback<void(const GURL&, int)>& error_callback) = 0;
+    // |success_callback| is called iff an HTTP 200 response is received.
+    // |error_callback| is called in all other cases. Error callback's
+    // |net_error| can be net::OK if the upload was successful but the server
+    // returned a non-HTTP 200 |http_response_code|. In all other cases,
+    // error callback's |http_response_code| is -1.
+    virtual void Send(const GURL& report_uri,
+                      base::StringPiece content_type,
+                      base::StringPiece report,
+                      const base::Callback<void()>& success_callback,
+                      const base::Callback<void(const GURL&,
+                                                int /* net_error */,
+                                                int /* http_response_code */)>&
+                          error_callback) = 0;
 
    protected:
     virtual ~ReportSenderInterface() {}
diff --git a/src/net/http/transport_security_state_unittest.cc b/src/net/http/transport_security_state_unittest.cc
index 800f5c7..3da8d39 100644
--- a/src/net/http/transport_security_state_unittest.cc
+++ b/src/net/http/transport_security_state_unittest.cc
@@ -32,6 +32,7 @@
 #include "net/cert/test_root_certs.h"
 #include "net/cert/x509_cert_types.h"
 #include "net/cert/x509_certificate.h"
+#include "net/http/http_status_code.h"
 #include "net/http/http_util.h"
 #include "net/ssl/ssl_info.h"
 #include "net/test/cert_test_util.h"
@@ -100,12 +101,12 @@
   MockCertificateReportSender() {}
   ~MockCertificateReportSender() override {}
 
-  void Send(
-      const GURL& report_uri,
-      base::StringPiece content_type,
-      base::StringPiece report,
-      const base::Callback<void()>& success_callback,
-      const base::Callback<void(const GURL&, int)>& error_callback) override {
+  void Send(const GURL& report_uri,
+            base::StringPiece content_type,
+            base::StringPiece report,
+            const base::Callback<void()>& success_callback,
+            const base::Callback<void(const GURL&, int, int)>& error_callback)
+      override {
     latest_report_uri_ = report_uri;
     report.CopyToString(&latest_report_);
     content_type.CopyToString(&latest_content_type_);
@@ -137,14 +138,14 @@
   int net_error() { return net_error_; }
 
   // TransportSecurityState::ReportSenderInterface:
-  void Send(
-      const GURL& report_uri,
-      base::StringPiece content_type,
-      base::StringPiece report,
-      const base::Callback<void()>& success_callback,
-      const base::Callback<void(const GURL&, int)>& error_callback) override {
+  void Send(const GURL& report_uri,
+            base::StringPiece content_type,
+            base::StringPiece report,
+            const base::Callback<void()>& success_callback,
+            const base::Callback<void(const GURL&, int, int)>& error_callback)
+      override {
     ASSERT_FALSE(error_callback.is_null());
-    error_callback.Run(report_uri, net_error_);
+    error_callback.Run(report_uri, net_error_, 0);
   }
 
  private:
diff --git a/src/net/log/net_log_event_type_list.h b/src/net/log/net_log_event_type_list.h
index 043cf8e..939c687 100644
--- a/src/net/log/net_log_event_type_list.h
+++ b/src/net/log/net_log_event_type_list.h
@@ -484,16 +484,6 @@
 //   }
 EVENT_TYPE(SSL_PRIVATE_KEY_OP)
 
-// The start/end of getting a domain-bound certificate and private key.
-//
-// The END event will contain the following parameters on failure:
-//
-//   {
-//     "net_error": <Net integer error code>,
-//   }
-// TODO(nharper): remove this event.
-EVENT_TYPE(SSL_GET_DOMAIN_BOUND_CERT)
-
 // The start/end of getting a Channel ID key.
 //
 // The START event contains these parameters:
@@ -510,14 +500,6 @@
 //   }
 EVENT_TYPE(SSL_GET_CHANNEL_ID)
 
-// The SSL server requested a channel id.
-// TODO(nharper): Remove this event.
-EVENT_TYPE(SSL_CHANNEL_ID_REQUESTED)
-
-// A channel ID was provided to the SSL library to be sent to the SSL server.
-// TODO(nharper): Remove this event.
-EVENT_TYPE(SSL_CHANNEL_ID_PROVIDED)
-
 // A client certificate (or none) was provided to the SSL library to be sent
 // to the SSL server.
 // The following parameters are attached to the event:
@@ -539,20 +521,6 @@
 EVENT_TYPE(SSL_READ_ERROR)
 EVENT_TYPE(SSL_WRITE_ERROR)
 
-// An SSL connection needs to be retried with a lower protocol version because
-// the server may be intolerant of the protocol version we offered.
-// The following parameters are attached to the event:
-//   {
-//     "host_and_port": <String encoding the host and port>,
-//     "net_error": <Net integer error code>,
-//     "version_before": <SSL version before the fallback>,
-//     "version_after": <SSL version after the fallback>,
-//   }
-//
-// TODO(davidben): Remove this event and the corresponding log_view_painter.js
-// logic in M56.
-EVENT_TYPE(SSL_VERSION_FALLBACK)
-
 // An SSL connection needs to be retried with more cipher suites because the
 // server may require a deprecated cipher suite. The following parameters are
 // attached to the event:
@@ -575,16 +543,6 @@
 // we merged the verification with the SSLHostInfo. (Note: now obsolete.)
 EVENT_TYPE(SSL_VERIFICATION_MERGED)
 
-// An SSL error occurred while calling an NSS function not directly related to
-// one of the above activities.  Can also be used when more information than
-// is provided by just an error code is needed:
-//   {
-//     "function": <Name of the NSS function, as a string>,
-//     "param": <Most relevant parameter, if any>,
-//     "ssl_lib_error": <NSS library's integer code for the specific error type>
-//   }
-EVENT_TYPE(SSL_NSS_ERROR)
-
 // An SSL connection sent or received an alert.
 // The following parameters are attached:
 //   {
diff --git a/src/net/proxy/dhcp_proxy_script_fetcher.cc b/src/net/proxy/dhcp_proxy_script_fetcher.cc
index 1771be0..7c381ca 100644
--- a/src/net/proxy/dhcp_proxy_script_fetcher.cc
+++ b/src/net/proxy/dhcp_proxy_script_fetcher.cc
@@ -27,6 +27,8 @@
 
 void DoNothingDhcpProxyScriptFetcher::Cancel() {}
 
+void DoNothingDhcpProxyScriptFetcher::OnShutdown() {}
+
 const GURL& DoNothingDhcpProxyScriptFetcher::GetPacURL() const {
   return gurl_;
 }
diff --git a/src/net/proxy/dhcp_proxy_script_fetcher.h b/src/net/proxy/dhcp_proxy_script_fetcher.h
index a85234d..0d4a89c 100644
--- a/src/net/proxy/dhcp_proxy_script_fetcher.h
+++ b/src/net/proxy/dhcp_proxy_script_fetcher.h
@@ -62,6 +62,11 @@
   // Aborts the in-progress fetch (if any).
   virtual void Cancel() = 0;
 
+  // Fails the in-progress fetch (if any) and future requests will fail
+  // immediately. Must be called before the URLRequestContext the fetcher was
+  // created with is torn down.
+  virtual void OnShutdown() = 0;
+
   // After successful completion of |Fetch()|, this will return the URL
   // retrieved from DHCP.  It is reset if/when |Fetch()| is called again.
   virtual const GURL& GetPacURL() const = 0;
@@ -88,6 +93,7 @@
   int Fetch(base::string16* utf16_text,
             const CompletionCallback& callback) override;
   void Cancel() override;
+  void OnShutdown() override;
   const GURL& GetPacURL() const override;
 
  private:
diff --git a/src/net/proxy/dhcp_proxy_script_fetcher_win.cc b/src/net/proxy/dhcp_proxy_script_fetcher_win.cc
index 1a28eea..fc72b86 100644
--- a/src/net/proxy/dhcp_proxy_script_fetcher_win.cc
+++ b/src/net/proxy/dhcp_proxy_script_fetcher_win.cc
@@ -82,6 +82,9 @@
     return ERR_UNEXPECTED;
   }
 
+  if (!url_request_context_)
+    return ERR_CONTEXT_SHUT_DOWN;
+
   state_ = STATE_WAIT_ADAPTERS;
   callback_ = callback;
   destination_string_ = utf16_text;
@@ -110,6 +113,23 @@
   CancelImpl();
 }
 
+void DhcpProxyScriptFetcherWin::OnShutdown() {
+  DCHECK(CalledOnValidThread());
+
+  // Back up callback, if there is one, as CancelImpl() will destroy it.
+  net::CompletionCallback callback = std::move(callback_);
+
+  // Cancel current request, if there is one.
+  CancelImpl();
+
+  // Prevent future network requests.
+  url_request_context_ = nullptr;
+
+  // Invoke callback with error, if present.
+  if (callback)
+    callback.Run(ERR_CONTEXT_SHUT_DOWN);
+}
+
 void DhcpProxyScriptFetcherWin::CancelImpl() {
   DCHECK(CalledOnValidThread());
 
diff --git a/src/net/proxy/dhcp_proxy_script_fetcher_win.h b/src/net/proxy/dhcp_proxy_script_fetcher_win.h
index ee291b4..3ca981d 100644
--- a/src/net/proxy/dhcp_proxy_script_fetcher_win.h
+++ b/src/net/proxy/dhcp_proxy_script_fetcher_win.h
@@ -44,6 +44,7 @@
   int Fetch(base::string16* utf16_text,
             const CompletionCallback& callback) override;
   void Cancel() override;
+  void OnShutdown() override;
   const GURL& GetPacURL() const override;
   std::string GetFetcherName() const override;
 
@@ -165,7 +166,8 @@
 
   base::OneShotTimer wait_timer_;
 
-  URLRequestContext* const url_request_context_;
+  // Set to nullptr on cancellation.
+  URLRequestContext* url_request_context_;
 
   // NULL or the AdapterQuery currently in flight.
   scoped_refptr<AdapterQuery> last_query_;
diff --git a/src/net/proxy/dhcp_proxy_script_fetcher_win_unittest.cc b/src/net/proxy/dhcp_proxy_script_fetcher_win_unittest.cc
index 3c5c4f0..03ed2c9 100644
--- a/src/net/proxy/dhcp_proxy_script_fetcher_win_unittest.cc
+++ b/src/net/proxy/dhcp_proxy_script_fetcher_win_unittest.cc
@@ -392,6 +392,15 @@
     ASSERT_THAT(result, IsError(ERR_IO_PENDING));
   }
 
+  int RunTestThatMayFailSync() {
+    int result = fetcher_.Fetch(
+        &pac_text_,
+        base::Bind(&FetcherClient::OnCompletion, base::Unretained(this)));
+    if (result != ERR_IO_PENDING)
+      result_ = result;
+    return result;
+  }
+
   void RunMessageLoopUntilComplete() {
     while (!finished_) {
       base::RunLoop().RunUntilIdle();
@@ -650,6 +659,24 @@
   (*test_functions.begin())(&client);
 }
 
+TEST(DhcpProxyScriptFetcherWin, OnShutdown) {
+  FetcherClient client;
+  TestURLRequestContext context;
+  std::unique_ptr<DummyDhcpProxyScriptAdapterFetcher> adapter_fetcher(
+      new DummyDhcpProxyScriptAdapterFetcher(&context, client.GetTaskRunner()));
+  adapter_fetcher->Configure(true, OK, L"bingo", 1);
+  client.fetcher_.PushBackAdapter("a", adapter_fetcher.release());
+  client.RunTest();
+
+  client.fetcher_.OnShutdown();
+  EXPECT_TRUE(client.finished_);
+  EXPECT_THAT(client.result_, IsError(ERR_CONTEXT_SHUT_DOWN));
+
+  client.ResetTestState();
+  EXPECT_THAT(client.RunTestThatMayFailSync(), IsError(ERR_CONTEXT_SHUT_DOWN));
+  EXPECT_EQ(0u, context.url_requests().size());
+}
+
 }  // namespace
 
 }  // namespace net
diff --git a/src/net/proxy/mock_proxy_script_fetcher.cc b/src/net/proxy/mock_proxy_script_fetcher.cc
index 9ace8fb..8813b84 100644
--- a/src/net/proxy/mock_proxy_script_fetcher.cc
+++ b/src/net/proxy/mock_proxy_script_fetcher.cc
@@ -4,6 +4,7 @@
 
 #include "net/proxy/mock_proxy_script_fetcher.h"
 
+#include "base/callback_helpers.h"
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
@@ -15,8 +16,8 @@
 
 MockProxyScriptFetcher::MockProxyScriptFetcher()
     : pending_request_text_(NULL),
-      waiting_for_fetch_(false) {
-}
+      waiting_for_fetch_(false),
+      is_shutdown_(false) {}
 
 MockProxyScriptFetcher::~MockProxyScriptFetcher() {}
 
@@ -25,14 +26,17 @@
                                   const CompletionCallback& callback) {
   DCHECK(!has_pending_request());
 
+  if (waiting_for_fetch_)
+    base::MessageLoop::current()->QuitWhenIdle();
+
+  if (is_shutdown_)
+    return ERR_CONTEXT_SHUT_DOWN;
+
   // Save the caller's information, and have them wait.
   pending_request_url_ = url;
   pending_request_callback_ = callback;
   pending_request_text_ = text;
 
-  if (waiting_for_fetch_)
-    base::MessageLoop::current()->QuitWhenIdle();
-
   return ERR_IO_PENDING;
 }
 
@@ -46,6 +50,14 @@
 }
 
 void MockProxyScriptFetcher::Cancel() {
+  pending_request_callback_.Reset();
+}
+
+void MockProxyScriptFetcher::OnShutdown() {
+  is_shutdown_ = true;
+  if (pending_request_callback_) {
+    base::ResetAndReturn(&pending_request_callback_).Run(ERR_CONTEXT_SHUT_DOWN);
+  }
 }
 
 URLRequestContext* MockProxyScriptFetcher::GetRequestContext() const {
diff --git a/src/net/proxy/mock_proxy_script_fetcher.h b/src/net/proxy/mock_proxy_script_fetcher.h
index 458f477..8cf6cd5 100644
--- a/src/net/proxy/mock_proxy_script_fetcher.h
+++ b/src/net/proxy/mock_proxy_script_fetcher.h
@@ -27,6 +27,7 @@
             base::string16* text,
             const CompletionCallback& callback) override;
   void Cancel() override;
+  void OnShutdown() override;
   URLRequestContext* GetRequestContext() const override;
 
   void NotifyFetchCompletion(int result, const std::string& ascii_text);
@@ -41,6 +42,7 @@
   CompletionCallback pending_request_callback_;
   base::string16* pending_request_text_;
   bool waiting_for_fetch_;
+  bool is_shutdown_;
 };
 
 }  // namespace net
diff --git a/src/net/proxy/proxy_script_decider.cc b/src/net/proxy/proxy_script_decider.cc
index 761d69d..bc8a967 100644
--- a/src/net/proxy/proxy_script_decider.cc
+++ b/src/net/proxy/proxy_script_decider.cc
@@ -92,14 +92,7 @@
       net_log_(NetLogWithSource::Make(net_log,
                                       NetLogSourceType::PROXY_SCRIPT_DECIDER)),
       fetch_pac_bytes_(false),
-      quick_check_enabled_(true),
-      host_resolver_(nullptr) {
-  if (proxy_script_fetcher &&
-      proxy_script_fetcher->GetRequestContext() &&
-      proxy_script_fetcher->GetRequestContext()->host_resolver()) {
-    host_resolver_ = proxy_script_fetcher->GetRequestContext()->host_resolver();
-  }
-}
+      quick_check_enabled_(true) {}
 
 ProxyScriptDecider::~ProxyScriptDecider() {
   if (next_state_ != STATE_NONE)
@@ -139,6 +132,20 @@
   return rv;
 }
 
+void ProxyScriptDecider::OnShutdown() {
+  // Don't do anything if idle.
+  if (next_state_ == STATE_NONE)
+    return;
+
+  CompletionCallback callback = std::move(callback_);
+
+  // Just cancel any pending work.
+  Cancel();
+
+  if (callback)
+    callback.Run(ERR_CONTEXT_SHUT_DOWN);
+}
+
 const ProxyConfig& ProxyScriptDecider::effective_config() const {
   DCHECK_EQ(STATE_NONE, next_state_);
   return effective_config_;
@@ -255,7 +262,8 @@
 
 int ProxyScriptDecider::DoQuickCheck() {
   DCHECK(quick_check_enabled_);
-  if (host_resolver_ == nullptr) {
+  if (!proxy_script_fetcher_ || !proxy_script_fetcher_->GetRequestContext() ||
+      !proxy_script_fetcher_->GetRequestContext()->host_resolver()) {
     // If we have no resolver, skip QuickCheck altogether.
     next_state_ = GetStartState();
     return OK;
@@ -275,9 +283,12 @@
                               kQuickCheckDelayMs),
                            base::Bind(callback, ERR_NAME_NOT_RESOLVED));
 
+  HostResolver* host_resolver =
+      proxy_script_fetcher_->GetRequestContext()->host_resolver();
+
   // We use HIGHEST here because proxy decision blocks doing any other requests.
-  return host_resolver_->Resolve(reqinfo, HIGHEST, &wpad_addresses_, callback,
-                                 &request_, net_log_);
+  return host_resolver->Resolve(reqinfo, HIGHEST, &wpad_addresses_, callback,
+                                &request_, net_log_);
 }
 
 int ProxyScriptDecider::DoQuickCheckComplete(int result) {
@@ -465,6 +476,9 @@
   net_log_.AddEvent(NetLogEventType::CANCELLED);
 
   switch (next_state_) {
+    case STATE_QUICK_CHECK_COMPLETE:
+      request_.reset();
+      break;
     case STATE_WAIT_COMPLETE:
       wait_timer_.Stop();
       break;
@@ -475,10 +489,14 @@
       break;
   }
 
+  next_state_ = STATE_NONE;
+
   // This is safe to call in any state.
   if (dhcp_proxy_script_fetcher_)
     dhcp_proxy_script_fetcher_->Cancel();
 
+  DCHECK(!request_);
+
   DidComplete();
 }
 
diff --git a/src/net/proxy/proxy_script_decider.h b/src/net/proxy/proxy_script_decider.h
index c413908..b3560ba 100644
--- a/src/net/proxy/proxy_script_decider.h
+++ b/src/net/proxy/proxy_script_decider.h
@@ -81,6 +81,10 @@
             bool fetch_pac_bytes,
             const CompletionCallback& callback);
 
+  // Shuts down any in-progress DNS requests, and cancels any ScriptFetcher
+  // requests.  Does not call OnShutdown on the [Dhcp]ProxyScriptFetcher.
+  void OnShutdown();
+
   const ProxyConfig& effective_config() const;
 
   const scoped_refptr<ProxyResolverScriptData>& script_data() const;
@@ -203,7 +207,6 @@
 
   AddressList wpad_addresses_;
   base::OneShotTimer quick_check_timer_;
-  HostResolver* host_resolver_;
   std::unique_ptr<HostResolver::Request> request_;
   base::Time quick_check_start_time_;
 
diff --git a/src/net/proxy/proxy_script_decider_unittest.cc b/src/net/proxy/proxy_script_decider_unittest.cc
index dfcfeda..1a2a368 100644
--- a/src/net/proxy/proxy_script_decider_unittest.cc
+++ b/src/net/proxy/proxy_script_decider_unittest.cc
@@ -128,6 +128,8 @@
 
   void Cancel() override {}
 
+  void OnShutdown() override { request_context_ = nullptr; }
+
   URLRequestContext* GetRequestContext() const override {
     return request_context_;
   }
@@ -146,6 +148,7 @@
   int Fetch(base::string16* utf16_text,
             const CompletionCallback& callback) override;
   void Cancel() override;
+  void OnShutdown() override;
   const GURL& GetPacURL() const override;
 
   virtual void SetPacURL(const GURL& url);
@@ -172,6 +175,8 @@
 
 void MockDhcpProxyScriptFetcher::Cancel() { }
 
+void MockDhcpProxyScriptFetcher::OnShutdown() {}
+
 const GURL& MockDhcpProxyScriptFetcher::GetPacURL() const {
   return gurl_;
 }
@@ -333,7 +338,6 @@
   }
 
  protected:
-  std::unique_ptr<ProxyScriptDecider> decider_;
   MockHostResolver resolver_;
   Rules rules_;
   Rules::Rule rule_;
@@ -341,6 +345,7 @@
   RuleBasedProxyScriptFetcher fetcher_;
   ProxyConfig config_;
   DoNothingDhcpProxyScriptFetcher dhcp_fetcher_;
+  std::unique_ptr<ProxyScriptDecider> decider_;
 
  private:
   URLRequestContext request_context_;
@@ -438,6 +443,17 @@
   EXPECT_EQ(rule.url, decider_->effective_config().pac_url());
 }
 
+TEST_F(ProxyScriptDeciderQuickCheckTest, ShutdownDuringResolve) {
+  resolver_.set_ondemand_mode(true);
+
+  EXPECT_THAT(StartDecider(), IsError(ERR_IO_PENDING));
+  EXPECT_TRUE(resolver_.has_pending_requests());
+
+  decider_->OnShutdown();
+  EXPECT_FALSE(resolver_.has_pending_requests());
+  EXPECT_EQ(ERR_CONTEXT_SHUT_DOWN, callback_.WaitForResult());
+}
+
 // Regression test for http://crbug.com/409698.
 // This test lets the state machine get into state QUICK_CHECK_COMPLETE, then
 // destroys the decider, causing a cancel.
@@ -670,6 +686,8 @@
 
   void Cancel() override {}
 
+  void OnShutdown() override {}
+
   const GURL& GetPacURL() const override { return gurl_; }
 
   const base::string16& expected_text() const {
@@ -752,6 +770,8 @@
 
   void Cancel() override { callback_.Reset(); }
 
+  void OnShutdown() override {}
+
   const GURL& GetPacURL() const override { return dummy_gurl_; }
 
   void CallbackWithFailure() {
diff --git a/src/net/proxy/proxy_script_fetcher.h b/src/net/proxy/proxy_script_fetcher.h
index ed89268..3905b10 100644
--- a/src/net/proxy/proxy_script_fetcher.h
+++ b/src/net/proxy/proxy_script_fetcher.h
@@ -54,6 +54,12 @@
   // Returns the request context that this fetcher uses to issue downloads,
   // or NULL.
   virtual URLRequestContext* GetRequestContext() const = 0;
+
+  // Fails the in-progress fetch (if any) and future requests will fail
+  // immediately. GetRequestContext() will always return nullptr after this is
+  // called.  Must be called before the URLRequestContext the fetcher was
+  // created with is torn down.
+  virtual void OnShutdown() = 0;
 };
 
 }  // namespace net
diff --git a/src/net/proxy/proxy_script_fetcher_impl.cc b/src/net/proxy/proxy_script_fetcher_impl.cc
index d78c9fe..3548e59 100644
--- a/src/net/proxy/proxy_script_fetcher_impl.cc
+++ b/src/net/proxy/proxy_script_fetcher_impl.cc
@@ -123,6 +123,9 @@
   DCHECK(!callback.is_null());
   DCHECK(text);
 
+  if (!url_request_context_)
+    return ERR_CONTEXT_SHUT_DOWN;
+
   // Handle base-64 encoded data-urls that contain custom PAC scripts.
   if (url.SchemeIs("data")) {
     std::string mime_type;
@@ -138,8 +141,10 @@
   DCHECK(fetch_start_time_.is_null());
   fetch_start_time_ = base::TimeTicks::Now();
 
+  // Use highest priority, so if socket pools are being used for other types of
+  // requests, PAC requests are aren't blocked on them.
   cur_request_ =
-      url_request_context_->CreateRequest(url, DEFAULT_PRIORITY, this);
+      url_request_context_->CreateRequest(url, MAXIMUM_PRIORITY, this);
   cur_request_->set_method("GET");
 
   // Make sure that the PAC script is downloaded using a direct connection,
@@ -150,9 +155,11 @@
   // If the PAC script is hosted on an HTTPS server we bypass revocation
   // checking in order to avoid a circular dependency when attempting to fetch
   // the OCSP response or CRL. We could make the revocation check go direct but
-  // the proxy might be the only way to the outside world.
+  // the proxy might be the only way to the outside world.  IGNORE_LIMITS is
+  // used to avoid blocking proxy resolution on other network requests.
   cur_request_->SetLoadFlags(LOAD_BYPASS_PROXY | LOAD_DISABLE_CACHE |
-                             LOAD_DISABLE_CERT_REVOCATION_CHECKING);
+                             LOAD_DISABLE_CERT_REVOCATION_CHECKING |
+                             LOAD_IGNORE_LIMITS);
 
   // Save the caller's info for notification on completion.
   callback_ = callback;
@@ -183,6 +190,15 @@
   return url_request_context_;
 }
 
+void ProxyScriptFetcherImpl::OnShutdown() {
+  url_request_context_ = nullptr;
+
+  if (cur_request_) {
+    result_code_ = ERR_CONTEXT_SHUT_DOWN;
+    FetchCompleted();
+  }
+}
+
 void ProxyScriptFetcherImpl::OnAuthRequired(URLRequest* request,
                                             AuthChallengeInfo* auth_info) {
   DCHECK_EQ(request, cur_request_.get());
@@ -341,7 +357,7 @@
 
   DCHECK(cur_request_.get());
   result_code_ = ERR_TIMED_OUT;
-  cur_request_->Cancel();
+  FetchCompleted();
 }
 
 }  // namespace net
diff --git a/src/net/proxy/proxy_script_fetcher_impl.h b/src/net/proxy/proxy_script_fetcher_impl.h
index 7a24bf8..bc1e192 100644
--- a/src/net/proxy/proxy_script_fetcher_impl.h
+++ b/src/net/proxy/proxy_script_fetcher_impl.h
@@ -53,6 +53,7 @@
             const CompletionCallback& callback) override;
   void Cancel() override;
   URLRequestContext* GetRequestContext() const override;
+  void OnShutdown() override;
 
   // URLRequest::Delegate methods:
   void OnAuthRequired(URLRequest* request,
@@ -83,8 +84,9 @@
   // Callback for time-out task of request with id |id|.
   void OnTimeout(int id);
 
-  // The context used for making network requests.
-  URLRequestContext* const url_request_context_;
+  // The context used for making network requests.  Set to nullptr by
+  // OnShutdown.
+  URLRequestContext* url_request_context_;
 
   // Buffer that URLRequest writes into.
   scoped_refptr<IOBuffer> buf_;
diff --git a/src/net/proxy/proxy_script_fetcher_impl_unittest.cc b/src/net/proxy/proxy_script_fetcher_impl_unittest.cc
index bc9a138..c1bebe7 100644
--- a/src/net/proxy/proxy_script_fetcher_impl_unittest.cc
+++ b/src/net/proxy/proxy_script_fetcher_impl_unittest.cc
@@ -4,14 +4,19 @@
 
 #include "net/proxy/proxy_script_fetcher_impl.h"
 
+#include <memory>
 #include <string>
 #include <utility>
+#include <vector>
 
 #include "base/compiler_specific.h"
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
 #include "base/path_service.h"
+#include "base/run_loop.h"
+#include "base/sequenced_task_runner.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -27,10 +32,14 @@
 #include "net/http/http_cache.h"
 #include "net/http/http_network_session.h"
 #include "net/http/http_server_properties_impl.h"
+#include "net/http/http_transaction_factory.h"
 #include "net/http/transport_security_state.h"
 #include "net/net_features.h"
+#include "net/socket/client_socket_pool_manager.h"
+#include "net/socket/transport_client_socket_pool.h"
 #include "net/ssl/ssl_config_service_defaults.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
+#include "net/test/embedded_test_server/embedded_test_server_connection_listener.h"
 #include "net/test/gtest_util.h"
 #include "net/url_request/url_request_context_storage.h"
 #include "net/url_request/url_request_file_job.h"
@@ -65,6 +74,36 @@
   base::string16 text;
 };
 
+// Waits for the specified number of connection attempts to be seen.
+class WaitForConnectionsListener
+    : public test_server::EmbeddedTestServerConnectionListener {
+ public:
+  explicit WaitForConnectionsListener(int expected_num_connections)
+      : expected_num_connections_(expected_num_connections),
+        task_runner_(base::SequencedTaskRunnerHandle::Get()) {}
+
+  void AcceptedSocket(const StreamSocket& socket) override {
+    ++seen_connections_;
+    EXPECT_LE(seen_connections_, expected_num_connections_);
+    if (expected_num_connections_ == seen_connections_)
+      task_runner_->PostTask(FROM_HERE, run_loop_.QuitClosure());
+  }
+
+  void ReadFromSocket(const StreamSocket& socket, int rv) override {}
+
+  void Wait() { run_loop_.Run(); }
+
+ private:
+  int seen_connections_ = 0;
+  int expected_num_connections_;
+
+  scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaitForConnectionsListener);
+};
+
 // A non-mock URL request which can access http:// and file:// urls, in the case
 // the tests were built with file support.
 class RequestContext : public URLRequestContext {
@@ -496,6 +535,81 @@
   }
 }
 
+// Makes sure that a request gets through when the socket pool is full, so
+// ProxyScriptFetcherImpl can use the same URLRequestContext as everything else.
+TEST_F(ProxyScriptFetcherImplTest, Priority) {
+  // Enough requests to exceed the per-pool limit, which is also enough to
+  // exceed the per-group limit.
+  int num_requests = 10 + ClientSocketPoolManager::max_sockets_per_pool(
+                              HttpNetworkSession::NORMAL_SOCKET_POOL);
+
+  WaitForConnectionsListener connection_listener(num_requests);
+  test_server_.SetConnectionListener(&connection_listener);
+  ASSERT_TRUE(test_server_.Start());
+
+  std::vector<std::unique_ptr<ProxyScriptFetcherImpl>> pac_fetchers;
+
+  TestCompletionCallback callback;
+  base::string16 text;
+  for (int i = 0; i < num_requests; i++) {
+    std::unique_ptr<ProxyScriptFetcherImpl> pac_fetcher =
+        base::MakeUnique<ProxyScriptFetcherImpl>(&context_);
+    GURL url(test_server_.GetURL("/hung"));
+    // Fine to use the same string and callback for all of these, as they should
+    // all hang.
+    int result = pac_fetcher->Fetch(url, &text, callback.callback());
+    EXPECT_THAT(result, IsError(ERR_IO_PENDING));
+    pac_fetchers.push_back(std::move(pac_fetcher));
+  }
+
+  connection_listener.Wait();
+  // None of the callbacks should have been invoked - all jobs should still be
+  // hung.
+  EXPECT_FALSE(callback.have_result());
+
+  // Need to shut down the server before |connection_listener| is destroyed.
+  EXPECT_TRUE(test_server_.ShutdownAndWaitUntilComplete());
+}
+
+TEST_F(ProxyScriptFetcherImplTest, OnShutdown) {
+  ASSERT_TRUE(test_server_.Start());
+
+  ProxyScriptFetcherImpl pac_fetcher(&context_);
+  base::string16 text;
+  TestCompletionCallback callback;
+  int result = pac_fetcher.Fetch(test_server_.GetURL("/hung"), &text,
+                                 callback.callback());
+  EXPECT_THAT(result, IsError(ERR_IO_PENDING));
+  EXPECT_EQ(1u, context_.url_requests().size());
+
+  pac_fetcher.OnShutdown();
+  EXPECT_EQ(0u, context_.url_requests().size());
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONTEXT_SHUT_DOWN));
+
+  // Make sure there's no asynchronous completion notification.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(0u, context_.url_requests().size());
+  EXPECT_FALSE(callback.have_result());
+
+  result = pac_fetcher.Fetch(test_server_.GetURL("/hung"), &text,
+                             callback.callback());
+  EXPECT_THAT(result, IsError(ERR_CONTEXT_SHUT_DOWN));
+}
+
+TEST_F(ProxyScriptFetcherImplTest, OnShutdownWithNoLiveRequest) {
+  ASSERT_TRUE(test_server_.Start());
+
+  ProxyScriptFetcherImpl pac_fetcher(&context_);
+  pac_fetcher.OnShutdown();
+
+  base::string16 text;
+  TestCompletionCallback callback;
+  int result = pac_fetcher.Fetch(test_server_.GetURL("/hung"), &text,
+                                 callback.callback());
+  EXPECT_THAT(result, IsError(ERR_CONTEXT_SHUT_DOWN));
+  EXPECT_EQ(0u, context_.url_requests().size());
+}
+
 }  // namespace
 
 }  // namespace net
diff --git a/src/net/proxy/proxy_service.cc b/src/net/proxy/proxy_service.cc
index a81d3f6..4a21400 100644
--- a/src/net/proxy/proxy_service.cc
+++ b/src/net/proxy/proxy_service.cc
@@ -62,6 +62,8 @@
 
 namespace {
 
+const size_t kDefaultNumPacThreads = 4;
+
 // When the IP address changes we don't immediately re-run proxy auto-config.
 // Instead, we  wait for |kDelayAfterNetworkChangesMs| before
 // attempting to re-valuate proxy auto-config.
@@ -456,6 +458,12 @@
     return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
   }
 
+  // This must be called before the HostResolver is torn down.
+  void OnShutdown() {
+    if (decider_)
+      decider_->OnShutdown();
+  }
+
   void set_quick_check_enabled(bool enabled) { quick_check_enabled_ = enabled; }
   bool quick_check_enabled() const { return quick_check_enabled_; }
 
@@ -950,7 +958,6 @@
 // static
 std::unique_ptr<ProxyService> ProxyService::CreateUsingSystemProxyResolver(
     std::unique_ptr<ProxyConfigService> proxy_config_service,
-    size_t num_pac_threads,
     NetLog* net_log) {
   DCHECK(proxy_config_service);
 
@@ -959,12 +966,9 @@
     return CreateWithoutProxyResolver(std::move(proxy_config_service), net_log);
   }
 
-  if (num_pac_threads == 0)
-    num_pac_threads = kDefaultNumPacThreads;
-
   return base::WrapUnique(new ProxyService(
       std::move(proxy_config_service),
-      base::MakeUnique<ProxyResolverFactoryForSystem>(num_pac_threads),
+      base::MakeUnique<ProxyResolverFactoryForSystem>(kDefaultNumPacThreads),
       net_log));
 }
 
@@ -982,7 +986,7 @@
   // TODO(eroman): This isn't quite right, won't work if |pc| specifies
   //               a PAC script.
   return CreateUsingSystemProxyResolver(
-      base::MakeUnique<ProxyConfigServiceFixed>(pc), 0, NULL);
+      base::MakeUnique<ProxyConfigServiceFixed>(pc), NULL);
 }
 
 // static
@@ -1458,6 +1462,17 @@
     ApplyProxyConfigIfAvailable();
 }
 
+void ProxyService::OnShutdown() {
+  // Order here does not matter for correctness. |init_proxy_resolver_| is first
+  // because shutting it down also cancels its requests using the fetcher.
+  if (init_proxy_resolver_)
+    init_proxy_resolver_->OnShutdown();
+  if (proxy_script_fetcher_)
+    proxy_script_fetcher_->OnShutdown();
+  if (dhcp_proxy_script_fetcher_)
+    dhcp_proxy_script_fetcher_->OnShutdown();
+}
+
 ProxyScriptFetcher* ProxyService::GetProxyScriptFetcher() const {
   DCHECK(CalledOnValidThread());
   return proxy_script_fetcher_.get();
diff --git a/src/net/proxy/proxy_service.h b/src/net/proxy/proxy_service.h
index 71ab110..c3a211c 100644
--- a/src/net/proxy/proxy_service.h
+++ b/src/net/proxy/proxy_service.h
@@ -71,8 +71,6 @@
     SAFE,
   };
 
-  static const size_t kDefaultNumPacThreads = 4;
-
   // This interface defines the set of policies for when to poll the PAC
   // script for changes.
   //
@@ -225,6 +223,11 @@
       std::unique_ptr<DhcpProxyScriptFetcher> dhcp_proxy_script_fetcher);
   ProxyScriptFetcher* GetProxyScriptFetcher() const;
 
+  // Cancels all network requests, and prevents the service from creating new
+  // ones.  Must be called before the URLRequestContext the ProxyService was
+  // created with is torn down, if it's torn down before th ProxyService itself.
+  void OnShutdown();
+
   // Tells this ProxyService to start using a new ProxyConfigService to
   // retrieve its ProxyConfig from. The new ProxyConfigService will immediately
   // be queried for new config info which will be used for all subsequent
@@ -262,7 +265,6 @@
   // proxy autoconfig.
   static std::unique_ptr<ProxyService> CreateUsingSystemProxyResolver(
       std::unique_ptr<ProxyConfigService> proxy_config_service,
-      size_t num_pac_threads,
       NetLog* net_log);
 
   // Creates a ProxyService without support for proxy autoconfig.
diff --git a/src/net/proxy/proxy_service_unittest.cc b/src/net/proxy/proxy_service_unittest.cc
index c57b238..bffd000 100644
--- a/src/net/proxy/proxy_service_unittest.cc
+++ b/src/net/proxy/proxy_service_unittest.cc
@@ -3685,4 +3685,65 @@
   }
 }
 
+TEST_F(ProxyServiceTest, OnShutdownWithLiveRequest) {
+  MockProxyConfigService* config_service =
+      new MockProxyConfigService("http://foopy/proxy.pac");
+
+  MockAsyncProxyResolver resolver;
+  MockAsyncProxyResolverFactory* factory =
+      new MockAsyncProxyResolverFactory(true);
+
+  ProxyService service(base::WrapUnique(config_service),
+                       base::WrapUnique(factory), nullptr);
+
+  MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
+  service.SetProxyScriptFetchers(
+      fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
+
+  ProxyInfo info;
+  TestCompletionCallback callback;
+  ProxyService::PacRequest* request;
+  int rv = service.ResolveProxy(GURL("http://request/"), std::string(), &info,
+                                callback.callback(), &request, nullptr,
+                                NetLogWithSource());
+  EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+  // The first request should have triggered download of PAC script.
+  EXPECT_TRUE(fetcher->has_pending_request());
+  EXPECT_EQ(GURL("http://foopy/proxy.pac"), fetcher->pending_request_url());
+
+  service.OnShutdown();
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+  EXPECT_FALSE(fetcher->has_pending_request());
+  EXPECT_TRUE(info.is_direct());
+}
+
+TEST_F(ProxyServiceTest, OnShutdownFollowedByRequest) {
+  MockProxyConfigService* config_service =
+      new MockProxyConfigService("http://foopy/proxy.pac");
+
+  MockAsyncProxyResolver resolver;
+  MockAsyncProxyResolverFactory* factory =
+      new MockAsyncProxyResolverFactory(true);
+
+  ProxyService service(base::WrapUnique(config_service),
+                       base::WrapUnique(factory), nullptr);
+
+  MockProxyScriptFetcher* fetcher = new MockProxyScriptFetcher;
+  service.SetProxyScriptFetchers(
+      fetcher, base::WrapUnique(new DoNothingDhcpProxyScriptFetcher()));
+
+  service.OnShutdown();
+
+  ProxyInfo info;
+  TestCompletionCallback callback;
+  ProxyService::PacRequest* request;
+  int rv = service.ResolveProxy(GURL("http://request/"), std::string(), &info,
+                                callback.callback(), &request, nullptr,
+                                NetLogWithSource());
+  EXPECT_THAT(rv, IsOk());
+  EXPECT_FALSE(fetcher->has_pending_request());
+  EXPECT_TRUE(info.is_direct());
+}
+
 }  // namespace net
diff --git a/src/net/quic/chromium/bidirectional_stream_quic_impl.cc b/src/net/quic/chromium/bidirectional_stream_quic_impl.cc
index 04278f1..3384010 100644
--- a/src/net/quic/chromium/bidirectional_stream_quic_impl.cc
+++ b/src/net/quic/chromium/bidirectional_stream_quic_impl.cc
@@ -38,7 +38,6 @@
       has_sent_headers_(false),
       has_received_headers_(false),
       send_request_headers_automatically_(true),
-      waiting_for_confirmation_(false),
       weak_factory_(this) {
   DCHECK(session_);
   session_->AddObserver(this);
@@ -73,9 +72,13 @@
   delegate_ = delegate;
   request_info_ = request_info;
 
-  stream_request_ = session_->CreateStreamRequest();
+  stream_request_ =
+      session_->CreateStreamRequest(request_info_->method == "POST");
   int rv = stream_request_->StartRequest(base::Bind(
       &BidirectionalStreamQuicImpl::OnStreamReady, weak_factory_.GetWeakPtr()));
+  if (rv == ERR_IO_PENDING)
+    return;
+
   if (rv == OK) {
     OnStreamReady(rv);
   } else if (!was_handshake_confirmed_) {
@@ -265,15 +268,26 @@
 }
 
 void BidirectionalStreamQuicImpl::OnClose() {
+  DCHECK(session_);
   DCHECK(stream_);
 
-  if (stream_->connection_error() == QUIC_NO_ERROR &&
-      stream_->stream_error() == QUIC_STREAM_NO_ERROR) {
-    ResetStream();
+  if (stream_->connection_error() != QUIC_NO_ERROR ||
+      stream_->stream_error() != QUIC_STREAM_NO_ERROR) {
+    NotifyError(was_handshake_confirmed_ ? ERR_QUIC_PROTOCOL_ERROR
+                                         : ERR_QUIC_HANDSHAKE_FAILED);
     return;
   }
-  NotifyError(was_handshake_confirmed_ ? ERR_QUIC_PROTOCOL_ERROR
-                                       : ERR_QUIC_HANDSHAKE_FAILED);
+
+  if (!stream_->fin_sent() || !stream_->fin_received()) {
+    // The connection must have been closed by the peer with QUIC_NO_ERROR,
+    // which is improper.
+    NotifyError(ERR_UNEXPECTED);
+    return;
+  }
+
+  // The connection was closed normally so there is no need to notify
+  // the delegate.
+  ResetStream();
 }
 
 void BidirectionalStreamQuicImpl::OnError(int error) {
@@ -286,8 +300,6 @@
 
 void BidirectionalStreamQuicImpl::OnCryptoHandshakeConfirmed() {
   was_handshake_confirmed_ = true;
-  if (waiting_for_confirmation_)
-    NotifyStreamReady();
 }
 
 void BidirectionalStreamQuicImpl::OnSuccessfulVersionNegotiation(
@@ -308,10 +320,6 @@
     stream_ = stream_request_->ReleaseStream();
     stream_request_.reset();
     stream_->SetDelegate(this);
-    if (!was_handshake_confirmed_ && request_info_->method == "POST") {
-      waiting_for_confirmation_ = true;
-      return;
-    }
     NotifyStreamReady();
   } else {
     NotifyError(rv);
@@ -353,6 +361,11 @@
 }
 
 void BidirectionalStreamQuicImpl::ResetStream() {
+  if (session_) {
+    session_->RemoveObserver(this);
+    session_ = nullptr;
+  }
+
   if (!stream_)
     return;
   closed_stream_received_bytes_ = stream_->stream_bytes_read();
diff --git a/src/net/quic/chromium/bidirectional_stream_quic_impl.h b/src/net/quic/chromium/bidirectional_stream_quic_impl.h
index 38fb1ab..7723faf 100644
--- a/src/net/quic/chromium/bidirectional_stream_quic_impl.h
+++ b/src/net/quic/chromium/bidirectional_stream_quic_impl.h
@@ -129,10 +129,6 @@
   // frame with data frame in the same packet if possible.
   bool send_request_headers_automatically_;
 
-  // True of this stream is waiting for the QUIC handshake to be confirmed
-  // before sending headers.
-  bool waiting_for_confirmation_;
-
   base::WeakPtrFactory<BidirectionalStreamQuicImpl> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(BidirectionalStreamQuicImpl);
diff --git a/src/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc b/src/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc
index c92c380..fe86705 100644
--- a/src/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc
+++ b/src/net/quic/chromium/bidirectional_stream_quic_impl_unittest.cc
@@ -915,6 +915,7 @@
   EXPECT_FALSE(delegate->is_ready());
   ConfirmHandshake();
   delegate->WaitUntilNextCallback();  // OnStreamReady
+  EXPECT_TRUE(delegate->is_ready());
 
   // Sends request headers separately, which causes them to be sent in a
   // separate packet.
@@ -1191,10 +1192,10 @@
   SetRequest("POST", "/", DEFAULT_PRIORITY);
   size_t spdy_request_headers_frame_length;
   QuicStreamOffset header_stream_offset = 0;
+  AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset));
   AddWrite(ConstructRequestHeadersPacketInner(
-      1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
+      2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
       &spdy_request_headers_frame_length, &header_stream_offset));
-  AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset));
   AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData,
                                &client_maker_));
   AddWrite(ConstructClientAckPacket(4, 3, 1, 1));
@@ -1349,11 +1350,10 @@
   SetRequest("POST", "/", DEFAULT_PRIORITY);
   size_t spdy_request_headers_frame_length;
   QuicStreamOffset header_stream_offset = 0;
+  AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset));
   AddWrite(ConstructRequestHeadersPacketInner(
-      1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
+      2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
       &spdy_request_headers_frame_length, &header_stream_offset));
-
-  AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset));
   AddWrite(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, 0,
                                      kUploadData, &client_maker_));
   AddWrite(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 3, 3, kFin,
@@ -1540,10 +1540,10 @@
   SetRequest("POST", "/", DEFAULT_PRIORITY);
   size_t spdy_request_headers_frame_length;
   QuicStreamOffset header_stream_offset = 0;
+  AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset));
   AddWrite(ConstructRequestHeadersPacketInner(
-      1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
+      2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
       &spdy_request_headers_frame_length, &header_stream_offset));
-  AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset));
   Initialize();
 
   BidirectionalStreamRequestInfo request;
@@ -1600,10 +1600,10 @@
   SetRequest("POST", "/", DEFAULT_PRIORITY);
   size_t spdy_request_headers_frame_length;
   QuicStreamOffset header_stream_offset = 0;
+  AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset));
   AddWrite(ConstructRequestHeadersPacketInner(
-      1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
+      2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
       &spdy_request_headers_frame_length, &header_stream_offset));
-  AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset));
   AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1));
 
   Initialize();
@@ -1654,10 +1654,10 @@
   SetRequest("POST", "/", DEFAULT_PRIORITY);
   size_t spdy_request_headers_frame_length;
   QuicStreamOffset header_stream_offset = 0;
+  AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset));
   AddWrite(ConstructRequestHeadersPacketInner(
-      1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
+      2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
       &spdy_request_headers_frame_length, &header_stream_offset));
-  AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset));
   AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1));
 
   Initialize();
@@ -1700,10 +1700,10 @@
   SetRequest("POST", "/", DEFAULT_PRIORITY);
   size_t spdy_request_headers_frame_length;
   QuicStreamOffset header_stream_offset = 0;
+  AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset));
   AddWrite(ConstructRequestHeadersPacketInner(
-      1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
+      2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY,
       &spdy_request_headers_frame_length, &header_stream_offset));
-  AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset));
   AddWrite(ConstructClientAckPacket(3, 3, 1, 1));
   AddWrite(ConstructClientRstStreamPacket(4));
 
diff --git a/src/net/quic/chromium/quic_chromium_client_session.cc b/src/net/quic/chromium/quic_chromium_client_session.cc
index 0701f6a..cd123b1 100644
--- a/src/net/quic/chromium/quic_chromium_client_session.cc
+++ b/src/net/quic/chromium/quic_chromium_client_session.cc
@@ -187,8 +187,13 @@
 }  // namespace
 
 QuicChromiumClientSession::StreamRequest::StreamRequest(
-    const base::WeakPtr<QuicChromiumClientSession>& session)
-    : session_(session), stream_(nullptr) {}
+    const base::WeakPtr<QuicChromiumClientSession>& session,
+    bool requires_confirmation)
+    : session_(session),
+      requires_confirmation_(requires_confirmation),
+      stream_(nullptr),
+      next_state_(STATE_NONE),
+      weak_factory_(this) {}
 
 QuicChromiumClientSession::StreamRequest::~StreamRequest() {
   if (stream_)
@@ -201,12 +206,11 @@
 int QuicChromiumClientSession::StreamRequest::StartRequest(
     const CompletionCallback& callback) {
   DCHECK(session_);
-  int rv = session_->TryCreateStream(this);
-  if (rv == ERR_IO_PENDING) {
+
+  next_state_ = STATE_WAIT_FOR_CONFIRMATION;
+  int rv = DoLoop(OK);
+  if (rv == ERR_IO_PENDING)
     callback_ = callback;
-  } else {
-    session_.reset();
-  }
 
   return rv;
 }
@@ -221,17 +225,102 @@
 
 void QuicChromiumClientSession::StreamRequest::OnRequestCompleteSuccess(
     QuicChromiumClientStream* stream) {
+  DCHECK_EQ(STATE_REQUEST_STREAM_COMPLETE, next_state_);
   session_.reset();
   stream_ = stream;
-  base::ResetAndReturn(&callback_).Run(OK);
+  // This method is called even when the request completes synchronously.
+  if (callback_)
+    DoCallback(OK);
 }
 
 void QuicChromiumClientSession::StreamRequest::OnRequestCompleteFailure(
     int rv) {
+  DCHECK_EQ(STATE_REQUEST_STREAM_COMPLETE, next_state_);
   session_.reset();
+  // This method is called even when the request completes synchronously.
+  if (callback_)
+    DoCallback(rv);
+}
+
+void QuicChromiumClientSession::StreamRequest::OnIOComplete(int rv) {
+  rv = DoLoop(rv);
+
+  if (rv != ERR_IO_PENDING && !callback_.is_null()) {
+    DoCallback(rv);
+  }
+}
+
+void QuicChromiumClientSession::StreamRequest::DoCallback(int rv) {
+  CHECK_NE(rv, ERR_IO_PENDING);
+  CHECK(!callback_.is_null());
+
+  // The client callback can do anything, including destroying this class,
+  // so any pending callback must be issued after everything else is done.
   base::ResetAndReturn(&callback_).Run(rv);
 }
 
+int QuicChromiumClientSession::StreamRequest::DoLoop(int rv) {
+  do {
+    State state = next_state_;
+    next_state_ = STATE_NONE;
+    switch (state) {
+      case STATE_WAIT_FOR_CONFIRMATION:
+        CHECK_EQ(OK, rv);
+        rv = DoWaitForConfirmation();
+        break;
+      case STATE_WAIT_FOR_CONFIRMATION_COMPLETE:
+        rv = DoWaitForConfirmationComplete(rv);
+        break;
+      case STATE_REQUEST_STREAM:
+        CHECK_EQ(OK, rv);
+        rv = DoRequestStream();
+        break;
+      case STATE_REQUEST_STREAM_COMPLETE:
+        rv = DoRequestStreamComplete(rv);
+        break;
+      default:
+        NOTREACHED() << "next_state_: " << next_state_;
+        break;
+    }
+  } while (next_state_ != STATE_NONE && next_state_ && rv != ERR_IO_PENDING);
+
+  return rv;
+}
+
+int QuicChromiumClientSession::StreamRequest::DoWaitForConfirmation() {
+  next_state_ = STATE_WAIT_FOR_CONFIRMATION_COMPLETE;
+  if (requires_confirmation_) {
+    return session_->WaitForHandshakeConfirmation(
+        base::Bind(&QuicChromiumClientSession::StreamRequest::OnIOComplete,
+                   weak_factory_.GetWeakPtr()));
+  }
+
+  return OK;
+}
+
+int QuicChromiumClientSession::StreamRequest::DoWaitForConfirmationComplete(
+    int rv) {
+  DCHECK_NE(ERR_IO_PENDING, rv);
+  if (rv < 0)
+    return rv;
+
+  next_state_ = STATE_REQUEST_STREAM;
+  return OK;
+}
+
+int QuicChromiumClientSession::StreamRequest::DoRequestStream() {
+  next_state_ = STATE_REQUEST_STREAM_COMPLETE;
+
+  return session_->TryCreateStream(this);
+}
+
+int QuicChromiumClientSession::StreamRequest::DoRequestStreamComplete(int rv) {
+  DCHECK(rv == OK || !stream_);
+  session_.reset();
+
+  return rv;
+}
+
 QuicChromiumClientSession::QuicChromiumClientSession(
     QuicConnection* connection,
     std::unique_ptr<DatagramClientSocket> socket,
@@ -307,6 +396,7 @@
   DCHECK(callback_.is_null());
 
   net_log_.EndEvent(NetLogEventType::QUIC_SESSION);
+  DCHECK(waiting_for_confirmation_callbacks_.empty());
   if (!dynamic_streams().empty())
     RecordUnexpectedOpenStreams(DESTRUCTOR);
   if (!observers_.empty())
@@ -321,17 +411,9 @@
     CloseAllStreams(ERR_UNEXPECTED);
     DCHECK(observers_.empty());
     CloseAllObservers(ERR_UNEXPECTED);
+    CancelAllRequests(ERR_UNEXPECTED);
 
     connection()->set_debug_visitor(nullptr);
-
-    UMA_HISTOGRAM_COUNTS_1000("Net.QuicSession.AbortedPendingStreamRequests",
-                              stream_requests_.size());
-
-    while (!stream_requests_.empty()) {
-      StreamRequest* request = stream_requests_.front();
-      stream_requests_.pop_front();
-      request->OnRequestCompleteFailure(ERR_ABORTED);
-    }
   }
 
   if (connection()->connected()) {
@@ -463,11 +545,23 @@
 }
 
 std::unique_ptr<QuicChromiumClientSession::StreamRequest>
-QuicChromiumClientSession::CreateStreamRequest() {
+QuicChromiumClientSession::CreateStreamRequest(bool requires_confirmation) {
   // base::MakeUnique does not work because the StreamRequest constructor
   // is private.
   return std::unique_ptr<StreamRequest>(
-      new StreamRequest(weak_factory_.GetWeakPtr()));
+      new StreamRequest(weak_factory_.GetWeakPtr(), requires_confirmation));
+}
+
+int QuicChromiumClientSession::WaitForHandshakeConfirmation(
+    const CompletionCallback& callback) {
+  if (!connection()->connected())
+    return ERR_CONNECTION_CLOSED;
+
+  if (IsCryptoHandshakeConfirmed())
+    return OK;
+
+  waiting_for_confirmation_callbacks_.push_back(callback);
+  return ERR_IO_PENDING;
 }
 
 int QuicChromiumClientSession::TryCreateStream(StreamRequest* request) {
@@ -872,6 +966,8 @@
       ++it;
       observer->OnCryptoHandshakeConfirmed();
     }
+
+    NotifyRequestsOfConfirmation(OK);
   }
   QuicSpdySession::OnCryptoHandshakeEvent(event);
 }
@@ -1013,6 +1109,8 @@
   DCHECK(dynamic_streams().empty());
   CloseAllStreams(ERR_UNEXPECTED);
   CloseAllObservers(ERR_UNEXPECTED);
+  CancelAllRequests(ERR_CONNECTION_CLOSED);
+  NotifyRequestsOfConfirmation(ERR_CONNECTION_CLOSED);
   NotifyFactoryOfSessionClosedLater();
 }
 
@@ -1223,22 +1321,11 @@
   }
 }
 
-void QuicChromiumClientSession::CloseSessionOnError(int error,
+void QuicChromiumClientSession::CloseSessionOnError(int net_error,
                                                     QuicErrorCode quic_error) {
-  RecordAndCloseSessionOnError(error, quic_error);
-  NotifyFactoryOfSessionClosed();
-}
+  UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.CloseSessionOnError",
+                              -net_error);
 
-void QuicChromiumClientSession::RecordAndCloseSessionOnError(
-    int error,
-    QuicErrorCode quic_error) {
-  UMA_HISTOGRAM_SPARSE_SLOWLY("Net.QuicSession.CloseSessionOnError", -error);
-  CloseSessionOnErrorInner(error, quic_error);
-}
-
-void QuicChromiumClientSession::CloseSessionOnErrorInner(
-    int net_error,
-    QuicErrorCode quic_error) {
   if (!callback_.is_null()) {
     base::ResetAndReturn(&callback_).Run(net_error);
   }
@@ -1251,6 +1338,8 @@
     connection()->CloseConnection(quic_error, "net error",
                                   ConnectionCloseBehavior::SILENT_CLOSE);
   DCHECK(!connection()->connected());
+
+  NotifyFactoryOfSessionClosed();
 }
 
 void QuicChromiumClientSession::CloseAllStreams(int net_error) {
@@ -1270,6 +1359,25 @@
   }
 }
 
+void QuicChromiumClientSession::CancelAllRequests(int net_error) {
+  UMA_HISTOGRAM_COUNTS_1000("Net.QuicSession.AbortedPendingStreamRequests",
+                            stream_requests_.size());
+
+  while (!stream_requests_.empty()) {
+    StreamRequest* request = stream_requests_.front();
+    stream_requests_.pop_front();
+    request->OnRequestCompleteFailure(net_error);
+  }
+}
+
+void QuicChromiumClientSession::NotifyRequestsOfConfirmation(int net_error) {
+  // Post tasks to avoid reentrancy.
+  for (auto callback : waiting_for_confirmation_callbacks_)
+    task_runner_->PostTask(FROM_HERE, base::Bind(callback, net_error));
+
+  waiting_for_confirmation_callbacks_.clear();
+}
+
 std::unique_ptr<base::Value> QuicChromiumClientSession::GetInfoAsValue(
     const std::set<HostPortPair>& aliases) {
   std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
diff --git a/src/net/quic/chromium/quic_chromium_client_session.h b/src/net/quic/chromium/quic_chromium_client_session.h
index a4c07d1..8576051 100644
--- a/src/net/quic/chromium/quic_chromium_client_session.h
+++ b/src/net/quic/chromium/quic_chromium_client_session.h
@@ -94,7 +94,25 @@
    private:
     friend class QuicChromiumClientSession;
 
-    StreamRequest(const base::WeakPtr<QuicChromiumClientSession>& session);
+    enum State {
+      STATE_NONE,
+      STATE_WAIT_FOR_CONFIRMATION,
+      STATE_WAIT_FOR_CONFIRMATION_COMPLETE,
+      STATE_REQUEST_STREAM,
+      STATE_REQUEST_STREAM_COMPLETE,
+    };
+
+    StreamRequest(const base::WeakPtr<QuicChromiumClientSession>& session,
+                  bool requires_confirmation);
+
+    void OnIOComplete(int rv);
+    void DoCallback(int rv);
+
+    int DoLoop(int rv);
+    int DoWaitForConfirmation();
+    int DoWaitForConfirmationComplete(int rv);
+    int DoRequestStream();
+    int DoRequestStreamComplete(int rv);
 
     // Called by |session_| for an asynchronous request when the stream
     // request has finished successfully.
@@ -106,10 +124,14 @@
     void OnRequestCompleteFailure(int rv);
 
     base::WeakPtr<QuicChromiumClientSession> session_;
+    const bool requires_confirmation_;
     CompletionCallback callback_;
     QuicChromiumClientStream* stream_;
     // For tracking how much time pending stream requests wait.
     base::TimeTicks pending_start_time_;
+    State next_state_;
+
+    base::WeakPtrFactory<StreamRequest> weak_factory_;
 
     DISALLOW_COPY_AND_ASSIGN(StreamRequest);
   };
@@ -147,7 +169,18 @@
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
 
-  std::unique_ptr<StreamRequest> CreateStreamRequest();
+  // Waits for the handshake to be confirmed and invokes |callback| when
+  // that happens. If the handshake has already been confirmed, returns OK.
+  // If the connection has already been closed, returns a net error. If the
+  // connection closes before the handshake is confirmed, |callback| will
+  // be invoked with an error.
+  int WaitForHandshakeConfirmation(const CompletionCallback& callback);
+
+  // Returns a new stream request which can be used to create a new
+  // QUIC stream. If |requires_confirmation| is true, then the requested
+  // stream will not be created until the handshake as been confirmed.
+  std::unique_ptr<StreamRequest> CreateStreamRequest(
+      bool requires_confirmation);
 
   // Attempts to create a new stream.  If the stream can be
   // created immediately, returns OK.  If the open stream limit
@@ -222,9 +255,9 @@
   // and passing the data along to the QuicConnection.
   void StartReading();
 
-  // Close the session because of |error| and notifies the factory
+  // Close the session because of |net_error| and notifies the factory
   // that this session has been closed, which will delete the session.
-  void CloseSessionOnError(int error, QuicErrorCode quic_error);
+  void CloseSessionOnError(int net_error, QuicErrorCode quic_error);
 
   std::unique_ptr<base::Value> GetInfoAsValue(
       const std::set<HostPortPair>& aliases);
@@ -337,20 +370,10 @@
 
   void OnClosedStream();
 
-  // Close the session because of |error| and records it in UMA histogram.
-  void RecordAndCloseSessionOnError(int error, QuicErrorCode quic_error);
-
-  // A Session may be closed via any of three methods:
-  // OnConnectionClosed - called by the connection when the connection has been
-  //     closed, perhaps due to a timeout or a protocol error.
-  // CloseSessionOnError - called from the owner of the session,
-  //     the QuicStreamFactory, when there is an error.
-  // OnReadComplete - when there is a read error.
-  // This method closes all stream and performs any necessary cleanup.
-  void CloseSessionOnErrorInner(int net_error, QuicErrorCode quic_error);
-
   void CloseAllStreams(int net_error);
   void CloseAllObservers(int net_error);
+  void CancelAllRequests(int net_error);
+  void NotifyRequestsOfConfirmation(int net_error);
 
   // Notifies the factory that this session is going away and no more streams
   // should be created from it.  This needs to be called before closing any
@@ -377,6 +400,7 @@
   bool pkp_bypassed_;
   ObserverSet observers_;
   StreamRequestQueue stream_requests_;
+  std::vector<CompletionCallback> waiting_for_confirmation_callbacks_;
   CompletionCallback callback_;
   size_t num_total_streams_;
   base::TaskRunner* task_runner_;
diff --git a/src/net/quic/chromium/quic_chromium_client_session_test.cc b/src/net/quic/chromium/quic_chromium_client_session_test.cc
index ffae007..2ac5213 100644
--- a/src/net/quic/chromium/quic_chromium_client_session_test.cc
+++ b/src/net/quic/chromium/quic_chromium_client_session_test.cc
@@ -207,7 +207,7 @@
 
   // Request a stream and verify that a stream was created.
   std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
-      session_->CreateStreamRequest();
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
   TestCompletionCallback callback;
   ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
   EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
@@ -217,6 +217,54 @@
   EXPECT_TRUE(quic_data.AllWriteDataConsumed());
 }
 
+TEST_P(QuicChromiumClientSessionTest, ConfirmationRequiredStreamRequest) {
+  MockQuicData quic_data;
+  quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);  // EOF
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  Initialize();
+  CompleteCryptoHandshake();
+
+  // Request a stream and verify that a stream was created.
+  std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+      session_->CreateStreamRequest(/*requires_confirmation=*/true);
+  TestCompletionCallback callback;
+  ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
+  EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
+
+  quic_data.Resume();
+  EXPECT_TRUE(quic_data.AllReadDataConsumed());
+  EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+TEST_P(QuicChromiumClientSessionTest, StreamRequestBeforeConfirmation) {
+  MockQuicData quic_data;
+  quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(ASYNC, OK);  // EOF
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  Initialize();
+
+  // Request a stream and verify that a stream was created.
+  std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+      session_->CreateStreamRequest(/*requires_confirmation=*/true);
+  TestCompletionCallback callback;
+  ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
+
+  CompleteCryptoHandshake();
+
+  EXPECT_THAT(callback.WaitForResult(), IsOk());
+
+  EXPECT_TRUE(stream_request->ReleaseStream() != nullptr);
+
+  quic_data.Resume();
+  EXPECT_TRUE(quic_data.AllReadDataConsumed());
+  EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
 TEST_P(QuicChromiumClientSessionTest, CancelStreamRequestBeforeRelease) {
   MockQuicData quic_data;
   quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
@@ -231,7 +279,7 @@
 
   // Request a stream and cancel it without releasing the stream.
   std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
-      session_->CreateStreamRequest();
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
   TestCompletionCallback callback;
   ASSERT_EQ(OK, stream_request->StartRequest(callback.callback()));
   stream_request.reset();
@@ -263,7 +311,7 @@
 
   // Request a stream and verify that it's pending.
   std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
-      session_->CreateStreamRequest();
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
   TestCompletionCallback callback;
   ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
 
@@ -301,7 +349,7 @@
 
   // Request a stream and verify that it's pending.
   std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
-      session_->CreateStreamRequest();
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
   TestCompletionCallback callback;
   ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
 
@@ -318,6 +366,89 @@
   EXPECT_TRUE(quic_data.AllWriteDataConsumed());
 }
 
+TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeStreamRequest) {
+  MockQuicData quic_data;
+  quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+  quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  Initialize();
+  CompleteCryptoHandshake();
+
+  // Pump the message loop to read the connection close packet.
+  base::RunLoop().RunUntilIdle();
+
+  // Request a stream and verify that it failed.
+  std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
+  TestCompletionCallback callback;
+  ASSERT_EQ(ERR_CONNECTION_CLOSED,
+            stream_request->StartRequest(callback.callback()));
+
+  EXPECT_TRUE(quic_data.AllReadDataConsumed());
+  EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+TEST_P(QuicChromiumClientSessionTest, ConnectionCloseBeforeHandshakeConfirmed) {
+  MockQuicData quic_data;
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  Initialize();
+
+  // Request a stream and verify that it's pending.
+  std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+      session_->CreateStreamRequest(/*requires_confirmation=*/true);
+  TestCompletionCallback callback;
+  ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
+
+  // Close the connection and verify that the StreamRequest completes with
+  // an error.
+  quic_data.Resume();
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
+
+  EXPECT_TRUE(quic_data.AllReadDataConsumed());
+  EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
+TEST_P(QuicChromiumClientSessionTest, ConnectionCloseWithPendingStreamRequest) {
+  MockQuicData quic_data;
+  quic_data.AddWrite(client_maker_.MakeInitialSettingsPacket(1, nullptr));
+  quic_data.AddRead(ASYNC, ERR_IO_PENDING);
+  quic_data.AddRead(server_maker_.MakeConnectionClosePacket(1));
+  quic_data.AddSocketDataToFactory(&socket_factory_);
+
+  Initialize();
+  CompleteCryptoHandshake();
+
+  // Open the maximum number of streams so that a subsequent request
+  // can not proceed immediately.
+  const size_t kMaxOpenStreams = session_->max_open_outgoing_streams();
+  for (size_t i = 0; i < kMaxOpenStreams; i++) {
+    session_->CreateOutgoingDynamicStream(kDefaultPriority);
+  }
+  EXPECT_EQ(kMaxOpenStreams, session_->GetNumOpenOutgoingStreams());
+
+  // Request a stream and verify that it's pending.
+  std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
+  TestCompletionCallback callback;
+  ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
+
+  // Close the connection and verify that the StreamRequest completes with
+  // an error.
+  quic_data.Resume();
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_THAT(callback.WaitForResult(), IsError(ERR_CONNECTION_CLOSED));
+
+  EXPECT_TRUE(quic_data.AllReadDataConsumed());
+  EXPECT_TRUE(quic_data.AllWriteDataConsumed());
+}
+
 TEST_P(QuicChromiumClientSessionTest, MaxNumStreams) {
   MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING, 0)};
   std::unique_ptr<QuicEncryptedPacket> settings_packet(
@@ -670,7 +801,7 @@
   }
 
   std::unique_ptr<QuicChromiumClientSession::StreamRequest> stream_request =
-      session_->CreateStreamRequest();
+      session_->CreateStreamRequest(/*requires_confirmation=*/false);
   TestCompletionCallback callback;
   ASSERT_EQ(ERR_IO_PENDING, stream_request->StartRequest(callback.callback()));
 
diff --git a/src/net/quic/chromium/quic_chromium_client_stream.cc b/src/net/quic/chromium/quic_chromium_client_stream.cc
index d224e1d..c150f5c 100644
--- a/src/net/quic/chromium/quic_chromium_client_stream.cc
+++ b/src/net/quic/chromium/quic_chromium_client_stream.cc
@@ -115,8 +115,8 @@
 void QuicChromiumClientStream::OnCanWrite() {
   QuicStream::OnCanWrite();
 
-  if (!HasBufferedData() && !callback_.is_null()) {
-    base::ResetAndReturn(&callback_).Run(OK);
+  if (!HasBufferedData() && !write_callback_.is_null()) {
+    base::ResetAndReturn(&write_callback_).Run(OK);
   }
 }
 
@@ -156,7 +156,7 @@
     return OK;
   }
 
-  callback_ = callback;
+  write_callback_ = callback;
   return ERR_IO_PENDING;
 }
 
@@ -177,7 +177,7 @@
     return OK;
   }
 
-  callback_ = callback;
+  write_callback_ = callback;
   return ERR_IO_PENDING;
 }
 
@@ -216,23 +216,11 @@
   iov.iov_base = buf->data();
   iov.iov_len = buf_len;
   size_t bytes_read = Readv(&iov, 1);
-  // If no more body bytes and trailers are to be delivered, return
-  // ERR_IO_PENDING now because onDataAvailable() will be called after trailers.
-  if (bytes_read == 0 && !FinishedReadingTrailers())
-    return ERR_IO_PENDING;
+  // Since HasBytesToRead is true, Readv() must of read some data.
+  DCHECK_NE(0u, bytes_read);
   return bytes_read;
 }
 
-bool QuicChromiumClientStream::CanWrite(const CompletionCallback& callback) {
-  bool can_write = session()->connection()->CanWrite(HAS_RETRANSMITTABLE_DATA);
-  if (!can_write) {
-    session()->MarkConnectionLevelWriteBlocked(id());
-    DCHECK(callback_.is_null());
-    callback_ = callback;
-  }
-  return can_write;
-}
-
 void QuicChromiumClientStream::NotifyDelegateOfHeadersCompleteLater(
     SpdyHeaderBlock headers,
     size_t frame_len) {
diff --git a/src/net/quic/chromium/quic_chromium_client_stream.h b/src/net/quic/chromium/quic_chromium_client_stream.h
index e2b8c12..d68af2a 100644
--- a/src/net/quic/chromium/quic_chromium_client_stream.h
+++ b/src/net/quic/chromium/quic_chromium_client_stream.h
@@ -108,12 +108,6 @@
   // Reads at most |buf_len| bytes into |buf|. Returns the number of bytes read.
   int Read(IOBuffer* buf, int buf_len);
 
-  // Returns true if the stream can possible write data.  (The socket may
-  // turn out to be write blocked, of course).  If the stream can not write,
-  // this method returns false, and |callback| will be invoked when
-  // it becomes writable.
-  bool CanWrite(const CompletionCallback& callback);
-
   const NetLogWithSource& net_log() const { return net_log_; }
 
   // Prevents this stream from migrating to a new network. May cause other
@@ -142,7 +136,9 @@
 
   bool headers_delivered_;
 
-  CompletionCallback callback_;
+  // Callback to be invoked when WriteStreamData or WritevStreamData completes
+  // asynchronously.
+  CompletionCallback write_callback_;
 
   QuicClientSessionBase* session_;
 
diff --git a/src/net/quic/chromium/quic_http_stream.cc b/src/net/quic/chromium/quic_http_stream.cc
index 049ab3d..5269a7a 100644
--- a/src/net/quic/chromium/quic_http_stream.cc
+++ b/src/net/quic/chromium/quic_http_stream.cc
@@ -520,12 +520,6 @@
 
 void QuicHttpStream::OnCryptoHandshakeConfirmed() {
   was_handshake_confirmed_ = true;
-  if (next_state_ == STATE_WAIT_FOR_CONFIRMATION_COMPLETE) {
-    // Post a task to avoid reentrant calls into the session.
-    base::ThreadTaskRunnerHandle::Get()->PostTask(
-        FROM_HERE, base::Bind(&QuicHttpStream::OnIOComplete,
-                              weak_factory_.GetWeakPtr(), OK));
-  }
 }
 
 void QuicHttpStream::OnSuccessfulVersionNegotiation(
@@ -586,13 +580,6 @@
         CHECK_EQ(OK, rv);
         rv = DoSetRequestPriority();
         break;
-      case STATE_WAIT_FOR_CONFIRMATION:
-        CHECK_EQ(OK, rv);
-        rv = DoWaitForConfirmation();
-        break;
-      case STATE_WAIT_FOR_CONFIRMATION_COMPLETE:
-        rv = DoWaitForConfirmationComplete(rv);
-        break;
       case STATE_SEND_HEADERS:
         CHECK_EQ(OK, rv);
         rv = DoSendHeaders();
@@ -629,7 +616,8 @@
 
 int QuicHttpStream::DoRequestStream() {
   next_state_ = STATE_REQUEST_STREAM_COMPLETE;
-  stream_request_ = session_->CreateStreamRequest();
+  stream_request_ =
+      session_->CreateStreamRequest(request_info_->method == "POST");
   return stream_request_->StartRequest(
       base::Bind(&QuicHttpStream::OnIOComplete, weak_factory_.GetWeakPtr()));
 }
@@ -665,23 +653,6 @@
   DCHECK(response_info_);
   SpdyPriority priority = ConvertRequestPriorityToQuicPriority(priority_);
   stream_->SetPriority(priority);
-  next_state_ = STATE_WAIT_FOR_CONFIRMATION;
-  return OK;
-}
-
-int QuicHttpStream::DoWaitForConfirmation() {
-  next_state_ = STATE_WAIT_FOR_CONFIRMATION_COMPLETE;
-  if (!session_->IsCryptoHandshakeConfirmed() &&
-      request_info_->method == "POST") {
-    return ERR_IO_PENDING;
-  }
-  return OK;
-}
-
-int QuicHttpStream::DoWaitForConfirmationComplete(int rv) {
-  if (rv < 0)
-    return rv;
-
   next_state_ = STATE_SEND_HEADERS;
   return OK;
 }
diff --git a/src/net/quic/chromium/quic_http_stream.h b/src/net/quic/chromium/quic_http_stream.h
index df61ef5..062c13b 100644
--- a/src/net/quic/chromium/quic_http_stream.h
+++ b/src/net/quic/chromium/quic_http_stream.h
@@ -101,8 +101,6 @@
     STATE_REQUEST_STREAM,
     STATE_REQUEST_STREAM_COMPLETE,
     STATE_SET_REQUEST_PRIORITY,
-    STATE_WAIT_FOR_CONFIRMATION,
-    STATE_WAIT_FOR_CONFIRMATION_COMPLETE,
     STATE_SEND_HEADERS,
     STATE_SEND_HEADERS_COMPLETE,
     STATE_READ_REQUEST_BODY,
@@ -121,8 +119,6 @@
   int DoRequestStream();
   int DoRequestStreamComplete(int rv);
   int DoSetRequestPriority();
-  int DoWaitForConfirmation();
-  int DoWaitForConfirmationComplete(int rv);
   int DoSendHeaders();
   int DoSendHeadersComplete(int rv);
   int DoReadRequestBody();
diff --git a/src/net/quic/chromium/quic_network_transaction_unittest.cc b/src/net/quic/chromium/quic_network_transaction_unittest.cc
index 3836256..3020bcc 100644
--- a/src/net/quic/chromium/quic_network_transaction_unittest.cc
+++ b/src/net/quic/chromium/quic_network_transaction_unittest.cc
@@ -50,6 +50,7 @@
 #include "net/quic/core/crypto/quic_encrypter.h"
 #include "net/quic/core/quic_framer.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/impl/quic_test_impl.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/mock_random.h"
diff --git a/src/net/quic/chromium/quic_utils_chromium_test.cc b/src/net/quic/chromium/quic_utils_chromium_test.cc
index 31d8c05..28d995e 100644
--- a/src/net/quic/chromium/quic_utils_chromium_test.cc
+++ b/src/net/quic/chromium/quic_utils_chromium_test.cc
@@ -13,7 +13,7 @@
 namespace test {
 namespace {
 
-TEST(QuicUtilsTest, ParseQuicConnectionOptions) {
+TEST(QuicUtilsChromiumTest, ParseQuicConnectionOptions) {
   QuicTagVector empty_options = ParseQuicConnectionOptions("");
   EXPECT_TRUE(empty_options.empty());
 
diff --git a/src/net/quic/core/congestion_control/bandwidth_sampler_test.cc b/src/net/quic/core/congestion_control/bandwidth_sampler_test.cc
index bf6f7e6..aa9bdd0 100644
--- a/src/net/quic/core/congestion_control/bandwidth_sampler_test.cc
+++ b/src/net/quic/core/congestion_control/bandwidth_sampler_test.cc
@@ -4,9 +4,8 @@
 
 #include "net/quic/core/congestion_control/bandwidth_sampler.h"
 
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -30,7 +29,7 @@
               "kRegularPacketSize has to be five times divisible by 2");
 
 // A test fixture with utility methods for BandwidthSampler tests.
-class BandwidthSamplerTest : public ::testing::Test {
+class BandwidthSamplerTest : public QuicTest {
  protected:
   BandwidthSamplerTest() : bytes_in_flight_(0) {
     // Ensure that the clock does not start at zero.
diff --git a/src/net/quic/core/congestion_control/bbr_sender.cc b/src/net/quic/core/congestion_control/bbr_sender.cc
index cd7e59c..123a766 100644
--- a/src/net/quic/core/congestion_control/bbr_sender.cc
+++ b/src/net/quic/core/congestion_control/bbr_sender.cc
@@ -553,6 +553,13 @@
       // Enter conservation on the first loss.
       if (has_losses) {
         recovery_state_ = CONSERVATION;
+        if (FLAGS_quic_reloadable_flag_quic_bbr_fix_conservation) {
+          // This will cause the |recovery_window_| to be set to the correct
+          // value in CalculateRecoveryWindow().
+          recovery_window_ = 0;
+          QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_bbr_fix_conservation, 1,
+                            3);
+        }
         // Since the conservation phase is meant to be lasting for a whole
         // round, extend the current round as if it were started right now.
         current_round_trip_end_ = last_sent_packet_;
@@ -712,10 +719,25 @@
 void BbrSender::CalculateRecoveryWindow(QuicByteCount bytes_acked) {
   switch (recovery_state_) {
     case CONSERVATION:
-      recovery_window_ = unacked_packets_->bytes_in_flight() + bytes_acked;
+      if (FLAGS_quic_reloadable_flag_quic_bbr_fix_conservation) {
+        QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_bbr_fix_conservation, 2, 3);
+        recovery_window_ =
+            std::max(unacked_packets_->bytes_in_flight() + bytes_acked,
+                     recovery_window_);
+      } else {
+        recovery_window_ = unacked_packets_->bytes_in_flight() + bytes_acked;
+      }
       break;
     case GROWTH:
-      recovery_window_ = unacked_packets_->bytes_in_flight() + 2 * bytes_acked;
+      if (FLAGS_quic_reloadable_flag_quic_bbr_fix_conservation) {
+        QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_bbr_fix_conservation, 3, 3);
+        recovery_window_ =
+            std::max(unacked_packets_->bytes_in_flight() + 2 * bytes_acked,
+                     recovery_window_ + bytes_acked);
+      } else {
+        recovery_window_ =
+            unacked_packets_->bytes_in_flight() + 2 * bytes_acked;
+      }
       break;
     default:
       break;
diff --git a/src/net/quic/core/congestion_control/bbr_sender_test.cc b/src/net/quic/core/congestion_control/bbr_sender_test.cc
index 872b863..a0d4b50 100644
--- a/src/net/quic/core/congestion_control/bbr_sender_test.cc
+++ b/src/net/quic/core/congestion_control/bbr_sender_test.cc
@@ -12,6 +12,7 @@
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
@@ -20,7 +21,6 @@
 #include "net/quic/test_tools/simulator/quic_endpoint.h"
 #include "net/quic/test_tools/simulator/simulator.h"
 #include "net/quic/test_tools/simulator/switch.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -64,7 +64,7 @@
     (kTestPropagationDelay + kLocalPropagationDelay + kTestTransferTime) * 2;
 const QuicByteCount kTestBdp = kTestRtt * kTestLinkBandwidth;
 
-class BbrSenderTest : public ::testing::Test {
+class BbrSenderTest : public QuicTest {
  protected:
   BbrSenderTest()
       : simulator_(),
@@ -90,9 +90,14 @@
                             /*connection_id=*/GetPeerInMemoryConnectionId(43)),
         receiver_multiplexer_("Receiver multiplexer",
                               {&receiver_, &competing_receiver_}) {
+    // These will be changed by the appropriate tests as necessary.
+    FLAGS_quic_reloadable_flag_quic_bbr_keep_sending_at_recent_rate = false;
+    FLAGS_quic_reloadable_flag_quic_bbr_slow_recent_delivery = false;
+    FLAGS_quic_reloadable_flag_quic_bbr_add_tso_cwnd = false;
     // TODO(ianswett): Determine why tests become flaky with CWND based on SRTT.
     FLAGS_quic_reloadable_flag_quic_bbr_base_cwnd_on_srtt = false;
     FLAGS_quic_reloadable_flag_quic_bbr_extra_conservation = true;
+    FLAGS_quic_reloadable_flag_quic_bbr_fix_conservation = true;
     rtt_stats_ = bbr_sender_.connection()->sent_packet_manager().GetRttStats();
     sender_ = SetupBbrSender(&bbr_sender_);
 
@@ -121,7 +126,6 @@
   const QuicClock* clock_;
   const RttStats* rtt_stats_;
   BbrSender* sender_;
-  QuicFlagSaver flags_;
 
   // Enables BBR on |endpoint| and returns the associated BBR congestion
   // controller.
@@ -315,7 +319,7 @@
   // The margin here is high, because the aggregation greatly increases
   // smoothed rtt.
   EXPECT_GE(kTestRtt * 4, rtt_stats_->smoothed_rtt());
-  ExpectApproxEq(kTestRtt, rtt_stats_->min_rtt(), 0.1f);
+  ExpectApproxEq(kTestRtt, rtt_stats_->min_rtt(), 0.12f);
 }
 
 TEST_F(BbrSenderTest, SimpleTransfer2RTTAggregationKeepSending) {
@@ -447,8 +451,8 @@
   EXPECT_FALSE(sender_->ExportDebugState().last_sample_is_app_limited);
   // The margin here is high, because the aggregation greatly increases
   // smoothed rtt.
-  EXPECT_GE(kTestRtt * 4, rtt_stats_->smoothed_rtt());
-  ExpectApproxEq(kTestRtt, rtt_stats_->min_rtt(), 0.1f);
+  EXPECT_GE(kTestRtt * 5, rtt_stats_->smoothed_rtt());
+  ExpectApproxEq(kTestRtt, rtt_stats_->min_rtt(), 0.25f);
 }
 
 // Test the number of losses incurred by the startup phase in a situation when
@@ -460,7 +464,7 @@
   float loss_rate =
       static_cast<float>(bbr_sender_.connection()->GetStats().packets_lost) /
       bbr_sender_.connection()->GetStats().packets_sent;
-  EXPECT_LE(loss_rate, 0.27);
+  EXPECT_LE(loss_rate, 0.31);
 }
 
 // Ensures the code transitions loss recovery states correctly (NOT_IN_RECOVERY
@@ -490,12 +494,18 @@
   ASSERT_EQ(BbrSender::CONSERVATION,
             sender_->ExportDebugState().recovery_state);
 
+  const QuicByteCount cwnd_at_recovery_start = sender_->GetCongestionWindow();
   simulator_result = simulator_.RunUntilOrTimeout(
-      [this]() {
+      [this, cwnd_at_recovery_start]() {
+        // Ensure that the CWND never drops due to conservation.
+        if (sender_->GetCongestionWindow() < cwnd_at_recovery_start) {
+          return true;
+        }
         return sender_->ExportDebugState().recovery_state !=
                BbrSender::CONSERVATION;
       },
       timeout);
+  ASSERT_GE(sender_->GetCongestionWindow(), cwnd_at_recovery_start);
   ASSERT_TRUE(simulator_result);
   ASSERT_EQ(BbrSender::GROWTH, sender_->ExportDebugState().recovery_state);
 
diff --git a/src/net/quic/core/congestion_control/cubic_bytes_test.cc b/src/net/quic/core/congestion_control/cubic_bytes_test.cc
index 0214122..a0641ee 100644
--- a/src/net/quic/core/congestion_control/cubic_bytes_test.cc
+++ b/src/net/quic/core/congestion_control/cubic_bytes_test.cc
@@ -8,8 +8,8 @@
 
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -92,7 +92,7 @@
 
 }  // namespace
 
-class CubicBytesTest : public ::testing::TestWithParam<TestParams> {
+class CubicBytesTest : public QuicTestWithParam<TestParams> {
  protected:
   CubicBytesTest()
       : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
diff --git a/src/net/quic/core/congestion_control/cubic_test.cc b/src/net/quic/core/congestion_control/cubic_test.cc
index 875e851..c7e3126 100644
--- a/src/net/quic/core/congestion_control/cubic_test.cc
+++ b/src/net/quic/core/congestion_control/cubic_test.cc
@@ -8,8 +8,8 @@
 
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -83,7 +83,7 @@
 
 // TODO(jokulik): Once we've rolled out the cubic convex fix, we will
 // no longer need a parameterized test.
-class CubicTest : public ::testing::TestWithParam<TestParams> {
+class CubicTest : public QuicTestWithParam<TestParams> {
  protected:
   CubicTest()
       : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
diff --git a/src/net/quic/core/congestion_control/general_loss_algorithm_test.cc b/src/net/quic/core/congestion_control/general_loss_algorithm_test.cc
index e670429..8716860 100644
--- a/src/net/quic/core/congestion_control/general_loss_algorithm_test.cc
+++ b/src/net/quic/core/congestion_control/general_loss_algorithm_test.cc
@@ -11,9 +11,9 @@
 #include "net/quic/core/congestion_control/rtt_stats.h"
 #include "net/quic/core/quic_unacked_packet_map.h"
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -22,7 +22,7 @@
 // Default packet length.
 const uint32_t kDefaultLength = 1000;
 
-class GeneralLossAlgorithmTest : public ::testing::Test {
+class GeneralLossAlgorithmTest : public QuicTest {
  protected:
   GeneralLossAlgorithmTest() {
     rtt_stats_.UpdateRtt(QuicTime::Delta::FromMilliseconds(100),
@@ -63,7 +63,6 @@
     }
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   QuicUnackedPacketMap unacked_packets_;
   GeneralLossAlgorithm loss_algorithm_;
   RttStats rtt_stats_;
diff --git a/src/net/quic/core/congestion_control/hybrid_slow_start_test.cc b/src/net/quic/core/congestion_control/hybrid_slow_start_test.cc
index 2431056..3ed8495 100644
--- a/src/net/quic/core/congestion_control/hybrid_slow_start_test.cc
+++ b/src/net/quic/core/congestion_control/hybrid_slow_start_test.cc
@@ -6,12 +6,12 @@
 
 #include <memory>
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 
-class HybridSlowStartTest : public ::testing::Test {
+class HybridSlowStartTest : public QuicTest {
  protected:
   HybridSlowStartTest()
       : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
diff --git a/src/net/quic/core/congestion_control/pacing_sender_test.cc b/src/net/quic/core/congestion_control/pacing_sender_test.cc
index 7fc3019..174d93d 100644
--- a/src/net/quic/core/congestion_control/pacing_sender_test.cc
+++ b/src/net/quic/core/congestion_control/pacing_sender_test.cc
@@ -8,6 +8,7 @@
 
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -22,7 +23,7 @@
 const QuicByteCount kBytesInFlight = 1024;
 const int kInitialBurstPackets = 10;
 
-class PacingSenderTest : public ::testing::Test {
+class PacingSenderTest : public QuicTest {
  protected:
   PacingSenderTest()
       : zero_time_(QuicTime::Delta::Zero()),
diff --git a/src/net/quic/core/congestion_control/prr_sender_test.cc b/src/net/quic/core/congestion_control/prr_sender_test.cc
index aa54700..94e7873 100644
--- a/src/net/quic/core/congestion_control/prr_sender_test.cc
+++ b/src/net/quic/core/congestion_control/prr_sender_test.cc
@@ -8,7 +8,7 @@
 
 #include "net/quic/core/crypto/crypto_protocol.h"
 #include "net/quic/core/quic_constants.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -18,7 +18,7 @@
 const QuicByteCount kMaxSegmentSize = kDefaultTCPMSS;
 }  // namespace
 
-class PrrSenderTest : public ::testing::Test {};
+class PrrSenderTest : public QuicTest {};
 
 TEST_F(PrrSenderTest, SingleLossResultsInSendOnEveryOtherAck) {
   PrrSender prr;
diff --git a/src/net/quic/core/congestion_control/rtt_stats_test.cc b/src/net/quic/core/congestion_control/rtt_stats_test.cc
index b249a2b..905b714 100644
--- a/src/net/quic/core/congestion_control/rtt_stats_test.cc
+++ b/src/net/quic/core/congestion_control/rtt_stats_test.cc
@@ -7,8 +7,8 @@
 #include <cmath>
 
 #include "base/test/mock_log.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/rtt_stats_peer.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using logging::LOG_WARNING;
 using testing::HasSubstr;
@@ -18,7 +18,7 @@
 namespace net {
 namespace test {
 
-class RttStatsTest : public ::testing::Test {
+class RttStatsTest : public QuicTest {
  protected:
   RttStats rtt_stats_;
 };
diff --git a/src/net/quic/core/congestion_control/send_algorithm_test.cc b/src/net/quic/core/congestion_control/send_algorithm_test.cc
index f9afe7c..e89fb05 100644
--- a/src/net/quic/core/congestion_control/send_algorithm_test.cc
+++ b/src/net/quic/core/congestion_control/send_algorithm_test.cc
@@ -12,6 +12,7 @@
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
@@ -20,7 +21,6 @@
 #include "net/quic/test_tools/simulator/quic_endpoint.h"
 #include "net/quic/test_tools/simulator/simulator.h"
 #include "net/quic/test_tools/simulator/switch.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -204,7 +204,7 @@
 
 }  // namespace
 
-class SendAlgorithmTest : public ::testing::TestWithParam<TestParams> {
+class SendAlgorithmTest : public QuicTestWithParam<TestParams> {
  protected:
   SendAlgorithmTest()
       : simulator_(),
diff --git a/src/net/quic/core/congestion_control/tcp_cubic_sender_bytes_test.cc b/src/net/quic/core/congestion_control/tcp_cubic_sender_bytes_test.cc
index 7c265e1..b35cb2b 100644
--- a/src/net/quic/core/congestion_control/tcp_cubic_sender_bytes_test.cc
+++ b/src/net/quic/core/congestion_control/tcp_cubic_sender_bytes_test.cc
@@ -15,9 +15,9 @@
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_config_peer.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -51,7 +51,7 @@
   QuicConnectionStats stats_;
 };
 
-class TcpCubicSenderBytesTest : public ::testing::Test {
+class TcpCubicSenderBytesTest : public QuicTest {
  protected:
   TcpCubicSenderBytesTest()
       : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
diff --git a/src/net/quic/core/congestion_control/tcp_cubic_sender_packets_test.cc b/src/net/quic/core/congestion_control/tcp_cubic_sender_packets_test.cc
index 2b4cfa6..66afc3f 100644
--- a/src/net/quic/core/congestion_control/tcp_cubic_sender_packets_test.cc
+++ b/src/net/quic/core/congestion_control/tcp_cubic_sender_packets_test.cc
@@ -14,9 +14,9 @@
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_config_peer.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -58,7 +58,7 @@
   QuicConnectionStats stats_;
 };
 
-class TcpCubicSenderPacketsTest : public ::testing::Test {
+class TcpCubicSenderPacketsTest : public QuicTest {
  protected:
   TcpCubicSenderPacketsTest()
       : one_ms_(QuicTime::Delta::FromMilliseconds(1)),
diff --git a/src/net/quic/core/congestion_control/windowed_filter_test.cc b/src/net/quic/core/congestion_control/windowed_filter_test.cc
index 38c0658..0f27441 100644
--- a/src/net/quic/core/congestion_control/windowed_filter_test.cc
+++ b/src/net/quic/core/congestion_control/windowed_filter_test.cc
@@ -7,12 +7,12 @@
 #include "net/quic/core/congestion_control/rtt_stats.h"
 #include "net/quic/core/quic_bandwidth.h"
 #include "net/quic/core/quic_packets.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 
-class WindowedFilterTest : public ::testing::Test {
+class WindowedFilterTest : public QuicTest {
  public:
   // Set the window to 99ms, so 25ms is more than a quarter rtt.
   WindowedFilterTest()
diff --git a/src/net/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc b/src/net/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc
index 2a14d17..3f43976 100644
--- a/src/net/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc
+++ b/src/net/quic/core/crypto/aes_128_gcm_12_decrypter_test.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
@@ -219,7 +220,9 @@
   return new QuicData(output.release(), output_length, true);
 }
 
-TEST(Aes128Gcm12DecrypterTest, Decrypt) {
+class Aes128Gcm12DecrypterTest : public QuicTest {};
+
+TEST_F(Aes128Gcm12DecrypterTest, Decrypt) {
   for (size_t i = 0; i < arraysize(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
diff --git a/src/net/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc b/src/net/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc
index 352c18c..bf98368 100644
--- a/src/net/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc
+++ b/src/net/quic/core/crypto/aes_128_gcm_12_encrypter_test.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
@@ -171,7 +172,9 @@
   return new QuicData(ciphertext.release(), ciphertext_size, true);
 }
 
-TEST(Aes128Gcm12EncrypterTest, Encrypt) {
+class Aes128Gcm12EncrypterTest : public QuicTest {};
+
+TEST_F(Aes128Gcm12EncrypterTest, Encrypt) {
   for (size_t i = 0; i < arraysize(test_group_array); i++) {
     SCOPED_TRACE(i);
     const TestVector* test_vectors = test_group_array[i];
@@ -220,14 +223,14 @@
   }
 }
 
-TEST(Aes128Gcm12EncrypterTest, GetMaxPlaintextSize) {
+TEST_F(Aes128Gcm12EncrypterTest, GetMaxPlaintextSize) {
   Aes128Gcm12Encrypter encrypter;
   EXPECT_EQ(1000u, encrypter.GetMaxPlaintextSize(1012));
   EXPECT_EQ(100u, encrypter.GetMaxPlaintextSize(112));
   EXPECT_EQ(10u, encrypter.GetMaxPlaintextSize(22));
 }
 
-TEST(Aes128Gcm12EncrypterTest, GetCiphertextSize) {
+TEST_F(Aes128Gcm12EncrypterTest, GetCiphertextSize) {
   Aes128Gcm12Encrypter encrypter;
   EXPECT_EQ(1012u, encrypter.GetCiphertextSize(1000));
   EXPECT_EQ(112u, encrypter.GetCiphertextSize(100));
diff --git a/src/net/quic/core/crypto/cert_compressor_test.cc b/src/net/quic/core/crypto/cert_compressor_test.cc
index af6f617..a75cb59 100644
--- a/src/net/quic/core/crypto/cert_compressor_test.cc
+++ b/src/net/quic/core/crypto/cert_compressor_test.cc
@@ -7,16 +7,18 @@
 #include <memory>
 
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
-TEST(CertCompressor, EmptyChain) {
+class CertCompressorTest : public QuicTest {};
+
+TEST_F(CertCompressorTest, EmptyChain) {
   std::vector<string> chain;
   const string compressed = CertCompressor::CompressChain(
       chain, QuicStringPiece(), QuicStringPiece(), nullptr);
@@ -28,7 +30,7 @@
   EXPECT_EQ(chain.size(), chain2.size());
 }
 
-TEST(CertCompressor, Compressed) {
+TEST_F(CertCompressorTest, Compressed) {
   std::vector<string> chain;
   chain.push_back("testcert");
   const string compressed = CertCompressor::CompressChain(
@@ -43,7 +45,7 @@
   EXPECT_EQ(chain[0], chain2[0]);
 }
 
-TEST(CertCompressor, Common) {
+TEST_F(CertCompressorTest, Common) {
   std::vector<string> chain;
   chain.push_back("testcert");
   static const uint64_t set_hash = 42;
@@ -68,7 +70,7 @@
   EXPECT_EQ(chain[0], chain2[0]);
 }
 
-TEST(CertCompressor, Cached) {
+TEST_F(CertCompressorTest, Cached) {
   std::vector<string> chain;
   chain.push_back("testcert");
   uint64_t hash = QuicUtils::FNV1a_64_Hash(chain[0]);
@@ -88,7 +90,7 @@
   EXPECT_EQ(chain[0], chain2[0]);
 }
 
-TEST(CertCompressor, BadInputs) {
+TEST_F(CertCompressorTest, BadInputs) {
   std::vector<string> cached_certs, chain;
 
   EXPECT_FALSE(CertCompressor::DecompressChain(
diff --git a/src/net/quic/core/crypto/chacha20_poly1305_decrypter_test.cc b/src/net/quic/core/crypto/chacha20_poly1305_decrypter_test.cc
index a24d531..c930745 100644
--- a/src/net/quic/core/crypto/chacha20_poly1305_decrypter_test.cc
+++ b/src/net/quic/core/crypto/chacha20_poly1305_decrypter_test.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
@@ -133,7 +134,9 @@
   return new QuicData(output.release(), output_length, true);
 }
 
-TEST(ChaCha20Poly1305DecrypterTest, Decrypt) {
+class ChaCha20Poly1305DecrypterTest : public QuicTest {};
+
+TEST_F(ChaCha20Poly1305DecrypterTest, Decrypt) {
   for (size_t i = 0; test_vectors[i].key != nullptr; i++) {
     // If not present then decryption is expected to fail.
     bool has_pt = test_vectors[i].pt;
diff --git a/src/net/quic/core/crypto/chacha20_poly1305_encrypter_test.cc b/src/net/quic/core/crypto/chacha20_poly1305_encrypter_test.cc
index f7c847a..544ad0a 100644
--- a/src/net/quic/core/crypto/chacha20_poly1305_encrypter_test.cc
+++ b/src/net/quic/core/crypto/chacha20_poly1305_encrypter_test.cc
@@ -8,6 +8,7 @@
 
 #include "net/quic/core/crypto/chacha20_poly1305_decrypter.h"
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
@@ -83,7 +84,9 @@
   return new QuicData(ciphertext.release(), ciphertext_size, true);
 }
 
-TEST(ChaCha20Poly1305EncrypterTest, EncryptThenDecrypt) {
+class ChaCha20Poly1305EncrypterTest : public QuicTest {};
+
+TEST_F(ChaCha20Poly1305EncrypterTest, EncryptThenDecrypt) {
   ChaCha20Poly1305Encrypter encrypter;
   ChaCha20Poly1305Decrypter decrypter;
 
@@ -108,7 +111,7 @@
                                       &len, arraysize(decrypted)));
 }
 
-TEST(ChaCha20Poly1305EncrypterTest, Encrypt) {
+TEST_F(ChaCha20Poly1305EncrypterTest, Encrypt) {
   for (size_t i = 0; test_vectors[i].key != nullptr; i++) {
     // Decode the test vector.
     string key = QuicTextUtils::HexDecode(test_vectors[i].key);
@@ -136,14 +139,14 @@
   }
 }
 
-TEST(ChaCha20Poly1305EncrypterTest, GetMaxPlaintextSize) {
+TEST_F(ChaCha20Poly1305EncrypterTest, GetMaxPlaintextSize) {
   ChaCha20Poly1305Encrypter encrypter;
   EXPECT_EQ(1000u, encrypter.GetMaxPlaintextSize(1012));
   EXPECT_EQ(100u, encrypter.GetMaxPlaintextSize(112));
   EXPECT_EQ(10u, encrypter.GetMaxPlaintextSize(22));
 }
 
-TEST(ChaCha20Poly1305EncrypterTest, GetCiphertextSize) {
+TEST_F(ChaCha20Poly1305EncrypterTest, GetCiphertextSize) {
   ChaCha20Poly1305Encrypter encrypter;
   EXPECT_EQ(1012u, encrypter.GetCiphertextSize(1000));
   EXPECT_EQ(112u, encrypter.GetCiphertextSize(100));
diff --git a/src/net/quic/core/crypto/channel_id_test.cc b/src/net/quic/core/crypto/channel_id_test.cc
index 6fac40f..08875eb 100644
--- a/src/net/quic/core/crypto/channel_id_test.cc
+++ b/src/net/quic/core/crypto/channel_id_test.cc
@@ -6,8 +6,8 @@
 
 #include <memory>
 
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -243,8 +243,10 @@
 
 }  // namespace
 
+class ChannelIDTest : public QuicTest {};
+
 // A known answer test for ChannelIDVerifier.
-TEST(ChannelIDTest, VerifyKnownAnswerTest) {
+TEST_F(ChannelIDTest, VerifyKnownAnswerTest) {
   char msg[1024];
   size_t msg_len;
   char key[64];
@@ -281,7 +283,7 @@
   }
 }
 
-TEST(ChannelIDTest, SignAndVerify) {
+TEST_F(ChannelIDTest, SignAndVerify) {
   std::unique_ptr<ChannelIDSource> source(
       crypto_test_utils::ChannelIDSourceForTesting());
 
diff --git a/src/net/quic/core/crypto/common_cert_set_test.cc b/src/net/quic/core/crypto/common_cert_set_test.cc
index 85bc74b..316657d 100644
--- a/src/net/quic/core/crypto/common_cert_set_test.cc
+++ b/src/net/quic/core/crypto/common_cert_set_test.cc
@@ -6,7 +6,7 @@
 
 #include <cstdint>
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -189,7 +189,9 @@
     0xc1, 0x21, 0xc6, 0x16,
 };
 
-TEST(CommonCertSets, FindGIA_2) {
+class CommonCertSetsTest : public QuicTest {};
+
+TEST_F(CommonCertSetsTest, FindGIA_2) {
   QuicStringPiece gia(reinterpret_cast<const char*>(kGIACertificate2),
                       sizeof(kGIACertificate2));
 
@@ -210,7 +212,7 @@
   EXPECT_EQ(0, memcmp(gia.data(), gia_copy.data(), gia.size()));
 }
 
-TEST(CommonCertSets, FindGIA_3) {
+TEST_F(CommonCertSetsTest, FindGIA_3) {
   QuicStringPiece gia(reinterpret_cast<const char*>(kGIACertificate3),
                       sizeof(kGIACertificate3));
 
@@ -231,7 +233,7 @@
   EXPECT_EQ(0, memcmp(gia.data(), gia_copy.data(), gia.size()));
 }
 
-TEST(CommonCertSets, NonMatch) {
+TEST_F(CommonCertSetsTest, NonMatch) {
   const CommonCertSets* sets(CommonCertSets::GetInstanceQUIC());
   QuicStringPiece not_a_cert("hello");
   const uint64_t in_hash = UINT64_C(0xc9fef74053f99f39);
diff --git a/src/net/quic/core/crypto/crypto_framer.cc b/src/net/quic/core/crypto/crypto_framer.cc
index b978bf0..77d1bfa 100644
--- a/src/net/quic/core/crypto/crypto_framer.cc
+++ b/src/net/quic/core/crypto/crypto_framer.cc
@@ -108,7 +108,7 @@
   }
 
   std::unique_ptr<char[]> buffer(new char[len]);
-  QuicDataWriter writer(len, buffer.get(), perspective);
+  QuicDataWriter writer(len, buffer.get(), perspective, HOST_BYTE_ORDER);
   if (!writer.WriteTag(message.tag())) {
     DCHECK(false) << "Failed to write message tag.";
     return nullptr;
@@ -197,7 +197,8 @@
                                     Perspective perspective) {
   // Add this data to the buffer.
   buffer_.append(input.data(), input.length());
-  QuicDataReader reader(buffer_.data(), buffer_.length(), perspective);
+  QuicDataReader reader(buffer_.data(), buffer_.length(), perspective,
+                        HOST_BYTE_ORDER);
 
   switch (state_) {
     case STATE_READING_TAG:
diff --git a/src/net/quic/core/crypto/crypto_framer_test.cc b/src/net/quic/core/crypto/crypto_framer_test.cc
index e8f37e9..846f91f 100644
--- a/src/net/quic/core/crypto/crypto_framer_test.cc
+++ b/src/net/quic/core/crypto/crypto_framer_test.cc
@@ -12,6 +12,7 @@
 #include "net/quic/core/crypto/crypto_protocol.h"
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
@@ -25,7 +26,7 @@
   return reinterpret_cast<char*>(data);
 }
 
-class CryptoFramerTest : public ::testing::TestWithParam<Perspective> {};
+class CryptoFramerTest : public QuicTestWithParam<Perspective> {};
 
 class TestCryptoVisitor : public CryptoFramerVisitorInterface {
  public:
diff --git a/src/net/quic/core/crypto/crypto_handshake_message_test.cc b/src/net/quic/core/crypto/crypto_handshake_message_test.cc
index c12f4cd..a44e64a 100644
--- a/src/net/quic/core/crypto/crypto_handshake_message_test.cc
+++ b/src/net/quic/core/crypto/crypto_handshake_message_test.cc
@@ -6,14 +6,13 @@
 
 #include "net/quic/core/crypto/crypto_handshake.h"
 #include "net/quic/core/crypto/crypto_protocol.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 namespace {
 
-class CryptoHandshakeMessageTest
-    : public ::testing::TestWithParam<Perspective> {};
+class CryptoHandshakeMessageTest : public QuicTestWithParam<Perspective> {};
 
 TEST_P(CryptoHandshakeMessageTest, DebugString) {
   const char* str = "SHLO<\n>";
diff --git a/src/net/quic/core/crypto/crypto_secret_boxer_test.cc b/src/net/quic/core/crypto/crypto_secret_boxer_test.cc
index 1282017..18fea41 100644
--- a/src/net/quic/core/crypto/crypto_secret_boxer_test.cc
+++ b/src/net/quic/core/crypto/crypto_secret_boxer_test.cc
@@ -5,14 +5,16 @@
 #include "net/quic/core/crypto/crypto_secret_boxer.h"
 
 #include "net/quic/core/crypto/quic_random.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
-TEST(CryptoSecretBoxerTest, BoxAndUnbox) {
+class CryptoSecretBoxerTest : public QuicTest {};
+
+TEST_F(CryptoSecretBoxerTest, BoxAndUnbox) {
   QuicStringPiece message("hello world");
 
   CryptoSecretBoxer boxer;
@@ -47,7 +49,7 @@
   return ok;
 }
 
-TEST(CryptoSecretBoxerTest, MultipleKeys) {
+TEST_F(CryptoSecretBoxerTest, MultipleKeys) {
   string key_11(CryptoSecretBoxer::GetKeySize(), 0x11);
   string key_12(CryptoSecretBoxer::GetKeySize(), 0x12);
 
diff --git a/src/net/quic/core/crypto/crypto_server_test.cc b/src/net/quic/core/crypto/crypto_server_test.cc
index 2527882..13a040e 100644
--- a/src/net/quic/core/crypto/crypto_server_test.cc
+++ b/src/net/quic/core/crypto/crypto_server_test.cc
@@ -21,6 +21,7 @@
 #include "net/quic/platform/api/quic_endian.h"
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/delayed_verify_strike_register_client.h"
@@ -29,7 +30,6 @@
 #include "net/quic/test_tools/mock_random.h"
 #include "net/quic/test_tools/quic_crypto_server_config_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/boringssl/src/include/openssl/sha.h"
 
 using std::string;
@@ -101,7 +101,7 @@
   return params;
 }
 
-class CryptoServerTest : public ::testing::TestWithParam<TestParams> {
+class CryptoServerTest : public QuicTestWithParam<TestParams> {
  public:
   CryptoServerTest()
       : rand_(QuicRandom::GetInstance()),
@@ -395,7 +395,6 @@
   }
 
  protected:
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   QuicRandom* const rand_;
   MockRandom rand_for_id_generation_;
   MockClock clock_;
@@ -948,7 +947,9 @@
   ShouldFailMentioning("", msg);
 }
 
-TEST(CryptoServerConfigGenerationTest, Determinism) {
+class CryptoServerConfigGenerationTest : public QuicTest {};
+
+TEST_F(CryptoServerConfigGenerationTest, Determinism) {
   // Test that using a deterministic PRNG causes the server-config to be
   // deterministic.
 
@@ -969,7 +970,7 @@
             scfg_b->DebugString(Perspective::IS_SERVER));
 }
 
-TEST(CryptoServerConfigGenerationTest, SCIDVaries) {
+TEST_F(CryptoServerConfigGenerationTest, SCIDVaries) {
   // This test ensures that the server config ID varies for different server
   // configs.
 
@@ -994,7 +995,7 @@
   EXPECT_NE(scid_a, scid_b);
 }
 
-TEST(CryptoServerConfigGenerationTest, SCIDIsHashOfServerConfig) {
+TEST_F(CryptoServerConfigGenerationTest, SCIDIsHashOfServerConfig) {
   MockRandom rand_a;
   const QuicCryptoServerConfig::ConfigOptions options;
   MockClock clock;
diff --git a/src/net/quic/core/crypto/crypto_utils_test.cc b/src/net/quic/core/crypto/crypto_utils_test.cc
index 641de83..ef00ced 100644
--- a/src/net/quic/core/crypto/crypto_utils_test.cc
+++ b/src/net/quic/core/crypto/crypto_utils_test.cc
@@ -5,9 +5,9 @@
 #include "net/quic/core/crypto/crypto_utils.h"
 
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -15,7 +15,9 @@
 namespace test {
 namespace {
 
-TEST(CryptoUtilsTest, TestExportKeyingMaterial) {
+class CryptoUtilsTest : public QuicTest {};
+
+TEST_F(CryptoUtilsTest, TestExportKeyingMaterial) {
   const struct TestVector {
     // Input (strings of hexadecimal digits):
     const char* subkey_secret;
@@ -72,7 +74,7 @@
   }
 }
 
-TEST(CryptoUtilsTest, HandshakeFailureReasonToString) {
+TEST_F(CryptoUtilsTest, HandshakeFailureReasonToString) {
   EXPECT_STREQ("HANDSHAKE_OK",
                CryptoUtils::HandshakeFailureReasonToString(HANDSHAKE_OK));
   EXPECT_STREQ("CLIENT_NONCE_UNKNOWN_FAILURE",
diff --git a/src/net/quic/core/crypto/curve25519_key_exchange_test.cc b/src/net/quic/core/crypto/curve25519_key_exchange_test.cc
index 6ded8a7..7496bca 100644
--- a/src/net/quic/core/crypto/curve25519_key_exchange_test.cc
+++ b/src/net/quic/core/crypto/curve25519_key_exchange_test.cc
@@ -7,16 +7,18 @@
 #include <memory>
 
 #include "net/quic/core/crypto/quic_random.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
+class Curve25519KeyExchangeTest : public QuicTest {};
+
 // SharedKey just tests that the basic key exchange identity holds: that both
 // parties end up with the same key.
-TEST(Curve25519KeyExchange, SharedKey) {
+TEST_F(Curve25519KeyExchangeTest, SharedKey) {
   QuicRandom* const rand = QuicRandom::GetInstance();
 
   for (int i = 0; i < 5; i++) {
diff --git a/src/net/quic/core/crypto/local_strike_register_client_test.cc b/src/net/quic/core/crypto/local_strike_register_client_test.cc
index 4af0afc..79fa94f 100644
--- a/src/net/quic/core/crypto/local_strike_register_client_test.cc
+++ b/src/net/quic/core/crypto/local_strike_register_client_test.cc
@@ -11,7 +11,7 @@
 #include "net/quic/core/crypto/crypto_protocol.h"
 #include "net/quic/core/quic_time.h"
 #include "net/quic/platform/api/quic_str_cat.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
@@ -54,7 +54,7 @@
 size_t kMaxEntries = 100;
 uint32_t kWindowSecs = 60;
 
-class LocalStrikeRegisterClientTest : public ::testing::Test {
+class LocalStrikeRegisterClientTest : public QuicTest {
  protected:
   LocalStrikeRegisterClientTest() {}
 
diff --git a/src/net/quic/core/crypto/null_decrypter.cc b/src/net/quic/core/crypto/null_decrypter.cc
index 5e0ea06..c42fd34 100644
--- a/src/net/quic/core/crypto/null_decrypter.cc
+++ b/src/net/quic/core/crypto/null_decrypter.cc
@@ -43,7 +43,8 @@
                                   char* output,
                                   size_t* output_length,
                                   size_t max_output_length) {
-  QuicDataReader reader(ciphertext.data(), ciphertext.length(), perspective_);
+  QuicDataReader reader(ciphertext.data(), ciphertext.length(), perspective_,
+                        HOST_BYTE_ORDER);
   uint128 hash;
 
   if (!ReadHash(&reader, &hash)) {
diff --git a/src/net/quic/core/crypto/null_decrypter_test.cc b/src/net/quic/core/crypto/null_decrypter_test.cc
index 10f4c31..a6750ab 100644
--- a/src/net/quic/core/crypto/null_decrypter_test.cc
+++ b/src/net/quic/core/crypto/null_decrypter_test.cc
@@ -3,12 +3,13 @@
 // found in the LICENSE file.
 
 #include "net/quic/core/crypto/null_decrypter.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
 namespace net {
 namespace test {
 
-class NullDecrypterTest : public ::testing::TestWithParam<bool> {};
+class NullDecrypterTest : public QuicTestWithParam<bool> {};
 
 TEST_F(NullDecrypterTest, DecryptClient) {
   unsigned char expected[] = {
diff --git a/src/net/quic/core/crypto/null_encrypter_test.cc b/src/net/quic/core/crypto/null_encrypter_test.cc
index a40b35e..6992a27 100644
--- a/src/net/quic/core/crypto/null_encrypter_test.cc
+++ b/src/net/quic/core/crypto/null_encrypter_test.cc
@@ -3,12 +3,13 @@
 // found in the LICENSE file.
 
 #include "net/quic/core/crypto/null_encrypter.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
 namespace net {
 namespace test {
 
-class NullEncrypterTest : public ::testing::TestWithParam<bool> {};
+class NullEncrypterTest : public QuicTestWithParam<bool> {};
 
 TEST_F(NullEncrypterTest, EncryptClient) {
   unsigned char expected[] = {
diff --git a/src/net/quic/core/crypto/p256_key_exchange_test.cc b/src/net/quic/core/crypto/p256_key_exchange_test.cc
index 7ff4022..1156df4 100644
--- a/src/net/quic/core/crypto/p256_key_exchange_test.cc
+++ b/src/net/quic/core/crypto/p256_key_exchange_test.cc
@@ -6,16 +6,18 @@
 
 #include <memory>
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
+class P256KeyExchangeTest : public QuicTest {};
+
 // SharedKey just tests that the basic key exchange identity holds: that both
 // parties end up with the same key.
-TEST(P256KeyExchange, SharedKey) {
+TEST_F(P256KeyExchangeTest, SharedKey) {
   for (int i = 0; i < 5; i++) {
     string alice_private(P256KeyExchange::NewPrivateKey());
     string bob_private(P256KeyExchange::NewPrivateKey());
diff --git a/src/net/quic/core/crypto/quic_compressed_certs_cache.cc b/src/net/quic/core/crypto/quic_compressed_certs_cache.cc
index c9ba530..84a58fa 100644
--- a/src/net/quic/core/crypto/quic_compressed_certs_cache.cc
+++ b/src/net/quic/core/crypto/quic_compressed_certs_cache.cc
@@ -19,7 +19,9 @@
 }  // namespace
 
 QuicCompressedCertsCache::UncompressedCerts::UncompressedCerts()
-    : chain(nullptr) {}
+    : chain(nullptr),
+      client_common_set_hashes(nullptr),
+      client_cached_cert_hashes(nullptr) {}
 
 QuicCompressedCertsCache::UncompressedCerts::UncompressedCerts(
     const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
diff --git a/src/net/quic/core/crypto/quic_compressed_certs_cache_test.cc b/src/net/quic/core/crypto/quic_compressed_certs_cache_test.cc
index 4abfca0..c5cad2f 100644
--- a/src/net/quic/core/crypto/quic_compressed_certs_cache_test.cc
+++ b/src/net/quic/core/crypto/quic_compressed_certs_cache_test.cc
@@ -6,9 +6,9 @@
 
 #include "base/macros.h"
 #include "net/quic/core/crypto/cert_compressor.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using base::IntToString;
 using std::string;
diff --git a/src/net/quic/core/crypto/quic_crypto_client_config_test.cc b/src/net/quic/core/crypto/quic_crypto_client_config_test.cc
index c38d805..54bc6e1 100644
--- a/src/net/quic/core/crypto/quic_crypto_client_config_test.cc
+++ b/src/net/quic/core/crypto/quic_crypto_client_config_test.cc
@@ -8,10 +8,10 @@
 #include "net/quic/core/quic_server_id.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_endian.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_random.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -47,24 +47,26 @@
 
 }  // namespace
 
-TEST(QuicCryptoClientConfigTest, CachedState_IsEmpty) {
+class QuicCryptoClientConfigTest : public QuicTest {};
+
+TEST_F(QuicCryptoClientConfigTest, CachedState_IsEmpty) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_TRUE(state.IsEmpty());
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_IsComplete) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_IsComplete) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_FALSE(state.IsComplete(QuicWallTime::FromUNIXSeconds(0)));
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_GenerationCounter) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_GenerationCounter) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_EQ(0u, state.generation_counter());
   state.SetProofInvalid();
   EXPECT_EQ(1u, state.generation_counter());
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_SetProofVerifyDetails) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_SetProofVerifyDetails) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_TRUE(state.proof_verify_details() == nullptr);
   ProofVerifyDetails* details = new TestProofVerifyDetails;
@@ -72,7 +74,7 @@
   EXPECT_EQ(details, state.proof_verify_details());
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_ServerDesignatedConnectionId) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_ServerDesignatedConnectionId) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_FALSE(state.has_server_designated_connection_id());
 
@@ -103,7 +105,7 @@
   EXPECT_EQ(second_cid, state.GetNextServerDesignatedConnectionId());
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_ServerIdConsumedBeforeSet) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_ServerIdConsumedBeforeSet) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_FALSE(state.has_server_designated_connection_id());
 #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
@@ -113,7 +115,7 @@
 #endif  // GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_ServerNonce) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_ServerNonce) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_FALSE(state.has_server_nonce());
 
@@ -144,7 +146,7 @@
   EXPECT_EQ(second_nonce, state.GetNextServerNonce());
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_ServerNonceConsumedBeforeSet) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_ServerNonceConsumedBeforeSet) {
   QuicCryptoClientConfig::CachedState state;
   EXPECT_FALSE(state.has_server_nonce());
 #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
@@ -154,7 +156,7 @@
 #endif  // GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
 }
 
-TEST(QuicCryptoClientConfigTest, CachedState_InitializeFrom) {
+TEST_F(QuicCryptoClientConfigTest, CachedState_InitializeFrom) {
   QuicCryptoClientConfig::CachedState state;
   QuicCryptoClientConfig::CachedState other;
   state.set_source_address_token("TOKEN");
@@ -168,7 +170,7 @@
   EXPECT_FALSE(state.has_server_nonce());
 }
 
-TEST(QuicCryptoClientConfigTest, InchoateChlo) {
+TEST_F(QuicCryptoClientConfigTest, InchoateChlo) {
   QuicCryptoClientConfig::CachedState state;
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params(
@@ -187,7 +189,7 @@
   EXPECT_EQ(string(32, 'r'), proof_nonce);
 }
 
-TEST(QuicCryptoClientConfigTest, PreferAesGcm) {
+TEST_F(QuicCryptoClientConfigTest, PreferAesGcm) {
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   if (config.aead.size() > 1)
     EXPECT_NE(kAESG, config.aead[0]);
@@ -195,7 +197,7 @@
   EXPECT_EQ(kAESG, config.aead[0]);
 }
 
-TEST(QuicCryptoClientConfigTest, InchoateChloSecure) {
+TEST_F(QuicCryptoClientConfigTest, InchoateChloSecure) {
   QuicCryptoClientConfig::CachedState state;
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params(
@@ -213,7 +215,7 @@
   EXPECT_FALSE(msg.GetStringPiece(kSCID, &scid));
 }
 
-TEST(QuicCryptoClientConfigTest, InchoateChloSecureWithSCIDNoEXPY) {
+TEST_F(QuicCryptoClientConfigTest, InchoateChloSecureWithSCIDNoEXPY) {
   // Test that a config with no EXPY is still valid when a non-zero
   // expiry time is passed in.
   QuicCryptoClientConfig::CachedState state;
@@ -241,7 +243,7 @@
   EXPECT_EQ("12345678", scid);
 }
 
-TEST(QuicCryptoClientConfigTest, InchoateChloSecureWithSCID) {
+TEST_F(QuicCryptoClientConfigTest, InchoateChloSecureWithSCID) {
   QuicCryptoClientConfig::CachedState state;
   CryptoHandshakeMessage scfg;
   scfg.set_tag(kSCFG);
@@ -268,7 +270,7 @@
   EXPECT_EQ("12345678", scid);
 }
 
-TEST(QuicCryptoClientConfigTest, FillClientHello) {
+TEST_F(QuicCryptoClientConfigTest, FillClientHello) {
   QuicCryptoClientConfig::CachedState state;
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> params(
@@ -289,7 +291,7 @@
   EXPECT_EQ(QuicVersionToQuicTag(QuicVersionMax()), cver);
 }
 
-TEST(QuicCryptoClientConfigTest, ProcessServerDowngradeAttack) {
+TEST_F(QuicCryptoClientConfigTest, ProcessServerDowngradeAttack) {
   QuicVersionVector supported_versions = AllSupportedVersions();
   if (supported_versions.size() == 1) {
     // No downgrade attack is possible if the client only supports one version.
@@ -316,7 +318,7 @@
   EXPECT_EQ("Downgrade attack detected", error);
 }
 
-TEST(QuicCryptoClientConfigTest, InitializeFrom) {
+TEST_F(QuicCryptoClientConfigTest, InitializeFrom) {
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   QuicServerId canonical_server_id("www.google.com", 443,
                                    PRIVACY_MODE_DISABLED);
@@ -337,7 +339,7 @@
   EXPECT_EQ(1u, other->generation_counter());
 }
 
-TEST(QuicCryptoClientConfigTest, Canonical) {
+TEST_F(QuicCryptoClientConfigTest, Canonical) {
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   config.AddCanonicalSuffix(".google.com");
   QuicServerId canonical_id1("www.google.com", 443, PRIVACY_MODE_DISABLED);
@@ -361,7 +363,7 @@
   EXPECT_TRUE(config.LookupOrCreate(different_id)->IsEmpty());
 }
 
-TEST(QuicCryptoClientConfigTest, CanonicalNotUsedIfNotValid) {
+TEST_F(QuicCryptoClientConfigTest, CanonicalNotUsedIfNotValid) {
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
   config.AddCanonicalSuffix(".google.com");
   QuicServerId canonical_id1("www.google.com", 443, PRIVACY_MODE_DISABLED);
@@ -376,7 +378,7 @@
   EXPECT_TRUE(config.LookupOrCreate(canonical_id2)->IsEmpty());
 }
 
-TEST(QuicCryptoClientConfigTest, ClearCachedStates) {
+TEST_F(QuicCryptoClientConfigTest, ClearCachedStates) {
   QuicCryptoClientConfig config(crypto_test_utils::ProofVerifierForTesting());
 
   // Create two states on different origins.
@@ -464,7 +466,7 @@
   EXPECT_EQ(3u, cleared_cache->generation_counter());
 }
 
-TEST(QuicCryptoClientConfigTest, ProcessReject) {
+TEST_F(QuicCryptoClientConfigTest, ProcessReject) {
   CryptoHandshakeMessage rej;
   crypto_test_utils::FillInDummyReject(&rej, /* stateless */ false);
 
@@ -482,7 +484,7 @@
   EXPECT_FALSE(cached.has_server_nonce());
 }
 
-TEST(QuicCryptoClientConfigTest, ProcessRejectWithLongTTL) {
+TEST_F(QuicCryptoClientConfigTest, ProcessRejectWithLongTTL) {
   CryptoHandshakeMessage rej;
   crypto_test_utils::FillInDummyReject(&rej, /* stateless */ false);
   QuicTime::Delta one_week = QuicTime::Delta::FromSeconds(kNumSecondsPerWeek);
@@ -507,7 +509,7 @@
       QuicWallTime::FromUNIXSeconds(one_week.ToSeconds() - 1)));
 }
 
-TEST(QuicCryptoClientConfigTest, ProcessStatelessReject) {
+TEST_F(QuicCryptoClientConfigTest, ProcessStatelessReject) {
   // Create a dummy reject message and mark it as stateless.
   CryptoHandshakeMessage rej;
   crypto_test_utils::FillInDummyReject(&rej, /* stateless */ true);
@@ -534,7 +536,7 @@
   EXPECT_EQ(server_nonce, cached.GetNextServerNonce());
 }
 
-TEST(QuicCryptoClientConfigTest, BadlyFormattedStatelessReject) {
+TEST_F(QuicCryptoClientConfigTest, BadlyFormattedStatelessReject) {
   // Create a dummy reject message and mark it as stateless.  Do not
   // add an server-designated connection-id.
   CryptoHandshakeMessage rej;
@@ -554,7 +556,7 @@
   EXPECT_EQ("Missing kRCID", error);
 }
 
-TEST(QuicCryptoClientConfigTest, ServerNonceinSHLO) {
+TEST_F(QuicCryptoClientConfigTest, ServerNonceinSHLO) {
   // Test that the server must include a nonce in the SHLO.
   CryptoHandshakeMessage msg;
   msg.set_tag(kSHLO);
diff --git a/src/net/quic/core/crypto/quic_crypto_server_config_test.cc b/src/net/quic/core/crypto/quic_crypto_server_config_test.cc
index d67030e..6c14076 100644
--- a/src/net/quic/core/crypto/quic_crypto_server_config_test.cc
+++ b/src/net/quic/core/crypto/quic_crypto_server_config_test.cc
@@ -16,17 +16,19 @@
 #include "net/quic/core/crypto/quic_random.h"
 #include "net/quic/core/quic_time.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_crypto_server_config_peer.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
-TEST(QuicCryptoServerConfigTest, ServerConfig) {
+class QuicCryptoServerConfigTest : public QuicTest {};
+
+TEST_F(QuicCryptoServerConfigTest, ServerConfig) {
   QuicRandom* rand = QuicRandom::GetInstance();
   QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand,
                                 crypto_test_utils::ProofSourceForTesting());
@@ -45,7 +47,7 @@
   EXPECT_LE(1u, aead.size());
 }
 
-TEST(QuicCryptoServerConfigTest, CompressCerts) {
+TEST_F(QuicCryptoServerConfigTest, CompressCerts) {
   QuicCompressedCertsCache compressed_certs_cache(
       QuicCompressedCertsCache::kQuicCompressedCertsCacheSize);
 
@@ -64,7 +66,7 @@
   EXPECT_EQ(compressed_certs_cache.Size(), 1u);
 }
 
-TEST(QuicCryptoServerConfigTest, CompressSameCertsTwice) {
+TEST_F(QuicCryptoServerConfigTest, CompressSameCertsTwice) {
   QuicCompressedCertsCache compressed_certs_cache(
       QuicCompressedCertsCache::kQuicCompressedCertsCacheSize);
 
@@ -91,7 +93,7 @@
   EXPECT_EQ(compressed_certs_cache.Size(), 1u);
 }
 
-TEST(QuicCryptoServerConfigTest, CompressDifferentCerts) {
+TEST_F(QuicCryptoServerConfigTest, CompressDifferentCerts) {
   // This test compresses a set of similar but not identical certs. Cache if
   // used should return cache miss and add all the compressed certs.
   QuicCompressedCertsCache compressed_certs_cache(
@@ -132,7 +134,7 @@
   EXPECT_EQ(compressed_certs_cache.Size(), 3u);
 }
 
-class SourceAddressTokenTest : public ::testing::Test {
+class SourceAddressTokenTest : public QuicTest {
  public:
   SourceAddressTokenTest()
       : ip4_(QuicIpAddress::Loopback4()),
@@ -274,7 +276,7 @@
             ValidateSourceAddressTokens(kPrimary, token4or6, ip6_));
 }
 
-class CryptoServerConfigsTest : public ::testing::Test {
+class CryptoServerConfigsTest : public QuicTest {
  public:
   CryptoServerConfigsTest()
       : rand_(QuicRandom::GetInstance()),
diff --git a/src/net/quic/core/crypto/quic_random_test.cc b/src/net/quic/core/crypto/quic_random_test.cc
index d4f8a7b..5d6f437 100644
--- a/src/net/quic/core/crypto/quic_random_test.cc
+++ b/src/net/quic/core/crypto/quic_random_test.cc
@@ -4,12 +4,14 @@
 
 #include "net/quic/core/crypto/quic_random.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 
-TEST(QuicRandomTest, RandBytes) {
+class QuicRandomTest : public QuicTest {};
+
+TEST_F(QuicRandomTest, RandBytes) {
   unsigned char buf1[16];
   unsigned char buf2[16];
   memset(buf1, 0xaf, sizeof(buf1));
@@ -21,14 +23,14 @@
   EXPECT_NE(0, memcmp(buf1, buf2, sizeof(buf1)));
 }
 
-TEST(QuicRandomTest, RandUint64) {
+TEST_F(QuicRandomTest, RandUint64) {
   QuicRandom* rng = QuicRandom::GetInstance();
   uint64_t value1 = rng->RandUint64();
   uint64_t value2 = rng->RandUint64();
   EXPECT_NE(value1, value2);
 }
 
-TEST(QuicRandomTest, Reseed) {
+TEST_F(QuicRandomTest, Reseed) {
   char buf[1024];
   memset(buf, 0xaf, sizeof(buf));
 
diff --git a/src/net/quic/core/crypto/scoped_evp_aead_ctx.cc b/src/net/quic/core/crypto/scoped_evp_aead_ctx.cc
index 4472358..ab9e54a 100644
--- a/src/net/quic/core/crypto/scoped_evp_aead_ctx.cc
+++ b/src/net/quic/core/crypto/scoped_evp_aead_ctx.cc
@@ -8,6 +8,7 @@
 
 ScopedEVPAEADCtx::ScopedEVPAEADCtx() {
   ctx_.aead = nullptr;
+  ctx_.aead_state = nullptr;
 }
 
 ScopedEVPAEADCtx::~ScopedEVPAEADCtx() {
diff --git a/src/net/quic/core/crypto/strike_register_test.cc b/src/net/quic/core/crypto/strike_register_test.cc
index b056a9e..bcf2ec2 100644
--- a/src/net/quic/core/crypto/strike_register_test.cc
+++ b/src/net/quic/core/crypto/strike_register_test.cc
@@ -10,6 +10,7 @@
 #include <string>
 
 #include "base/rand_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
@@ -31,7 +32,9 @@
   memset(nonce + 12, 0, 20);
 }
 
-TEST(StrikeRegisterTest, SimpleHorizon) {
+class StrikeRegisterTest : public QuicTest {};
+
+TEST_F(StrikeRegisterTest, SimpleHorizon) {
   // The set must reject values created on or before its own creation time.
   StrikeRegister set(10 /* max size */, 1000 /* current time */,
                      100 /* window secs */, kOrbit,
@@ -50,7 +53,7 @@
   EXPECT_EQ(101u, set.GetCurrentValidWindowSecs(1300 /* current time */));
 }
 
-TEST(StrikeRegisterTest, NoStartupMode) {
+TEST_F(StrikeRegisterTest, NoStartupMode) {
   // Check that a strike register works immediately if NO_STARTUP_PERIOD_NEEDED
   // is specified.
   StrikeRegister set(10 /* max size */, 1000 /* current time */,
@@ -68,7 +71,7 @@
   EXPECT_EQ(101u, set.GetCurrentValidWindowSecs(1300 /* current time */));
 }
 
-TEST(StrikeRegisterTest, WindowFuture) {
+TEST_F(StrikeRegisterTest, WindowFuture) {
   // The set must reject values outside the window.
   StrikeRegister set(10 /* max size */, 1000 /* current time */,
                      100 /* window secs */, kOrbit,
@@ -80,7 +83,7 @@
   EXPECT_EQ(NONCE_INVALID_TIME_FAILURE, set.Insert(nonce, 1100));
 }
 
-TEST(StrikeRegisterTest, BadOrbit) {
+TEST_F(StrikeRegisterTest, BadOrbit) {
   // The set must reject values with the wrong orbit
   StrikeRegister set(10 /* max size */, 1000 /* current time */,
                      100 /* window secs */, kOrbit,
@@ -91,7 +94,7 @@
   EXPECT_EQ(NONCE_INVALID_ORBIT_FAILURE, set.Insert(nonce, 1100));
 }
 
-TEST(StrikeRegisterTest, OneValue) {
+TEST_F(StrikeRegisterTest, OneValue) {
   StrikeRegister set(10 /* max size */, 1000 /* current time */,
                      100 /* window secs */, kOrbit,
                      StrikeRegister::DENY_REQUESTS_AT_STARTUP);
@@ -100,7 +103,7 @@
   EXPECT_EQ(NONCE_OK, set.Insert(nonce, 1101));
 }
 
-TEST(StrikeRegisterTest, RejectDuplicate) {
+TEST_F(StrikeRegisterTest, RejectDuplicate) {
   // The set must reject values with the wrong orbit
   StrikeRegister set(10 /* max size */, 1000 /* current time */,
                      100 /* window secs */, kOrbit,
@@ -111,7 +114,7 @@
   EXPECT_EQ(NONCE_NOT_UNIQUE_FAILURE, set.Insert(nonce, 1101));
 }
 
-TEST(StrikeRegisterTest, HorizonUpdating) {
+TEST_F(StrikeRegisterTest, HorizonUpdating) {
   StrikeRegister::StartupType startup_types[] = {
       StrikeRegister::DENY_REQUESTS_AT_STARTUP,
       StrikeRegister::NO_STARTUP_PERIOD_NEEDED};
@@ -163,7 +166,7 @@
   }
 }
 
-TEST(StrikeRegisterTest, InsertMany) {
+TEST_F(StrikeRegisterTest, InsertMany) {
   StrikeRegister set(5000 /* max size */, 1000 /* current time */,
                      500 /* window secs */, kOrbit,
                      StrikeRegister::DENY_REQUESTS_AT_STARTUP);
@@ -283,7 +286,7 @@
   std::set<std::pair<uint32_t, string>> nonces_;
 };
 
-class StrikeRegisterStressTest : public ::testing::Test {};
+class StrikeRegisterStressTest : public QuicTest {};
 
 TEST_F(StrikeRegisterStressTest, InOrderInsertion) {
   // Fixed seed gives reproducibility for this test.
diff --git a/src/net/quic/core/frames/quic_frames_test.cc b/src/net/quic/core/frames/quic_frames_test.cc
index dbc0d0c..67ff6f8 100644
--- a/src/net/quic/core/frames/quic_frames_test.cc
+++ b/src/net/quic/core/frames/quic_frames_test.cc
@@ -14,8 +14,7 @@
 #include "net/quic/core/frames/quic_stop_waiting_frame.h"
 #include "net/quic/core/frames/quic_stream_frame.h"
 #include "net/quic/core/frames/quic_window_update_frame.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -23,7 +22,9 @@
 
 using testing::_;
 
-TEST(QuicFramesTest, AckFrameToString) {
+class QuicFramesTest : public QuicTest {};
+
+TEST_F(QuicFramesTest, AckFrameToString) {
   QuicAckFrame frame;
   frame.largest_observed = 2;
   frame.ack_delay_time = QuicTime::Delta::FromMicroseconds(3);
@@ -39,7 +40,7 @@
       stream.str());
 }
 
-TEST(QuicFramesTest, PaddingFrameToString) {
+TEST_F(QuicFramesTest, PaddingFrameToString) {
   QuicPaddingFrame frame;
   frame.num_padding_bytes = 1;
   std::ostringstream stream;
@@ -47,7 +48,7 @@
   EXPECT_EQ("{ num_padding_bytes: 1 }\n", stream.str());
 }
 
-TEST(QuicFramesTest, RstStreamFrameToString) {
+TEST_F(QuicFramesTest, RstStreamFrameToString) {
   QuicRstStreamFrame frame;
   frame.stream_id = 1;
   frame.error_code = QUIC_STREAM_CANCELLED;
@@ -56,7 +57,7 @@
   EXPECT_EQ("{ stream_id: 1, error_code: 6 }\n", stream.str());
 }
 
-TEST(QuicFramesTest, ConnectionCloseFrameToString) {
+TEST_F(QuicFramesTest, ConnectionCloseFrameToString) {
   QuicConnectionCloseFrame frame;
   frame.error_code = QUIC_NETWORK_IDLE_TIMEOUT;
   frame.error_details = "No recent network activity.";
@@ -67,7 +68,7 @@
       stream.str());
 }
 
-TEST(QuicFramesTest, GoAwayFrameToString) {
+TEST_F(QuicFramesTest, GoAwayFrameToString) {
   QuicGoAwayFrame frame;
   frame.error_code = QUIC_NETWORK_IDLE_TIMEOUT;
   frame.last_good_stream_id = 2;
@@ -79,7 +80,7 @@
       stream.str());
 }
 
-TEST(QuicFramesTest, WindowUpdateFrameToString) {
+TEST_F(QuicFramesTest, WindowUpdateFrameToString) {
   QuicWindowUpdateFrame frame;
   std::ostringstream stream;
   frame.stream_id = 1;
@@ -88,7 +89,7 @@
   EXPECT_EQ("{ stream_id: 1, byte_offset: 2 }\n", stream.str());
 }
 
-TEST(QuicFramesTest, BlockedFrameToString) {
+TEST_F(QuicFramesTest, BlockedFrameToString) {
   QuicBlockedFrame frame;
   frame.stream_id = 1;
   std::ostringstream stream;
@@ -96,7 +97,7 @@
   EXPECT_EQ("{ stream_id: 1 }\n", stream.str());
 }
 
-TEST(QuicFramesTest, StreamFrameToString) {
+TEST_F(QuicFramesTest, StreamFrameToString) {
   QuicStreamFrame frame;
   frame.stream_id = 1;
   frame.fin = false;
@@ -107,7 +108,7 @@
   EXPECT_EQ("{ stream_id: 1, fin: 0, offset: 2, length: 3 }\n", stream.str());
 }
 
-TEST(QuicFramesTest, StopWaitingFrameToString) {
+TEST_F(QuicFramesTest, StopWaitingFrameToString) {
   QuicStopWaitingFrame frame;
   frame.least_unacked = 2;
   std::ostringstream stream;
@@ -115,7 +116,7 @@
   EXPECT_EQ("{ least_unacked: 2 }\n", stream.str());
 }
 
-TEST(QuicFramesTest, IsAwaitingPacket) {
+TEST_F(QuicFramesTest, IsAwaitingPacket) {
   QuicAckFrame ack_frame1;
   ack_frame1.largest_observed = 10u;
   ack_frame1.packets.Add(1, 11);
@@ -136,7 +137,7 @@
   EXPECT_TRUE(IsAwaitingPacket(ack_frame2, 50u, 20u));
 }
 
-TEST(QuicFramesTest, RemoveSmallestInterval) {
+TEST_F(QuicFramesTest, RemoveSmallestInterval) {
   QuicAckFrame ack_frame1;
   ack_frame1.largest_observed = 100u;
   ack_frame1.packets.Add(51, 60);
@@ -153,8 +154,10 @@
   EXPECT_EQ(99u, ack_frame1.packets.Max());
 }
 
+class PacketNumberQueueTest : public QuicTest {};
+
 // Tests that a queue contains the expected data after calls to Add().
-TEST(PacketNumberQueueTest, AddRange) {
+TEST_F(PacketNumberQueueTest, AddRange) {
   PacketNumberQueue queue;
   queue.Add(1, 51);
   queue.Add(53);
@@ -176,7 +179,7 @@
 }
 
 // Tests that a queue contains the expected data after calls to Remove().
-TEST(PacketNumberQueueTest, Removal) {
+TEST_F(PacketNumberQueueTest, Removal) {
   PacketNumberQueue queue;
   queue.Add(0, 100);
 
@@ -203,7 +206,7 @@
 }
 
 // Tests that a queue is empty when all of its elements are removed.
-TEST(PacketNumberQueueTest, Empty) {
+TEST_F(PacketNumberQueueTest, Empty) {
   PacketNumberQueue queue;
   EXPECT_TRUE(queue.Empty());
   EXPECT_EQ(0u, queue.NumPacketsSlow());
@@ -215,7 +218,7 @@
 }
 
 // Tests that logging the state of a PacketNumberQueue does not crash.
-TEST(PacketNumberQueueTest, LogDoesNotCrash) {
+TEST_F(PacketNumberQueueTest, LogDoesNotCrash) {
   std::ostringstream oss;
   PacketNumberQueue queue;
   oss << queue;
@@ -226,7 +229,7 @@
 }
 
 // Tests that the iterators returned from a packet queue iterate over the queue.
-TEST(PacketNumberQueueTest, Iterators) {
+TEST_F(PacketNumberQueueTest, Iterators) {
   PacketNumberQueue queue;
   queue.Add(1, 100);
 
@@ -239,7 +242,7 @@
   EXPECT_EQ(expected_intervals, actual_intervals);
 }
 
-TEST(PacketNumberQueueTest, LowerBoundEquals) {
+TEST_F(PacketNumberQueueTest, LowerBoundEquals) {
   PacketNumberQueue queue;
   queue.Add(1, 100);
 
@@ -251,7 +254,7 @@
   EXPECT_TRUE(queue.end() == it);
 }
 
-TEST(PacketNumberQueueTest, LowerBoundGreater) {
+TEST_F(PacketNumberQueueTest, LowerBoundGreater) {
   PacketNumberQueue queue;
   queue.Add(15, 25);
   queue.Add(50, 100);
@@ -262,7 +265,7 @@
   EXPECT_EQ(25u, it->max());
 }
 
-TEST(PacketNumberQueueTest, IntervalLengthAndRemoveInterval) {
+TEST_F(PacketNumberQueueTest, IntervalLengthAndRemoveInterval) {
   PacketNumberQueue queue;
   queue.Add(1, 10);
   queue.Add(20, 30);
@@ -275,7 +278,7 @@
   EXPECT_FALSE(queue.Contains(20));
 }
 
-TEST(PacketNumberQueueTest, Complement) {
+TEST_F(PacketNumberQueueTest, Complement) {
   PacketNumberQueue queue;
   queue.Add(1, 10);
   queue.Add(12, 20);
diff --git a/src/net/quic/core/quic_alarm_test.cc b/src/net/quic/core/quic_alarm_test.cc
index cb6aeac..ce4d4b5 100644
--- a/src/net/quic/core/quic_alarm_test.cc
+++ b/src/net/quic/core/quic_alarm_test.cc
@@ -4,8 +4,7 @@
 
 #include "net/quic/core/quic_alarm.h"
 
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using testing::Return;
 using testing::Invoke;
@@ -74,7 +73,7 @@
   void CancelImpl() override {}
 };
 
-class QuicAlarmTest : public ::testing::Test {
+class QuicAlarmTest : public QuicTest {
  public:
   QuicAlarmTest()
       : delegate_(new MockDelegate()),
diff --git a/src/net/quic/core/quic_arena_scoped_ptr_test.cc b/src/net/quic/core/quic_arena_scoped_ptr_test.cc
index 7c59e47..a404b45 100644
--- a/src/net/quic/core/quic_arena_scoped_ptr_test.cc
+++ b/src/net/quic/core/quic_arena_scoped_ptr_test.cc
@@ -5,8 +5,7 @@
 #include "net/quic/core/quic_arena_scoped_ptr.h"
 
 #include "net/quic/core/quic_one_block_arena.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace {
@@ -22,7 +21,7 @@
   std::vector<char> buffer;
 };
 
-class QuicArenaScopedPtrParamTest : public ::testing::TestWithParam<TestParam> {
+class QuicArenaScopedPtrParamTest : public QuicTestWithParam<TestParam> {
  protected:
   QuicArenaScopedPtr<TestObject> CreateObject(uintptr_t value) {
     QuicArenaScopedPtr<TestObject> ptr;
@@ -48,7 +47,7 @@
                         testing::Values(TestParam::kFromHeap,
                                         TestParam::kFromArena));
 
-TEST(QuicArenaScopedPtrTest, NullObjects) {
+TEST_P(QuicArenaScopedPtrParamTest, NullObjects) {
   QuicArenaScopedPtr<TestObject> def;
   QuicArenaScopedPtr<TestObject> null(nullptr);
   EXPECT_EQ(def, null);
@@ -56,7 +55,7 @@
   EXPECT_EQ(null, nullptr);
 }
 
-TEST(QuicArenaScopedPtrTest, FromArena) {
+TEST_P(QuicArenaScopedPtrParamTest, FromArena) {
   QuicOneBlockArena<1024> arena_;
   EXPECT_TRUE(arena_.New<TestObject>(0).is_from_arena());
   EXPECT_FALSE(
diff --git a/src/net/quic/core/quic_bandwidth_test.cc b/src/net/quic/core/quic_bandwidth_test.cc
index 17b46e2..406b62d 100644
--- a/src/net/quic/core/quic_bandwidth_test.cc
+++ b/src/net/quic/core/quic_bandwidth_test.cc
@@ -4,12 +4,12 @@
 
 #include "net/quic/core/quic_bandwidth.h"
 #include "net/quic/core/quic_time.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 
-class QuicBandwidthTest : public ::testing::Test {};
+class QuicBandwidthTest : public QuicTest {};
 
 TEST_F(QuicBandwidthTest, FromTo) {
   EXPECT_EQ(QuicBandwidth::FromKBitsPerSecond(1),
diff --git a/src/net/quic/core/quic_buffered_packet_store_test.cc b/src/net/quic/core/quic_buffered_packet_store_test.cc
index 6ae35a6..6ab09c5 100644
--- a/src/net/quic/core/quic_buffered_packet_store_test.cc
+++ b/src/net/quic/core/quic_buffered_packet_store_test.cc
@@ -8,11 +8,10 @@
 #include <string>
 
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_buffered_packet_store_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -47,7 +46,7 @@
   BufferedPacketList last_expired_packet_queue_;
 };
 
-class QuicBufferedPacketStoreTest : public ::testing::Test {
+class QuicBufferedPacketStoreTest : public QuicTest {
  public:
   QuicBufferedPacketStoreTest()
       : store_(&visitor_, &clock_, &alarm_factory_),
@@ -58,7 +57,6 @@
         packet_(packet_content_.data(), packet_content_.size(), packet_time_) {}
 
  protected:
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   QuicBufferedPacketStoreVisitor visitor_;
   MockClock clock_;
   MockAlarmFactory alarm_factory_;
diff --git a/src/net/quic/core/quic_client_promised_info_test.cc b/src/net/quic/core/quic_client_promised_info_test.cc
index f950390..f4fa2d6 100644
--- a/src/net/quic/core/quic_client_promised_info_test.cc
+++ b/src/net/quic/core/quic_client_promised_info_test.cc
@@ -10,6 +10,7 @@
 #include "net/quic/core/spdy_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_client_promised_info_peer.h"
 #include "net/test/gtest_util.h"
@@ -50,7 +51,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockQuicClientSession);
 };
 
-class QuicClientPromisedInfoTest : public ::testing::Test {
+class QuicClientPromisedInfoTest : public QuicTest {
  public:
   class StreamVisitor;
 
diff --git a/src/net/quic/core/quic_client_push_promise_index_test.cc b/src/net/quic/core/quic_client_push_promise_index_test.cc
index cdc0902..7f7633d 100644
--- a/src/net/quic/core/quic_client_push_promise_index_test.cc
+++ b/src/net/quic/core/quic_client_push_promise_index_test.cc
@@ -7,6 +7,7 @@
 #include <string>
 
 #include "net/quic/core/spdy_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_quic_client_promised_info.h"
 #include "net/quic/test_tools/quic_test_utils.h"
@@ -42,7 +43,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockQuicClientSession);
 };
 
-class QuicClientPushPromiseIndexTest : public ::testing::Test {
+class QuicClientPushPromiseIndexTest : public QuicTest {
  public:
   QuicClientPushPromiseIndexTest()
       : connection_(new StrictMock<MockQuicConnection>(&helper_,
diff --git a/src/net/quic/core/quic_config_test.cc b/src/net/quic/core/quic_config_test.cc
index a57a88f..32df9ea 100644
--- a/src/net/quic/core/quic_config_test.cc
+++ b/src/net/quic/core/quic_config_test.cc
@@ -9,10 +9,10 @@
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/core/quic_time.h"
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/test/gtest_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -20,7 +20,7 @@
 namespace test {
 namespace {
 
-class QuicConfigTest : public ::testing::Test {
+class QuicConfigTest : public QuicTest {
  protected:
   QuicConfig config_;
 };
diff --git a/src/net/quic/core/quic_connection.cc b/src/net/quic/core/quic_connection.cc
index 59fa781..0d6e88a 100644
--- a/src/net/quic/core/quic_connection.cc
+++ b/src/net/quic/core/quic_connection.cc
@@ -49,8 +49,12 @@
 const QuicPacketNumber kMaxPacketGap = 5000;
 
 // Maximum number of acks received before sending an ack in response.
+// TODO(fayang): Remove this constant when deprecating QUIC_VERSION_38.
 const QuicPacketCount kMaxPacketsReceivedBeforeAckSend = 20;
 
+// Maximum number of consecutive sent nonretransmittable packets.
+const QuicPacketCount kMaxConsecutiveNonRetransmittablePackets = 19;
+
 // Maximum number of retransmittable packets received before sending an ack.
 const QuicPacketCount kDefaultRetransmittablePacketsBeforeAck = 2;
 // Minimum number of packets received before ack decimation is enabled.
@@ -261,7 +265,8 @@
       goaway_sent_(false),
       goaway_received_(false),
       write_error_occured_(false),
-      no_stop_waiting_frames_(false) {
+      no_stop_waiting_frames_(false),
+      consecutive_num_packets_with_no_retransmittable_frames_(0) {
   QUIC_DLOG(INFO) << ENDPOINT
                   << "Created connection with connection_id: " << connection_id;
   framer_.set_visitor(this);
@@ -933,8 +938,9 @@
   ++num_packets_received_since_last_ack_sent_;
   // Always send an ack every 20 packets in order to allow the peer to discard
   // information from the SentPacketManager and provide an RTT measurement.
-  if (num_packets_received_since_last_ack_sent_ >=
-      kMaxPacketsReceivedBeforeAckSend) {
+  if (version() <= QUIC_VERSION_38 &&
+      num_packets_received_since_last_ack_sent_ >=
+          kMaxPacketsReceivedBeforeAckSend) {
     ack_queued_ = true;
   }
 
@@ -1660,6 +1666,17 @@
         ConnectionCloseSource::FROM_SELF);
     return;
   }
+
+  if (version() > QUIC_VERSION_38) {
+    if (serialized_packet->retransmittable_frames.empty() &&
+        serialized_packet->original_packet_number == 0) {
+      // Increment consecutive_num_packets_with_no_retransmittable_frames_ if
+      // this packet is a new transmission with no retransmittable frames.
+      ++consecutive_num_packets_with_no_retransmittable_frames_;
+    } else {
+      consecutive_num_packets_with_no_retransmittable_frames_ = 0;
+    }
+  }
   SendOrQueuePacket(serialized_packet);
 }
 
@@ -1749,6 +1766,21 @@
   num_packets_received_since_last_ack_sent_ = 0;
 
   packet_generator_.SetShouldSendAck(!no_stop_waiting_frames_);
+  if (consecutive_num_packets_with_no_retransmittable_frames_ <
+      kMaxConsecutiveNonRetransmittablePackets) {
+    return;
+  }
+  consecutive_num_packets_with_no_retransmittable_frames_ = 0;
+  if (packet_generator_.HasRetransmittableFrames()) {
+    // There is pending retransmittable frames.
+    return;
+  }
+
+  visitor_->OnAckNeedsRetransmittableFrame();
+  if (!packet_generator_.HasRetransmittableFrames()) {
+    // Visitor did not add a retransmittable frame, add a ping frame.
+    packet_generator_.AddControlFrame(QuicFrame(QuicPingFrame()));
+  }
 }
 
 void QuicConnection::OnRetransmissionTimeout() {
diff --git a/src/net/quic/core/quic_connection.h b/src/net/quic/core/quic_connection.h
index 0ff9094..ef664ab 100644
--- a/src/net/quic/core/quic_connection.h
+++ b/src/net/quic/core/quic_connection.h
@@ -141,6 +141,12 @@
   // been done.
   virtual void PostProcessAfterData() = 0;
 
+  // Called when the connection sends ack after
+  // kMaxConsecutiveNonRetransmittablePackets consecutive not retransmittable
+  // packets sent. To instigate an ack from peer, a retransmittable frame needs
+  // to be added.
+  virtual void OnAckNeedsRetransmittableFrame() = 0;
+
   // Called to ask if the visitor wants to schedule write resumption as it both
   // has pending data to write, and is able to write (e.g. based on flow control
   // limits).
@@ -1082,6 +1088,9 @@
   // Indicates not to send or process stop waiting frames.
   bool no_stop_waiting_frames_;
 
+  // Consecutive number of sent packets which have no retransmittable frames.
+  size_t consecutive_num_packets_with_no_retransmittable_frames_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicConnection);
 };
 
diff --git a/src/net/quic/core/quic_connection_test.cc b/src/net/quic/core/quic_connection_test.cc
index 76cf9e4..db1cde6 100644
--- a/src/net/quic/core/quic_connection_test.cc
+++ b/src/net/quic/core/quic_connection_test.cc
@@ -24,6 +24,8 @@
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_reference_counted.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/mock_random.h"
 #include "net/quic/test_tools/quic_config_peer.h"
@@ -35,14 +37,14 @@
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/simple_quic_framer.h"
 #include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/gmock_mutant.h"
 
 using std::string;
 using testing::AnyNumber;
 using testing::AtLeast;
 using testing::DoAll;
 using testing::InSequence;
+using testing::Invoke;
 using testing::InvokeWithoutArgs;
 using testing::NiceMock;
 using testing::Ref;
@@ -389,6 +391,10 @@
     return framer_.ping_frames();
   }
 
+  const std::vector<QuicWindowUpdateFrame>& window_update_frames() const {
+    return framer_.window_update_frames();
+  }
+
   const std::vector<QuicPaddingFrame>& padding_frames() const {
     return framer_.padding_frames();
   }
@@ -680,7 +686,7 @@
   return params;
 }
 
-class QuicConnectionTest : public ::testing::TestWithParam<TestParams> {
+class QuicConnectionTest : public QuicTestWithParam<TestParams> {
  protected:
   QuicConnectionTest()
       : connection_id_(42),
@@ -1055,8 +1061,6 @@
                                    InvertPerspective(perspective));
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
-
   QuicConnectionId connection_id_;
   QuicFramer framer_;
 
@@ -1499,6 +1503,9 @@
 }
 
 TEST_P(QuicConnectionTest, 20AcksCausesAckSend) {
+  if (connection_.version() > QUIC_VERSION_38) {
+    return;
+  }
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
 
   SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr);
@@ -1517,6 +1524,54 @@
   EXPECT_EQ(2u, writer_->packets_write_attempts());
 }
 
+TEST_P(QuicConnectionTest, AckNeedsRetransmittableFrames) {
+  if (connection_.version() <= QUIC_VERSION_38) {
+    return;
+  }
+
+  EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+  EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(99);
+
+  EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(19);
+  // Receives packets 1 - 39.
+  for (size_t i = 1; i <= 39; ++i) {
+    ProcessDataPacket(i);
+  }
+  // Receiving Packet 40 causes 20th ack to send. Session is informed and adds
+  // WINDOW_UPDATE.
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame())
+      .WillOnce(
+          Invoke(testing::CreateFunctor(&QuicConnection::SendWindowUpdate,
+                                        base::Unretained(&connection_), 0, 0)));
+  EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
+  EXPECT_EQ(0u, writer_->window_update_frames().size());
+  ProcessDataPacket(40);
+  EXPECT_EQ(1u, writer_->window_update_frames().size());
+
+  EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(9);
+  // Receives packets 41 - 59.
+  for (size_t i = 41; i <= 59; ++i) {
+    ProcessDataPacket(i);
+  }
+  // Send a packet containing stream frame.
+  SendStreamDataToPeer(1, "bar", 3, NO_FIN, nullptr);
+
+  // Session will not be informed until receiving another 20 packets.
+  EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(19);
+  for (size_t i = 60; i <= 98; ++i) {
+    ProcessDataPacket(i);
+    EXPECT_EQ(0u, writer_->window_update_frames().size());
+  }
+  // Session does not add a retransmittable frame.
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(1);
+  EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
+  EXPECT_EQ(0u, writer_->ping_frames().size());
+  ProcessDataPacket(99);
+  EXPECT_EQ(0u, writer_->window_update_frames().size());
+  // A ping frame will be added.
+  EXPECT_EQ(1u, writer_->ping_frames().size());
+}
+
 TEST_P(QuicConnectionTest, LeastUnackedLower) {
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
 
@@ -1571,6 +1626,7 @@
 
 TEST_P(QuicConnectionTest, TooManyReceivedPackets) {
   EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   // Miss 99 of every 100 packets for 5500 packets.
   for (QuicPacketNumber i = 1; i < kMaxTrackedPackets + 500; i += 100) {
     ProcessPacket(i);
@@ -3687,6 +3743,7 @@
 }
 
 TEST_P(QuicConnectionTest, SendDelayedAckDecimation) {
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION);
 
   const size_t kMinRttMs = 40;
@@ -3742,6 +3799,7 @@
 }
 
 TEST_P(QuicConnectionTest, SendDelayedAckDecimationEighthRtt) {
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   QuicConnectionPeer::SetAckMode(&connection_, QuicConnection::ACK_DECIMATION);
   QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125);
 
@@ -3798,6 +3856,7 @@
 }
 
 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReordering) {
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   QuicConnectionPeer::SetAckMode(
       &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING);
 
@@ -3862,6 +3921,7 @@
 }
 
 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithLargeReordering) {
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   QuicConnectionPeer::SetAckMode(
       &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING);
 
@@ -3943,6 +4003,7 @@
 }
 
 TEST_P(QuicConnectionTest, SendDelayedAckDecimationWithReorderingEighthRtt) {
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   QuicConnectionPeer::SetAckMode(
       &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING);
   QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125);
@@ -4009,6 +4070,7 @@
 
 TEST_P(QuicConnectionTest,
        SendDelayedAckDecimationWithLargeReorderingEighthRtt) {
+  EXPECT_CALL(visitor_, OnAckNeedsRetransmittableFrame()).Times(AnyNumber());
   QuicConnectionPeer::SetAckMode(
       &connection_, QuicConnection::ACK_DECIMATION_WITH_REORDERING);
   QuicConnectionPeer::SetAckDecimationDelay(&connection_, 0.125);
@@ -4342,7 +4404,6 @@
       GetPeerInMemoryConnectionId(connection_id_);
   header.public_header.reset_flag = true;
   header.public_header.version_flag = false;
-  header.rejected_packet_number = 10101;
   std::unique_ptr<QuicEncryptedPacket> packet(
       framer_.BuildPublicResetPacket(header));
   std::unique_ptr<QuicReceivedPacket> received(
diff --git a/src/net/quic/core/quic_crypto_client_stream_test.cc b/src/net/quic/core/quic_crypto_client_stream_test.cc
index d117457..495438e 100644
--- a/src/net/quic/core/quic_crypto_client_stream_test.cc
+++ b/src/net/quic/core/quic_crypto_client_stream_test.cc
@@ -13,13 +13,12 @@
 #include "net/quic/core/quic_server_id.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_stream_peer.h"
 #include "net/quic/test_tools/quic_stream_sequencer_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/simple_quic_framer.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -32,7 +31,7 @@
 const char kServerHostname[] = "test.example.com";
 const uint16_t kServerPort = 443;
 
-class QuicCryptoClientStreamTest : public ::testing::Test {
+class QuicCryptoClientStreamTest : public QuicTest {
  public:
   QuicCryptoClientStreamTest()
       : server_id_(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED),
@@ -352,7 +351,7 @@
   EXPECT_EQ(0u, stream()->crypto_negotiated_params().token_binding_key_param);
 }
 
-class QuicCryptoClientStreamStatelessTest : public ::testing::Test {
+class QuicCryptoClientStreamStatelessTest : public QuicTest {
  public:
   QuicCryptoClientStreamStatelessTest()
       : client_crypto_config_(crypto_test_utils::ProofVerifierForTesting()),
@@ -401,8 +400,6 @@
     FLAGS_quic_reloadable_flag_enable_quic_stateless_reject_support = true;
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
-
   MockQuicConnectionHelper helper_;
   MockAlarmFactory alarm_factory_;
 
diff --git a/src/net/quic/core/quic_crypto_server_stream_test.cc b/src/net/quic/core/quic_crypto_server_stream_test.cc
index 6bd69fb..1cedb36 100644
--- a/src/net/quic/core/quic_crypto_server_stream_test.cc
+++ b/src/net/quic/core/quic_crypto_server_stream_test.cc
@@ -24,13 +24,12 @@
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/failing_proof_source.h"
 #include "net/quic/test_tools/fake_proof_source.h"
 #include "net/quic/test_tools/quic_crypto_server_config_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 class QuicConnection;
@@ -57,7 +56,7 @@
 const char kServerHostname[] = "test.example.com";
 const uint16_t kServerPort = 443;
 
-class QuicCryptoServerStreamTest : public ::testing::TestWithParam<bool> {
+class QuicCryptoServerStreamTest : public QuicTestWithParam<bool> {
  public:
   QuicCryptoServerStreamTest()
       : QuicCryptoServerStreamTest(crypto_test_utils::ProofSourceForTesting()) {
@@ -155,8 +154,6 @@
   }
 
  protected:
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
-
   // Every connection gets its own MockQuicConnectionHelper and
   // MockAlarmFactory, tracked separately from the server and client state so
   // their lifetimes persist through the whole test.
diff --git a/src/net/quic/core/quic_crypto_stream_test.cc b/src/net/quic/core/quic_crypto_stream_test.cc
index 7457c0e..9850a8c 100644
--- a/src/net/quic/core/quic_crypto_stream_test.cc
+++ b/src/net/quic/core/quic_crypto_stream_test.cc
@@ -13,11 +13,10 @@
 #include "net/quic/core/crypto/crypto_handshake.h"
 #include "net/quic/core/crypto/crypto_protocol.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_stream_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -42,7 +41,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockQuicCryptoStream);
 };
 
-class QuicCryptoStreamTest : public ::testing::Test {
+class QuicCryptoStreamTest : public QuicTest {
  public:
   QuicCryptoStreamTest()
       : connection_(new MockQuicConnection(&helper_,
diff --git a/src/net/quic/core/quic_data_reader.cc b/src/net/quic/core/quic_data_reader.cc
index 77ea70a..c748efc 100644
--- a/src/net/quic/core/quic_data_reader.cc
+++ b/src/net/quic/core/quic_data_reader.cc
@@ -8,32 +8,69 @@
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_bug_tracker.h"
-#include "net/quic/platform/api/quic_endian.h"
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 
 namespace net {
 
-#define ENDPOINT \
-  (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
-
 QuicDataReader::QuicDataReader(const char* data,
                                const size_t len,
-                               Perspective perspective)
-    : data_(data), len_(len), pos_(0), perspective_(perspective) {
-  QUIC_DVLOG(1) << ENDPOINT << "QuicDataReader";
+                               Perspective perspective,
+                               Endianness endianness)
+    : data_(data),
+      len_(len),
+      pos_(0),
+      perspective_(perspective),
+      endianness_(endianness) {}
+
+bool QuicDataReader::ReadUInt8(uint8_t* result) {
+  return ReadBytes(result, sizeof(*result));
 }
 
 bool QuicDataReader::ReadUInt16(uint16_t* result) {
-  return ReadBytes(result, sizeof(*result));
+  if (!ReadBytes(result, sizeof(*result))) {
+    return false;
+  }
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    *result = QuicEndian::NetToHost16(*result);
+  }
+  return true;
 }
 
 bool QuicDataReader::ReadUInt32(uint32_t* result) {
-  return ReadBytes(result, sizeof(*result));
+  if (!ReadBytes(result, sizeof(*result))) {
+    return false;
+  }
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    *result = QuicEndian::NetToHost32(*result);
+  }
+  return true;
 }
 
 bool QuicDataReader::ReadUInt64(uint64_t* result) {
-  return ReadBytes(result, sizeof(*result));
+  if (!ReadBytes(result, sizeof(*result))) {
+    return false;
+  }
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    *result = QuicEndian::NetToHost64(*result);
+  }
+  return true;
+}
+
+bool QuicDataReader::ReadBytesToUInt64(size_t num_bytes, uint64_t* result) {
+  if (num_bytes > sizeof(*result)) {
+    return false;
+  }
+  if (endianness_ == HOST_BYTE_ORDER) {
+    return ReadBytes(result, num_bytes);
+  }
+
+  if (!ReadBytes(reinterpret_cast<char*>(result) + sizeof(*result) - num_bytes,
+                 num_bytes)) {
+    return false;
+  }
+  *result = QuicEndian::NetToHost64(*result);
+  return true;
 }
 
 bool QuicDataReader::ReadUFloat16(uint64_t* result) {
@@ -97,7 +134,7 @@
 }
 
 bool QuicDataReader::ReadConnectionId(uint64_t* connection_id) {
-  if (!ReadUInt64(connection_id)) {
+  if (!ReadBytes(connection_id, sizeof(*connection_id))) {
     return false;
   }
 
diff --git a/src/net/quic/core/quic_data_reader.h b/src/net/quic/core/quic_data_reader.h
index ffce87f..755f2fc 100644
--- a/src/net/quic/core/quic_data_reader.h
+++ b/src/net/quic/core/quic_data_reader.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "net/base/int128.h"
 #include "net/quic/core/quic_types.h"
+#include "net/quic/platform/api/quic_endian.h"
 #include "net/quic/platform/api/quic_export.h"
 #include "net/quic/platform/api/quic_string_piece.h"
 
@@ -33,26 +34,26 @@
 class QUIC_EXPORT_PRIVATE QuicDataReader {
  public:
   // Caller must provide an underlying buffer to work on.
-  QuicDataReader(const char* data, const size_t len, Perspective perspective);
+  QuicDataReader(const char* data,
+                 const size_t len,
+                 Perspective perspective,
+                 Endianness endianness);
 
   // Empty destructor.
   ~QuicDataReader() {}
 
-  // Reads a 16-bit unsigned integer into the given output parameter.
-  // Forwards the internal iterator on success.
-  // Returns true on success, false otherwise.
+  // Reads an 8/16/32/64-bit unsigned integer into the given output
+  // parameter. Forwards the internal iterator on success. Returns true on
+  // success, false otherwise.
+  bool ReadUInt8(uint8_t* result);
   bool ReadUInt16(uint16_t* result);
-
-  // Reads a 32-bit unsigned integer into the given output parameter.
-  // Forwards the internal iterator on success.
-  // Returns true on success, false otherwise.
   bool ReadUInt32(uint32_t* result);
-
-  // Reads a 64-bit unsigned integer into the given output parameter.
-  // Forwards the internal iterator on success.
-  // Returns true on success, false otherwise.
   bool ReadUInt64(uint64_t* result);
 
+  // Reads |num_bytes| bytes in the correct byte order into least significant
+  // bytes of |result|.
+  bool ReadBytesToUInt64(size_t num_bytes, uint64_t* result);
+
   // Reads a 16-bit unsigned float into the given output parameter.
   // Forwards the internal iterator on success.
   // Returns true on success, false otherwise.
@@ -124,6 +125,8 @@
   // DOES NOT forward the internal iterator.
   uint8_t PeekByte() const;
 
+  void set_endianness(Endianness endianness) { endianness_ = endianness; }
+
  private:
   // Returns true if the underlying buffer has enough room to read the given
   // amount of bytes.
@@ -146,6 +149,9 @@
   // representation must be consistent.
   Perspective perspective_;
 
+  // The endianness to read integers and floating numbers.
+  Endianness endianness_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicDataReader);
 };
 
diff --git a/src/net/quic/core/quic_data_writer.cc b/src/net/quic/core/quic_data_writer.cc
index 9b1c426..3290dba 100644
--- a/src/net/quic/core/quic_data_writer.cc
+++ b/src/net/quic/core/quic_data_writer.cc
@@ -8,21 +8,20 @@
 #include <limits>
 
 #include "net/quic/core/quic_utils.h"
-#include "net/quic/platform/api/quic_endian.h"
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 
 namespace net {
 
-#define ENDPOINT \
-  (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
-
 QuicDataWriter::QuicDataWriter(size_t size,
                                char* buffer,
-                               Perspective perspective)
-    : buffer_(buffer), capacity_(size), length_(0), perspective_(perspective) {
-  QUIC_DVLOG(1) << ENDPOINT << "QuicDataReader";
-}
+                               Perspective perspective,
+                               Endianness endianness)
+    : buffer_(buffer),
+      capacity_(size),
+      length_(0),
+      perspective_(perspective),
+      endianness_(endianness) {}
 
 QuicDataWriter::~QuicDataWriter() {}
 
@@ -35,23 +34,39 @@
 }
 
 bool QuicDataWriter::WriteUInt16(uint16_t value) {
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    value = QuicEndian::HostToNet16(value);
+  }
   return WriteBytes(&value, sizeof(value));
 }
 
 bool QuicDataWriter::WriteUInt32(uint32_t value) {
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    value = QuicEndian::HostToNet32(value);
+  }
   return WriteBytes(&value, sizeof(value));
 }
 
-bool QuicDataWriter::WriteUInt48(uint64_t value) {
-  uint16_t hi = static_cast<uint16_t>(value >> 32);
-  uint32_t lo = static_cast<uint32_t>(value);
-  return WriteUInt32(lo) && WriteUInt16(hi);
-}
-
 bool QuicDataWriter::WriteUInt64(uint64_t value) {
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    value = QuicEndian::HostToNet64(value);
+  }
   return WriteBytes(&value, sizeof(value));
 }
 
+bool QuicDataWriter::WriteBytesToUInt64(size_t num_bytes, uint64_t value) {
+  if (num_bytes > sizeof(value)) {
+    return false;
+  }
+  if (endianness_ == HOST_BYTE_ORDER) {
+    return WriteBytes(&value, num_bytes);
+  }
+
+  value = QuicEndian::HostToNet64(value);
+  return WriteBytes(reinterpret_cast<char*>(&value) + sizeof(value) - num_bytes,
+                    num_bytes);
+}
+
 bool QuicDataWriter::WriteUFloat16(uint64_t value) {
   uint16_t result;
   if (value < (UINT64_C(1) << kUFloat16MantissaEffectiveBits)) {
@@ -88,6 +103,9 @@
     result = static_cast<uint16_t>(value + (exponent << kUFloat16MantissaBits));
   }
 
+  if (endianness_ == NETWORK_BYTE_ORDER) {
+    result = QuicEndian::HostToNet16(result);
+  }
   return WriteBytes(&result, sizeof(result));
 }
 
@@ -159,7 +177,7 @@
     connection_id = QuicEndian::HostToNet64(connection_id);
   }
 
-  return WriteUInt64(connection_id);
+  return WriteBytes(&connection_id, sizeof(connection_id));
 }
 
 bool QuicDataWriter::WriteTag(uint32_t tag) {
diff --git a/src/net/quic/core/quic_data_writer.h b/src/net/quic/core/quic_data_writer.h
index ca4b4a2..8c0f400 100644
--- a/src/net/quic/core/quic_data_writer.h
+++ b/src/net/quic/core/quic_data_writer.h
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "net/base/int128.h"
 #include "net/quic/core/quic_packets.h"
+#include "net/quic/platform/api/quic_endian.h"
 #include "net/quic/platform/api/quic_export.h"
 #include "net/quic/platform/api/quic_string_piece.h"
 
@@ -25,7 +26,10 @@
 class QUIC_EXPORT_PRIVATE QuicDataWriter {
  public:
   // Creates a QuicDataWriter where |buffer| is not owned.
-  QuicDataWriter(size_t size, char* buffer, Perspective perspective);
+  QuicDataWriter(size_t size,
+                 char* buffer,
+                 Perspective perspective,
+                 Endianness endianness);
 
   ~QuicDataWriter();
 
@@ -36,13 +40,18 @@
   char* data();
 
   // Methods for adding to the payload.  These values are appended to the end
-  // of the QuicDataWriter payload. Note - binary integers are written in
-  // host byte order (little endian) not network byte order (big endian).
+  // of the QuicDataWriter payload.
+
+  // Writes 8/16/32/64-bit unsigned integers.
   bool WriteUInt8(uint8_t value);
   bool WriteUInt16(uint16_t value);
   bool WriteUInt32(uint32_t value);
-  bool WriteUInt48(uint64_t value);
   bool WriteUInt64(uint64_t value);
+
+  // Writes least significant |num_bytes| of a 64-bit unsigned integer in the
+  // correct byte order.
+  bool WriteBytesToUInt64(size_t num_bytes, uint64_t value);
+
   // Write unsigned floating point corresponding to the value. Large values are
   // clamped to the maximum representable (kUFloat16MaxValue). Values that can
   // not be represented directly are rounded down.
@@ -84,6 +93,9 @@
   // representation must be consistent.
   Perspective perspective_;
 
+  // The endianness to write integers and floating numbers.
+  Endianness endianness_;
+
   DISALLOW_COPY_AND_ASSIGN(QuicDataWriter);
 };
 
diff --git a/src/net/quic/core/quic_data_writer_test.cc b/src/net/quic/core/quic_data_writer_test.cc
index 3e32ef9..e44a12b 100644
--- a/src/net/quic/core/quic_data_writer_test.cc
+++ b/src/net/quic/core/quic_data_writer_test.cc
@@ -9,14 +9,41 @@
 #include "net/quic/core/quic_data_reader.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 namespace {
 
-class QuicDataWriterTest : public ::testing::TestWithParam<Perspective> {};
+char* AsChars(unsigned char* data) {
+  return reinterpret_cast<char*>(data);
+}
+
+struct TestParams {
+  TestParams(Perspective perspective, Endianness endianness)
+      : perspective(perspective), endianness(endianness) {}
+
+  Perspective perspective;
+  Endianness endianness;
+};
+
+std::vector<TestParams> GetTestParams() {
+  std::vector<TestParams> params;
+  for (Perspective perspective :
+       {Perspective::IS_CLIENT, Perspective::IS_SERVER}) {
+    for (Endianness endianness : {NETWORK_BYTE_ORDER, HOST_BYTE_ORDER}) {
+      params.push_back(TestParams(perspective, endianness));
+    }
+  }
+  return params;
+}
+
+class QuicDataWriterTest : public QuicTestWithParam<TestParams> {};
+
+INSTANTIATE_TEST_CASE_P(QuicDataWriterTests,
+                        QuicDataWriterTest,
+                        ::testing::ValuesIn(GetTestParams()));
 
 TEST_P(QuicDataWriterTest, SanityCheckUFloat16Consts) {
   // Check the arithmetic on the constants - otherwise the values below make
@@ -99,10 +126,14 @@
 
   for (int i = 0; i < num_test_cases; ++i) {
     char buffer[2];
-    QuicDataWriter writer(2, buffer, GetParam());
+    QuicDataWriter writer(2, buffer, GetParam().perspective,
+                          GetParam().endianness);
     EXPECT_TRUE(writer.WriteUFloat16(test_cases[i].decoded));
-    EXPECT_EQ(test_cases[i].encoded,
-              *reinterpret_cast<uint16_t*>(writer.data()));
+    uint16_t result = *reinterpret_cast<uint16_t*>(writer.data());
+    if (GetParam().endianness == NETWORK_BYTE_ORDER) {
+      result = QuicEndian::HostToNet16(result);
+    }
+    EXPECT_EQ(test_cases[i].encoded, result);
   }
 }
 
@@ -159,8 +190,12 @@
   int num_test_cases = sizeof(test_cases) / sizeof(test_cases[0]);
 
   for (int i = 0; i < num_test_cases; ++i) {
-    QuicDataReader reader(reinterpret_cast<char*>(&test_cases[i].encoded), 2,
-                          GetParam());
+    uint16_t encoded_ufloat = test_cases[i].encoded;
+    if (GetParam().endianness == NETWORK_BYTE_ORDER) {
+      encoded_ufloat = QuicEndian::HostToNet16(encoded_ufloat);
+    }
+    QuicDataReader reader(reinterpret_cast<char*>(&encoded_ufloat), 2,
+                          GetParam().perspective, GetParam().endianness);
     uint64_t value;
     EXPECT_TRUE(reader.ReadUFloat16(&value));
     EXPECT_EQ(test_cases[i].decoded, value);
@@ -172,33 +207,48 @@
   uint64_t previous_value = 0;
   for (uint16_t i = 1; i < 0xFFFF; ++i) {
     // Read the two bytes.
-    QuicDataReader reader(reinterpret_cast<char*>(&i), 2, GetParam());
+    uint16_t read_number = i;
+    if (GetParam().endianness == NETWORK_BYTE_ORDER) {
+      read_number = QuicEndian::HostToNet16(read_number);
+    }
+    QuicDataReader reader(reinterpret_cast<char*>(&read_number), 2,
+                          GetParam().perspective, GetParam().endianness);
     uint64_t value;
     // All values must be decodable.
     EXPECT_TRUE(reader.ReadUFloat16(&value));
     // Check that small numbers represent themselves
-    if (i < 4097)
+    if (i < 4097) {
       EXPECT_EQ(i, value);
+    }
     // Check there's monotonic growth.
     EXPECT_LT(previous_value, value);
     // Check that precision is within 0.5% away from the denormals.
-    if (i > 2000)
+    if (i > 2000) {
       EXPECT_GT(previous_value * 1005, value * 1000);
+    }
     // Check we're always within the promised range.
     EXPECT_LT(value, UINT64_C(0x3FFC0000000));
     previous_value = value;
     char buffer[6];
-    QuicDataWriter writer(6, buffer, GetParam());
+    QuicDataWriter writer(6, buffer, GetParam().perspective,
+                          GetParam().endianness);
     EXPECT_TRUE(writer.WriteUFloat16(value - 1));
     EXPECT_TRUE(writer.WriteUFloat16(value));
     EXPECT_TRUE(writer.WriteUFloat16(value + 1));
     // Check minimal decoding (previous decoding has previous encoding).
-    EXPECT_EQ(i - 1, *reinterpret_cast<uint16_t*>(writer.data()));
+    uint16_t encoded1 = *reinterpret_cast<uint16_t*>(writer.data());
+    uint16_t encoded2 = *reinterpret_cast<uint16_t*>(writer.data() + 2);
+    uint16_t encoded3 = *reinterpret_cast<uint16_t*>(writer.data() + 4);
+    if (GetParam().endianness == NETWORK_BYTE_ORDER) {
+      encoded1 = QuicEndian::NetToHost16(encoded1);
+      encoded2 = QuicEndian::NetToHost16(encoded2);
+      encoded3 = QuicEndian::NetToHost16(encoded3);
+    }
+    EXPECT_EQ(i - 1, encoded1);
     // Check roundtrip.
-    EXPECT_EQ(i, *reinterpret_cast<uint16_t*>(writer.data() + 2));
+    EXPECT_EQ(i, encoded2);
     // Check next decoding.
-    EXPECT_EQ(i < 4096 ? i + 1 : i,
-              *reinterpret_cast<uint16_t*>(writer.data() + 4));
+    EXPECT_EQ(i < 4096 ? i + 1 : i, encoded3);
   }
 }
 
@@ -212,16 +262,19 @@
   };
   const int kBufferLength = sizeof(connection_id);
   char buffer[kBufferLength];
-  QuicDataWriter writer(kBufferLength, buffer, GetParam());
+  QuicDataWriter writer(kBufferLength, buffer, GetParam().perspective,
+                        GetParam().endianness);
   writer.WriteConnectionId(connection_id);
   test::CompareCharArraysWithHexError(
       "connection_id", buffer, kBufferLength,
-      QuicUtils::IsConnectionIdWireFormatBigEndian(GetParam()) ? big_endian
-                                                               : little_endian,
+      QuicUtils::IsConnectionIdWireFormatBigEndian(GetParam().perspective)
+          ? big_endian
+          : little_endian,
       kBufferLength);
 
   uint64_t read_connection_id;
-  QuicDataReader reader(buffer, kBufferLength, GetParam());
+  QuicDataReader reader(buffer, kBufferLength, GetParam().perspective,
+                        GetParam().endianness);
   reader.ReadConnectionId(&read_connection_id);
   EXPECT_EQ(connection_id, read_connection_id);
 }
@@ -232,17 +285,315 @@
   };
   const int kBufferLength = sizeof(QuicTag);
   char buffer[kBufferLength];
-  QuicDataWriter writer(kBufferLength, buffer, GetParam());
+  QuicDataWriter writer(kBufferLength, buffer, GetParam().perspective,
+                        GetParam().endianness);
   writer.WriteTag(kCHLO);
   test::CompareCharArraysWithHexError("CHLO", buffer, kBufferLength, CHLO,
                                       kBufferLength);
 
   QuicTag read_chlo;
-  QuicDataReader reader(buffer, kBufferLength, GetParam());
+  QuicDataReader reader(buffer, kBufferLength, GetParam().perspective,
+                        GetParam().endianness);
   reader.ReadTag(&read_chlo);
   EXPECT_EQ(kCHLO, read_chlo);
 }
 
+TEST_P(QuicDataWriterTest, Write16BitUnsignedIntegers) {
+  char little_endian16[] = {0x22, 0x11};
+  char big_endian16[] = {0x11, 0x22};
+  char buffer16[2];
+  {
+    uint16_t in_memory16 = 0x1122;
+    QuicDataWriter writer(2, buffer16, GetParam().perspective,
+                          GetParam().endianness);
+    writer.WriteUInt16(in_memory16);
+    test::CompareCharArraysWithHexError(
+        "uint16_t", buffer16, 2,
+        GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian16
+                                                    : little_endian16,
+        2);
+
+    uint16_t read_number16;
+    QuicDataReader reader(buffer16, 2, GetParam().perspective,
+                          GetParam().endianness);
+    reader.ReadUInt16(&read_number16);
+    EXPECT_EQ(in_memory16, read_number16);
+  }
+
+  {
+    uint64_t in_memory16 = 0x0000000000001122;
+    QuicDataWriter writer(2, buffer16, GetParam().perspective,
+                          GetParam().endianness);
+    writer.WriteBytesToUInt64(2, in_memory16);
+    test::CompareCharArraysWithHexError(
+        "uint16_t", buffer16, 2,
+        GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian16
+                                                    : little_endian16,
+        2);
+
+    uint64_t read_number16 = 0u;
+    QuicDataReader reader(buffer16, 2, GetParam().perspective,
+                          GetParam().endianness);
+    reader.ReadBytesToUInt64(2, &read_number16);
+    EXPECT_EQ(in_memory16, read_number16);
+  }
+}
+
+TEST_P(QuicDataWriterTest, Write24BitUnsignedIntegers) {
+  char little_endian24[] = {0x33, 0x22, 0x11};
+  char big_endian24[] = {0x11, 0x22, 0x33};
+  char buffer24[3];
+  uint64_t in_memory24 = 0x0000000000112233;
+  QuicDataWriter writer(3, buffer24, GetParam().perspective,
+                        GetParam().endianness);
+  writer.WriteBytesToUInt64(3, in_memory24);
+  test::CompareCharArraysWithHexError(
+      "uint24", buffer24, 3,
+      GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian24
+                                                  : little_endian24,
+      3);
+
+  uint64_t read_number24 = 0u;
+  QuicDataReader reader(buffer24, 3, GetParam().perspective,
+                        GetParam().endianness);
+  reader.ReadBytesToUInt64(3, &read_number24);
+  EXPECT_EQ(in_memory24, read_number24);
+}
+
+TEST_P(QuicDataWriterTest, Write32BitUnsignedIntegers) {
+  char little_endian32[] = {0x44, 0x33, 0x22, 0x11};
+  char big_endian32[] = {0x11, 0x22, 0x33, 0x44};
+  char buffer32[4];
+  {
+    uint32_t in_memory32 = 0x11223344;
+    QuicDataWriter writer(4, buffer32, GetParam().perspective,
+                          GetParam().endianness);
+    writer.WriteUInt32(in_memory32);
+    test::CompareCharArraysWithHexError(
+        "uint32_t", buffer32, 4,
+        GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian32
+                                                    : little_endian32,
+        4);
+
+    uint32_t read_number32;
+    QuicDataReader reader(buffer32, 4, GetParam().perspective,
+                          GetParam().endianness);
+    reader.ReadUInt32(&read_number32);
+    EXPECT_EQ(in_memory32, read_number32);
+  }
+
+  {
+    uint64_t in_memory32 = 0x11223344;
+    QuicDataWriter writer(4, buffer32, GetParam().perspective,
+                          GetParam().endianness);
+    writer.WriteBytesToUInt64(4, in_memory32);
+    test::CompareCharArraysWithHexError(
+        "uint32_t", buffer32, 4,
+        GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian32
+                                                    : little_endian32,
+        4);
+
+    uint64_t read_number32 = 0u;
+    QuicDataReader reader(buffer32, 4, GetParam().perspective,
+                          GetParam().endianness);
+    reader.ReadBytesToUInt64(4, &read_number32);
+    EXPECT_EQ(in_memory32, read_number32);
+  }
+}
+
+TEST_P(QuicDataWriterTest, Write40BitUnsignedIntegers) {
+  uint64_t in_memory40 = 0x0000001122334455;
+  char little_endian40[] = {0x55, 0x44, 0x33, 0x22, 0x11};
+  char big_endian40[] = {0x11, 0x22, 0x33, 0x44, 0x55};
+  char buffer40[5];
+  QuicDataWriter writer(5, buffer40, GetParam().perspective,
+                        GetParam().endianness);
+  writer.WriteBytesToUInt64(5, in_memory40);
+  test::CompareCharArraysWithHexError(
+      "uint40", buffer40, 5,
+      GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian40
+                                                  : little_endian40,
+      5);
+
+  uint64_t read_number40 = 0u;
+  QuicDataReader reader(buffer40, 5, GetParam().perspective,
+                        GetParam().endianness);
+  reader.ReadBytesToUInt64(5, &read_number40);
+  EXPECT_EQ(in_memory40, read_number40);
+}
+
+TEST_P(QuicDataWriterTest, Write48BitUnsignedIntegers) {
+  uint64_t in_memory48 = 0x0000112233445566;
+  char little_endian48[] = {0x66, 0x55, 0x44, 0x33, 0x22, 0x11};
+  char big_endian48[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
+  char buffer48[6];
+  QuicDataWriter writer(6, buffer48, GetParam().perspective,
+                        GetParam().endianness);
+  writer.WriteBytesToUInt64(6, in_memory48);
+  test::CompareCharArraysWithHexError(
+      "uint48", buffer48, 6,
+      GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian48
+                                                  : little_endian48,
+      6);
+
+  uint64_t read_number48 = 0u;
+  QuicDataReader reader(buffer48, 6, GetParam().perspective,
+                        GetParam().endianness);
+  reader.ReadBytesToUInt64(6., &read_number48);
+  EXPECT_EQ(in_memory48, read_number48);
+}
+
+TEST_P(QuicDataWriterTest, Write56BitUnsignedIntegers) {
+  uint64_t in_memory56 = 0x0011223344556677;
+  char little_endian56[] = {0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11};
+  char big_endian56[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77};
+  char buffer56[7];
+  QuicDataWriter writer(7, buffer56, GetParam().perspective,
+                        GetParam().endianness);
+  writer.WriteBytesToUInt64(7, in_memory56);
+  test::CompareCharArraysWithHexError(
+      "uint56", buffer56, 7,
+      GetParam().endianness == NETWORK_BYTE_ORDER ? big_endian56
+                                                  : little_endian56,
+      7);
+
+  uint64_t read_number56 = 0u;
+  QuicDataReader reader(buffer56, 7, GetParam().perspective,
+                        GetParam().endianness);
+  reader.ReadBytesToUInt64(7, &read_number56);
+  EXPECT_EQ(in_memory56, read_number56);
+}
+
+TEST_P(QuicDataWriterTest, Write64BitUnsignedIntegers) {
+  uint64_t in_memory64 = 0x1122334455667788;
+  unsigned char little_endian64[] = {0x88, 0x77, 0x66, 0x55,
+                                     0x44, 0x33, 0x22, 0x11};
+  unsigned char big_endian64[] = {0x11, 0x22, 0x33, 0x44,
+                                  0x55, 0x66, 0x77, 0x88};
+  char buffer64[8];
+  QuicDataWriter writer(8, buffer64, GetParam().perspective,
+                        GetParam().endianness);
+  writer.WriteBytesToUInt64(8, in_memory64);
+  test::CompareCharArraysWithHexError(
+      "uint64_t", buffer64, 8,
+      GetParam().endianness == NETWORK_BYTE_ORDER ? AsChars(big_endian64)
+                                                  : AsChars(little_endian64),
+      8);
+
+  uint64_t read_number64 = 0u;
+  QuicDataReader reader(buffer64, 8, GetParam().perspective,
+                        GetParam().endianness);
+  reader.ReadBytesToUInt64(8, &read_number64);
+  EXPECT_EQ(in_memory64, read_number64);
+
+  QuicDataWriter writer2(8, buffer64, GetParam().perspective,
+                         GetParam().endianness);
+  writer2.WriteUInt64(in_memory64);
+  test::CompareCharArraysWithHexError(
+      "uint64_t", buffer64, 8,
+      GetParam().endianness == NETWORK_BYTE_ORDER ? AsChars(big_endian64)
+                                                  : AsChars(little_endian64),
+      8);
+  read_number64 = 0u;
+  QuicDataReader reader2(buffer64, 8, GetParam().perspective,
+                         GetParam().endianness);
+  reader2.ReadUInt64(&read_number64);
+  EXPECT_EQ(in_memory64, read_number64);
+}
+
+TEST_P(QuicDataWriterTest, WriteIntegers) {
+  char buf[43];
+  uint8_t i8 = 0x01;
+  uint16_t i16 = 0x0123;
+  uint32_t i32 = 0x01234567;
+  uint64_t i64 = 0x0123456789ABCDEF;
+  QuicDataWriter writer(46, buf, GetParam().perspective, GetParam().endianness);
+  for (size_t i = 0; i < 10; ++i) {
+    switch (i) {
+      case 0u:
+        EXPECT_TRUE(writer.WriteBytesToUInt64(i, i64));
+        break;
+      case 1u:
+        EXPECT_TRUE(writer.WriteUInt8(i8));
+        EXPECT_TRUE(writer.WriteBytesToUInt64(i, i64));
+        break;
+      case 2u:
+        EXPECT_TRUE(writer.WriteUInt16(i16));
+        EXPECT_TRUE(writer.WriteBytesToUInt64(i, i64));
+        break;
+      case 3u:
+        EXPECT_TRUE(writer.WriteBytesToUInt64(i, i64));
+        break;
+      case 4u:
+        EXPECT_TRUE(writer.WriteUInt32(i32));
+        EXPECT_TRUE(writer.WriteBytesToUInt64(i, i64));
+        break;
+      case 5u:
+      case 6u:
+      case 7u:
+      case 8u:
+        EXPECT_TRUE(writer.WriteBytesToUInt64(i, i64));
+        break;
+      default:
+        EXPECT_FALSE(writer.WriteBytesToUInt64(i, i64));
+    }
+  }
+
+  QuicDataReader reader(buf, 46, GetParam().perspective, GetParam().endianness);
+  for (size_t i = 0; i < 10; ++i) {
+    uint8_t read8;
+    uint16_t read16;
+    uint32_t read32;
+    uint64_t read64 = 0u;
+    switch (i) {
+      case 0u:
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(0u, read64);
+        break;
+      case 1u:
+        EXPECT_TRUE(reader.ReadUInt8(&read8));
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(i8, read8);
+        EXPECT_EQ(0xEFu, read64);
+        break;
+      case 2u:
+        EXPECT_TRUE(reader.ReadUInt16(&read16));
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(i16, read16);
+        EXPECT_EQ(0xCDEFu, read64);
+        break;
+      case 3u:
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(0xABCDEFu, read64);
+        break;
+      case 4u:
+        EXPECT_TRUE(reader.ReadUInt32(&read32));
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(i32, read32);
+        EXPECT_EQ(0x89ABCDEFu, read64);
+        break;
+      case 5u:
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(0x6789ABCDEFu, read64);
+        break;
+      case 6u:
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(0x456789ABCDEFu, read64);
+        break;
+      case 7u:
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(0x23456789ABCDEFu, read64);
+        break;
+      case 8u:
+        EXPECT_TRUE(reader.ReadBytesToUInt64(i, &read64));
+        EXPECT_EQ(0x0123456789ABCDEFu, read64);
+        break;
+      default:
+        EXPECT_FALSE(reader.ReadBytesToUInt64(i, &read64));
+    }
+  }
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace net
diff --git a/src/net/quic/core/quic_error_codes_test.cc b/src/net/quic/core/quic_error_codes_test.cc
index 0694fef..acb4084 100644
--- a/src/net/quic/core/quic_error_codes_test.cc
+++ b/src/net/quic/core/quic_error_codes_test.cc
@@ -4,19 +4,20 @@
 
 #include "net/quic/core/quic_error_codes.h"
 
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 namespace {
 
-TEST(QuicUtilsTest, QuicRstStreamErrorCodeToString) {
+class QuicErrorCodesTest : public QuicTest {};
+
+TEST_F(QuicErrorCodesTest, QuicRstStreamErrorCodeToString) {
   EXPECT_STREQ("QUIC_BAD_APPLICATION_PAYLOAD",
                QuicRstStreamErrorCodeToString(QUIC_BAD_APPLICATION_PAYLOAD));
 }
 
-TEST(QuicUtilsTest, QuicErrorCodeToString) {
+TEST_F(QuicErrorCodesTest, QuicErrorCodeToString) {
   EXPECT_STREQ("QUIC_NO_ERROR", QuicErrorCodeToString(QUIC_NO_ERROR));
 }
 
diff --git a/src/net/quic/core/quic_flags_list.h b/src/net/quic/core/quic_flags_list.h
index d1bc575..59f5072 100644
--- a/src/net/quic/core/quic_flags_list.h
+++ b/src/net/quic/core/quic_flags_list.h
@@ -86,12 +86,6 @@
           FLAGS_quic_reloadable_flag_quic_create_session_after_insertion,
           false)
 
-// If true, rejected packet number is removed from public reset packet.
-QUIC_FLAG(
-    bool,
-    FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset,
-    true)
-
 // If true, v33 QUIC client uses 1 bit to specify 8-byte connection id in
 // public flag.
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2, false)
@@ -143,7 +137,7 @@
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_allow_one_address_change, false)
 
 // If true, multipath bit is not used in public flag.
-QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_remove_multipath_bit, false)
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_remove_multipath_bit, true)
 
 // Allow QUIC's flow control autotuning to increase the window as
 // quickly for the first adjustment as in subsequent ones.
@@ -174,7 +168,7 @@
 QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_38, true)
 
 // If true, enable QUIC v39.
-QUIC_FLAG(bool, FLAGS_quic_enable_version_39, false)
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_39, false)
 
 // If true, on client side, 8-byte connection ID in public header is read and
 // written in big endian.
@@ -217,3 +211,12 @@
 
 // Threshold multiplier below which delivery is considered slow.
 QUIC_FLAG(double, FLAGS_quic_bbr_slow_delivery_threshold_multiplier, 0.5f)
+
+// If true, update state if trailing headers with a :final-offset key are
+// received for a previously closed QUIC stream.
+QUIC_FLAG(bool,
+          FLAGS_quic_reloadable_flag_quic_final_offset_from_trailers,
+          false)
+
+// Fix the algorithm used by packet conservation.
+QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_fix_conservation, false)
diff --git a/src/net/quic/core/quic_flow_controller.cc b/src/net/quic/core/quic_flow_controller.cc
index e95027e..bf36c7a 100644
--- a/src/net/quic/core/quic_flow_controller.cc
+++ b/src/net/quic/core/quic_flow_controller.cc
@@ -202,10 +202,11 @@
   }
 
   MaybeIncreaseMaxWindowSize();
-  SendWindowUpdate(available_window);
+  UpdateReceiveWindowOffsetAndSendWindowUpdate(available_window);
 }
 
-void QuicFlowController::SendWindowUpdate(QuicStreamOffset available_window) {
+void QuicFlowController::UpdateReceiveWindowOffsetAndSendWindowUpdate(
+    QuicStreamOffset available_window) {
   // Update our receive window.
   receive_window_offset_ += (receive_window_size_ - available_window);
 
@@ -216,8 +217,7 @@
                 << ", and receive window size: " << receive_window_size_
                 << ". New receive window offset is: " << receive_window_offset_;
 
-  // Inform the peer of our new receive window.
-  connection_->SendWindowUpdate(id_, receive_window_offset_);
+  SendWindowUpdate();
 }
 
 void QuicFlowController::MaybeSendBlocked() {
@@ -265,7 +265,7 @@
 
   QuicStreamOffset available_window = receive_window_offset_ - bytes_consumed_;
   IncreaseWindowSize();
-  SendWindowUpdate(available_window);
+  UpdateReceiveWindowOffsetAndSendWindowUpdate(available_window);
 }
 
 bool QuicFlowController::IsBlocked() const {
@@ -292,4 +292,8 @@
   receive_window_offset_ = size;
 }
 
+void QuicFlowController::SendWindowUpdate() {
+  connection_->SendWindowUpdate(id_, receive_window_offset_);
+}
+
 }  // namespace net
diff --git a/src/net/quic/core/quic_flow_controller.h b/src/net/quic/core/quic_flow_controller.h
index 97c6fda..f183741 100644
--- a/src/net/quic/core/quic_flow_controller.h
+++ b/src/net/quic/core/quic_flow_controller.h
@@ -83,6 +83,9 @@
   // Returns true if flow control receive limits have been violated by the peer.
   bool FlowControlViolation();
 
+  // Inform the peer of new receive window.
+  void SendWindowUpdate();
+
   QuicByteCount bytes_consumed() const { return bytes_consumed_; }
 
   QuicStreamOffset highest_received_byte_offset() const {
@@ -113,7 +116,8 @@
   void MaybeIncreaseMaxWindowSize();
 
   // Updates the current offset and sends a window update frame.
-  void SendWindowUpdate(QuicStreamOffset available_window);
+  void UpdateReceiveWindowOffsetAndSendWindowUpdate(
+      QuicStreamOffset available_window);
 
   // Double the window size as long as we haven't hit the max window size.
   void IncreaseWindowSize();
diff --git a/src/net/quic/core/quic_flow_controller_test.cc b/src/net/quic/core/quic_flow_controller_test.cc
index ee80f75..95019d8 100644
--- a/src/net/quic/core/quic_flow_controller_test.cc
+++ b/src/net/quic/core/quic_flow_controller_test.cc
@@ -7,11 +7,11 @@
 #include <memory>
 
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
 #include "net/quic/test_tools/quic_flow_controller_peer.h"
 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using testing::_;
 
@@ -32,7 +32,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockFlowController);
 };
 
-class QuicFlowControllerTest : public ::testing::Test {
+class QuicFlowControllerTest : public QuicTest {
  public:
   QuicFlowControllerTest()
       : stream_id_(1234),
@@ -57,7 +57,6 @@
   MockAlarmFactory alarm_factory_;
   MockQuicConnection connection_;
   MockFlowController session_flow_controller_;
-  QuicFlagSaver flag_saver_;
 };
 
 TEST_F(QuicFlowControllerTest, SendingBytes) {
diff --git a/src/net/quic/core/quic_framer.cc b/src/net/quic/core/quic_framer.cc
index 0fa3442..7404ebb 100644
--- a/src/net/quic/core/quic_framer.cc
+++ b/src/net/quic/core/quic_framer.cc
@@ -36,12 +36,6 @@
 #define ENDPOINT \
   (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
 
-// Mask to select the lowest 48 bits of a packet number.
-const QuicPacketNumber k6ByteSequenceNumberMask = UINT64_C(0x0000FFFFFFFFFFFF);
-const QuicPacketNumber k4ByteSequenceNumberMask = UINT64_C(0x00000000FFFFFFFF);
-const QuicPacketNumber k2ByteSequenceNumberMask = UINT64_C(0x000000000000FFFF);
-const QuicPacketNumber k1ByteSequenceNumberMask = UINT64_C(0x00000000000000FF);
-
 // Number of bits the packet number length bits are shifted from the right
 // edge of the public header.
 const uint8_t kPublicHeaderSequenceNumberShift = 4;
@@ -319,7 +313,7 @@
                                    const QuicFrames& frames,
                                    char* buffer,
                                    size_t packet_length) {
-  QuicDataWriter writer(packet_length, buffer, perspective_);
+  QuicDataWriter writer(packet_length, buffer, perspective_, endianness());
   if (!AppendPacketHeader(header, &writer)) {
     QUIC_BUG << "AppendPacketHeader failed";
     return 0;
@@ -417,9 +411,6 @@
   CryptoHandshakeMessage reset;
   reset.set_tag(kPRST);
   reset.SetValue(kRNON, packet.nonce_proof);
-  if (!FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) {
-    reset.SetValue(kRSEQ, packet.rejected_packet_number);
-  }
   if (packet.client_address.host().address_family() !=
       IpAddressFamily::IP_UNSPEC) {
     // packet.client_address is non-empty.
@@ -436,7 +427,10 @@
   size_t len =
       kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + reset_serialized.length();
   std::unique_ptr<char[]> buffer(new char[len]);
-  QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER);
+  // Endianness is not a concern here, as writer is not going to write integers
+  // or floating numbers.
+  QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER,
+                        NETWORK_BYTE_ORDER);
 
   uint8_t flags = static_cast<uint8_t>(PACKET_PUBLIC_FLAGS_RST |
                                        PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
@@ -466,7 +460,10 @@
   DCHECK(!versions.empty());
   size_t len = GetVersionNegotiationPacketSize(versions.size());
   std::unique_ptr<char[]> buffer(new char[len]);
-  QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER);
+  // Endianness is not a concern here, version negotiation packet does not have
+  // integers or floating numbers.
+  QuicDataWriter writer(len, buffer.get(), Perspective::IS_SERVER,
+                        NETWORK_BYTE_ORDER);
 
   uint8_t flags = static_cast<uint8_t>(
       PACKET_PUBLIC_FLAGS_VERSION | PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID |
@@ -490,7 +487,8 @@
 }
 
 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) {
-  QuicDataReader reader(packet.data(), packet.length(), perspective_);
+  QuicDataReader reader(packet.data(), packet.length(), perspective_,
+                        endianness());
 
   visitor_->OnPacket();
 
@@ -516,6 +514,9 @@
     }
   }
 
+  // framer's version may change, reset reader's endianness.
+  reader.set_endianness(endianness());
+
   bool rv;
   if (perspective_ == Perspective::IS_CLIENT && public_header.version_flag) {
     rv = ProcessVersionNegotiationPacket(&reader, &public_header);
@@ -578,7 +579,8 @@
     return RaiseError(QUIC_DECRYPTION_FAILURE);
   }
 
-  QuicDataReader reader(decrypted_buffer, decrypted_length, perspective_);
+  QuicDataReader reader(decrypted_buffer, decrypted_length, perspective_,
+                        endianness());
 
   // Set the last packet number after we have decrypted the packet
   // so we are confident is not attacker controlled.
@@ -658,7 +660,7 @@
   }
 
   public_flags |=
-      GetSequenceNumberFlags(header.public_header.packet_number_length)
+      GetPacketNumberFlags(header.public_header.packet_number_length)
       << kPublicHeaderSequenceNumberShift;
 
   if (header.public_header.nonce != nullptr) {
@@ -703,8 +705,8 @@
     return false;
   }
 
-  if (!AppendPacketSequenceNumber(header.public_header.packet_number_length,
-                                  header.packet_number, writer)) {
+  if (!AppendPacketNumber(header.public_header.packet_number_length,
+                          header.packet_number, writer)) {
     return false;
   }
 
@@ -860,7 +862,7 @@
 }
 
 // static
-QuicPacketNumberLength QuicFramer::GetMinSequenceNumberLength(
+QuicPacketNumberLength QuicFramer::GetMinPacketNumberLength(
     QuicPacketNumber packet_number) {
   if (packet_number < 1 << (PACKET_1BYTE_PACKET_NUMBER * 8)) {
     return PACKET_1BYTE_PACKET_NUMBER;
@@ -874,7 +876,7 @@
 }
 
 // static
-uint8_t QuicFramer::GetSequenceNumberFlags(
+uint8_t QuicFramer::GetPacketNumberFlags(
     QuicPacketNumberLength packet_number_length) {
   switch (packet_number_length) {
     case PACKET_1BYTE_PACKET_NUMBER:
@@ -926,7 +928,7 @@
                                               QuicPacketHeader* header) {
   QuicPacketNumber base_packet_number = largest_packet_number_;
 
-  if (!ProcessPacketSequenceNumber(
+  if (!ProcessAndCalculatePacketNumber(
           encrypted_reader, header->public_header.packet_number_length,
           base_packet_number, &header->packet_number)) {
     set_detailed_error("Unable to read packet number.");
@@ -946,13 +948,13 @@
   return true;
 }
 
-bool QuicFramer::ProcessPacketSequenceNumber(
+bool QuicFramer::ProcessAndCalculatePacketNumber(
     QuicDataReader* reader,
     QuicPacketNumberLength packet_number_length,
     QuicPacketNumber base_packet_number,
     QuicPacketNumber* packet_number) {
   QuicPacketNumber wire_packet_number = 0u;
-  if (!reader->ReadBytes(&wire_packet_number, packet_number_length)) {
+  if (!reader->ReadBytesToUInt64(packet_number_length, &wire_packet_number)) {
     return false;
   }
 
@@ -1157,14 +1159,15 @@
 
   frame->fin = (stream_flags & kQuicStreamFinMask) == kQuicStreamFinShift;
 
-  frame->stream_id = 0;
-  if (!reader->ReadBytes(&frame->stream_id, stream_id_length)) {
+  uint64_t stream_id = 0;
+  if (!reader->ReadBytesToUInt64(stream_id_length, &stream_id)) {
     set_detailed_error("Unable to read stream_id.");
     return false;
   }
+  frame->stream_id = static_cast<QuicStreamId>(stream_id);
 
   frame->offset = 0;
-  if (!reader->ReadBytes(&frame->offset, offset_length)) {
+  if (!reader->ReadBytesToUInt64(offset_length, &frame->offset)) {
     set_detailed_error("Unable to read offset.");
     return false;
   }
@@ -1202,7 +1205,8 @@
   frame_type >>= kQuicHasMultipleAckBlocksShift;
   bool has_ack_blocks = frame_type & kQuicHasMultipleAckBlocksMask;
 
-  if (!reader->ReadBytes(&ack_frame->largest_observed, largest_acked_length)) {
+  if (!reader->ReadBytesToUInt64(largest_acked_length,
+                                 &ack_frame->largest_observed)) {
     set_detailed_error("Unable to read largest acked.");
     return false;
   }
@@ -1222,14 +1226,14 @@
 
   uint8_t num_ack_blocks = 0;
   if (has_ack_blocks) {
-    if (!reader->ReadBytes(&num_ack_blocks, 1)) {
+    if (!reader->ReadUInt8(&num_ack_blocks)) {
       set_detailed_error("Unable to read num of ack blocks.");
       return false;
     }
   }
 
-  size_t first_block_length = 0;
-  if (!reader->ReadBytes(&first_block_length, ack_block_length)) {
+  uint64_t first_block_length = 0;
+  if (!reader->ReadBytesToUInt64(ack_block_length, &first_block_length)) {
     set_detailed_error("Unable to read first ack block length.");
     return false;
   }
@@ -1239,13 +1243,13 @@
 
   if (num_ack_blocks > 0) {
     for (size_t i = 0; i < num_ack_blocks; ++i) {
-      size_t gap = 0;
-      if (!reader->ReadBytes(&gap, PACKET_1BYTE_PACKET_NUMBER)) {
+      uint8_t gap = 0;
+      if (!reader->ReadUInt8(&gap)) {
         set_detailed_error("Unable to read gap to next ack block.");
         return false;
       }
-      size_t current_block_length = 0;
-      if (!reader->ReadBytes(&current_block_length, ack_block_length)) {
+      uint64_t current_block_length = 0;
+      if (!reader->ReadBytesToUInt64(ack_block_length, &current_block_length)) {
         set_detailed_error("Unable to ack block length.");
         return false;
       }
@@ -1267,15 +1271,14 @@
 bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader,
                                              QuicAckFrame* ack_frame) {
   uint8_t num_received_packets;
-  if (!reader->ReadBytes(&num_received_packets, 1)) {
+  if (!reader->ReadUInt8(&num_received_packets)) {
     set_detailed_error("Unable to read num received packets.");
     return false;
   }
 
   if (num_received_packets > 0) {
     uint8_t delta_from_largest_observed;
-    if (!reader->ReadBytes(&delta_from_largest_observed,
-                           PACKET_1BYTE_PACKET_NUMBER)) {
+    if (!reader->ReadUInt8(&delta_from_largest_observed)) {
       set_detailed_error("Unable to read sequence delta in received packets.");
       return false;
     }
@@ -1284,7 +1287,7 @@
 
     // Time delta from the framer creation.
     uint32_t time_delta_us;
-    if (!reader->ReadBytes(&time_delta_us, sizeof(time_delta_us))) {
+    if (!reader->ReadUInt32(&time_delta_us)) {
       set_detailed_error("Unable to read time delta in received packets.");
       return false;
     }
@@ -1296,8 +1299,7 @@
         std::make_pair(seq_num, creation_time_ + last_timestamp_));
 
     for (uint8_t i = 1; i < num_received_packets; ++i) {
-      if (!reader->ReadBytes(&delta_from_largest_observed,
-                             PACKET_1BYTE_PACKET_NUMBER)) {
+      if (!reader->ReadUInt8(&delta_from_largest_observed)) {
         set_detailed_error(
             "Unable to read sequence delta in received packets.");
         return false;
@@ -1325,8 +1327,8 @@
                                          const QuicPacketHeader& header,
                                          QuicStopWaitingFrame* stop_waiting) {
   QuicPacketNumber least_unacked_delta = 0;
-  if (!reader->ReadBytes(&least_unacked_delta,
-                         header.public_header.packet_number_length)) {
+  if (!reader->ReadBytesToUInt64(header.public_header.packet_number_length,
+                                 &least_unacked_delta)) {
     set_detailed_error("Unable to read least unacked delta.");
     return false;
   }
@@ -1651,9 +1653,9 @@
 
   AckFrameInfo ack_info = GetAckFrameInfo(ack);
   QuicPacketNumberLength largest_acked_length =
-      GetMinSequenceNumberLength(ack.largest_observed);
+      GetMinPacketNumberLength(ack.largest_observed);
   QuicPacketNumberLength ack_block_length =
-      GetMinSequenceNumberLength(ack_info.max_block_length);
+      GetMinPacketNumberLength(ack_info.max_block_length);
 
   ack_size = GetMinAckFrameSize(quic_version_, largest_acked_length);
   // First ack block length.
@@ -1757,32 +1759,38 @@
 }
 
 // static
-bool QuicFramer::AppendPacketSequenceNumber(
-    QuicPacketNumberLength packet_number_length,
-    QuicPacketNumber packet_number,
-    QuicDataWriter* writer) {
-  // Ensure the entire packet number can be written.
-  if (writer->capacity() - writer->length() <
-      static_cast<size_t>(packet_number_length)) {
+bool QuicFramer::AppendPacketNumber(QuicPacketNumberLength packet_number_length,
+                                    QuicPacketNumber packet_number,
+                                    QuicDataWriter* writer) {
+  size_t length = packet_number_length;
+  if (length != 1 && length != 2 && length != 4 && length != 6) {
+    QUIC_BUG << "Invalid packet_number_length: " << length;
     return false;
   }
-  switch (packet_number_length) {
-    case PACKET_1BYTE_PACKET_NUMBER:
-      return writer->WriteUInt8(packet_number & k1ByteSequenceNumberMask);
-      break;
-    case PACKET_2BYTE_PACKET_NUMBER:
-      return writer->WriteUInt16(packet_number & k2ByteSequenceNumberMask);
-      break;
-    case PACKET_4BYTE_PACKET_NUMBER:
-      return writer->WriteUInt32(packet_number & k4ByteSequenceNumberMask);
-      break;
-    case PACKET_6BYTE_PACKET_NUMBER:
-      return writer->WriteUInt48(packet_number & k6ByteSequenceNumberMask);
-      break;
-    default:
-      DCHECK(false) << "packet_number_length: " << packet_number_length;
-      return false;
+  return writer->WriteBytesToUInt64(packet_number_length, packet_number);
+}
+
+// static
+bool QuicFramer::AppendStreamId(size_t stream_id_length,
+                                QuicStreamId stream_id,
+                                QuicDataWriter* writer) {
+  if (stream_id_length == 0 || stream_id_length > 4) {
+    QUIC_BUG << "Invalid stream_id_length: " << stream_id_length;
+    return false;
   }
+  return writer->WriteBytesToUInt64(stream_id_length, stream_id);
+}
+
+// static
+bool QuicFramer::AppendStreamOffset(size_t offset_length,
+                                    QuicStreamOffset offset,
+                                    QuicDataWriter* writer) {
+  if (offset_length == 1 || offset_length > 8) {
+    QUIC_BUG << "Invalid stream_offset_length: " << offset_length;
+    return false;
+  }
+
+  return writer->WriteBytesToUInt64(offset_length, offset);
 }
 
 // static
@@ -1790,18 +1798,20 @@
                                 QuicPacketNumberLength length_length,
                                 QuicPacketNumber length,
                                 QuicDataWriter* writer) {
-  return AppendPacketSequenceNumber(PACKET_1BYTE_PACKET_NUMBER, gap, writer) &&
-         AppendPacketSequenceNumber(length_length, length, writer);
+  return writer->WriteUInt8(gap) &&
+         AppendPacketNumber(length_length, length, writer);
 }
 
 bool QuicFramer::AppendStreamFrame(const QuicStreamFrame& frame,
                                    bool no_stream_frame_length,
                                    QuicDataWriter* writer) {
-  if (!writer->WriteBytes(&frame.stream_id, GetStreamIdSize(frame.stream_id))) {
+  if (!AppendStreamId(GetStreamIdSize(frame.stream_id), frame.stream_id,
+                      writer)) {
     QUIC_BUG << "Writing stream id size failed.";
     return false;
   }
-  if (!writer->WriteBytes(&frame.offset, GetStreamOffsetSize(frame.offset))) {
+  if (!AppendStreamOffset(GetStreamOffsetSize(frame.offset), frame.offset,
+                          writer)) {
     QUIC_BUG << "Writing offset size failed.";
     return false;
   }
@@ -1830,9 +1840,9 @@
   const AckFrameInfo new_ack_info = GetAckFrameInfo(frame);
   QuicPacketNumber largest_acked = frame.largest_observed;
   QuicPacketNumberLength largest_acked_length =
-      GetMinSequenceNumberLength(largest_acked);
+      GetMinPacketNumberLength(largest_acked);
   QuicPacketNumberLength ack_block_length =
-      GetMinSequenceNumberLength(new_ack_info.max_block_length);
+      GetMinPacketNumberLength(new_ack_info.max_block_length);
   // Calculate available bytes for timestamps and ack blocks.
   int32_t available_timestamp_and_ack_block_bytes =
       writer->capacity() - writer->length() - ack_block_length -
@@ -1849,11 +1859,11 @@
 
   // Largest acked length.
   type_byte <<= kQuicSequenceNumberLengthShift;
-  type_byte |= GetSequenceNumberFlags(largest_acked_length);
+  type_byte |= GetPacketNumberFlags(largest_acked_length);
 
   // Ack block length.
   type_byte <<= kQuicSequenceNumberLengthShift;
-  type_byte |= GetSequenceNumberFlags(ack_block_length);
+  type_byte |= GetPacketNumberFlags(ack_block_length);
 
   type_byte |= kQuicFrameTypeAckMask;
 
@@ -1862,8 +1872,7 @@
   }
 
   // Largest acked.
-  if (!AppendPacketSequenceNumber(largest_acked_length, largest_acked,
-                                  writer)) {
+  if (!AppendPacketNumber(largest_acked_length, largest_acked, writer)) {
     return false;
   }
 
@@ -1894,8 +1903,8 @@
   }
 
   // First ack block length.
-  if (!AppendPacketSequenceNumber(ack_block_length,
-                                  new_ack_info.first_block_length, writer)) {
+  if (!AppendPacketNumber(ack_block_length, new_ack_info.first_block_length,
+                          writer)) {
     return false;
   }
 
@@ -2001,8 +2010,7 @@
     return false;
   }
 
-  if (!writer->WriteUInt8(delta_from_largest_observed &
-                          k1ByteSequenceNumberMask)) {
+  if (!writer->WriteUInt8(delta_from_largest_observed)) {
     return false;
   }
 
@@ -2011,7 +2019,7 @@
   uint32_t time_delta_us =
       static_cast<uint32_t>((it->second - creation_time_).ToMicroseconds() &
                             (time_epoch_delta_us - 1));
-  if (!writer->WriteBytes(&time_delta_us, sizeof(time_delta_us))) {
+  if (!writer->WriteUInt32(time_delta_us)) {
     return false;
   }
 
@@ -2025,8 +2033,7 @@
       return false;
     }
 
-    if (!writer->WriteUInt8(delta_from_largest_observed &
-                            k1ByteSequenceNumberMask)) {
+    if (!writer->WriteUInt8(delta_from_largest_observed)) {
       return false;
     }
 
@@ -2057,8 +2064,8 @@
              << " version:" << quic_version_;
     return false;
   }
-  if (!AppendPacketSequenceNumber(header.public_header.packet_number_length,
-                                  least_unacked_delta, writer)) {
+  if (!AppendPacketNumber(header.public_header.packet_number_length,
+                          least_unacked_delta, writer)) {
     QUIC_BUG << " seq failed: " << header.public_header.packet_number_length;
     return false;
   }
@@ -2161,4 +2168,8 @@
   return false;
 }
 
+Endianness QuicFramer::endianness() const {
+  return quic_version_ > QUIC_VERSION_38 ? NETWORK_BYTE_ORDER : HOST_BYTE_ORDER;
+}
+
 }  // namespace net
diff --git a/src/net/quic/core/quic_framer.h b/src/net/quic/core/quic_framer.h
index 6cb8522..f244191 100644
--- a/src/net/quic/core/quic_framer.h
+++ b/src/net/quic/core/quic_framer.h
@@ -12,6 +12,7 @@
 
 #include "base/macros.h"
 #include "net/quic/core/quic_packets.h"
+#include "net/quic/platform/api/quic_endian.h"
 #include "net/quic/platform/api/quic_export.h"
 #include "net/quic/platform/api/quic_string_piece.h"
 
@@ -312,7 +313,7 @@
   const std::string& detailed_error() { return detailed_error_; }
 
   // The minimum packet number length required to represent |packet_number|.
-  static QuicPacketNumberLength GetMinSequenceNumberLength(
+  static QuicPacketNumberLength GetMinPacketNumberLength(
       QuicPacketNumber packet_number);
 
   void SetSupportedVersions(const QuicVersionVector& versions) {
@@ -320,6 +321,9 @@
     quic_version_ = versions[0];
   }
 
+  // Returns byte order to read/write integers and floating numbers.
+  Endianness endianness() const;
+
   void set_validate_flags(bool value) { validate_flags_ = value; }
 
   Perspective perspective() const { return perspective_; }
@@ -364,10 +368,14 @@
   bool ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
                                     QuicPacketHeader* header);
 
-  bool ProcessPacketSequenceNumber(QuicDataReader* reader,
-                                   QuicPacketNumberLength packet_number_length,
-                                   QuicPacketNumber base_packet_number,
-                                   QuicPacketNumber* packet_number);
+  // First processes possibly truncated packet number. Calculates the full
+  // packet number from the truncated one and the last seen packet number, and
+  // stores it to |packet_number|.
+  bool ProcessAndCalculatePacketNumber(
+      QuicDataReader* reader,
+      QuicPacketNumberLength packet_number_length,
+      QuicPacketNumber base_packet_number,
+      QuicPacketNumber* packet_number);
   bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header);
   bool ProcessStreamFrame(QuicDataReader* reader,
                           uint8_t frame_type,
@@ -425,10 +433,15 @@
                             bool last_frame_in_packet,
                             QuicPacketNumberLength packet_number_length);
 
-  static bool AppendPacketSequenceNumber(
-      QuicPacketNumberLength packet_number_length,
-      QuicPacketNumber packet_number,
-      QuicDataWriter* writer);
+  static bool AppendPacketNumber(QuicPacketNumberLength packet_number_length,
+                                 QuicPacketNumber packet_number,
+                                 QuicDataWriter* writer);
+  static bool AppendStreamId(size_t stream_id_length,
+                             QuicStreamId stream_id,
+                             QuicDataWriter* writer);
+  static bool AppendStreamOffset(size_t offset_length,
+                                 QuicStreamOffset offset,
+                                 QuicDataWriter* writer);
 
   // Appends a single ACK block to |writer| and returns true if the block was
   // successfully appended.
@@ -437,7 +450,7 @@
                              QuicPacketNumber length,
                              QuicDataWriter* writer);
 
-  static uint8_t GetSequenceNumberFlags(
+  static uint8_t GetPacketNumberFlags(
       QuicPacketNumberLength packet_number_length);
 
   static AckFrameInfo GetAckFrameInfo(const QuicAckFrame& frame);
diff --git a/src/net/quic/core/quic_framer_test.cc b/src/net/quic/core/quic_framer_test.cc
index a39a272..7baec57 100644
--- a/src/net/quic/core/quic_framer_test.cc
+++ b/src/net/quic/core/quic_framer_test.cc
@@ -20,9 +20,9 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_framer_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::Return;
@@ -31,6 +31,7 @@
 
 namespace net {
 namespace test {
+namespace {
 
 const QuicPacketNumber kEpoch = UINT64_C(1) << 48;
 const QuicPacketNumber kMask = kEpoch - 1;
@@ -288,7 +289,7 @@
   std::vector<std::unique_ptr<string>> stream_data_;
 };
 
-class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
+class QuicFramerTest : public QuicTestWithParam<QuicVersion> {
  public:
   QuicFramerTest()
       : encrypter_(new test::TestEncrypter()),
@@ -437,7 +438,6 @@
     return BuildUnsizedDataPacket(&framer_, header, frames, packet_size);
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   test::TestEncrypter* encrypter_;
   test::TestDecrypter* decrypter_;
   QuicVersion version_;
@@ -446,6 +446,26 @@
   test::TestQuicVisitor visitor_;
 };
 
+// Helper function to get index of packets in hex format.
+// For each packet in hex format, integers and floating numbers are in big
+// endian for v38 and up, and connection ID is in big endian according to
+// perspective and flags.
+// There are 4 combinations:
+// 0 : little endian connection ID, little endian integers/floating numbers.
+// 1 : big endian connection ID, little endian integers/floating numbers.
+// 2 : little endian connection ID, big endian integers/floating numbers.
+// 3 : big endian connection ID, big endian integers/floating numbers.
+size_t GetPacketIndex(QuicVersion version, Perspective perspective) {
+  size_t index = 0;
+  if (QuicUtils::IsConnectionIdWireFormatBigEndian(perspective)) {
+    index = 1;
+  }
+  if (version > QUIC_VERSION_38) {
+    index += 2;
+  }
+  return index;
+}
+
 // Run all framer tests with all supported versions of QUIC.
 INSTANTIATE_TEST_CASE_P(QuicFramerTests,
                         QuicFramerTest,
@@ -627,17 +647,31 @@
     // packet number
     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_FALSE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -661,11 +695,8 @@
     } else {
       expected_error = "Unable to read packet number.";
     }
-    CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
-        i, expected_error, QUIC_INVALID_PACKET_HEADER);
+    CheckProcessingFails(packets[index], i, expected_error,
+                         QUIC_INVALID_PACKET_HEADER);
   }
 }
 
@@ -681,9 +712,20 @@
     0xBC, 0x9A, 0x78, 0x56,
     0x34, 0x12,
   };
+
+  unsigned char packet39[] = {
+    // public flags (0 byte connection_id)
+    0x30,
+    // connection_id
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
+  QuicEncryptedPacket encrypted(
+      AsChars(framer_.version() > QUIC_VERSION_38 ? packet39 : packet),
+      arraysize(packet), false);
   EXPECT_FALSE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -708,7 +750,9 @@
     } else {
       expected_error = "Unable to read packet number.";
     }
-    CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
+    CheckProcessingFails(
+        framer_.version() > QUIC_VERSION_38 ? packet39 : packet, i,
+        expected_error, QUIC_INVALID_PACKET_HEADER);
   }
 }
 
@@ -735,17 +779,35 @@
     // packet number
     0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
   };
+
+  unsigned char packet39[] = {
+    // public flags (version)
+    0x39,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+    // version tag
+    'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (version)
+    0x39,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // version tag
+    'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_FALSE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -772,11 +834,8 @@
     } else {
       expected_error = "Unable to read packet number.";
     }
-    CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
-        i, expected_error, QUIC_INVALID_PACKET_HEADER);
+    CheckProcessingFails(packets[index], i, expected_error,
+                         QUIC_INVALID_PACKET_HEADER);
   }
 }
 
@@ -801,17 +860,31 @@
     // packet number
     0xBC, 0x9A, 0x78, 0x56,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id and 4 byte packet number)
+    0x28,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x56, 0x78, 0x9A, 0xBC,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id and 4 byte packet number)
+    0x28,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x56, 0x78, 0x9A, 0xBC,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_FALSE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -835,11 +908,8 @@
     } else {
       expected_error = "Unable to read packet number.";
     }
-    CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
-        i, expected_error, QUIC_INVALID_PACKET_HEADER);
+    CheckProcessingFails(packets[index], i, expected_error,
+                         QUIC_INVALID_PACKET_HEADER);
   }
 }
 
@@ -864,17 +934,31 @@
     // packet number
     0xBC, 0x9A,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id and 2 byte packet number)
+    0x18,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x9A, 0xBC,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id and 2 byte packet number)
+    0x18,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x9A, 0xBC,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_FALSE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -900,11 +984,8 @@
     } else {
       expected_error = "Unable to read packet number.";
     }
-    CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
-        i, expected_error, QUIC_INVALID_PACKET_HEADER);
+    CheckProcessingFails(packets[index], i, expected_error,
+                         QUIC_INVALID_PACKET_HEADER);
   }
 }
 
@@ -1070,17 +1151,50 @@
     0x00,
     0x00, 0x00, 0x00, 0x00
   };
-  // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char packet39[] = {
+    // public flags: includes nonce flag
+    static_cast<unsigned char>(
+        FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x3C : 0x7C),
+    // connection_id
+    0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+    // nonce
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+    // frame type (padding)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags: includes nonce flag
+    static_cast<unsigned char>(
+        FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x3C : 0x7C),
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // nonce
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+    // frame type (padding)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+  // clang-format on
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
   ASSERT_TRUE(visitor_.public_header_->nonce != nullptr);
@@ -1127,16 +1241,47 @@
     0x00,
     0x00, 0x00, 0x00, 0x00
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id, version flag and an unknown flag)
+    static_cast<unsigned char>(
+        FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x39 : 0x79),
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // version tag
+    'Q', '0', '0', '0',
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id, version flag and an unknown flag)
+    static_cast<unsigned char>(
+        FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x39 : 0x79),
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // version tag
+    'Q', '0', '0', '0',
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
   // clang-format on
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -1296,21 +1441,74 @@
     // paddings
     0x00, 0x00,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // paddings
+    0x00, 0x00,
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+    // paddings
+    0x00, 0x00,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // paddings
+    0x00, 0x00,
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+    // paddings
+    0x00, 0x00,
+  };
   // clang-format on
 
   if (framer_.version() <= QUIC_VERSION_37) {
     return;
   }
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
   ASSERT_TRUE(visitor_.header_.get());
@@ -1378,17 +1576,61 @@
       'o',  ' ',  'w',  'o',
       'r',  'l',  'd',  '!',
   };
-  // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76,
+      0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+  };
+  // clang-format on
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -1404,11 +1646,8 @@
   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get());
 
   // Now test framing boundaries.
-  CheckStreamFrameBoundaries(
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? packet_cid_be
-          : packet,
-      kQuicMaxStreamIdSize, !kIncludeVersion);
+  CheckStreamFrameBoundaries(packets[index], kQuicMaxStreamIdSize,
+                             !kIncludeVersion);
 }
 
 TEST_P(QuicFramerTest, MissingDiversificationNonce) {
@@ -1467,17 +1706,62 @@
       'o',  ' ',  'w',  'o',
       'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+        // public flags (8 byte connection_id)
+        0x38,
+        // connection_id
+        0x10, 0x32, 0x54, 0x76,
+        0x98, 0xBA, 0xDC, 0xFE,
+        // packet number
+        0x12, 0x34, 0x56, 0x78,
+        0x9A, 0xBC,
+
+        // frame type (stream frame with fin)
+        0xFF,
+        // stream id
+        0x01, 0x02, 0x03, 0x04,
+        // offset
+        0xBA, 0x98, 0xFE, 0xDC,
+        0x32, 0x10, 0x76, 0x54,
+        // data length
+        0x00, 0x0c,
+        // data
+        'h',  'e',  'l',  'l',
+        'o',  ' ',  'w',  'o',
+        'r',  'l',  'd',  '!',
+    };
+
+  unsigned char packet_cid_be39[] = {
+        // public flags (8 byte connection_id)
+        0x38,
+        // connection_id
+        0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+        // packet number
+        0x12, 0x34, 0x56, 0x78,
+        0x9A, 0xBC,
+
+        // frame type (stream frame with fin)
+        0xFF,
+        // stream id
+        0x01, 0x02, 0x03, 0x04,
+        // offset
+        0xBA, 0x98, 0xFE, 0xDC,
+        0x32, 0x10, 0x76, 0x54,
+        // data length
+        0x00, 0x0c,
+        // data
+        'h',  'e',  'l',  'l',
+        'o',  ' ',  'w',  'o',
+        'r',  'l',  'd',  '!',
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_FALSE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_DECRYPTION_FAILURE, framer_.error());
 }
@@ -1532,17 +1816,62 @@
     'o',  ' ',  'w',  'o',
     'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (stream frame with fin)
+    0xFE,
+    // stream id
+    0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (stream frame with fin)
+    0xFE,
+    // stream id
+    0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -1560,11 +1889,7 @@
 
   // Now test framing boundaries.
   const size_t stream_id_size = 3;
-  CheckStreamFrameBoundaries(
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? packet_cid_be
-          : packet,
-      stream_id_size, !kIncludeVersion);
+  CheckStreamFrameBoundaries(packets[index], stream_id_size, !kIncludeVersion);
 }
 
 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) {
@@ -1617,17 +1942,62 @@
     'o',  ' ',  'w',  'o',
     'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76,
+      0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFD,
+      // stream id
+      0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+    };
+
+    unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFD,
+      // stream id
+      0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -1645,11 +2015,7 @@
 
   // Now test framing boundaries.
   const size_t stream_id_size = 2;
-  CheckStreamFrameBoundaries(
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? packet_cid_be
-          : packet,
-      stream_id_size, !kIncludeVersion);
+  CheckStreamFrameBoundaries(packets[index], stream_id_size, !kIncludeVersion);
 }
 
 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) {
@@ -1702,17 +2068,62 @@
     'o',  ' ',  'w',  'o',
     'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76,
+      0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFC,
+      // stream id
+      0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+    };
+
+    unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFC,
+      // stream id
+      0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -1730,11 +2141,7 @@
 
   // Now test framing boundaries.
   const size_t stream_id_size = 1;
-  CheckStreamFrameBoundaries(
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? packet_cid_be
-          : packet,
-      stream_id_size, !kIncludeVersion);
+  CheckStreamFrameBoundaries(packets[index], stream_id_size, !kIncludeVersion);
 }
 
 TEST_P(QuicFramerTest, StreamFrameWithVersion) {
@@ -1791,17 +2198,66 @@
     'o',  ' ',  'w',  'o',
     'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+      // public flags (version, 8 byte connection_id)
+      0x39,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76,
+      0x98, 0xBA, 0xDC, 0xFE,
+      // version tag
+      'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+    };
+
+    unsigned char packet_cid_be39[] = {
+      // public flags (version, 8 byte connection_id)
+      0x39,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // version tag
+      'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -1819,11 +2275,8 @@
   CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get());
 
   // Now test framing boundaries.
-  CheckStreamFrameBoundaries(
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? packet_cid_be
-          : packet,
-      kQuicMaxStreamIdSize, kIncludeVersion);
+  CheckStreamFrameBoundaries(packets[index], kQuicMaxStreamIdSize,
+                             kIncludeVersion);
 }
 
 TEST_P(QuicFramerTest, RejectPacket) {
@@ -1878,17 +2331,62 @@
       'o',  ' ',  'w',  'o',
       'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76,
+      0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (stream frame with fin)
+      0xFF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+      // data length
+      0x00, 0x0c,
+      // data
+      'h',  'e',  'l',  'l',
+      'o',  ' ',  'w',  'o',
+      'r',  'l',  'd',  '!',
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -1978,17 +2476,55 @@
       // num timestamps.
       0x00,
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x3C,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (one ack block, 2 byte largest observed, 2 byte block length)
+      0x45,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // first ack block length.
+      0x12, 0x34,
+      // num timestamps.
+      0x00,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x3C,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (one ack block, 2 byte largest observed, 2 byte block length)
+      0x45,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // first ack block length.
+      0x12, 0x34,
+      // num timestamps.
+      0x00,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2024,9 +2560,7 @@
       expected_error = "Unable to read num received packets.";
     }
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2129,17 +2663,107 @@
       // Delta time.
       0x10, 0x32,
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x3C,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (more than one ack block, 2 byte largest observed, 2 byte block length)
+      0x65,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // num ack blocks ranges.
+      0x04,
+      // first ack block length.
+      0x00, 0x01,
+      // gap to next block.
+      0x01,
+      // ack block length.
+      0x0e, 0xaf,
+      // gap to next block.
+      0xff,
+      // ack block length.
+      0x00, 0x00,
+      // gap to next block.
+      0x91,
+      // ack block length.
+      0x01, 0xea,
+      // gap to next block.
+      0x05,
+      // ack block length.
+      0x00, 0x04,
+      // Number of timestamps.
+      0x02,
+      // Delta from largest observed.
+      0x01,
+      // Delta time.
+      0x76, 0x54, 0x32, 0x10,
+      // Delta from largest observed.
+      0x02,
+      // Delta time.
+      0x32, 0x10,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x3C,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (more than one ack block, 2 byte largest observed, 2 byte block length)
+      0x65,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // num ack blocks ranges.
+      0x04,
+      // first ack block length.
+      0x00, 0x01,
+      // gap to next block.
+      0x01,
+      // ack block length.
+      0x0e, 0xaf,
+      // gap to next block.
+      0xff,
+      // ack block length.
+      0x00, 0x00,
+      // gap to next block.
+      0x91,
+      // ack block length.
+      0x01, 0xea,
+      // gap to next block.
+      0x05,
+      // ack block length.
+      0x00, 0x04,
+      // Number of timestamps.
+      0x02,
+      // Delta from largest observed.
+      0x01,
+      // Delta time.
+      0x76, 0x54, 0x32, 0x10,
+      // Delta from largest observed.
+      0x02,
+      // Delta time.
+      0x32, 0x10,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2226,9 +2850,7 @@
     }
 
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2268,17 +2890,44 @@
     0x08, 0x00, 0x00, 0x00,
     0x00, 0x00,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x3C,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xA8,
+    // frame type (stop waiting frame)
+    0x06,
+    // least packet number awaiting an ack, delta from packet number.
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x08,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x3C,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xA8,
+    // frame type (stop waiting frame)
+    0x06,
+    // least packet number awaiting an ack, delta from packet number.
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x08,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2296,9 +2945,7 @@
     string expected_error;
     expected_error = "Unable to read least unacked delta.";
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2352,17 +2999,58 @@
     // error code
     0x01, 0x00, 0x00, 0x00,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (rst stream frame)
+    0x01,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+
+    // sent byte offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+
+    // error code
+    0x00, 0x00, 0x00, 0x01,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (rst stream frame)
+    0x01,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+
+    // sent byte offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+
+    // error code
+    0x00, 0x00, 0x00, 0x01,
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2388,9 +3076,7 @@
       expected_error = "Unable to read rst stream error code.";
     }
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2446,17 +3132,60 @@
     'I',  ' ',  'c',  'a',
     'n',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (connection close frame)
+    0x02,
+    // error code
+    0x00, 0x00, 0x00, 0x11,
+
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (connection close frame)
+    0x02,
+    // error code
+    0x00, 0x00, 0x00, 0x11,
+
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2481,9 +3210,7 @@
       expected_error = "Unable to read connection close error details.";
     }
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2541,17 +3268,62 @@
     'I',  ' ',  'c',  'a',
     'n',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (go away frame)
+    0x03,
+    // error code
+    0x00, 0x00, 0x00, 0x09,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (go away frame)
+    0x03,
+    // error code
+    0x00, 0x00, 0x00, 0x09,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2577,9 +3349,7 @@
       expected_error = "Unable to read goaway reason.";
     }
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2625,17 +3395,50 @@
       0x54, 0x76, 0x10, 0x32,
       0xDC, 0xFE, 0x98, 0xBA,
     };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (window update frame)
+    0x04,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // byte offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (window update frame)
+      0x04,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // byte offset
+      0xBA, 0x98, 0xFE, 0xDC,
+      0x32, 0x10, 0x76, 0x54,
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2656,9 +3459,7 @@
       expected_error = "Unable to read window byte_offset.";
     }
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2698,17 +3499,44 @@
       // stream id
       0x04, 0x03, 0x02, 0x01,
     };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (blocked frame)
+    0x05,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78,
+      0x9A, 0xBC,
+
+      // frame type (blocked frame)
+      0x05,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2723,9 +3551,7 @@
        ++i) {
     string expected_error = "Unable to read stream_id.";
     CheckProcessingFails(
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? packet_cid_be
-            : packet,
+        packets[index],
         i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
                                 !kIncludeVersion, !kIncludeDiversificationNonce,
                                 PACKET_6BYTE_PACKET_NUMBER),
@@ -2761,17 +3587,40 @@
      // frame type (ping frame)
      0x07,
     };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (ping frame)
+    0x07,
+  };
+
+  unsigned char packet_cid_be39[] = {
+     // public flags (8 byte connection_id)
+     0x38,
+     // connection_id
+     0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+     // packet number
+     0x12, 0x34, 0x56, 0x78,
+     0x9A, 0xBC,
+
+     // frame type (ping frame)
+     0x07,
+    };
   // clang-format on
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
 
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
@@ -2855,7 +3704,6 @@
   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
   EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
-  EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number);
   EXPECT_EQ(
       IpAddressFamily::IP_UNSPEC,
       visitor_.public_reset_packet_->client_address.host().address_family());
@@ -2974,7 +3822,6 @@
   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
   EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
-  EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number);
   EXPECT_EQ(
       IpAddressFamily::IP_UNSPEC,
       visitor_.public_reset_packet_->client_address.host().address_family());
@@ -3176,7 +4023,6 @@
   EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
   EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
   EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
-  EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number);
   EXPECT_EQ("4.31.198.44",
             visitor_.public_reset_packet_->client_address.host().ToString());
   EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port());
@@ -3380,29 +4226,52 @@
     0x00,
     0x00, 0x00, 0x00, 0x00
   };
+
+  unsigned char packet39[kMaxPacketSize] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+
+  unsigned char packet_cid_be39[kMaxPacketSize] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   uint64_t header_size = GetPacketHeaderSize(
       framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
       !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER);
-  memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet) +
-             header_size + 1,
-         0x00, kMaxPacketSize - header_size - 1);
+  memset((packets[index]) + header_size + 1, 0x00,
+         kMaxPacketSize - header_size - 1);
 
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildStreamFramePacketWithNewPaddingFrame) {
@@ -3478,20 +4347,74 @@
     // paddings
     0x00, 0x00,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // paddings
+    0x00, 0x00,
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+    // paddings
+    0x00, 0x00,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // paddings
+    0x00, 0x00,
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+    // paddings
+    0x00, 0x00,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
@@ -3531,29 +4454,50 @@
     0x00,
     0x00, 0x00, 0x00, 0x00
   };
+
+  unsigned char packet39[kMaxPacketSize] = {
+    // public flags (8 byte connection_id and 4 byte packet number)
+    0x28,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x56, 0x78, 0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+
+  unsigned char packet_cid_be39[kMaxPacketSize] = {
+    // public flags (8 byte connection_id and 4 byte packet number)
+    0x28,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x56, 0x78, 0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   uint64_t header_size = GetPacketHeaderSize(
       framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
       !kIncludeDiversificationNonce, PACKET_4BYTE_PACKET_NUMBER);
-  memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet) +
-             header_size + 1,
-         0x00, kMaxPacketSize - header_size - 1);
+  memset((packets[index]) + header_size + 1, 0x00,
+         kMaxPacketSize - header_size - 1);
 
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
@@ -3593,29 +4537,50 @@
     0x00,
     0x00, 0x00, 0x00, 0x00
   };
+
+  unsigned char packet39[kMaxPacketSize] = {
+    // public flags (8 byte connection_id and 2 byte packet number)
+    0x18,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
+
+  unsigned char packet_cid_be39[kMaxPacketSize] = {
+    // public flags (8 byte connection_id and 2 byte packet number)
+    0x18,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x9A, 0xBC,
+
+    // frame type (padding frame)
+    0x00,
+    0x00, 0x00, 0x00, 0x00
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   uint64_t header_size = GetPacketHeaderSize(
       framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
       !kIncludeDiversificationNonce, PACKET_2BYTE_PACKET_NUMBER);
-  memset((QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet) +
-             header_size + 1,
-         0x00, kMaxPacketSize - header_size - 1);
+  memset((packets[index]) + header_size + 1, 0x00,
+         kMaxPacketSize - header_size - 1);
 
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
@@ -3737,20 +4702,62 @@
     'o',  ' ',  'w',  'o',
     'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (stream frame with fin and no length)
+    0xDF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (stream frame with fin and no length)
+    0xDF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
@@ -3806,21 +4813,60 @@
       // data
       'h',  'e',  'l',  'l',  'o',  ' ',  'w',  'o',  'r', 'l', 'd', '!',
   };
+
+  unsigned char packet39[] = {
+      // public flags (version, 8 byte connection_id)
+      static_cast<unsigned char>(
+          FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2 ? 0x39 : 0x3D),
+      // connection_id
+          0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // version tag
+      'Q', '0',  GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (stream frame with fin and no length)
+      0xDF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC, 0x32, 0x10, 0x76, 0x54,
+      // data
+      'h',  'e',  'l',  'l',  'o',  ' ',  'w',  'o',  'r', 'l', 'd', '!',
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (version, 8 byte connection_id)
+      static_cast<unsigned char>(
+          FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2 ? 0x39 : 0x3D),
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // version tag
+      'Q', '0',  GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(),
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (stream frame with fin and no length)
+      0xDF,
+      // stream id
+      0x01, 0x02, 0x03, 0x04,
+      // offset
+      0xBA, 0x98, 0xFE, 0xDC, 0x32, 0x10, 0x76, 0x54,
+      // data
+      'h',  'e',  'l',  'l',  'o',  ' ',  'w',  'o',  'r', 'l', 'd', '!',
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
@@ -3916,20 +4962,59 @@
       // num timestamps.
       0x00,
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (no ack blocks, 2 byte largest observed, 2 byte block length)
+      0x45,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // first ack block length.
+      0x12, 0x34,
+      // num timestamps.
+      0x00,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (no ack blocks, 2 byte largest observed, 2 byte block length)
+      0x45,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // first ack block length.
+      0x12, 0x34,
+      // num timestamps.
+      0x00,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) {
@@ -4028,20 +5113,95 @@
       // num timestamps.
       0x00,
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (has ack blocks, 2 byte largest observed, 2 byte block length)
+      0x65,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // num ack blocks ranges.
+      0x04,
+      // first ack block length.
+      0x00, 0x01,
+      // gap to next block.
+      0x01,
+      // ack block length.
+      0x0e, 0xaf,
+      // gap to next block.
+      0xff,
+      // ack block length.
+      0x00, 0x00,
+      // gap to next block.
+      0x91,
+      // ack block length.
+      0x01, 0xea,
+      // gap to next block.
+      0x05,
+      // ack block length.
+      0x00, 0x04,
+      // num timestamps.
+      0x00,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+      // frame type (ack frame)
+      // (has ack blocks, 2 byte largest observed, 2 byte block length)
+      0x65,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // num ack blocks ranges.
+      0x04,
+      // first ack block length.
+      0x00, 0x01,
+      // gap to next block.
+      0x01,
+      // ack block length.
+      0x0e, 0xaf,
+      // gap to next block.
+      0xff,
+      // ack block length.
+      0x00, 0x00,
+      // gap to next block.
+      0x91,
+      // ack block length.
+      0x01, 0xea,
+      // gap to next block.
+      0x05,
+      // ack block length.
+      0x00, 0x04,
+      // num timestamps.
+      0x00,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) {
@@ -4249,20 +5409,203 @@
       // num timestamps.
       0x00,
   };
+
+  unsigned char packet39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+      // frame type (ack frame)
+      // (has ack blocks, 2 byte largest observed, 2 byte block length)
+      0x65,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // num ack blocks ranges.
+      0xff,
+      // first ack block length.
+      0x0f, 0xdd,
+      // 255 = 4 * 63 + 3
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      // num timestamps.
+      0x00,
+  };
+
+  unsigned char packet_cid_be39[] = {
+      // public flags (8 byte connection_id)
+      0x38,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      // packet number
+      0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+      // frame type (ack frame)
+      // (has ack blocks, 2 byte largest observed, 2 byte block length)
+      0x65,
+      // largest acked
+      0x12, 0x34,
+      // Zero delta time.
+      0x00, 0x00,
+      // num ack blocks ranges.
+      0xff,
+      // first ack block length.
+      0x0f, 0xdd,
+      // 255 = 4 * 63 + 3
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01,
+      // num timestamps.
+      0x00,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) {
@@ -4308,20 +5651,48 @@
     0x1C, 0x00, 0x00, 0x00,
     0x00, 0x00,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+    // frame type (stop waiting frame)
+    0x06,
+    // least packet number awaiting an ack, delta from packet number.
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x1C,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC,
+
+    // frame type (stop waiting frame)
+    0x06,
+    // least packet number awaiting an ack, delta from packet number.
+    0x00, 0x00, 0x00, 0x00,
+    0x00, 0x1C,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
@@ -4377,22 +5748,60 @@
     // error code
     0x08, 0x07, 0x06, 0x05,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (rst stream frame)
+    0x01,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // sent byte offset
+    0x08, 0x07, 0x06, 0x05,
+    0x04, 0x03, 0x02, 0x01,
+    // error code
+    0x05, 0x06, 0x07, 0x08,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (rst stream frame)
+    0x01,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // sent byte offset
+    0x08, 0x07, 0x06, 0x05,
+    0x04, 0x03, 0x02, 0x01,
+    // error code
+    0x05, 0x06, 0x07, 0x08,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   QuicFrames frames = {QuicFrame(&rst_frame)};
 
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildCloseFramePacket) {
@@ -4453,20 +5862,62 @@
     'I',  ' ',  'c',  'a',
     'n',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (connection close frame)
+    0x02,
+    // error code
+    0x05, 0x06, 0x07, 0x08,
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (connection close frame)
+    0x02,
+    // error code
+    0x05, 0x06, 0x07, 0x08,
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildGoAwayPacket) {
@@ -4532,20 +5983,66 @@
     'I',  ' ',  'c',  'a',
     'n',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (go away frame)
+    0x03,
+    // error code
+    0x05, 0x06, 0x07, 0x08,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (go away frame)
+    0x03,
+    // error code
+    0x05, 0x06, 0x07, 0x08,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // error details length
+    0x00, 0x0d,
+    // error details
+    'b',  'e',  'c',  'a',
+    'u',  's',  'e',  ' ',
+    'I',  ' ',  'c',  'a',
+    'n',
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
@@ -4598,20 +6095,54 @@
     0x88, 0x77, 0x66, 0x55,
     0x44, 0x33, 0x22, 0x11,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (window update frame)
+    0x04,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // byte offset
+    0x11, 0x22, 0x33, 0x44,
+    0x55, 0x66, 0x77, 0x88,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (window update frame)
+    0x04,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // byte offset
+    0x11, 0x22, 0x33, 0x44,
+    0x55, 0x66, 0x77, 0x88,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildBlockedPacket) {
@@ -4657,20 +6188,48 @@
     // stream id
     0x04, 0x03, 0x02, 0x01,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (blocked frame)
+    0x05,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (blocked frame)
+    0x05,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, BuildPingPacket) {
@@ -4709,20 +6268,44 @@
     // frame type (ping frame)
     0x07,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (ping frame)
+    0x07,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (ping frame)
+    0x07,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
-  test::CompareCharArraysWithHexError(
-      "constructed packet", data->data(), data->length(),
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
 }
 
 // Test that the MTU discovery packet is serialized correctly as a PING packet.
@@ -4762,11 +6345,159 @@
     // frame type (ping frame)
     0x07,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (ping frame)
+    0x07,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (ping frame)
+    0x07,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
 
+  test::CompareCharArraysWithHexError("constructed packet", data->data(),
+                                      data->length(), AsChars(packets[index]),
+                                      arraysize(packet));
+}
+
+TEST_P(QuicFramerTest, BuildPublicResetPacketOld) {
+  FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = true;
+  QuicPublicResetPacket reset_packet;
+  reset_packet.public_header.connection_id = kConnectionId;
+  reset_packet.public_header.reset_flag = true;
+  reset_packet.public_header.version_flag = false;
+  reset_packet.nonce_proof = kNonceProof;
+
+  // clang-format off
+  unsigned char packet[] = {
+    // public flags (public reset, 8 byte ConnectionId)
+    0x0E,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // message tag (kPRST)
+    'P', 'R', 'S', 'T',
+    // num_entries (1) + padding
+    0x01, 0x00, 0x00, 0x00,
+    // tag kRNON
+    'R', 'N', 'O', 'N',
+    // end offset 8
+    0x08, 0x00, 0x00, 0x00,
+    // nonce proof
+    0x89, 0x67, 0x45, 0x23,
+    0x01, 0xEF, 0xCD, 0xAB,
+  };
+
+  unsigned char packet_cid_be[] = {
+    // public flags (public reset, 8 byte ConnectionId)
+    0x0E,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // message tag (kPRST)
+    'P', 'R', 'S', 'T',
+    // num_entries (1) + padding
+    0x01, 0x00, 0x00, 0x00,
+    // tag kRNON
+    'R', 'N', 'O', 'N',
+    // end offset 8
+    0x08, 0x00, 0x00, 0x00,
+    // nonce proof
+    0x89, 0x67, 0x45, 0x23,
+    0x01, 0xEF, 0xCD, 0xAB,
+  };
+  // clang-format on
+
+  std::unique_ptr<QuicEncryptedPacket> data(
+      framer_.BuildPublicResetPacket(reset_packet));
+  ASSERT_TRUE(data != nullptr);
+  test::CompareCharArraysWithHexError(
+      "constructed packet", data->data(), data->length(),
+      AsChars(
+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
+              ? packet_cid_be
+              : packet),
+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
+          ? arraysize(packet_cid_be)
+          : arraysize(packet));
+}
+
+TEST_P(QuicFramerTest, BuildPublicResetPacket) {
+  FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false;
+  QuicPublicResetPacket reset_packet;
+  reset_packet.public_header.connection_id = kConnectionId;
+  reset_packet.public_header.reset_flag = true;
+  reset_packet.public_header.version_flag = false;
+  reset_packet.nonce_proof = kNonceProof;
+
+  // clang-format off
+  unsigned char packet[] = {
+      // public flags (public reset, 8 byte ConnectionId)
+      0x0A,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76,
+      0x98, 0xBA, 0xDC, 0xFE,
+      // message tag (kPRST)
+      'P', 'R', 'S', 'T',
+      // num_entries (1) + padding
+      0x01, 0x00, 0x00, 0x00,
+      // tag kRNON
+      'R', 'N', 'O', 'N',
+      // end offset 8
+      0x08, 0x00, 0x00, 0x00,
+      // nonce proof
+      0x89, 0x67, 0x45, 0x23,
+      0x01, 0xEF, 0xCD, 0xAB,
+  };
+
+  unsigned char packet_cid_be[] = {
+      // public flags (public reset, 8 byte ConnectionId)
+      0x0A,
+      // connection_id
+      0xFE, 0xDC, 0xBA, 0x98,
+      0x76, 0x54, 0x32, 0x10,
+      // message tag (kPRST)
+      'P', 'R', 'S', 'T',
+      // num_entries (1) + padding
+      0x01, 0x00, 0x00, 0x00,
+      // tag kRNON
+      'R', 'N', 'O', 'N',
+      // end offset 8
+      0x08, 0x00, 0x00, 0x00,
+      // nonce proof
+      0x89, 0x67, 0x45, 0x23,
+      0x01, 0xEF, 0xCD, 0xAB,
+  };
+  // clang-format on
+
+  std::unique_ptr<QuicEncryptedPacket> data(
+      framer_.BuildPublicResetPacket(reset_packet));
+  ASSERT_TRUE(data != nullptr);
+
   test::CompareCharArraysWithHexError(
       "constructed packet", data->data(), data->length(),
       AsChars(
@@ -4778,337 +6509,18 @@
           : arraysize(packet));
 }
 
-TEST_P(QuicFramerTest, BuildPublicResetPacketOld) {
-  FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = true;
-  QuicPublicResetPacket reset_packet;
-  reset_packet.public_header.connection_id = kConnectionId;
-  reset_packet.public_header.reset_flag = true;
-  reset_packet.public_header.version_flag = false;
-  reset_packet.rejected_packet_number = kPacketNumber;
-  reset_packet.nonce_proof = kNonceProof;
-
-  // clang-format off
-  unsigned char packet[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0E,
-    // connection_id
-    0x10, 0x32, 0x54, 0x76,
-    0x98, 0xBA, 0xDC, 0xFE,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (2) + padding
-    0x02, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // tag kRSEQ
-    'R', 'S', 'E', 'Q',
-    // end offset 16
-    0x10, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-    // rejected packet number
-    0xBC, 0x9A, 0x78, 0x56,
-    0x34, 0x12, 0x00, 0x00,
-  };
-
-  unsigned char packet_cid_be[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0E,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (2) + padding
-    0x02, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // tag kRSEQ
-    'R', 'S', 'E', 'Q',
-    // end offset 16
-    0x10, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-    // rejected packet number
-    0xBC, 0x9A, 0x78, 0x56,
-    0x34, 0x12, 0x00, 0x00,
-  };
-
-  unsigned char packet_no_rejected_packet_number[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0E,
-    // connection_id
-    0x10, 0x32, 0x54, 0x76,
-    0x98, 0xBA, 0xDC, 0xFE,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (1) + padding
-    0x01, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-  };
-
-  unsigned char packet_no_rejected_packet_number_cid_be[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0E,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (1) + padding
-    0x01, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-  };
-  // clang-format on
-
-  std::unique_ptr<QuicEncryptedPacket> data(
-      framer_.BuildPublicResetPacket(reset_packet));
-  ASSERT_TRUE(data != nullptr);
-  if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) {
-    test::CompareCharArraysWithHexError(
-        "constructed packet", data->data(), data->length(),
-        AsChars(
-            QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-                ? packet_no_rejected_packet_number_cid_be
-                : packet_no_rejected_packet_number),
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? arraysize(packet_no_rejected_packet_number_cid_be)
-            : arraysize(packet_no_rejected_packet_number));
-  } else {
-    test::CompareCharArraysWithHexError(
-        "constructed packet", data->data(), data->length(),
-        AsChars(
-            QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-                ? packet_cid_be
-                : packet),
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? arraysize(packet_cid_be)
-            : arraysize(packet));
-  }
-}
-
-TEST_P(QuicFramerTest, BuildPublicResetPacket) {
-  FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false;
-  QuicPublicResetPacket reset_packet;
-  reset_packet.public_header.connection_id = kConnectionId;
-  reset_packet.public_header.reset_flag = true;
-  reset_packet.public_header.version_flag = false;
-  reset_packet.rejected_packet_number = kPacketNumber;
-  reset_packet.nonce_proof = kNonceProof;
-
-  // clang-format off
-  unsigned char packet[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0A,
-    // connection_id
-    0x10, 0x32, 0x54, 0x76,
-    0x98, 0xBA, 0xDC, 0xFE,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (2) + padding
-    0x02, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // tag kRSEQ
-    'R', 'S', 'E', 'Q',
-    // end offset 16
-    0x10, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-    // rejected packet number
-    0xBC, 0x9A, 0x78, 0x56,
-    0x34, 0x12, 0x00, 0x00,
-  };
-
-  unsigned char packet_cid_be[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0A,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (2) + padding
-    0x02, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // tag kRSEQ
-    'R', 'S', 'E', 'Q',
-    // end offset 16
-    0x10, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-    // rejected packet number
-    0xBC, 0x9A, 0x78, 0x56,
-    0x34, 0x12, 0x00, 0x00,
-  };
-
-  unsigned char packet_no_rejected_packet_number[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0A,
-    // connection_id
-    0x10, 0x32, 0x54, 0x76,
-    0x98, 0xBA, 0xDC, 0xFE,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (1) + padding
-    0x01, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-  };
-
-  unsigned char packet_no_rejected_packet_number_cid_be[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0A,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (1) + padding
-    0x01, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-  };
-  // clang-format on
-
-  std::unique_ptr<QuicEncryptedPacket> data(
-      framer_.BuildPublicResetPacket(reset_packet));
-  ASSERT_TRUE(data != nullptr);
-
-  if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) {
-    test::CompareCharArraysWithHexError(
-        "constructed packet", data->data(), data->length(),
-        AsChars(
-            QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-                ? packet_no_rejected_packet_number_cid_be
-                : packet_no_rejected_packet_number),
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? arraysize(packet_no_rejected_packet_number_cid_be)
-            : arraysize(packet_no_rejected_packet_number));
-  } else {
-    test::CompareCharArraysWithHexError(
-        "constructed packet", data->data(), data->length(),
-        AsChars(
-            QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-                ? packet_cid_be
-                : packet),
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? arraysize(packet_cid_be)
-            : arraysize(packet));
-  }
-}
-
 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) {
   FLAGS_quic_reloadable_flag_quic_use_old_public_reset_packets = false;
   QuicPublicResetPacket reset_packet;
   reset_packet.public_header.connection_id = kConnectionId;
   reset_packet.public_header.reset_flag = true;
   reset_packet.public_header.version_flag = false;
-  reset_packet.rejected_packet_number = kPacketNumber;
   reset_packet.nonce_proof = kNonceProof;
   reset_packet.client_address =
       QuicSocketAddress(QuicIpAddress::Loopback4(), 0x1234);
 
   // clang-format off
   unsigned char packet[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0A,
-    // connection_id
-    0x10, 0x32, 0x54, 0x76,
-    0x98, 0xBA, 0xDC, 0xFE,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (3) + padding
-    0x03, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // tag kRSEQ
-    'R', 'S', 'E', 'Q',
-    // end offset 16
-    0x10, 0x00, 0x00, 0x00,
-    // tag kCADR
-    'C', 'A', 'D', 'R',
-    // end offset 24
-    0x18, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-    // rejected packet number
-    0xBC, 0x9A, 0x78, 0x56,
-    0x34, 0x12, 0x00, 0x00,
-    // client address
-    0x02, 0x00,
-    0x7F, 0x00, 0x00, 0x01,
-    0x34, 0x12,
-  };
-
-  unsigned char packet_cid_be[] = {
-    // public flags (public reset, 8 byte ConnectionId)
-    0x0A,
-    // connection_id
-    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
-    // message tag (kPRST)
-    'P', 'R', 'S', 'T',
-    // num_entries (3) + padding
-    0x03, 0x00, 0x00, 0x00,
-    // tag kRNON
-    'R', 'N', 'O', 'N',
-    // end offset 8
-    0x08, 0x00, 0x00, 0x00,
-    // tag kRSEQ
-    'R', 'S', 'E', 'Q',
-    // end offset 16
-    0x10, 0x00, 0x00, 0x00,
-    // tag kCADR
-    'C', 'A', 'D', 'R',
-    // end offset 24
-    0x18, 0x00, 0x00, 0x00,
-    // nonce proof
-    0x89, 0x67, 0x45, 0x23,
-    0x01, 0xEF, 0xCD, 0xAB,
-    // rejected packet number
-    0xBC, 0x9A, 0x78, 0x56,
-    0x34, 0x12, 0x00, 0x00,
-    // client address
-    0x02, 0x00,
-    0x7F, 0x00, 0x00, 0x01,
-    0x34, 0x12,
-  };
-
-  unsigned char packet_no_rejected_packet_number[] = {
       // public flags (public reset, 8 byte ConnectionId)
       0x0A,
       // connection_id
@@ -5135,11 +6547,12 @@
       0x34, 0x12,
   };
 
-  unsigned char packet_no_rejected_packet_number_cid_be[] = {
+  unsigned char packet_cid_be[] = {
       // public flags (public reset, 8 byte ConnectionId)
       0x0A,
       // connection_id
-      0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+      0xFE, 0xDC, 0xBA, 0x98,
+      0x76, 0x54, 0x32, 0x10,
       // message tag (kPRST)
       'P', 'R', 'S', 'T',
       // num_entries (2) + padding
@@ -5166,29 +6579,16 @@
       framer_.BuildPublicResetPacket(reset_packet));
   ASSERT_TRUE(data != nullptr);
 
-  if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) {
-    test::CompareCharArraysWithHexError(
-        "constructed packet", data->data(), data->length(),
-        AsChars(
-            QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-                ? packet_no_rejected_packet_number_cid_be
-                : packet_no_rejected_packet_number),
+  test::CompareCharArraysWithHexError(
+      "constructed packet", data->data(), data->length(),
+      AsChars(
+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
+              ? packet_cid_be
+              : packet),
 
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? arraysize(packet_no_rejected_packet_number_cid_be)
-            : arraysize(packet_no_rejected_packet_number));
-  } else {
-    test::CompareCharArraysWithHexError(
-        "constructed packet", data->data(), data->length(),
-        AsChars(
-            QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-                ? packet_cid_be
-                : packet),
-
-        QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-            ? arraysize(packet_cid_be)
-            : arraysize(packet));
-  }
+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
+          ? arraysize(packet_cid_be)
+          : arraysize(packet));
 }
 
 TEST_P(QuicFramerTest, EncryptPacket) {
@@ -5226,17 +6626,46 @@
     'i',  'j',  'k',  'l',
     'm',  'n',  'o',  'p',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // redundancy
+    'a',  'b',  'c',  'd',
+    'e',  'f',  'g',  'h',
+    'i',  'j',  'k',  'l',
+    'm',  'n',  'o',  'p',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // redundancy
+    'a',  'b',  'c',  'd',
+    'e',  'f',  'g',  'h',
+    'i',  'j',  'k',  'l',
+    'm',  'n',  'o',  'p',
+  };
   // clang-format on
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
 
   std::unique_ptr<QuicPacket> raw(new QuicPacket(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false, PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
+      AsChars(packets[index]), arraysize(packet), false,
+      PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
       !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER));
   char buffer[kMaxPacketSize];
   size_t encrypted_length = framer_.EncryptPayload(
@@ -5285,17 +6714,51 @@
     'i',  'j',  'k',  'l',
     'm',  'n',  'o',  'p',
   };
+
+  unsigned char packet39[] = {
+    // public flags (version, 8 byte connection_id)
+    0x39,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // version tag
+    'Q', '.', '1', '0',
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // redundancy
+    'a',  'b',  'c',  'd',
+    'e',  'f',  'g',  'h',
+    'i',  'j',  'k',  'l',
+    'm',  'n',  'o',  'p',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (version, 8 byte connection_id)
+    0x39,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // version tag
+    'Q', '.', '1', '0',
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // redundancy
+    'a',  'b',  'c',  'd',
+    'e',  'f',  'g',  'h',
+    'i',  'j',  'k',  'l',
+    'm',  'n',  'o',  'p',
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   std::unique_ptr<QuicPacket> raw(new QuicPacket(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false, PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
+      AsChars(packets[index]), arraysize(packet), false,
+      PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
       !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER));
   char buffer[kMaxPacketSize];
   size_t encrypted_length = framer_.EncryptPayload(
@@ -5485,8 +6948,88 @@
     0xBE, 0x9A, 0x78, 0x56,
     0x34, 0x12,
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+
+    // frame type (ack frame)
+    0x40,
+    // least packet number awaiting an ack
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xA0,
+    // largest observed packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBF,
+    // num missing packets
+    0x01,
+    // missing packet
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBE,
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x38,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+
+    // frame type (ack frame)
+    0x40,
+    // least packet number awaiting an ack
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xA0,
+    // largest observed packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBF,
+    // num missing packets
+    0x01,
+    // missing packet
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBE,
+  };
   // clang-format on
 
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
   MockFramerVisitor visitor;
   framer_.set_visitor(&visitor);
   EXPECT_CALL(visitor, OnPacket());
@@ -5498,15 +7041,8 @@
   EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true));
   EXPECT_CALL(visitor, OnDecryptedPacket(_));
 
-  QuicEncryptedPacket encrypted(
-      AsChars(
-          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-              ? packet_cid_be
-              : packet),
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet),
-      false);
+  QuicEncryptedPacket encrypted(AsChars(packets[index]), arraysize(packet),
+                                false);
   EXPECT_TRUE(framer_.ProcessPacket(encrypted));
   EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
 }
@@ -5675,16 +7211,67 @@
     'o',  ' ',  'w',  'o',
     'r',  'l',  'd',  '!',
   };
+
+  unsigned char packet39[] = {
+    // public flags (8 byte connection_id)
+    0x3C,
+    // connection_id
+    0x10, 0x32, 0x54, 0x76,
+    0x98, 0xBA, 0xDC, 0xFE,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+    // private flags
+    0x00,
+
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+  };
+
+  unsigned char packet_cid_be39[] = {
+    // public flags (8 byte connection_id)
+    0x3C,
+    // connection_id
+    0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
+    // packet number
+    0x12, 0x34, 0x56, 0x78,
+    0x9A, 0xBC,
+    // private flags
+    0x00,
+
+    // frame type (stream frame with fin)
+    0xFF,
+    // stream id
+    0x01, 0x02, 0x03, 0x04,
+    // offset
+    0xBA, 0x98, 0xFE, 0xDC,
+    0x32, 0x10, 0x76, 0x54,
+    // data length
+    0x00, 0x0c,
+    // data
+    'h',  'e',  'l',  'l',
+    'o',  ' ',  'w',  'o',
+    'r',  'l',  'd',  '!',
+  };
   // clang-format on
 
-  QuicFramerFuzzFunc(
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? packet_cid_be
-          : packet,
-      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-          ? arraysize(packet_cid_be)
-          : arraysize(packet));
+  unsigned char* packets[] = {packet, packet_cid_be, packet39, packet_cid_be39};
+  size_t index = GetPacketIndex(framer_.version(), framer_.perspective());
+
+  QuicFramerFuzzFunc(packets[index], arraysize(packet));
 }
 
+}  // namespace
 }  // namespace test
 }  // namespace net
diff --git a/src/net/quic/core/quic_framer_test.cc.rej b/src/net/quic/core/quic_framer_test.cc.rej
deleted file mode 100644
index 000b82a..0000000
--- a/src/net/quic/core/quic_framer_test.cc.rej
+++ /dev/null
@@ -1,178 +0,0 @@
---- quic/core/quic_framer_test.cc	2017-04-04 14:43:56.000000000 -0400
-+++ quic/core/quic_framer_test.cc	2017-04-06 12:13:22.000000000 -0400
-@@ -2014,10 +2041,11 @@
-   // clang-format on
- 
-   QuicEncryptedPacket encrypted(
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet),
-       false);
-@@ -2052,10 +2080,11 @@
-   // clang-format on
- 
-   QuicEncryptedPacket encrypted(
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet),
-       false);
-@@ -2112,10 +2141,11 @@
-   // clang-format on
- 
-   QuicEncryptedPacket encrypted(
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet),
-       false);
-@@ -2282,10 +2313,11 @@
-   // clang-format on
- 
-   QuicEncryptedPacket encrypted(
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet),
-       false);
-@@ -2436,10 +2469,11 @@
-   // clang-format on
- 
-   QuicEncryptedPacket encrypted(
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet),
-       false);
-@@ -3934,10 +3989,11 @@
- 
-   test::CompareCharArraysWithHexError(
-       "constructed packet", data->data(), data->length(),
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet));
- }
-@@ -4022,10 +4078,11 @@
- 
-   test::CompareCharArraysWithHexError(
-       "constructed packet", data->data(), data->length(),
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet));
- }
-@@ -4103,10 +4161,11 @@
- 
-   test::CompareCharArraysWithHexError(
-       "constructed packet", data->data(), data->length(),
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet));
- }
-@@ -4182,10 +4242,11 @@
- 
-   test::CompareCharArraysWithHexError(
-       "constructed packet", data->data(), data->length(),
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet));
- }
-@@ -4263,10 +4325,11 @@
- 
-   test::CompareCharArraysWithHexError(
-       "constructed packet", data->data(), data->length(),
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet));
- }
-@@ -4335,10 +4398,11 @@
- 
-   test::CompareCharArraysWithHexError(
-       "constructed packet", data->data(), data->length(),
--      AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id
--                  ? packet_cid_be
--                  : packet),
--      FLAGS_quic_restart_flag_quic_big_endian_connection_id
-+      AsChars(
-+          QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-+              ? packet_cid_be
-+              : packet),
-+      QuicUtils::IsConnectionIdWireFormatBigEndian(framer_.perspective())
-           ? arraysize(packet_cid_be)
-           : arraysize(packet));
- }
diff --git a/src/net/quic/core/quic_header_list_test.cc b/src/net/quic/core/quic_header_list_test.cc
index 579c028..733d1eb 100644
--- a/src/net/quic/core/quic_header_list_test.cc
+++ b/src/net/quic/core/quic_header_list_test.cc
@@ -5,15 +5,17 @@
 #include "net/quic/core/quic_header_list.h"
 
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
 namespace net {
 
+class QuicHeaderListTest : public QuicTest {};
+
 // This test verifies that QuicHeaderList accumulates header pairs in order.
-TEST(QuicHeaderListTest, OnHeader) {
+TEST_F(QuicHeaderListTest, OnHeader) {
   QuicHeaderList headers;
   headers.OnHeader("foo", "bar");
   headers.OnHeader("april", "fools");
@@ -22,7 +24,7 @@
   EXPECT_EQ("{ foo=bar, april=fools, beep=, }", headers.DebugString());
 }
 
-TEST(QuicHeaderListTest, TooLarge) {
+TEST_F(QuicHeaderListTest, TooLarge) {
   QuicHeaderList headers;
   string key = "key";
   string value(1 << 18, '1');
@@ -33,7 +35,7 @@
   EXPECT_EQ("{ }", headers.DebugString());
 }
 
-TEST(QuicHeaderListTest, NotTooLarge) {
+TEST_F(QuicHeaderListTest, NotTooLarge) {
   QuicHeaderList headers;
   headers.set_max_uncompressed_header_bytes(1 << 20);
   string key = "key";
@@ -44,7 +46,7 @@
 }
 
 // This test verifies that QuicHeaderList is copyable and assignable.
-TEST(QuicHeaderListTest, IsCopyableAndAssignable) {
+TEST_F(QuicHeaderListTest, IsCopyableAndAssignable) {
   QuicHeaderList headers;
   headers.OnHeader("foo", "bar");
   headers.OnHeader("april", "fools");
diff --git a/src/net/quic/core/quic_headers_stream.cc.orig b/src/net/quic/core/quic_headers_stream.cc.orig
new file mode 100644
index 0000000..8d53a8f
--- /dev/null
+++ b/src/net/quic/core/quic_headers_stream.cc.orig
@@ -0,0 +1,715 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/quic/core/quic_headers_stream.h"
+
+#include <utility>
+
+#include "base/macros.h"
+#include "base/metrics/histogram_macros.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
+#include "net/quic/core/quic_bug_tracker.h"
+#include "net/quic/core/quic_flags.h"
+#include "net/quic/core/quic_header_list.h"
+#include "net/quic/core/quic_server_session_base.h"
+#include "net/quic/core/quic_spdy_session.h"
+#include "net/quic/core/quic_time.h"
+#include "net/spdy/spdy_protocol.h"
+
+using base::StringPiece;
+using net::HTTP2;
+using net::SpdyFrameType;
+using std::string;
+
+namespace net {
+
+namespace {
+
+class HeaderTableDebugVisitor : public HpackHeaderTable::DebugVisitorInterface {
+ public:
+  HeaderTableDebugVisitor(
+      const QuicClock* clock,
+      std::unique_ptr<QuicHeadersStream::HpackDebugVisitor> visitor)
+      : clock_(clock), headers_stream_hpack_visitor_(std::move(visitor)) {}
+
+  int64_t OnNewEntry(const HpackEntry& entry) override {
+    DVLOG(1) << entry.GetDebugString();
+    return (clock_->ApproximateNow() - QuicTime::Zero()).ToMicroseconds();
+  }
+
+  void OnUseEntry(const HpackEntry& entry) override {
+    const QuicTime::Delta elapsed(
+        clock_->ApproximateNow() -
+        QuicTime::Delta::FromMicroseconds(entry.time_added()) -
+        QuicTime::Zero());
+    DVLOG(1) << entry.GetDebugString() << " " << elapsed.ToMilliseconds()
+             << " ms";
+    headers_stream_hpack_visitor_->OnUseEntry(elapsed);
+  }
+
+ private:
+  const QuicClock* clock_;
+  std::unique_ptr<QuicHeadersStream::HpackDebugVisitor>
+      headers_stream_hpack_visitor_;
+
+  DISALLOW_COPY_AND_ASSIGN(HeaderTableDebugVisitor);
+};
+
+// When forced HOL blocking is enabled, extra bytes in the form of
+// HTTP/2 DATA frame headers are inserted on the way down to the
+// session layer.  |ForceAckListener| filters the |OnPacketAcked()|
+// notifications generated by the session layer to not count the extra
+// bytes.  Otherwise, code that is using ack listener on streams might
+// consider it an error if more bytes are acked than were written to
+// the stream, it is the case with some internal stats gathering code.
+class ForceHolAckListener : public QuicAckListenerInterface {
+ public:
+  // |extra_bytes| should be initialized to the size of the HTTP/2
+  // DATA frame header inserted when forced HOL blocking is enabled.
+  ForceHolAckListener(QuicAckListenerInterface* stream_ack_listener,
+                      int extra_bytes)
+      : stream_ack_listener_(stream_ack_listener), extra_bytes_(extra_bytes) {
+    DCHECK_GE(extra_bytes, 0);
+  }
+
+  void OnPacketAcked(int acked_bytes, QuicTime::Delta ack_delay_time) override {
+    if (extra_bytes_ > 0) {
+      // Don't count the added HTTP/2 DATA frame header bytes
+      int delta = std::min(extra_bytes_, acked_bytes);
+      extra_bytes_ -= delta;
+      acked_bytes -= delta;
+    }
+    stream_ack_listener_->OnPacketAcked(acked_bytes, ack_delay_time);
+  }
+
+  void OnPacketRetransmitted(int retransmitted_bytes) override {
+    stream_ack_listener_->OnPacketRetransmitted(retransmitted_bytes);
+  }
+
+ private:
+  ~ForceHolAckListener() override {}
+
+  scoped_refptr<QuicAckListenerInterface> stream_ack_listener_;
+  int extra_bytes_;
+
+  DISALLOW_COPY_AND_ASSIGN(ForceHolAckListener);
+};
+
+}  // namespace
+
+QuicHeadersStream::HpackDebugVisitor::HpackDebugVisitor() {}
+
+QuicHeadersStream::HpackDebugVisitor::~HpackDebugVisitor() {}
+
+// A SpdyFramer visitor which passed SYN_STREAM and SYN_REPLY frames to
+// the QuicSpdyStream, and closes the connection if any unexpected frames
+// are received.
+class QuicHeadersStream::SpdyFramerVisitor
+    : public SpdyFramerVisitorInterface,
+      public SpdyFramerDebugVisitorInterface {
+ public:
+  explicit SpdyFramerVisitor(QuicHeadersStream* stream) : stream_(stream) {}
+
+  // SpdyFramerVisitorInterface implementation
+  void OnSynStream(SpdyStreamId stream_id,
+                   SpdyStreamId associated_stream_id,
+                   SpdyPriority priority,
+                   bool fin,
+                   bool unidirectional) override {
+    CloseConnection("SPDY SYN_STREAM frame received.");
+  }
+
+  void OnSynReply(SpdyStreamId stream_id, bool fin) override {
+    CloseConnection("SPDY SYN_REPLY frame received.");
+  }
+
+  bool OnControlFrameHeaderData(SpdyStreamId stream_id,
+                                const char* header_data,
+                                size_t len) override {
+    if (!stream_->IsConnected()) {
+      return false;
+    }
+    stream_->OnControlFrameHeaderData(stream_id, header_data, len);
+    return true;
+  }
+
+  void OnStreamFrameData(SpdyStreamId stream_id,
+                         const char* data,
+                         size_t len) override {
+    if (stream_->OnStreamFrameData(stream_id, data, len)) {
+      return;
+    }
+    CloseConnection("SPDY DATA frame received.");
+  }
+
+  void OnStreamEnd(SpdyStreamId stream_id) override {
+    // The framer invokes OnStreamEnd after processing a SYN_STREAM
+    // or SYN_REPLY frame that had the fin bit set.
+  }
+
+  void OnStreamPadding(SpdyStreamId stream_id, size_t len) override {
+    CloseConnection("SPDY frame padding received.");
+  }
+
+  SpdyHeadersHandlerInterface* OnHeaderFrameStart(
+      SpdyStreamId /* stream_id */) override {
+    return &header_list_;
+  }
+
+  void OnHeaderFrameEnd(SpdyStreamId /* stream_id */,
+                        bool end_headers) override {
+    if (end_headers) {
+      if (stream_->IsConnected()) {
+        stream_->OnHeaderList(header_list_);
+      }
+      header_list_.Clear();
+    }
+  }
+
+  void OnError(SpdyFramer* framer) override {
+    CloseConnection(base::StringPrintf(
+        "SPDY framing error: %s",
+        SpdyFramer::ErrorCodeToString(framer->error_code())));
+  }
+
+  void OnDataFrameHeader(SpdyStreamId stream_id,
+                         size_t length,
+                         bool fin) override {
+    if (stream_->OnDataFrameHeader(stream_id, length, fin)) {
+      return;
+    }
+    CloseConnection("SPDY DATA frame received.");
+  }
+
+  void OnRstStream(SpdyStreamId stream_id,
+                   SpdyRstStreamStatus status) override {
+    CloseConnection("SPDY RST_STREAM frame received.");
+  }
+
+  void OnSetting(SpdySettingsIds id, uint8_t flags, uint32_t value) override {
+    if (!FLAGS_quic_respect_http2_settings_frame) {
+      CloseConnection("SPDY SETTINGS frame received.");
+      return;
+    }
+    switch (id) {
+      case SETTINGS_HEADER_TABLE_SIZE:
+        stream_->UpdateHeaderEncoderTableSize(value);
+        break;
+      case SETTINGS_ENABLE_PUSH:
+        if (FLAGS_quic_enable_server_push_by_default &&
+            stream_->session()->perspective() == Perspective::IS_SERVER) {
+          // See rfc7540, Section 6.5.2.
+          if (value > 1) {
+            CloseConnection("Invalid value for SETTINGS_ENABLE_PUSH: " +
+                            base::IntToString(value));
+            return;
+          }
+          stream_->UpdateEnableServerPush(value > 0);
+          break;
+        } else {
+          CloseConnection("Unsupported field of HTTP/2 SETTINGS frame: " +
+                          base::IntToString(id));
+        }
+        break;
+      // TODO(fayang): Need to support SETTINGS_MAX_HEADER_LIST_SIZE when
+      // clients are actually sending it.
+      default:
+        CloseConnection("Unsupported field of HTTP/2 SETTINGS frame: " +
+                        base::IntToString(id));
+    }
+  }
+
+  void OnSettingsAck() override {
+    if (!FLAGS_quic_respect_http2_settings_frame) {
+      CloseConnection("SPDY SETTINGS frame received.");
+    }
+  }
+
+  void OnSettingsEnd() override {
+    if (!FLAGS_quic_respect_http2_settings_frame) {
+      CloseConnection("SPDY SETTINGS frame received.");
+    }
+  }
+
+  void OnPing(SpdyPingId unique_id, bool is_ack) override {
+    CloseConnection("SPDY PING frame received.");
+  }
+
+  void OnGoAway(SpdyStreamId last_accepted_stream_id,
+                SpdyGoAwayStatus status) override {
+    CloseConnection("SPDY GOAWAY frame received.");
+  }
+
+  void OnHeaders(SpdyStreamId stream_id,
+                 bool has_priority,
+                 int weight,
+                 SpdyStreamId parent_stream_id,
+                 bool exclusive,
+                 bool fin,
+                 bool end) override {
+    if (!stream_->IsConnected()) {
+      return;
+    }
+
+    // TODO(mpw): avoid down-conversion and plumb SpdyStreamPrecedence through
+    // QuicHeadersStream.
+    SpdyPriority priority =
+        has_priority ? Http2WeightToSpdy3Priority(weight) : 0;
+    stream_->OnHeaders(stream_id, has_priority, priority, fin);
+  }
+
+  void OnWindowUpdate(SpdyStreamId stream_id, int delta_window_size) override {
+    CloseConnection("SPDY WINDOW_UPDATE frame received.");
+  }
+
+  void OnPushPromise(SpdyStreamId stream_id,
+                     SpdyStreamId promised_stream_id,
+                     bool end) override {
+    if (!stream_->supports_push_promise()) {
+      CloseConnection("PUSH_PROMISE not supported.");
+      return;
+    }
+    if (!stream_->IsConnected()) {
+      return;
+    }
+    stream_->OnPushPromise(stream_id, promised_stream_id, end);
+  }
+
+  void OnContinuation(SpdyStreamId stream_id, bool end) override {}
+
+  void OnPriority(SpdyStreamId stream_id,
+                  SpdyStreamId parent_id,
+                  int weight,
+                  bool exclusive) override {
+    CloseConnection("SPDY PRIORITY frame received.");
+  }
+
+  bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) override {
+    CloseConnection("Unknown frame type received.");
+    return false;
+  }
+
+  // SpdyFramerDebugVisitorInterface implementation
+  void OnSendCompressedFrame(SpdyStreamId stream_id,
+                             SpdyFrameType type,
+                             size_t payload_len,
+                             size_t frame_len) override {
+    if (payload_len == 0) {
+      QUIC_BUG << "Zero payload length.";
+      return;
+    }
+    int compression_pct = 100 - (100 * frame_len) / payload_len;
+    DVLOG(1) << "Net.QuicHpackCompressionPercentage: " << compression_pct;
+    UMA_HISTOGRAM_PERCENTAGE("Net.QuicHpackCompressionPercentage",
+                             compression_pct);
+  }
+
+  void OnReceiveCompressedFrame(SpdyStreamId stream_id,
+                                SpdyFrameType type,
+                                size_t frame_len) override {
+    if (stream_->IsConnected()) {
+      stream_->OnCompressedFrameSize(frame_len);
+    }
+  }
+
+ private:
+  void CloseConnection(const string& details) {
+    if (stream_->IsConnected()) {
+      stream_->CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
+                                          details);
+    }
+  }
+
+ private:
+  QuicHeadersStream* stream_;
+  QuicHeaderList header_list_;
+
+  DISALLOW_COPY_AND_ASSIGN(SpdyFramerVisitor);
+};
+
+QuicHeadersStream::QuicHeadersStream(QuicSpdySession* session)
+    : ReliableQuicStream(kHeadersStreamId, session),
+      spdy_session_(session),
+      stream_id_(kInvalidStreamId),
+      promised_stream_id_(kInvalidStreamId),
+      fin_(false),
+      frame_len_(0),
+      uncompressed_frame_len_(0),
+      supports_push_promise_(session->perspective() == Perspective::IS_CLIENT),
+      cur_max_timestamp_(QuicTime::Zero()),
+      prev_max_timestamp_(QuicTime::Zero()),
+      spdy_framer_(HTTP2),
+      spdy_framer_visitor_(new SpdyFramerVisitor(this)) {
+  spdy_framer_.set_visitor(spdy_framer_visitor_.get());
+  spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get());
+  // The headers stream is exempt from connection level flow control.
+  DisableConnectionFlowControlForThisStream();
+}
+
+QuicHeadersStream::~QuicHeadersStream() {}
+
+size_t QuicHeadersStream::WriteHeaders(QuicStreamId stream_id,
+                                       SpdyHeaderBlock headers,
+                                       bool fin,
+                                       SpdyPriority priority,
+                                       QuicAckListenerInterface* ack_listener) {
+  SpdyHeadersIR headers_frame(stream_id, std::move(headers));
+  headers_frame.set_fin(fin);
+  if (session()->perspective() == Perspective::IS_CLIENT) {
+    headers_frame.set_has_priority(true);
+    headers_frame.set_weight(Spdy3PriorityToHttp2Weight(priority));
+  }
+  SpdySerializedFrame frame(spdy_framer_.SerializeFrame(headers_frame));
+  WriteOrBufferData(StringPiece(frame.data(), frame.size()), false,
+                    ack_listener);
+  return frame.size();
+}
+
+size_t QuicHeadersStream::WritePushPromise(QuicStreamId original_stream_id,
+                                           QuicStreamId promised_stream_id,
+                                           SpdyHeaderBlock headers) {
+  if (session()->perspective() == Perspective::IS_CLIENT) {
+    QUIC_BUG << "Client shouldn't send PUSH_PROMISE";
+    return 0;
+  }
+
+  SpdyPushPromiseIR push_promise(original_stream_id, promised_stream_id,
+                                 std::move(headers));
+
+  // PUSH_PROMISE must not be the last frame sent out, at least followed by
+  // response headers.
+  push_promise.set_fin(false);
+
+  SpdySerializedFrame frame(spdy_framer_.SerializeFrame(push_promise));
+  WriteOrBufferData(StringPiece(frame.data(), frame.size()), false, nullptr);
+  return frame.size();
+}
+
+void QuicHeadersStream::WriteDataFrame(
+    QuicStreamId id,
+    StringPiece data,
+    bool fin,
+    QuicAckListenerInterface* ack_notifier_delegate) {
+  SpdyDataIR spdy_data(id, data);
+  spdy_data.set_fin(fin);
+  SpdySerializedFrame frame(spdy_framer_.SerializeFrame(spdy_data));
+  scoped_refptr<ForceHolAckListener> ack_listener;
+  if (ack_notifier_delegate != nullptr) {
+    ack_listener = new ForceHolAckListener(ack_notifier_delegate,
+                                           frame.size() - data.length());
+  }
+  // Use buffered writes so that coherence of framing is preserved
+  // between streams.
+  WriteOrBufferData(StringPiece(frame.data(), frame.size()), false,
+                    ack_listener.get());
+}
+
+QuicConsumedData QuicHeadersStream::WritevStreamData(
+    QuicStreamId id,
+    QuicIOVector iov,
+    QuicStreamOffset offset,
+    bool fin,
+    QuicAckListenerInterface* ack_notifier_delegate) {
+  const size_t max_len = kSpdyInitialFrameSizeLimit -
+                         SpdyConstants::GetDataFrameMinimumSize(HTTP2);
+
+  QuicConsumedData result(0, false);
+  size_t total_length = iov.total_length;
+
+  if (!FLAGS_quic_bugfix_fhol_writev_fin_only) {
+    // Encapsulate the data into HTTP/2 DATA frames.  The outer loop
+    // handles each element of the source iov, the inner loop handles
+    // the possibility of fragmenting eacho of those into multiple DATA
+    // frames, as the DATA frames have a max size of 16KB.
+    for (int i = 0; i < iov.iov_count; i++) {
+      size_t offset = 0;
+      const struct iovec* src_iov = &iov.iov[i];
+      do {
+        size_t len = std::min(std::min(src_iov->iov_len - offset, max_len),
+                              total_length);
+        char* data = static_cast<char*>(src_iov->iov_base) + offset;
+        SpdyDataIR spdy_data(id, StringPiece(data, len));
+        offset += len;
+        // fin handling, only set it for the final HTTP/2 DATA frame.
+        bool last_iov = i == iov.iov_count - 1;
+        bool last_fragment_within_iov = offset >= src_iov->iov_len;
+        bool frame_fin = (last_iov && last_fragment_within_iov) ? fin : false;
+        spdy_data.set_fin(frame_fin);
+        if (frame_fin) {
+          result.fin_consumed = true;
+        }
+        SpdySerializedFrame frame(spdy_framer_.SerializeFrame(spdy_data));
+        DVLOG(1) << "Encapsulating in DATA frame for stream " << id << " len "
+                 << len << " fin " << spdy_data.fin() << " remaining "
+                 << src_iov->iov_len - offset;
+
+        scoped_refptr<ForceHolAckListener> ack_listener;
+        if (ack_notifier_delegate != nullptr) {
+          ack_listener = new ForceHolAckListener(ack_notifier_delegate,
+                                                 frame.size() - len);
+        }
+
+        WriteOrBufferData(StringPiece(frame.data(), frame.size()), false,
+                          ack_listener.get());
+        result.bytes_consumed += len;
+        total_length -= len;
+        if (total_length <= 0) {
+          return result;
+        }
+      } while (offset < src_iov->iov_len);
+    }
+  } else {
+    if (total_length == 0 && fin) {
+      WriteDataFrame(id, StringPiece(), true, ack_notifier_delegate);
+      result.fin_consumed = true;
+      return result;
+    }
+
+    // Encapsulate the data into HTTP/2 DATA frames.  The outer loop
+    // handles each element of the source iov, the inner loop handles
+    // the possibility of fragmenting each of those into multiple DATA
+    // frames, as the DATA frames have a max size of 16KB.
+    for (int i = 0; i < iov.iov_count; i++) {
+      size_t src_iov_offset = 0;
+      const struct iovec* src_iov = &iov.iov[i];
+      do {
+        if (queued_data_bytes() > 0) {
+          // Limit the amount of buffering to the minimum needed to
+          // preserve framing.
+          return result;
+        }
+        size_t len = std::min(
+            std::min(src_iov->iov_len - src_iov_offset, max_len), total_length);
+        char* data = static_cast<char*>(src_iov->iov_base) + src_iov_offset;
+        src_iov_offset += len;
+        offset += len;
+        // fin handling, only set it for the final HTTP/2 DATA frame.
+        bool last_iov = i == iov.iov_count - 1;
+        bool last_fragment_within_iov = src_iov_offset >= src_iov->iov_len;
+        bool frame_fin = (last_iov && last_fragment_within_iov) ? fin : false;
+        WriteDataFrame(id, StringPiece(data, len), frame_fin,
+                       ack_notifier_delegate);
+        result.bytes_consumed += len;
+        if (frame_fin) {
+          result.fin_consumed = true;
+        }
+        DCHECK_GE(total_length, len);
+        total_length -= len;
+        if (total_length <= 0) {
+          return result;
+        }
+      } while (src_iov_offset < src_iov->iov_len);
+    }
+  }
+
+  return result;
+}
+
+void QuicHeadersStream::OnDataAvailable() {
+  char buffer[1024];
+  struct iovec iov;
+  QuicTime timestamp(QuicTime::Zero());
+  while (true) {
+    iov.iov_base = buffer;
+    iov.iov_len = arraysize(buffer);
+    if (!sequencer()->GetReadableRegion(&iov, &timestamp)) {
+      // No more data to read.
+      break;
+    }
+    DCHECK(timestamp.IsInitialized());
+    cur_max_timestamp_ = std::max(timestamp, cur_max_timestamp_);
+    if (spdy_framer_.ProcessInput(static_cast<char*>(iov.iov_base),
+                                  iov.iov_len) != iov.iov_len) {
+      // Error processing data.
+      return;
+    }
+    sequencer()->MarkConsumed(iov.iov_len);
+  }
+}
+
+void QuicHeadersStream::OnHeaders(SpdyStreamId stream_id,
+                                  bool has_priority,
+                                  SpdyPriority priority,
+                                  bool fin) {
+  if (has_priority) {
+    if (session()->perspective() == Perspective::IS_CLIENT) {
+      CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
+                                 "Server must not send priorities.");
+      return;
+    }
+    spdy_session_->OnStreamHeadersPriority(stream_id, priority);
+  } else {
+    if (session()->perspective() == Perspective::IS_SERVER) {
+      CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA,
+                                 "Client must send priorities.");
+      return;
+    }
+  }
+  DCHECK_EQ(kInvalidStreamId, stream_id_);
+  DCHECK_EQ(kInvalidStreamId, promised_stream_id_);
+  stream_id_ = stream_id;
+  fin_ = fin;
+}
+
+void QuicHeadersStream::OnPushPromise(SpdyStreamId stream_id,
+                                      SpdyStreamId promised_stream_id,
+                                      bool end) {
+  DCHECK_EQ(kInvalidStreamId, stream_id_);
+  DCHECK_EQ(kInvalidStreamId, promised_stream_id_);
+  stream_id_ = stream_id;
+  promised_stream_id_ = promised_stream_id;
+}
+
+void QuicHeadersStream::OnControlFrameHeaderData(SpdyStreamId stream_id,
+                                                 const char* header_data,
+                                                 size_t len) {
+  DCHECK_EQ(stream_id_, stream_id);
+  if (len == 0) {
+    DCHECK_NE(0u, stream_id_);
+    DCHECK_NE(0u, frame_len_);
+    if (prev_max_timestamp_ > cur_max_timestamp_) {
+      // prev_max_timestamp_ > cur_max_timestamp_ implies that
+      // headers from lower numbered streams actually came off the
+      // wire after headers for the current stream, hence there was
+      // HOL blocking.
+      QuicTime::Delta delta = prev_max_timestamp_ - cur_max_timestamp_;
+      DVLOG(1) << "stream " << stream_id
+               << ": Net.QuicSession.HeadersHOLBlockedTime "
+               << delta.ToMilliseconds();
+      spdy_session_->OnHeadersHeadOfLineBlocking(delta);
+    }
+    prev_max_timestamp_ = std::max(prev_max_timestamp_, cur_max_timestamp_);
+    cur_max_timestamp_ = QuicTime::Zero();
+    if (promised_stream_id_ == kInvalidStreamId) {
+      spdy_session_->OnStreamHeadersComplete(stream_id_, fin_, frame_len_);
+    } else {
+      spdy_session_->OnPromiseHeadersComplete(stream_id_, promised_stream_id_,
+                                              frame_len_);
+    }
+    if (uncompressed_frame_len_ != 0) {
+      int compression_pct = 100 - (100 * frame_len_) / uncompressed_frame_len_;
+      DVLOG(1) << "Net.QuicHpackDecompressionPercentage: " << compression_pct;
+      UMA_HISTOGRAM_PERCENTAGE("Net.QuicHpackDecompressionPercentage",
+                               compression_pct);
+    }
+    // Reset state for the next frame.
+    promised_stream_id_ = kInvalidStreamId;
+    stream_id_ = kInvalidStreamId;
+    fin_ = false;
+    frame_len_ = 0;
+    uncompressed_frame_len_ = 0;
+  } else {
+    uncompressed_frame_len_ += len;
+    if (promised_stream_id_ == kInvalidStreamId) {
+      spdy_session_->OnStreamHeaders(stream_id_, StringPiece(header_data, len));
+    } else {
+      spdy_session_->OnPromiseHeaders(stream_id_,
+                                      StringPiece(header_data, len));
+    }
+  }
+}
+
+void QuicHeadersStream::OnHeaderList(const QuicHeaderList& header_list) {
+  DVLOG(1) << "Received header list for stream " << stream_id_ << ": "
+           << header_list.DebugString();
+  if (prev_max_timestamp_ > cur_max_timestamp_) {
+    // prev_max_timestamp_ > cur_max_timestamp_ implies that
+    // headers from lower numbered streams actually came off the
+    // wire after headers for the current stream, hence there was
+    // HOL blocking.
+    QuicTime::Delta delta = prev_max_timestamp_ - cur_max_timestamp_;
+    DVLOG(1) << "stream " << stream_id_
+             << ": Net.QuicSession.HeadersHOLBlockedTime "
+             << delta.ToMilliseconds();
+    spdy_session_->OnHeadersHeadOfLineBlocking(delta);
+  }
+
+  prev_max_timestamp_ = std::max(prev_max_timestamp_, cur_max_timestamp_);
+  cur_max_timestamp_ = QuicTime::Zero();
+  if (promised_stream_id_ == kInvalidStreamId) {
+    spdy_session_->OnStreamHeaderList(stream_id_, fin_, frame_len_,
+                                      header_list);
+  } else {
+    spdy_session_->OnPromiseHeaderList(stream_id_, promised_stream_id_,
+                                       frame_len_, header_list);
+  }
+  // Reset state for the next frame.
+  promised_stream_id_ = kInvalidStreamId;
+  stream_id_ = kInvalidStreamId;
+  fin_ = false;
+  frame_len_ = 0;
+  uncompressed_frame_len_ = 0;
+}
+
+void QuicHeadersStream::OnCompressedFrameSize(size_t frame_len) {
+  frame_len_ += frame_len;
+}
+
+bool QuicHeadersStream::IsConnected() {
+  return session()->connection()->connected();
+}
+
+void QuicHeadersStream::DisableHpackDynamicTable() {
+  spdy_framer_.UpdateHeaderEncoderTableSize(0);
+}
+
+void QuicHeadersStream::SetHpackEncoderDebugVisitor(
+    std::unique_ptr<HpackDebugVisitor> visitor) {
+  spdy_framer_.SetEncoderHeaderTableDebugVisitor(
+      std::unique_ptr<HeaderTableDebugVisitor>(new HeaderTableDebugVisitor(
+          session()->connection()->helper()->GetClock(), std::move(visitor))));
+}
+
+void QuicHeadersStream::SetHpackDecoderDebugVisitor(
+    std::unique_ptr<HpackDebugVisitor> visitor) {
+  spdy_framer_.SetDecoderHeaderTableDebugVisitor(
+      std::unique_ptr<HeaderTableDebugVisitor>(new HeaderTableDebugVisitor(
+          session()->connection()->helper()->GetClock(), std::move(visitor))));
+}
+
+void QuicHeadersStream::UpdateHeaderEncoderTableSize(uint32_t value) {
+  spdy_framer_.UpdateHeaderEncoderTableSize(value);
+}
+
+void QuicHeadersStream::UpdateEnableServerPush(bool value) {
+  spdy_session_->set_server_push_enabled(value);
+}
+
+bool QuicHeadersStream::OnDataFrameHeader(QuicStreamId stream_id,
+                                          size_t length,
+                                          bool fin) {
+  if (!spdy_session_->force_hol_blocking()) {
+    return false;
+  }
+  if (!IsConnected()) {
+    return true;
+  }
+  DVLOG(1) << "DATA frame header for stream " << stream_id << " length "
+           << length << " fin " << fin;
+  fin_ = fin;
+  frame_len_ = length;
+  if (fin && length == 0) {
+    OnStreamFrameData(stream_id, "", 0);
+  }
+  return true;
+}
+
+bool QuicHeadersStream::OnStreamFrameData(QuicStreamId stream_id,
+                                          const char* data,
+                                          size_t len) {
+  if (!spdy_session_->force_hol_blocking()) {
+    return false;
+  }
+  if (!IsConnected()) {
+    return true;
+  }
+  frame_len_ -= len;
+  // Ignore fin_ while there is more data coming, if frame_len_ > 0.
+  spdy_session_->OnStreamFrameData(stream_id, data, len,
+                                   frame_len_ > 0 ? false : fin_);
+  return true;
+}
+
+}  // namespace net
diff --git a/src/net/quic/core/quic_headers_stream_test.cc b/src/net/quic/core/quic_headers_stream_test.cc
index 636208a..4a407c9 100644
--- a/src/net/quic/core/quic_headers_stream_test.cc
+++ b/src/net/quic/core/quic_headers_stream_test.cc
@@ -18,6 +18,7 @@
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_str_cat.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
 #include "net/quic/test_tools/quic_spdy_session_peer.h"
 #include "net/quic/test_tools/quic_stream_peer.h"
@@ -27,7 +28,6 @@
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/core/spdy_test_utils.h"
 #include "net/test/gtest_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::_;
@@ -135,15 +135,12 @@
 
 enum Http2DecoderChoice {
   HTTP2_DECODER_SPDY,
-  HTTP2_DECODER_NESTED_SPDY,
   HTTP2_DECODER_NEW
 };
 std::ostream& operator<<(std::ostream& os, Http2DecoderChoice v) {
   switch (v) {
     case HTTP2_DECODER_SPDY:
       return os << "SPDY";
-    case HTTP2_DECODER_NESTED_SPDY:
-      return os << "NESTED_SPDY";
     case HTTP2_DECODER_NEW:
       return os << "NEW";
   }
@@ -173,15 +170,9 @@
         hpack_decoder(testing::get<3>(params)) {
     switch (http2_decoder) {
       case HTTP2_DECODER_SPDY:
-        FLAGS_use_nested_spdy_framer_decoder = false;
-        FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter = false;
-        break;
-      case HTTP2_DECODER_NESTED_SPDY:
-        FLAGS_use_nested_spdy_framer_decoder = true;
         FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter = false;
         break;
       case HTTP2_DECODER_NEW:
-        FLAGS_use_nested_spdy_framer_decoder = false;
         FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter = true;
         // Http2FrameDecoderAdapter needs the new header methods, else
         // --use_http2_frame_decoder_adapter=true will be ignored.
@@ -207,7 +198,7 @@
   HpackDecoderChoice hpack_decoder;
 };
 
-class QuicHeadersStreamTest : public ::testing::TestWithParam<TestParamsTuple> {
+class QuicHeadersStreamTest : public QuicTestWithParam<TestParamsTuple> {
  public:
   // Constructing the test_params_ object will set the necessary flags before
   // the MockQuicConnection is constructed, which we need because the latter
@@ -375,7 +366,6 @@
   static const bool kFrameComplete = true;
   static const bool kHasPriority = true;
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   const TestParams test_params_;
   MockQuicConnectionHelper helper_;
   MockAlarmFactory alarm_factory_;
@@ -403,7 +393,6 @@
                        ::testing::Values(Perspective::IS_CLIENT,
                                          Perspective::IS_SERVER),
                        ::testing::Values(HTTP2_DECODER_SPDY,
-                                         HTTP2_DECODER_NESTED_SPDY,
                                          HTTP2_DECODER_NEW),
                        ::testing::Values(HPACK_DECODER_SPDY, HPACK_DECODER3)));
 
diff --git a/src/net/quic/core/quic_one_block_arena_test.cc b/src/net/quic/core/quic_one_block_arena_test.cc
index 2a81c21..54a73e5 100644
--- a/src/net/quic/core/quic_one_block_arena_test.cc
+++ b/src/net/quic/core/quic_one_block_arena_test.cc
@@ -7,9 +7,8 @@
 #include <cstdint>
 
 #include "net/quic/platform/api/quic_containers.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace {
@@ -20,13 +19,15 @@
   uint32_t value;
 };
 
-TEST(QuicOneBlockArenaTest, AllocateSuccess) {
+class QuicOneBlockArenaTest : public QuicTest {};
+
+TEST_F(QuicOneBlockArenaTest, AllocateSuccess) {
   QuicOneBlockArena<1024> arena;
   QuicArenaScopedPtr<TestObject> ptr = arena.New<TestObject>();
   EXPECT_TRUE(ptr.is_from_arena());
 }
 
-TEST(QuicOneBlockArenaTest, Exhaust) {
+TEST_F(QuicOneBlockArenaTest, Exhaust) {
   QuicOneBlockArena<1024> arena;
   for (size_t i = 0; i < 1024 / kMaxAlign; ++i) {
     QuicArenaScopedPtr<TestObject> ptr = arena.New<TestObject>();
@@ -38,7 +39,7 @@
   EXPECT_FALSE(ptr.is_from_arena());
 }
 
-TEST(QuicOneBlockArenaTest, NoOverlaps) {
+TEST_F(QuicOneBlockArenaTest, NoOverlaps) {
   QuicOneBlockArena<1024> arena;
   std::vector<QuicArenaScopedPtr<TestObject>> objects;
   QuicIntervalSet<uintptr_t> used;
diff --git a/src/net/quic/core/quic_packet_creator.cc b/src/net/quic/core/quic_packet_creator.cc
index 6ee4217..0d2e293 100644
--- a/src/net/quic/core/quic_packet_creator.cc
+++ b/src/net/quic/core/quic_packet_creator.cc
@@ -115,7 +115,7 @@
       packet_.packet_number + 1 - least_packet_awaited_by_peer;
   const uint64_t delta = std::max(current_delta, max_packets_in_flight);
   packet_.packet_number_length =
-      QuicFramer::GetMinSequenceNumberLength(delta * 4);
+      QuicFramer::GetMinPacketNumberLength(delta * 4);
 }
 
 bool QuicPacketCreator::ConsumeData(QuicStreamId id,
@@ -367,7 +367,7 @@
   FillPacketHeader(&header);
   QUIC_CACHELINE_ALIGNED char encrypted_buffer[kMaxPacketSize];
   QuicDataWriter writer(arraysize(encrypted_buffer), encrypted_buffer,
-                        framer_->perspective());
+                        framer_->perspective(), framer_->endianness());
   if (!framer_->AppendPacketHeader(header, &writer)) {
     QUIC_BUG << "AppendPacketHeader failed";
     return;
diff --git a/src/net/quic/core/quic_packet_creator_test.cc b/src/net/quic/core/quic_packet_creator_test.cc
index 41a1593..6e7c87c 100644
--- a/src/net/quic/core/quic_packet_creator_test.cc
+++ b/src/net/quic/core/quic_packet_creator_test.cc
@@ -18,11 +18,10 @@
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_framer_peer.h"
 #include "net/quic/test_tools/quic_packet_creator_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::DoAll;
@@ -87,7 +86,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockDelegate);
 };
 
-class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> {
+class QuicPacketCreatorTest : public QuicTestWithParam<TestParams> {
  public:
   void ClearSerializedPacketForTests(SerializedPacket* serialized_packet) {
     if (serialized_packet == nullptr) {
@@ -210,7 +209,6 @@
 
   static const QuicStreamOffset kOffset = 1u;
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   char buffer_[kMaxPacketSize];
   QuicFrames frames_;
   QuicFramer server_framer_;
diff --git a/src/net/quic/core/quic_packet_generator.cc b/src/net/quic/core/quic_packet_generator.cc
index dc68d25..7487cde 100644
--- a/src/net/quic/core/quic_packet_generator.cc
+++ b/src/net/quic/core/quic_packet_generator.cc
@@ -348,4 +348,9 @@
   }
 }
 
+bool QuicPacketGenerator::HasRetransmittableFrames() const {
+  return !queued_control_frames_.empty() ||
+         packet_creator_.HasPendingRetransmittableFrames();
+}
+
 }  // namespace net
diff --git a/src/net/quic/core/quic_packet_generator.h b/src/net/quic/core/quic_packet_generator.h
index bd4604c..43bffc1 100644
--- a/src/net/quic/core/quic_packet_generator.h
+++ b/src/net/quic/core/quic_packet_generator.h
@@ -162,6 +162,10 @@
   // Sets the encrypter to use for the encryption level.
   void SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter);
 
+  // Returns true if there are control frames or current constructed packet has
+  // pending retransmittable frames.
+  bool HasRetransmittableFrames() const;
+
   // Sets the encryption level that will be applied to new packets.
   void set_encryption_level(EncryptionLevel level);
 
diff --git a/src/net/quic/core/quic_packet_generator_test.cc b/src/net/quic/core/quic_packet_generator_test.cc
index 514d6df..d72e191 100644
--- a/src/net/quic/core/quic_packet_generator_test.cc
+++ b/src/net/quic/core/quic_packet_generator_test.cc
@@ -17,13 +17,12 @@
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_random.h"
 #include "net/quic/test_tools/quic_packet_creator_peer.h"
 #include "net/quic/test_tools/quic_packet_generator_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/simple_quic_framer.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::InSequence;
@@ -102,7 +101,7 @@
 
 }  // namespace
 
-class QuicPacketGeneratorTest : public ::testing::Test {
+class QuicPacketGeneratorTest : public QuicTest {
  public:
   QuicPacketGeneratorTest()
       : framer_(AllSupportedVersions(),
@@ -241,6 +240,7 @@
 
   generator_.SetShouldSendAck(false);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) {
@@ -256,6 +256,7 @@
 
   generator_.SetShouldSendAck(false);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) {
@@ -268,6 +269,7 @@
 
   generator_.SetShouldSendAck(false);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_ack_frames = 1;
@@ -299,6 +301,7 @@
 
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, AddControlFrame_OnlyAckWritable) {
@@ -306,6 +309,7 @@
 
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) {
@@ -314,6 +318,7 @@
 
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) {
@@ -322,13 +327,16 @@
 
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
   generator_.FinishBatchOperations();
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   EXPECT_CALL(delegate_, OnSerializedPacket(_))
       .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
   generator_.FlushAllQueuedFrames();
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_rst_stream_frames = 1;
@@ -343,6 +351,7 @@
 
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_rst_stream_frames = 1;
@@ -357,6 +366,7 @@
   EXPECT_EQ(0u, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) {
@@ -368,6 +378,7 @@
   EXPECT_EQ(3u, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) {
@@ -380,6 +391,7 @@
   EXPECT_EQ(3u, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_stream_frames = 1;
@@ -399,6 +411,7 @@
       kCryptoStreamId, MakeIOVectorFromStringPiece("foo"), 0, NO_FIN, nullptr);
   EXPECT_EQ(3u, consumed.bytes_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_stream_frames = 1;
@@ -429,6 +442,7 @@
   EXPECT_EQ(4u, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) {
@@ -442,12 +456,14 @@
   EXPECT_EQ(4u, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   // Now both frames will be flushed out.
   EXPECT_CALL(delegate_, OnSerializedPacket(_))
       .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
   generator_.FinishBatchOperations();
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_stream_frames = 2;
@@ -484,6 +500,7 @@
   EXPECT_EQ(3u, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   // This frame will not fit with the existing frame, causing the queued frame
   // to be serialized, and it will be added to a new open packet.
@@ -492,9 +509,11 @@
   EXPECT_EQ(3u, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   creator_->Flush();
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_stream_frames = 1;
@@ -514,6 +533,7 @@
   EXPECT_EQ(10000u, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_stream_frames = 1;
@@ -526,6 +546,7 @@
   generator_.SetShouldSendAck(false);
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   delegate_.SetCanWriteAnything();
 
@@ -545,6 +566,7 @@
       .WillOnce(Invoke(this, &QuicPacketGeneratorTest::SavePacket));
   generator_.FinishBatchOperations();
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   PacketContents contents;
   contents.num_ack_frames = 1;
@@ -560,6 +582,7 @@
   generator_.SetShouldSendAck(false);
   generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame()));
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   delegate_.SetCanWriteAnything();
 
@@ -588,6 +611,7 @@
 
   generator_.FinishBatchOperations();
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // The first packet should have the queued data and part of the stream data.
   PacketContents contents;
@@ -634,6 +658,7 @@
   EXPECT_EQ(data_len, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // We expect three packets, and first two of them have to be of packet_len
   // size.  We check multiple packets (instead of just one) because we want to
@@ -668,6 +693,7 @@
   EXPECT_EQ(data_len, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // Make sure we already have two packets.
   ASSERT_EQ(2u, packets_.size());
@@ -682,6 +708,7 @@
   EXPECT_EQ(data_len, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // We expect first data chunk to get fragmented, but the second one to fit
   // into a single packet.
@@ -710,6 +737,7 @@
   EXPECT_EQ(first_write_len, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   // Make sure we have no packets so far.
   ASSERT_EQ(0u, packets_.size());
@@ -724,6 +752,7 @@
   generator_.SetMaxPacketLength(packet_len);
   EXPECT_EQ(packet_len, generator_.GetCurrentMaxPacketLength());
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // We expect to see exactly one packet serialized after that, because we send
   // a value somewhat exceeding new max packet size, and the tail data does not
@@ -739,6 +768,7 @@
   EXPECT_EQ(second_write_len, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 
   // We expect the first packet to be underfilled, and the second packet be up
   // to the new max packet size.
@@ -763,6 +793,7 @@
   generator_.GenerateMtuDiscoveryPacket(target_mtu, nullptr);
 
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
   ASSERT_EQ(1u, packets_.size());
   EXPECT_EQ(target_mtu, packets_[0].encrypted_length);
 
@@ -797,10 +828,12 @@
   EXPECT_EQ(data_len, consumed.bytes_consumed);
   EXPECT_FALSE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // Send the MTU probe.
   generator_.GenerateMtuDiscoveryPacket(target_mtu, nullptr);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   // Send data after the MTU probe.
   consumed = generator_.ConsumeData(kHeadersStreamId, CreateData(data_len),
@@ -808,6 +841,7 @@
   EXPECT_EQ(data_len, consumed.bytes_consumed);
   EXPECT_TRUE(consumed.fin_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   ASSERT_EQ(5u, packets_.size());
   EXPECT_EQ(kDefaultMaxPacketSize, packets_[0].encrypted_length);
@@ -843,6 +877,7 @@
   EXPECT_CALL(delegate_, PopulateStopWaitingFrame(_));
   // Generator should have queued control frames, and creator should be empty.
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
   EXPECT_FALSE(creator_->HasPendingFrames());
 
   // This will not serialize any packets, because of the invalid frame.
@@ -867,6 +902,7 @@
                                    "Single frame cannot fit into a packet", _));
   EXPECT_QUIC_BUG(generator_.AddControlFrame(QuicFrame(frame)), "");
   EXPECT_TRUE(generator_.HasQueuedFrames());
+  EXPECT_TRUE(generator_.HasRetransmittableFrames());
 }
 
 TEST_F(QuicPacketGeneratorTest, RandomPaddingAfterFinSingleStreamSinglePacket) {
@@ -896,6 +932,7 @@
   generator_.FinishBatchOperations();
   EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   EXPECT_EQ(1u, packets_.size());
   PacketContents contents;
@@ -933,6 +970,7 @@
   generator_.FinishBatchOperations();
   EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   EXPECT_LE(1u, packets_.size());
   PacketContents contents;
@@ -986,6 +1024,7 @@
   EXPECT_EQ(kStreamFramePayloadSize, consumed.bytes_consumed);
   generator_.FinishBatchOperations();
   EXPECT_FALSE(generator_.HasQueuedFrames());
+  EXPECT_FALSE(generator_.HasRetransmittableFrames());
 
   EXPECT_LE(2u, packets_.size());
   PacketContents contents;
diff --git a/src/net/quic/core/quic_packets.cc b/src/net/quic/core/quic_packets.cc
index 9075165..8788fbb 100644
--- a/src/net/quic/core/quic_packets.cc
+++ b/src/net/quic/core/quic_packets.cc
@@ -70,12 +70,11 @@
 
 QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default;
 
-QuicPublicResetPacket::QuicPublicResetPacket()
-    : nonce_proof(0), rejected_packet_number(0) {}
+QuicPublicResetPacket::QuicPublicResetPacket() : nonce_proof(0) {}
 
 QuicPublicResetPacket::QuicPublicResetPacket(
     const QuicPacketPublicHeader& header)
-    : public_header(header), nonce_proof(0), rejected_packet_number(0) {}
+    : public_header(header), nonce_proof(0) {}
 
 std::ostream& operator<<(std::ostream& os, const QuicPacketHeader& header) {
   os << "{ connection_id: " << header.public_header.connection_id
diff --git a/src/net/quic/core/quic_packets.h b/src/net/quic/core/quic_packets.h
index 95bef7c..2707f69 100644
--- a/src/net/quic/core/quic_packets.h
+++ b/src/net/quic/core/quic_packets.h
@@ -96,9 +96,6 @@
 
   QuicPacketPublicHeader public_header;
   QuicPublicResetNonceProof nonce_proof;
-  // TODO(fayang): remove rejected_packet_number when deprecating
-  // FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset.
-  QuicPacketNumber rejected_packet_number;
   QuicSocketAddress client_address;
 };
 
diff --git a/src/net/quic/core/quic_received_packet_manager_test.cc b/src/net/quic/core/quic_received_packet_manager_test.cc
index 2f2c7a7..2b0f24a 100644
--- a/src/net/quic/core/quic_received_packet_manager_test.cc
+++ b/src/net/quic/core/quic_received_packet_manager_test.cc
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "net/quic/core/quic_connection_stats.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -35,8 +35,7 @@
   return params;
 }
 
-class QuicReceivedPacketManagerTest
-    : public ::testing::TestWithParam<TestParams> {
+class QuicReceivedPacketManagerTest : public QuicTestWithParam<TestParams> {
  protected:
   QuicReceivedPacketManagerTest() : received_manager_(&stats_) {}
 
diff --git a/src/net/quic/core/quic_sent_packet_manager_test.cc b/src/net/quic/core/quic_sent_packet_manager_test.cc
index f8b3758..6aa1015 100644
--- a/src/net/quic/core/quic_sent_packet_manager_test.cc
+++ b/src/net/quic/core/quic_sent_packet_manager_test.cc
@@ -10,11 +10,10 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using testing::AnyNumber;
 using testing::ElementsAre;
@@ -56,7 +55,7 @@
                     QuicTime detection_time));
 };
 
-class QuicSentPacketManagerTest : public ::testing::Test {
+class QuicSentPacketManagerTest : public QuicTest {
  protected:
   QuicSentPacketManagerTest()
       : manager_(Perspective::IS_SERVER, &clock_, &stats_, kCubicBytes, kNack),
@@ -270,7 +269,6 @@
     frame->packets.Remove(lower, higher);
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   QuicSentPacketManager manager_;
   MockClock clock_;
   QuicConnectionStats stats_;
diff --git a/src/net/quic/core/quic_server_id_test.cc b/src/net/quic/core/quic_server_id_test.cc
index 95eeb67..abf05a3 100644
--- a/src/net/quic/core/quic_server_id_test.cc
+++ b/src/net/quic/core/quic_server_id_test.cc
@@ -4,7 +4,7 @@
 
 #include "net/quic/core/quic_server_id.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
@@ -12,7 +12,9 @@
 
 namespace {
 
-TEST(QuicServerIdTest, ToString) {
+class QuicServerIdTest : public QuicTest {};
+
+TEST_F(QuicServerIdTest, ToString) {
   HostPortPair google_host_port_pair("google.com", 10);
 
   QuicServerId google_server_id(google_host_port_pair, PRIVACY_MODE_DISABLED);
@@ -24,7 +26,7 @@
   EXPECT_EQ("https://google.com:10/private", private_server_id_str);
 }
 
-TEST(QuicServerIdTest, LessThan) {
+TEST_F(QuicServerIdTest, LessThan) {
   QuicServerId a_10_https(HostPortPair("a.com", 10), PRIVACY_MODE_DISABLED);
   QuicServerId a_11_https(HostPortPair("a.com", 11), PRIVACY_MODE_DISABLED);
   QuicServerId b_10_https(HostPortPair("b.com", 10), PRIVACY_MODE_DISABLED);
@@ -86,7 +88,7 @@
   }
 }
 
-TEST(QuicServerIdTest, Equals) {
+TEST_F(QuicServerIdTest, Equals) {
   PrivacyMode left_privacy;
   PrivacyMode right_privacy;
   for (int i = 0; i < 2; i++) {
diff --git a/src/net/quic/core/quic_server_session_base_test.cc b/src/net/quic/core/quic_server_session_base_test.cc
index e0fd26f..171b1cb 100644
--- a/src/net/quic/core/quic_server_session_base_test.cc
+++ b/src/net/quic/core/quic_server_session_base_test.cc
@@ -17,6 +17,7 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/fake_proof_source.h"
 #include "net/quic/test_tools/quic_config_peer.h"
@@ -33,8 +34,6 @@
 #include "net/tools/quic/quic_epoll_connection_helper.h"
 #include "net/tools/quic/quic_simple_server_stream.h"
 #include "net/tools/quic/test_tools/mock_quic_session_visitor.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::StrictMock;
@@ -118,7 +117,7 @@
 
 const size_t kMaxStreamsForTest = 10;
 
-class QuicServerSessionBaseTest : public ::testing::TestWithParam<QuicVersion> {
+class QuicServerSessionBaseTest : public QuicTestWithParam<QuicVersion> {
  protected:
   QuicServerSessionBaseTest()
       : QuicServerSessionBaseTest(crypto_test_utils::ProofSourceForTesting()) {}
@@ -164,7 +163,6 @@
   std::unique_ptr<TestServerSession> session_;
   std::unique_ptr<CryptoHandshakeMessage> handshake_message_;
   QuicConnectionVisitorInterface* visitor_;
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
 };
 
 // Compares CachedNetworkParameters.
diff --git a/src/net/quic/core/quic_session.cc b/src/net/quic/core/quic_session.cc
index 9508fe3..9cda039 100644
--- a/src/net/quic/core/quic_session.cc
+++ b/src/net/quic/core/quic_session.cc
@@ -77,7 +77,7 @@
     // us this offset.
     if (frame.fin) {
       QuicStreamOffset final_byte_offset = frame.offset + frame.data_length;
-      UpdateFlowControlOnFinalReceivedByteOffset(stream_id, final_byte_offset);
+      OnFinalByteOffsetReceived(stream_id, final_byte_offset);
     }
     return;
   }
@@ -394,7 +394,7 @@
   connection_->SetNumOpenStreams(dynamic_stream_map_.size());
 }
 
-void QuicSession::UpdateFlowControlOnFinalReceivedByteOffset(
+void QuicSession::OnFinalByteOffsetReceived(
     QuicStreamId stream_id,
     QuicStreamOffset final_byte_offset) {
   std::map<QuicStreamId, QuicStreamOffset>::iterator it =
@@ -533,8 +533,7 @@
   if (IsClosedStream(frame.stream_id)) {
     // The RST frame contains the final byte offset for the stream: we can now
     // update the connection level flow controller if needed.
-    UpdateFlowControlOnFinalReceivedByteOffset(frame.stream_id,
-                                               frame.byte_offset);
+    OnFinalByteOffsetReceived(frame.stream_id, frame.byte_offset);
   }
 }
 
@@ -820,6 +819,10 @@
   closed_streams_.clear();
 }
 
+void QuicSession::OnAckNeedsRetransmittableFrame() {
+  flow_controller_.SendWindowUpdate();
+}
+
 size_t QuicSession::GetNumDynamicOutgoingStreams() const {
   DCHECK_GE(dynamic_stream_map_.size(), num_dynamic_incoming_streams_);
   return dynamic_stream_map_.size() - num_dynamic_incoming_streams_;
diff --git a/src/net/quic/core/quic_session.h b/src/net/quic/core/quic_session.h
index 5fa9dcd..32f1958 100644
--- a/src/net/quic/core/quic_session.h
+++ b/src/net/quic/core/quic_session.h
@@ -100,6 +100,8 @@
   // Deletes streams that are safe to be deleted now that it's safe to do so (no
   // other operations are being done on the streams at this time).
   void PostProcessAfterData() override;
+  // Adds a connection level WINDOW_UPDATE frame.
+  void OnAckNeedsRetransmittableFrame() override;
   bool WillingAndAbleToWrite() const override;
   bool HasPendingHandshake() const override;
   bool HasOpenDynamicStreams() const override;
@@ -292,11 +294,11 @@
 
   // When a stream is closed locally, it may not yet know how many bytes the
   // peer sent on that stream.
-  // When this data arrives (via stream frame w. FIN, or RST) this method
-  // is called, and correctly updates the connection level flow controller.
-  void UpdateFlowControlOnFinalReceivedByteOffset(
-      QuicStreamId id,
-      QuicStreamOffset final_byte_offset);
+  // When this data arrives (via stream frame w. FIN, trailing headers, or RST)
+  // this method is called, and correctly updates the connection level flow
+  // controller.
+  virtual void OnFinalByteOffsetReceived(QuicStreamId id,
+                                         QuicStreamOffset final_byte_offset);
 
   // Return true if given stream is peer initiated.
   bool IsIncomingStream(QuicStreamId id) const;
diff --git a/src/net/quic/core/quic_session_test.cc b/src/net/quic/core/quic_session_test.cc
index 9da380c..cf08795 100644
--- a/src/net/quic/core/quic_session_test.cc
+++ b/src/net/quic/core/quic_session_test.cc
@@ -21,6 +21,7 @@
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_str_cat.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
 #include "net/quic/test_tools/quic_flow_controller_peer.h"
@@ -31,9 +32,7 @@
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/spdy/core/spdy_framer.h"
 #include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gmock_mutant.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::CreateFunctor;
@@ -223,7 +222,7 @@
   bool writev_consumes_all_data_;
 };
 
-class QuicSessionTestBase : public ::testing::TestWithParam<QuicVersion> {
+class QuicSessionTestBase : public QuicTestWithParam<QuicVersion> {
  protected:
   explicit QuicSessionTestBase(Perspective perspective)
       : connection_(
@@ -284,7 +283,6 @@
 
   QuicVersion version() const { return connection_->version(); }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   MockQuicConnectionHelper helper_;
   MockAlarmFactory alarm_factory_;
   StrictMock<MockQuicConnection>* connection_;
diff --git a/src/net/quic/core/quic_session_test.cc.orig b/src/net/quic/core/quic_session_test.cc.orig
new file mode 100644
index 0000000..9af64d1
--- /dev/null
+++ b/src/net/quic/core/quic_session_test.cc.orig
@@ -0,0 +1,1257 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/quic/core/quic_session.h"
+
+#include <set>
+#include <utility>
+
+#include "base/rand_util.h"
+#include "base/stl_util.h"
+#include "base/strings/string_number_conversions.h"
+#include "build/build_config.h"
+#include "net/quic/core/crypto/crypto_protocol.h"
+#include "net/quic/core/crypto/null_encrypter.h"
+#include "net/quic/core/quic_crypto_stream.h"
+#include "net/quic/core/quic_flags.h"
+#include "net/quic/core/quic_protocol.h"
+#include "net/quic/core/quic_utils.h"
+#include "net/quic/core/reliable_quic_stream.h"
+#include "net/quic/test_tools/quic_config_peer.h"
+#include "net/quic/test_tools/quic_connection_peer.h"
+#include "net/quic/test_tools/quic_flow_controller_peer.h"
+#include "net/quic/test_tools/quic_headers_stream_peer.h"
+#include "net/quic/test_tools/quic_session_peer.h"
+#include "net/quic/test_tools/quic_spdy_session_peer.h"
+#include "net/quic/test_tools/quic_spdy_stream_peer.h"
+#include "net/quic/test_tools/quic_test_utils.h"
+#include "net/quic/test_tools/reliable_quic_stream_peer.h"
+#include "net/spdy/spdy_framer.h"
+#include "net/test/gtest_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gmock_mutant.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using net::SpdyHeaderBlock;
+using net::SpdyPriority;
+using std::set;
+using std::string;
+using std::vector;
+using testing::CreateFunctor;
+using testing::AtLeast;
+using testing::InSequence;
+using testing::Invoke;
+using testing::Return;
+using testing::StrictMock;
+using testing::_;
+
+namespace net {
+namespace test {
+namespace {
+
+const SpdyPriority kHighestPriority = kV3HighestPriority;
+
+class TestCryptoStream : public QuicCryptoStream {
+ public:
+  explicit TestCryptoStream(QuicSession* session) : QuicCryptoStream(session) {}
+
+  void OnHandshakeMessage(const CryptoHandshakeMessage& /*message*/) override {
+    encryption_established_ = true;
+    handshake_confirmed_ = true;
+    CryptoHandshakeMessage msg;
+    string error_details;
+    session()->config()->SetInitialStreamFlowControlWindowToSend(
+        kInitialStreamFlowControlWindowForTest);
+    session()->config()->SetInitialSessionFlowControlWindowToSend(
+        kInitialSessionFlowControlWindowForTest);
+    session()->config()->ToHandshakeMessage(&msg);
+    const QuicErrorCode error =
+        session()->config()->ProcessPeerHello(msg, CLIENT, &error_details);
+    EXPECT_EQ(QUIC_NO_ERROR, error);
+    session()->OnConfigNegotiated();
+    session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED);
+  }
+
+  MOCK_METHOD0(OnCanWrite, void());
+};
+
+class TestHeadersStream : public QuicHeadersStream {
+ public:
+  explicit TestHeadersStream(QuicSpdySession* session)
+      : QuicHeadersStream(session) {}
+
+  MOCK_METHOD0(OnCanWrite, void());
+};
+
+class TestStream : public QuicSpdyStream {
+ public:
+  TestStream(QuicStreamId id, QuicSpdySession* session)
+      : QuicSpdyStream(id, session) {}
+
+  using ReliableQuicStream::CloseWriteSide;
+
+  void OnDataAvailable() override {}
+
+  MOCK_METHOD0(OnCanWrite, void());
+};
+
+// Poor man's functor for use as callback in a mock.
+class StreamBlocker {
+ public:
+  StreamBlocker(QuicSession* session, QuicStreamId stream_id)
+      : session_(session), stream_id_(stream_id) {}
+
+  void MarkConnectionLevelWriteBlocked() {
+    session_->MarkConnectionLevelWriteBlocked(stream_id_);
+  }
+
+ private:
+  QuicSession* const session_;
+  const QuicStreamId stream_id_;
+};
+
+class TestSession : public QuicSpdySession {
+ public:
+  explicit TestSession(QuicConnection* connection)
+      : QuicSpdySession(connection, DefaultQuicConfig()),
+        crypto_stream_(this),
+        writev_consumes_all_data_(false) {
+    Initialize();
+    this->connection()->SetEncrypter(ENCRYPTION_FORWARD_SECURE,
+                                     new NullEncrypter());
+  }
+
+  ~TestSession() override { delete connection(); }
+
+  TestCryptoStream* GetCryptoStream() override { return &crypto_stream_; }
+
+  TestStream* CreateOutgoingDynamicStream(SpdyPriority priority) override {
+    TestStream* stream = new TestStream(GetNextOutgoingStreamId(), this);
+    stream->SetPriority(priority);
+    ActivateStream(stream);
+    return stream;
+  }
+
+  TestStream* CreateIncomingDynamicStream(QuicStreamId id) override {
+    // Enforce the limit on the number of open streams.
+    if (GetNumOpenIncomingStreams() + 1 > max_open_incoming_streams()) {
+      connection()->CloseConnection(
+          QUIC_TOO_MANY_OPEN_STREAMS, "Too many streams!",
+          ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
+      return nullptr;
+    } else {
+      TestStream* stream = new TestStream(id, this);
+      ActivateStream(stream);
+      return stream;
+    }
+  }
+
+  bool ShouldCreateIncomingDynamicStream(QuicStreamId /*id*/) override {
+    return true;
+  }
+
+  bool ShouldCreateOutgoingDynamicStream() override { return true; }
+
+  bool IsClosedStream(QuicStreamId id) {
+    return QuicSession::IsClosedStream(id);
+  }
+
+  ReliableQuicStream* GetOrCreateDynamicStream(QuicStreamId stream_id) {
+    return QuicSpdySession::GetOrCreateDynamicStream(stream_id);
+  }
+
+  QuicConsumedData WritevData(
+      ReliableQuicStream* stream,
+      QuicStreamId id,
+      QuicIOVector data,
+      QuicStreamOffset offset,
+      bool fin,
+      QuicAckListenerInterface* ack_notifier_delegate) override {
+    QuicConsumedData consumed(data.total_length, fin);
+    if (!writev_consumes_all_data_) {
+      consumed = QuicSession::WritevData(stream, id, data, offset, fin,
+                                         ack_notifier_delegate);
+    }
+    QuicSessionPeer::GetWriteBlockedStreams(this)->UpdateBytesForStream(
+        id, consumed.bytes_consumed);
+    return consumed;
+  }
+
+  void set_writev_consumes_all_data(bool val) {
+    writev_consumes_all_data_ = val;
+  }
+
+  QuicConsumedData SendStreamData(ReliableQuicStream* stream) {
+    struct iovec iov;
+    if (stream->id() != kCryptoStreamId) {
+      this->connection()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
+    }
+    return WritevData(stream, stream->id(), MakeIOVector("not empty", &iov), 0,
+                      true, nullptr);
+  }
+
+  QuicConsumedData SendLargeFakeData(ReliableQuicStream* stream, int bytes) {
+    DCHECK(writev_consumes_all_data_);
+    struct iovec iov;
+    iov.iov_base = nullptr;  // should not be read.
+    iov.iov_len = static_cast<size_t>(bytes);
+    return WritevData(stream, stream->id(), QuicIOVector(&iov, 1, bytes), 0,
+                      true, nullptr);
+  }
+
+  using QuicSession::PostProcessAfterData;
+
+ private:
+  StrictMock<TestCryptoStream> crypto_stream_;
+
+  bool writev_consumes_all_data_;
+};
+
+class QuicSessionTestBase : public ::testing::TestWithParam<QuicVersion> {
+ protected:
+  explicit QuicSessionTestBase(Perspective perspective)
+      : connection_(
+            new StrictMock<MockQuicConnection>(&helper_,
+                                               &alarm_factory_,
+                                               perspective,
+                                               SupportedVersions(GetParam()))),
+        session_(connection_) {
+    session_.config()->SetInitialStreamFlowControlWindowToSend(
+        kInitialStreamFlowControlWindowForTest);
+    session_.config()->SetInitialSessionFlowControlWindowToSend(
+        kInitialSessionFlowControlWindowForTest);
+    headers_[":host"] = "www.google.com";
+    headers_[":path"] = "/index.hml";
+    headers_[":scheme"] = "http";
+    headers_["cookie"] =
+        "__utma=208381060.1228362404.1372200928.1372200928.1372200928.1; "
+        "__utmc=160408618; "
+        "GX=DQAAAOEAAACWJYdewdE9rIrW6qw3PtVi2-d729qaa-74KqOsM1NVQblK4VhX"
+        "hoALMsy6HOdDad2Sz0flUByv7etmo3mLMidGrBoljqO9hSVA40SLqpG_iuKKSHX"
+        "RW3Np4bq0F0SDGDNsW0DSmTS9ufMRrlpARJDS7qAI6M3bghqJp4eABKZiRqebHT"
+        "pMU-RXvTI5D5oCF1vYxYofH_l1Kviuiy3oQ1kS1enqWgbhJ2t61_SNdv-1XJIS0"
+        "O3YeHLmVCs62O6zp89QwakfAWK9d3IDQvVSJzCQsvxvNIvaZFa567MawWlXg0Rh"
+        "1zFMi5vzcns38-8_Sns; "
+        "GA=v*2%2Fmem*57968640*47239936%2Fmem*57968640*47114716%2Fno-nm-"
+        "yj*15%2Fno-cc-yj*5%2Fpc-ch*133685%2Fpc-s-cr*133947%2Fpc-s-t*1339"
+        "47%2Fno-nm-yj*4%2Fno-cc-yj*1%2Fceft-as*1%2Fceft-nqas*0%2Fad-ra-c"
+        "v_p%2Fad-nr-cv_p-f*1%2Fad-v-cv_p*859%2Fad-ns-cv_p-f*1%2Ffn-v-ad%"
+        "2Fpc-t*250%2Fpc-cm*461%2Fpc-s-cr*722%2Fpc-s-t*722%2Fau_p*4"
+        "SICAID=AJKiYcHdKgxum7KMXG0ei2t1-W4OD1uW-ecNsCqC0wDuAXiDGIcT_HA2o1"
+        "3Rs1UKCuBAF9g8rWNOFbxt8PSNSHFuIhOo2t6bJAVpCsMU5Laa6lewuTMYI8MzdQP"
+        "ARHKyW-koxuhMZHUnGBJAM1gJODe0cATO_KGoX4pbbFxxJ5IicRxOrWK_5rU3cdy6"
+        "edlR9FsEdH6iujMcHkbE5l18ehJDwTWmBKBzVD87naobhMMrF6VvnDGxQVGp9Ir_b"
+        "Rgj3RWUoPumQVCxtSOBdX0GlJOEcDTNCzQIm9BSfetog_eP_TfYubKudt5eMsXmN6"
+        "QnyXHeGeK2UINUzJ-D30AFcpqYgH9_1BvYSpi7fc7_ydBU8TaD8ZRxvtnzXqj0RfG"
+        "tuHghmv3aD-uzSYJ75XDdzKdizZ86IG6Fbn1XFhYZM-fbHhm3mVEXnyRW4ZuNOLFk"
+        "Fas6LMcVC6Q8QLlHYbXBpdNFuGbuZGUnav5C-2I_-46lL0NGg3GewxGKGHvHEfoyn"
+        "EFFlEYHsBQ98rXImL8ySDycdLEFvBPdtctPmWCfTxwmoSMLHU2SCVDhbqMWU5b0yr"
+        "JBCScs_ejbKaqBDoB7ZGxTvqlrB__2ZmnHHjCr8RgMRtKNtIeuZAo ";
+    connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
+  }
+
+  void CheckClosedStreams() {
+    for (QuicStreamId i = kCryptoStreamId; i < 100; i++) {
+      if (!base::ContainsKey(closed_streams_, i)) {
+        EXPECT_FALSE(session_.IsClosedStream(i)) << " stream id: " << i;
+      } else {
+        EXPECT_TRUE(session_.IsClosedStream(i)) << " stream id: " << i;
+      }
+    }
+  }
+
+  void CloseStream(QuicStreamId id) {
+    EXPECT_CALL(*connection_, SendRstStream(id, _, _));
+    session_.CloseStream(id);
+    closed_streams_.insert(id);
+  }
+
+  QuicVersion version() const { return connection_->version(); }
+
+  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
+  MockQuicConnectionHelper helper_;
+  MockAlarmFactory alarm_factory_;
+  StrictMock<MockQuicConnection>* connection_;
+  TestSession session_;
+  set<QuicStreamId> closed_streams_;
+  SpdyHeaderBlock headers_;
+};
+
+class QuicSessionTestServer : public QuicSessionTestBase {
+ protected:
+  QuicSessionTestServer() : QuicSessionTestBase(Perspective::IS_SERVER) {}
+};
+
+INSTANTIATE_TEST_CASE_P(Tests,
+                        QuicSessionTestServer,
+                        ::testing::ValuesIn(AllSupportedVersions()));
+
+TEST_P(QuicSessionTestServer, PeerAddress) {
+  EXPECT_EQ(IPEndPoint(Loopback4(), kTestPort), session_.peer_address());
+}
+
+TEST_P(QuicSessionTestServer, IsCryptoHandshakeConfirmed) {
+  EXPECT_FALSE(session_.IsCryptoHandshakeConfirmed());
+  CryptoHandshakeMessage message;
+  session_.GetCryptoStream()->OnHandshakeMessage(message);
+  EXPECT_TRUE(session_.IsCryptoHandshakeConfirmed());
+}
+
+TEST_P(QuicSessionTestServer, IsClosedStreamDefault) {
+  // Ensure that no streams are initially closed.
+  for (QuicStreamId i = kCryptoStreamId; i < 100; i++) {
+    EXPECT_FALSE(session_.IsClosedStream(i)) << "stream id: " << i;
+  }
+}
+
+TEST_P(QuicSessionTestServer, AvailableStreams) {
+  ASSERT_TRUE(session_.GetOrCreateDynamicStream(9) != nullptr);
+  // Both 5 and 7 should be available.
+  EXPECT_TRUE(QuicSessionPeer::IsStreamAvailable(&session_, 5));
+  EXPECT_TRUE(QuicSessionPeer::IsStreamAvailable(&session_, 7));
+  ASSERT_TRUE(session_.GetOrCreateDynamicStream(7) != nullptr);
+  ASSERT_TRUE(session_.GetOrCreateDynamicStream(5) != nullptr);
+}
+
+TEST_P(QuicSessionTestServer, IsClosedStreamLocallyCreated) {
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  EXPECT_EQ(2u, stream2->id());
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  EXPECT_EQ(4u, stream4->id());
+
+  CheckClosedStreams();
+  CloseStream(4);
+  CheckClosedStreams();
+  CloseStream(2);
+  CheckClosedStreams();
+}
+
+TEST_P(QuicSessionTestServer, IsClosedStreamPeerCreated) {
+  QuicStreamId stream_id1 = kClientDataStreamId1;
+  QuicStreamId stream_id2 = kClientDataStreamId2;
+  session_.GetOrCreateDynamicStream(stream_id1);
+  session_.GetOrCreateDynamicStream(stream_id2);
+
+  CheckClosedStreams();
+  CloseStream(stream_id1);
+  CheckClosedStreams();
+  CloseStream(stream_id2);
+  // Create a stream, and make another available.
+  ReliableQuicStream* stream3 =
+      session_.GetOrCreateDynamicStream(stream_id2 + 4);
+  CheckClosedStreams();
+  // Close one, but make sure the other is still not closed
+  CloseStream(stream3->id());
+  CheckClosedStreams();
+}
+
+TEST_P(QuicSessionTestServer, MaximumAvailableOpenedStreams) {
+  QuicStreamId stream_id = kClientDataStreamId1;
+  session_.GetOrCreateDynamicStream(stream_id);
+  EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
+  EXPECT_NE(nullptr,
+            session_.GetOrCreateDynamicStream(
+                stream_id + 2 * (session_.max_open_incoming_streams() - 1)));
+}
+
+TEST_P(QuicSessionTestServer, TooManyAvailableStreams) {
+  QuicStreamId stream_id1 = kClientDataStreamId1;
+  QuicStreamId stream_id2;
+  EXPECT_NE(nullptr, session_.GetOrCreateDynamicStream(stream_id1));
+  // A stream ID which is too large to create.
+  stream_id2 = stream_id1 + 2 * session_.MaxAvailableStreams() + 4;
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_TOO_MANY_AVAILABLE_STREAMS, _, _));
+  EXPECT_EQ(nullptr, session_.GetOrCreateDynamicStream(stream_id2));
+}
+
+TEST_P(QuicSessionTestServer, ManyAvailableStreams) {
+  // When max_open_streams_ is 200, should be able to create 200 streams
+  // out-of-order, that is, creating the one with the largest stream ID first.
+  QuicSessionPeer::SetMaxOpenIncomingStreams(&session_, 200);
+  QuicStreamId stream_id = kClientDataStreamId1;
+  // Create one stream.
+  session_.GetOrCreateDynamicStream(stream_id);
+  EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(0);
+  // Create the largest stream ID of a threatened total of 200 streams.
+  session_.GetOrCreateDynamicStream(stream_id + 2 * (200 - 1));
+}
+
+TEST_P(QuicSessionTestServer, DebugDFatalIfMarkingClosedStreamWriteBlocked) {
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  QuicStreamId closed_stream_id = stream2->id();
+  // Close the stream.
+  EXPECT_CALL(*connection_, SendRstStream(closed_stream_id, _, _));
+  stream2->Reset(QUIC_BAD_APPLICATION_PAYLOAD);
+  EXPECT_QUIC_BUG(session_.MarkConnectionLevelWriteBlocked(closed_stream_id),
+                  "Marking unknown stream 2 blocked.");
+}
+
+TEST_P(QuicSessionTestServer, OnCanWrite) {
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  session_.MarkConnectionLevelWriteBlocked(stream2->id());
+  session_.MarkConnectionLevelWriteBlocked(stream6->id());
+  session_.MarkConnectionLevelWriteBlocked(stream4->id());
+
+  InSequence s;
+  StreamBlocker stream2_blocker(&session_, stream2->id());
+
+  // Reregister, to test the loop limit.
+  EXPECT_CALL(*stream2, OnCanWrite())
+      .WillOnce(Invoke(&stream2_blocker,
+                       &StreamBlocker::MarkConnectionLevelWriteBlocked));
+  // 2 will get called a second time as it didn't finish its block
+  EXPECT_CALL(*stream2, OnCanWrite());
+  EXPECT_CALL(*stream6, OnCanWrite());
+  // 4 will not get called, as we exceeded the loop limit.
+  session_.OnCanWrite();
+  EXPECT_TRUE(session_.WillingAndAbleToWrite());
+}
+
+TEST_P(QuicSessionTestServer, TestBatchedWrites) {
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  session_.set_writev_consumes_all_data(true);
+  session_.MarkConnectionLevelWriteBlocked(stream2->id());
+  session_.MarkConnectionLevelWriteBlocked(stream4->id());
+
+  StreamBlocker stream2_blocker(&session_, stream2->id());
+  StreamBlocker stream4_blocker(&session_, stream4->id());
+  StreamBlocker stream6_blocker(&session_, stream6->id());
+  // With two sessions blocked, we should get two write calls.  They should both
+  // go to the first stream as it will only write 6k and mark itself blocked
+  // again.
+  InSequence s;
+  EXPECT_CALL(*stream2, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream2, 6000))),
+                      Invoke(&stream2_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  EXPECT_CALL(*stream2, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream2, 6000))),
+                      Invoke(&stream2_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  session_.OnCanWrite();
+
+  // We should get one more call for stream2, at which point it has used its
+  // write quota and we move over to stream 4.
+  EXPECT_CALL(*stream2, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream2, 6000))),
+                      Invoke(&stream2_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  EXPECT_CALL(*stream4, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream4, 6000))),
+                      Invoke(&stream4_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  session_.OnCanWrite();
+
+  // Now let stream 4 do the 2nd of its 3 writes, but add a block for a high
+  // priority stream 6.  4 should be preempted.  6 will write but *not* block so
+  // will cede back to 4.
+  stream6->SetPriority(kHighestPriority);
+  EXPECT_CALL(*stream4, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream4, 6000))),
+                      Invoke(&stream4_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked),
+                      Invoke(&stream6_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  EXPECT_CALL(*stream6, OnCanWrite())
+      .WillOnce(testing::IgnoreResult(
+          Invoke(CreateFunctor(&TestSession::SendLargeFakeData,
+                               base::Unretained(&session_), stream4, 6000))));
+  session_.OnCanWrite();
+
+  // Stream4 alread did 6k worth of writes, so after doing another 12k it should
+  // cede and 2 should resume.
+  EXPECT_CALL(*stream4, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream4, 12000))),
+                      Invoke(&stream4_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  EXPECT_CALL(*stream2, OnCanWrite())
+      .WillOnce(DoAll(testing::IgnoreResult(Invoke(CreateFunctor(
+                          &TestSession::SendLargeFakeData,
+                          base::Unretained(&session_), stream2, 6000))),
+                      Invoke(&stream2_blocker,
+                             &StreamBlocker::MarkConnectionLevelWriteBlocked)));
+  session_.OnCanWrite();
+}
+
+TEST_P(QuicSessionTestServer, OnCanWriteBundlesStreams) {
+  // Encryption needs to be established before data can be sent.
+  CryptoHandshakeMessage msg;
+  session_.GetCryptoStream()->OnHandshakeMessage(msg);
+
+  // Drive congestion control manually.
+  MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+  QuicConnectionPeer::SetSendAlgorithm(session_.connection(), kDefaultPathId,
+                                       send_algorithm);
+
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  session_.MarkConnectionLevelWriteBlocked(stream2->id());
+  session_.MarkConnectionLevelWriteBlocked(stream6->id());
+  session_.MarkConnectionLevelWriteBlocked(stream4->id());
+
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillRepeatedly(Return(QuicTime::Delta::Zero()));
+  EXPECT_CALL(*send_algorithm, GetCongestionWindow())
+      .WillRepeatedly(Return(kMaxPacketSize * 10));
+  EXPECT_CALL(*send_algorithm, InRecovery()).WillRepeatedly(Return(false));
+  EXPECT_CALL(*stream2, OnCanWrite())
+      .WillOnce(testing::IgnoreResult(
+          Invoke(CreateFunctor(&TestSession::SendStreamData,
+                               base::Unretained(&session_), stream2))));
+  EXPECT_CALL(*stream4, OnCanWrite())
+      .WillOnce(testing::IgnoreResult(
+          Invoke(CreateFunctor(&TestSession::SendStreamData,
+                               base::Unretained(&session_), stream4))));
+  EXPECT_CALL(*stream6, OnCanWrite())
+      .WillOnce(testing::IgnoreResult(
+          Invoke(CreateFunctor(&TestSession::SendStreamData,
+                               base::Unretained(&session_), stream6))));
+
+  // Expect that we only send one packet, the writes from different streams
+  // should be bundled together.
+  MockPacketWriter* writer = static_cast<MockPacketWriter*>(
+      QuicConnectionPeer::GetWriter(session_.connection()));
+  EXPECT_CALL(*writer, WritePacket(_, _, _, _, _))
+      .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
+  EXPECT_CALL(*send_algorithm, OnPacketSent(_, _, _, _, _));
+  EXPECT_CALL(*send_algorithm, OnApplicationLimited(_));
+  session_.OnCanWrite();
+  EXPECT_FALSE(session_.WillingAndAbleToWrite());
+}
+
+TEST_P(QuicSessionTestServer, OnCanWriteCongestionControlBlocks) {
+  InSequence s;
+
+  // Drive congestion control manually.
+  MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+  QuicConnectionPeer::SetSendAlgorithm(session_.connection(), kDefaultPathId,
+                                       send_algorithm);
+
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  session_.MarkConnectionLevelWriteBlocked(stream2->id());
+  session_.MarkConnectionLevelWriteBlocked(stream6->id());
+  session_.MarkConnectionLevelWriteBlocked(stream4->id());
+
+  StreamBlocker stream2_blocker(&session_, stream2->id());
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillOnce(Return(QuicTime::Delta::Zero()));
+  EXPECT_CALL(*stream2, OnCanWrite());
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillOnce(Return(QuicTime::Delta::Zero()));
+  EXPECT_CALL(*stream6, OnCanWrite());
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillOnce(Return(QuicTime::Delta::Infinite()));
+  // stream4->OnCanWrite is not called.
+
+  session_.OnCanWrite();
+  EXPECT_TRUE(session_.WillingAndAbleToWrite());
+
+  // Still congestion-control blocked.
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillOnce(Return(QuicTime::Delta::Infinite()));
+  session_.OnCanWrite();
+  EXPECT_TRUE(session_.WillingAndAbleToWrite());
+
+  // stream4->OnCanWrite is called once the connection stops being
+  // congestion-control blocked.
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillOnce(Return(QuicTime::Delta::Zero()));
+  EXPECT_CALL(*stream4, OnCanWrite());
+  EXPECT_CALL(*send_algorithm, OnApplicationLimited(_));
+  session_.OnCanWrite();
+  EXPECT_FALSE(session_.WillingAndAbleToWrite());
+}
+
+TEST_P(QuicSessionTestServer, OnCanWriteWriterBlocks) {
+  // Drive congestion control manually in order to ensure that
+  // application-limited signaling is handled correctly.
+  MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+  QuicConnectionPeer::SetSendAlgorithm(session_.connection(), kDefaultPathId,
+                                       send_algorithm);
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillRepeatedly(Return(QuicTime::Delta::Zero()));
+
+  // Drive packet writer manually.
+  MockPacketWriter* writer = static_cast<MockPacketWriter*>(
+      QuicConnectionPeer::GetWriter(session_.connection()));
+  EXPECT_CALL(*writer, IsWriteBlocked()).WillRepeatedly(Return(true));
+  EXPECT_CALL(*writer, IsWriteBlockedDataBuffered())
+      .WillRepeatedly(Return(true));
+  EXPECT_CALL(*writer, WritePacket(_, _, _, _, _)).Times(0);
+
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  session_.MarkConnectionLevelWriteBlocked(stream2->id());
+
+  EXPECT_CALL(*stream2, OnCanWrite()).Times(0);
+  EXPECT_CALL(*send_algorithm, OnApplicationLimited(_)).Times(0);
+
+  session_.OnCanWrite();
+  EXPECT_TRUE(session_.WillingAndAbleToWrite());
+}
+
+TEST_P(QuicSessionTestServer, BufferedHandshake) {
+  EXPECT_FALSE(session_.HasPendingHandshake());  // Default value.
+
+  // Test that blocking other streams does not change our status.
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  StreamBlocker stream2_blocker(&session_, stream2->id());
+  stream2_blocker.MarkConnectionLevelWriteBlocked();
+  EXPECT_FALSE(session_.HasPendingHandshake());
+
+  TestStream* stream3 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  StreamBlocker stream3_blocker(&session_, stream3->id());
+  stream3_blocker.MarkConnectionLevelWriteBlocked();
+  EXPECT_FALSE(session_.HasPendingHandshake());
+
+  // Blocking (due to buffering of) the Crypto stream is detected.
+  session_.MarkConnectionLevelWriteBlocked(kCryptoStreamId);
+  EXPECT_TRUE(session_.HasPendingHandshake());
+
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  StreamBlocker stream4_blocker(&session_, stream4->id());
+  stream4_blocker.MarkConnectionLevelWriteBlocked();
+  EXPECT_TRUE(session_.HasPendingHandshake());
+
+  InSequence s;
+  // Force most streams to re-register, which is common scenario when we block
+  // the Crypto stream, and only the crypto stream can "really" write.
+
+  // Due to prioritization, we *should* be asked to write the crypto stream
+  // first.
+  // Don't re-register the crypto stream (which signals complete writing).
+  TestCryptoStream* crypto_stream = session_.GetCryptoStream();
+  EXPECT_CALL(*crypto_stream, OnCanWrite());
+
+  EXPECT_CALL(*stream2, OnCanWrite());
+  EXPECT_CALL(*stream3, OnCanWrite());
+  EXPECT_CALL(*stream4, OnCanWrite())
+      .WillOnce(Invoke(&stream4_blocker,
+                       &StreamBlocker::MarkConnectionLevelWriteBlocked));
+
+  session_.OnCanWrite();
+  EXPECT_TRUE(session_.WillingAndAbleToWrite());
+  EXPECT_FALSE(session_.HasPendingHandshake());  // Crypto stream wrote.
+}
+
+TEST_P(QuicSessionTestServer, OnCanWriteWithClosedStream) {
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream4 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  TestStream* stream6 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  session_.MarkConnectionLevelWriteBlocked(stream2->id());
+  session_.MarkConnectionLevelWriteBlocked(stream6->id());
+  session_.MarkConnectionLevelWriteBlocked(stream4->id());
+  CloseStream(stream6->id());
+
+  InSequence s;
+  EXPECT_CALL(*stream2, OnCanWrite());
+  EXPECT_CALL(*stream4, OnCanWrite());
+  session_.OnCanWrite();
+  EXPECT_FALSE(session_.WillingAndAbleToWrite());
+}
+
+TEST_P(QuicSessionTestServer, OnCanWriteLimitsNumWritesIfFlowControlBlocked) {
+  // Drive congestion control manually in order to ensure that
+  // application-limited signaling is handled correctly.
+  MockSendAlgorithm* send_algorithm = new StrictMock<MockSendAlgorithm>;
+  QuicConnectionPeer::SetSendAlgorithm(session_.connection(), kDefaultPathId,
+                                       send_algorithm);
+  EXPECT_CALL(*send_algorithm, TimeUntilSend(_, _))
+      .WillRepeatedly(Return(QuicTime::Delta::Zero()));
+
+  // Ensure connection level flow control blockage.
+  QuicFlowControllerPeer::SetSendWindowOffset(session_.flow_controller(), 0);
+  EXPECT_TRUE(session_.flow_controller()->IsBlocked());
+  EXPECT_TRUE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+
+  // Mark the crypto and headers streams as write blocked, we expect them to be
+  // allowed to write later.
+  session_.MarkConnectionLevelWriteBlocked(kCryptoStreamId);
+  session_.MarkConnectionLevelWriteBlocked(kHeadersStreamId);
+
+  // Create a data stream, and although it is write blocked we never expect it
+  // to be allowed to write as we are connection level flow control blocked.
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  session_.MarkConnectionLevelWriteBlocked(stream->id());
+  EXPECT_CALL(*stream, OnCanWrite()).Times(0);
+
+  // The crypto and headers streams should be called even though we are
+  // connection flow control blocked.
+  TestCryptoStream* crypto_stream = session_.GetCryptoStream();
+  EXPECT_CALL(*crypto_stream, OnCanWrite());
+  TestHeadersStream* headers_stream = new TestHeadersStream(&session_);
+  QuicSpdySessionPeer::SetHeadersStream(&session_, headers_stream);
+  EXPECT_CALL(*headers_stream, OnCanWrite());
+
+  // After the crypto and header streams perform a write, the connection will be
+  // blocked by the flow control, hence it should become application-limited.
+  EXPECT_CALL(*send_algorithm, OnApplicationLimited(_));
+
+  session_.OnCanWrite();
+  EXPECT_FALSE(session_.WillingAndAbleToWrite());
+}
+
+TEST_P(QuicSessionTestServer, SendGoAway) {
+  MockPacketWriter* writer = static_cast<MockPacketWriter*>(
+      QuicConnectionPeer::GetWriter(session_.connection()));
+  EXPECT_CALL(*writer, WritePacket(_, _, _, _, _))
+      .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
+  EXPECT_CALL(*connection_, SendGoAway(_, _, _))
+      .WillOnce(Invoke(connection_, &MockQuicConnection::ReallySendGoAway));
+  session_.SendGoAway(QUIC_PEER_GOING_AWAY, "Going Away.");
+  EXPECT_TRUE(session_.goaway_sent());
+
+  const QuicStreamId kTestStreamId = 5u;
+  EXPECT_CALL(*connection_,
+              SendRstStream(kTestStreamId, QUIC_STREAM_PEER_GOING_AWAY, 0))
+      .Times(0);
+  EXPECT_TRUE(session_.GetOrCreateDynamicStream(kTestStreamId));
+}
+
+TEST_P(QuicSessionTestServer, IncreasedTimeoutAfterCryptoHandshake) {
+  EXPECT_EQ(kInitialIdleTimeoutSecs + 3,
+            QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds());
+  CryptoHandshakeMessage msg;
+  session_.GetCryptoStream()->OnHandshakeMessage(msg);
+  EXPECT_EQ(kMaximumIdleTimeoutSecs + 3,
+            QuicConnectionPeer::GetNetworkTimeout(connection_).ToSeconds());
+}
+
+TEST_P(QuicSessionTestServer, RstStreamBeforeHeadersDecompressed) {
+  // Send two bytes of payload.
+  QuicStreamFrame data1(kClientDataStreamId1, false, 0, StringPiece("HT"));
+  session_.OnStreamFrame(data1);
+  EXPECT_EQ(1u, session_.GetNumOpenIncomingStreams());
+
+  EXPECT_CALL(*connection_, SendRstStream(kClientDataStreamId1, _, _));
+  QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM,
+                          0);
+  session_.OnRstStream(rst1);
+  EXPECT_EQ(0u, session_.GetNumOpenIncomingStreams());
+  // Connection should remain alive.
+  EXPECT_TRUE(connection_->connected());
+}
+
+TEST_P(QuicSessionTestServer, HandshakeUnblocksFlowControlBlockedStream) {
+  // Test that if a stream is flow control blocked, then on receipt of the SHLO
+  // containing a suitable send window offset, the stream becomes unblocked.
+
+  // Ensure that Writev consumes all the data it is given (simulate no socket
+  // blocking).
+  session_.set_writev_consumes_all_data(true);
+
+  // Create a stream, and send enough data to make it flow control blocked.
+  TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  string body(kMinimumFlowControlSendWindow, '.');
+  EXPECT_FALSE(stream2->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+  EXPECT_CALL(*connection_, SendBlocked(_)).Times(AtLeast(1));
+  EXPECT_CALL(*connection_, SendBlocked(0));
+  stream2->WriteOrBufferBody(body, false, nullptr);
+  EXPECT_TRUE(stream2->flow_controller()->IsBlocked());
+  EXPECT_TRUE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_TRUE(session_.IsStreamFlowControlBlocked());
+
+  // The handshake message will call OnCanWrite, so the stream can resume
+  // writing.
+  EXPECT_CALL(*stream2, OnCanWrite());
+  // Now complete the crypto handshake, resulting in an increased flow control
+  // send window.
+  CryptoHandshakeMessage msg;
+  session_.GetCryptoStream()->OnHandshakeMessage(msg);
+
+  // Stream is now unblocked.
+  EXPECT_FALSE(stream2->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+}
+
+TEST_P(QuicSessionTestServer, HandshakeUnblocksFlowControlBlockedCryptoStream) {
+  // Test that if the crypto stream is flow control blocked, then if the SHLO
+  // contains a larger send window offset, the stream becomes unblocked.
+  session_.set_writev_consumes_all_data(true);
+  TestCryptoStream* crypto_stream = session_.GetCryptoStream();
+  EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+  QuicHeadersStream* headers_stream =
+      QuicSpdySessionPeer::GetHeadersStream(&session_);
+  EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+  // Write until the crypto stream is flow control blocked.
+  EXPECT_CALL(*connection_, SendBlocked(kCryptoStreamId));
+  for (QuicStreamId i = 0;
+       !crypto_stream->flow_controller()->IsBlocked() && i < 1000u; i++) {
+    EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+    EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+    QuicConfig config;
+    CryptoHandshakeMessage crypto_message;
+    config.ToHandshakeMessage(&crypto_message);
+    crypto_stream->SendHandshakeMessage(crypto_message);
+  }
+  EXPECT_TRUE(crypto_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_TRUE(session_.IsStreamFlowControlBlocked());
+  EXPECT_FALSE(session_.HasDataToWrite());
+  EXPECT_TRUE(crypto_stream->HasBufferedData());
+
+  // The handshake message will call OnCanWrite, so the stream can
+  // resume writing.
+  EXPECT_CALL(*crypto_stream, OnCanWrite());
+  // Now complete the crypto handshake, resulting in an increased flow control
+  // send window.
+  CryptoHandshakeMessage msg;
+  session_.GetCryptoStream()->OnHandshakeMessage(msg);
+
+  // Stream is now unblocked and will no longer have buffered data.
+  EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+}
+
+#if !defined(OS_IOS)
+// This test is failing flakily for iOS bots.
+// http://crbug.com/425050
+// NOTE: It's not possible to use the standard MAYBE_ convention to disable
+// this test on iOS because when this test gets instantiated it ends up with
+// various names that are dependent on the parameters passed.
+TEST_P(QuicSessionTestServer,
+       HandshakeUnblocksFlowControlBlockedHeadersStream) {
+  // Test that if the header stream is flow control blocked, then if the SHLO
+  // contains a larger send window offset, the stream becomes unblocked.
+  session_.set_writev_consumes_all_data(true);
+  TestCryptoStream* crypto_stream = session_.GetCryptoStream();
+  EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+  QuicHeadersStream* headers_stream =
+      QuicSpdySessionPeer::GetHeadersStream(&session_);
+  EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+  QuicStreamId stream_id = 5;
+  // Write until the header stream is flow control blocked.
+  EXPECT_CALL(*connection_, SendBlocked(kHeadersStreamId));
+  SpdyHeaderBlock headers;
+  while (!headers_stream->flow_controller()->IsBlocked() && stream_id < 2000) {
+    EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+    EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+    headers["header"] = base::Uint64ToString(base::RandUint64()) +
+                        base::Uint64ToString(base::RandUint64()) +
+                        base::Uint64ToString(base::RandUint64());
+    headers_stream->WriteHeaders(stream_id, headers.Clone(), true, 0, nullptr);
+    stream_id += 2;
+  }
+  // Write once more to ensure that the headers stream has buffered data. The
+  // random headers may have exactly filled the flow control window.
+  headers_stream->WriteHeaders(stream_id, std::move(headers), true, 0, nullptr);
+  EXPECT_TRUE(headers_stream->HasBufferedData());
+
+  EXPECT_TRUE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(crypto_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_TRUE(session_.IsStreamFlowControlBlocked());
+  EXPECT_FALSE(session_.HasDataToWrite());
+
+  // Now complete the crypto handshake, resulting in an increased flow control
+  // send window.
+  CryptoHandshakeMessage msg;
+  session_.GetCryptoStream()->OnHandshakeMessage(msg);
+
+  // Stream is now unblocked and will no longer have buffered data.
+  EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+  EXPECT_FALSE(headers_stream->HasBufferedData());
+}
+#endif  // !defined(OS_IOS)
+
+TEST_P(QuicSessionTestServer, ConnectionFlowControlAccountingRstOutOfOrder) {
+  // Test that when we receive an out of order stream RST we correctly adjust
+  // our connection level flow control receive window.
+  // On close, the stream should mark as consumed all bytes between the highest
+  // byte consumed so far and the final byte offset from the RST frame.
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  const QuicStreamOffset kByteOffset =
+      1 + kInitialSessionFlowControlWindowForTest / 2;
+
+  // Expect no stream WINDOW_UPDATE frames, as stream read side closed.
+  EXPECT_CALL(*connection_, SendWindowUpdate(stream->id(), _)).Times(0);
+  // We do expect a connection level WINDOW_UPDATE when the stream is reset.
+  EXPECT_CALL(*connection_,
+              SendWindowUpdate(
+                  0, kInitialSessionFlowControlWindowForTest + kByteOffset));
+
+  EXPECT_CALL(*connection_, SendRstStream(stream->id(), _, _));
+  QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED,
+                               kByteOffset);
+  session_.OnRstStream(rst_frame);
+  session_.PostProcessAfterData();
+  EXPECT_EQ(kByteOffset, session_.flow_controller()->bytes_consumed());
+}
+
+TEST_P(QuicSessionTestServer, ConnectionFlowControlAccountingFinAndLocalReset) {
+  // Test the situation where we receive a FIN on a stream, and before we fully
+  // consume all the data from the sequencer buffer we locally RST the stream.
+  // The bytes between highest consumed byte, and the final byte offset that we
+  // determined when the FIN arrived, should be marked as consumed at the
+  // connection level flow controller when the stream is reset.
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+
+  const QuicStreamOffset kByteOffset =
+      kInitialSessionFlowControlWindowForTest / 2 - 1;
+  QuicStreamFrame frame(stream->id(), true, kByteOffset, ".");
+  session_.OnStreamFrame(frame);
+  session_.PostProcessAfterData();
+  EXPECT_TRUE(connection_->connected());
+
+  EXPECT_EQ(0u, stream->flow_controller()->bytes_consumed());
+  EXPECT_EQ(kByteOffset + frame.data_length,
+            stream->flow_controller()->highest_received_byte_offset());
+
+  // Reset stream locally.
+  EXPECT_CALL(*connection_, SendRstStream(stream->id(), _, _));
+  stream->Reset(QUIC_STREAM_CANCELLED);
+  EXPECT_EQ(kByteOffset + frame.data_length,
+            session_.flow_controller()->bytes_consumed());
+}
+
+TEST_P(QuicSessionTestServer, ConnectionFlowControlAccountingFinAfterRst) {
+  // Test that when we RST the stream (and tear down stream state), and then
+  // receive a FIN from the peer, we correctly adjust our connection level flow
+  // control receive window.
+
+  // Connection starts with some non-zero highest received byte offset,
+  // due to other active streams.
+  const uint64_t kInitialConnectionBytesConsumed = 567;
+  const uint64_t kInitialConnectionHighestReceivedOffset = 1234;
+  EXPECT_LT(kInitialConnectionBytesConsumed,
+            kInitialConnectionHighestReceivedOffset);
+  session_.flow_controller()->UpdateHighestReceivedOffset(
+      kInitialConnectionHighestReceivedOffset);
+  session_.flow_controller()->AddBytesConsumed(kInitialConnectionBytesConsumed);
+
+  // Reset our stream: this results in the stream being closed locally.
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  EXPECT_CALL(*connection_, SendRstStream(stream->id(), _, _));
+  stream->Reset(QUIC_STREAM_CANCELLED);
+
+  // Now receive a response from the peer with a FIN. We should handle this by
+  // adjusting the connection level flow control receive window to take into
+  // account the total number of bytes sent by the peer.
+  const QuicStreamOffset kByteOffset = 5678;
+  string body = "hello";
+  QuicStreamFrame frame(stream->id(), true, kByteOffset, StringPiece(body));
+  session_.OnStreamFrame(frame);
+
+  QuicStreamOffset total_stream_bytes_sent_by_peer =
+      kByteOffset + body.length();
+  EXPECT_EQ(kInitialConnectionBytesConsumed + total_stream_bytes_sent_by_peer,
+            session_.flow_controller()->bytes_consumed());
+  EXPECT_EQ(
+      kInitialConnectionHighestReceivedOffset + total_stream_bytes_sent_by_peer,
+      session_.flow_controller()->highest_received_byte_offset());
+}
+
+TEST_P(QuicSessionTestServer, ConnectionFlowControlAccountingRstAfterRst) {
+  // Test that when we RST the stream (and tear down stream state), and then
+  // receive a RST from the peer, we correctly adjust our connection level flow
+  // control receive window.
+
+  // Connection starts with some non-zero highest received byte offset,
+  // due to other active streams.
+  const uint64_t kInitialConnectionBytesConsumed = 567;
+  const uint64_t kInitialConnectionHighestReceivedOffset = 1234;
+  EXPECT_LT(kInitialConnectionBytesConsumed,
+            kInitialConnectionHighestReceivedOffset);
+  session_.flow_controller()->UpdateHighestReceivedOffset(
+      kInitialConnectionHighestReceivedOffset);
+  session_.flow_controller()->AddBytesConsumed(kInitialConnectionBytesConsumed);
+
+  // Reset our stream: this results in the stream being closed locally.
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  EXPECT_CALL(*connection_, SendRstStream(stream->id(), _, _));
+  stream->Reset(QUIC_STREAM_CANCELLED);
+  EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream));
+
+  // Now receive a RST from the peer. We should handle this by adjusting the
+  // connection level flow control receive window to take into account the total
+  // number of bytes sent by the peer.
+  const QuicStreamOffset kByteOffset = 5678;
+  QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED,
+                               kByteOffset);
+  session_.OnRstStream(rst_frame);
+
+  EXPECT_EQ(kInitialConnectionBytesConsumed + kByteOffset,
+            session_.flow_controller()->bytes_consumed());
+  EXPECT_EQ(kInitialConnectionHighestReceivedOffset + kByteOffset,
+            session_.flow_controller()->highest_received_byte_offset());
+}
+
+TEST_P(QuicSessionTestServer, InvalidStreamFlowControlWindowInHandshake) {
+  // Test that receipt of an invalid (< default) stream flow control window from
+  // the peer results in the connection being torn down.
+  const uint32_t kInvalidWindow = kMinimumFlowControlSendWindow - 1;
+  QuicConfigPeer::SetReceivedInitialStreamFlowControlWindow(session_.config(),
+                                                            kInvalidWindow);
+
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_FLOW_CONTROL_INVALID_WINDOW, _, _));
+  session_.OnConfigNegotiated();
+}
+
+TEST_P(QuicSessionTestServer, InvalidSessionFlowControlWindowInHandshake) {
+  // Test that receipt of an invalid (< default) session flow control window
+  // from the peer results in the connection being torn down.
+  const uint32_t kInvalidWindow = kMinimumFlowControlSendWindow - 1;
+  QuicConfigPeer::SetReceivedInitialSessionFlowControlWindow(session_.config(),
+                                                             kInvalidWindow);
+
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_FLOW_CONTROL_INVALID_WINDOW, _, _));
+  session_.OnConfigNegotiated();
+}
+
+TEST_P(QuicSessionTestServer, FlowControlWithInvalidFinalOffset) {
+  // Test that if we receive a stream RST with a highest byte offset that
+  // violates flow control, that we close the connection.
+  const uint64_t kLargeOffset = kInitialSessionFlowControlWindowForTest + 1;
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA, _, _))
+      .Times(2);
+
+  // Check that stream frame + FIN results in connection close.
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  EXPECT_CALL(*connection_, SendRstStream(stream->id(), _, _));
+  stream->Reset(QUIC_STREAM_CANCELLED);
+  QuicStreamFrame frame(stream->id(), true, kLargeOffset, StringPiece());
+  session_.OnStreamFrame(frame);
+
+  // Check that RST results in connection close.
+  QuicRstStreamFrame rst_frame(stream->id(), QUIC_STREAM_CANCELLED,
+                               kLargeOffset);
+  session_.OnRstStream(rst_frame);
+}
+
+TEST_P(QuicSessionTestServer, WindowUpdateUnblocksHeadersStream) {
+  // Test that a flow control blocked headers stream gets unblocked on recipt of
+  // a WINDOW_UPDATE frame.
+
+  // Set the headers stream to be flow control blocked.
+  QuicHeadersStream* headers_stream =
+      QuicSpdySessionPeer::GetHeadersStream(&session_);
+  QuicFlowControllerPeer::SetSendWindowOffset(headers_stream->flow_controller(),
+                                              0);
+  EXPECT_TRUE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_TRUE(session_.IsStreamFlowControlBlocked());
+
+  // Unblock the headers stream by supplying a WINDOW_UPDATE.
+  QuicWindowUpdateFrame window_update_frame(headers_stream->id(),
+                                            2 * kMinimumFlowControlSendWindow);
+  session_.OnWindowUpdateFrame(window_update_frame);
+  EXPECT_FALSE(headers_stream->flow_controller()->IsBlocked());
+  EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
+  EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
+}
+
+TEST_P(QuicSessionTestServer, TooManyUnfinishedStreamsCauseServerRejectStream) {
+  // If a buggy/malicious peer creates too many streams that are not ended
+  // with a FIN or RST then we send an RST to refuse streams.
+  const QuicStreamId kMaxStreams = 5;
+  QuicSessionPeer::SetMaxOpenIncomingStreams(&session_, kMaxStreams);
+  const QuicStreamId kFirstStreamId = kClientDataStreamId1;
+  const QuicStreamId kFinalStreamId = kClientDataStreamId1 + 2 * kMaxStreams;
+
+  // Create kMaxStreams data streams, and close them all without receiving a
+  // FIN or a RST_STREAM from the client.
+  for (QuicStreamId i = kFirstStreamId; i < kFinalStreamId; i += 2) {
+    QuicStreamFrame data1(i, false, 0, StringPiece("HT"));
+    session_.OnStreamFrame(data1);
+    // EXPECT_EQ(1u, session_.GetNumOpenStreams());
+    EXPECT_CALL(*connection_, SendRstStream(i, _, _));
+    session_.CloseStream(i);
+  }
+
+  EXPECT_CALL(*connection_,
+              SendRstStream(kFinalStreamId, QUIC_REFUSED_STREAM, _))
+      .Times(1);
+  // Create one more data streams to exceed limit of open stream.
+  QuicStreamFrame data1(kFinalStreamId, false, 0, StringPiece("HT"));
+  session_.OnStreamFrame(data1);
+
+  // Called after any new data is received by the session, and triggers the
+  // call to close the connection.
+  session_.PostProcessAfterData();
+}
+
+TEST_P(QuicSessionTestServer, DrainingStreamsDoNotCountAsOpened) {
+  // Verify that a draining stream (which has received a FIN but not consumed
+  // it) does not count against the open quota (because it is closed from the
+  // protocol point of view).
+  EXPECT_CALL(*connection_, SendRstStream(_, QUIC_REFUSED_STREAM, _)).Times(0);
+  const QuicStreamId kMaxStreams = 5;
+  QuicSessionPeer::SetMaxOpenIncomingStreams(&session_, kMaxStreams);
+
+  // Create kMaxStreams + 1 data streams, and mark them draining.
+  const QuicStreamId kFirstStreamId = kClientDataStreamId1;
+  const QuicStreamId kFinalStreamId =
+      kClientDataStreamId1 + 2 * kMaxStreams + 1;
+  for (QuicStreamId i = kFirstStreamId; i < kFinalStreamId; i += 2) {
+    QuicStreamFrame data1(i, true, 0, StringPiece("HT"));
+    session_.OnStreamFrame(data1);
+    EXPECT_EQ(1u, session_.GetNumOpenIncomingStreams());
+    session_.StreamDraining(i);
+    EXPECT_EQ(0u, session_.GetNumOpenIncomingStreams());
+  }
+
+  // Called after any new data is received by the session, and triggers the call
+  // to close the connection.
+  session_.PostProcessAfterData();
+}
+
+TEST_P(QuicSessionTestServer, TestMaxIncomingAndOutgoingStreamsAllowed) {
+  // Tests that on server side, the value of max_open_incoming/outgoing streams
+  // are setup correctly during negotiation.
+  // The value for outgoing stream is limited to negotiated value and for
+  // incoming stream it is set to be larger than that.
+  session_.OnConfigNegotiated();
+  // The max number of open outgoing streams is less than that of incoming
+  // streams, and it should be same as negotiated value.
+  EXPECT_LT(session_.max_open_outgoing_streams(),
+            session_.max_open_incoming_streams());
+  EXPECT_EQ(session_.max_open_outgoing_streams(),
+            kDefaultMaxStreamsPerConnection);
+  EXPECT_GT(session_.max_open_incoming_streams(),
+            kDefaultMaxStreamsPerConnection);
+}
+
+TEST_P(QuicSessionTestServer, EnableFHOLThroughConfigOption) {
+  QuicConfigPeer::SetReceivedForceHolBlocking(session_.config());
+  session_.OnConfigNegotiated();
+  if (version() <= QUIC_VERSION_35) {
+    EXPECT_FALSE(session_.force_hol_blocking());
+  } else {
+    EXPECT_TRUE(session_.force_hol_blocking());
+  }
+}
+
+class QuicSessionTestClient : public QuicSessionTestBase {
+ protected:
+  QuicSessionTestClient() : QuicSessionTestBase(Perspective::IS_CLIENT) {}
+};
+
+INSTANTIATE_TEST_CASE_P(Tests,
+                        QuicSessionTestClient,
+                        ::testing::ValuesIn(AllSupportedVersions()));
+
+TEST_P(QuicSessionTestClient, AvailableStreamsClient) {
+  ASSERT_TRUE(session_.GetOrCreateDynamicStream(6) != nullptr);
+  // Both 2 and 4 should be available.
+  EXPECT_TRUE(QuicSessionPeer::IsStreamAvailable(&session_, 2));
+  EXPECT_TRUE(QuicSessionPeer::IsStreamAvailable(&session_, 4));
+  ASSERT_TRUE(session_.GetOrCreateDynamicStream(2) != nullptr);
+  ASSERT_TRUE(session_.GetOrCreateDynamicStream(4) != nullptr);
+  // And 5 should be not available.
+  EXPECT_FALSE(QuicSessionPeer::IsStreamAvailable(&session_, 5));
+}
+
+TEST_P(QuicSessionTestClient, RecordFinAfterReadSideClosed) {
+  // Verify that an incoming FIN is recorded in a stream object even if the read
+  // side has been closed.  This prevents an entry from being made in
+  // locally_closed_streams_highest_offset_ (which will never be deleted).
+  TestStream* stream = session_.CreateOutgoingDynamicStream(kDefaultPriority);
+  QuicStreamId stream_id = stream->id();
+
+  // Close the read side manually.
+  ReliableQuicStreamPeer::CloseReadSide(stream);
+
+  // Receive a stream data frame with FIN.
+  QuicStreamFrame frame(stream_id, true, 0, StringPiece());
+  session_.OnStreamFrame(frame);
+  EXPECT_TRUE(stream->fin_received());
+
+  // Reset stream locally.
+  EXPECT_CALL(*connection_, SendRstStream(stream->id(), _, _));
+  stream->Reset(QUIC_STREAM_CANCELLED);
+  EXPECT_TRUE(ReliableQuicStreamPeer::read_side_closed(stream));
+
+  // Allow the session to delete the stream object.
+  session_.PostProcessAfterData();
+  EXPECT_TRUE(connection_->connected());
+  EXPECT_TRUE(QuicSessionPeer::IsStreamClosed(&session_, stream_id));
+  EXPECT_FALSE(QuicSessionPeer::IsStreamCreated(&session_, stream_id));
+
+  // The stream is not waiting for the arrival of the peer's final offset as it
+  // was received with the FIN earlier.
+  EXPECT_EQ(
+      0u,
+      QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(&session_).size());
+}
+
+TEST_P(QuicSessionTestClient, TestMaxIncomingAndOutgoingStreamsAllowed) {
+  // Tests that on client side, the value of max_open_incoming/outgoing streams
+  // are setup correctly during negotiation.
+  // When flag is true, the value for outgoing stream is limited to negotiated
+  // value and for incoming stream it is set to be larger than that.
+  session_.OnConfigNegotiated();
+  EXPECT_LT(session_.max_open_outgoing_streams(),
+            session_.max_open_incoming_streams());
+  EXPECT_EQ(session_.max_open_outgoing_streams(),
+            kDefaultMaxStreamsPerConnection);
+}
+
+TEST_P(QuicSessionTestClient, EnableDHDTThroughConnectionOption) {
+  QuicTagVector copt;
+  copt.push_back(kDHDT);
+  QuicConfigPeer::SetConnectionOptionsToSend(session_.config(), copt);
+  session_.OnConfigNegotiated();
+  EXPECT_EQ(QuicHeadersStreamPeer::GetSpdyFramer(session_.headers_stream())
+                .header_encoder_table_size(),
+            0UL);
+}
+
+TEST_P(QuicSessionTestClient, EnableFHOLThroughConfigOption) {
+  session_.config()->SetForceHolBlocking();
+  session_.OnConfigNegotiated();
+  if (version() <= QUIC_VERSION_35) {
+    EXPECT_FALSE(session_.force_hol_blocking());
+  } else {
+    EXPECT_TRUE(session_.force_hol_blocking());
+  }
+}
+
+}  // namespace
+}  // namespace test
+}  // namespace net
diff --git a/src/net/quic/core/quic_simple_buffer_allocator_test.cc b/src/net/quic/core/quic_simple_buffer_allocator_test.cc
index 69cfad9..3549997 100644
--- a/src/net/quic/core/quic_simple_buffer_allocator_test.cc
+++ b/src/net/quic/core/quic_simple_buffer_allocator_test.cc
@@ -5,27 +5,28 @@
 #include "net/quic/core/quic_simple_buffer_allocator.h"
 
 #include "net/quic/core/quic_packets.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using ::testing::Eq;
 
 namespace net {
 namespace {
 
-TEST(SimpleBufferAllocatorTest, NewDelete) {
+class SimpleBufferAllocatorTest : public QuicTest {};
+
+TEST_F(SimpleBufferAllocatorTest, NewDelete) {
   SimpleBufferAllocator alloc;
   char* buf = alloc.New(4);
   EXPECT_NE(nullptr, buf);
   alloc.Delete(buf);
 }
 
-TEST(SimpleBufferAllocatorTest, DeleteNull) {
+TEST_F(SimpleBufferAllocatorTest, DeleteNull) {
   SimpleBufferAllocator alloc;
   alloc.Delete(nullptr);
 }
 
-TEST(SimpleBufferAllocatorTest, StoreInUniqueStreamBuffer) {
+TEST_F(SimpleBufferAllocatorTest, StoreInUniqueStreamBuffer) {
   SimpleBufferAllocator alloc;
   UniqueStreamBuffer buf = NewStreamBuffer(&alloc, 4);
   buf.reset();
diff --git a/src/net/quic/core/quic_socket_address_coder_test.cc b/src/net/quic/core/quic_socket_address_coder_test.cc
index 548fde2..5a36b5b 100644
--- a/src/net/quic/core/quic_socket_address_coder_test.cc
+++ b/src/net/quic/core/quic_socket_address_coder_test.cc
@@ -4,14 +4,16 @@
 
 #include "net/quic/core/quic_socket_address_coder.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
-TEST(QuicSocketAddressCoderTest, EncodeIPv4) {
+class QuicSocketAddressCoderTest : public QuicTest {};
+
+TEST_F(QuicSocketAddressCoderTest, EncodeIPv4) {
   QuicIpAddress ip;
   ip.FromString("4.31.198.44");
   QuicSocketAddressCoder coder(QuicSocketAddress(ip, 0x1234));
@@ -20,7 +22,7 @@
   EXPECT_EQ(expected, serialized);
 }
 
-TEST(QuicSocketAddressCoderTest, EncodeIPv6) {
+TEST_F(QuicSocketAddressCoderTest, EncodeIPv6) {
   QuicIpAddress ip;
   ip.FromString("2001:700:300:1800::f");
   QuicSocketAddressCoder coder(QuicSocketAddress(ip, 0x5678));
@@ -34,7 +36,7 @@
   EXPECT_EQ(expected, serialized);
 }
 
-TEST(QuicSocketAddressCoderTest, DecodeIPv4) {
+TEST_F(QuicSocketAddressCoderTest, DecodeIPv4) {
   string serialized("\x02\x00\x04\x1f\xc6\x2c\x34\x12", 8);
   QuicSocketAddressCoder coder;
   ASSERT_TRUE(coder.Decode(serialized.data(), serialized.length()));
@@ -44,7 +46,7 @@
   EXPECT_EQ(0x1234, coder.port());
 }
 
-TEST(QuicSocketAddressCoderTest, DecodeIPv6) {
+TEST_F(QuicSocketAddressCoderTest, DecodeIPv6) {
   string serialized(
       "\x0a\x00"
       "\x20\x01\x07\x00\x03\x00\x18\x00"
@@ -62,7 +64,7 @@
   EXPECT_EQ(0x5678, coder.port());
 }
 
-TEST(QuicSocketAddressCoderTest, DecodeBad) {
+TEST_F(QuicSocketAddressCoderTest, DecodeBad) {
   string serialized(
       "\x0a\x00"
       "\x20\x01\x07\x00\x03\x00\x18\x00"
@@ -95,7 +97,7 @@
   EXPECT_TRUE(serialized.empty());
 }
 
-TEST(QuicSocketAddressCoderTest, EncodeAndDecode) {
+TEST_F(QuicSocketAddressCoderTest, EncodeAndDecode) {
   struct {
     const char* ip_literal;
     uint16_t port;
diff --git a/src/net/quic/core/quic_spdy_session.cc b/src/net/quic/core/quic_spdy_session.cc
index 77cd2cb..26d6d3c 100644
--- a/src/net/quic/core/quic_spdy_session.cc
+++ b/src/net/quic/core/quic_spdy_session.cc
@@ -11,9 +11,11 @@
 
 #include "net/quic/core/quic_headers_stream.h"
 #include "net/quic/platform/api/quic_bug_tracker.h"
+#include "net/quic/platform/api/quic_flag_utils.h"
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_text_utils.h"
 
 using std::string;
 
@@ -393,7 +395,35 @@
                                          size_t frame_len,
                                          const QuicHeaderList& header_list) {
   QuicSpdyStream* stream = GetSpdyDataStream(stream_id);
-  if (!stream) {
+  if (stream == nullptr) {
+    QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_final_offset_from_trailers, 1,
+                      3);
+    if (FLAGS_quic_reloadable_flag_quic_final_offset_from_trailers) {
+      QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_final_offset_from_trailers, 2,
+                        3);
+      // The stream no longer exists, but trailing headers may contain the final
+      // byte offset necessary for flow control and open stream accounting.
+      size_t final_byte_offset = 0;
+      for (const auto& header : header_list) {
+        const string& header_key = header.first;
+        const string& header_value = header.second;
+        if (header_key == kFinalOffsetHeaderKey) {
+          if (!QuicTextUtils::StringToSizeT(header_value, &final_byte_offset)) {
+            connection()->CloseConnection(
+                QUIC_INVALID_HEADERS_STREAM_DATA,
+                "Trailers are malformed (no final offset)",
+                ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
+            return;
+          }
+          DVLOG(1) << "Received final byte offset in trailers for stream "
+                   << stream_id << ", which no longer exists.";
+          OnFinalByteOffsetReceived(stream_id, final_byte_offset);
+          QUIC_FLAG_COUNT_N(
+              quic_reloadable_flag_quic_final_offset_from_trailers, 3, 3);
+        }
+      }
+    }
+
     // It's quite possible to receive headers after a stream has been reset.
     return;
   }
diff --git a/src/net/quic/core/quic_spdy_stream_test.cc b/src/net/quic/core/quic_spdy_stream_test.cc
index a34b0c7..e202b3c 100644
--- a/src/net/quic/core/quic_spdy_stream_test.cc
+++ b/src/net/quic/core/quic_spdy_stream_test.cc
@@ -13,13 +13,12 @@
 #include "net/quic/core/spdy_utils.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_flow_controller_peer.h"
 #include "net/quic/test_tools/quic_session_peer.h"
 #include "net/quic/test_tools/quic_stream_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::AnyNumber;
@@ -64,7 +63,7 @@
   string data_;
 };
 
-class QuicSpdyStreamTest : public ::testing::TestWithParam<QuicVersion> {
+class QuicSpdyStreamTest : public QuicTestWithParam<QuicVersion> {
  public:
   QuicSpdyStreamTest() {
     headers_[":host"] = "www.google.com";
@@ -116,7 +115,6 @@
   }
 
  protected:
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   MockQuicConnectionHelper helper_;
   MockAlarmFactory alarm_factory_;
   MockQuicConnection* connection_;
diff --git a/src/net/quic/core/quic_stream_sequencer_buffer_test.cc b/src/net/quic/core/quic_stream_sequencer_buffer_test.cc
index 175c54f..88c9a0c 100644
--- a/src/net/quic/core/quic_stream_sequencer_buffer_test.cc
+++ b/src/net/quic/core/quic_stream_sequencer_buffer_test.cc
@@ -13,13 +13,12 @@
 #include "base/macros.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_stream_sequencer_buffer_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gmock_mutant.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -81,7 +80,6 @@
   MockClock clock_;
   std::unique_ptr<QuicStreamSequencerBuffer> buffer_;
   std::unique_ptr<QuicStreamSequencerBufferPeer> helper_;
-  QuicFlagSaver flag_saver_;
   string error_details_;
 };
 
diff --git a/src/net/quic/core/quic_stream_sequencer_test.cc b/src/net/quic/core/quic_stream_sequencer_test.cc
index a75ca27..7515b4a 100644
--- a/src/net/quic/core/quic_stream_sequencer_test.cc
+++ b/src/net/quic/core/quic_stream_sequencer_test.cc
@@ -14,13 +14,12 @@
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/quic_stream_sequencer_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gmock_mutant.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::_;
@@ -59,7 +58,7 @@
 static const char kPayload[] =
     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
-class QuicStreamSequencerTest : public ::testing::Test {
+class QuicStreamSequencerTest : public QuicTest {
  public:
   void ConsumeData(size_t num_bytes) {
     char buffer[1024];
diff --git a/src/net/quic/core/quic_stream_test.cc b/src/net/quic/core/quic_stream_test.cc
index 69e28f4..6e83dae 100644
--- a/src/net/quic/core/quic_stream_test.cc
+++ b/src/net/quic/core/quic_stream_test.cc
@@ -13,6 +13,7 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_config_peer.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
 #include "net/quic/test_tools/quic_flow_controller_peer.h"
@@ -20,7 +21,6 @@
 #include "net/quic/test_tools/quic_stream_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gmock_mutant.h"
 
 using std::string;
@@ -68,7 +68,7 @@
   string data_;
 };
 
-class QuicStreamTest : public ::testing::TestWithParam<bool> {
+class QuicStreamTest : public QuicTestWithParam<bool> {
  public:
   QuicStreamTest()
       : initial_flow_control_window_bytes_(kMaxPacketSize),
diff --git a/src/net/quic/core/quic_sustained_bandwidth_recorder_test.cc b/src/net/quic/core/quic_sustained_bandwidth_recorder_test.cc
index a93b9db..3221ec4 100644
--- a/src/net/quic/core/quic_sustained_bandwidth_recorder_test.cc
+++ b/src/net/quic/core/quic_sustained_bandwidth_recorder_test.cc
@@ -6,13 +6,15 @@
 
 #include "net/quic/core/quic_bandwidth.h"
 #include "net/quic/core/quic_time.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 namespace {
 
-TEST(QuicSustainedBandwidthRecorderTest, BandwidthEstimates) {
+class QuicSustainedBandwidthRecorderTest : public QuicTest {};
+
+TEST_F(QuicSustainedBandwidthRecorderTest, BandwidthEstimates) {
   QuicSustainedBandwidthRecorder recorder;
   EXPECT_FALSE(recorder.HasEstimate());
 
@@ -91,7 +93,7 @@
   EXPECT_EQ(recorder.MaxBandwidthTimestamp(), kSeconds);
 }
 
-TEST(QuicSustainedBandwidthRecorderTest, SlowStart) {
+TEST_F(QuicSustainedBandwidthRecorderTest, SlowStart) {
   // Verify that slow start status is correctly recorded.
   QuicSustainedBandwidthRecorder recorder;
   EXPECT_FALSE(recorder.HasEstimate());
diff --git a/src/net/quic/core/quic_tag_test.cc b/src/net/quic/core/quic_tag_test.cc
index 92a51d7..7ddab1d 100644
--- a/src/net/quic/core/quic_tag_test.cc
+++ b/src/net/quic/core/quic_tag_test.cc
@@ -5,14 +5,15 @@
 #include "net/quic/core/quic_tag.h"
 
 #include "net/quic/core/crypto/crypto_protocol.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
 namespace {
 
-TEST(QuicTagTest, TagToString) {
+class QuicTagTest : public QuicTest {};
+
+TEST_F(QuicTagTest, TagToString) {
   EXPECT_EQ("SCFG", QuicTagToString(kSCFG));
   EXPECT_EQ("SNO ", QuicTagToString(kServerNonceTag));
   EXPECT_EQ("CRT ", QuicTagToString(kCertificateTag));
@@ -22,7 +23,7 @@
   EXPECT_EQ("525092931", QuicTagToString(MakeQuicTag('C', 'H', 'L', '\x1f')));
 }
 
-TEST(QuicTagTest, MakeQuicTag) {
+TEST_F(QuicTagTest, MakeQuicTag) {
   QuicTag tag = MakeQuicTag('A', 'B', 'C', 'D');
   char bytes[4];
   memcpy(bytes, &tag, 4);
diff --git a/src/net/quic/core/quic_time_test.cc b/src/net/quic/core/quic_time_test.cc
index 5324002..e8cd9f4 100644
--- a/src/net/quic/core/quic_time_test.cc
+++ b/src/net/quic/core/quic_time_test.cc
@@ -3,25 +3,27 @@
 // found in the LICENSE file.
 
 #include "net/quic/core/quic_time.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/mock_clock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 
-TEST(QuicTimeDeltaTest, Zero) {
+class QuicTimeDeltaTest : public QuicTest {};
+
+TEST_F(QuicTimeDeltaTest, Zero) {
   EXPECT_TRUE(QuicTime::Delta::Zero().IsZero());
   EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite());
   EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsZero());
 }
 
-TEST(QuicTimeDeltaTest, Infinite) {
+TEST_F(QuicTimeDeltaTest, Infinite) {
   EXPECT_TRUE(QuicTime::Delta::Infinite().IsInfinite());
   EXPECT_FALSE(QuicTime::Delta::Zero().IsInfinite());
   EXPECT_FALSE(QuicTime::Delta::FromMilliseconds(1).IsInfinite());
 }
 
-TEST(QuicTimeDeltaTest, FromTo) {
+TEST_F(QuicTimeDeltaTest, FromTo) {
   EXPECT_EQ(QuicTime::Delta::FromMilliseconds(1),
             QuicTime::Delta::FromMicroseconds(1000));
   EXPECT_EQ(QuicTime::Delta::FromSeconds(1),
@@ -37,18 +39,18 @@
             QuicTime::Delta::FromSeconds(2).ToMicroseconds());
 }
 
-TEST(QuicTimeDeltaTest, Add) {
+TEST_F(QuicTimeDeltaTest, Add) {
   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000),
             QuicTime::Delta::Zero() + QuicTime::Delta::FromMilliseconds(2));
 }
 
-TEST(QuicTimeDeltaTest, Subtract) {
+TEST_F(QuicTimeDeltaTest, Subtract) {
   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(1000),
             QuicTime::Delta::FromMilliseconds(2) -
                 QuicTime::Delta::FromMilliseconds(1));
 }
 
-TEST(QuicTimeDeltaTest, Multiply) {
+TEST_F(QuicTimeDeltaTest, Multiply) {
   int i = 2;
   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(4000),
             QuicTime::Delta::FromMilliseconds(2) * i);
@@ -67,20 +69,20 @@
             QuicTime::Delta::FromMicroseconds(12) * 0.2);
 }
 
-TEST(QuicTimeDeltaTest, Max) {
+TEST_F(QuicTimeDeltaTest, Max) {
   EXPECT_EQ(QuicTime::Delta::FromMicroseconds(2000),
             std::max(QuicTime::Delta::FromMicroseconds(1000),
                      QuicTime::Delta::FromMicroseconds(2000)));
 }
 
-TEST(QuicTimeDeltaTest, NotEqual) {
+TEST_F(QuicTimeDeltaTest, NotEqual) {
   EXPECT_TRUE(QuicTime::Delta::FromSeconds(0) !=
               QuicTime::Delta::FromSeconds(1));
   EXPECT_FALSE(QuicTime::Delta::FromSeconds(0) !=
                QuicTime::Delta::FromSeconds(0));
 }
 
-TEST(QuicTimeDeltaTest, DebugValue) {
+TEST_F(QuicTimeDeltaTest, DebugValue) {
   const QuicTime::Delta one_us = QuicTime::Delta::FromMicroseconds(1);
   const QuicTime::Delta one_ms = QuicTime::Delta::FromMilliseconds(1);
   const QuicTime::Delta one_s = QuicTime::Delta::FromSeconds(1);
@@ -94,7 +96,7 @@
   EXPECT_EQ("3000001us", (3 * one_s + one_us).ToDebugValue());
 }
 
-class QuicTimeTest : public ::testing::Test {
+class QuicTimeTest : public QuicTest {
  protected:
   MockClock clock_;
 };
diff --git a/src/net/quic/core/quic_unacked_packet_map_test.cc b/src/net/quic/core/quic_unacked_packet_map_test.cc
index 29c75bb..7fc9fc8 100644
--- a/src/net/quic/core/quic_unacked_packet_map_test.cc
+++ b/src/net/quic/core/quic_unacked_packet_map_test.cc
@@ -4,8 +4,8 @@
 
 #include "net/quic/core/quic_unacked_packet_map.h"
 
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -14,7 +14,7 @@
 // Default packet length.
 const uint32_t kDefaultLength = 1000;
 
-class QuicUnackedPacketMapTest : public ::testing::Test {
+class QuicUnackedPacketMapTest : public QuicTest {
  protected:
   QuicUnackedPacketMapTest()
       : unacked_packets_(),
diff --git a/src/net/quic/core/quic_utils_test.cc b/src/net/quic/core/quic_utils_test.cc
index 201ae4b..4f99397 100644
--- a/src/net/quic/core/quic_utils_test.cc
+++ b/src/net/quic/core/quic_utils_test.cc
@@ -5,7 +5,7 @@
 #include "net/quic/core/quic_utils.h"
 
 #include "net/quic/core/crypto/crypto_protocol.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
@@ -13,7 +13,9 @@
 namespace test {
 namespace {
 
-TEST(QuicUtilsTest, DetermineAddressChangeType) {
+class QuicUtilsTest : public QuicTest {};
+
+TEST_F(QuicUtilsTest, DetermineAddressChangeType) {
   const string kIPv4String1 = "1.2.3.4";
   const string kIPv4String2 = "1.2.3.5";
   const string kIPv4String3 = "1.1.3.5";
@@ -88,7 +90,7 @@
   return hash;
 }
 
-TEST(QuicUtilsHashTest, ReferenceTest) {
+TEST_F(QuicUtilsTest, ReferenceTest) {
   std::vector<uint8_t> data(32);
   for (size_t i = 0; i < data.size(); ++i) {
     data[i] = i % 255;
diff --git a/src/net/quic/core/quic_version_manager.cc b/src/net/quic/core/quic_version_manager.cc
index 7652813..c67534c 100644
--- a/src/net/quic/core/quic_version_manager.cc
+++ b/src/net/quic/core/quic_version_manager.cc
@@ -10,7 +10,7 @@
 namespace net {
 
 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions)
-    : enable_version_39_(FLAGS_quic_enable_version_39),
+    : enable_version_39_(FLAGS_quic_reloadable_flag_quic_enable_version_39),
       enable_version_38_(FLAGS_quic_reloadable_flag_quic_enable_version_38),
       allowed_supported_versions_(supported_versions),
       filtered_supported_versions_(
@@ -24,9 +24,9 @@
 }
 
 void QuicVersionManager::MaybeRefilterSupportedVersions() {
-  if (enable_version_39_ != FLAGS_quic_enable_version_39 ||
+  if (enable_version_39_ != FLAGS_quic_reloadable_flag_quic_enable_version_39 ||
       enable_version_38_ != FLAGS_quic_reloadable_flag_quic_enable_version_38) {
-    enable_version_39_ = FLAGS_quic_enable_version_39;
+    enable_version_39_ = FLAGS_quic_reloadable_flag_quic_enable_version_39;
     enable_version_38_ = FLAGS_quic_reloadable_flag_quic_enable_version_38;
     RefilterSupportedVersions();
   }
diff --git a/src/net/quic/core/quic_version_manager.h b/src/net/quic/core/quic_version_manager.h
index d658d8d..481cf6c 100644
--- a/src/net/quic/core/quic_version_manager.h
+++ b/src/net/quic/core/quic_version_manager.h
@@ -31,7 +31,7 @@
   }
 
  private:
-  // FLAGS_quic_enable_version_39
+  // FLAGS_quic_reloadable_flag_quic_enable_version_39
   bool enable_version_39_;
   // FLAGS_quic_reloadable_flag_quic_enable_version_38
   bool enable_version_38_;
diff --git a/src/net/quic/core/quic_version_manager_test.cc b/src/net/quic/core/quic_version_manager_test.cc
index b2ddbf5..89f7222 100644
--- a/src/net/quic/core/quic_version_manager_test.cc
+++ b/src/net/quic/core/quic_version_manager_test.cc
@@ -6,16 +6,17 @@
 
 #include "net/quic/core/quic_versions.h"
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 namespace {
 
-TEST(QuicVersionManagerTest, QuicVersionManager) {
-  QuicFlagSaver flags;
+class QuicVersionManagerTest : public QuicTest {};
+
+TEST_F(QuicVersionManagerTest, QuicVersionManager) {
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = false;
   FLAGS_quic_reloadable_flag_quic_enable_version_38 = false;
   QuicVersionManager manager(AllSupportedVersions());
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
@@ -30,7 +31,7 @@
   EXPECT_EQ(QUIC_VERSION_36, manager.GetSupportedVersions()[2]);
   EXPECT_EQ(QUIC_VERSION_35, manager.GetSupportedVersions()[3]);
 
-  FLAGS_quic_enable_version_39 = true;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = true;
   EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
             manager.GetSupportedVersions());
   ASSERT_EQ(5u, manager.GetSupportedVersions().size());
diff --git a/src/net/quic/core/quic_versions.cc b/src/net/quic/core/quic_versions.cc
index 4a9583b..a959726 100644
--- a/src/net/quic/core/quic_versions.cc
+++ b/src/net/quic/core/quic_versions.cc
@@ -31,7 +31,7 @@
   filtered_versions.clear();  // Guaranteed by spec not to change capacity.
   for (QuicVersion version : versions) {
     if (version == QUIC_VERSION_39) {
-      if (FLAGS_quic_enable_version_39 &&
+      if (FLAGS_quic_reloadable_flag_quic_enable_version_39 &&
           FLAGS_quic_reloadable_flag_quic_enable_version_38) {
         filtered_versions.push_back(version);
       }
diff --git a/src/net/quic/core/quic_versions.h b/src/net/quic/core/quic_versions.h
index d228b41..7bd12ec 100644
--- a/src/net/quic/core/quic_versions.h
+++ b/src/net/quic/core/quic_versions.h
@@ -29,8 +29,10 @@
   QUIC_VERSION_37 = 37,  // Add perspective into null encryption.
   QUIC_VERSION_38 = 38,  // PADDING frame is a 1-byte frame with type 0x00.
                          // Respect NSTP connection option.
-  QUIC_VERSION_39 = 39,  // Experimental support for HTTP stream pairs
-                         // and HPACK HoL avoidance.
+  QUIC_VERSION_39 = 39,  // Integers and floating numbers are written in big
+                         // endian. Dot not ack acks. Send a connection level
+                         // WINDOW_UPDATE every 20 sent packets which do not
+                         // contain retransmittable frames.
 
   // IMPORTANT: if you are adding to this list, follow the instructions at
   // http://sites/quic/adding-and-removing-versions
diff --git a/src/net/quic/core/quic_versions_test.cc b/src/net/quic/core/quic_versions_test.cc
index 42493cf..fe71341 100644
--- a/src/net/quic/core/quic_versions_test.cc
+++ b/src/net/quic/core/quic_versions_test.cc
@@ -5,15 +5,16 @@
 #include "net/quic/core/quic_versions.h"
 
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 namespace {
 
-TEST(QuicVersionsTest, QuicVersionToQuicTag) {
+class QuicVersionsTest : public QuicTest {};
+
+TEST_F(QuicVersionsTest, QuicVersionToQuicTag) {
 // If you add a new version to the QuicVersion enum you will need to add a new
 // case to QuicVersionToQuicTag, otherwise this test will fail.
 
@@ -38,7 +39,7 @@
   }
 }
 
-TEST(QuicVersionsTest, QuicVersionToQuicTagUnsupported) {
+TEST_F(QuicVersionsTest, QuicVersionToQuicTagUnsupported) {
 // TODO(rtenneti): Enable checking of Log(ERROR) messages.
 #if 0
   // TODO(rjshade): Change to DFATAL once we actually support multiple versions,
@@ -53,7 +54,7 @@
   EXPECT_EQ(0u, QuicVersionToQuicTag(QUIC_VERSION_UNSUPPORTED));
 }
 
-TEST(QuicVersionsTest, QuicTagToQuicVersion) {
+TEST_F(QuicVersionsTest, QuicTagToQuicVersion) {
 // If you add a new version to the QuicVersion enum you will need to add a new
 // case to QuicTagToQuicVersion, otherwise this test will fail.
 
@@ -83,7 +84,7 @@
   }
 }
 
-TEST(QuicVersionsTest, QuicTagToQuicVersionUnsupported) {
+TEST_F(QuicVersionsTest, QuicTagToQuicVersionUnsupported) {
 // TODO(rtenneti): Enable checking of Log(ERROR) messages.
 #if 0
   ScopedMockLog log(kDoNotCaptureLogsYet);
@@ -99,7 +100,7 @@
             QuicTagToQuicVersion(MakeQuicTag('F', 'A', 'K', 'E')));
 }
 
-TEST(QuicVersionsTest, QuicVersionToString) {
+TEST_F(QuicVersionsTest, QuicVersionToString) {
   EXPECT_EQ("QUIC_VERSION_35", QuicVersionToString(QUIC_VERSION_35));
   EXPECT_EQ("QUIC_VERSION_UNSUPPORTED",
             QuicVersionToString(QUIC_VERSION_UNSUPPORTED));
@@ -126,8 +127,7 @@
   }
 }
 
-TEST(QuicVersionsTest, FilterSupportedVersionsNo38) {
-  QuicFlagSaver flags;
+TEST_F(QuicVersionsTest, FilterSupportedVersionsNo38) {
   QuicVersionVector all_versions = {QUIC_VERSION_35, QUIC_VERSION_36,
                                     QUIC_VERSION_37, QUIC_VERSION_38,
                                     QUIC_VERSION_39};
@@ -141,13 +141,13 @@
   EXPECT_EQ(QUIC_VERSION_37, filtered_versions[2]);
 }
 
-TEST(QuicVersionsTest, FilterSupportedVersionsNo39) {
+TEST_F(QuicVersionsTest, FilterSupportedVersionsNo39) {
   QuicVersionVector all_versions = {QUIC_VERSION_35, QUIC_VERSION_36,
                                     QUIC_VERSION_37, QUIC_VERSION_38,
                                     QUIC_VERSION_39};
 
   FLAGS_quic_reloadable_flag_quic_enable_version_38 = true;
-  FLAGS_quic_enable_version_39 = false;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = false;
 
   QuicVersionVector filtered_versions = FilterSupportedVersions(all_versions);
   ASSERT_EQ(4u, filtered_versions.size());
@@ -157,20 +157,19 @@
   EXPECT_EQ(QUIC_VERSION_38, filtered_versions[3]);
 }
 
-TEST(QuicVersionsTest, FilterSupportedVersionsAllVersions) {
-  QuicFlagSaver flags;
+TEST_F(QuicVersionsTest, FilterSupportedVersionsAllVersions) {
   QuicVersionVector all_versions = {QUIC_VERSION_35, QUIC_VERSION_36,
                                     QUIC_VERSION_37, QUIC_VERSION_38,
                                     QUIC_VERSION_39};
 
   FLAGS_quic_reloadable_flag_quic_enable_version_38 = true;
-  FLAGS_quic_enable_version_39 = true;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = true;
 
   QuicVersionVector filtered_versions = FilterSupportedVersions(all_versions);
   ASSERT_EQ(all_versions, filtered_versions);
 }
 
-TEST(QuicVersionsTest, LookUpVersionByIndex) {
+TEST_F(QuicVersionsTest, LookUpVersionByIndex) {
   QuicVersionVector all_versions = {QUIC_VERSION_35, QUIC_VERSION_36,
                                     QUIC_VERSION_37, QUIC_VERSION_38,
                                     QUIC_VERSION_39};
diff --git a/src/net/quic/core/quic_write_blocked_list_test.cc b/src/net/quic/core/quic_write_blocked_list_test.cc
index 8191062..ab851b5 100644
--- a/src/net/quic/core/quic_write_blocked_list_test.cc
+++ b/src/net/quic/core/quic_write_blocked_list_test.cc
@@ -4,8 +4,8 @@
 //
 #include "net/quic/core/quic_write_blocked_list.h"
 
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using net::kV3LowestPriority;
 using net::kV3HighestPriority;
@@ -14,7 +14,9 @@
 namespace test {
 namespace {
 
-TEST(QuicWriteBlockedListTest, PriorityOrder) {
+class QuicWriteBlockedListTest : public QuicTest {};
+
+TEST_F(QuicWriteBlockedListTest, PriorityOrder) {
   QuicWriteBlockedList write_blocked_list;
 
   // Mark streams blocked in roughly reverse priority order, and
@@ -49,7 +51,7 @@
   EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
 }
 
-TEST(QuicWriteBlockedListTest, CryptoStream) {
+TEST_F(QuicWriteBlockedListTest, CryptoStream) {
   QuicWriteBlockedList write_blocked_list;
   write_blocked_list.RegisterStream(kCryptoStreamId, kV3HighestPriority);
   write_blocked_list.AddStream(kCryptoStreamId);
@@ -61,7 +63,7 @@
   EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
 }
 
-TEST(QuicWriteBlockedListTest, HeadersStream) {
+TEST_F(QuicWriteBlockedListTest, HeadersStream) {
   QuicWriteBlockedList write_blocked_list;
   write_blocked_list.RegisterStream(kHeadersStreamId, kV3HighestPriority);
   write_blocked_list.AddStream(kHeadersStreamId);
@@ -73,7 +75,7 @@
   EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
 }
 
-TEST(QuicWriteBlockedListTest, VerifyHeadersStream) {
+TEST_F(QuicWriteBlockedListTest, VerifyHeadersStream) {
   QuicWriteBlockedList write_blocked_list;
   write_blocked_list.RegisterStream(5, kV3HighestPriority);
   write_blocked_list.RegisterStream(kHeadersStreamId, kV3HighestPriority);
@@ -92,7 +94,7 @@
   EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
 }
 
-TEST(QuicWriteBlockedListTest, NoDuplicateEntries) {
+TEST_F(QuicWriteBlockedListTest, NoDuplicateEntries) {
   // Test that QuicWriteBlockedList doesn't allow duplicate entries.
   QuicWriteBlockedList write_blocked_list;
 
@@ -114,7 +116,7 @@
   EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
 }
 
-TEST(QuicWriteBlockedListTest, BatchingWrites) {
+TEST_F(QuicWriteBlockedListTest, BatchingWrites) {
   QuicWriteBlockedList write_blocked_list;
 
   const QuicStreamId id1 = kClientDataStreamId1;
@@ -167,7 +169,7 @@
   EXPECT_EQ(id1, write_blocked_list.PopFront());
 }
 
-TEST(QuicWriteBlockedListTest, Ceding) {
+TEST_F(QuicWriteBlockedListTest, Ceding) {
   QuicWriteBlockedList write_blocked_list;
 
   write_blocked_list.RegisterStream(15, kV3HighestPriority);
diff --git a/src/net/quic/core/spdy_utils.cc b/src/net/quic/core/spdy_utils.cc
index cf16e34..5ad6a43 100644
--- a/src/net/quic/core/spdy_utils.cc
+++ b/src/net/quic/core/spdy_utils.cc
@@ -32,24 +32,6 @@
 }
 
 // static
-bool SpdyUtils::ParseHeaders(const char* data,
-                             uint32_t data_len,
-                             int64_t* content_length,
-                             SpdyHeaderBlock* headers) {
-  SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
-  if (!framer.ParseHeaderBlockInBuffer(data, data_len, headers) ||
-      headers->empty()) {
-    return false;  // Headers were invalid.
-  }
-
-  if (!QuicContainsKey(*headers, "content-length")) {
-    return true;
-  }
-
-  return ExtractContentLengthFromHeaders(content_length, headers);
-}
-
-// static
 bool SpdyUtils::ExtractContentLengthFromHeaders(int64_t* content_length,
                                                 SpdyHeaderBlock* headers) {
   auto it = headers->find("content-length");
@@ -83,47 +65,6 @@
   }
 }
 
-// static
-bool SpdyUtils::ParseTrailers(const char* data,
-                              uint32_t data_len,
-                              size_t* final_byte_offset,
-                              SpdyHeaderBlock* trailers) {
-  SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
-  if (!framer.ParseHeaderBlockInBuffer(data, data_len, trailers) ||
-      trailers->empty()) {
-    QUIC_DVLOG(1) << "Request Trailers are invalid.";
-    return false;  // Trailers were invalid.
-  }
-
-  // Pull out the final offset pseudo header which indicates the number of
-  // response body bytes expected.
-  auto it = trailers->find(kFinalOffsetHeaderKey);
-  if (it == trailers->end() ||
-      !QuicTextUtils::StringToSizeT(it->second, final_byte_offset)) {
-    QUIC_DLOG(ERROR) << "Required key '" << kFinalOffsetHeaderKey
-                     << "' not present";
-    return false;
-  }
-  // The final offset header is no longer needed.
-  trailers->erase(it->first);
-
-  // Trailers must not have empty keys, and must not contain pseudo headers.
-  for (const auto& trailer : *trailers) {
-    QuicStringPiece key = trailer.first;
-    QuicStringPiece value = trailer.second;
-    if (QuicTextUtils::StartsWith(key, ":")) {
-      QUIC_DVLOG(1) << "Trailers must not contain pseudo-header: '" << key
-                    << "','" << value << "'.";
-      return false;
-    }
-
-    // TODO(rjshade): Check for other forbidden keys, following the HTTP/2 spec.
-  }
-
-  QUIC_DVLOG(1) << "Successfully parsed Trailers: " << trailers->DebugString();
-  return true;
-}
-
 bool SpdyUtils::CopyAndValidateHeaders(const QuicHeaderList& header_list,
                                        int64_t* content_length,
                                        SpdyHeaderBlock* headers) {
diff --git a/src/net/quic/core/spdy_utils.h b/src/net/quic/core/spdy_utils.h
index 4f3f62b..724136a 100644
--- a/src/net/quic/core/spdy_utils.h
+++ b/src/net/quic/core/spdy_utils.h
@@ -22,40 +22,18 @@
   static std::string SerializeUncompressedHeaders(
       const SpdyHeaderBlock& headers);
 
-  // Parses |data| as a string containing serialized HTTP/2 HEADERS frame,
-  // populating |headers| with the key->value pairs found.
-  // |content_length| will be populated with the value of the content-length
-  // header if one or more are present.
-  // Returns true on success, false if parsing fails, or invalid keys are found.
-  static bool ParseHeaders(const char* data,
-                           uint32_t data_len,
-                           int64_t* content_length,
-                           SpdyHeaderBlock* headers);
-
   // Populate |content length| with the value of the content-length header.
   // Returns true on success, false if parsing fails or content-length header is
   // missing.
   static bool ExtractContentLengthFromHeaders(int64_t* content_length,
                                               SpdyHeaderBlock* headers);
 
-  // Parses |data| as a string containing serialized HTTP/2 HEADERS frame,
-  // populating |trailers| with the key->value pairs found.
-  // The final offset header will be excluded from |trailers|, and instead the
-  // value will be copied to |final_byte_offset|.
-  // Returns true on success, false if parsing fails, or invalid keys are found.
-  static bool ParseTrailers(const char* data,
-                            uint32_t data_len,
-                            size_t* final_byte_offset,
-                            SpdyHeaderBlock* trailers);
-
-  // Copies a list of headers to a SpdyHeaderBlock. Performs similar validation
-  // to SpdyFramer::ParseHeaderBlockInBuffer and ParseHeaders, above.
+  // Copies a list of headers to a SpdyHeaderBlock.
   static bool CopyAndValidateHeaders(const QuicHeaderList& header_list,
                                      int64_t* content_length,
                                      SpdyHeaderBlock* headers);
 
-  // Copies a list of headers to a SpdyHeaderBlock. Performs similar validation
-  // to SpdyFramer::ParseHeaderBlockInBuffer and ParseTrailers, above.
+  // Copies a list of headers to a SpdyHeaderBlock.
   static bool CopyAndValidateTrailers(const QuicHeaderList& header_list,
                                       size_t* final_byte_offset,
                                       SpdyHeaderBlock* trailers);
diff --git a/src/net/quic/core/spdy_utils_test.cc b/src/net/quic/core/spdy_utils_test.cc
index 42200f2..cbd74e7 100644
--- a/src/net/quic/core/spdy_utils_test.cc
+++ b/src/net/quic/core/spdy_utils_test.cc
@@ -5,9 +5,9 @@
 
 #include "base/macros.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/test/gtest_util.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::UnorderedElementsAre;
@@ -16,134 +16,6 @@
 namespace net {
 namespace test {
 
-TEST(SpdyUtilsTest, SerializeAndParseHeaders) {
-  // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then
-  // parses the serialized output and verifies that the end result is the same
-  // as the headers that the test started with.
-
-  SpdyHeaderBlock input_headers;
-  input_headers[":pseudo1"] = "pseudo value1";
-  input_headers[":pseudo2"] = "pseudo value2";
-  input_headers["key1"] = "value1";
-  const int64_t kContentLength = 1234;
-  input_headers["content-length"] =
-      QuicTextUtils::Uint64ToString(kContentLength);
-  input_headers["key2"] = "value2";
-
-  // Serialize the header block.
-  string serialized_headers =
-      SpdyUtils::SerializeUncompressedHeaders(input_headers);
-
-  // Take the serialized header block, and parse back into SpdyHeaderBlock.
-  SpdyHeaderBlock output_headers;
-  int64_t content_length = -1;
-  ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(),
-                                      serialized_headers.size(),
-                                      &content_length, &output_headers));
-
-  // Should be back to the original headers.
-  EXPECT_EQ(content_length, kContentLength);
-  EXPECT_EQ(output_headers, input_headers);
-}
-
-TEST(SpdyUtilsTest, SerializeAndParseHeadersLargeContentLength) {
-  // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then
-  // parses the serialized output and verifies that the end result is the same
-  // as the headers that the test started with.
-
-  SpdyHeaderBlock input_headers;
-  input_headers[":pseudo1"] = "pseudo value1";
-  input_headers[":pseudo2"] = "pseudo value2";
-  input_headers["key1"] = "value1";
-  const int64_t kContentLength = 12345678900;
-  input_headers["content-length"] =
-      QuicTextUtils::Uint64ToString(kContentLength);
-  input_headers["key2"] = "value2";
-
-  // Serialize the header block.
-  string serialized_headers =
-      SpdyUtils::SerializeUncompressedHeaders(input_headers);
-
-  // Take the serialized header block, and parse back into SpdyHeaderBlock.
-  SpdyHeaderBlock output_headers;
-  int64_t content_length = -1;
-  ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(),
-                                      serialized_headers.size(),
-                                      &content_length, &output_headers));
-
-  // Should be back to the original headers.
-  EXPECT_EQ(content_length, kContentLength);
-  EXPECT_EQ(output_headers, input_headers);
-}
-
-TEST(SpdyUtilsTest, SerializeAndParseValidTrailers) {
-  // Creates a SpdyHeaderBlock with some valid Trailers key->value pairs,
-  // serializes it, then parses the serialized output and verifies that the end
-  // result is the same as the trailers that the test started with.
-  SpdyHeaderBlock input_trailers;
-  const size_t kFinalOffset = 5678;
-  input_trailers[kFinalOffsetHeaderKey] =
-      QuicTextUtils::Uint64ToString(kFinalOffset);
-  input_trailers["key1"] = "value1";
-  input_trailers["key2"] = "value2";
-
-  // Serialize the trailers.
-  string serialized_trailers =
-      SpdyUtils::SerializeUncompressedHeaders(input_trailers);
-
-  // Take the serialized trailers, and parse back into a SpdyHeaderBlock.
-  SpdyHeaderBlock output_trailers;
-  size_t final_byte_offset = 0;
-  EXPECT_TRUE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
-                                       serialized_trailers.size(),
-                                       &final_byte_offset, &output_trailers));
-
-  // Should be back to the original trailers, without the final offset header.
-  EXPECT_EQ(final_byte_offset, kFinalOffset);
-  input_trailers.erase(kFinalOffsetHeaderKey);
-  EXPECT_EQ(output_trailers, input_trailers);
-}
-
-TEST(SpdyUtilsTest, SerializeAndParseTrailersWithoutFinalOffset) {
-  // Verifies that parsing fails if Trailers are missing a final offset header.
-
-  SpdyHeaderBlock input_trailers;
-  input_trailers["key1"] = "value1";
-  input_trailers["key2"] = "value2";
-
-  // Serialize the trailers.
-  string serialized_trailers =
-      SpdyUtils::SerializeUncompressedHeaders(input_trailers);
-
-  // Parsing the serialized trailers fails because of the missing final offset.
-  SpdyHeaderBlock output_trailers;
-  size_t final_byte_offset = 0;
-  EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
-                                        serialized_trailers.size(),
-                                        &final_byte_offset, &output_trailers));
-  EXPECT_EQ(final_byte_offset, 0u);
-}
-
-TEST(SpdyUtilsTest, SerializeAndParseTrailersWithPseudoHeaders) {
-  // Verifies that parsing fails if Trailers include pseudo-headers.
-
-  SpdyHeaderBlock input_trailers;
-  input_trailers[kFinalOffsetHeaderKey] = "12345";
-  input_trailers[":disallowed-pseudo-header"] = "pseudo value";
-  input_trailers["key1"] = "value1";
-  input_trailers["key2"] = "value2";
-
-  // Serialize the trailers.
-  string serialized_trailers =
-      SpdyUtils::SerializeUncompressedHeaders(input_trailers);
-
-  // Parsing the serialized trailers fails because of the extra pseudo header.
-  SpdyHeaderBlock output_trailers;
-  size_t final_byte_offset = 0;
-  EXPECT_FALSE(SpdyUtils::ParseTrailers(serialized_trailers.data(),
-                                        serialized_trailers.size(),
-                                        &final_byte_offset, &output_trailers));
-}
 static std::unique_ptr<QuicHeaderList> FromList(
     const QuicHeaderList::ListType& src) {
   std::unique_ptr<QuicHeaderList> headers(new QuicHeaderList);
@@ -155,7 +27,9 @@
   return headers;
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeaders) {
+class SpdyUtilsTest : public QuicTest {};
+
+TEST_F(SpdyUtilsTest, CopyAndValidateHeaders) {
   auto headers = FromList({// All cookie crumbs are joined.
                            {"cookie", " part 1"},
                            {"cookie", "part 2 "},
@@ -194,7 +68,7 @@
   EXPECT_EQ(-1, content_length);
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersEmptyName) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersEmptyName) {
   auto headers = FromList({{"foo", "foovalue"}, {"", "barvalue"}, {"baz", ""}});
   int64_t content_length = -1;
   SpdyHeaderBlock block;
@@ -202,7 +76,7 @@
       SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block));
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersUpperCaseName) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersUpperCaseName) {
   auto headers =
       FromList({{"foo", "foovalue"}, {"bar", "barvalue"}, {"bAz", ""}});
   int64_t content_length = -1;
@@ -211,7 +85,7 @@
       SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block));
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMultipleContentLengths) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersMultipleContentLengths) {
   auto headers = FromList({{"content-length", "9"},
                            {"foo", "foovalue"},
                            {"content-length", "9"},
@@ -231,7 +105,7 @@
   EXPECT_EQ(9, content_length);
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersInconsistentContentLengths) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersInconsistentContentLengths) {
   auto headers = FromList({{"content-length", "9"},
                            {"foo", "foovalue"},
                            {"content-length", "8"},
@@ -243,7 +117,7 @@
       SpdyUtils::CopyAndValidateHeaders(*headers, &content_length, &block));
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersLargeContentLength) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersLargeContentLength) {
   auto headers = FromList({{"content-length", "9000000000"},
                            {"foo", "foovalue"},
                            {"bar", "barvalue"},
@@ -259,7 +133,7 @@
   EXPECT_EQ(9000000000, content_length);
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMultipleValues) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersMultipleValues) {
   auto headers = FromList({{"foo", "foovalue"},
                            {"bar", "barvalue"},
                            {"baz", ""},
@@ -276,7 +150,7 @@
   EXPECT_EQ(-1, content_length);
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMoreThanTwoValues) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersMoreThanTwoValues) {
   auto headers = FromList({{"set-cookie", "value1"},
                            {"set-cookie", "value2"},
                            {"set-cookie", "value3"}});
@@ -290,7 +164,7 @@
   EXPECT_EQ(-1, content_length);
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersCookie) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersCookie) {
   auto headers = FromList({{"foo", "foovalue"},
                            {"bar", "barvalue"},
                            {"cookie", "value1"},
@@ -305,7 +179,7 @@
   EXPECT_EQ(-1, content_length);
 }
 
-TEST(SpdyUtilsTest, CopyAndValidateHeadersMultipleCookies) {
+TEST_F(SpdyUtilsTest, CopyAndValidateHeadersMultipleCookies) {
   auto headers = FromList({{"foo", "foovalue"},
                            {"bar", "barvalue"},
                            {"cookie", "value1"},
@@ -321,7 +195,7 @@
   EXPECT_EQ(-1, content_length);
 }
 
-TEST(SpdyUtilsTest, GetUrlFromHeaderBlock) {
+TEST_F(SpdyUtilsTest, GetUrlFromHeaderBlock) {
   SpdyHeaderBlock headers;
   EXPECT_EQ(SpdyUtils::GetUrlFromHeaderBlock(headers), "");
   headers[":scheme"] = "https";
@@ -337,7 +211,7 @@
             "https://www.google.com/index.html");
 }
 
-TEST(SpdyUtilsTest, GetHostNameFromHeaderBlock) {
+TEST_F(SpdyUtilsTest, GetHostNameFromHeaderBlock) {
   SpdyHeaderBlock headers;
   EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "");
   headers[":scheme"] = "https";
@@ -357,7 +231,7 @@
   EXPECT_EQ(SpdyUtils::GetHostNameFromHeaderBlock(headers), "192.168.1.1");
 }
 
-TEST(SpdyUtilsTest, PopulateHeaderBlockFromUrl) {
+TEST_F(SpdyUtilsTest, PopulateHeaderBlockFromUrl) {
   string url = "https://www.google.com/index.html";
   SpdyHeaderBlock headers;
   EXPECT_TRUE(SpdyUtils::PopulateHeaderBlockFromUrl(url, &headers));
@@ -366,7 +240,7 @@
   EXPECT_EQ("/index.html", headers[":path"].as_string());
 }
 
-TEST(SpdyUtilsTest, PopulateHeaderBlockFromUrlWithNoPath) {
+TEST_F(SpdyUtilsTest, PopulateHeaderBlockFromUrlWithNoPath) {
   string url = "https://www.google.com";
   SpdyHeaderBlock headers;
   EXPECT_TRUE(SpdyUtils::PopulateHeaderBlockFromUrl(url, &headers));
@@ -375,7 +249,7 @@
   EXPECT_EQ("/", headers[":path"].as_string());
 }
 
-TEST(SpdyUtilsTest, PopulateHeaderBlockFromUrlFails) {
+TEST_F(SpdyUtilsTest, PopulateHeaderBlockFromUrlFails) {
   SpdyHeaderBlock headers;
   EXPECT_FALSE(SpdyUtils::PopulateHeaderBlockFromUrl("/", &headers));
   EXPECT_FALSE(SpdyUtils::PopulateHeaderBlockFromUrl("/index.html", &headers));
diff --git a/src/net/quic/platform/api/quic_endian.h b/src/net/quic/platform/api/quic_endian.h
index adf5c52..474143f 100644
--- a/src/net/quic/platform/api/quic_endian.h
+++ b/src/net/quic/platform/api/quic_endian.h
@@ -9,6 +9,11 @@
 
 namespace net {
 
+enum Endianness {
+  NETWORK_BYTE_ORDER,  // big endian
+  HOST_BYTE_ORDER      // little endian
+};
+
 // Provide utility functions that convert from/to network order (big endian)
 // to/from host order (can be either little or big endian depending on the
 // platform).
diff --git a/src/net/quic/platform/api/quic_endian_test.cc b/src/net/quic/platform/api/quic_endian_test.cc
index 5b63dd9..02a762a 100644
--- a/src/net/quic/platform/api/quic_endian_test.cc
+++ b/src/net/quic/platform/api/quic_endian_test.cc
@@ -4,7 +4,7 @@
 
 #include "net/quic/platform/api/quic_endian.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -17,7 +17,9 @@
 const uint64_t k64BitTestData = 0xaabbccdd44332211;
 const uint64_t k64BitSwappedTestData = 0x11223344ddccbbaa;
 
-TEST(QuicEndianTest, HostToNet) {
+class QuicEndianTest : public QuicTest {};
+
+TEST_F(QuicEndianTest, HostToNet) {
   if (QuicEndian::HostIsLittleEndian()) {
     EXPECT_EQ(k16BitSwappedTestData, QuicEndian::HostToNet16(k16BitTestData));
     EXPECT_EQ(k32BitSwappedTestData, QuicEndian::HostToNet32(k32BitTestData));
@@ -29,7 +31,7 @@
   }
 }
 
-TEST(QuicEndianTest, NetToHost) {
+TEST_F(QuicEndianTest, NetToHost) {
   if (QuicEndian::HostIsLittleEndian()) {
     EXPECT_EQ(k16BitTestData, QuicEndian::NetToHost16(k16BitSwappedTestData));
     EXPECT_EQ(k32BitTestData, QuicEndian::NetToHost32(k32BitSwappedTestData));
diff --git a/src/net/quic/platform/api/quic_hostname_utils_test.cc b/src/net/quic/platform/api/quic_hostname_utils_test.cc
index 2c7e6c8..65bbcb1 100644
--- a/src/net/quic/platform/api/quic_hostname_utils_test.cc
+++ b/src/net/quic/platform/api/quic_hostname_utils_test.cc
@@ -4,7 +4,7 @@
 
 #include "net/quic/platform/api/quic_hostname_utils.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
@@ -12,7 +12,9 @@
 namespace test {
 namespace {
 
-TEST(QuicHostnameUtilsTest, IsValidSNI) {
+class QuicHostnameUtilsTest : public QuicTest {};
+
+TEST_F(QuicHostnameUtilsTest, IsValidSNI) {
   // IP as SNI.
   EXPECT_FALSE(QuicHostnameUtils::IsValidSNI("192.168.0.1"));
   // SNI without any dot.
@@ -27,7 +29,7 @@
   EXPECT_TRUE(QuicHostnameUtils::IsValidSNI("test.google.com"));
 }
 
-TEST(QuicHostnameUtilsTest, NormalizeHostname) {
+TEST_F(QuicHostnameUtilsTest, NormalizeHostname) {
   struct {
     const char *input, *expected;
   } tests[] = {
diff --git a/src/net/quic/platform/api/quic_lru_cache_test.cc b/src/net/quic/platform/api/quic_lru_cache_test.cc
index 77b6bac..51aba30 100644
--- a/src/net/quic/platform/api/quic_lru_cache_test.cc
+++ b/src/net/quic/platform/api/quic_lru_cache_test.cc
@@ -4,7 +4,7 @@
 
 #include "net/quic/platform/api/quic_lru_cache.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -16,7 +16,9 @@
   uint32_t value;
 };
 
-TEST(QuicLRUCacheTest, InsertAndLookup) {
+class QuicLRUCacheTest : public QuicTest {};
+
+TEST_F(QuicLRUCacheTest, InsertAndLookup) {
   QuicLRUCache<int, CachedItem> cache(5);
   EXPECT_EQ(nullptr, cache.Lookup(1));
   EXPECT_EQ(0u, cache.Size());
@@ -44,7 +46,7 @@
   EXPECT_EQ(0u, cache.Size());
 }
 
-TEST(QuicLRUCacheTest, Eviction) {
+TEST_F(QuicLRUCacheTest, Eviction) {
   QuicLRUCache<int, CachedItem> cache(3);
 
   for (size_t i = 1; i <= 4; ++i) {
diff --git a/src/net/quic/platform/api/quic_mutex.h b/src/net/quic/platform/api/quic_mutex.h
index cc51f30..b5d8d4b 100644
--- a/src/net/quic/platform/api/quic_mutex.h
+++ b/src/net/quic/platform/api/quic_mutex.h
@@ -5,6 +5,7 @@
 #ifndef NET_QUIC_PLATFORM_API_QUIC_MUTEX_H_
 #define NET_QUIC_PLATFORM_API_QUIC_MUTEX_H_
 
+#include "base/macros.h"
 #include "net/quic/platform/impl/quic_mutex_impl.h"
 
 namespace net {
diff --git a/src/net/quic/platform/api/quic_ptr_util.h b/src/net/quic/platform/api/quic_ptr_util.h
index b5a472e..89d931e 100644
--- a/src/net/quic/platform/api/quic_ptr_util.h
+++ b/src/net/quic/platform/api/quic_ptr_util.h
@@ -4,18 +4,21 @@
 #ifndef NET_QUIC_PLATFORM_API_QUIC_PTR_UTIL_H_
 #define NET_QUIC_PLATFORM_API_QUIC_PTR_UTIL_H_
 
+#include <memory>
+#include <utility>
+
 #include "net/quic/platform/impl/quic_ptr_util_impl.h"
 
 namespace net {
 
 template <typename T, typename... Args>
 std::unique_ptr<T> QuicMakeUnique(Args&&... args) {
-  return std::move(QuicMakeUniqueImpl<T>(std::forward<Args>(args)...));
+  return QuicMakeUniqueImpl<T>(std::forward<Args>(args)...);
 }
 
 template <typename T>
 std::unique_ptr<T> QuicWrapUnique(T* ptr) {
-  return std::move(QuicWrapUniqueImpl<T>(ptr));
+  return QuicWrapUniqueImpl<T>(ptr);
 }
 
 }  // namespace net
diff --git a/src/net/quic/platform/api/quic_reference_counted_test.cc b/src/net/quic/platform/api/quic_reference_counted_test.cc
index 8f46094..d5e1f39 100644
--- a/src/net/quic/platform/api/quic_reference_counted_test.cc
+++ b/src/net/quic/platform/api/quic_reference_counted_test.cc
@@ -4,7 +4,7 @@
 
 #include "net/quic/platform/api/quic_reference_counted.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -33,14 +33,16 @@
   ~Derived() override {}
 };
 
-TEST(QuicReferenceCountedTest, DefaultConstructor) {
+class QuicReferenceCountedTest : public QuicTest {};
+
+TEST_F(QuicReferenceCountedTest, DefaultConstructor) {
   QuicReferenceCountedPointer<Base> a;
   EXPECT_EQ(nullptr, a);
   EXPECT_EQ(nullptr, a.get());
   EXPECT_FALSE(a);
 }
 
-TEST(QuicReferenceCountedTest, ConstructFromRawPointer) {
+TEST_F(QuicReferenceCountedTest, ConstructFromRawPointer) {
   bool destroyed = false;
   {
     QuicReferenceCountedPointer<Base> a(new Base(&destroyed));
@@ -49,7 +51,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, RawPointerAssignment) {
+TEST_F(QuicReferenceCountedTest, RawPointerAssignment) {
   bool destroyed = false;
   {
     QuicReferenceCountedPointer<Base> a;
@@ -60,7 +62,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerCopy) {
+TEST_F(QuicReferenceCountedTest, PointerCopy) {
   bool destroyed = false;
   {
     QuicReferenceCountedPointer<Base> a(new Base(&destroyed));
@@ -74,7 +76,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerCopyAssignment) {
+TEST_F(QuicReferenceCountedTest, PointerCopyAssignment) {
   bool destroyed = false;
   {
     QuicReferenceCountedPointer<Base> a(new Base(&destroyed));
@@ -88,7 +90,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerCopyFromOtherType) {
+TEST_F(QuicReferenceCountedTest, PointerCopyFromOtherType) {
   bool destroyed = false;
   {
     QuicReferenceCountedPointer<Derived> a(new Derived(&destroyed));
@@ -102,7 +104,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerCopyAssignmentFromOtherType) {
+TEST_F(QuicReferenceCountedTest, PointerCopyAssignmentFromOtherType) {
   bool destroyed = false;
   {
     QuicReferenceCountedPointer<Derived> a(new Derived(&destroyed));
@@ -116,7 +118,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerMove) {
+TEST_F(QuicReferenceCountedTest, PointerMove) {
   bool destroyed = false;
   QuicReferenceCountedPointer<Base> a(new Derived(&destroyed));
   EXPECT_FALSE(destroyed);
@@ -129,7 +131,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerMoveAssignment) {
+TEST_F(QuicReferenceCountedTest, PointerMoveAssignment) {
   bool destroyed = false;
   QuicReferenceCountedPointer<Base> a(new Derived(&destroyed));
   EXPECT_FALSE(destroyed);
@@ -142,7 +144,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerMoveFromOtherType) {
+TEST_F(QuicReferenceCountedTest, PointerMoveFromOtherType) {
   bool destroyed = false;
   QuicReferenceCountedPointer<Derived> a(new Derived(&destroyed));
   EXPECT_FALSE(destroyed);
@@ -155,7 +157,7 @@
   EXPECT_TRUE(destroyed);
 }
 
-TEST(QuicReferenceCountedTest, PointerMoveAssignmentFromOtherType) {
+TEST_F(QuicReferenceCountedTest, PointerMoveAssignmentFromOtherType) {
   bool destroyed = false;
   QuicReferenceCountedPointer<Derived> a(new Derived(&destroyed));
   EXPECT_FALSE(destroyed);
diff --git a/src/net/quic/platform/api/quic_str_cat.h b/src/net/quic/platform/api/quic_str_cat.h
index ff60dac..9d6a970 100644
--- a/src/net/quic/platform/api/quic_str_cat.h
+++ b/src/net/quic/platform/api/quic_str_cat.h
@@ -5,18 +5,21 @@
 #ifndef NET_QUIC_PLATFORM_API_QUIC_STR_CAT_H_
 #define NET_QUIC_PLATFORM_API_QUIC_STR_CAT_H_
 
+#include <string>
+#include <utility>
+
 #include "net/quic/platform/impl/quic_str_cat_impl.h"
 
 namespace net {
 
 template <typename... Args>
 inline std::string QuicStrCat(const Args&... args) {
-  return std::move(QuicStrCatImpl(std::forward<const Args&>(args)...));
+  return QuicStrCatImpl(std::forward<const Args&>(args)...);
 }
 
 template <typename... Args>
 inline std::string QuicStringPrintf(const Args&... args) {
-  return std::move(QuicStringPrintfImpl(std::forward<const Args&>(args)...));
+  return QuicStringPrintfImpl(std::forward<const Args&>(args)...);
 }
 
 }  // namespace net
diff --git a/src/net/quic/platform/api/quic_str_cat_test.cc b/src/net/quic/platform/api/quic_str_cat_test.cc
index dc417d8..b8b0fb6 100644
--- a/src/net/quic/platform/api/quic_str_cat_test.cc
+++ b/src/net/quic/platform/api/quic_str_cat_test.cc
@@ -5,7 +5,7 @@
 #include "net/quic/platform/api/quic_str_cat.h"
 
 #include "net/quic/platform/api/quic_string_piece.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
@@ -13,7 +13,9 @@
 namespace test {
 namespace {
 
-TEST(QuicStrCatTest, Ints) {
+class QuicStrCatTest : public QuicTest {};
+
+TEST_F(QuicStrCatTest, Ints) {
   const int16_t s = -1;
   const uint16_t us = 2;
   const int i = -3;
@@ -39,7 +41,7 @@
   EXPECT_EQ(answer, "100");
 }
 
-TEST(QuicStrCatTest, Basics) {
+TEST_F(QuicStrCatTest, Basics) {
   string result;
 
   string strs[] = {"Hello", "Cruel", "World"};
@@ -103,7 +105,7 @@
   EXPECT_EQ(result, "122333444455555666666777777788888888999999999");
 }
 
-TEST(QuicStrCatTest, MaxArgs) {
+TEST_F(QuicStrCatTest, MaxArgs) {
   string result;
   // Test 10 up to 26 arguments, the current maximum
   result = QuicStrCat(1, 2, 3, 4, 5, 6, 7, 8, 9, "a");
diff --git a/src/net/quic/platform/api/quic_test.h b/src/net/quic/platform/api/quic_test.h
new file mode 100644
index 0000000..b976b45
--- /dev/null
+++ b/src/net/quic/platform/api/quic_test.h
@@ -0,0 +1,15 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_QUIC_PLATFORM_API_QUIC_TEST_H_
+#define NET_QUIC_PLATFORM_API_QUIC_TEST_H_
+
+#include "net/quic/platform/impl/quic_test_impl.h"
+
+// Defines the base classes to be used in QUIC tests.
+using QuicTest = QuicTestImpl;
+template <class T>
+using QuicTestWithParam = QuicTestWithParamImpl<T>;
+
+#endif  // NET_QUIC_PLATFORM_API_QUIC_TEST_H_
diff --git a/src/net/quic/platform/api/quic_text_utils_test.cc b/src/net/quic/platform/api/quic_text_utils_test.cc
index bde4627..8bbbbad 100644
--- a/src/net/quic/platform/api/quic_text_utils_test.cc
+++ b/src/net/quic/platform/api/quic_text_utils_test.cc
@@ -6,14 +6,16 @@
 
 #include <string>
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
 namespace net {
 namespace test {
 
-TEST(QuicTextUtilsText, StartsWith) {
+class QuicTextUtilsText : public QuicTest {};
+
+TEST_F(QuicTextUtilsText, StartsWith) {
   EXPECT_TRUE(QuicTextUtils::StartsWith("hello world", "hello"));
   EXPECT_TRUE(QuicTextUtils::StartsWith("hello world", "hello world"));
   EXPECT_TRUE(QuicTextUtils::StartsWith("hello world", ""));
@@ -22,7 +24,7 @@
   EXPECT_FALSE(QuicTextUtils::StartsWith("hello world", "bar"));
 }
 
-TEST(QuicTextUtilsText, EndsWithIgnoreCase) {
+TEST_F(QuicTextUtilsText, EndsWithIgnoreCase) {
   EXPECT_TRUE(QuicTextUtils::EndsWithIgnoreCase("hello world", "world"));
   EXPECT_TRUE(QuicTextUtils::EndsWithIgnoreCase("hello world", "hello world"));
   EXPECT_TRUE(QuicTextUtils::EndsWithIgnoreCase("hello world", ""));
@@ -30,7 +32,7 @@
   EXPECT_FALSE(QuicTextUtils::EndsWithIgnoreCase("hello world", "hello"));
 }
 
-TEST(QuicTextUtilsText, ToLower) {
+TEST_F(QuicTextUtilsText, ToLower) {
   EXPECT_EQ("lower", QuicTextUtils::ToLower("LOWER"));
   EXPECT_EQ("lower", QuicTextUtils::ToLower("lower"));
   EXPECT_EQ("lower", QuicTextUtils::ToLower("lOwEr"));
@@ -38,7 +40,7 @@
   EXPECT_EQ("", QuicTextUtils::ToLower(""));
 }
 
-TEST(QuicTextUtilsText, RemoveLeadingAndTrailingWhitespace) {
+TEST_F(QuicTextUtilsText, RemoveLeadingAndTrailingWhitespace) {
   string input;
 
   for (auto* input : {"text", " text", "  text", "text ", "text  ", " text ",
@@ -49,7 +51,7 @@
   }
 }
 
-TEST(QuicTextUtilsText, StringToNumbers) {
+TEST_F(QuicTextUtilsText, StringToNumbers) {
   const string kMaxInt32Plus1 = "2147483648";
   const string kMinInt32Minus1 = "-2147483649";
   const string kMaxUint32Plus1 = "4294967296";
@@ -122,25 +124,25 @@
   }
 }
 
-TEST(QuicTextUtilsText, Uint64ToString) {
+TEST_F(QuicTextUtilsText, Uint64ToString) {
   EXPECT_EQ("123", QuicTextUtils::Uint64ToString(123));
   EXPECT_EQ("1234", QuicTextUtils::Uint64ToString(1234));
 }
 
-TEST(QuicTextUtilsText, HexEncode) {
+TEST_F(QuicTextUtilsText, HexEncode) {
   EXPECT_EQ("48656c6c6f", QuicTextUtils::HexEncode("Hello", 5));
   EXPECT_EQ("48656c6c6f", QuicTextUtils::HexEncode("Hello World", 5));
   EXPECT_EQ("48656c6c6f", QuicTextUtils::HexEncode("Hello"));
   EXPECT_EQ("0102779cfa", QuicTextUtils::HexEncode("\x01\x02\x77\x9c\xfa"));
 }
 
-TEST(QuicTextUtilsText, HexDecode) {
+TEST_F(QuicTextUtilsText, HexDecode) {
   EXPECT_EQ("Hello", QuicTextUtils::HexDecode("48656c6c6f"));
   EXPECT_EQ("", QuicTextUtils::HexDecode(""));
   EXPECT_EQ("\x01\x02\x77\x9c\xfa", QuicTextUtils::HexDecode("0102779cfa"));
 }
 
-TEST(QuicTextUtilsText, HexDump) {
+TEST_F(QuicTextUtilsText, HexDump) {
   // Verify output of the HexDump method is as expected.
   char packet[] = {
       0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x51, 0x55, 0x49, 0x43, 0x21,
@@ -161,7 +163,7 @@
       "0x0050:  0102 03                                  ...\n");
 }
 
-TEST(QuicTextUtilsText, Base64Encode) {
+TEST_F(QuicTextUtilsText, Base64Encode) {
   string output;
   string input = "Hello";
   QuicTextUtils::Base64Encode(reinterpret_cast<const uint8_t*>(input.data()),
@@ -179,7 +181,7 @@
       output);
 }
 
-TEST(QuicTextUtilsText, ContainsUpperCase) {
+TEST_F(QuicTextUtilsText, ContainsUpperCase) {
   EXPECT_FALSE(QuicTextUtils::ContainsUpperCase("abc"));
   EXPECT_FALSE(QuicTextUtils::ContainsUpperCase(""));
   EXPECT_FALSE(QuicTextUtils::ContainsUpperCase("123"));
@@ -187,7 +189,7 @@
   EXPECT_TRUE(QuicTextUtils::ContainsUpperCase("aBc"));
 }
 
-TEST(QuicTextUtilsText, Split) {
+TEST_F(QuicTextUtilsText, Split) {
   EXPECT_EQ(std::vector<QuicStringPiece>({"a", "b", "c"}),
             QuicTextUtils::Split("a,b,c", ','));
   EXPECT_EQ(std::vector<QuicStringPiece>({"a", "b", "c"}),
diff --git a/src/net/quic/platform/api/quic_url_test.cc b/src/net/quic/platform/api/quic_url_test.cc
index 8f575c5..8bdc6c6 100644
--- a/src/net/quic/platform/api/quic_url_test.cc
+++ b/src/net/quic/platform/api/quic_url_test.cc
@@ -4,7 +4,7 @@
 
 #include "net/quic/platform/api/quic_url.h"
 
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 using std::string;
 
@@ -12,7 +12,9 @@
 namespace test {
 namespace {
 
-TEST(QuicUrlTest, Basic) {
+class QuicUrlTest : public QuicTest {};
+
+TEST_F(QuicUrlTest, Basic) {
   // No scheme specified.
   string url_str = "www.example.com";
   QuicUrl url(url_str);
@@ -50,7 +52,7 @@
   EXPECT_EQ(21u, url.port());
 }
 
-TEST(QuicUrlTest, DefaultScheme) {
+TEST_F(QuicUrlTest, DefaultScheme) {
   // Default scheme to HTTP.
   string url_str = "www.example.com";
   QuicUrl url(url_str, "http");
@@ -70,7 +72,7 @@
   EXPECT_EQ("ftp", url.scheme());
 }
 
-TEST(QuicUrlTest, IsValid) {
+TEST_F(QuicUrlTest, IsValid) {
   string url_str =
       "ftp://www.example.com:12345/path/to/resource?a=1&campaign=2";
   EXPECT_TRUE(QuicUrl(url_str).IsValid());
@@ -93,7 +95,7 @@
   EXPECT_FALSE(QuicUrl(url_str).IsValid());
 }
 
-TEST(QuicUrlTest, HostPort) {
+TEST_F(QuicUrlTest, HostPort) {
   string url_str = "http://www.example.com/";
   QuicUrl url(url_str);
   EXPECT_EQ("www.example.com", url.HostPort());
@@ -131,7 +133,7 @@
   EXPECT_EQ(81u, url.port());
 }
 
-TEST(QuicUrlTest, PathParamsQuery) {
+TEST_F(QuicUrlTest, PathParamsQuery) {
   string url_str =
       "https://www.example.com:12345/path/to/resource?a=1&campaign=2";
   QuicUrl url(url_str);
diff --git a/src/net/quic/platform/impl/quic_flag_utils_impl.h b/src/net/quic/platform/impl/quic_flag_utils_impl.h
index ba6ddd9..bd18794 100644
--- a/src/net/quic/platform/impl/quic_flag_utils_impl.h
+++ b/src/net/quic/platform/impl/quic_flag_utils_impl.h
@@ -5,7 +5,8 @@
 #ifndef NET_QUIC_PLATFORM_IMPL_QUIC_FLAG_UTILS_IMPL_H_
 #define NET_QUIC_PLATFORM_IMPL_QUIC_FLAG_UTILS_IMPL_H_
 
-#define QUIC_FLAG_COUNT_IMPL(flag) DVLOG(1) << "FLAG_##flag: " << FLAGS_##flag
+#define QUIC_FLAG_COUNT_IMPL(flag) \
+  DVLOG(1) << "FLAG_" #flag ": " << FLAGS_##flag
 #define QUIC_FLAG_COUNT_N_IMPL(flag, instance, total) QUIC_FLAG_COUNT_IMPL(flag)
 
 #endif  // NET_QUIC_PLATFORM_IMPL_QUIC_FLAG_UTILS_IMPL_H_
diff --git a/src/net/quic/platform/impl/quic_mutex_impl.h b/src/net/quic/platform/impl/quic_mutex_impl.h
index 8053514..9ad327c 100644
--- a/src/net/quic/platform/impl/quic_mutex_impl.h
+++ b/src/net/quic/platform/impl/quic_mutex_impl.h
@@ -5,6 +5,7 @@
 #ifndef NET_QUIC_PLATFORM_IMPL_QUIC_MUTEX_IMPL_H_
 #define NET_QUIC_PLATFORM_IMPL_QUIC_MUTEX_IMPL_H_
 
+#include "base/macros.h"
 #include "base/synchronization/lock.h"
 #include "net/quic/platform/api/quic_export.h"
 
diff --git a/src/net/quic/platform/impl/quic_ptr_util_impl.h b/src/net/quic/platform/impl/quic_ptr_util_impl.h
index b41ea4e..93fe585 100644
--- a/src/net/quic/platform/impl/quic_ptr_util_impl.h
+++ b/src/net/quic/platform/impl/quic_ptr_util_impl.h
@@ -10,12 +10,12 @@
 
 template <typename T, typename... Args>
 std::unique_ptr<T> QuicMakeUniqueImpl(Args&&... args) {
-  return std::move(base::MakeUnique<T>(std::forward<Args>(args)...));
+  return base::MakeUnique<T>(std::forward<Args>(args)...);
 }
 
 template <typename T>
 std::unique_ptr<T> QuicWrapUniqueImpl(T* ptr) {
-  return std::move(base::WrapUnique<T>(ptr));
+  return base::WrapUnique<T>(ptr);
 }
 
 }  // namespace net
diff --git a/src/net/quic/platform/impl/quic_str_cat_impl.h b/src/net/quic/platform/impl/quic_str_cat_impl.h
index 3e07d64..fae149d 100644
--- a/src/net/quic/platform/impl/quic_str_cat_impl.h
+++ b/src/net/quic/platform/impl/quic_str_cat_impl.h
@@ -22,7 +22,7 @@
 
 template <typename... Args>
 inline std::string QuicStringPrintfImpl(const Args&... args) {
-  return std::move(base::StringPrintf(std::forward<const Args&>(args)...));
+  return base::StringPrintf(std::forward<const Args&>(args)...);
 }
 
 }  // namespace net
diff --git a/src/net/quic/platform/impl/quic_test_impl.cc b/src/net/quic/platform/impl/quic_test_impl.cc
new file mode 100644
index 0000000..dc1709b
--- /dev/null
+++ b/src/net/quic/platform/impl/quic_test_impl.cc
@@ -0,0 +1,23 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/quic/platform/impl/quic_test_impl.h"
+
+#include "base/logging.h"
+#include "net/quic/platform/api/quic_flags.h"
+
+QuicFlagSaver::QuicFlagSaver() {
+#define QUIC_FLAG(type, flag, value)                                 \
+  CHECK_EQ(value, flag)                                              \
+      << "Flag set to an unexpected value.  A prior test is likely " \
+      << "setting a flag without using a QuicFlagSaver";
+#include "net/quic/core/quic_flags_list.h"
+#undef QUIC_FLAG
+}
+
+QuicFlagSaver::~QuicFlagSaver() {
+#define QUIC_FLAG(type, flag, value) flag = value;
+#include "net/quic/core/quic_flags_list.h"
+#undef QUIC_FLAG
+}
diff --git a/src/net/quic/platform/impl/quic_test_impl.h b/src/net/quic/platform/impl/quic_test_impl.h
new file mode 100644
index 0000000..6be1652
--- /dev/null
+++ b/src/net/quic/platform/impl/quic_test_impl.h
@@ -0,0 +1,30 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_QUIC_PLATFORM_IMPL_QUIC_TEST_IMPL_H_
+#define NET_QUIC_PLATFORM_IMPL_QUIC_TEST_IMPL_H_
+
+#include "testing/gmock/include/gmock/gmock.h"  // IWYU pragma: export
+#include "testing/gtest/include/gtest/gtest.h"  // IWYU pragma: export
+
+// When constructed, checks that all QUIC flags have their correct default
+// values and when destructed, restores those values.
+class QuicFlagSaver {
+ public:
+  QuicFlagSaver();
+  ~QuicFlagSaver();
+};
+
+class QuicTestImpl : public ::testing::Test {
+ private:
+  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
+};
+
+template <class T>
+class QuicTestWithParamImpl : public ::testing::TestWithParam<T> {
+ private:
+  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
+};
+
+#endif  // NET_QUIC_PLATFORM_IMPL_QUIC_TEST_IMPL_H_
diff --git a/src/net/quic/quartc/quartc_alarm_factory.cc b/src/net/quic/quartc/quartc_alarm_factory.cc
deleted file mode 100644
index a793dd2..0000000
--- a/src/net/quic/quartc/quartc_alarm_factory.cc
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/quic/quartc/quartc_alarm_factory.h"
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/task_runner.h"
-
-namespace net {
-
-namespace {
-
-class QuartcAlarm : public QuicAlarm {
- public:
-  QuartcAlarm(base::TaskRunner* task_runner,
-              const QuicClock* clock,
-              QuicArenaScopedPtr<QuicAlarm::Delegate> delegate)
-      : QuicAlarm(std::move(delegate)),
-        clock_(clock),
-        task_runner_(task_runner),
-        task_deadline_(QuicTime::Zero()),
-        weak_factory_(this) {}
-
- protected:
-  void SetImpl() override {
-    DCHECK(deadline().IsInitialized());
-    if (task_deadline_.IsInitialized()) {
-      if (task_deadline_ <= deadline()) {
-        // Since tasks can not be un-posted, OnAlarm will be invoked which
-        // will notice that deadline has not yet been reached, and will set
-        // the alarm for the new deadline.
-        return;
-      }
-      // The scheduled task is after new deadline.  Invalidate the weak ptrs
-      // so that task does not execute when we're not expecting it.
-      weak_factory_.InvalidateWeakPtrs();
-    }
-
-    int64_t delay_us = (deadline() - (clock_->Now())).ToMicroseconds();
-    if (delay_us < 0) {
-      delay_us = 0;
-    }
-    task_runner_->PostDelayedTask(
-        FROM_HERE,
-        base::Bind(&QuartcAlarm::OnAlarm, weak_factory_.GetWeakPtr()),
-        base::TimeDelta::FromMicroseconds(delay_us));
-    task_deadline_ = deadline();
-  }
-
-  void CancelImpl() override {
-    DCHECK(!deadline().IsInitialized());
-    // Since tasks can not be un-posted, OnAlarm will be invoked which
-    // will notice that deadline is not Initialized and will do nothing.
-  }
-
- private:
-  void OnAlarm() {
-    DCHECK(task_deadline_.IsInitialized());
-    task_deadline_ = QuicTime::Zero();
-    // The alarm may have been cancelled.
-    if (!deadline().IsInitialized()) {
-      return;
-    }
-
-    // The alarm may have been re-set to a later time.
-    if (clock_->Now() < deadline()) {
-      SetImpl();
-      return;
-    }
-
-    Fire();
-  }
-
-  const QuicClock* clock_;
-  base::TaskRunner* task_runner_;
-  // If a task has been posted to the message loop, this is the time it
-  // was scheduled to fire.  Tracking this allows us to avoid posting a
-  // new tast if the new deadline is in the future, but permits us to
-  // post a new task when the new deadline now earlier than when
-  // previously posted.
-  QuicTime task_deadline_;
-  base::WeakPtrFactory<QuartcAlarm> weak_factory_;
-};
-
-}  // namespace
-
-QuartcAlarmFactory::QuartcAlarmFactory(base::TaskRunner* task_runner,
-                                       const QuicClock* clock)
-    : task_runner_(task_runner), clock_(clock) {}
-
-QuartcAlarmFactory::~QuartcAlarmFactory() {}
-
-QuicAlarm* QuartcAlarmFactory::CreateAlarm(QuicAlarm::Delegate* delegate) {
-  return new QuartcAlarm(task_runner_, clock_,
-                         QuicArenaScopedPtr<QuicAlarm::Delegate>(delegate));
-}
-
-QuicArenaScopedPtr<QuicAlarm> QuartcAlarmFactory::CreateAlarm(
-    QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
-    QuicConnectionArena* arena) {
-  return QuicArenaScopedPtr<QuicAlarm>(
-      new QuartcAlarm(task_runner_, clock_, std::move(delegate)));
-}
-
-}  // namespace net
diff --git a/src/net/quic/quartc/quartc_alarm_factory.h b/src/net/quic/quartc/quartc_alarm_factory.h
deleted file mode 100644
index 12fd816..0000000
--- a/src/net/quic/quartc/quartc_alarm_factory.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_QUIC_QUARTC_QUARTC_ALARM_FACTORY_H_
-#define NET_QUIC_QUARTC_QUARTC_ALARM_FACTORY_H_
-
-#include <utility>
-
-#include "net/quic/core/quic_alarm_factory.h"
-#include "net/quic/platform/api/quic_clock.h"
-#include "net/quic/platform/api/quic_export.h"
-
-namespace base {
-class TaskRunner;
-}  // namespace base
-
-namespace net {
-
-// Creates Chromium-based QuartcAlarms used throughout QUIC. The alarm posts
-// messages to the Chromium message queue for tasks such as retransmission.
-// Used for the tests inside Chromium.
-class QUIC_EXPORT_PRIVATE QuartcAlarmFactory : public QuicAlarmFactory {
- public:
-  QuartcAlarmFactory(base::TaskRunner* task_runner, const QuicClock* clock);
-  ~QuartcAlarmFactory() override;
-
-  QuicAlarm* CreateAlarm(QuicAlarm::Delegate* delegate) override;
-
-  QuicArenaScopedPtr<QuicAlarm> CreateAlarm(
-      QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
-      QuicConnectionArena* arena) override;
-
- private:
-  base::TaskRunner* task_runner_;
-  // Not owned by QuartcAlarmFactory. The implementation of
-  // QuicConnectionHelperInterface owns it.
-  const QuicClock* clock_;
-
-  DISALLOW_COPY_AND_ASSIGN(QuartcAlarmFactory);
-};
-
-}  // namespace net
-
-#endif  // NET_QUIC_QUARTC_QUARTC_ALARM_FACTORY_H_
diff --git a/src/net/quic/quartc/quartc_alarm_factory_test.cc b/src/net/quic/quartc/quartc_alarm_factory_test.cc
deleted file mode 100644
index b55cccb..0000000
--- a/src/net/quic/quartc/quartc_alarm_factory_test.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/quic/quartc/quartc_alarm_factory.h"
-
-#include "net/quic/chromium/test_task_runner.h"
-#include "net/quic/test_tools/mock_clock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-namespace test {
-namespace {
-
-class TestDelegate : public QuicAlarm::Delegate {
- public:
-  TestDelegate() : fired_(false) {}
-
-  void OnAlarm() override { fired_ = true; }
-
-  bool fired() const { return fired_; }
-  void Clear() { fired_ = false; }
-
- private:
-  bool fired_;
-};
-
-class QuartcAlarmFactoryTest : public ::testing::Test {
- protected:
-  QuartcAlarmFactoryTest()
-      : runner_(new TestTaskRunner(&clock_)),
-        alarm_factory_(runner_.get(), &clock_) {}
-
-  scoped_refptr<TestTaskRunner> runner_;
-  QuartcAlarmFactory alarm_factory_;
-  MockClock clock_;
-};
-
-TEST_F(QuartcAlarmFactoryTest, CreateAlarm) {
-  TestDelegate* delegate = new TestDelegate();
-  std::unique_ptr<QuicAlarm> alarm(alarm_factory_.CreateAlarm(delegate));
-
-  QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1);
-  alarm->Set(clock_.Now() + delta);
-
-  // Verify that the alarm task has been posted.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  EXPECT_EQ(base::TimeDelta::FromMicroseconds(delta.ToMicroseconds()),
-            runner_->GetPostedTasks()[0].delay);
-
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + delta, clock_.Now());
-  EXPECT_TRUE(delegate->fired());
-}
-
-TEST_F(QuartcAlarmFactoryTest, CreateAlarmAndCancel) {
-  TestDelegate* delegate = new TestDelegate();
-  std::unique_ptr<QuicAlarm> alarm(alarm_factory_.CreateAlarm(delegate));
-
-  QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1);
-  alarm->Set(clock_.Now() + delta);
-  alarm->Cancel();
-
-  // The alarm task should still be posted.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  EXPECT_EQ(base::TimeDelta::FromMicroseconds(delta.ToMicroseconds()),
-            runner_->GetPostedTasks()[0].delay);
-
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + delta, clock_.Now());
-  EXPECT_FALSE(delegate->fired());
-}
-
-TEST_F(QuartcAlarmFactoryTest, CreateAlarmAndReset) {
-  TestDelegate* delegate = new TestDelegate();
-  std::unique_ptr<QuicAlarm> alarm(alarm_factory_.CreateAlarm(delegate));
-
-  QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1);
-  alarm->Set(clock_.Now() + delta);
-  alarm->Cancel();
-  QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3);
-  alarm->Set(clock_.Now() + new_delta);
-
-  // The alarm task should still be posted.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  EXPECT_EQ(base::TimeDelta::FromMicroseconds(delta.ToMicroseconds()),
-            runner_->GetPostedTasks()[0].delay);
-
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + delta, clock_.Now());
-  EXPECT_FALSE(delegate->fired());
-
-  // The alarm task should be posted again.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + new_delta, clock_.Now());
-  EXPECT_TRUE(delegate->fired());
-}
-
-TEST_F(QuartcAlarmFactoryTest, CreateAlarmAndResetEarlier) {
-  TestDelegate* delegate = new TestDelegate();
-  std::unique_ptr<QuicAlarm> alarm(alarm_factory_.CreateAlarm(delegate));
-
-  QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(3);
-  alarm->Set(clock_.Now() + delta);
-  alarm->Cancel();
-  QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(1);
-  alarm->Set(clock_.Now() + new_delta);
-
-  // Both alarm tasks will be posted.
-  ASSERT_EQ(2u, runner_->GetPostedTasks().size());
-
-  // The earlier task will execute and will fire the alarm->
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + new_delta, clock_.Now());
-  EXPECT_TRUE(delegate->fired());
-  delegate->Clear();
-
-  // The latter task is still posted.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-
-  // When the latter task is executed, the weak ptr will be invalid and
-  // the alarm will not fire.
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + delta, clock_.Now());
-  EXPECT_FALSE(delegate->fired());
-}
-
-TEST_F(QuartcAlarmFactoryTest, CreateAlarmAndUpdate) {
-  TestDelegate* delegate = new TestDelegate();
-  std::unique_ptr<QuicAlarm> alarm(alarm_factory_.CreateAlarm(delegate));
-
-  QuicTime start = clock_.Now();
-  QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1);
-  alarm->Set(clock_.Now() + delta);
-  QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3);
-  alarm->Update(clock_.Now() + new_delta, QuicTime::Delta::FromMicroseconds(1));
-
-  // The alarm task should still be posted.
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  EXPECT_EQ(base::TimeDelta::FromMicroseconds(delta.ToMicroseconds()),
-            runner_->GetPostedTasks()[0].delay);
-
-  runner_->RunNextTask();
-  EXPECT_EQ(QuicTime::Zero() + delta, clock_.Now());
-  EXPECT_FALSE(delegate->fired());
-
-  // Move the alarm forward 1us and ensure it doesn't move forward.
-  alarm->Update(clock_.Now() + new_delta, QuicTime::Delta::FromMicroseconds(2));
-
-  ASSERT_EQ(1u, runner_->GetPostedTasks().size());
-  EXPECT_EQ(
-      base::TimeDelta::FromMicroseconds((new_delta - delta).ToMicroseconds()),
-      runner_->GetPostedTasks()[0].delay);
-  runner_->RunNextTask();
-  EXPECT_EQ(start + new_delta, clock_.Now());
-  EXPECT_TRUE(delegate->fired());
-
-  // Set the alarm via an update call.
-  new_delta = QuicTime::Delta::FromMicroseconds(5);
-  alarm->Update(clock_.Now() + new_delta, QuicTime::Delta::FromMicroseconds(1));
-  EXPECT_TRUE(alarm->IsSet());
-
-  // Update it with an uninitialized time and ensure it's cancelled.
-  alarm->Update(QuicTime::Zero(), QuicTime::Delta::FromMicroseconds(1));
-  EXPECT_FALSE(alarm->IsSet());
-}
-
-}  // namespace
-}  // namespace test
-}  // namespace net
diff --git a/src/net/quic/quartc/quartc_clock_interface.h b/src/net/quic/quartc/quartc_clock_interface.h
new file mode 100644
index 0000000..4597176
--- /dev/null
+++ b/src/net/quic/quartc/quartc_clock_interface.h
@@ -0,0 +1,21 @@
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_QUIC_QUARTC_QUARTC_CLOCK_INTERFACE_H_
+#define NET_QUIC_QUARTC_QUARTC_CLOCK_INTERFACE_H_
+
+#include <stdint.h>
+
+namespace net {
+
+// Implemented by the Quartc API user to provide a timebase.
+class QuartcClockInterface {
+ public:
+  virtual ~QuartcClockInterface() {}
+  virtual int64_t NowMicroseconds() = 0;
+};
+
+}  // namespace net
+
+#endif  // NET_QUIC_QUARTC_QUARTC_CLOCK_INTERFACE_H_
diff --git a/src/net/quic/quartc/quartc_factory.cc b/src/net/quic/quartc/quartc_factory.cc
index 9cf63c0..ba21e4d 100644
--- a/src/net/quic/quartc/quartc_factory.cc
+++ b/src/net/quic/quartc/quartc_factory.cc
@@ -1,25 +1,26 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #include "net/quic/quartc/quartc_factory.h"
 
 #include "net/quic/core/crypto/quic_random.h"
-#include "net/quic/quartc/quartc_alarm_factory.h"
+#include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/quartc/quartc_session.h"
 
+namespace net {
+
 namespace {
 
 // Implements the QuicAlarm with QuartcTaskRunnerInterface for the Quartc
 //  users other than Chromium. For example, WebRTC will create QuartcAlarm with
 // a QuartcTaskRunner implemented by WebRTC.
-class QuartcAlarm : public net::QuicAlarm,
-                    public net::QuartcTaskRunnerInterface::Task {
+class QuartcAlarm : public QuicAlarm, public QuartcTaskRunnerInterface::Task {
  public:
-  QuartcAlarm(const net::QuicClock* clock,
-              net::QuartcTaskRunnerInterface* task_runner,
-              net::QuicArenaScopedPtr<QuicAlarm::Delegate> delegate)
-      : net::QuicAlarm(std::move(delegate)),
+  QuartcAlarm(const QuicClock* clock,
+              QuartcTaskRunnerInterface* task_runner,
+              QuicArenaScopedPtr<QuicAlarm::Delegate> delegate)
+      : QuicAlarm(std::move(delegate)),
         clock_(clock),
         task_runner_(task_runner) {}
 
@@ -69,24 +70,36 @@
 
  private:
   // Not owned by QuartcAlarm. Owned by the QuartcFactory.
-  const net::QuicClock* clock_;
+  const QuicClock* clock_;
   // Not owned by QuartcAlarm. Owned by the QuartcFactory.
-  net::QuartcTaskRunnerInterface* task_runner_;
+  QuartcTaskRunnerInterface* task_runner_;
   // Owned by QuartcAlarm.
-  std::unique_ptr<net::QuartcTaskRunnerInterface::ScheduledTask>
-      scheduled_task_;
+  std::unique_ptr<QuartcTaskRunnerInterface::ScheduledTask> scheduled_task_;
+};
+
+// Adapts QuartcClockInterface (provided by the user) to QuicClock
+// (expected by QUIC).
+class QuartcClock : public QuicClock {
+ public:
+  explicit QuartcClock(QuartcClockInterface* clock) : clock_(clock) {}
+  QuicTime ApproximateNow() const override { return Now(); }
+  QuicTime Now() const override {
+    return QuicTime::Zero() +
+           QuicTime::Delta::FromMicroseconds(clock_->NowMicroseconds());
+  }
+  QuicWallTime WallNow() const override {
+    return QuicWallTime::FromUNIXMicroseconds(clock_->NowMicroseconds());
+  }
+
+ private:
+  QuartcClockInterface* clock_;
 };
 
 }  // namespace
 
-namespace net {
-
-QuartcFactory::QuartcFactory(const QuartcFactoryConfig& factory_config) {
-  task_runner_.reset(factory_config.task_runner);
-  if (factory_config.create_at_exit_manager) {
-    at_exit_manager_.reset(new base::AtExitManager);
-  }
-}
+QuartcFactory::QuartcFactory(const QuartcFactoryConfig& factory_config)
+    : task_runner_(factory_config.task_runner),
+      clock_(new QuartcClock(factory_config.clock)) {}
 
 QuartcFactory::~QuartcFactory() {}
 
@@ -100,10 +113,10 @@
   std::unique_ptr<QuicConnection> quic_connection =
       CreateQuicConnection(quartc_session_config, perspective);
   QuicConfig quic_config;
-  return std::unique_ptr<QuartcSessionInterface>(
-      new QuartcSession(std::move(quic_connection), quic_config,
-                        quartc_session_config.unique_remote_server_id,
-                        perspective, this /*QuicConnectionHelperInterface*/));
+  return std::unique_ptr<QuartcSessionInterface>(new QuartcSession(
+      std::move(quic_connection), quic_config,
+      quartc_session_config.unique_remote_server_id, perspective,
+      this /*QuicConnectionHelperInterface*/, clock_.get()));
 }
 
 std::unique_ptr<QuicConnection> QuartcFactory::CreateQuicConnection(
@@ -116,16 +129,15 @@
   // dummy_id and dummy_address are used because Quartc network layer will not
   // use these two.
   QuicConnectionId dummy_id = 0;
-  IPEndPoint dummy_address(IPAddress(0, 0, 0, 0), 0 /*Port*/);
+  QuicSocketAddress dummy_address(QuicIpAddress::Any4(), 0 /*Port*/);
   return std::unique_ptr<QuicConnection>(new QuicConnection(
-      dummy_id, QuicSocketAddress(QuicSocketAddressImpl(dummy_address)),
-      this, /*QuicConnectionHelperInterface*/
+      dummy_id, dummy_address, this, /*QuicConnectionHelperInterface*/
       this /*QuicAlarmFactory*/, writer.release(), true /*own the writer*/,
       perspective, AllSupportedVersions()));
 }
 
 QuicAlarm* QuartcFactory::CreateAlarm(QuicAlarm::Delegate* delegate) {
-  return new QuartcAlarm(GetClock(), task_runner_.get(),
+  return new QuartcAlarm(GetClock(), task_runner_,
                          QuicArenaScopedPtr<QuicAlarm::Delegate>(delegate));
 }
 
@@ -133,11 +145,11 @@
     QuicArenaScopedPtr<QuicAlarm::Delegate> delegate,
     QuicConnectionArena* arena) {
   return QuicArenaScopedPtr<QuicAlarm>(
-      new QuartcAlarm(GetClock(), task_runner_.get(), std::move(delegate)));
+      new QuartcAlarm(GetClock(), task_runner_, std::move(delegate)));
 }
 
 const QuicClock* QuartcFactory::GetClock() const {
-  return &clock_;
+  return clock_.get();
 }
 
 QuicRandom* QuartcFactory::GetRandomGenerator() {
diff --git a/src/net/quic/quartc/quartc_factory.h b/src/net/quic/quartc/quartc_factory.h
index 28fd42a..d6601d9 100644
--- a/src/net/quic/quartc/quartc_factory.h
+++ b/src/net/quic/quartc/quartc_factory.h
@@ -1,18 +1,13 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #ifndef NET_QUIC_QUARTC_QUARTC_FACTORY_H_
 #define NET_QUIC_QUARTC_QUARTC_FACTORY_H_
 
-#include "base/at_exit.h"
-#include "base/message_loop/message_loop.h"
 #include "net/quic/core/quic_alarm_factory.h"
 #include "net/quic/core/quic_connection.h"
 #include "net/quic/core/quic_simple_buffer_allocator.h"
-#include "net/quic/platform/api/quic_export.h"
-#include "net/quic/platform/impl/quic_chromium_clock.h"
-#include "net/quic/quartc/quartc_alarm_factory.h"
 #include "net/quic/quartc/quartc_factory_interface.h"
 #include "net/quic/quartc/quartc_packet_writer.h"
 #include "net/quic/quartc/quartc_task_runner_interface.h"
@@ -23,9 +18,9 @@
 // QuartcSessionInterface. Implements the QuicAlarmFactory to create alarms
 // using the QuartcTaskRunner. Implements the QuicConnectionHelperInterface used
 // by the QuicConnections. Only one QuartcFactory is expected to be created.
-class QUIC_EXPORT_PRIVATE QuartcFactory : public QuartcFactoryInterface,
-                                          public QuicAlarmFactory,
-                                          public QuicConnectionHelperInterface {
+class QuartcFactory : public QuartcFactoryInterface,
+                      public QuicAlarmFactory,
+                      public QuicConnectionHelperInterface {
  public:
   QuartcFactory(const QuartcFactoryConfig& factory_config);
   ~QuartcFactory() override;
@@ -54,13 +49,12 @@
       Perspective perspective);
 
   // Used to implement QuicAlarmFactory..
-  std::unique_ptr<QuartcTaskRunnerInterface> task_runner_;
+  QuartcTaskRunnerInterface* task_runner_;
   // Used to implement the QuicConnectionHelperInterface.
-  QuicChromiumClock clock_;
+  // The QuicClock wrapper held in this variable is owned by QuartcFactory,
+  // but the QuartcClockInterface inside of it belongs to the user!
+  std::unique_ptr<QuicClock> clock_;
   SimpleBufferAllocator buffer_allocator_;
-  // An AtExitManager owned by the QuartcFactory to manage the lifetime of
-  // Singletons.
-  std::unique_ptr<base::AtExitManager> at_exit_manager_;
 };
 
 }  // namespace net
diff --git a/src/net/quic/quartc/quartc_factory_interface.h b/src/net/quic/quartc/quartc_factory_interface.h
index fe9c2bd..1d4db2f 100644
--- a/src/net/quic/quartc/quartc_factory_interface.h
+++ b/src/net/quic/quartc/quartc_factory_interface.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -10,14 +10,14 @@
 
 #include <memory>
 
-#include "net/quic/platform/api/quic_export.h"
+#include "net/quic/quartc/quartc_clock_interface.h"
 #include "net/quic/quartc/quartc_session_interface.h"
 #include "net/quic/quartc/quartc_task_runner_interface.h"
 
 namespace net {
 
 // Used to create instances for Quartc objects such as QuartcSession.
-class QUIC_EXPORT_PRIVATE QuartcFactoryInterface {
+class QuartcFactoryInterface {
  public:
   virtual ~QuartcFactoryInterface() {}
 
@@ -46,8 +46,12 @@
 struct QuartcFactoryConfig {
   // The task runner used by the QuartcAlarm. Implemented by the Quartc user
   // with different mechanism. For example in WebRTC, it is implemented with
-  // rtc::Thread.
+  // rtc::Thread. Owned by the user, and needs to stay alive for as long
+  // as the QuartcFactory exists.
   QuartcTaskRunnerInterface* task_runner = nullptr;
+  // The clock used by QuartcAlarms. Implemented by the Quartc user. Owned by
+  // the user, and needs to stay alive for as long as the QuartcFactory exists.
+  QuartcClockInterface* clock = nullptr;
   // If create_at_exit_manager = true, an AtExitManager will be created and
   // owned by the QuartcFactory. In some scenarios, such as unit tests, this
   // value could be false and no AtExitManager will be created.
@@ -55,7 +59,7 @@
 };
 
 // Creates a new instance of QuartcFactoryInterface.
-QUIC_EXPORT_PRIVATE std::unique_ptr<QuartcFactoryInterface> CreateQuartcFactory(
+std::unique_ptr<QuartcFactoryInterface> CreateQuartcFactory(
     const QuartcFactoryConfig& factory_config);
 
 }  // namespace net
diff --git a/src/net/quic/quartc/quartc_packet_writer.cc b/src/net/quic/quartc/quartc_packet_writer.cc
index 9ad7bdf..295fce7 100644
--- a/src/net/quic/quartc/quartc_packet_writer.cc
+++ b/src/net/quic/quartc/quartc_packet_writer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
diff --git a/src/net/quic/quartc/quartc_packet_writer.h b/src/net/quic/quartc/quartc_packet_writer.h
index 2c4b07f..0eda271 100644
--- a/src/net/quic/quartc/quartc_packet_writer.h
+++ b/src/net/quic/quartc/quartc_packet_writer.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -6,7 +6,6 @@
 #define NET_QUIC_QUARTC_QUARTC_PACKET_WRITER_H_
 
 #include "net/quic/core/quic_packet_writer.h"
-#include "net/quic/platform/api/quic_export.h"
 #include "net/quic/quartc/quartc_session_interface.h"
 
 namespace net {
@@ -14,7 +13,7 @@
 // Implements a QuicPacketWriter using a
 // QuartcSessionInterface::PacketTransport, which allows a QuicConnection to
 // use(for example), a WebRTC IceTransport.
-class QUIC_EXPORT_PRIVATE QuartcPacketWriter : public QuicPacketWriter {
+class QuartcPacketWriter : public QuicPacketWriter {
  public:
   QuartcPacketWriter(QuartcSessionInterface::PacketTransport* packet_transport,
                      QuicByteCount max_packet_size);
diff --git a/src/net/quic/quartc/quartc_session.cc b/src/net/quic/quartc/quartc_session.cc
index d3f3f5e..92e3c48 100644
--- a/src/net/quic/quartc/quartc_session.cc
+++ b/src/net/quic/quartc/quartc_session.cc
@@ -1,17 +1,18 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #include "net/quic/quartc/quartc_session.h"
 
-#include "base/rand_util.h"
-#include "net/quic/platform/api/quic_string_piece.h"
+using std::string;
+
+namespace net {
 
 namespace {
 
 // Default priority for incoming QUIC streams.
 // TODO(zhihuang): Determine if this value is correct.
-static const net::SpdyPriority kDefaultPriority = 3;
+static const SpdyPriority kDefaultPriority = 3;
 
 // Arbitrary server port number for net::QuicCryptoClientConfig.
 const int kQuicServerPort = 0;
@@ -23,22 +24,22 @@
 
 // Used by QuicCryptoServerConfig to provide dummy proof credentials.
 // TODO(zhihuang): Remove when secure P2P QUIC handshake is possible.
-class DummyProofSource : public net::ProofSource {
+class DummyProofSource : public ProofSource {
  public:
   DummyProofSource() {}
   ~DummyProofSource() override {}
 
   // ProofSource override.
-  void GetProof(const net::QuicSocketAddress& server_addr,
-                const std::string& hostname,
-                const std::string& server_config,
-                net::QuicVersion quic_version,
-                net::QuicStringPiece chlo_hash,
-                const net::QuicTagVector& connection_options,
+  void GetProof(const QuicSocketAddress& server_addr,
+                const string& hostname,
+                const string& server_config,
+                QuicVersion quic_version,
+                QuicStringPiece chlo_hash,
+                const QuicTagVector& connection_options,
                 std::unique_ptr<Callback> callback) override {
-    net::QuicReferenceCountedPointer<net::ProofSource::Chain> chain;
-    net::QuicCryptoProof proof;
-    std::vector<std::string> certs;
+    QuicReferenceCountedPointer<ProofSource::Chain> chain;
+    QuicCryptoProof proof;
+    std::vector<string> certs;
     certs.push_back("Dummy cert");
     chain = new ProofSource::Chain(certs);
     proof.signature = "Dummy signature";
@@ -50,41 +51,39 @@
 // Used by QuicCryptoClientConfig to ignore the peer's credentials
 // and establish an insecure QUIC connection.
 // TODO(zhihuang): Remove when secure P2P QUIC handshake is possible.
-class InsecureProofVerifier : public net::ProofVerifier {
+class InsecureProofVerifier : public ProofVerifier {
  public:
   InsecureProofVerifier() {}
   ~InsecureProofVerifier() override {}
 
   // ProofVerifier override.
-  net::QuicAsyncStatus VerifyProof(
-      const std::string& hostname,
+  QuicAsyncStatus VerifyProof(
+      const string& hostname,
       const uint16_t port,
-      const std::string& server_config,
-      net::QuicVersion quic_version,
-      net::QuicStringPiece chlo_hash,
-      const std::vector<std::string>& certs,
-      const std::string& cert_sct,
-      const std::string& signature,
-      const net::ProofVerifyContext* context,
-      std::string* error_details,
-      std::unique_ptr<net::ProofVerifyDetails>* verify_details,
-      std::unique_ptr<net::ProofVerifierCallback> callback) override {
-    return net::QUIC_SUCCESS;
+      const string& server_config,
+      QuicVersion quic_version,
+      QuicStringPiece chlo_hash,
+      const std::vector<string>& certs,
+      const string& cert_sct,
+      const string& signature,
+      const ProofVerifyContext* context,
+      string* error_details,
+      std::unique_ptr<ProofVerifyDetails>* verify_details,
+      std::unique_ptr<ProofVerifierCallback> callback) override {
+    return QUIC_SUCCESS;
   }
 
-  net::QuicAsyncStatus VerifyCertChain(
-      const std::string& hostname,
-      const std::vector<std::string>& certs,
-      const net::ProofVerifyContext* context,
-      std::string* error_details,
-      std::unique_ptr<net::ProofVerifyDetails>* details,
-      std::unique_ptr<net::ProofVerifierCallback> callback) override {
-    return net::QUIC_SUCCESS;
+  QuicAsyncStatus VerifyCertChain(
+      const string& hostname,
+      const std::vector<string>& certs,
+      const ProofVerifyContext* context,
+      string* error_details,
+      std::unique_ptr<ProofVerifyDetails>* details,
+      std::unique_ptr<ProofVerifierCallback> callback) override {
+    return QUIC_SUCCESS;
   }
 };
-}
-
-namespace net {
+}  // namespace
 
 QuicConnectionId QuartcCryptoServerStreamHelper::GenerateConnectionIdForReject(
     QuicConnectionId connection_id) const {
@@ -94,20 +93,22 @@
 bool QuartcCryptoServerStreamHelper::CanAcceptClientHello(
     const CryptoHandshakeMessage& message,
     const QuicSocketAddress& self_address,
-    std::string* error_details) const {
+    string* error_details) const {
   return true;
 }
 
 QuartcSession::QuartcSession(std::unique_ptr<QuicConnection> connection,
                              const QuicConfig& config,
-                             const std::string& unique_remote_server_id,
+                             const string& unique_remote_server_id,
                              Perspective perspective,
-                             QuicConnectionHelperInterface* helper)
+                             QuicConnectionHelperInterface* helper,
+                             QuicClock* clock)
     : QuicSession(connection.get(), nullptr /*visitor*/, config),
       unique_remote_server_id_(unique_remote_server_id),
       perspective_(perspective),
       connection_(std::move(connection)),
-      helper_(helper) {
+      helper_(helper),
+      clock_(clock) {
   // Initialization with default crypto configuration.
   if (perspective_ == Perspective::IS_CLIENT) {
     std::unique_ptr<ProofVerifier> proof_verifier(new InsecureProofVerifier);
@@ -115,11 +116,15 @@
         new QuicCryptoClientConfig(std::move(proof_verifier)));
   } else {
     std::unique_ptr<ProofSource> proof_source(new DummyProofSource);
-    std::string source_address_token_secret =
-        base::RandBytesAsString(kInputKeyingMaterialLength);
+    // Generate a random source address token secret. For long-running servers
+    // it's better to not regenerate it for each connection to enable zero-RTT
+    // handshakes, but for transient clients it does not matter.
+    char source_address_token_secret[kInputKeyingMaterialLength];
+    helper_->GetRandomGenerator()->RandBytes(source_address_token_secret,
+                                             kInputKeyingMaterialLength);
     quic_crypto_server_config_.reset(new QuicCryptoServerConfig(
-        source_address_token_secret, helper_->GetRandomGenerator(),
-        std::move(proof_source)));
+        string(source_address_token_secret, kInputKeyingMaterialLength),
+        helper_->GetRandomGenerator(), std::move(proof_source)));
     // Provide server with serialized config string to prove ownership.
     QuicCryptoServerConfig::ConfigOptions options;
     // The |message| is used to handle the return value of AddDefaultConfig
@@ -167,7 +172,7 @@
 }
 
 void QuartcSession::OnConnectionClosed(QuicErrorCode error,
-                                       const std::string& error_details,
+                                       const string& error_details,
                                        ConnectionCloseSource source) {
   QuicSession::OnConnectionClosed(error, error_details, source);
   DCHECK(session_delegate_);
@@ -196,14 +201,14 @@
   }
 }
 
-bool QuartcSession::ExportKeyingMaterial(const std::string& label,
+bool QuartcSession::ExportKeyingMaterial(const string& label,
                                          const uint8_t* context,
                                          size_t context_len,
                                          bool used_context,
                                          uint8_t* result,
                                          size_t result_len) {
-  std::string quic_context(reinterpret_cast<const char*>(context), context_len);
-  std::string quic_result;
+  string quic_context(reinterpret_cast<const char*>(context), context_len);
+  string quic_result;
   bool success = crypto_stream_->ExportKeyingMaterial(label, quic_context,
                                                       result_len, &quic_result);
   quic_result.copy(reinterpret_cast<char*>(result), result_len);
@@ -233,7 +238,7 @@
 }
 
 bool QuartcSession::OnTransportReceived(const char* data, size_t data_len) {
-  QuicReceivedPacket packet(data, data_len, clock_.Now());
+  QuicReceivedPacket packet(data, data_len, clock_->Now());
   ProcessUdpPacket(connection()->self_address(), connection()->peer_address(),
                    packet);
   return true;
diff --git a/src/net/quic/quartc/quartc_session.h b/src/net/quic/quartc/quartc_session.h
index 7996a1f..a46c2d9 100644
--- a/src/net/quic/quartc/quartc_session.h
+++ b/src/net/quic/quartc/quartc_session.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -9,8 +9,7 @@
 #include "net/quic/core/quic_crypto_server_stream.h"
 #include "net/quic/core/quic_crypto_stream.h"
 #include "net/quic/core/quic_session.h"
-#include "net/quic/platform/api/quic_export.h"
-#include "net/quic/platform/impl/quic_chromium_clock.h"
+#include "net/quic/quartc/quartc_clock_interface.h"
 #include "net/quic/quartc/quartc_session_interface.h"
 #include "net/quic/quartc/quartc_stream.h"
 
@@ -27,22 +26,23 @@
                             std::string* error_details) const override;
 };
 
-class QUIC_EXPORT_PRIVATE QuartcSession
-    : public QuicSession,
-      public QuartcSessionInterface,
-      public QuicCryptoClientStream::ProofHandler {
+class QuartcSession : public QuicSession,
+                      public QuartcSessionInterface,
+                      public QuicCryptoClientStream::ProofHandler {
  public:
   QuartcSession(std::unique_ptr<QuicConnection> connection,
                 const QuicConfig& config,
                 const std::string& unique_remote_server_id,
                 Perspective perspective,
-                QuicConnectionHelperInterface* helper);
+                QuicConnectionHelperInterface* helper,
+                QuicClock* clock);
   ~QuartcSession() override;
 
   // QuicSession overrides.
-  const QuicCryptoStream* GetCryptoStream() const override;
   QuicCryptoStream* GetMutableCryptoStream() override;
 
+  const QuicCryptoStream* GetCryptoStream() const override;
+
   QuartcStream* CreateOutgoingDynamicStream(SpdyPriority priority) override;
 
   void OnCryptoHandshakeEvent(CryptoHandshakeEvent event) override;
@@ -98,14 +98,14 @@
  private:
   // For crypto handshake.
   std::unique_ptr<QuicCryptoStream> crypto_stream_;
-  // For recording packet receipt time
-  QuicChromiumClock clock_;
   const std::string unique_remote_server_id_;
   Perspective perspective_;
   // Take the ownership of the QuicConnection.
   std::unique_ptr<QuicConnection> connection_;
   // Not owned by QuartcSession. From the QuartcFactory.
   QuicConnectionHelperInterface* helper_;
+  // For recording packet receipt time
+  QuicClock* clock_;
   // Not owned by QuartcSession.
   QuartcSessionInterface::Delegate* session_delegate_ = nullptr;
   // Used by QUIC crypto server stream to track most recently compressed certs.
diff --git a/src/net/quic/quartc/quartc_session_interface.h b/src/net/quic/quartc/quartc_session_interface.h
index 8231487..f4d8845 100644
--- a/src/net/quic/quartc/quartc_session_interface.h
+++ b/src/net/quic/quartc/quartc_session_interface.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -9,7 +9,6 @@
 #include <stdint.h>
 #include <string>
 
-#include "net/quic/platform/api/quic_export.h"
 #include "net/quic/quartc/quartc_stream_interface.h"
 
 namespace net {
@@ -17,7 +16,7 @@
 // Given a PacketTransport, provides a way to send and receive separate streams
 // of reliable, in-order, encrypted data. For example, this can build on top of
 // a WebRTC IceTransport for sending and receiving data over QUIC.
-class QUIC_EXPORT_PRIVATE QuartcSessionInterface {
+class QuartcSessionInterface {
  public:
   virtual ~QuartcSessionInterface() {}
 
diff --git a/src/net/quic/quartc/quartc_session_test.cc b/src/net/quic/quartc/quartc_session_test.cc
deleted file mode 100644
index 2844baf..0000000
--- a/src/net/quic/quartc/quartc_session_test.cc
+++ /dev/null
@@ -1,504 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/quic/quartc/quartc_session.h"
-
-#include "base/bind.h"
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "net/base/ip_endpoint.h"
-#include "net/quic/core/crypto/crypto_server_config_protobuf.h"
-#include "net/quic/core/crypto/proof_source.h"
-#include "net/quic/core/crypto/proof_verifier.h"
-#include "net/quic/core/crypto/quic_crypto_client_config.h"
-#include "net/quic/core/crypto/quic_crypto_server_config.h"
-#include "net/quic/core/crypto/quic_random.h"
-#include "net/quic/core/quic_crypto_client_stream.h"
-#include "net/quic/core/quic_crypto_server_stream.h"
-#include "net/quic/core/quic_simple_buffer_allocator.h"
-#include "net/quic/platform/api/quic_string_piece.h"
-#include "net/quic/platform/impl/quic_chromium_clock.h"
-#include "net/quic/quartc/quartc_alarm_factory.h"
-#include "net/quic/quartc/quartc_packet_writer.h"
-#include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-namespace test {
-namespace {
-
-static const char kExporterLabel[] = "label";
-static const uint8_t kExporterContext[] = "context";
-static const size_t kExporterContextLen = sizeof(kExporterContext);
-static const size_t kOutputKeyLength = 20;
-static QuartcStreamInterface::WriteParameters kDefaultWriteParam;
-static QuartcSessionInterface::OutgoingStreamParameters kDefaultStreamParam;
-static QuicByteCount kDefaultMaxPacketSize = 1200;
-
-// Use the MessageLoop to simulate the asynchronous P2P communication. The
-// RunLoop is used for handling the posted tasks.
-void RunLoopWithTimeout() {
-  base::RunLoop run_loop;
-  base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
-      FROM_HERE, run_loop.QuitClosure(),
-      base::TimeDelta::FromMilliseconds(200));
-  run_loop.Run();
-}
-
-// Used by QuicCryptoServerConfig to provide server credentials, returning a
-// canned response equal to |success|.
-class FakeProofSource : public net::ProofSource {
- public:
-  explicit FakeProofSource(bool success) : success_(success) {}
-
-  // ProofSource override.
-  void GetProof(const QuicSocketAddress& server_ip,
-                const std::string& hostname,
-                const std::string& server_config,
-                net::QuicVersion quic_version,
-                QuicStringPiece chlo_hash,
-                const net::QuicTagVector& connection_options,
-                std::unique_ptr<Callback> callback) override {
-    QuicReferenceCountedPointer<net::ProofSource::Chain> chain;
-    net::QuicCryptoProof proof;
-    if (success_) {
-      std::vector<std::string> certs;
-      certs.push_back("Required to establish handshake");
-      chain = new ProofSource::Chain(certs);
-      proof.signature = "Signature";
-      proof.leaf_cert_scts = "Time";
-    }
-    callback->Run(success_, chain, proof, nullptr /* details */);
-  }
-
- private:
-  // Whether or not obtaining proof source succeeds.
-  bool success_;
-};
-
-// Used by QuicCryptoClientConfig to verify server credentials, returning a
-// canned response of QUIC_SUCCESS if |success| is true.
-class FakeProofVerifier : public net::ProofVerifier {
- public:
-  explicit FakeProofVerifier(bool success) : success_(success) {}
-
-  // ProofVerifier override
-  net::QuicAsyncStatus VerifyProof(
-      const std::string& hostname,
-      const uint16_t port,
-      const std::string& server_config,
-      net::QuicVersion quic_version,
-      QuicStringPiece chlo_hash,
-      const std::vector<std::string>& certs,
-      const std::string& cert_sct,
-      const std::string& signature,
-      const ProofVerifyContext* context,
-      std::string* error_details,
-      std::unique_ptr<net::ProofVerifyDetails>* verify_details,
-      std::unique_ptr<net::ProofVerifierCallback> callback) override {
-    return success_ ? net::QUIC_SUCCESS : net::QUIC_FAILURE;
-  }
-
-  net::QuicAsyncStatus VerifyCertChain(
-      const std::string& hostname,
-      const std::vector<std::string>& certs,
-      const net::ProofVerifyContext* context,
-      std::string* error_details,
-      std::unique_ptr<net::ProofVerifyDetails>* details,
-      std::unique_ptr<net::ProofVerifierCallback> callback) override {
-    LOG(INFO) << "VerifyProof() ignoring credentials and returning success";
-    return success_ ? net::QUIC_SUCCESS : net::QUIC_FAILURE;
-  }
-
- private:
-  // Whether or not proof verification succeeds.
-  bool success_;
-};
-
-// Used by the FakeTransportChannel.
-class FakeTransportChannelObserver {
- public:
-  // Called when the other peer is trying to send message.
-  virtual void OnTransportChannelReadPacket(const std::string& data) = 0;
-};
-
-// Simulate the P2P communication transport. Used by the
-// QuartcSessionInterface::Transport.
-class FakeTransportChannel {
- public:
-  void SetDestination(FakeTransportChannel* dest) {
-    if (!dest_) {
-      dest_ = dest;
-      dest_->SetDestination(this);
-    }
-  }
-
-  int SendPacket(const char* data, size_t len) {
-    // If the destination is not set.
-    if (!dest_) {
-      return -1;
-    }
-    if (async_) {
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE,
-          base::Bind(&FakeTransportChannel::send, base::Unretained(this),
-                     std::string(data, len)));
-    } else {
-      send(std::string(data, len));
-    }
-    return static_cast<int>(len);
-  }
-
-  void send(const std::string& data) {
-    DCHECK(dest_);
-    DCHECK(dest_->observer());
-    dest_->observer()->OnTransportChannelReadPacket(data);
-  }
-
-  FakeTransportChannelObserver* observer() { return observer_; }
-
-  void SetObserver(FakeTransportChannelObserver* observer) {
-    observer_ = observer;
-  }
-
-  void SetAsync(bool async) { async_ = async; }
-
- private:
-  // The writing destination of this channel.
-  FakeTransportChannel* dest_ = nullptr;
-  // The observer of this channel. Called when the received the data.
-  FakeTransportChannelObserver* observer_ = nullptr;
-  // If async, will send packets by "Post"-ing to message queue instead of
-  // synchronously "Send"-ing.
-  bool async_ = false;
-};
-
-// Used by the QuartcPacketWriter.
-class FakeTransport : public QuartcSessionInterface::PacketTransport {
- public:
-  FakeTransport(FakeTransportChannel* channel) : channel_(channel) {}
-
-  bool CanWrite() override { return true; }
-
-  int Write(const char* buffer, size_t buf_len) override {
-    DCHECK(channel_);
-    return channel_->SendPacket(buffer, buf_len);
-  }
-
- private:
-  FakeTransportChannel* channel_;
-};
-
-class FakeQuartcSessionDelegate : public QuartcSessionInterface::Delegate {
- public:
-  FakeQuartcSessionDelegate(QuartcStreamInterface::Delegate* stream_delegate)
-      : stream_delegate_(stream_delegate) {}
-  // Called when peers have established forward-secure encryption
-  void OnCryptoHandshakeComplete() override {
-    LOG(INFO) << "Crypto handshake complete!";
-  }
-  // Called when connection closes locally, or remotely by peer.
-  void OnConnectionClosed(int error_code, bool from_remote) override {
-    connected_ = false;
-  }
-  // Called when an incoming QUIC stream is created.
-  void OnIncomingStream(QuartcStreamInterface* quartc_stream) override {
-    last_incoming_stream_ = quartc_stream;
-    last_incoming_stream_->SetDelegate(stream_delegate_);
-  }
-
-  QuartcStreamInterface* incoming_stream() { return last_incoming_stream_; }
-
-  bool connected() { return connected_; }
-
- private:
-  QuartcStreamInterface* last_incoming_stream_;
-  bool connected_ = true;
-  QuartcStream::Delegate* stream_delegate_;
-};
-
-class FakeQuartcStreamDelegate : public QuartcStreamInterface::Delegate {
- public:
-  void OnReceived(QuartcStreamInterface* stream,
-                  const char* data,
-                  size_t size) override {
-    last_received_data_ = std::string(data, size);
-  }
-
-  void OnClose(QuartcStreamInterface* stream, int error_code) override {}
-
-  void OnBufferedAmountDecrease(QuartcStreamInterface* stream) override {}
-
-  std::string data() { return last_received_data_; }
-
- private:
-  std::string last_received_data_;
-};
-
-class QuartcSessionForTest : public QuartcSession,
-                             public FakeTransportChannelObserver {
- public:
-  QuartcSessionForTest(std::unique_ptr<QuicConnection> connection,
-                       const QuicConfig& config,
-                       const std::string& remote_fingerprint_value,
-                       Perspective perspective,
-                       QuicConnectionHelperInterface* helper)
-      : QuartcSession(std::move(connection),
-                      config,
-                      remote_fingerprint_value,
-                      perspective,
-                      helper) {
-    stream_delegate_.reset(new FakeQuartcStreamDelegate);
-    session_delegate_.reset(
-        new FakeQuartcSessionDelegate(stream_delegate_.get()));
-
-    SetDelegate(session_delegate_.get());
-  }
-
-  // QuartcPacketWriter override.
-  void OnTransportChannelReadPacket(const std::string& data) override {
-    OnTransportReceived(data.c_str(), data.length());
-  }
-
-  std::string data() { return stream_delegate_->data(); }
-
-  bool has_data() { return !data().empty(); }
-
-  FakeQuartcSessionDelegate* session_delegate() {
-    return session_delegate_.get();
-  }
-
-  FakeQuartcStreamDelegate* stream_delegate() { return stream_delegate_.get(); }
-
- private:
-  std::unique_ptr<FakeQuartcStreamDelegate> stream_delegate_;
-  std::unique_ptr<FakeQuartcSessionDelegate> session_delegate_;
-};
-
-class QuartcSessionTest : public ::testing::Test,
-                          public QuicConnectionHelperInterface {
- public:
-  ~QuartcSessionTest() override {
-    // Check if there is message left in the message queue so that it won't
-    // affect other tests.
-    RunLoopWithTimeout();
-  }
-
-  void Init() {
-    client_channel_.reset(new FakeTransportChannel);
-    server_channel_.reset(new FakeTransportChannel);
-    // Make the channel asynchronous so that two peer will not keep calling each
-    // other when they exchange information.
-    client_channel_->SetAsync(true);
-    client_channel_->SetDestination(server_channel_.get());
-
-    client_transport_.reset(new FakeTransport(client_channel_.get()));
-    server_transport_.reset(new FakeTransport(server_channel_.get()));
-
-    client_writer_.reset(
-        new QuartcPacketWriter(client_transport_.get(), kDefaultMaxPacketSize));
-    server_writer_.reset(
-        new QuartcPacketWriter(server_transport_.get(), kDefaultMaxPacketSize));
-  }
-
-  // The parameters are used to control whether the handshake will success or
-  // not.
-  void CreateClientAndServerSessions(bool client_handshake_success = true,
-                                     bool server_handshake_success = true) {
-    Init();
-    client_peer_ = CreateSession(Perspective::IS_CLIENT);
-    server_peer_ = CreateSession(Perspective::IS_SERVER);
-
-    client_channel_->SetObserver(client_peer_.get());
-    server_channel_->SetObserver(server_peer_.get());
-
-    client_peer_->SetClientCryptoConfig(
-        new QuicCryptoClientConfig(std::unique_ptr<ProofVerifier>(
-            new FakeProofVerifier(client_handshake_success))));
-
-    QuicCryptoServerConfig* server_config = new QuicCryptoServerConfig(
-        "TESTING", QuicRandom::GetInstance(),
-        std::unique_ptr<FakeProofSource>(
-            new FakeProofSource(server_handshake_success)));
-    // Provide server with serialized config string to prove ownership.
-    QuicCryptoServerConfig::ConfigOptions options;
-    std::unique_ptr<QuicServerConfigProtobuf> primary_config(
-        server_config->GenerateConfig(QuicRandom::GetInstance(), &clock_,
-                                      options));
-    std::unique_ptr<CryptoHandshakeMessage> message(
-        server_config->AddConfig(std::move(primary_config), clock_.WallNow()));
-
-    server_peer_->SetServerCryptoConfig(server_config);
-  }
-
-  std::unique_ptr<QuartcSessionForTest> CreateSession(Perspective perspective) {
-    std::unique_ptr<QuicConnection> quic_connection =
-        CreateConnection(perspective);
-    std::string remote_fingerprint_value = "value";
-    QuicConfig config;
-    return std::unique_ptr<QuartcSessionForTest>(
-        new QuartcSessionForTest(std::move(quic_connection), config,
-                                 remote_fingerprint_value, perspective, this));
-  }
-
-  std::unique_ptr<QuicConnection> CreateConnection(Perspective perspective) {
-    QuartcPacketWriter* writer = perspective == Perspective::IS_CLIENT
-                                     ? client_writer_.get()
-                                     : server_writer_.get();
-    QuicIpAddress ip;
-    ip.FromString("0.0.0.0");
-    bool owns_writer = false;
-    alarm_factory_.reset(new QuartcAlarmFactory(
-        base::ThreadTaskRunnerHandle::Get().get(), GetClock()));
-    return std::unique_ptr<QuicConnection>(new QuicConnection(
-        0, QuicSocketAddress(ip, 0), this /*QuicConnectionHelperInterface*/,
-        alarm_factory_.get(), writer, owns_writer, perspective,
-        AllSupportedVersions()));
-  }
-  void StartHandshake() {
-    server_peer_->StartCryptoHandshake();
-    client_peer_->StartCryptoHandshake();
-    RunLoopWithTimeout();
-  }
-
-  // Test handshake establishment and sending/receiving of data for two
-  // directions.
-  void TestStreamConnection() {
-    ASSERT_TRUE(server_peer_->IsCryptoHandshakeConfirmed() &&
-                client_peer_->IsCryptoHandshakeConfirmed());
-    ASSERT_TRUE(server_peer_->IsEncryptionEstablished());
-    ASSERT_TRUE(client_peer_->IsEncryptionEstablished());
-
-    uint8_t server_key[kOutputKeyLength];
-    uint8_t client_key[kOutputKeyLength];
-    bool use_context = true;
-    bool server_success = server_peer_->ExportKeyingMaterial(
-        kExporterLabel, kExporterContext, kExporterContextLen, use_context,
-        server_key, kOutputKeyLength);
-    ASSERT_TRUE(server_success);
-    bool client_success = client_peer_->ExportKeyingMaterial(
-        kExporterLabel, kExporterContext, kExporterContextLen, use_context,
-        client_key, kOutputKeyLength);
-    ASSERT_TRUE(client_success);
-    EXPECT_EQ(0, memcmp(server_key, client_key, sizeof(server_key)));
-
-    // Now we can establish encrypted outgoing stream.
-    QuartcStreamInterface* outgoing_stream =
-        server_peer_->CreateOutgoingStream(kDefaultStreamParam);
-    ASSERT_NE(nullptr, outgoing_stream);
-    EXPECT_TRUE(server_peer_->HasOpenDynamicStreams());
-
-    outgoing_stream->SetDelegate(server_peer_->stream_delegate());
-
-    // Send a test message from peer 1 to peer 2.
-    const char kTestMessage[] = "Hello";
-    outgoing_stream->Write(kTestMessage, strlen(kTestMessage),
-                           kDefaultWriteParam);
-    RunLoopWithTimeout();
-
-    // Wait for peer 2 to receive messages.
-    ASSERT_TRUE(client_peer_->has_data());
-
-    QuartcStreamInterface* incoming =
-        client_peer_->session_delegate()->incoming_stream();
-    ASSERT_TRUE(incoming);
-    EXPECT_TRUE(client_peer_->HasOpenDynamicStreams());
-
-    EXPECT_EQ(client_peer_->data(), kTestMessage);
-    // Send a test message from peer 2 to peer 1.
-    const char kTestResponse[] = "Response";
-    incoming->Write(kTestResponse, strlen(kTestResponse), kDefaultWriteParam);
-    RunLoopWithTimeout();
-    // Wait for peer 1 to receive messages.
-    ASSERT_TRUE(server_peer_->has_data());
-
-    EXPECT_EQ(server_peer_->data(), kTestResponse);
-  }
-
-  // Test that client and server are not connected after handshake failure.
-  void TestDisconnectAfterFailedHandshake() {
-    EXPECT_TRUE(!client_peer_->session_delegate()->connected());
-    EXPECT_TRUE(!server_peer_->session_delegate()->connected());
-
-    EXPECT_FALSE(client_peer_->IsEncryptionEstablished());
-    EXPECT_FALSE(client_peer_->IsCryptoHandshakeConfirmed());
-
-    EXPECT_FALSE(server_peer_->IsEncryptionEstablished());
-    EXPECT_FALSE(server_peer_->IsCryptoHandshakeConfirmed());
-  }
-
-  const QuicClock* GetClock() const override { return &clock_; }
-
-  QuicRandom* GetRandomGenerator() override {
-    return QuicRandom::GetInstance();
-  }
-
-  QuicBufferAllocator* GetBufferAllocator() override {
-    return &buffer_allocator_;
-  }
-
- protected:
-  std::unique_ptr<QuicAlarmFactory> alarm_factory_;
-  SimpleBufferAllocator buffer_allocator_;
-  QuicChromiumClock clock_;
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
-
-  std::unique_ptr<FakeTransportChannel> client_channel_;
-  std::unique_ptr<FakeTransportChannel> server_channel_;
-  std::unique_ptr<FakeTransport> client_transport_;
-  std::unique_ptr<FakeTransport> server_transport_;
-  std::unique_ptr<QuartcPacketWriter> client_writer_;
-  std::unique_ptr<QuartcPacketWriter> server_writer_;
-  std::unique_ptr<QuartcSessionForTest> client_peer_;
-  std::unique_ptr<QuartcSessionForTest> server_peer_;
-};
-
-TEST_F(QuartcSessionTest, StreamConnection) {
-  CreateClientAndServerSessions();
-  StartHandshake();
-  TestStreamConnection();
-}
-
-TEST_F(QuartcSessionTest, ClientRejection) {
-  CreateClientAndServerSessions(false /*client_handshake_success*/,
-                                true /*server_handshake_success*/);
-  StartHandshake();
-  TestDisconnectAfterFailedHandshake();
-}
-
-TEST_F(QuartcSessionTest, ServerRejection) {
-  CreateClientAndServerSessions(true /*client_handshake_success*/,
-                                false /*server_handshake_success*/);
-  StartHandshake();
-  TestDisconnectAfterFailedHandshake();
-}
-
-// Test that data streams are not created before handshake.
-TEST_F(QuartcSessionTest, CannotCreateDataStreamBeforeHandshake) {
-  CreateClientAndServerSessions();
-  EXPECT_EQ(nullptr, server_peer_->CreateOutgoingStream(kDefaultStreamParam));
-  EXPECT_EQ(nullptr, client_peer_->CreateOutgoingStream(kDefaultStreamParam));
-}
-
-TEST_F(QuartcSessionTest, CloseQuartcStream) {
-  CreateClientAndServerSessions();
-  StartHandshake();
-  ASSERT_TRUE(client_peer_->IsCryptoHandshakeConfirmed() &&
-              server_peer_->IsCryptoHandshakeConfirmed());
-  QuartcStreamInterface* stream =
-      client_peer_->CreateOutgoingStream(kDefaultStreamParam);
-  ASSERT_NE(nullptr, stream);
-
-  uint32_t id = stream->stream_id();
-  EXPECT_FALSE(client_peer_->IsClosedStream(id));
-  stream->SetDelegate(client_peer_->stream_delegate());
-  stream->Close();
-  RunLoopWithTimeout();
-  EXPECT_TRUE(client_peer_->IsClosedStream(id));
-}
-
-}  // namespace
-}  // namespace test
-}  // namespace net
diff --git a/src/net/quic/quartc/quartc_stream.cc b/src/net/quic/quartc/quartc_stream.cc
index 620b193..932f14d 100644
--- a/src/net/quic/quartc/quartc_stream.cc
+++ b/src/net/quic/quartc/quartc_stream.cc
@@ -1,8 +1,9 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
 #include "net/quic/quartc/quartc_stream.h"
+
 #include "net/quic/platform/api/quic_string_piece.h"
 
 namespace net {
diff --git a/src/net/quic/quartc/quartc_stream.h b/src/net/quic/quartc/quartc_stream.h
index 95c185b..1883451 100644
--- a/src/net/quic/quartc/quartc_stream.h
+++ b/src/net/quic/quartc/quartc_stream.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -7,14 +7,12 @@
 
 #include "net/quic/core/quic_session.h"
 #include "net/quic/core/quic_stream.h"
-#include "net/quic/platform/api/quic_export.h"
 #include "net/quic/quartc/quartc_stream_interface.h"
 
 namespace net {
 
 // Implements a QuartcStreamInterface using a QuicStream.
-class QUIC_EXPORT_PRIVATE QuartcStream : public QuicStream,
-                                         public QuartcStreamInterface {
+class QuartcStream : public QuicStream, public QuartcStreamInterface {
  public:
   QuartcStream(QuicStreamId id, QuicSession* session);
 
diff --git a/src/net/quic/quartc/quartc_stream_interface.h b/src/net/quic/quartc/quartc_stream_interface.h
index 831abb5..25e928e 100644
--- a/src/net/quic/quartc/quartc_stream_interface.h
+++ b/src/net/quic/quartc/quartc_stream_interface.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -8,15 +8,13 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "net/quic/platform/api/quic_export.h"
-
 namespace net {
 
 // Sends and receives data with a particular QUIC stream ID, reliably and
 // in-order. To send/receive data out of order, use separate streams. To
 // send/receive unreliably, close a stream after reliability is no longer
 // needed.
-class QUIC_EXPORT_PRIVATE QuartcStreamInterface {
+class QuartcStreamInterface {
  public:
   virtual ~QuartcStreamInterface() {}
 
diff --git a/src/net/quic/quartc/quartc_stream_test.cc b/src/net/quic/quartc/quartc_stream_test.cc
deleted file mode 100644
index 0f6f041..0000000
--- a/src/net/quic/quartc/quartc_stream_test.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/quic/quartc/quartc_stream.h"
-
-#include "base/threading/thread_task_runner_handle.h"
-#include "net/quic/core/crypto/quic_random.h"
-#include "net/quic/core/quic_session.h"
-#include "net/quic/core/quic_simple_buffer_allocator.h"
-#include "net/quic/platform/impl/quic_chromium_clock.h"
-#include "net/quic/quartc/quartc_alarm_factory.h"
-#include "net/quic/quartc/quartc_stream_interface.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-namespace test {
-namespace {
-
-static const SpdyPriority kDefaultPriority = 3;
-static const QuicStreamId kStreamId = 5;
-static const QuartcStreamInterface::WriteParameters kDefaultParam;
-
-// MockQuicSession that does not create streams and writes data from
-// QuicStream to a string.
-class MockQuicSession : public QuicSession {
- public:
-  MockQuicSession(QuicConnection* connection,
-                  const QuicConfig& config,
-                  std::string* write_buffer)
-      : QuicSession(connection, nullptr /*visitor*/, config),
-        write_buffer_(write_buffer) {}
-
-  // Writes outgoing data from QuicStream to a string.
-  QuicConsumedData WritevData(
-      QuicStream* stream,
-      QuicStreamId id,
-      QuicIOVector iovector,
-      QuicStreamOffset offset,
-      StreamSendingState fin,
-      QuicReferenceCountedPointer<
-          QuicAckListenerInterface> /*ack_notifier_delegate*/) override {
-    if (!writable_) {
-      return QuicConsumedData(0, false);
-    }
-
-    const char* data = reinterpret_cast<const char*>(iovector.iov->iov_base);
-    size_t len = iovector.total_length;
-    write_buffer_->append(data, len);
-    return QuicConsumedData(len, fin != NO_FIN);
-  }
-
-  QuartcStream* CreateIncomingDynamicStream(QuicStreamId id) override {
-    return nullptr;
-  }
-
-  QuartcStream* CreateOutgoingDynamicStream(SpdyPriority priority) override {
-    return nullptr;
-  }
-
-  const QuicCryptoStream* GetCryptoStream() const override { return nullptr; }
-  QuicCryptoStream* GetMutableCryptoStream() override { return nullptr; }
-
-  // Called by QuicStream when they want to close stream.
-  void SendRstStream(QuicStreamId id,
-                     QuicRstStreamErrorCode error,
-                     QuicStreamOffset bytes_written) override {}
-
-  // Sets whether data is written to buffer, or else if this is write blocked.
-  void set_writable(bool writable) { writable_ = writable; }
-
-  // Tracks whether the stream is write blocked and its priority.
-  void RegisterReliableStream(QuicStreamId stream_id, SpdyPriority priority) {
-    write_blocked_streams()->RegisterStream(stream_id, priority);
-  }
-
-  // The session take ownership of the stream.
-  void ActivateReliableStream(std::unique_ptr<QuicStream> stream) {
-    ActivateStream(std::move(stream));
-  }
-
- private:
-  // Stores written data from ReliableQuicStreamAdapter.
-  std::string* write_buffer_;
-  // Whether data is written to write_buffer_.
-  bool writable_ = true;
-};
-
-// Packet writer that does nothing. This is required for QuicConnection but
-// isn't used for writing data.
-class DummyPacketWriter : public QuicPacketWriter {
- public:
-  DummyPacketWriter() {}
-
-  // QuicPacketWriter overrides.
-  WriteResult WritePacket(const char* buffer,
-                          size_t buf_len,
-                          const QuicIpAddress& self_address,
-                          const QuicSocketAddress& peer_address,
-                          PerPacketOptions* options) override {
-    return WriteResult(WRITE_STATUS_ERROR, 0);
-  }
-
-  bool IsWriteBlockedDataBuffered() const override { return false; }
-
-  bool IsWriteBlocked() const override { return false; };
-
-  void SetWritable() override {}
-
-  QuicByteCount GetMaxPacketSize(
-      const QuicSocketAddress& peer_address) const override {
-    return 0;
-  }
-};
-
-class MockQuartcStreamDelegate : public QuartcStreamInterface::Delegate {
- public:
-  MockQuartcStreamDelegate(int id, std::string& read_buffer)
-      : id_(id), read_buffer_(read_buffer) {}
-
-  void OnBufferedAmountDecrease(QuartcStreamInterface* stream) override {
-    queued_bytes_amount_ = stream->buffered_amount();
-  }
-
-  void OnReceived(QuartcStreamInterface* stream,
-                  const char* data,
-                  size_t size) override {
-    EXPECT_EQ(id_, stream->stream_id());
-    read_buffer_.append(data, size);
-  }
-
-  void OnClose(QuartcStreamInterface* stream, int error_code) override {
-    closed_ = true;
-  }
-
-  bool closed() { return closed_; }
-
-  int queued_bytes_amount() { return queued_bytes_amount_; }
-
- protected:
-  uint32_t id_;
-  // Data read by the QuicStream.
-  std::string& read_buffer_;
-  // Whether the QuicStream is closed.
-  bool closed_ = false;
-  int queued_bytes_amount_ = -1;
-};
-
-class QuartcStreamTest : public ::testing::Test,
-                         public QuicConnectionHelperInterface {
- public:
-  void CreateReliableQuicStream() {
-    // Arbitrary values for QuicConnection.
-    Perspective perspective = Perspective::IS_SERVER;
-    QuicIpAddress ip;
-    ip.FromString("0.0.0.0");
-    bool owns_writer = true;
-    alarm_factory_.reset(new QuartcAlarmFactory(
-        base::ThreadTaskRunnerHandle::Get().get(), GetClock()));
-
-    connection_.reset(new QuicConnection(
-        0, QuicSocketAddress(ip, 0), this /*QuicConnectionHelperInterface*/,
-        alarm_factory_.get(), new DummyPacketWriter(), owns_writer, perspective,
-        AllSupportedVersions()));
-
-    session_.reset(
-        new MockQuicSession(connection_.get(), QuicConfig(), &write_buffer_));
-    mock_stream_delegate_.reset(
-        new MockQuartcStreamDelegate(kStreamId, read_buffer_));
-    stream_ = new QuartcStream(kStreamId, session_.get());
-    stream_->SetDelegate(mock_stream_delegate_.get());
-    session_->RegisterReliableStream(stream_->stream_id(), kDefaultPriority);
-    session_->ActivateReliableStream(std::unique_ptr<QuartcStream>(stream_));
-  }
-
-  const QuicClock* GetClock() const override { return &clock_; }
-
-  QuicRandom* GetRandomGenerator() override {
-    return QuicRandom::GetInstance();
-  }
-
-  QuicBufferAllocator* GetBufferAllocator() override {
-    return &buffer_allocator_;
-  }
-
- protected:
-  // The QuicSession will take the ownership.
-  QuartcStream* stream_;
-  std::unique_ptr<MockQuartcStreamDelegate> mock_stream_delegate_;
-  std::unique_ptr<MockQuicSession> session_;
-  // Data written by the ReliableQuicStreamAdapterTest.
-  std::string write_buffer_;
-  // Data read by the ReliableQuicStreamAdapterTest.
-  std::string read_buffer_;
-  std::unique_ptr<QuartcAlarmFactory> alarm_factory_;
-  std::unique_ptr<QuicConnection> connection_;
-  // Used to implement the QuicConnectionHelperInterface.
-  SimpleBufferAllocator buffer_allocator_;
-  QuicChromiumClock clock_;
-};
-
-// Write an entire string.
-TEST_F(QuartcStreamTest, WriteDataWhole) {
-  CreateReliableQuicStream();
-  stream_->Write("Foo bar", 7, kDefaultParam);
-  EXPECT_EQ("Foo bar", write_buffer_);
-}
-
-// Write part of a string.
-TEST_F(QuartcStreamTest, WriteDataPartial) {
-  CreateReliableQuicStream();
-  stream_->Write("Foo bar", 5, kDefaultParam);
-  EXPECT_EQ("Foo b", write_buffer_);
-}
-
-// Test that strings are buffered correctly.
-TEST_F(QuartcStreamTest, BufferData) {
-  CreateReliableQuicStream();
-
-  session_->set_writable(false);
-  stream_->Write("Foo bar", 7, kDefaultParam);
-  // The data will be buffered.
-  EXPECT_EQ(0ul, write_buffer_.size());
-  EXPECT_TRUE(stream_->HasBufferedData());
-  EXPECT_EQ(-1, mock_stream_delegate_->queued_bytes_amount());
-  // The session is writable and the buffered data amount will change.
-  session_->set_writable(true);
-  stream_->OnCanWrite();
-  EXPECT_EQ(0, mock_stream_delegate_->queued_bytes_amount());
-  EXPECT_FALSE(stream_->HasBufferedData());
-  EXPECT_EQ("Foo bar", write_buffer_);
-
-  stream_->Write("xyzzy", 5, kDefaultParam);
-  EXPECT_EQ("Foo barxyzzy", write_buffer_);
-}
-
-// Read an entire string.
-TEST_F(QuartcStreamTest, ReadDataWhole) {
-  CreateReliableQuicStream();
-  QuicStreamFrame frame(kStreamId, false, 0, "Hello, World!");
-  stream_->OnStreamFrame(frame);
-
-  EXPECT_EQ("Hello, World!", read_buffer_);
-}
-
-// Read part of a string.
-TEST_F(QuartcStreamTest, ReadDataPartial) {
-  CreateReliableQuicStream();
-  QuicStreamFrame frame(kStreamId, false, 0, "Hello, World!");
-  frame.data_length = 5;
-  stream_->OnStreamFrame(frame);
-
-  EXPECT_EQ("Hello", read_buffer_);
-}
-
-// Test that closing the stream results in a callback.
-TEST_F(QuartcStreamTest, CloseStream) {
-  CreateReliableQuicStream();
-  EXPECT_FALSE(mock_stream_delegate_->closed());
-  stream_->OnClose();
-  EXPECT_TRUE(mock_stream_delegate_->closed());
-}
-
-}  // namespace
-}  // namespace test
-}  // namespace net
diff --git a/src/net/quic/quartc/quartc_task_runner_interface.h b/src/net/quic/quartc/quartc_task_runner_interface.h
index da9cd0b..b2d84fa 100644
--- a/src/net/quic/quartc/quartc_task_runner_interface.h
+++ b/src/net/quic/quartc/quartc_task_runner_interface.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Copyright (c) 2017 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
diff --git a/src/net/quic/test_tools/crypto_test_utils.cc b/src/net/quic/test_tools/crypto_test_utils.cc
index 08b2949..7f62005 100644
--- a/src/net/quic/test_tools/crypto_test_utils.cc
+++ b/src/net/quic/test_tools/crypto_test_utils.cc
@@ -22,6 +22,7 @@
 #include "net/quic/platform/api/quic_clock.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
 #include "net/quic/test_tools/quic_framer_peer.h"
diff --git a/src/net/quic/test_tools/crypto_test_utils_test.cc b/src/net/quic/test_tools/crypto_test_utils_test.cc
index 77cc302..cd27d08 100644
--- a/src/net/quic/test_tools/crypto_test_utils_test.cc
+++ b/src/net/quic/test_tools/crypto_test_utils_test.cc
@@ -6,11 +6,10 @@
 
 #include "net/quic/core/crypto/crypto_server_config_protobuf.h"
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/test/gtest_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -109,6 +108,8 @@
       result_;
 };
 
+class CryptoTestUtilsTest : public QuicTest {};
+
 TEST(CryptoTestUtilsTest, TestGenerateFullCHLO) {
   MockClock clock;
   QuicCryptoServerConfig crypto_config(
diff --git a/src/net/quic/test_tools/quic_crypto_server_config_peer.cc b/src/net/quic/test_tools/quic_crypto_server_config_peer.cc
index 8bf1d5b..275c131 100644
--- a/src/net/quic/test_tools/quic_crypto_server_config_peer.cc
+++ b/src/net/quic/test_tools/quic_crypto_server_config_peer.cc
@@ -7,7 +7,6 @@
 #include "net/quic/test_tools/mock_clock.h"
 #include "net/quic/test_tools/mock_random.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
diff --git a/src/net/quic/test_tools/quic_stream_sequencer_buffer_peer.cc b/src/net/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
index e521c5e..83602be 100644
--- a/src/net/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
+++ b/src/net/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
@@ -6,6 +6,7 @@
 
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/test/gtest_util.h"
 
 typedef net::QuicStreamSequencerBuffer::BufferBlock BufferBlock;
diff --git a/src/net/quic/test_tools/quic_test_utils.cc b/src/net/quic/test_tools/quic_test_utils.cc
index 930fd26..613c188 100644
--- a/src/net/quic/test_tools/quic_test_utils.cc
+++ b/src/net/quic/test_tools/quic_test_utils.cc
@@ -82,21 +82,6 @@
                         header.public_header.packet_number_length);
 }
 
-QuicFlagSaver::QuicFlagSaver() {
-#define QUIC_FLAG(type, flag, value)                                 \
-  CHECK_EQ(value, GetQuicFlag(flag))                                 \
-      << "Flag set to an unexpected value.  A prior test is likely " \
-      << "setting a flag without using a QuicFlagSaver";
-#include "net/quic/core/quic_flags_list.h"
-#undef QUIC_FLAG
-}
-
-QuicFlagSaver::~QuicFlagSaver() {
-#define QUIC_FLAG(type, flag, value) SetQuicFlag(&flag, value);
-#include "net/quic/core/quic_flags_list.h"
-#undef QUIC_FLAG
-}
-
 string Sha1Hash(QuicStringPiece data) {
   char buffer[SHA_DIGEST_LENGTH];
   SHA1(reinterpret_cast<const uint8_t*>(data.data()), data.size(),
diff --git a/src/net/quic/test_tools/quic_test_utils.h b/src/net/quic/test_tools/quic_test_utils.h
index f30363d..cbb63b8 100644
--- a/src/net/quic/test_tools/quic_test_utils.h
+++ b/src/net/quic/test_tools/quic_test_utils.h
@@ -179,14 +179,6 @@
                                    const QuicFrames& frames,
                                    size_t packet_size);
 
-// When constructed, checks that all QUIC flags have their correct default
-// values and when destructed, restores those values.
-class QuicFlagSaver {
- public:
-  QuicFlagSaver();
-  ~QuicFlagSaver();
-};
-
 // Compute SHA-1 hash of the supplied std::string.
 std::string Sha1Hash(QuicStringPiece data);
 
@@ -310,6 +302,7 @@
                void(const QuicVersion& version));
   MOCK_METHOD0(OnConfigNegotiated, void());
   MOCK_METHOD0(PostProcessAfterData, void());
+  MOCK_METHOD0(OnAckNeedsRetransmittableFrame, void());
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockQuicConnectionVisitor);
diff --git a/src/net/quic/test_tools/quic_test_utils_test.cc b/src/net/quic/test_tools/quic_test_utils_test.cc
index d522c8f..18565f0 100644
--- a/src/net/quic/test_tools/quic_test_utils_test.cc
+++ b/src/net/quic/test_tools/quic_test_utils_test.cc
@@ -4,13 +4,15 @@
 
 #include "net/quic/test_tools/quic_test_utils.h"
 
+#include "net/quic/platform/api/quic_test.h"
 #include "testing/gtest/include/gtest/gtest-spi.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 
-TEST(QuicTestUtilsTest, BasicApproxEq) {
+class QuicTestUtilsTest : public QuicTest {};
+
+TEST_F(QuicTestUtilsTest, BasicApproxEq) {
   ExpectApproxEq(10, 10, 1e-6f);
   ExpectApproxEq(1000, 1001, 0.01f);
   EXPECT_NONFATAL_FAILURE(ExpectApproxEq(1000, 1100, 0.01f), "");
@@ -19,7 +21,7 @@
   EXPECT_NONFATAL_FAILURE(ExpectApproxEq(31, 64, 0.55f), "");
 }
 
-TEST(QuicTestUtilsTest, QuicTimeDelta) {
+TEST_F(QuicTestUtilsTest, QuicTimeDelta) {
   ExpectApproxEq(QuicTime::Delta::FromMicroseconds(1000),
                  QuicTime::Delta::FromMicroseconds(1003), 0.01f);
   EXPECT_NONFATAL_FAILURE(
@@ -28,7 +30,7 @@
       "");
 }
 
-TEST(QuicTestUtilsTest, QuicBandwidth) {
+TEST_F(QuicTestUtilsTest, QuicBandwidth) {
   ExpectApproxEq(QuicBandwidth::FromBytesPerSecond(1000),
                  QuicBandwidth::FromBitsPerSecond(8005), 0.01f);
   EXPECT_NONFATAL_FAILURE(
@@ -38,7 +40,7 @@
 }
 
 // Ensure that SimpleRandom does not change its output for a fixed seed.
-TEST(QuicTestUtilsTest, SimpleRandomStability) {
+TEST_F(QuicTestUtilsTest, SimpleRandomStability) {
   SimpleRandom rng;
   rng.set_seed(UINT64_C(0x1234567800010001));
   EXPECT_EQ(UINT64_C(14865409841904857791), rng.RandUint64());
diff --git a/src/net/quic/test_tools/simple_quic_framer.cc b/src/net/quic/test_tools/simple_quic_framer.cc
index cf2df6e..f216b8c 100644
--- a/src/net/quic/test_tools/simple_quic_framer.cc
+++ b/src/net/quic/test_tools/simple_quic_framer.cc
@@ -126,6 +126,9 @@
     return stop_waiting_frames_;
   }
   const std::vector<QuicPingFrame>& ping_frames() const { return ping_frames_; }
+  const std::vector<QuicWindowUpdateFrame>& window_update_frames() const {
+    return window_update_frames_;
+  }
   const std::vector<QuicPaddingFrame>& padding_frames() const {
     return padding_frames_;
   }
@@ -211,6 +214,11 @@
   return visitor_->ping_frames();
 }
 
+const std::vector<QuicWindowUpdateFrame>&
+SimpleQuicFramer::window_update_frames() const {
+  return visitor_->window_update_frames();
+}
+
 const std::vector<std::unique_ptr<QuicStreamFrame>>&
 SimpleQuicFramer::stream_frames() const {
   return visitor_->stream_frames();
diff --git a/src/net/quic/test_tools/simple_quic_framer.h b/src/net/quic/test_tools/simple_quic_framer.h
index e231bda..9e87523 100644
--- a/src/net/quic/test_tools/simple_quic_framer.h
+++ b/src/net/quic/test_tools/simple_quic_framer.h
@@ -38,6 +38,7 @@
   const std::vector<QuicConnectionCloseFrame>& connection_close_frames() const;
   const std::vector<QuicStopWaitingFrame>& stop_waiting_frames() const;
   const std::vector<QuicPingFrame>& ping_frames() const;
+  const std::vector<QuicWindowUpdateFrame>& window_update_frames() const;
   const std::vector<QuicGoAwayFrame>& goaway_frames() const;
   const std::vector<QuicRstStreamFrame>& rst_stream_frames() const;
   const std::vector<std::unique_ptr<QuicStreamFrame>>& stream_frames() const;
diff --git a/src/net/quic/test_tools/simulator/quic_endpoint.h b/src/net/quic/test_tools/simulator/quic_endpoint.h
index 6f4f30d..f3cbf4d 100644
--- a/src/net/quic/test_tools/simulator/quic_endpoint.h
+++ b/src/net/quic/test_tools/simulator/quic_endpoint.h
@@ -89,6 +89,7 @@
   void OnConnectionMigration(PeerAddressChangeType type) override {}
   void OnPathDegrading() override {}
   void PostProcessAfterData() override {}
+  void OnAckNeedsRetransmittableFrame() override {}
   // End QuicConnectionVisitorInterface implementation.
 
  private:
diff --git a/src/net/quic/test_tools/simulator/quic_endpoint_test.cc b/src/net/quic/test_tools/simulator/quic_endpoint_test.cc
index 5a13673..1253517 100644
--- a/src/net/quic/test_tools/simulator/quic_endpoint_test.cc
+++ b/src/net/quic/test_tools/simulator/quic_endpoint_test.cc
@@ -5,13 +5,12 @@
 #include "net/quic/test_tools/simulator/quic_endpoint.h"
 
 #include "net/quic/platform/api/quic_ptr_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_connection_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/simulator/simulator.h"
 #include "net/quic/test_tools/simulator/switch.h"
 
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using ::testing::_;
 using ::testing::NiceMock;
@@ -29,7 +28,7 @@
 
 // A simple test harness where all hosts are connected to a switch with
 // identical links.
-class QuicEndpointTest : public ::testing::Test {
+class QuicEndpointTest : public QuicTest {
  public:
   QuicEndpointTest()
       : simulator_(), switch_(&simulator_, "Switch", 8, kDefaultBdp * 2) {}
diff --git a/src/net/quic/test_tools/simulator/simulator_test.cc b/src/net/quic/test_tools/simulator/simulator_test.cc
index d72330c..f1164e4 100644
--- a/src/net/quic/test_tools/simulator/simulator_test.cc
+++ b/src/net/quic/test_tools/simulator/simulator_test.cc
@@ -6,6 +6,7 @@
 
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/simulator/alarm_factory.h"
 #include "net/quic/test_tools/simulator/link.h"
@@ -13,8 +14,6 @@
 #include "net/quic/test_tools/simulator/queue.h"
 #include "net/quic/test_tools/simulator/switch.h"
 #include "net/quic/test_tools/simulator/traffic_policer.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::_;
@@ -47,8 +46,10 @@
   QuicTime::Delta period_;
 };
 
+class SimulatorTest : public QuicTest {};
+
 // Test that the basic event handling works.
-TEST(SimulatorTest, Counters) {
+TEST_F(SimulatorTest, Counters) {
   Simulator simulator;
   Counter fast_counter(&simulator, "fast_counter",
                        QuicTime::Delta::FromSeconds(3));
@@ -162,7 +163,7 @@
 
 // Saturate a symmetric link and verify that the number of packets sent and
 // received is correct.
-TEST(SimulatorTest, DirectLinkSaturation) {
+TEST_F(SimulatorTest, DirectLinkSaturation) {
   Simulator simulator;
   LinkSaturator saturator_a(&simulator, "Saturator A", 1000, "Saturator B");
   LinkSaturator saturator_b(&simulator, "Saturator B", 100, "Saturator A");
@@ -240,7 +241,7 @@
 };
 
 // Ensure the queue behaves correctly with accepting packets.
-TEST(SimulatorTest, Queue) {
+TEST_F(SimulatorTest, Queue) {
   Simulator simulator;
   Queue queue(&simulator, "Queue", 1000);
   PacketAcceptor acceptor;
@@ -283,7 +284,7 @@
 
 // Simulate a situation where the bottleneck link is 10 times slower than the
 // uplink, and they are separated by a queue.
-TEST(SimulatorTest, QueueBottleneck) {
+TEST_F(SimulatorTest, QueueBottleneck) {
   const QuicBandwidth local_bandwidth =
       QuicBandwidth::FromKBytesPerSecond(1000);
   const QuicBandwidth bottleneck_bandwidth = 0.1f * local_bandwidth;
@@ -320,7 +321,7 @@
 
 // Verify that the queue of exactly one packet allows the transmission to
 // actually go through.
-TEST(SimulatorTest, OnePacketQueue) {
+TEST_F(SimulatorTest, OnePacketQueue) {
   const QuicBandwidth local_bandwidth =
       QuicBandwidth::FromKBytesPerSecond(1000);
   const QuicBandwidth bottleneck_bandwidth = 0.1f * local_bandwidth;
@@ -356,7 +357,7 @@
 
 // Simulate a network where three endpoints are connected to a switch and they
 // are sending traffic in circle (1 -> 2, 2 -> 3, 3 -> 1).
-TEST(SimulatorTest, SwitchedNetwork) {
+TEST_F(SimulatorTest, SwitchedNetwork) {
   const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(10000);
   const QuicTime::Delta base_propagation_delay =
       QuicTime::Delta::FromMilliseconds(50);
@@ -481,7 +482,7 @@
 
 // Verifies that the alarms work correctly, even when they are repeatedly
 // toggled.
-TEST(SimulatorTest, Alarms) {
+TEST_F(SimulatorTest, Alarms) {
   Simulator simulator;
   QuicAlarmFactory* alarm_factory = simulator.GetAlarmFactory();
 
@@ -511,7 +512,7 @@
 }
 
 // Verifies that a cancelled alarm is never fired.
-TEST(SimulatorTest, AlarmCancelling) {
+TEST_F(SimulatorTest, AlarmCancelling) {
   Simulator simulator;
   QuicAlarmFactory* alarm_factory = simulator.GetAlarmFactory();
 
@@ -536,7 +537,7 @@
 }
 
 // Tests Simulator::RunUntilOrTimeout() interface.
-TEST(SimulatorTest, RunUntilOrTimeout) {
+TEST_F(SimulatorTest, RunUntilOrTimeout) {
   Simulator simulator;
   bool simulation_result;
 
@@ -558,7 +559,7 @@
 }
 
 // Tests Simulator::RunFor() interface.
-TEST(SimulatorTest, RunFor) {
+TEST_F(SimulatorTest, RunFor) {
   Simulator simulator;
 
   Counter counter(&simulator, "counter", QuicTime::Delta::FromSeconds(3));
@@ -577,7 +578,7 @@
 
 // Set up two trivial packet filters, one allowing any packets, and one dropping
 // all of them.
-TEST(SimulatorTest, PacketFilter) {
+TEST_F(SimulatorTest, PacketFilter) {
   const QuicBandwidth bandwidth =
       QuicBandwidth::FromBytesPerSecond(1024 * 1024);
   const QuicTime::Delta base_propagation_delay =
@@ -616,7 +617,7 @@
 
 // Set up a traffic policer in one direction that throttles at 25% of link
 // bandwidth, and put two link saturators at each endpoint.
-TEST(SimulatorTest, TrafficPolicer) {
+TEST_F(SimulatorTest, TrafficPolicer) {
   const QuicBandwidth bandwidth =
       QuicBandwidth::FromBytesPerSecond(1024 * 1024);
   const QuicTime::Delta base_propagation_delay =
@@ -674,7 +675,7 @@
 
 // Ensure that a larger burst is allowed when the policed saturator exits
 // quiescence.
-TEST(SimulatorTest, TrafficPolicerBurst) {
+TEST_F(SimulatorTest, TrafficPolicerBurst) {
   const QuicBandwidth bandwidth =
       QuicBandwidth::FromBytesPerSecond(1024 * 1024);
   const QuicTime::Delta base_propagation_delay =
@@ -729,7 +730,7 @@
 }
 
 // Test that the packet aggregation support in queues work.
-TEST(SimulatorTest, PacketAggregation) {
+TEST_F(SimulatorTest, PacketAggregation) {
   // Model network where the delays are dominated by transfer delay.
   const QuicBandwidth bandwidth = QuicBandwidth::FromBytesPerSecond(1000);
   const QuicTime::Delta base_propagation_delay =
diff --git a/src/net/reporting/reporting_context.cc b/src/net/reporting/reporting_context.cc
index 047a4a3..c6f01fd 100644
--- a/src/net/reporting/reporting_context.cc
+++ b/src/net/reporting/reporting_context.cc
@@ -15,7 +15,6 @@
 #include "base/time/time.h"
 #include "net/base/backoff_entry.h"
 #include "net/reporting/reporting_cache.h"
-#include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_delivery_agent.h"
 #include "net/reporting/reporting_endpoint_manager.h"
 #include "net/reporting/reporting_garbage_collector.h"
@@ -34,10 +33,8 @@
 class ReportingContextImpl : public ReportingContext {
  public:
   ReportingContextImpl(const ReportingPolicy& policy,
-                       std::unique_ptr<ReportingDelegate> delegate,
                        URLRequestContext* request_context)
       : ReportingContext(policy,
-                         std::move(delegate),
                          base::MakeUnique<base::DefaultClock>(),
                          base::MakeUnique<base::DefaultTickClock>(),
                          ReportingUploader::Create(request_context)) {}
@@ -48,29 +45,12 @@
 // static
 std::unique_ptr<ReportingContext> ReportingContext::Create(
     const ReportingPolicy& policy,
-    std::unique_ptr<ReportingDelegate> delegate,
     URLRequestContext* request_context) {
-  return base::MakeUnique<ReportingContextImpl>(policy, std::move(delegate),
-                                                request_context);
+  return base::MakeUnique<ReportingContextImpl>(policy, request_context);
 }
 
 ReportingContext::~ReportingContext() {}
 
-void ReportingContext::Initialize() {
-  DCHECK(!initialized_);
-
-  // This order isn't *critical*, but things will work better with it in this
-  // order: with the DeliveryAgent after the Persister, it can schedule delivery
-  // of persisted reports instead of waiting for a new one to be generated, and
-  // with the GarbageCollector in between, it won't bother scheduling delivery
-  // of reports that should be discarded instead.
-  persister_->Initialize();
-  garbage_collector_->Initialize();
-  delivery_agent_->Initialize();
-
-  initialized_ = true;
-}
-
 void ReportingContext::AddObserver(ReportingObserver* observer) {
   DCHECK(!observers_.HasObserver(observer));
   observers_.AddObserver(observer);
@@ -82,24 +62,18 @@
 }
 
 void ReportingContext::NotifyCacheUpdated() {
-  if (!initialized_)
-    return;
-
   for (auto& observer : observers_)
     observer.OnCacheUpdated();
 }
 
 ReportingContext::ReportingContext(const ReportingPolicy& policy,
-                                   std::unique_ptr<ReportingDelegate> delegate,
                                    std::unique_ptr<base::Clock> clock,
                                    std::unique_ptr<base::TickClock> tick_clock,
                                    std::unique_ptr<ReportingUploader> uploader)
     : policy_(policy),
-      delegate_(std::move(delegate)),
       clock_(std::move(clock)),
       tick_clock_(std::move(tick_clock)),
       uploader_(std::move(uploader)),
-      initialized_(false),
       cache_(base::MakeUnique<ReportingCache>(this)),
       endpoint_manager_(base::MakeUnique<ReportingEndpointManager>(this)),
       delivery_agent_(ReportingDeliveryAgent::Create(this)),
diff --git a/src/net/reporting/reporting_context.h b/src/net/reporting/reporting_context.h
index ca495a7..34e95d3 100644
--- a/src/net/reporting/reporting_context.h
+++ b/src/net/reporting/reporting_context.h
@@ -21,7 +21,6 @@
 namespace net {
 
 class ReportingCache;
-class ReportingDelegate;
 class ReportingDeliveryAgent;
 class ReportingEndpointManager;
 class ReportingGarbageCollector;
@@ -37,23 +36,11 @@
  public:
   static std::unique_ptr<ReportingContext> Create(
       const ReportingPolicy& policy,
-      std::unique_ptr<ReportingDelegate> delegate,
       URLRequestContext* request_context);
 
   ~ReportingContext();
 
-  // Initializes the ReportingContext. This may take a while (e.g. it may
-  // involve reloading state persisted to disk). Should be called only once.
-  //
-  // Components of the ReportingContext won't reference their dependencies (e.g.
-  // the Clock/TickClock or Timers inside the individual components) until
-  // during/after the call to Init.
-  void Initialize();
-
-  bool initialized() const { return initialized_; }
-
   const ReportingPolicy& policy() { return policy_; }
-  ReportingDelegate* delegate() { return delegate_.get(); }
 
   base::Clock* clock() { return clock_.get(); }
   base::TickClock* tick_clock() { return tick_clock_.get(); }
@@ -77,21 +64,18 @@
 
  protected:
   ReportingContext(const ReportingPolicy& policy,
-                   std::unique_ptr<ReportingDelegate> delegate,
                    std::unique_ptr<base::Clock> clock,
                    std::unique_ptr<base::TickClock> tick_clock,
                    std::unique_ptr<ReportingUploader> uploader);
 
  private:
   ReportingPolicy policy_;
-  std::unique_ptr<ReportingDelegate> delegate_;
 
   std::unique_ptr<base::Clock> clock_;
   std::unique_ptr<base::TickClock> tick_clock_;
   std::unique_ptr<ReportingUploader> uploader_;
 
   base::ObserverList<ReportingObserver, /* check_empty= */ true> observers_;
-  bool initialized_;
 
   std::unique_ptr<ReportingCache> cache_;
 
@@ -102,8 +86,7 @@
   // and |endpoint_manager_|.
   std::unique_ptr<ReportingDeliveryAgent> delivery_agent_;
 
-  // |persister_| must come after |delegate_|, |clock_|, |tick_clock_|, and
-  // |cache_|.
+  // |persister_| must come after |clock_|, |tick_clock_|, and |cache_|.
   std::unique_ptr<ReportingPersister> persister_;
 
   // |garbage_collector_| must come after |tick_clock_| and |cache_|.
diff --git a/src/net/reporting/reporting_delegate.cc b/src/net/reporting/reporting_delegate.cc
deleted file mode 100644
index cef5baf..0000000
--- a/src/net/reporting/reporting_delegate.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/reporting/reporting_delegate.h"
-
-namespace net {
-
-ReportingDelegate::~ReportingDelegate() {}
-
-ReportingDelegate::ReportingDelegate() {}
-
-}  // namespace net
diff --git a/src/net/reporting/reporting_delegate.h b/src/net/reporting/reporting_delegate.h
deleted file mode 100644
index 57d01ab..0000000
--- a/src/net/reporting/reporting_delegate.h
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_REPORTING_REPORTING_DELEGATE_H_
-#define NET_REPORTING_REPORTING_DELEGATE_H_
-
-#include <memory>
-
-#include "base/macros.h"
-#include "net/base/net_export.h"
-
-namespace base {
-class Value;
-}  // namespace base
-
-namespace net {
-
-// Delegate for things that the Reporting system can't do by itself, like
-// persisting data across embedder restarts.
-class NET_EXPORT ReportingDelegate {
- public:
-  virtual ~ReportingDelegate();
-
-  // Gets previously persisted data, if any is available. Returns a null pointer
-  // if no data is available. Can be called any number of times.
-  virtual std::unique_ptr<const base::Value> GetPersistedData() = 0;
-
-  // Sets data to be persisted across embedder restarts. Ideally, this data will
-  // be returned by any future calls to GetPersistedData() in this or future
-  // sessions (until newer data is persisted), but no guarantee is made, since
-  // the underlying persistence mechanism may or may not be reliable.
-  virtual void PersistData(
-      std::unique_ptr<const base::Value> persisted_data) = 0;
-
- protected:
-  ReportingDelegate();
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(ReportingDelegate);
-};
-
-}  // namespace net
-
-#endif  // NET_REPORTING_REPORTING_DELEGATE_H_
diff --git a/src/net/reporting/reporting_delivery_agent.cc b/src/net/reporting/reporting_delivery_agent.cc
index e614aa1..209ea8f 100644
--- a/src/net/reporting/reporting_delivery_agent.cc
+++ b/src/net/reporting/reporting_delivery_agent.cc
@@ -62,11 +62,6 @@
 
   ~ReportingDeliveryAgentImpl() override { context_->RemoveObserver(this); }
 
-  void Initialize() override {
-    if (CacheHasReports())
-      StartTimer();
-  }
-
   void SetTimerForTesting(std::unique_ptr<base::Timer> timer) override {
     DCHECK(!timer_->IsRunning());
     timer_ = std::move(timer);
diff --git a/src/net/reporting/reporting_delivery_agent.h b/src/net/reporting/reporting_delivery_agent.h
index e4ed370..d071b7e 100644
--- a/src/net/reporting/reporting_delivery_agent.h
+++ b/src/net/reporting/reporting_delivery_agent.h
@@ -55,11 +55,6 @@
 
   virtual ~ReportingDeliveryAgent();
 
-  // Initializes the DeliveryAgent, which schedules delivery (after the Policy's
-  // delivery_interval) for any previously-persisted reports that can still be
-  // delivered.
-  virtual void Initialize() = 0;
-
   // Replaces the internal Timer used for scheduling report delivery attempts
   // with a caller-specified one so that unittests can provide a MockTimer.
   virtual void SetTimerForTesting(std::unique_ptr<base::Timer> timer) = 0;
diff --git a/src/net/reporting/reporting_feature.cc b/src/net/reporting/reporting_feature.cc
new file mode 100644
index 0000000..9f4e28e
--- /dev/null
+++ b/src/net/reporting/reporting_feature.cc
@@ -0,0 +1,11 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/reporting/reporting_feature.h"
+
+namespace features {
+
+const base::Feature kReporting{"Reporting", base::FEATURE_DISABLED_BY_DEFAULT};
+
+}  // namespace features
diff --git a/src/net/reporting/reporting_feature.h b/src/net/reporting/reporting_feature.h
new file mode 100644
index 0000000..eae3cfb
--- /dev/null
+++ b/src/net/reporting/reporting_feature.h
@@ -0,0 +1,17 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_REPORTING_REPORTING_FEATURE_H_
+#define NET_REPORTING_REPORTING_FEATURE_H_
+
+#include "base/feature_list.h"
+#include "net/base/net_export.h"
+
+namespace features {
+
+extern const base::Feature NET_EXPORT kReporting;
+
+}  // namespace features
+
+#endif
diff --git a/src/net/reporting/reporting_garbage_collector.cc b/src/net/reporting/reporting_garbage_collector.cc
index 76dbf3a..a8cabe1 100644
--- a/src/net/reporting/reporting_garbage_collector.cc
+++ b/src/net/reporting/reporting_garbage_collector.cc
@@ -24,39 +24,31 @@
                                       public ReportingObserver {
  public:
   ReportingGarbageCollectorImpl(ReportingContext* context)
-      : context_(context), timer_(base::MakeUnique<base::OneShotTimer>()) {}
+      : context_(context), timer_(base::MakeUnique<base::OneShotTimer>()) {
+    context_->AddObserver(this);
+  }
 
   // ReportingGarbageCollector implementation:
 
   ~ReportingGarbageCollectorImpl() override {
-    DCHECK(context_->initialized());
     context_->RemoveObserver(this);
   }
 
-  void Initialize() override {
-    context_->AddObserver(this);
-    CollectGarbage();
-  }
-
   void SetTimerForTesting(std::unique_ptr<base::Timer> timer) override {
-    DCHECK(!context_->initialized());
     timer_ = std::move(timer);
   }
 
   // ReportingObserver implementation:
   void OnCacheUpdated() override {
-    DCHECK(context_->initialized());
-    if (!timer_->IsRunning())
-      StartTimer();
-  }
+    if (timer_->IsRunning())
+      return;
 
- private:
-  void StartTimer() {
     timer_->Start(FROM_HERE, context_->policy().garbage_collection_interval,
                   base::Bind(&ReportingGarbageCollectorImpl::CollectGarbage,
                              base::Unretained(this)));
   }
 
+ private:
   void CollectGarbage() {
     base::TimeTicks now = context_->tick_clock()->NowTicks();
     const ReportingPolicy& policy = context_->policy();
diff --git a/src/net/reporting/reporting_garbage_collector.h b/src/net/reporting/reporting_garbage_collector.h
index 17bd9ab..228f14e 100644
--- a/src/net/reporting/reporting_garbage_collector.h
+++ b/src/net/reporting/reporting_garbage_collector.h
@@ -28,10 +28,6 @@
 
   virtual ~ReportingGarbageCollector();
 
-  // Initializes the GarbageCollector, which performs an initial garbage
-  // collection pass over any data already in the Cache.
-  virtual void Initialize() = 0;
-
   // Replaces the internal Timer used for scheduling garbage collection passes
   // with a caller-specified one so that unittests can provide a MockTimer.
   virtual void SetTimerForTesting(std::unique_ptr<base::Timer> timer) = 0;
diff --git a/src/net/reporting/reporting_persister.cc b/src/net/reporting/reporting_persister.cc
index ec2a37b..4dcc032 100644
--- a/src/net/reporting/reporting_persister.cc
+++ b/src/net/reporting/reporting_persister.cc
@@ -16,7 +16,6 @@
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
 #include "net/reporting/reporting_context.h"
-#include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_observer.h"
 #include "net/reporting/reporting_policy.h"
 #include "net/reporting/reporting_report.h"
@@ -61,49 +60,15 @@
   return true;
 }
 
-class ReportingPersisterImpl : public ReportingPersister,
-                               public ReportingObserver {
+class ReportingPersisterImpl : public ReportingPersister {
  public:
-  ReportingPersisterImpl(ReportingContext* context)
-      : context_(context), timer_(base::MakeUnique<base::OneShotTimer>()) {}
+  ReportingPersisterImpl(ReportingContext* context) : context_(context) {}
 
   // ReportingPersister implementation:
 
-  ~ReportingPersisterImpl() override {
-    DCHECK(context_->initialized());
-    context_->RemoveObserver(this);
-  }
-
-  void Initialize() override {
-    std::unique_ptr<const base::Value> persisted_data =
-        context_->delegate()->GetPersistedData();
-    if (persisted_data)
-      Deserialize(*persisted_data);
-    context_->AddObserver(this);
-  }
-
-  void SetTimerForTesting(std::unique_ptr<base::Timer> timer) override {
-    DCHECK(!context_->initialized());
-    timer_ = std::move(timer);
-  }
-
-  // ReportingObserver implementation:
-
-  void OnCacheUpdated() override {
-    DCHECK(context_->initialized());
-    if (!timer_->IsRunning())
-      StartTimer();
-  }
+  ~ReportingPersisterImpl() override {}
 
  private:
-  void StartTimer() {
-    timer_->Start(
-        FROM_HERE, context_->policy().persistence_interval,
-        base::Bind(&ReportingPersisterImpl::Persist, base::Unretained(this)));
-  }
-
-  void Persist() { delegate()->PersistData(Serialize()); }
-
   std::string SerializeTicks(base::TimeTicks time_ticks) {
     base::Time time = time_ticks - tick_clock()->NowTicks() + clock()->Now();
     return base::Int64ToString(time.ToInternalValue());
@@ -336,13 +301,11 @@
   }
 
   const ReportingPolicy& policy() { return context_->policy(); }
-  ReportingDelegate* delegate() { return context_->delegate(); }
   base::Clock* clock() { return context_->clock(); }
   base::TickClock* tick_clock() { return context_->tick_clock(); }
   ReportingCache* cache() { return context_->cache(); }
 
   ReportingContext* context_;
-  std::unique_ptr<base::Timer> timer_;
 };
 
 }  // namespace
diff --git a/src/net/reporting/reporting_persister.h b/src/net/reporting/reporting_persister.h
index 27463a5..40414f0 100644
--- a/src/net/reporting/reporting_persister.h
+++ b/src/net/reporting/reporting_persister.h
@@ -7,32 +7,21 @@
 
 #include <memory>
 
+#include "base/callback.h"
 #include "net/base/net_export.h"
 
-namespace base {
-class Timer;
-}  // namespace base
-
 namespace net {
 
 class ReportingContext;
 
-// Periodically persists the state of the Reporting system to (reasonably)
-// stable storage using the methods provided by the ReportingDelegate.
+// Will persist the state of the Reporting system to (reasonably) stable
+// storage using an as-yet-unwritten persistence mechanism within //net.
 class NET_EXPORT ReportingPersister {
  public:
   // Creates a ReportingPersister. |context| must outlive the persister.
   static std::unique_ptr<ReportingPersister> Create(ReportingContext* context);
 
   virtual ~ReportingPersister();
-
-  // Initializes the Persister, which deserializes any previously-persisted data
-  // that is available through the Context's Delegate.
-  virtual void Initialize() = 0;
-
-  // Replaces the internal Timer used for scheduling writes to stable storage
-  // with a caller-specified one so that unittests can provide a MockTimer.
-  virtual void SetTimerForTesting(std::unique_ptr<base::Timer> timer) = 0;
 };
 
 }  // namespace net
diff --git a/src/net/reporting/reporting_persister_unittest.cc b/src/net/reporting/reporting_persister_unittest.cc
index ed109ed..1ac54c0 100644
--- a/src/net/reporting/reporting_persister_unittest.cc
+++ b/src/net/reporting/reporting_persister_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/time/time.h"
 #include "base/timer/mock_timer.h"
 #include "base/values.h"
+#include "net/base/test_completion_callback.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
 #include "net/reporting/reporting_policy.h"
@@ -30,7 +31,8 @@
   const std::string kType_ = "default";
 };
 
-TEST_F(ReportingPersisterTest, Test) {
+// Disabled because the Persister has no persistence layer to use yet.
+TEST_F(ReportingPersisterTest, DISABLED_Test) {
   ReportingPolicy policy;
   policy.persist_reports_across_restarts = true;
   policy.persist_clients_across_restarts = true;
@@ -49,12 +51,13 @@
                      kGroup_,
                      tick_clock()->NowTicks() + base::TimeDelta::FromDays(1));
 
-  EXPECT_TRUE(persistence_timer()->IsRunning());
-  persistence_timer()->Fire();
+  // TODO: Actually save data, once it's possible.
 
   SimulateRestart(/* delta= */ base::TimeDelta::FromHours(1),
                   /* delta_ticks= */ base::TimeDelta::FromHours(-3));
 
+  // TODO: Actually load data, once it's possible.
+
   std::vector<const ReportingReport*> reports;
   cache()->GetReports(&reports);
   ASSERT_EQ(1u, reports.size());
@@ -76,5 +79,7 @@
             client->expires);
 }
 
+// TODO(juliatuttle): Test asynchronous behavior.
+
 }  // namespace
 }  // namespace net
diff --git a/src/net/reporting/reporting_service.cc b/src/net/reporting/reporting_service.cc
index 6d2b215..0ba05c0 100644
--- a/src/net/reporting/reporting_service.cc
+++ b/src/net/reporting/reporting_service.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "base/callback.h"
+#include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/time/tick_clock.h"
@@ -14,8 +14,8 @@
 #include "base/values.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_context.h"
-#include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_header_parser.h"
+#include "net/reporting/reporting_persister.h"
 #include "url/gurl.h"
 
 namespace net {
@@ -25,11 +25,7 @@
 class ReportingServiceImpl : public ReportingService {
  public:
   ReportingServiceImpl(std::unique_ptr<ReportingContext> context)
-      : context_(std::move(context)) {
-    // TODO(juliatuttle): This can be slow, so it might be better to expose it
-    // as a separate method and call it separately from constructing everything.
-    context_->Initialize();
-  }
+      : context_(std::move(context)) {}
 
   ~ReportingServiceImpl() override {}
 
@@ -37,14 +33,12 @@
                    const std::string& group,
                    const std::string& type,
                    std::unique_ptr<const base::Value> body) override {
-    DCHECK(context_->initialized());
     context_->cache()->AddReport(url, group, type, std::move(body),
                                  context_->tick_clock()->NowTicks(), 0);
   }
 
   void ProcessHeader(const GURL& url,
                      const std::string& header_value) override {
-    DCHECK(context_->initialized());
     ReportingHeaderParser::ParseHeader(context_.get(), url, header_value);
   }
 
@@ -61,10 +55,9 @@
 // static
 std::unique_ptr<ReportingService> ReportingService::Create(
     const ReportingPolicy& policy,
-    URLRequestContext* request_context,
-    std::unique_ptr<ReportingDelegate> delegate) {
+    URLRequestContext* request_context) {
   return base::MakeUnique<ReportingServiceImpl>(
-      ReportingContext::Create(policy, std::move(delegate), request_context));
+      ReportingContext::Create(policy, request_context));
 }
 
 // static
diff --git a/src/net/reporting/reporting_service.h b/src/net/reporting/reporting_service.h
index c305410..831e071 100644
--- a/src/net/reporting/reporting_service.h
+++ b/src/net/reporting/reporting_service.h
@@ -21,7 +21,6 @@
 namespace net {
 
 class ReportingContext;
-class ReportingDelegate;
 struct ReportingPolicy;
 class URLRequestContext;
 
@@ -32,12 +31,10 @@
   virtual ~ReportingService();
 
   // Creates a ReportingService. |policy| will be copied. |request_context| must
-  // outlive the ReportingService. The ReportingService will take ownership of
-  // |delegate| and destroy it when the service is destroyed.
+  // outlive the ReportingService.
   static std::unique_ptr<ReportingService> Create(
       const ReportingPolicy& policy,
-      URLRequestContext* request_context,
-      std::unique_ptr<ReportingDelegate> delegate);
+      URLRequestContext* request_context);
 
   // Creates a ReportingService for testing purposes using an
   // already-constructed ReportingContext. The ReportingService will take
diff --git a/src/net/reporting/reporting_service_unittest.cc b/src/net/reporting/reporting_service_unittest.cc
index 20c8656..064700e 100644
--- a/src/net/reporting/reporting_service_unittest.cc
+++ b/src/net/reporting/reporting_service_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/values.h"
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_context.h"
-#include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_policy.h"
 #include "net/reporting/reporting_report.h"
 #include "net/reporting/reporting_service.h"
diff --git a/src/net/reporting/reporting_test_util.cc b/src/net/reporting/reporting_test_util.cc
index 74d0cb4..2a7d1e0 100644
--- a/src/net/reporting/reporting_test_util.cc
+++ b/src/net/reporting/reporting_test_util.cc
@@ -17,7 +17,6 @@
 #include "net/reporting/reporting_cache.h"
 #include "net/reporting/reporting_client.h"
 #include "net/reporting/reporting_context.h"
-#include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_delivery_agent.h"
 #include "net/reporting/reporting_garbage_collector.h"
 #include "net/reporting/reporting_persister.h"
@@ -91,20 +90,6 @@
   return nullptr;
 }
 
-TestReportingDelegate::TestReportingDelegate() {}
-TestReportingDelegate::~TestReportingDelegate() {}
-
-void TestReportingDelegate::PersistData(
-    std::unique_ptr<const base::Value> persisted_data) {
-  persisted_data_ = std::move(persisted_data);
-}
-
-std::unique_ptr<const base::Value> TestReportingDelegate::GetPersistedData() {
-  if (!persisted_data_)
-    return std::unique_ptr<const base::Value>();
-  return persisted_data_->CreateDeepCopy();
-}
-
 TestReportingUploader::PendingUpload::~PendingUpload() {}
 TestReportingUploader::PendingUpload::PendingUpload() {}
 
@@ -120,18 +105,14 @@
 
 TestReportingContext::TestReportingContext(const ReportingPolicy& policy)
     : ReportingContext(policy,
-                       base::MakeUnique<TestReportingDelegate>(),
                        base::MakeUnique<base::SimpleTestClock>(),
                        base::MakeUnique<base::SimpleTestTickClock>(),
                        base::MakeUnique<TestReportingUploader>()),
       delivery_timer_(new base::MockTimer(/* retain_user_task= */ false,
                                           /* is_repeating= */ false)),
-      persistence_timer_(new base::MockTimer(/* retain_user_task= */ false,
-                                             /* is_repeating= */ false)),
       garbage_collection_timer_(
           new base::MockTimer(/* retain_user_task= */ false,
                               /* is_repeating= */ false)) {
-  persister()->SetTimerForTesting(base::WrapUnique(persistence_timer_));
   garbage_collector()->SetTimerForTesting(
       base::WrapUnique(garbage_collection_timer_));
   delivery_agent()->SetTimerForTesting(base::WrapUnique(delivery_timer_));
@@ -139,7 +120,6 @@
 
 TestReportingContext::~TestReportingContext() {
   delivery_timer_ = nullptr;
-  persistence_timer_ = nullptr;
   garbage_collection_timer_ = nullptr;
 }
 
@@ -148,34 +128,27 @@
   ReportingPolicy policy;
   policy.endpoint_backoff_policy.jitter_factor = 0.0;
 
-  CreateAndInitializeContext(policy, std::unique_ptr<const base::Value>(),
-                             base::Time::Now(), base::TimeTicks::Now());
+  CreateContext(policy, base::Time::Now(), base::TimeTicks::Now());
 }
 
 ReportingTestBase::~ReportingTestBase() {}
 
 void ReportingTestBase::UsePolicy(const ReportingPolicy& new_policy) {
-  CreateAndInitializeContext(new_policy, delegate()->GetPersistedData(),
-                             clock()->Now(), tick_clock()->NowTicks());
+  CreateContext(new_policy, clock()->Now(), tick_clock()->NowTicks());
 }
 
 void ReportingTestBase::SimulateRestart(base::TimeDelta delta,
                                         base::TimeDelta delta_ticks) {
-  CreateAndInitializeContext(policy(), delegate()->GetPersistedData(),
-                             clock()->Now() + delta,
-                             tick_clock()->NowTicks() + delta_ticks);
+  CreateContext(policy(), clock()->Now() + delta,
+                tick_clock()->NowTicks() + delta_ticks);
 }
 
-void ReportingTestBase::CreateAndInitializeContext(
-    const ReportingPolicy& policy,
-    std::unique_ptr<const base::Value> persisted_data,
-    base::Time now,
-    base::TimeTicks now_ticks) {
+void ReportingTestBase::CreateContext(const ReportingPolicy& policy,
+                                      base::Time now,
+                                      base::TimeTicks now_ticks) {
   context_ = base::MakeUnique<TestReportingContext>(policy);
-  delegate()->PersistData(std::move(persisted_data));
   clock()->SetNow(now);
   tick_clock()->SetNowTicks(now_ticks);
-  context_->Initialize();
 }
 
 base::TimeTicks ReportingTestBase::yesterday() {
diff --git a/src/net/reporting/reporting_test_util.h b/src/net/reporting/reporting_test_util.h
index 2fa0d46..48b63d9 100644
--- a/src/net/reporting/reporting_test_util.h
+++ b/src/net/reporting/reporting_test_util.h
@@ -11,7 +11,6 @@
 
 #include "base/macros.h"
 #include "net/reporting/reporting_context.h"
-#include "net/reporting/reporting_delegate.h"
 #include "net/reporting/reporting_uploader.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -40,24 +39,6 @@
                                          const url::Origin& origin,
                                          const GURL& endpoint);
 
-// A simple implementation of ReportingDelegate that only persists data in RAM.
-class TestReportingDelegate : public ReportingDelegate {
- public:
-  TestReportingDelegate();
-
-  ~TestReportingDelegate() override;
-
-  // ReportingDelegate implementation:
-  std::unique_ptr<const base::Value> GetPersistedData() override;
-
-  void PersistData(std::unique_ptr<const base::Value> persisted_data) override;
-
- private:
-  std::unique_ptr<const base::Value> persisted_data_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestReportingDelegate);
-};
-
 // A test implementation of ReportingUploader that holds uploads for tests to
 // examine and complete with a specified outcome.
 class TestReportingUploader : public ReportingUploader {
@@ -95,15 +76,12 @@
 };
 
 // A test implementation of ReportingContext that uses test versions of
-// ReportingDelegate, Clock, TickClock, and ReportingUploader.
+// Clock, TickClock, Timer, and ReportingUploader.
 class TestReportingContext : public ReportingContext {
  public:
   TestReportingContext(const ReportingPolicy& policy);
   ~TestReportingContext();
 
-  TestReportingDelegate* test_delegate() {
-    return reinterpret_cast<TestReportingDelegate*>(delegate());
-  }
   base::SimpleTestClock* test_clock() {
     return reinterpret_cast<base::SimpleTestClock*>(clock());
   }
@@ -111,7 +89,6 @@
     return reinterpret_cast<base::SimpleTestTickClock*>(tick_clock());
   }
   base::MockTimer* test_delivery_timer() { return delivery_timer_; }
-  base::MockTimer* test_persistence_timer() { return persistence_timer_; }
   base::MockTimer* test_garbage_collection_timer() {
     return garbage_collection_timer_;
   }
@@ -124,7 +101,6 @@
   // here to preserve type:
 
   base::MockTimer* delivery_timer_;
-  base::MockTimer* persistence_timer_;
   base::MockTimer* garbage_collection_timer_;
 
   DISALLOW_COPY_AND_ASSIGN(TestReportingContext);
@@ -139,8 +115,7 @@
 
   void UsePolicy(const ReportingPolicy& policy);
 
-  // Simulates an embedder restart, preserving the ReportingPolicy and any data
-  // persisted via the TestReportingDelegate, but nothing else.
+  // Simulates an embedder restart, preserving the ReportingPolicy.
   //
   // Advances the Clock by |delta|, and the TickClock by |delta_ticks|. Both can
   // be zero or negative.
@@ -150,15 +125,11 @@
 
   const ReportingPolicy& policy() { return context_->policy(); }
 
-  TestReportingDelegate* delegate() { return context_->test_delegate(); }
   base::SimpleTestClock* clock() { return context_->test_clock(); }
   base::SimpleTestTickClock* tick_clock() {
     return context_->test_tick_clock();
   }
   base::MockTimer* delivery_timer() { return context_->test_delivery_timer(); }
-  base::MockTimer* persistence_timer() {
-    return context_->test_persistence_timer();
-  }
   base::MockTimer* garbage_collection_timer() {
     return context_->test_garbage_collection_timer();
   }
@@ -187,11 +158,9 @@
   }
 
  private:
-  void CreateAndInitializeContext(
-      const ReportingPolicy& policy,
-      std::unique_ptr<const base::Value> persisted_data,
-      base::Time now,
-      base::TimeTicks now_ticks);
+  void CreateContext(const ReportingPolicy& policy,
+                     base::Time now,
+                     base::TimeTicks now_ticks);
 
   std::unique_ptr<TestReportingContext> context_;
 
diff --git a/src/net/socket/socket_posix.cc b/src/net/socket/socket_posix.cc
index 6955aa2..5900a5c 100644
--- a/src/net/socket/socket_posix.cc
+++ b/src/net/socket/socket_posix.cc
@@ -98,6 +98,15 @@
 
 int SocketPosix::AdoptConnectedSocket(SocketDescriptor socket,
                                       const SockaddrStorage& address) {
+  int rv = AdoptUnconnectedSocket(socket);
+  if (rv != OK)
+    return rv;
+
+  SetPeerAddress(address);
+  return OK;
+}
+
+int SocketPosix::AdoptUnconnectedSocket(SocketDescriptor socket) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK_EQ(kInvalidSocket, socket_fd_);
 
@@ -109,7 +118,6 @@
     return rv;
   }
 
-  SetPeerAddress(address);
   return OK;
 }
 
diff --git a/src/net/socket/socket_posix.h b/src/net/socket/socket_posix.h
index 65a692e..04ef7f6 100644
--- a/src/net/socket/socket_posix.h
+++ b/src/net/socket/socket_posix.h
@@ -31,9 +31,17 @@
   // Opens a socket and returns net::OK if |address_family| is AF_INET, AF_INET6
   // or AF_UNIX. Otherwise, it does DCHECK() and returns a net error.
   int Open(int address_family);
-  // Takes ownership of |socket|.
+
+  // Takes ownership of |socket|, which is known to already be connected to the
+  // given peer address.
   int AdoptConnectedSocket(SocketDescriptor socket,
                            const SockaddrStorage& peer_address);
+  // Takes ownership of |socket|, which may or may not be open, bound, or
+  // listening. The caller must determine the state of the socket based on its
+  // provenance and act accordingly. The socket may have connections waiting
+  // to be accepted, but must not be actually connected.
+  int AdoptUnconnectedSocket(SocketDescriptor socket);
+
   // Releases ownership of |socket_fd_| to caller.
   SocketDescriptor ReleaseConnectedSocket();
 
diff --git a/src/net/socket/socket_test_util.cc b/src/net/socket/socket_test_util.cc
index 57ca977..839890b 100644
--- a/src/net/socket/socket_test_util.cc
+++ b/src/net/socket/socket_test_util.cc
@@ -1264,7 +1264,11 @@
   if (data_->cert_request_info) {
     cert_request_info->host_and_port =
         data_->cert_request_info->host_and_port;
-    cert_request_info->client_certs = data_->cert_request_info->client_certs;
+    cert_request_info->is_proxy = data_->cert_request_info->is_proxy;
+    cert_request_info->cert_authorities =
+        data_->cert_request_info->cert_authorities;
+    cert_request_info->cert_key_types =
+        data_->cert_request_info->cert_key_types;
   } else {
     cert_request_info->Reset();
   }
diff --git a/src/net/socket/ssl_client_socket_impl.cc b/src/net/socket/ssl_client_socket_impl.cc
index 9bbc41d..fe5aabd 100644
--- a/src/net/socket/ssl_client_socket_impl.cc
+++ b/src/net/socket/ssl_client_socket_impl.cc
@@ -944,10 +944,10 @@
   // (note that SHA256 and SHA384 only select legacy CBC ciphers).
   // Additionally disable HMAC-SHA1 ciphers in ECDSA. These are the remaining
   // CBC-mode ECDSA ciphers.
-  std::string command("ALL:!SHA256:!SHA384:!kDHE:!aPSK:!RC4:!ECDSA+SHA1");
+  std::string command("ALL:!SHA256:!SHA384:!aPSK:!ECDSA+SHA1");
 
   if (ssl_config_.require_ecdhe)
-    command.append(":!kRSA:!kDHE");
+    command.append(":!kRSA");
 
   // Remove any disabled ciphers.
   for (uint16_t id : ssl_config_.disabled_cipher_suites) {
@@ -958,13 +958,10 @@
     }
   }
 
-  int rv = SSL_set_cipher_list(ssl_.get(), command.c_str());
-  // If this fails (rv = 0) it means there are no ciphers enabled on this SSL.
-  // This will almost certainly result in the socket failing to complete the
-  // handshake at which point the appropriate error is bubbled up to the client.
-  LOG_IF(WARNING, rv != 1) << "SSL_set_cipher_list('" << command << "') "
-                                                                    "returned "
-                           << rv;
+  if (!SSL_set_strict_cipher_list(ssl_.get(), command.c_str())) {
+    LOG(ERROR) << "SSL_set_cipher_list('" << command << "') failed";
+    return ERR_UNEXPECTED;
+  }
 
   // TLS channel ids.
   if (IsChannelIDEnabled()) {
diff --git a/src/net/socket/ssl_server_socket_impl.cc b/src/net/socket/ssl_server_socket_impl.cc
index 9b3cfd3..9ad657b 100644
--- a/src/net/socket/ssl_server_socket_impl.cc
+++ b/src/net/socket/ssl_server_socket_impl.cc
@@ -14,6 +14,7 @@
 #include "net/base/net_errors.h"
 #include "net/cert/cert_verify_result.h"
 #include "net/cert/client_cert_verifier.h"
+#include "net/cert/x509_util.h"
 #include "net/cert/x509_util_openssl.h"
 #include "net/log/net_log_event_type.h"
 #include "net/log/net_log_with_source.h"
@@ -624,6 +625,8 @@
   uint8_t session_ctx_id = 0;
   SSL_CTX_set_session_id_context(ssl_ctx_.get(), &session_ctx_id,
                                  sizeof(session_ctx_id));
+  // Deduplicate all certificates minted from the SSL_CTX in memory.
+  SSL_CTX_set0_buffer_pool(ssl_ctx_.get(), x509_util::GetBufferPool());
 
   int verify_mode = 0;
   switch (ssl_server_config_.client_cert_type) {
@@ -643,26 +646,26 @@
 
   // Set certificate and private key.
   DCHECK(cert_->os_cert_handle());
-#if defined(USE_OPENSSL_CERTS)
+  DCHECK(key_->key());
+#if BUILDFLAG(USE_BYTE_CERTS)
+  // On success, SSL_CTX_set_chain_and_key acquires a reference to
+  // |cert_->os_cert_handle()| and |key_->key()|.
+  CRYPTO_BUFFER* cert_buffers[] = {cert_->os_cert_handle()};
+  CHECK(SSL_CTX_set_chain_and_key(ssl_ctx_.get(), cert_buffers,
+                                  arraysize(cert_buffers), key_->key(),
+                                  nullptr /* privkey_method */));
+#elif defined(USE_OPENSSL_CERTS)
   CHECK(SSL_CTX_use_certificate(ssl_ctx_.get(), cert_->os_cert_handle()));
+  CHECK(SSL_CTX_use_PrivateKey(ssl_ctx_.get(), key_->key()));
 #else
-  // Convert OSCertHandle to X509 structure.
   std::string der_string;
   CHECK(X509Certificate::GetDEREncoded(cert_->os_cert_handle(), &der_string));
-
-  const unsigned char* der_string_array =
-      reinterpret_cast<const unsigned char*>(der_string.data());
-
-  bssl::UniquePtr<X509> x509(
-      d2i_X509(NULL, &der_string_array, der_string.length()));
-  CHECK(x509);
-
-  // On success, SSL_CTX_use_certificate acquires a reference to |x509|.
-  CHECK(SSL_CTX_use_certificate(ssl_ctx_.get(), x509.get()));
-#endif  // USE_OPENSSL_CERTS
-
-  DCHECK(key_->key());
+  CHECK(SSL_CTX_use_certificate_ASN1(
+      ssl_ctx_.get(), der_string.length(),
+      reinterpret_cast<const unsigned char*>(der_string.data())));
+  // On success, SSL_CTX_use_PrivateKey acquires a reference to |key_->key()|.
   CHECK(SSL_CTX_use_PrivateKey(ssl_ctx_.get(), key_->key()));
+#endif  // USE_OPENSSL_CERTS && !USE_BYTE_CERTS
 
   DCHECK_LT(SSL3_VERSION, ssl_server_config_.version_min);
   DCHECK_LT(SSL3_VERSION, ssl_server_config_.version_max);
@@ -694,7 +697,7 @@
   std::string command("DEFAULT:!SHA256:!SHA384:!AESGCM+AES256:!aPSK");
 
   if (ssl_server_config_.require_ecdhe)
-    command.append(":!kRSA:!kDHE");
+    command.append(":!kRSA");
 
   // Remove any disabled ciphers.
   for (uint16_t id : ssl_server_config_.disabled_cipher_suites) {
@@ -705,12 +708,7 @@
     }
   }
 
-  int rv = SSL_CTX_set_cipher_list(ssl_ctx_.get(), command.c_str());
-  // If this fails (rv = 0) it means there are no ciphers enabled on this SSL.
-  // This will almost certainly result in the socket failing to complete the
-  // handshake at which point the appropriate error is bubbled up to the client.
-  LOG_IF(WARNING, rv != 1) << "SSL_set_cipher_list('" << command
-                           << "') returned " << rv;
+  CHECK(SSL_CTX_set_strict_cipher_list(ssl_ctx_.get(), command.c_str()));
 
   if (ssl_server_config_.client_cert_type !=
           SSLServerConfig::ClientCertType::NO_CLIENT_CERT &&
diff --git a/src/net/socket/tcp_server_socket.cc b/src/net/socket/tcp_server_socket.cc
index 22211cd..779a24d 100644
--- a/src/net/socket/tcp_server_socket.cc
+++ b/src/net/socket/tcp_server_socket.cc
@@ -10,6 +10,7 @@
 #include "base/bind_helpers.h"
 #include "base/logging.h"
 #include "net/base/net_errors.h"
+#include "net/socket/socket_descriptor.h"
 #include "net/socket/tcp_client_socket.h"
 
 namespace net {
@@ -17,6 +18,10 @@
 TCPServerSocket::TCPServerSocket(NetLog* net_log, const NetLogSource& source)
     : socket_(nullptr, net_log, source), pending_accept_(false) {}
 
+int TCPServerSocket::AdoptSocket(SocketDescriptor socket) {
+  return socket_.AdoptUnconnectedSocket(socket);
+}
+
 TCPServerSocket::~TCPServerSocket() {
 }
 
diff --git a/src/net/socket/tcp_server_socket.h b/src/net/socket/tcp_server_socket.h
index 3b4a961..58f3a44 100644
--- a/src/net/socket/tcp_server_socket.h
+++ b/src/net/socket/tcp_server_socket.h
@@ -11,6 +11,7 @@
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_export.h"
 #include "net/socket/server_socket.h"
+#include "net/socket/socket_descriptor.h"
 #include "net/socket/tcp_socket.h"
 
 namespace net {
@@ -24,6 +25,12 @@
   TCPServerSocket(NetLog* net_log, const NetLogSource& source);
   ~TCPServerSocket() override;
 
+  // Takes ownership of |socket|, which has been opened, but may or may not be
+  // bound or listening. The caller must determine this based on the provenance
+  // of the socket and act accordingly. The socket may have connections waiting
+  // to be accepted, but must not be actually connected.
+  int AdoptSocket(SocketDescriptor socket);
+
   // net::ServerSocket implementation.
   int Listen(const IPEndPoint& address, int backlog) override;
   int GetLocalAddress(IPEndPoint* address) const override;
diff --git a/src/net/socket/tcp_socket_posix.cc b/src/net/socket/tcp_socket_posix.cc
index 82f42a7..51e8b9c 100644
--- a/src/net/socket/tcp_socket_posix.cc
+++ b/src/net/socket/tcp_socket_posix.cc
@@ -175,7 +175,7 @@
   return rv;
 }
 
-int TCPSocketPosix::AdoptConnectedSocket(int socket_fd,
+int TCPSocketPosix::AdoptConnectedSocket(SocketDescriptor socket,
                                          const IPEndPoint& peer_address) {
   DCHECK(!socket_);
 
@@ -187,7 +187,17 @@
   }
 
   socket_.reset(new SocketPosix);
-  int rv = socket_->AdoptConnectedSocket(socket_fd, storage);
+  int rv = socket_->AdoptConnectedSocket(socket, storage);
+  if (rv != OK)
+    socket_.reset();
+  return rv;
+}
+
+int TCPSocketPosix::AdoptUnconnectedSocket(SocketDescriptor socket) {
+  DCHECK(!socket_);
+
+  socket_.reset(new SocketPosix);
+  int rv = socket_->AdoptUnconnectedSocket(socket);
   if (rv != OK)
     socket_.reset();
   return rv;
@@ -485,6 +495,12 @@
   }
 }
 
+SocketDescriptor TCPSocketPosix::ReleaseSocketDescriptorForTesting() {
+  SocketDescriptor socket_descriptor = socket_->ReleaseConnectedSocket();
+  socket_.reset();
+  return socket_descriptor;
+}
+
 void TCPSocketPosix::AcceptCompleted(
     std::unique_ptr<TCPSocketPosix>* tcp_socket,
     IPEndPoint* address,
diff --git a/src/net/socket/tcp_socket_posix.h b/src/net/socket/tcp_socket_posix.h
index 2805276..031dd8c 100644
--- a/src/net/socket/tcp_socket_posix.h
+++ b/src/net/socket/tcp_socket_posix.h
@@ -16,6 +16,7 @@
 #include "net/base/completion_callback.h"
 #include "net/base/net_export.h"
 #include "net/log/net_log_with_source.h"
+#include "net/socket/socket_descriptor.h"
 #include "net/socket/socket_performance_watcher.h"
 
 namespace base {
@@ -45,8 +46,16 @@
   // Returns a net error code.
   int Open(AddressFamily family);
 
-  // Takes ownership of |socket_fd|.
-  int AdoptConnectedSocket(int socket_fd, const IPEndPoint& peer_address);
+  // Takes ownership of |socket|, which is known to already be connected to the
+  // given peer address. However, peer address may be the empty address, for
+  // compatibility. The given peer address will be returned by GetPeerAddress.
+  int AdoptConnectedSocket(SocketDescriptor socket,
+                           const IPEndPoint& peer_address);
+  // Takes ownership of |socket|, which may or may not be open, bound, or
+  // listening. The caller must determine the state of the socket based on its
+  // provenance and act accordingly. The socket may have connections waiting
+  // to be accepted, but must not be actually connected.
+  int AdoptUnconnectedSocket(SocketDescriptor socket);
 
   // Binds this socket to |address|. This is generally only used on a server.
   // Should be called after Open(). Returns a net error code.
@@ -136,6 +145,11 @@
 
   const NetLogWithSource& net_log() const { return net_log_; }
 
+  // Return the underlying SocketDescriptor and clean up this object, which may
+  // no longer be used. This method should be used only for testing. No read,
+  // write, or accept operations should be pending.
+  SocketDescriptor ReleaseSocketDescriptorForTesting();
+
  private:
   // States that using a socket with TCP FastOpen can lead to.
   enum TCPFastOpenStatus {
diff --git a/src/net/socket/tcp_socket_unittest.cc b/src/net/socket/tcp_socket_unittest.cc
index d9da13c..15fdc04 100644
--- a/src/net/socket/tcp_socket_unittest.cc
+++ b/src/net/socket/tcp_socket_unittest.cc
@@ -226,12 +226,51 @@
   TestAcceptAsync();
 }
 
-#if defined(OS_WIN)
-// Test Accept() for AdoptListenSocket.
-TEST_F(TCPSocketTest, AcceptForAdoptedListenSocket) {
-  // Create a socket to be used with AdoptListenSocket.
-  SOCKET existing_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-  ASSERT_THAT(socket_.AdoptListenSocket(existing_socket), IsOk());
+// Test AdoptConnectedSocket()
+TEST_F(TCPSocketTest, AdoptConnectedSocket) {
+  TCPSocket accepting_socket(NULL, NULL, NetLogSource());
+  ASSERT_THAT(accepting_socket.Open(ADDRESS_FAMILY_IPV4), IsOk());
+  ASSERT_THAT(accepting_socket.Bind(IPEndPoint(IPAddress::IPv4Localhost(), 0)),
+              IsOk());
+  ASSERT_THAT(accepting_socket.GetLocalAddress(&local_address_), IsOk());
+  ASSERT_THAT(accepting_socket.Listen(kListenBacklog), IsOk());
+
+  TestCompletionCallback connect_callback;
+  // TODO(yzshen): Switch to use TCPSocket when it supports client socket
+  // operations.
+  TCPClientSocket connecting_socket(local_address_list(), NULL, NULL,
+                                    NetLogSource());
+  connecting_socket.Connect(connect_callback.callback());
+
+  TestCompletionCallback accept_callback;
+  std::unique_ptr<TCPSocket> accepted_socket;
+  IPEndPoint accepted_address;
+  int result = accepting_socket.Accept(&accepted_socket, &accepted_address,
+                                       accept_callback.callback());
+  if (result == ERR_IO_PENDING)
+    result = accept_callback.WaitForResult();
+  ASSERT_THAT(result, IsOk());
+
+  SocketDescriptor accepted_descriptor =
+      accepted_socket->ReleaseSocketDescriptorForTesting();
+
+  ASSERT_THAT(
+      socket_.AdoptConnectedSocket(accepted_descriptor, accepted_address),
+      IsOk());
+
+  // socket_ should now have the local address.
+  IPEndPoint adopted_address;
+  ASSERT_THAT(socket_.GetLocalAddress(&adopted_address), IsOk());
+  EXPECT_EQ(local_address_.address(), adopted_address.address());
+
+  EXPECT_THAT(connect_callback.WaitForResult(), IsOk());
+}
+
+// Test Accept() for AdoptUnconnectedSocket.
+TEST_F(TCPSocketTest, AcceptForAdoptedUnconnectedSocket) {
+  SocketDescriptor existing_socket =
+      CreatePlatformSocket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+  ASSERT_THAT(socket_.AdoptUnconnectedSocket(existing_socket), IsOk());
 
   IPEndPoint address(IPAddress::IPv4Localhost(), 0);
   SockaddrStorage storage;
@@ -243,7 +282,6 @@
 
   TestAcceptAsync();
 }
-#endif
 
 // Accept two connections simultaneously.
 TEST_F(TCPSocketTest, Accept2Connections) {
diff --git a/src/net/socket/tcp_socket_win.cc b/src/net/socket/tcp_socket_win.cc
index 1ca5548..f96d678 100644
--- a/src/net/socket/tcp_socket_win.cc
+++ b/src/net/socket/tcp_socket_win.cc
@@ -284,7 +284,7 @@
   return OK;
 }
 
-int TCPSocketWin::AdoptConnectedSocket(SOCKET socket,
+int TCPSocketWin::AdoptConnectedSocket(SocketDescriptor socket,
                                        const IPEndPoint& peer_address) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(socket_, INVALID_SOCKET);
@@ -305,7 +305,7 @@
   return OK;
 }
 
-int TCPSocketWin::AdoptListenSocket(SOCKET socket) {
+int TCPSocketWin::AdoptUnconnectedSocket(SocketDescriptor socket) {
   DCHECK(CalledOnValidThread());
   DCHECK_EQ(socket_, INVALID_SOCKET);
 
@@ -729,6 +729,13 @@
   }
 }
 
+SocketDescriptor TCPSocketWin::ReleaseSocketDescriptorForTesting() {
+  SocketDescriptor socket_descriptor = socket_;
+  socket_ = INVALID_SOCKET;
+  Close();
+  return socket_descriptor;
+}
+
 int TCPSocketWin::AcceptInternal(std::unique_ptr<TCPSocketWin>* socket,
                                  IPEndPoint* address) {
   SockaddrStorage storage;
diff --git a/src/net/socket/tcp_socket_win.h b/src/net/socket/tcp_socket_win.h
index 1cefdca..a553e37 100644
--- a/src/net/socket/tcp_socket_win.h
+++ b/src/net/socket/tcp_socket_win.h
@@ -19,6 +19,7 @@
 #include "net/base/completion_callback.h"
 #include "net/base/net_export.h"
 #include "net/log/net_log_with_source.h"
+#include "net/socket/socket_descriptor.h"
 #include "net/socket/socket_performance_watcher.h"
 
 namespace net {
@@ -40,12 +41,16 @@
 
   int Open(AddressFamily family);
 
-  // Both AdoptConnectedSocket and AdoptListenSocket take ownership of an
-  // existing socket. AdoptConnectedSocket takes an already connected
-  // socket. AdoptListenSocket takes a socket that is intended to accept
-  // connection. In some sense, AdoptListenSocket is more similar to Open.
-  int AdoptConnectedSocket(SOCKET socket, const IPEndPoint& peer_address);
-  int AdoptListenSocket(SOCKET socket);
+  // Takes ownership of |socket|, which is known to already be connected to the
+  // given peer address. However, peer address may be the empty address, for
+  // compatibility. The given peer address will be returned by GetPeerAddress.
+  int AdoptConnectedSocket(SocketDescriptor socket,
+                           const IPEndPoint& peer_address);
+  // Takes ownership of |socket|, which may or may not be open, bound, or
+  // listening. The caller must determine the state of the socket based on its
+  // provenance and act accordingly. The socket may have connections waiting
+  // to be accepted, but must not be actually connected.
+  int AdoptUnconnectedSocket(SocketDescriptor socket);
 
   int Bind(const IPEndPoint& address);
 
@@ -115,6 +120,11 @@
 
   const NetLogWithSource& net_log() const { return net_log_; }
 
+  // Return the underlying SocketDescriptor and clean up this object, which may
+  // no longer be used. This method should be used only for testing. No read,
+  // write, or accept operations should be pending.
+  SocketDescriptor ReleaseSocketDescriptorForTesting();
+
  private:
   class Core;
 
diff --git a/src/net/spdy/PRESUBMIT.py b/src/net/spdy/PRESUBMIT.py
new file mode 100644
index 0000000..3a8e27c
--- /dev/null
+++ b/src/net/spdy/PRESUBMIT.py
@@ -0,0 +1,64 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import re
+
+def CheckForbiddenRegex(change, forbidden_regex, message_type, message):
+  problems = []
+  for path, change_per_file in change:
+    line_num = 1
+    for line in change_per_file:
+      if forbidden_regex.match(line):
+        problems.extend(["  %s:%d" % (path, line_num)])
+      line_num += 1
+  if not problems:
+    return []
+  return [message_type(message + ":\n" + "\n".join(problems))]
+
+
+def CheckChange(input_api, message_type):
+  result = []
+  shared_source_files = re.compile("^net/spdy/(core|platform/api)/.*\.(h|cc)$")
+  change = [(affected_file.LocalPath(), affected_file.NewContents())
+            for affected_file in input_api.AffectedTestableFiles()
+            if shared_source_files.match(affected_file.LocalPath())]
+  forbidden_regex_list = [
+      r"^#include \"net/base/net_export.h\"$",
+      r"\bNET_EXPORT\b",
+      r"\bNET_EXPORT_PRIVATE\b",
+      "^#include <string>$",
+      r"\bstd::string\b",
+      r"^#include \"base/strings/string_piece.h\"$",
+      r"\bbase::StringPiece\b",
+      r"\bbase::StringPrintf\b",
+      r"\bbase::StringAppendF\b",
+      r"\bbase::HexDigitToInt\b",
+  ]
+  messages = [
+      "Include \"spdy/platform/api/spdy_export.h\" "
+          "instead of \"net/base/net_export.h\"",
+      "Use SPDY_EXPORT instead of NET_EXPORT",
+      "Use SPDY_EXPORT_PRIVATE instead of NET_EXPORT_PRIVATE",
+      "Include \"spdy/platform/api/spdy_string.h\" instead of <string>",
+      "Use SpdyString instead of std::string",
+      "Include \"spdy/platform/api/spdy_string_piece.h\" "
+          "instead of \"base/strings/string_piece.h\"",
+      "Use SpdyStringPiece instead of base::StringPiece",
+      "Use SpdyStringPrintf instead of base::StringPrintf",
+      "Use SpdyStringAppendF instead of base::StringAppendF",
+      "Use SpdyHexDigitToInt instead of base::HexDigitToInt",
+  ]
+  for forbidden_regex, message in zip(forbidden_regex_list, messages):
+    result.extend(CheckForbiddenRegex(
+        change, re.compile(forbidden_regex), message_type, message))
+  return result
+
+# Warn before uploading but allow developer to skip warning
+# so that CLs can be shared and reviewed before addressing all issues.
+def CheckChangeOnUpload(input_api, output_api):
+  return CheckChange(input_api, output_api.PresubmitPromptWarning)
+
+# Do not allow code with forbidden patterns to be checked in.
+def CheckChangeOnCommit(input_api, output_api):
+  return CheckChange(input_api, output_api.PresubmitError)
diff --git a/src/net/spdy/chromium/spdy_test_util_common.cc b/src/net/spdy/chromium/spdy_test_util_common.cc
index f749942..fd683c4 100644
--- a/src/net/spdy/chromium/spdy_test_util_common.cc
+++ b/src/net/spdy/chromium/spdy_test_util_common.cc
@@ -350,7 +350,6 @@
       enable_http2_alternative_service(false),
       net_log(nullptr),
       http_09_on_non_default_ports_enabled(false),
-      restrict_to_one_preconnect_for_proxies(false),
       quic_do_not_mark_as_broken_on_network_change(false) {
   // Note: The CancelledTransaction test does cleanup by running all
   // tasks in the message loop (RunAllPending).  Unfortunately, that
@@ -418,8 +417,6 @@
   params.net_log = session_deps->net_log;
   params.http_09_on_non_default_ports_enabled =
       session_deps->http_09_on_non_default_ports_enabled;
-  params.restrict_to_one_preconnect_for_proxies =
-      session_deps->restrict_to_one_preconnect_for_proxies;
   params.quic_do_not_mark_as_broken_on_network_change =
       session_deps->quic_do_not_mark_as_broken_on_network_change;
   return params;
diff --git a/src/net/spdy/chromium/spdy_test_util_common.h b/src/net/spdy/chromium/spdy_test_util_common.h
index 1f5023d..840fd6d 100644
--- a/src/net/spdy/chromium/spdy_test_util_common.h
+++ b/src/net/spdy/chromium/spdy_test_util_common.h
@@ -216,7 +216,6 @@
   bool enable_http2_alternative_service;
   NetLog* net_log;
   bool http_09_on_non_default_ports_enabled;
-  bool restrict_to_one_preconnect_for_proxies;
   bool quic_do_not_mark_as_broken_on_network_change;
 };
 
diff --git a/src/net/spdy/core/fuzzing/hpack_fuzz_util.cc b/src/net/spdy/core/fuzzing/hpack_fuzz_util.cc
index 11d8c54..dca92bb 100644
--- a/src/net/spdy/core/fuzzing/hpack_fuzz_util.cc
+++ b/src/net/spdy/core/fuzzing/hpack_fuzz_util.cc
@@ -10,6 +10,7 @@
 #include "base/rand_util.h"
 #include "base/sys_byteorder.h"
 #include "net/spdy/core/hpack/hpack_constants.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 
 namespace net {
 
@@ -138,9 +139,10 @@
 
 // static
 void HpackFuzzUtil::InitializeFuzzerContext(FuzzerContext* context) {
-  context->first_stage.reset(new HpackDecoder());
-  context->second_stage.reset(new HpackEncoder(ObtainHpackHuffmanTable()));
-  context->third_stage.reset(new HpackDecoder());
+  context->first_stage = SpdyMakeUnique<HpackDecoder>();
+  context->second_stage =
+      SpdyMakeUnique<HpackEncoder>(ObtainHpackHuffmanTable());
+  context->third_stage = SpdyMakeUnique<HpackDecoder>();
 }
 
 // static
diff --git a/src/net/spdy/core/fuzzing/hpack_fuzz_util.h b/src/net/spdy/core/fuzzing/hpack_fuzz_util.h
index 0a37e34..f980dca 100644
--- a/src/net/spdy/core/fuzzing/hpack_fuzz_util.h
+++ b/src/net/spdy/core/fuzzing/hpack_fuzz_util.h
@@ -11,19 +11,19 @@
 #include <memory>
 #include <vector>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_decoder.h"
 #include "net/spdy/core/hpack/hpack_encoder.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
 
-class NET_EXPORT_PRIVATE HpackFuzzUtil {
+class SPDY_EXPORT_PRIVATE HpackFuzzUtil {
  public:
   // A GeneratorContext holds ordered header names & values which are
   // initially seeded and then expanded with dynamically generated data.
-  struct NET_EXPORT_PRIVATE GeneratorContext {
+  struct SPDY_EXPORT_PRIVATE GeneratorContext {
     GeneratorContext();
     ~GeneratorContext();
     std::vector<SpdyString> names;
@@ -41,7 +41,7 @@
   static size_t SampleExponential(size_t mean, size_t sanity_bound);
 
   // Holds an input SpdyString, and manages an offset into that SpdyString.
-  struct NET_EXPORT_PRIVATE Input {
+  struct SPDY_EXPORT_PRIVATE Input {
     Input();  // Initializes |offset| to zero.
     ~Input();
 
@@ -66,7 +66,7 @@
 
   // A FuzzerContext holds fuzzer input, as well as each of the decoder and
   // encoder stages which fuzzed header blocks are processed through.
-  struct NET_EXPORT_PRIVATE FuzzerContext {
+  struct SPDY_EXPORT_PRIVATE FuzzerContext {
     FuzzerContext();
     ~FuzzerContext();
     std::unique_ptr<HpackDecoder> first_stage;
diff --git a/src/net/spdy/core/hpack/hpack_constants.cc b/src/net/spdy/core/hpack/hpack_constants.cc
index fd97bef..2c96c1d 100644
--- a/src/net/spdy/core/hpack/hpack_constants.cc
+++ b/src/net/spdy/core/hpack/hpack_constants.cc
@@ -11,6 +11,7 @@
 #include "base/memory/singleton.h"
 #include "net/spdy/core/hpack/hpack_huffman_table.h"
 #include "net/spdy/core/hpack/hpack_static_table.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 
 namespace net {
 
@@ -22,7 +23,7 @@
  public:
   SharedHpackHuffmanTable() {
     std::vector<HpackHuffmanSymbol> code = HpackHuffmanCode();
-    std::unique_ptr<HpackHuffmanTable> mutable_table(new HpackHuffmanTable());
+    auto mutable_table = SpdyMakeUnique<HpackHuffmanTable>();
     CHECK(mutable_table->Initialize(&code[0], code.size()));
     CHECK(mutable_table->IsInitialized());
     table = std::move(mutable_table);
@@ -41,7 +42,7 @@
  public:
   SharedHpackStaticTable() {
     std::vector<HpackStaticEntry> static_table = HpackStaticTableVector();
-    std::unique_ptr<HpackStaticTable> mutable_table(new HpackStaticTable());
+    auto mutable_table = SpdyMakeUnique<HpackStaticTable>();
     mutable_table->Initialize(&static_table[0], static_table.size());
     CHECK(mutable_table->IsInitialized());
     table = std::move(mutable_table);
diff --git a/src/net/spdy/core/hpack/hpack_constants.h b/src/net/spdy/core/hpack/hpack_constants.h
index f1ae5f9..8979073 100644
--- a/src/net/spdy/core/hpack/hpack_constants.h
+++ b/src/net/spdy/core/hpack/hpack_constants.h
@@ -10,7 +10,7 @@
 
 #include <vector>
 
-#include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_export.h"
 
 // All section references below are to
 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08
@@ -70,20 +70,20 @@
 const HpackPrefix kHeaderTableSizeUpdateOpcode = {0x1, 3};
 
 // Returns symbol code table from "Appendix C. Huffman Code".
-NET_EXPORT_PRIVATE std::vector<HpackHuffmanSymbol> HpackHuffmanCode();
+SPDY_EXPORT_PRIVATE std::vector<HpackHuffmanSymbol> HpackHuffmanCode();
 
 // Returns static table from "Appendix B. Static Table Definition".
-NET_EXPORT_PRIVATE std::vector<HpackStaticEntry> HpackStaticTableVector();
+SPDY_EXPORT_PRIVATE std::vector<HpackStaticEntry> HpackStaticTableVector();
 
 // Returns a HpackHuffmanTable instance initialized with |kHpackHuffmanCode|.
 // The instance is read-only, has static lifetime, and is safe to share amoung
 // threads. This function is thread-safe.
-NET_EXPORT_PRIVATE const HpackHuffmanTable& ObtainHpackHuffmanTable();
+SPDY_EXPORT_PRIVATE const HpackHuffmanTable& ObtainHpackHuffmanTable();
 
 // Returns a HpackStaticTable instance initialized with |kHpackStaticTable|.
 // The instance is read-only, has static lifetime, and is safe to share amoung
 // threads. This function is thread-safe.
-NET_EXPORT_PRIVATE const HpackStaticTable& ObtainHpackStaticTable();
+SPDY_EXPORT_PRIVATE const HpackStaticTable& ObtainHpackStaticTable();
 
 // Pseudo-headers start with a colon.  (HTTP2 8.1.2.1., HPACK 3.1.)
 const char kPseudoHeaderPrefix = ':';
diff --git a/src/net/spdy/core/hpack/hpack_decoder.h b/src/net/spdy/core/hpack/hpack_decoder.h
index a13c61e..cb7fbc5 100644
--- a/src/net/spdy/core/hpack/hpack_decoder.h
+++ b/src/net/spdy/core/hpack/hpack_decoder.h
@@ -13,12 +13,12 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_decoder_interface.h"
 #include "net/spdy/core/hpack/hpack_header_table.h"
 #include "net/spdy/core/hpack/hpack_input_stream.h"
 #include "net/spdy/core/spdy_headers_handler_interface.h"
 #include "net/spdy/core/spdy_protocol.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -31,7 +31,7 @@
 class HpackDecoderPeer;
 }  // namespace test
 
-class NET_EXPORT_PRIVATE HpackDecoder : public HpackDecoderInterface {
+class SPDY_EXPORT_PRIVATE HpackDecoder : public HpackDecoderInterface {
  public:
   friend class test::HpackDecoderPeer;
 
diff --git a/src/net/spdy/core/hpack/hpack_decoder3.h b/src/net/spdy/core/hpack/hpack_decoder3.h
index b388155..e8008f0 100644
--- a/src/net/spdy/core/hpack/hpack_decoder3.h
+++ b/src/net/spdy/core/hpack/hpack_decoder3.h
@@ -14,7 +14,6 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
 #include "net/http2/hpack/decoder/hpack_decoder_listener.h"
 #include "net/http2/hpack/decoder/http2_hpack_decoder.h"
 #include "net/http2/hpack/hpack_string.h"
@@ -23,6 +22,7 @@
 #include "net/spdy/core/hpack/hpack_header_table.h"
 #include "net/spdy/core/spdy_header_block.h"
 #include "net/spdy/core/spdy_headers_handler_interface.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -30,7 +30,7 @@
 class HpackDecoder3Peer;
 }  // namespace test
 
-class NET_EXPORT_PRIVATE HpackDecoder3 : public HpackDecoderInterface {
+class SPDY_EXPORT_PRIVATE HpackDecoder3 : public HpackDecoderInterface {
  public:
   friend test::HpackDecoder3Peer;
   HpackDecoder3();
@@ -53,7 +53,7 @@
   size_t EstimateMemoryUsage() const override;
 
  private:
-  class NET_EXPORT_PRIVATE ListenerAdapter
+  class SPDY_EXPORT_PRIVATE ListenerAdapter
       : public HpackDecoderListener,
         public HpackDecoderTablesDebugListener {
    public:
diff --git a/src/net/spdy/core/hpack/hpack_decoder_interface.h b/src/net/spdy/core/hpack/hpack_decoder_interface.h
index 828e799..490fa3f 100644
--- a/src/net/spdy/core/hpack/hpack_decoder_interface.h
+++ b/src/net/spdy/core/hpack/hpack_decoder_interface.h
@@ -12,14 +12,14 @@
 
 #include <memory>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_header_table.h"
 #include "net/spdy/core/spdy_header_block.h"
 #include "net/spdy/core/spdy_headers_handler_interface.h"
+#include "net/spdy/platform/api/spdy_export.h"
 
 namespace net {
 
-class NET_EXPORT_PRIVATE HpackDecoderInterface {
+class SPDY_EXPORT_PRIVATE HpackDecoderInterface {
  public:
   virtual ~HpackDecoderInterface() {}
 
diff --git a/src/net/spdy/core/hpack/hpack_encoder.cc b/src/net/spdy/core/hpack/hpack_encoder.cc
index c88a6c4..29199b8 100644
--- a/src/net/spdy/core/hpack/hpack_encoder.cc
+++ b/src/net/spdy/core/hpack/hpack_encoder.cc
@@ -14,6 +14,7 @@
 #include "net/spdy/core/hpack/hpack_huffman_table.h"
 #include "net/spdy/core/hpack/hpack_output_stream.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 
 namespace net {
 
@@ -327,8 +328,8 @@
                       : GatherRepresentation(header, &regular_headers_);
     }
   }
-  header_it_ = base::MakeUnique<RepresentationIterator>(pseudo_headers_,
-                                                        regular_headers_);
+  header_it_ =
+      SpdyMakeUnique<RepresentationIterator>(pseudo_headers_, regular_headers_);
 
   encoder_->MaybeEmitTableSize();
 }
@@ -365,7 +366,7 @@
 
 std::unique_ptr<HpackEncoder::ProgressiveEncoder> HpackEncoder::EncodeHeaderSet(
     const SpdyHeaderBlock& header_set) {
-  return base::MakeUnique<Encoderator>(header_set, this);
+  return SpdyMakeUnique<Encoderator>(header_set, this);
 }
 
 }  // namespace net
diff --git a/src/net/spdy/core/hpack/hpack_encoder.h b/src/net/spdy/core/hpack/hpack_encoder.h
index b691ba7..030afa5 100644
--- a/src/net/spdy/core/hpack/hpack_encoder.h
+++ b/src/net/spdy/core/hpack/hpack_encoder.h
@@ -14,10 +14,10 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_header_table.h"
 #include "net/spdy/core/hpack/hpack_output_stream.h"
 #include "net/spdy/core/spdy_protocol.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -32,7 +32,7 @@
 class HpackEncoderPeer;
 }  // namespace test
 
-class NET_EXPORT_PRIVATE HpackEncoder {
+class SPDY_EXPORT_PRIVATE HpackEncoder {
  public:
   using Representation = std::pair<SpdyStringPiece, SpdyStringPiece>;
   using Representations = std::vector<Representation>;
@@ -58,7 +58,7 @@
   // whether or not the encoding was successful.
   bool EncodeHeaderSet(const SpdyHeaderBlock& header_set, SpdyString* output);
 
-  class NET_EXPORT_PRIVATE ProgressiveEncoder {
+  class SPDY_EXPORT_PRIVATE ProgressiveEncoder {
    public:
     virtual ~ProgressiveEncoder() {}
 
diff --git a/src/net/spdy/core/hpack/hpack_entry.h b/src/net/spdy/core/hpack/hpack_entry.h
index e59b329..f5b6441 100644
--- a/src/net/spdy/core/hpack/hpack_entry.h
+++ b/src/net/spdy/core/hpack/hpack_entry.h
@@ -8,7 +8,7 @@
 #include <stddef.h>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -19,7 +19,7 @@
 
 // A structure for an entry in the static table (3.3.1)
 // and the header table (3.3.2).
-class NET_EXPORT_PRIVATE HpackEntry {
+class SPDY_EXPORT_PRIVATE HpackEntry {
  public:
   // The constant amount added to name().size() and value().size() to
   // get the size of an HpackEntry as defined in 5.1.
diff --git a/src/net/spdy/core/hpack/hpack_header_table.h b/src/net/spdy/core/hpack/hpack_header_table.h
index aedb3d4..23941e0 100644
--- a/src/net/spdy/core/hpack/hpack_header_table.h
+++ b/src/net/spdy/core/hpack/hpack_header_table.h
@@ -12,8 +12,8 @@
 #include <unordered_set>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_entry.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 // All section references below are to http://tools.ietf.org/html/rfc7541.
@@ -25,7 +25,7 @@
 }  // namespace test
 
 // A data structure for the static table (2.3.1) and the dynamic table (2.3.2).
-class NET_EXPORT_PRIVATE HpackHeaderTable {
+class SPDY_EXPORT_PRIVATE HpackHeaderTable {
  public:
   friend class test::HpackHeaderTablePeer;
 
@@ -58,10 +58,10 @@
   // extended to map to list iterators.
   typedef std::deque<HpackEntry> EntryTable;
 
-  struct NET_EXPORT_PRIVATE EntryHasher {
+  struct SPDY_EXPORT_PRIVATE EntryHasher {
     size_t operator()(const HpackEntry* entry) const;
   };
-  struct NET_EXPORT_PRIVATE EntriesEq {
+  struct SPDY_EXPORT_PRIVATE EntriesEq {
     bool operator()(const HpackEntry* lhs, const HpackEntry* rhs) const;
   };
 
diff --git a/src/net/spdy/core/hpack/hpack_huffman_decoder.h b/src/net/spdy/core/hpack/hpack_huffman_decoder.h
index 9820565..d33fa58 100644
--- a/src/net/spdy/core/hpack/hpack_huffman_decoder.h
+++ b/src/net/spdy/core/hpack/hpack_huffman_decoder.h
@@ -8,8 +8,8 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_input_stream.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 
 namespace net {
@@ -19,7 +19,7 @@
 
 // Declared as a class to simplify testing.
 // No instances are actually allocated.
-class NET_EXPORT_PRIVATE HpackHuffmanDecoder {
+class SPDY_EXPORT_PRIVATE HpackHuffmanDecoder {
  public:
   typedef uint32_t HuffmanWord;
   typedef size_t HuffmanCodeLength;
diff --git a/src/net/spdy/core/hpack/hpack_huffman_table.h b/src/net/spdy/core/hpack/hpack_huffman_table.h
index fe2d0fd..1eeaf1e 100644
--- a/src/net/spdy/core/hpack/hpack_huffman_table.h
+++ b/src/net/spdy/core/hpack/hpack_huffman_table.h
@@ -10,8 +10,8 @@
 #include <cstddef>
 #include <vector>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_constants.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -27,7 +27,7 @@
 // HpackHuffmanTable encodes and decodes string literals using a constructed
 // canonical Huffman code. Once initialized, an instance is read only and
 // may be accessed only through its const interface.
-class NET_EXPORT_PRIVATE HpackHuffmanTable {
+class SPDY_EXPORT_PRIVATE HpackHuffmanTable {
  public:
   friend class test::HpackHuffmanTablePeer;
 
@@ -37,7 +37,7 @@
   // a portion of the prefix mapped to DecodeEntry, which in turn either
   // captures a terminal symbol, or points to the next DecodeTable to consult
   // with successive portions of the prefix.
-  struct NET_EXPORT_PRIVATE DecodeEntry {
+  struct SPDY_EXPORT_PRIVATE DecodeEntry {
     DecodeEntry();
     DecodeEntry(uint8_t next_table_index, uint8_t length, uint16_t symbol_id);
 
@@ -50,7 +50,7 @@
     // Set only for terminal entries.
     uint16_t symbol_id;
   };
-  struct NET_EXPORT_PRIVATE DecodeTable {
+  struct SPDY_EXPORT_PRIVATE DecodeTable {
     // Number of bits indexed by the chain leading to this table.
     uint8_t prefix_length;
     // Number of additional prefix bits this table indexes.
diff --git a/src/net/spdy/core/hpack/hpack_input_stream.h b/src/net/spdy/core/hpack/hpack_input_stream.h
index 555ea30..fa0e84c 100644
--- a/src/net/spdy/core/hpack/hpack_input_stream.h
+++ b/src/net/spdy/core/hpack/hpack_input_stream.h
@@ -11,9 +11,9 @@
 #include <utility>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_constants.h"
 #include "net/spdy/core/hpack/hpack_huffman_table.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -30,7 +30,7 @@
 
 // An HpackInputStream handles all the low-level details of decoding
 // header fields.
-class NET_EXPORT_PRIVATE HpackInputStream {
+class SPDY_EXPORT_PRIVATE HpackInputStream {
  public:
   friend class test::HpackInputStreamPeer;
 
diff --git a/src/net/spdy/core/hpack/hpack_output_stream.h b/src/net/spdy/core/hpack/hpack_output_stream.h
index eeee31e..abf4896 100644
--- a/src/net/spdy/core/hpack/hpack_output_stream.h
+++ b/src/net/spdy/core/hpack/hpack_output_stream.h
@@ -11,8 +11,8 @@
 #include <map>
 
 #include "base/macros.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_constants.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -23,7 +23,7 @@
 
 // An HpackOutputStream handles all the low-level details of encoding
 // header fields.
-class NET_EXPORT_PRIVATE HpackOutputStream {
+class SPDY_EXPORT_PRIVATE HpackOutputStream {
  public:
   HpackOutputStream();
   ~HpackOutputStream();
diff --git a/src/net/spdy/core/hpack/hpack_static_table.h b/src/net/spdy/core/hpack/hpack_static_table.h
index 564dab5..af0782c 100644
--- a/src/net/spdy/core/hpack/hpack_static_table.h
+++ b/src/net/spdy/core/hpack/hpack_static_table.h
@@ -7,8 +7,8 @@
 
 #include <stddef.h>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/hpack/hpack_header_table.h"
+#include "net/spdy/platform/api/spdy_export.h"
 
 namespace net {
 
@@ -18,7 +18,7 @@
 // encoding and decoding contexts.  Once initialized, an instance is read only
 // and may be accessed only through its const interface.  Such an instance may
 // be shared accross multiple HPACK contexts.
-class NET_EXPORT_PRIVATE HpackStaticTable {
+class SPDY_EXPORT_PRIVATE HpackStaticTable {
  public:
   HpackStaticTable();
   ~HpackStaticTable();
diff --git a/src/net/spdy/core/http2_frame_decoder_adapter.cc b/src/net/spdy/core/http2_frame_decoder_adapter.cc
index c750519..09c6c11 100644
--- a/src/net/spdy/core/http2_frame_decoder_adapter.cc
+++ b/src/net/spdy/core/http2_frame_decoder_adapter.cc
@@ -33,6 +33,7 @@
 #include "net/spdy/core/spdy_headers_handler_interface.h"
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "net/spdy/platform/api/spdy_string.h"
 
 namespace net {
@@ -994,8 +995,7 @@
 
 std::unique_ptr<SpdyFramerDecoderAdapter> CreateHttp2FrameDecoderAdapter(
     SpdyFramer* outer_framer) {
-  return std::unique_ptr<SpdyFramerDecoderAdapter>(
-      new Http2DecoderAdapter(outer_framer));
+  return SpdyMakeUnique<Http2DecoderAdapter>(outer_framer);
 }
 
 }  // namespace net
diff --git a/src/net/spdy/core/lifo_write_scheduler.h b/src/net/spdy/core/lifo_write_scheduler.h
deleted file mode 100644
index f66b818..0000000
--- a/src/net/spdy/core/lifo_write_scheduler.h
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright (c) 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_
-#define NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_
-
-#include <map>
-#include <set>
-#include <tuple>
-#include <vector>
-
-#include "net/spdy/core/write_scheduler.h"
-#include "net/spdy/platform/api/spdy_string_utils.h"
-
-namespace net {
-
-namespace test {
-
-template <typename StreamIdType>
-class LifoWriteSchedulerPeer;
-
-}  // namespace test
-
-// Create a write scheduler where the stream added last will have the highest
-// priority.
-template <typename StreamIdType>
-class LifoWriteScheduler : public WriteScheduler<StreamIdType> {
- public:
-  using typename WriteScheduler<StreamIdType>::StreamPrecedenceType;
-
-  LifoWriteScheduler() = default;
-
-  void RegisterStream(StreamIdType stream_id,
-                      const StreamPrecedenceType& /*precedence*/) override;
-
-  void UnregisterStream(StreamIdType stream_id) override;
-
-  bool StreamRegistered(StreamIdType stream_id) const override {
-    return registered_streams_.find(stream_id) != registered_streams_.end();
-  }
-
-  // Stream precedence is not supported by this scheduler.
-  StreamPrecedenceType GetStreamPrecedence(
-      StreamIdType stream_id) const override {
-    return StreamPrecedenceType(kV3LowestPriority);
-  }
-
-  void UpdateStreamPrecedence(StreamIdType stream_id,
-                              const StreamPrecedenceType& precedence) override {
-  }
-
-  std::vector<StreamIdType> GetStreamChildren(
-      StreamIdType stream_id) const override {
-    return std::vector<StreamIdType>();
-  }
-
-  void RecordStreamEventTime(StreamIdType stream_id,
-                             int64_t now_in_usec) override;
-
-  int64_t GetLatestEventWithPrecedence(StreamIdType stream_id) const override;
-
-  StreamIdType PopNextReadyStream() override;
-
-  std::tuple<StreamIdType, StreamPrecedenceType>
-  PopNextReadyStreamAndPrecedence() override {
-    return std::make_tuple(PopNextReadyStream(),
-                           StreamPrecedenceType(kV3LowestPriority));
-  }
-
-  bool ShouldYield(StreamIdType stream_id) const override {
-    // stream_id is not necessary to be on the ready list.
-    return stream_id < *ready_streams_.rbegin();
-  }
-
-  void MarkStreamReady(StreamIdType stream_id, bool /*add_to_front*/) override;
-
-  void MarkStreamNotReady(StreamIdType stream_id) override;
-
-  bool HasReadyStreams() const override { return !ready_streams_.empty(); }
-  size_t NumReadyStreams() const override { return ready_streams_.size(); }
-
- private:
-  friend class test::LifoWriteSchedulerPeer<StreamIdType>;
-
-  std::set<StreamIdType> ready_streams_;
-  std::map<StreamIdType, int64_t> registered_streams_;
-};
-
-template <typename StreamIdType>
-void LifoWriteScheduler<StreamIdType>::RegisterStream(
-    StreamIdType stream_id,
-    const StreamPrecedenceType& /*precedence*/) {
-  if (StreamRegistered(stream_id)) {
-    SPDY_BUG << "Stream " << stream_id << " already registered";
-    return;
-  }
-  registered_streams_.emplace_hint(registered_streams_.end(), stream_id, 0);
-}
-
-template <typename StreamIdType>
-void LifoWriteScheduler<StreamIdType>::UnregisterStream(
-    StreamIdType stream_id) {
-  if (!StreamRegistered(stream_id)) {
-    SPDY_BUG << "Stream " << stream_id << " is not registered";
-    return;
-  }
-  registered_streams_.erase(stream_id);
-}
-
-template <typename StreamIdType>
-void LifoWriteScheduler<StreamIdType>::RecordStreamEventTime(
-    StreamIdType stream_id,
-    int64_t now_in_usec) {
-  auto it = registered_streams_.find(stream_id);
-  if (it != registered_streams_.end()) {
-    it->second = now_in_usec;
-  } else {
-    SPDY_BUG << "Stream " << stream_id << " is not registered";
-  }
-}
-
-template <typename StreamIdType>
-int64_t LifoWriteScheduler<StreamIdType>::GetLatestEventWithPrecedence(
-    StreamIdType stream_id) const {
-  if (!StreamRegistered(stream_id)) {
-    SPDY_BUG << "Stream " << stream_id << " is not registered";
-    return 0;
-  }
-  int64_t latest_event_time_us = 0;
-  for (auto it = registered_streams_.rbegin(); it != registered_streams_.rend();
-       ++it) {
-    if (stream_id < it->first) {
-      if (it->second > latest_event_time_us) {
-        latest_event_time_us = it->second;
-      }
-    } else {
-      break;
-    }
-  }
-  return latest_event_time_us;
-}
-
-template <typename StreamIdType>
-StreamIdType LifoWriteScheduler<StreamIdType>::PopNextReadyStream() {
-  if (ready_streams_.empty()) {
-    SPDY_BUG << "No ready streams available";
-    return 0;
-  }
-  auto it = --ready_streams_.end();
-  StreamIdType id = *it;
-  ready_streams_.erase(it);
-  return id;
-}
-
-template <typename StreamIdType>
-void LifoWriteScheduler<StreamIdType>::MarkStreamReady(StreamIdType stream_id,
-                                                       bool /*add_to_front*/) {
-  if (!StreamRegistered(stream_id)) {
-    SPDY_BUG << "Stream " << stream_id << " is not registered";
-    return;
-  }
-  if (ready_streams_.find(stream_id) != ready_streams_.end()) {
-    SPDY_BUG << "Stream already exists in the list";
-    return;
-  }
-  ready_streams_.insert(stream_id);
-}
-
-template <typename StreamIdType>
-void LifoWriteScheduler<StreamIdType>::MarkStreamNotReady(
-    StreamIdType stream_id) {
-  auto it = ready_streams_.find(stream_id);
-  if (it == ready_streams_.end()) {
-    SPDY_BUG << "Try to remove a stream that is not on list";
-    return;
-  }
-  ready_streams_.erase(it);
-}
-
-}  // namespace net
-
-#endif  // NET_SPDY_CORE_LIFO_WRITE_SCHEDULER_H_
diff --git a/src/net/spdy/core/lifo_write_scheduler_test.cc b/src/net/spdy/core/lifo_write_scheduler_test.cc
deleted file mode 100644
index f4b58d0..0000000
--- a/src/net/spdy/core/lifo_write_scheduler_test.cc
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (c) 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/spdy/core/lifo_write_scheduler.h"
-
-#include "net/spdy/core/spdy_protocol.h"
-#include "net/spdy/core/spdy_test_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-
-namespace test {
-
-template <typename StreamIdType>
-class LifoWriteSchedulerPeer {
- public:
-  explicit LifoWriteSchedulerPeer(LifoWriteScheduler<StreamIdType>* scheduler)
-      : scheduler_(scheduler) {}
-
-  size_t NumRegisteredListStreams() const {
-    return scheduler_->registered_streams_.size();
-  }
-
-  std::set<StreamIdType>* GetReadyList() const {
-    return &scheduler_->ready_streams_;
-  }
-
- private:
-  LifoWriteScheduler<StreamIdType>* scheduler_;
-};
-
-// Test add and remove from ready list.
-TEST(LifoWriteSchedulerTest, ReadyListTest) {
-  LifoWriteScheduler<SpdyStreamId> lifo;
-  LifoWriteSchedulerPeer<SpdyStreamId> peer(&lifo);
-
-  EXPECT_SPDY_BUG(
-      EXPECT_EQ((uint32_t)0,
-                std::get<0>(lifo.PopNextReadyStreamAndPrecedence())),
-      "No ready streams available");
-  EXPECT_SPDY_BUG(EXPECT_EQ((uint32_t)0, lifo.PopNextReadyStream()),
-                  "No ready streams available");
-  EXPECT_FALSE(lifo.HasReadyStreams());
-  EXPECT_SPDY_BUG(lifo.MarkStreamReady(9, true), "Stream 9 is not registered");
-  SpdyStreamPrecedence precedence(1);
-  lifo.RegisterStream(3, precedence);
-  lifo.RegisterStream(7, precedence);
-  lifo.RegisterStream(9, precedence);
-  lifo.RegisterStream(11, precedence);
-  lifo.RegisterStream(13, precedence);
-  lifo.RegisterStream(15, precedence);
-  lifo.RegisterStream(17, precedence);
-  lifo.MarkStreamReady(9, true);
-  lifo.MarkStreamReady(15, true);
-  lifo.MarkStreamReady(7, true);
-  lifo.MarkStreamReady(13, true);
-  lifo.MarkStreamReady(11, true);
-  lifo.MarkStreamReady(3, true);
-  lifo.MarkStreamReady(17, true);
-  EXPECT_TRUE(lifo.HasReadyStreams());
-  EXPECT_EQ((uint32_t)7, lifo.NumReadyStreams());
-
-  EXPECT_SPDY_BUG(lifo.MarkStreamReady(11, true),
-                  "Stream already exists in the list");
-  EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(5),
-                  "Try to remove a stream that is not on list");
-  EXPECT_SPDY_BUG(lifo.MarkStreamNotReady(21),
-                  "Try to remove a stream that is not on list");
-
-  EXPECT_EQ((uint32_t)17, lifo.PopNextReadyStream());
-  EXPECT_EQ((uint32_t)15, std::get<0>(lifo.PopNextReadyStreamAndPrecedence()));
-  EXPECT_TRUE(lifo.ShouldYield(9));
-  EXPECT_FALSE(lifo.ShouldYield(13));
-  EXPECT_FALSE(lifo.ShouldYield(15));
-
-  lifo.MarkStreamNotReady(3);
-  EXPECT_TRUE(peer.GetReadyList()->find(3) == peer.GetReadyList()->end());
-  lifo.MarkStreamNotReady(13);
-  EXPECT_TRUE(peer.GetReadyList()->find(13) == peer.GetReadyList()->end());
-  lifo.MarkStreamNotReady(7);
-  EXPECT_TRUE(peer.GetReadyList()->find(7) == peer.GetReadyList()->end());
-  EXPECT_EQ((uint32_t)2, lifo.NumReadyStreams());
-}
-
-// Test add and remove from registered list.
-TEST(LifoWriteSchedulerTest, RegisterListTest) {
-  LifoWriteScheduler<SpdyStreamId> lifo;
-  LifoWriteSchedulerPeer<SpdyStreamId> peer(&lifo);
-  SpdyStreamPrecedence precedence(1);
-  lifo.RegisterStream(3, precedence);
-  lifo.RegisterStream(5, precedence);
-  lifo.RegisterStream(7, precedence);
-  lifo.RegisterStream(9, precedence);
-  lifo.RegisterStream(11, precedence);
-
-  EXPECT_TRUE(lifo.StreamRegistered(3));
-  EXPECT_TRUE(lifo.StreamRegistered(5));
-  EXPECT_TRUE(lifo.StreamRegistered(7));
-  EXPECT_TRUE(lifo.StreamRegistered(9));
-  EXPECT_TRUE(lifo.StreamRegistered(11));
-  EXPECT_SPDY_BUG(lifo.RegisterStream(11, precedence),
-                  "Stream 11 already registered");
-  EXPECT_EQ((uint32_t)5, peer.NumRegisteredListStreams());
-
-  lifo.UnregisterStream(3);
-  EXPECT_FALSE(lifo.StreamRegistered(3));
-  EXPECT_SPDY_BUG(lifo.UnregisterStream(3), "Stream 3 is not registered");
-  EXPECT_SPDY_BUG(lifo.UnregisterStream(13), "Stream 13 is not registered");
-  lifo.UnregisterStream(11);
-  EXPECT_FALSE(lifo.StreamRegistered(11));
-  lifo.UnregisterStream(7);
-  EXPECT_FALSE(lifo.StreamRegistered(7));
-  EXPECT_TRUE(lifo.StreamRegistered(5));
-  EXPECT_TRUE(lifo.StreamRegistered(9));
-}
-
-// Test mark latest event time.
-TEST(LifoWriteSchedulerTest, GetLatestEventTest) {
-  LifoWriteScheduler<SpdyStreamId> lifo;
-  LifoWriteSchedulerPeer<SpdyStreamId> peer(&lifo);
-  SpdyStreamPrecedence precedence(1);
-  lifo.RegisterStream(1, precedence);
-  lifo.RegisterStream(3, precedence);
-  lifo.RegisterStream(5, precedence);
-  lifo.RegisterStream(7, precedence);
-  lifo.RegisterStream(9, precedence);
-  lifo.RecordStreamEventTime(1, 1);
-  lifo.RecordStreamEventTime(3, 8);
-  lifo.RecordStreamEventTime(5, 4);
-  lifo.RecordStreamEventTime(7, 2);
-  lifo.RecordStreamEventTime(9, 3);
-  EXPECT_SPDY_BUG(lifo.RecordStreamEventTime(11, 1),
-                  "Stream 11 is not registered");
-  EXPECT_EQ(0, lifo.GetLatestEventWithPrecedence(9));
-  EXPECT_EQ(3, lifo.GetLatestEventWithPrecedence(7));
-  EXPECT_EQ(3, lifo.GetLatestEventWithPrecedence(5));
-  EXPECT_EQ(4, lifo.GetLatestEventWithPrecedence(3));
-  EXPECT_EQ(8, lifo.GetLatestEventWithPrecedence(1));
-  EXPECT_SPDY_BUG(lifo.GetLatestEventWithPrecedence(11),
-                  "Stream 11 is not registered");
-}
-
-}  // namespace test
-
-}  // namespace net
diff --git a/src/net/spdy/core/mock_spdy_framer_visitor.h b/src/net/spdy/core/mock_spdy_framer_visitor.h
index b74f8a9..b5997c1 100644
--- a/src/net/spdy/core/mock_spdy_framer_visitor.h
+++ b/src/net/spdy/core/mock_spdy_framer_visitor.h
@@ -13,6 +13,7 @@
 
 #include "net/spdy/core/spdy_framer.h"
 #include "net/spdy/core/spdy_test_utils.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
@@ -83,7 +84,7 @@
   SpdyHeadersHandlerInterface* ReturnTestHeadersHandler(
       SpdyStreamId /* stream_id */) {
     if (headers_handler_ == nullptr) {
-      headers_handler_.reset(new TestHeadersHandler);
+      headers_handler_ = SpdyMakeUnique<TestHeadersHandler>();
     }
     return headers_handler_.get();
   }
diff --git a/src/net/spdy/core/spdy_alt_svc_wire_format.h b/src/net/spdy/core/spdy_alt_svc_wire_format.h
index 8a834f6..c0aaf64 100644
--- a/src/net/spdy/core/spdy_alt_svc_wire_format.h
+++ b/src/net/spdy/core/spdy_alt_svc_wire_format.h
@@ -13,7 +13,7 @@
 #include <cstdint>
 #include <vector>
 
-#include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -23,11 +23,11 @@
 class SpdyAltSvcWireFormatPeer;
 }  // namespace test
 
-class NET_EXPORT_PRIVATE SpdyAltSvcWireFormat {
+class SPDY_EXPORT_PRIVATE SpdyAltSvcWireFormat {
  public:
   using VersionVector = std::vector<uint16_t>;
 
-  struct NET_EXPORT_PRIVATE AlternativeService {
+  struct SPDY_EXPORT_PRIVATE AlternativeService {
     SpdyString protocol_id;
     SpdyString host;
 
diff --git a/src/net/spdy/core/spdy_deframer_visitor.cc b/src/net/spdy/core/spdy_deframer_visitor.cc
index 74a3fe9..61b0352 100644
--- a/src/net/spdy/core/spdy_deframer_visitor.cc
+++ b/src/net/spdy/core/spdy_deframer_visitor.cc
@@ -18,8 +18,9 @@
 #include "net/spdy/core/spdy_frame_reader.h"
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/core/spdy_test_utils.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
+#include "net/spdy/platform/api/spdy_string_piece.h"
 
-using ::base::MakeUnique;
 using ::testing::AssertionFailure;
 using ::testing::AssertionResult;
 using ::testing::AssertionSuccess;
@@ -238,13 +239,13 @@
 // static
 std::unique_ptr<SpdyTestDeframer> SpdyTestDeframer::CreateConverter(
     std::unique_ptr<SpdyDeframerVisitorInterface> listener) {
-  return MakeUnique<SpdyTestDeframerImpl>(std::move(listener));
+  return SpdyMakeUnique<SpdyTestDeframerImpl>(std::move(listener));
 }
 
 void SpdyTestDeframerImpl::AtDataEnd() {
   DVLOG(1) << "AtDataEnd";
   CHECK_EQ(data_len_, padding_len_ + data_->size());
-  auto ptr = MakeUnique<SpdyDataIR>(stream_id_, std::move(*data_));
+  auto ptr = SpdyMakeUnique<SpdyDataIR>(stream_id_, std::move(*data_));
   CHECK_EQ(0u, data_->size());
   data_.reset();
 
@@ -269,7 +270,7 @@
   if (goaway_description_->empty()) {
     listener_->OnGoAway(std::move(goaway_ir_));
   } else {
-    listener_->OnGoAway(MakeUnique<SpdyGoAwayIR>(
+    listener_->OnGoAway(SpdyMakeUnique<SpdyGoAwayIR>(
         goaway_ir_->last_good_stream_id(), goaway_ir_->error_code(),
         std::move(*goaway_description_)));
     CHECK_EQ(0u, goaway_description_->size());
@@ -415,7 +416,7 @@
   CHECK_EQ(frame_type_, UNSET) << "   frame_type_="
                                << Http2FrameTypeToString(frame_type_);
   CHECK_GT(stream_id, 0u);
-  auto ptr = MakeUnique<SpdyAltSvcIR>(stream_id);
+  auto ptr = SpdyMakeUnique<SpdyAltSvcIR>(stream_id);
   ptr->set_origin(SpdyString(origin));
   for (auto& altsvc : altsvc_vector) {
     ptr->add_altsvc(altsvc);
@@ -455,7 +456,7 @@
   stream_id_ = stream_id;
   fin_ = fin;
   data_len_ = length;
-  data_.reset(new SpdyString());
+  data_ = SpdyMakeUnique<SpdyString>();
 }
 
 // The SpdyFramer will not process any more data at this point.
@@ -478,8 +479,9 @@
   CHECK_EQ(frame_type_, UNSET) << "   frame_type_="
                                << Http2FrameTypeToString(frame_type_);
   frame_type_ = GOAWAY;
-  goaway_ir_ = MakeUnique<SpdyGoAwayIR>(last_good_stream_id, error_code, "");
-  goaway_description_.reset(new SpdyString());
+  goaway_ir_ =
+      SpdyMakeUnique<SpdyGoAwayIR>(last_good_stream_id, error_code, "");
+  goaway_description_ = SpdyMakeUnique<SpdyString>();
 }
 
 // If len==0 then we've reached the end of the GOAWAY frame.
@@ -528,9 +530,9 @@
   fin_ = fin;
   end_ = end;
 
-  headers_.reset(new StringPairVector());
-  headers_handler_.reset(new TestHeadersHandler());
-  headers_ir_ = MakeUnique<SpdyHeadersIR>(stream_id);
+  headers_ = SpdyMakeUnique<StringPairVector>();
+  headers_handler_ = SpdyMakeUnique<TestHeadersHandler>();
+  headers_ir_ = SpdyMakeUnique<SpdyHeadersIR>(stream_id);
   headers_ir_->set_fin(fin);
   if (has_priority) {
     headers_ir_->set_has_priority(true);
@@ -550,7 +552,7 @@
            << "      is_ack: " << (is_ack ? "true" : "false");
   CHECK_EQ(frame_type_, UNSET) << "   frame_type_="
                                << Http2FrameTypeToString(frame_type_);
-  auto ptr = MakeUnique<SpdyPingIR>(unique_id);
+  auto ptr = SpdyMakeUnique<SpdyPingIR>(unique_id);
   if (is_ack) {
     ptr->set_is_ack(is_ack);
     listener_->OnPingAck(std::move(ptr));
@@ -568,8 +570,8 @@
                                << Http2FrameTypeToString(frame_type_);
   CHECK_GT(stream_id, 0u);
 
-  listener_->OnPriority(MakeUnique<SpdyPriorityIR>(stream_id, parent_stream_id,
-                                                   weight, exclusive));
+  listener_->OnPriority(SpdyMakeUnique<SpdyPriorityIR>(
+      stream_id, parent_stream_id, weight, exclusive));
 }
 
 void SpdyTestDeframerImpl::OnPushPromise(SpdyStreamId stream_id,
@@ -584,10 +586,10 @@
   stream_id_ = stream_id;
   end_ = end;
 
-  headers_.reset(new StringPairVector());
-  headers_handler_.reset(new TestHeadersHandler());
+  headers_ = SpdyMakeUnique<StringPairVector>();
+  headers_handler_ = SpdyMakeUnique<TestHeadersHandler>();
   push_promise_ir_ =
-      MakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id);
+      SpdyMakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id);
 }
 
 // Closes the specified stream. After this the sender may still send PRIORITY
@@ -600,7 +602,8 @@
                                << Http2FrameTypeToString(frame_type_);
   CHECK_GT(stream_id, 0u);
 
-  listener_->OnRstStream(MakeUnique<SpdyRstStreamIR>(stream_id, error_code));
+  listener_->OnRstStream(
+      SpdyMakeUnique<SpdyRstStreamIR>(stream_id, error_code));
 }
 
 // Called for an individual setting. There is no negotiation, the sender is
@@ -627,15 +630,15 @@
   frame_type_ = SETTINGS;
   ack_ = false;
 
-  settings_.reset(new SettingVector());
-  settings_ir_.reset(new SpdySettingsIR());
+  settings_ = SpdyMakeUnique<SettingVector>();
+  settings_ir_ = SpdyMakeUnique<SpdySettingsIR>();
 }
 
 void SpdyTestDeframerImpl::OnSettingsAck() {
   DVLOG(1) << "OnSettingsAck";
   CHECK_EQ(frame_type_, UNSET) << "   frame_type_="
                                << Http2FrameTypeToString(frame_type_);
-  auto ptr = MakeUnique<SpdySettingsIR>();
+  auto ptr = SpdyMakeUnique<SpdySettingsIR>();
   ptr->set_is_ack(true);
   listener_->OnSettingsAck(std::move(ptr));
 }
@@ -707,7 +710,7 @@
   CHECK_NE(0, delta_window_size);
 
   listener_->OnWindowUpdate(
-      MakeUnique<SpdyWindowUpdateIR>(stream_id, delta_window_size));
+      SpdyMakeUnique<SpdyWindowUpdateIR>(stream_id, delta_window_size));
 }
 
 // Return true to indicate that the stream_id is valid; if not valid then
@@ -775,7 +778,7 @@
       std::unique_ptr<SpdyDeframerVisitorInterface> wrapped)
       : wrapped_(std::move(wrapped)) {
     if (!wrapped_) {
-      wrapped_ = MakeUnique<SpdyDeframerVisitorInterface>();
+      wrapped_ = SpdyMakeUnique<SpdyDeframerVisitorInterface>();
     }
   }
   ~LoggingSpdyDeframerDelegate() override {}
@@ -865,7 +868,8 @@
 std::unique_ptr<SpdyDeframerVisitorInterface>
 SpdyDeframerVisitorInterface::LogBeforeVisiting(
     std::unique_ptr<SpdyDeframerVisitorInterface> wrapped_listener) {
-  return MakeUnique<LoggingSpdyDeframerDelegate>(std::move(wrapped_listener));
+  return SpdyMakeUnique<LoggingSpdyDeframerDelegate>(
+      std::move(wrapped_listener));
 }
 
 CollectedFrame::CollectedFrame() {}
diff --git a/src/net/spdy/core/spdy_deframer_visitor.h b/src/net/spdy/core/spdy_deframer_visitor.h
index 2a4af3e..8fb25ee 100644
--- a/src/net/spdy/core/spdy_deframer_visitor.h
+++ b/src/net/spdy/core/spdy_deframer_visitor.h
@@ -32,7 +32,7 @@
 //    // Create your visitor, a subclass of SpdyDeframerVisitorInterface.
 //    // For example, using DeframerCallbackCollector to collect frames:
 //    std::vector<CollectedFrame> collected_frames;
-//    auto your_visitor = gtl::MakeUnique<DeframerCallbackCollector>(
+//    auto your_visitor = SpdyMakeUnique<DeframerCallbackCollector>(
 //        &collected_frames);
 //
 //    // Transfer ownership of your visitor to the converter, which ensures that
diff --git a/src/net/spdy/core/spdy_deframer_visitor_test.cc b/src/net/spdy/core/spdy_deframer_visitor_test.cc
index 1df5ff9..53e4906 100644
--- a/src/net/spdy/core/spdy_deframer_visitor_test.cc
+++ b/src/net/spdy/core/spdy_deframer_visitor_test.cc
@@ -19,8 +19,7 @@
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/core/spdy_protocol_test_utils.h"
 #include "net/spdy/core/spdy_test_utils.h"
-
-using ::base::MakeUnique;
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 
 namespace net {
 namespace test {
@@ -32,7 +31,8 @@
       : encoder_(SpdyFramer::ENABLE_COMPRESSION),
         decoder_(SpdyFramer::ENABLE_COMPRESSION) {
     decoder_.set_process_single_input_frame(true);
-    auto collector = MakeUnique<DeframerCallbackCollector>(&collected_frames_);
+    auto collector =
+        SpdyMakeUnique<DeframerCallbackCollector>(&collected_frames_);
     auto log_and_collect =
         SpdyDeframerVisitorInterface::LogBeforeVisiting(std::move(collector));
     deframer_ = SpdyTestDeframer::CreateConverter(std::move(log_and_collect));
diff --git a/src/net/spdy/core/spdy_frame_builder.cc b/src/net/spdy/core/spdy_frame_builder.cc
index 1589460..e340923 100644
--- a/src/net/spdy/core/spdy_frame_builder.cc
+++ b/src/net/spdy/core/spdy_frame_builder.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <cstdint>
 #include <limits>
+#include <new>
 
 #include "base/logging.h"
 #include "net/spdy/core/spdy_bug_tracker.h"
diff --git a/src/net/spdy/core/spdy_frame_builder.h b/src/net/spdy/core/spdy_frame_builder.h
index ba15863..0416d5b 100644
--- a/src/net/spdy/core/spdy_frame_builder.h
+++ b/src/net/spdy/core/spdy_frame_builder.h
@@ -12,10 +12,10 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/sys_byteorder.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/spdy_bug_tracker.h"
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/core/zero_copy_output_buffer.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -29,7 +29,7 @@
 // to a frame instance.  The SpdyFrameBuilder grows its internal memory buffer
 // dynamically to hold the sequence of primitive values.   The internal memory
 // buffer is exposed as the "data" of the SpdyFrameBuilder.
-class NET_EXPORT_PRIVATE SpdyFrameBuilder {
+class SPDY_EXPORT_PRIVATE SpdyFrameBuilder {
  public:
   // Initializes a SpdyFrameBuilder with a buffer of given size
   explicit SpdyFrameBuilder(size_t size);
diff --git a/src/net/spdy/core/spdy_frame_reader.h b/src/net/spdy/core/spdy_frame_reader.h
index 99b6d07..20a333e 100644
--- a/src/net/spdy/core/spdy_frame_reader.h
+++ b/src/net/spdy/core/spdy_frame_reader.h
@@ -8,7 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -27,7 +27,7 @@
 // trusted and it is up to the caller to throw away the failed instance and
 // handle the error as appropriate. None of the Read*() methods should ever be
 // called after failure, as they will also fail immediately.
-class NET_EXPORT_PRIVATE SpdyFrameReader {
+class SPDY_EXPORT_PRIVATE SpdyFrameReader {
  public:
   // Caller must provide an underlying buffer to work on.
   SpdyFrameReader(const char* data, const size_t len);
diff --git a/src/net/spdy/core/spdy_framer.cc b/src/net/spdy/core/spdy_framer.cc
index 7860e9e..03a1bed 100644
--- a/src/net/spdy/core/spdy_framer.cc
+++ b/src/net/spdy/core/spdy_framer.cc
@@ -32,6 +32,7 @@
 #include "net/spdy/core/spdy_frame_reader.h"
 #include "net/spdy/core/spdy_framer_decoder_adapter.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "net/spdy/platform/api/spdy_string_utils.h"
 
 using std::vector;
@@ -65,20 +66,6 @@
 // used. This code is isolated to hopefully make merging into Chromium easier.
 std::unique_ptr<SpdyFramerDecoderAdapter> DecoderAdapterFactory(
     SpdyFramer* outer) {
-  if (FLAGS_use_nested_spdy_framer_decoder) {
-    // Since chromium_reloadable_flag_spdy_use_http2_frame_decoder_adapter can
-    // be flipped on in any test when all the feature flags are on,
-    // it can unintentionally override use_nested_spdy_framer_decoder which is
-    // used to validate that the adapter technique is working. Therefore, we
-    // give precedence to use_nested_spdy_framer_decoder.
-    if (FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter) {
-      VLOG(1) << "Both NestedSpdyFramerDecoder and Http2FrameDecoderAdapter "
-              << "are enabled. NestedSpdyFramerDecoder selected.";
-    }
-    DVLOG(1) << "Creating NestedSpdyFramerDecoder.";
-    return CreateNestedSpdyFramerDecoder(outer);
-  }
-
   if (FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter) {
     DVLOG(1) << "Creating Http2FrameDecoderAdapter.";
     return CreateHttp2FrameDecoderAdapter(outer);
@@ -1450,7 +1437,7 @@
 
   if (altsvc_scratch_ == nullptr) {
     size_t capacity = current_frame_length_ - GetFrameHeaderSize();
-    altsvc_scratch_.reset(new CharBuffer(capacity));
+    altsvc_scratch_ = SpdyMakeUnique<CharBuffer>(capacity);
   }
   altsvc_scratch_->CopyFrom(data, len);
   remaining_data_length_ -= len;
@@ -1673,7 +1660,7 @@
 
 SpdyFramer::SpdyFrameIterator::~SpdyFrameIterator() {}
 
-bool SpdyFramer::SpdyFrameIterator::NextFrame(ZeroCopyOutputBuffer* output) {
+size_t SpdyFramer::SpdyFrameIterator::NextFrame(ZeroCopyOutputBuffer* output) {
   SpdyFrameWithHeaderBlockIR* frame_ir = GetIR();
   if (frame_ir == nullptr) {
     LOG(WARNING) << "frame_ir doesn't exist.";
@@ -1688,7 +1675,7 @@
   size_t size_without_block = is_first_frame_
                                   ? GetFrameSizeSansBlock()
                                   : framer_->GetContinuationMinimumSize();
-  auto encoding = base::MakeUnique<SpdyString>();
+  auto encoding = SpdyMakeUnique<SpdyString>();
   encoder_->Next(kMaxControlFrameSize - size_without_block, encoding.get());
   has_next_frame_ = encoder_->HasNext();
 
@@ -1711,7 +1698,9 @@
   if (is_first_frame_) {
     is_first_frame_ = false;
     frame_ir->set_end_headers(!has_next_frame_);
-    return SerializeGivenEncoding(*encoding, output);
+    size_t free_bytes_before = output->BytesFree();
+    bool ok = SerializeGivenEncoding(*encoding, output);
+    return ok ? free_bytes_before - output->BytesFree() : 0;
   } else {
     SpdyContinuationIR continuation_ir(frame_ir->stream_id());
     continuation_ir.set_end_headers(!has_next_frame_);
@@ -1773,6 +1762,55 @@
                                                         encoding, output);
 }
 
+SpdyFramer::SpdyControlFrameIterator::SpdyControlFrameIterator(
+    SpdyFramer* framer,
+    std::unique_ptr<SpdyFrameIR> frame_ir)
+    : framer_(framer), frame_ir_(std::move(frame_ir)) {}
+
+SpdyFramer::SpdyControlFrameIterator::~SpdyControlFrameIterator() {}
+
+size_t SpdyFramer::SpdyControlFrameIterator::NextFrame(
+    ZeroCopyOutputBuffer* output) {
+  size_t size_written = framer_->SerializeFrame(*frame_ir_, output);
+  frame_ir_.reset();
+  return size_written;
+}
+
+bool SpdyFramer::SpdyControlFrameIterator::HasNextFrame() const {
+  return frame_ir_ != nullptr;
+}
+
+// TODO(yasong): remove all the down_casts.
+std::unique_ptr<SpdyFrameSequence> SpdyFramer::CreateIterator(
+    SpdyFramer* framer,
+    std::unique_ptr<SpdyFrameIR> frame_ir) {
+  std::unique_ptr<SpdyFrameSequence> result = nullptr;
+  switch (frame_ir->frame_type()) {
+    case SpdyFrameType::DATA: {
+      DLOG(ERROR) << "Data should use a different path to write";
+      result = nullptr;
+      break;
+    }
+    case SpdyFrameType::HEADERS: {
+      result = base::MakeUnique<SpdyHeaderFrameIterator>(
+          framer,
+          base::WrapUnique(static_cast<SpdyHeadersIR*>(frame_ir.get())));
+      break;
+    }
+    case SpdyFrameType::PUSH_PROMISE: {
+      result = base::MakeUnique<SpdyPushPromiseFrameIterator>(
+          framer,
+          base::WrapUnique(static_cast<SpdyPushPromiseIR*>(frame_ir.get())));
+      break;
+    }
+    default: {
+      result = base::MakeUnique<SpdyControlFrameIterator>(framer,
+                                                          std::move(frame_ir));
+    }
+  }
+  return result;
+}
+
 void SpdyFramer::SerializeDataBuilderHelper(const SpdyDataIR& data_ir,
                                             uint8_t* flags,
                                             int* num_padding_fields,
@@ -2705,7 +2743,7 @@
       : framer_(framer), output_(output), result_(false) {}
   ~FrameSerializationVisitorWithOutput() override {}
 
-  bool Result() { return result_; }
+  size_t Result() { return result_; }
 
   void VisitData(const SpdyDataIR& data) override {
     result_ = framer_->SerializeData(data, output_);
@@ -2749,11 +2787,12 @@
 
 }  // namespace
 
-bool SpdyFramer::SerializeFrame(const SpdyFrameIR& frame,
-                                ZeroCopyOutputBuffer* output) {
+size_t SpdyFramer::SerializeFrame(const SpdyFrameIR& frame,
+                                  ZeroCopyOutputBuffer* output) {
   FrameSerializationVisitorWithOutput visitor(this, output);
+  size_t free_bytes_before = output->BytesFree();
   frame.Visit(&visitor);
-  return visitor.Result();
+  return visitor.Result() ? free_bytes_before - output->BytesFree() : 0;
 }
 
 size_t SpdyFramer::GetNumberRequiredContinuationFrames(size_t size) {
@@ -2884,7 +2923,7 @@
 
 HpackEncoder* SpdyFramer::GetHpackEncoder() {
   if (hpack_encoder_.get() == nullptr) {
-    hpack_encoder_.reset(new HpackEncoder(ObtainHpackHuffmanTable()));
+    hpack_encoder_ = SpdyMakeUnique<HpackEncoder>(ObtainHpackHuffmanTable());
     if (!compression_enabled()) {
       hpack_encoder_->DisableCompression();
     }
@@ -2895,9 +2934,9 @@
 HpackDecoderInterface* SpdyFramer::GetHpackDecoder() {
   if (hpack_decoder_.get() == nullptr) {
     if (FLAGS_chromium_http2_flag_spdy_use_hpack_decoder3) {
-      hpack_decoder_.reset(new HpackDecoder3());
+      hpack_decoder_ = SpdyMakeUnique<HpackDecoder3>();
     } else {
-      hpack_decoder_.reset(new HpackDecoder());
+      hpack_decoder_ = SpdyMakeUnique<HpackDecoder>();
     }
   }
   return hpack_decoder_.get();
diff --git a/src/net/spdy/core/spdy_framer.h b/src/net/spdy/core/spdy_framer.h
index caa0cc4..7407914 100644
--- a/src/net/spdy/core/spdy_framer.h
+++ b/src/net/spdy/core/spdy_framer.h
@@ -14,7 +14,6 @@
 #include <utility>
 
 #include "base/sys_byteorder.h"
-#include "net/base/net_export.h"
 #include "net/spdy/chromium/spdy_flags.h"
 #include "net/spdy/core/hpack/hpack_decoder_interface.h"
 #include "net/spdy/core/hpack/hpack_encoder.h"
@@ -23,6 +22,7 @@
 #include "net/spdy/core/spdy_headers_handler_interface.h"
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/core/zero_copy_output_buffer.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -45,6 +45,8 @@
 
 class TestSpdyVisitor;
 class SpdyFramerPeer;
+class SpdyFramerTest_MultipleContinuationFramesWithIterator_Test;
+class SpdyFramerTest_PushPromiseFramesWithIterator_Test;
 
 }  // namespace test
 
@@ -64,7 +66,7 @@
 //      been delivered for the control frame.
 // During step 2, if the visitor is not interested in accepting the header data,
 // it should return a no-op implementation of SpdyHeadersHandlerInterface.
-class NET_EXPORT_PRIVATE SpdyFramerVisitorInterface {
+class SPDY_EXPORT_PRIVATE SpdyFramerVisitorInterface {
  public:
   virtual ~SpdyFramerVisitorInterface() {}
 
@@ -210,7 +212,7 @@
   virtual bool OnUnknownFrame(SpdyStreamId stream_id, uint8_t frame_type) = 0;
 };
 
-class SpdyFrameSequence {
+class SPDY_EXPORT_PRIVATE SpdyFrameSequence {
  public:
   virtual ~SpdyFrameSequence() {}
 
@@ -247,7 +249,7 @@
 // operates.
 //
 // Most HTTP2 implementations need not bother with this interface at all.
-class NET_EXPORT_PRIVATE SpdyFramerDebugVisitorInterface {
+class SPDY_EXPORT_PRIVATE SpdyFramerDebugVisitorInterface {
  public:
   virtual ~SpdyFramerDebugVisitorInterface() {}
 
@@ -268,7 +270,7 @@
                                         size_t frame_len) {}
 };
 
-class NET_EXPORT_PRIVATE SpdyFramer {
+class SPDY_EXPORT_PRIVATE SpdyFramer {
  public:
   // HTTP2 states.
   enum SpdyState {
@@ -391,90 +393,10 @@
                                 size_t header_length,
                                 SpdyHeaderBlock* block) const;
 
-  // Iteratively converts a SpdyFrameWithHeaderBlockIR into an appropriate
-  // sequence of SpdySerializedFrames.
-  class NET_EXPORT_PRIVATE SpdyFrameIterator {
-   public:
-    // Creates an iterator with the provided framer.
-    // Does not take ownership of |framer|.
-    // |framer| must outlive this instance.
-    explicit SpdyFrameIterator(SpdyFramer* framer);
-    virtual ~SpdyFrameIterator();
-
-    // Serializes the next frame in the sequence to |output|. Returns the number
-    // of bytes written to |output|.
-    virtual bool NextFrame(ZeroCopyOutputBuffer* output);
-
-    // Returns true iff there is at least one more frame in the sequence.
-    virtual bool HasNextFrame() const;
-
-    // SpdyFrameIterator is neither copyable nor movable.
-    SpdyFrameIterator(const SpdyFrameIterator&) = delete;
-    SpdyFrameIterator& operator=(const SpdyFrameIterator&) = delete;
-
-   protected:
-    virtual SpdyFrameWithHeaderBlockIR* GetIR() const = 0;
-    virtual size_t GetFrameSizeSansBlock() const = 0;
-    virtual bool SerializeGivenEncoding(const SpdyString& encoding,
-                                        ZeroCopyOutputBuffer* output) const = 0;
-
-    SpdyFramer* GetFramer() const { return framer_; }
-    void SetEncoder(SpdyFrameWithHeaderBlockIR* ir) {
-      encoder_ =
-          framer_->GetHpackEncoder()->EncodeHeaderSet(ir->header_block());
-    }
-
-   private:
-    SpdyFramer* const framer_;
-    std::unique_ptr<HpackEncoder::ProgressiveEncoder> encoder_;
-    bool is_first_frame_;
-    bool has_next_frame_;
-
-    // Field for debug reporting.
-    size_t debug_total_size_;
-  };
-
-  // Iteratively converts a SpdyHeadersIR (with a possibly huge
-  // SpdyHeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
-  // write to the output.
-  class NET_EXPORT_PRIVATE SpdyHeaderFrameIterator : public SpdyFrameIterator {
-   public:
-    // Does not take ownership of |framer|. Take ownership of |headers_ir|.
-    SpdyHeaderFrameIterator(SpdyFramer* framer,
-                            std::unique_ptr<SpdyHeadersIR> headers_ir);
-
-    ~SpdyHeaderFrameIterator() override;
-
-   private:
-    SpdyFrameWithHeaderBlockIR* GetIR() const override;
-    size_t GetFrameSizeSansBlock() const override;
-    bool SerializeGivenEncoding(const SpdyString& encoding,
-                                ZeroCopyOutputBuffer* output) const override;
-
-    const std::unique_ptr<SpdyHeadersIR> headers_ir_;
-  };
-
-  // Iteratively converts a SpdyPushPromiseIR (with a possibly huge
-  // SpdyHeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
-  // write to the output.
-  class NET_EXPORT_PRIVATE SpdyPushPromiseFrameIterator
-      : public SpdyFrameIterator {
-   public:
-    // Does not take ownership of |framer|. Take ownership of |push_promise_ir|.
-    SpdyPushPromiseFrameIterator(
-        SpdyFramer* framer,
-        std::unique_ptr<SpdyPushPromiseIR> push_promise_ir);
-
-    ~SpdyPushPromiseFrameIterator() override;
-
-   private:
-    SpdyFrameWithHeaderBlockIR* GetIR() const override;
-    size_t GetFrameSizeSansBlock() const override;
-    bool SerializeGivenEncoding(const SpdyString& encoding,
-                                ZeroCopyOutputBuffer* output) const override;
-
-    const std::unique_ptr<SpdyPushPromiseIR> push_promise_ir_;
-  };
+  // Create a SpdyFrameSequence to serialize |frame_ir|.
+  static std::unique_ptr<SpdyFrameSequence> CreateIterator(
+      SpdyFramer* framer,
+      std::unique_ptr<SpdyFrameIR> frame_ir);
 
   // Serialize a data frame.
   SpdySerializedFrame SerializeData(const SpdyDataIR& data) const;
@@ -595,7 +517,7 @@
                          ZeroCopyOutputBuffer* output) const;
 
   // Serialize a frame of unknown type.
-  bool SerializeFrame(const SpdyFrameIR& frame, ZeroCopyOutputBuffer* output);
+  size_t SerializeFrame(const SpdyFrameIR& frame, ZeroCopyOutputBuffer* output);
 
   // Returns whether this SpdyFramer will compress header blocks using HPACK.
   bool compression_enabled() const {
@@ -692,6 +614,116 @@
   friend class SpdyStreamTest;
   friend class test::TestSpdyVisitor;
   friend class test::SpdyFramerPeer;
+  friend class test::SpdyFramerTest_MultipleContinuationFramesWithIterator_Test;
+  friend class test::SpdyFramerTest_PushPromiseFramesWithIterator_Test;
+
+  // Iteratively converts a SpdyFrameIR into an appropriate sequence of Spdy
+  // frames.
+  // Example usage:
+  // std::unique_ptr<SpdyFrameSequence> it = CreateIterator(framer, frame_ir);
+  // while (it->HasNextFrame()) {
+  //   if(it->NextFrame(output) == 0) {
+  //     // Write failed;
+  //   }
+  // }
+  class SPDY_EXPORT_PRIVATE SpdyFrameIterator : public SpdyFrameSequence {
+   public:
+    // Creates an iterator with the provided framer. Does not take ownership of
+    // |framer|, |framer| must outlive this instance.
+    explicit SpdyFrameIterator(SpdyFramer* framer);
+    ~SpdyFrameIterator() override;
+
+    // Serializes the next frame in the sequence to |output|. Returns the number
+    // of bytes written to |output|.
+    size_t NextFrame(ZeroCopyOutputBuffer* output) override;
+
+    // Returns true iff there is at least one more frame in the sequence.
+    bool HasNextFrame() const override;
+
+    // SpdyFrameIterator is neither copyable nor movable.
+    SpdyFrameIterator(const SpdyFrameIterator&) = delete;
+    SpdyFrameIterator& operator=(const SpdyFrameIterator&) = delete;
+
+   protected:
+    virtual SpdyFrameWithHeaderBlockIR* GetIR() const = 0;
+    virtual size_t GetFrameSizeSansBlock() const = 0;
+    virtual bool SerializeGivenEncoding(const SpdyString& encoding,
+                                        ZeroCopyOutputBuffer* output) const = 0;
+
+    SpdyFramer* GetFramer() const { return framer_; }
+    void SetEncoder(SpdyFrameWithHeaderBlockIR* ir) {
+      encoder_ =
+          framer_->GetHpackEncoder()->EncodeHeaderSet(ir->header_block());
+    }
+
+   private:
+    SpdyFramer* const framer_;
+    std::unique_ptr<HpackEncoder::ProgressiveEncoder> encoder_;
+    bool is_first_frame_;
+    bool has_next_frame_;
+
+    // Field for debug reporting.
+    size_t debug_total_size_;
+  };
+
+  // Iteratively converts a SpdyHeadersIR (with a possibly huge
+  // SpdyHeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
+  // write to the output.
+  class SPDY_EXPORT_PRIVATE SpdyHeaderFrameIterator : public SpdyFrameIterator {
+   public:
+    // Does not take ownership of |framer|. Take ownership of |headers_ir|.
+    SpdyHeaderFrameIterator(SpdyFramer* framer,
+                            std::unique_ptr<SpdyHeadersIR> headers_ir);
+
+    ~SpdyHeaderFrameIterator() override;
+
+   private:
+    SpdyFrameWithHeaderBlockIR* GetIR() const override;
+    size_t GetFrameSizeSansBlock() const override;
+    bool SerializeGivenEncoding(const SpdyString& encoding,
+                                ZeroCopyOutputBuffer* output) const override;
+
+    const std::unique_ptr<SpdyHeadersIR> headers_ir_;
+  };
+
+  // Iteratively converts a SpdyPushPromiseIR (with a possibly huge
+  // SpdyHeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
+  // write to the output.
+  class SPDY_EXPORT_PRIVATE SpdyPushPromiseFrameIterator
+      : public SpdyFrameIterator {
+   public:
+    // Does not take ownership of |framer|. Take ownership of |push_promise_ir|.
+    SpdyPushPromiseFrameIterator(
+        SpdyFramer* framer,
+        std::unique_ptr<SpdyPushPromiseIR> push_promise_ir);
+
+    ~SpdyPushPromiseFrameIterator() override;
+
+   private:
+    SpdyFrameWithHeaderBlockIR* GetIR() const override;
+    size_t GetFrameSizeSansBlock() const override;
+    bool SerializeGivenEncoding(const SpdyString& encoding,
+                                ZeroCopyOutputBuffer* output) const override;
+
+    const std::unique_ptr<SpdyPushPromiseIR> push_promise_ir_;
+  };
+
+  // Converts a SpdyFrameIR into one Spdy frame (a sequence of length 1), and
+  // write it to the output.
+  class SpdyControlFrameIterator : public SpdyFrameSequence {
+   public:
+    SpdyControlFrameIterator(SpdyFramer* framer,
+                             std::unique_ptr<SpdyFrameIR> frame_ir);
+    ~SpdyControlFrameIterator() override;
+
+    size_t NextFrame(ZeroCopyOutputBuffer* output) override;
+
+    bool HasNextFrame() const override;
+
+   private:
+    SpdyFramer* const framer_;
+    std::unique_ptr<SpdyFrameIR> frame_ir_;
+  };
 
  private:
   class CharBuffer {
diff --git a/src/net/spdy/core/spdy_framer_decoder_adapter.cc b/src/net/spdy/core/spdy_framer_decoder_adapter.cc
index 3c4698b..df32715 100644
--- a/src/net/spdy/core/spdy_framer_decoder_adapter.cc
+++ b/src/net/spdy/core/spdy_framer_decoder_adapter.cc
@@ -10,6 +10,7 @@
 #include "base/format_macros.h"
 #include "base/logging.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "net/spdy/platform/api/spdy_string_utils.h"
 
 #if defined(COMPILER_GCC)
@@ -168,84 +169,4 @@
   return visitor_->OnUnknownFrame(stream_id, frame_type);
 }
 
-class NestedSpdyFramerDecoder : public SpdyFramerDecoderAdapter {
-  typedef SpdyFramer::SpdyState SpdyState;
-  typedef SpdyFramer::SpdyFramerError SpdyFramerError;
-
- public:
-  explicit NestedSpdyFramerDecoder(SpdyFramer* outer)
-      : framer_(nullptr,
-                outer->compression_enabled() ? SpdyFramer::ENABLE_COMPRESSION
-                                             : SpdyFramer::DISABLE_COMPRESSION),
-        outer_(outer) {
-    DVLOG(1) << PRETTY_THIS;
-  }
-  ~NestedSpdyFramerDecoder() override { DVLOG(1) << PRETTY_THIS; }
-
-  // Wrap the visitor in a SpdyFramerVisitorAdapter so that the correct
-  // SpdyFramer instance is passed to OnError. Passes the call on to the
-  // base adapter class and wrapped SpdyFramer.
-  void set_visitor(SpdyFramerVisitorInterface* visitor) override {
-    visitor_adapter_.reset(new SpdyFramerVisitorAdapter(visitor, outer_));
-    SpdyFramerDecoderAdapter::set_visitor(visitor_adapter_.get());
-    framer_.set_visitor(visitor_adapter_.get());
-  }
-
-  void set_extension_visitor(ExtensionVisitorInterface* visitor) override {
-    framer_.set_extension_visitor(visitor);
-  }
-
-  // Passes the call on to the base adapter class and wrapped SpdyFramer.
-  void set_debug_visitor(
-      SpdyFramerDebugVisitorInterface* debug_visitor) override {
-    SpdyFramerDecoderAdapter::set_debug_visitor(debug_visitor);
-    framer_.set_debug_visitor(debug_visitor);
-  }
-
-  // Passes the call on to the wrapped SpdyFramer.
-  void SetDecoderHeaderTableDebugVisitor(
-      std::unique_ptr<HpackHeaderTable::DebugVisitorInterface> visitor)
-      override {
-        framer_.SetDecoderHeaderTableDebugVisitor(std::move(visitor));
-  }
-
-  // Passes the call on to the base adapter class and wrapped SpdyFramer.
-  void set_process_single_input_frame(bool v) override {
-    SpdyFramerDecoderAdapter::set_process_single_input_frame(v);
-    framer_.set_process_single_input_frame(v);
-  }
-
-  size_t ProcessInput(const char* data, size_t len) override {
-    DVLOG(2) << "ProcessInput(data, " << len << ")";
-    size_t result = framer_.ProcessInput(data, len);
-    DVLOG(2) << "ProcessInput(data, " << len << ")  returning " << result;
-    return result;
-  }
-
-  void Reset() override { framer_.Reset(); }
-
-  SpdyFramer::SpdyFramerError spdy_framer_error() const override {
-    return framer_.spdy_framer_error();
-  }
-  SpdyFramer::SpdyState state() const override { return framer_.state(); }
-  bool probable_http_response() const override {
-    return framer_.probable_http_response();
-  }
-  size_t EstimateMemoryUsage() const override {
-    // Skip |visitor_adapter_| because it doesn't allocate.
-    return SpdyEstimateMemoryUsage(framer_);
-  }
-
- private:
-  SpdyFramer framer_;
-  SpdyFramer* const outer_;
-  std::unique_ptr<SpdyFramerVisitorAdapter> visitor_adapter_;
-};
-
-std::unique_ptr<SpdyFramerDecoderAdapter> CreateNestedSpdyFramerDecoder(
-    SpdyFramer* outer) {
-  return std::unique_ptr<SpdyFramerDecoderAdapter>(
-      new NestedSpdyFramerDecoder(outer));
-}
-
 }  // namespace net
diff --git a/src/net/spdy/core/spdy_framer_decoder_adapter.h b/src/net/spdy/core/spdy_framer_decoder_adapter.h
index a7a3da4..ab188bd 100644
--- a/src/net/spdy/core/spdy_framer_decoder_adapter.h
+++ b/src/net/spdy/core/spdy_framer_decoder_adapter.h
@@ -88,14 +88,6 @@
   bool process_single_input_frame_ = false;
 };
 
-// Create an instance of NestedSpdyFramerDecoder, which implements
-// SpdyFramerDecoderAdapter, delegating to a SpdyFramer instance that will
-// actually perform the decoding (when requested via ProcessInput). This allows
-// us to test the SpdyFramerDecoderAdapter mechanism without changing the type
-// of decoder that is used.
-std::unique_ptr<SpdyFramerDecoderAdapter> CreateNestedSpdyFramerDecoder(
-    SpdyFramer* outer);
-
 // SpdyFramerVisitorInterface::OnError needs the original SpdyFramer* to
 // pass to the visitor (really a listener). This implementation takes care of
 // that while passing along all other calls unmodified.
diff --git a/src/net/spdy/core/spdy_framer_test.cc b/src/net/spdy/core/spdy_framer_test.cc
index 66e4f4a..31dcb40 100644
--- a/src/net/spdy/core/spdy_framer_test.cc
+++ b/src/net/spdy/core/spdy_framer_test.cc
@@ -29,6 +29,7 @@
 #include "net/spdy/core/spdy_frame_reader.h"
 #include "net/spdy/core/spdy_protocol.h"
 #include "net/spdy/core/spdy_test_utils.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
@@ -95,7 +96,7 @@
     SpdyHeadersHandlerInterface* OnHeaderFrameStart(
         SpdyStreamId stream_id) override {
       if (headers_handler_ == nullptr) {
-        headers_handler_ = base::MakeUnique<TestHeadersHandler>();
+        headers_handler_ = SpdyMakeUnique<TestHeadersHandler>();
       }
       return headers_handler_.get();
     }
@@ -116,7 +117,7 @@
                    bool exclusive,
                    bool fin,
                    bool end) override {
-      auto headers = base::MakeUnique<SpdyHeadersIR>(stream_id);
+      auto headers = SpdyMakeUnique<SpdyHeadersIR>(stream_id);
       headers->set_has_priority(has_priority);
       headers->set_weight(weight);
       headers->set_parent_stream_id(parent_stream_id);
@@ -128,8 +129,7 @@
     void OnPushPromise(SpdyStreamId stream_id,
                        SpdyStreamId promised_stream_id,
                        bool end) override {
-      frame_ =
-          base::MakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id);
+      frame_ = SpdyMakeUnique<SpdyPushPromiseIR>(stream_id, promised_stream_id);
     }
 
     // TODO(birenroy): Add support for CONTINUATION.
@@ -235,7 +235,7 @@
   // header serialization path.
   static std::unique_ptr<SpdyHeadersIR> CloneSpdyHeadersIR(
       const SpdyHeadersIR& headers) {
-    auto newHeaders = base::MakeUnique<SpdyHeadersIR>(
+    auto newHeaders = SpdyMakeUnique<SpdyHeadersIR>(
         headers.stream_id(), headers.header_block().Clone());
     newHeaders->set_fin(headers.fin());
     newHeaders->set_has_priority(headers.has_priority());
@@ -262,7 +262,7 @@
     SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers));
     while (it.HasNextFrame()) {
       size_t size_before = frame_list_buffer.Size();
-      it.NextFrame(&frame_list_buffer);
+      EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u);
       frame_list.emplace_back(
           SpdySerializedFrame(frame_list_buffer.Begin() + size_before,
                               frame_list_buffer.Size() - size_before, false));
@@ -292,7 +292,7 @@
     SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers));
     while (it.HasNextFrame()) {
       size_t size_before = frame_list_buffer.Size();
-      it.NextFrame(&frame_list_buffer);
+      EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u);
       frame_list.emplace_back(
           SpdySerializedFrame(frame_list_buffer.Begin() + size_before,
                               frame_list_buffer.Size() - size_before, false));
@@ -305,7 +305,7 @@
 
   static std::unique_ptr<SpdyPushPromiseIR> CloneSpdyPushPromiseIR(
       const SpdyPushPromiseIR& push_promise) {
-    auto new_push_promise = base::MakeUnique<SpdyPushPromiseIR>(
+    auto new_push_promise = SpdyMakeUnique<SpdyPushPromiseIR>(
         push_promise.stream_id(), push_promise.promised_stream_id(),
         push_promise.header_block().Clone());
     new_push_promise->set_fin(push_promise.fin());
@@ -332,7 +332,7 @@
         framer, CloneSpdyPushPromiseIR(push_promise));
     while (it.HasNextFrame()) {
       size_t size_before = frame_list_buffer.Size();
-      it.NextFrame(&frame_list_buffer);
+      EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u);
       frame_list.emplace_back(
           SpdySerializedFrame(frame_list_buffer.Begin() + size_before,
                               frame_list_buffer.Size() - size_before, false));
@@ -365,7 +365,7 @@
         framer, CloneSpdyPushPromiseIR(push_promise));
     while (it.HasNextFrame()) {
       size_t size_before = frame_list_buffer.Size();
-      it.NextFrame(&frame_list_buffer);
+      EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u);
       frame_list.emplace_back(
           SpdySerializedFrame(frame_list_buffer.Begin() + size_before,
                               frame_list_buffer.Size() - size_before, false));
@@ -396,7 +396,6 @@
         continuation_count_(0),
         altsvc_count_(0),
         priority_count_(0),
-        test_altsvc_ir_(0),
         on_unknown_frame_result_(false),
         last_window_update_stream_(0),
         last_window_update_delta_(0),
@@ -457,7 +456,7 @@
   SpdyHeadersHandlerInterface* OnHeaderFrameStart(
       SpdyStreamId stream_id) override {
     if (headers_handler_ == nullptr) {
-      headers_handler_ = base::MakeUnique<TestHeadersHandler>();
+      headers_handler_ = SpdyMakeUnique<TestHeadersHandler>();
     }
     return headers_handler_.get();
   }
@@ -551,12 +550,12 @@
                     altsvc_vector) override {
     VLOG(1) << "OnAltSvc(" << stream_id << ", \"" << origin
             << "\", altsvc_vector)";
-    test_altsvc_ir_.set_stream_id(stream_id);
+    test_altsvc_ir_ = SpdyMakeUnique<SpdyAltSvcIR>(stream_id);
     if (origin.length() > 0) {
-      test_altsvc_ir_.set_origin(SpdyString(origin));
+      test_altsvc_ir_->set_origin(SpdyString(origin));
     }
     for (const auto& altsvc : altsvc_vector) {
-      test_altsvc_ir_.add_altsvc(altsvc);
+      test_altsvc_ir_->add_altsvc(altsvc);
     }
     ++altsvc_count_;
   }
@@ -664,7 +663,7 @@
   int continuation_count_;
   int altsvc_count_;
   int priority_count_;
-  SpdyAltSvcIR test_altsvc_ir_;
+  std::unique_ptr<SpdyAltSvcIR> test_altsvc_ir_;
   bool on_unknown_frame_result_;
   SpdyStreamId last_window_update_stream_;
   int last_window_update_delta_;
@@ -745,7 +744,7 @@
                          frame.size() - framer.GetHeadersMinimumSize());
 }
 
-enum DecoderChoice { DECODER_SELF, DECODER_NESTED, DECODER_HTTP2 };
+enum DecoderChoice { DECODER_SELF, DECODER_HTTP2 };
 enum HpackChoice { HPACK_DECODER_1, HPACK_DECODER_3 };
 enum Output { USE, NOT_USE };
 
@@ -759,15 +758,9 @@
     auto param = GetParam();
     switch (std::get<0>(param)) {
       case DECODER_SELF:
-        FLAGS_use_nested_spdy_framer_decoder = false;
-        FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter = false;
-        break;
-      case DECODER_NESTED:
-        FLAGS_use_nested_spdy_framer_decoder = true;
         FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter = false;
         break;
       case DECODER_HTTP2:
-        FLAGS_use_nested_spdy_framer_decoder = false;
         FLAGS_chromium_http2_flag_spdy_use_http2_frame_decoder_adapter = true;
         break;
     }
@@ -819,7 +812,6 @@
 INSTANTIATE_TEST_CASE_P(SpdyFramerTests,
                         SpdyFramerTest,
                         ::testing::Combine(::testing::Values(DECODER_SELF,
-                                                             DECODER_NESTED,
                                                              DECODER_HTTP2),
                                            ::testing::Values(HPACK_DECODER_1,
                                                              HPACK_DECODER_3),
@@ -1155,7 +1147,7 @@
   SpdyPriorityIR priority_ir(0, 1, 16, true);
   SpdySerializedFrame frame(framer.SerializeFrame(priority_ir));
   if (use_output_) {
-    ASSERT_TRUE(framer.SerializeFrame(priority_ir, &output_));
+    EXPECT_EQ(framer.SerializeFrame(priority_ir, &output_), frame.size());
     frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
   }
 
@@ -1253,7 +1245,7 @@
 
   SpdyContinuationIR continuation(0);
   auto some_nonsense_encoding =
-      base::MakeUnique<SpdyString>("some nonsense encoding");
+      SpdyMakeUnique<SpdyString>("some nonsense encoding");
   continuation.take_encoding(std::move(some_nonsense_encoding));
   continuation.set_end_headers(true);
   SpdySerializedFrame frame(framer.SerializeContinuation(continuation));
@@ -2526,7 +2518,7 @@
   SpdyHeaderBlock header_block;
   header_block["bar"] = "foo";
   header_block["foo"] = "bar";
-  auto buffer = base::MakeUnique<SpdyString>();
+  auto buffer = SpdyMakeUnique<SpdyString>();
   HpackEncoder encoder(ObtainHpackHuffmanTable());
   encoder.DisableCompression();
   encoder.EncodeHeaderSet(header_block, buffer.get());
@@ -2704,7 +2696,7 @@
       SpdyAltSvcWireFormat::VersionVector{24}));
   SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir));
   if (use_output_) {
-    ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_));
+    EXPECT_EQ(framer.SerializeFrame(altsvc_ir, &output_), frame.size());
     frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
   }
   CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
@@ -2725,7 +2717,7 @@
   SpdyPriorityIR priority_ir(2, 1, 17, true);
   SpdySerializedFrame frame(framer.SerializeFrame(priority_ir));
   if (use_output_) {
-    ASSERT_TRUE(framer.SerializeFrame(priority_ir, &output_));
+    EXPECT_EQ(framer.SerializeFrame(priority_ir, &output_), frame.size());
     frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
   }
   CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData));
@@ -2796,7 +2788,7 @@
 
 TEST_P(SpdyFramerTest, MultipleContinuationFramesWithIterator) {
   SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
-  auto headers = base::MakeUnique<SpdyHeadersIR>(1);
+  auto headers = SpdyMakeUnique<SpdyHeadersIR>(/* stream_id = */ 1);
   headers->set_padding_len(256);
 
   // Exact payload length will change with HPACK, but this should be long
@@ -2810,7 +2802,7 @@
   SpdyFramer::SpdyHeaderFrameIterator frame_it(&framer, std::move(headers));
 
   EXPECT_TRUE(frame_it.HasNextFrame());
-  EXPECT_TRUE(frame_it.NextFrame(&output_));
+  EXPECT_GT(frame_it.NextFrame(&output_), 0u);
   SpdySerializedFrame headers_frame(output_.Begin(), output_.Size(), false);
   EXPECT_EQ(headers_frame.size(),
             TestSpdyVisitor::sent_control_frame_max_size());
@@ -2827,7 +2819,7 @@
 
   output_.Reset();
   EXPECT_TRUE(frame_it.HasNextFrame());
-  EXPECT_TRUE(frame_it.NextFrame(&output_));
+  EXPECT_GT(frame_it.NextFrame(&output_), 0u);
   SpdySerializedFrame first_cont_frame(output_.Begin(), output_.Size(), false);
   EXPECT_EQ(first_cont_frame.size(),
             TestSpdyVisitor::sent_control_frame_max_size());
@@ -2843,7 +2835,7 @@
 
   output_.Reset();
   EXPECT_TRUE(frame_it.HasNextFrame());
-  EXPECT_TRUE(frame_it.NextFrame(&output_));
+  EXPECT_GT(frame_it.NextFrame(&output_), 0u);
   SpdySerializedFrame second_cont_frame(output_.Begin(), output_.Size(), false);
   EXPECT_LT(second_cont_frame.size(),
             TestSpdyVisitor::sent_control_frame_max_size());
@@ -2862,7 +2854,9 @@
 
 TEST_P(SpdyFramerTest, PushPromiseFramesWithIterator) {
   SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
-  auto push_promise = base::MakeUnique<SpdyPushPromiseIR>(1, 2);
+  auto push_promise =
+      SpdyMakeUnique<SpdyPushPromiseIR>(/* stream_id = */ 1,
+                                        /* promised_stream_id = */ 2);
   push_promise->set_padding_len(256);
 
   // Exact payload length will change with HPACK, but this should be long
@@ -2877,7 +2871,7 @@
                                                     std::move(push_promise));
 
   EXPECT_TRUE(frame_it.HasNextFrame());
-  EXPECT_TRUE(frame_it.NextFrame(&output_));
+  EXPECT_GT(frame_it.NextFrame(&output_), 0u);
   SpdySerializedFrame push_promise_frame(output_.Begin(), output_.Size(),
                                          false);
   EXPECT_EQ(push_promise_frame.size(),
@@ -2895,7 +2889,7 @@
 
   EXPECT_TRUE(frame_it.HasNextFrame());
   output_.Reset();
-  EXPECT_TRUE(frame_it.NextFrame(&output_));
+  EXPECT_GT(frame_it.NextFrame(&output_), 0u);
   SpdySerializedFrame first_cont_frame(output_.Begin(), output_.Size(), false);
 
   EXPECT_EQ(first_cont_frame.size(),
@@ -2911,7 +2905,7 @@
 
   EXPECT_TRUE(frame_it.HasNextFrame());
   output_.Reset();
-  EXPECT_TRUE(frame_it.NextFrame(&output_));
+  EXPECT_GT(frame_it.NextFrame(&output_), 0u);
   SpdySerializedFrame second_cont_frame(output_.Begin(), output_.Size(), false);
   EXPECT_LT(second_cont_frame.size(),
             TestSpdyVisitor::sent_control_frame_max_size());
@@ -2928,6 +2922,69 @@
   EXPECT_FALSE(frame_it.HasNextFrame());
 }
 
+class SpdyControlFrameIteratorTest : public ::testing::Test {
+ public:
+  SpdyControlFrameIteratorTest() : output_(output_buffer, kSize) {}
+
+  void RunTest(std::unique_ptr<SpdyFrameIR> ir) {
+    SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
+    SpdySerializedFrame frame(framer.SerializeFrame(*ir));
+    std::unique_ptr<SpdyFrameSequence> it =
+        SpdyFramer::CreateIterator(&framer, std::move(ir));
+    EXPECT_TRUE(it->HasNextFrame());
+    EXPECT_EQ(it->NextFrame(&output_), frame.size());
+    EXPECT_FALSE(it->HasNextFrame());
+  }
+
+ private:
+  ArrayOutputBuffer output_;
+};
+
+TEST_F(SpdyControlFrameIteratorTest, RstStreamFrameWithIterator) {
+  auto ir = base::MakeUnique<SpdyRstStreamIR>(0, ERROR_CODE_PROTOCOL_ERROR);
+  RunTest(std::move(ir));
+}
+
+TEST_F(SpdyControlFrameIteratorTest, SettingsFrameWithIterator) {
+  auto ir = base::MakeUnique<SpdySettingsIR>();
+  uint32_t kValue = 0x0a0b0c0d;
+  SpdySettingsIds kId = SETTINGS_INITIAL_WINDOW_SIZE;
+  ir->AddSetting(kId, kValue);
+  RunTest(std::move(ir));
+}
+
+TEST_F(SpdyControlFrameIteratorTest, PingFrameWithIterator) {
+  const SpdyPingId kPingId = 0x123456789abcdeffULL;
+  auto ir = base::MakeUnique<SpdyPingIR>(kPingId);
+  RunTest(std::move(ir));
+}
+
+TEST_F(SpdyControlFrameIteratorTest, GoAwayFrameWithIterator) {
+  auto ir = base::MakeUnique<SpdyGoAwayIR>(0, ERROR_CODE_NO_ERROR, "GA");
+  RunTest(std::move(ir));
+}
+
+TEST_F(SpdyControlFrameIteratorTest, WindowUpdateFrameWithIterator) {
+  auto ir = base::MakeUnique<SpdyWindowUpdateIR>(1, 1);
+  RunTest(std::move(ir));
+}
+
+TEST_F(SpdyControlFrameIteratorTest, AtlSvcFrameWithIterator) {
+  auto ir = base::MakeUnique<SpdyAltSvcIR>(3);
+  ir->set_origin("origin");
+  ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService(
+      "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector()));
+  ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService(
+      "p\"=i:d", "h_\\o\"st", 123, 42,
+      SpdyAltSvcWireFormat::VersionVector{24}));
+  RunTest(std::move(ir));
+}
+
+TEST_F(SpdyControlFrameIteratorTest, PriorityFrameWithIterator) {
+  auto ir = base::MakeUnique<SpdyPriorityIR>(2, 1, 17, true);
+  RunTest(std::move(ir));
+}
+
 TEST_P(SpdyFramerTest, TooLargePushPromiseFrameUsesContinuation) {
   SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
   SpdyPushPromiseIR push_promise(1, 2);
@@ -4380,7 +4437,7 @@
   SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir));
   if (use_output_) {
     output_.Reset();
-    ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_));
+    EXPECT_GT(framer.SerializeFrame(altsvc_ir, &output_), 0u);
     frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
   }
   framer.ProcessInput(frame.data(), frame.size());
@@ -4435,7 +4492,7 @@
   SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir));
   if (use_output_) {
     output_.Reset();
-    ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_));
+    EXPECT_GT(framer.SerializeFrame(altsvc_ir, &output_), 0u);
     frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false);
   }
   framer.ProcessInput(frame.data(), frame.size());
@@ -4491,9 +4548,10 @@
   }
   EXPECT_EQ(0, visitor.error_count_);
   EXPECT_EQ(1, visitor.altsvc_count_);
-  ASSERT_EQ(2u, visitor.test_altsvc_ir_.altsvc_vector().size());
-  EXPECT_TRUE(visitor.test_altsvc_ir_.altsvc_vector()[0] == altsvc1);
-  EXPECT_TRUE(visitor.test_altsvc_ir_.altsvc_vector()[1] == altsvc2);
+  ASSERT_NE(nullptr, visitor.test_altsvc_ir_);
+  ASSERT_EQ(2u, visitor.test_altsvc_ir_->altsvc_vector().size());
+  EXPECT_TRUE(visitor.test_altsvc_ir_->altsvc_vector()[0] == altsvc1);
+  EXPECT_TRUE(visitor.test_altsvc_ir_->altsvc_vector()[1] == altsvc2);
 }
 
 // While RFC7838 Section 4 says that an ALTSVC frame on stream 0 with empty
@@ -4688,7 +4746,7 @@
 TEST_P(SpdyFramerTest, ProcessAllInput) {
   SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION);
   auto visitor =
-      base::MakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION);
+      SpdyMakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION);
   framer.set_visitor(visitor.get());
 
   // Create two input frames.
@@ -4774,7 +4832,7 @@
   for (size_t first_size = 0; first_size <= buf_size; ++first_size) {
     VLOG(1) << "first_size = " << first_size;
     auto visitor =
-        base::MakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION);
+        SpdyMakeUnique<TestSpdyVisitor>(SpdyFramer::DISABLE_COMPRESSION);
     framer.set_visitor(visitor.get());
 
     EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state());
diff --git a/src/net/spdy/core/spdy_header_block.cc b/src/net/spdy/core/spdy_header_block.cc
index 8475b2e..66d6f51 100644
--- a/src/net/spdy/core/spdy_header_block.cc
+++ b/src/net/spdy/core/spdy_header_block.cc
@@ -16,6 +16,7 @@
 #include "net/http/http_log_util.h"
 #include "net/log/net_log_capture_mode.h"
 #include "net/spdy/platform/api/spdy_estimate_memory_usage.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "net/spdy/platform/api/spdy_string_utils.h"
 
 namespace net {
@@ -321,8 +322,8 @@
 }
 
 SpdyHeaderBlock::Storage* SpdyHeaderBlock::GetStorage() {
-  if (!storage_) {
-    storage_.reset(new Storage);
+  if (storage_ == nullptr) {
+    storage_ = SpdyMakeUnique<Storage>();
   }
   return storage_.get();
 }
diff --git a/src/net/spdy/core/spdy_header_block.h b/src/net/spdy/core/spdy_header_block.h
index 4b97465..2ecacab 100644
--- a/src/net/spdy/core/spdy_header_block.h
+++ b/src/net/spdy/core/spdy_header_block.h
@@ -15,8 +15,8 @@
 
 #include "base/macros.h"
 #include "net/base/linked_hash_map.h"
-#include "net/base/net_export.h"
 #include "net/log/net_log.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -44,13 +44,13 @@
 //
 // This implementation does not make much of an effort to minimize wasted space.
 // It's expected that keys are rarely deleted from a SpdyHeaderBlock.
-class NET_EXPORT SpdyHeaderBlock {
+class SPDY_EXPORT_PRIVATE SpdyHeaderBlock {
  private:
   class Storage;
 
   // Stores a list of value fragments that can be joined later with a
   // key-dependent separator.
-  class NET_EXPORT HeaderValue {
+  class SPDY_EXPORT_PRIVATE HeaderValue {
    public:
     HeaderValue(Storage* storage,
                 SpdyStringPiece key,
@@ -93,7 +93,7 @@
   // SpdyStringPiece>, even though the underlying MapType::value_type is
   // different. Dereferencing the iterator will result in memory allocation for
   // multi-value headers.
-  class NET_EXPORT iterator {
+  class SPDY_EXPORT_PRIVATE iterator {
    public:
     // The following type definitions fulfill the requirements for iterator
     // implementations.
@@ -187,7 +187,7 @@
   // This object provides automatic conversions that allow SpdyHeaderBlock to be
   // nearly a drop-in replacement for linked_hash_map<SpdyString, SpdyString>.
   // It reads data from or writes data to a SpdyHeaderBlock::Storage.
-  class NET_EXPORT ValueProxy {
+  class SPDY_EXPORT_PRIVATE ValueProxy {
    public:
     ~ValueProxy();
 
@@ -238,12 +238,12 @@
 
 // Writes |fragments| to |dst|, joined by |separator|. |dst| must be large
 // enough to hold the result. Returns the number of bytes written.
-NET_EXPORT size_t Join(char* dst,
-                       const std::vector<SpdyStringPiece>& fragments,
-                       SpdyStringPiece separator);
+SPDY_EXPORT_PRIVATE size_t Join(char* dst,
+                                const std::vector<SpdyStringPiece>& fragments,
+                                SpdyStringPiece separator);
 
 // Converts a SpdyHeaderBlock into NetLog event parameters.
-NET_EXPORT std::unique_ptr<base::Value> SpdyHeaderBlockNetLogCallback(
+SPDY_EXPORT_PRIVATE std::unique_ptr<base::Value> SpdyHeaderBlockNetLogCallback(
     const SpdyHeaderBlock* headers,
     NetLogCaptureMode capture_mode);
 
@@ -251,7 +251,7 @@
 // to |headers|.  |event_param| must have been created by
 // SpdyHeaderBlockNetLogCallback.  On failure, returns false and clears
 // |headers|.
-NET_EXPORT bool SpdyHeaderBlockFromNetLogParam(
+SPDY_EXPORT_PRIVATE bool SpdyHeaderBlockFromNetLogParam(
     const base::Value* event_param,
     SpdyHeaderBlock* headers);
 
diff --git a/src/net/spdy/core/spdy_header_indexing.cc b/src/net/spdy/core/spdy_header_indexing.cc
deleted file mode 100644
index b528735..0000000
--- a/src/net/spdy/core/spdy_header_indexing.cc
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/spdy/core/spdy_header_indexing.h"
-
-#include "net/spdy/core/spdy_bug_tracker.h"
-
-namespace net {
-
-int32_t FLAGS_gfe_spdy_indexing_set_bound = 50;
-int32_t FLAGS_gfe_spdy_tracking_set_bound = 1000;
-
-HeaderIndexing::HeaderIndexing()
-    : indexing_set_bound_(FLAGS_gfe_spdy_indexing_set_bound),
-      tracking_set_bound_(FLAGS_gfe_spdy_tracking_set_bound) {
-  SPDY_BUG_IF(indexing_set_bound_ >= tracking_set_bound_)
-      << "Tracking set should be larger than indexing set";
-}
-
-HeaderIndexing::~HeaderIndexing() {}
-
-void HeaderIndexing::CreateInitIndexingHeaders() {
-  const SpdyString initial_fields[] = {
-      // Estimated top 100 fields.
-      "alt-svc",
-      "date",
-      "cache-control",
-      "content-type",
-      "expires",
-      "location",
-      "x-xss-protection",
-      "p3p",
-      "set-cookie",
-      "alternate-protocol",
-      "last-modified",
-      "server",
-      "x-snapchat-request-id",
-      "content-disposition",
-      "strict-transport-security",
-      "x-content-type-options",
-      "content-security-policy",
-      "x-frame-options",
-      "x-snapchat-notice",
-      "pragma",
-      ":status",
-      "content-length",
-      "etag",
-      "x-cloud-trace-context",
-      "vary",
-      "access-control-expose-headers",
-      "content-encoding",
-      "access-control-allow-origin",
-      "age",
-      ":protocol",
-      "via",
-      "x-robots-tag",
-      "link",
-      "access-control-allow-headers",
-      "x-google-session-info",
-      "x-google-backends",
-      "x-google-gfe-request-trace",
-      "warning",
-      "x-guploader-uploadid",
-      "x-cup-server-proof",
-      "timing-allow-origin",
-      "x-google-trace",
-      "access-control-allow-credentials",
-      "google-delayed-impression",
-      "google-creative-id",
-      "access-control-allow-methods",
-      "x-ua-compatible",
-      "x-google-gfe-response-code-details-trace",
-      "google-lineitem-id",
-      "version",
-      "x-google-dos-service-trace",
-      "x-google-service",
-      "x-google-gfe-service-trace",
-      "sane-time-millis",
-      "x-google-netmon-label",
-      "x-google-apiary-auth-scopes",
-      "x-seed-signature",
-      "content-security-policy-report-only",
-      "x-auto-login",
-      "x-original-content-length",
-      "accept-ranges",
-      "x-goog-hash",
-      "x-google-gfe-response-body-transformations",
-      "cf-ray",
-      "x-content-security-policy-report-only",
-      "x-google-shellfish-status",
-      "x-amz-id-2",
-      "get-dictionary",
-      "grpc-message",
-      "x-hw",
-      "x-google-gfe-backend-request-info",
-      "x-goog-upload-header-x-google-session-info",
-      "x-amz-cf-id",
-      "x-powered-by",
-      "www-authenticate",
-      "access-control-max-age",
-      "x-spf-response-type",
-      "x-goog-meta-encoded_request",
-      "x-goog-generation",
-      "x-google-gslb-service",
-      "x-google-servertype",
-      "x-cache",
-      "x-chromium-appcache-fallback-override",
-      "x-goog-upload-url",
-      "x-goog-upload-control-url",
-      "content-range",
-      "x-seen-by",
-      "x-google-apps-framework-action",
-      "content-location",
-      "x-daystart",
-      "x-varnish",
-      "fastly-debug-digest",
-      "x-daynum",
-      "x-goog-stored-content-encoding",
-      "x-goog-storage-class",
-      "x-google-cookies-blocked",
-      "x-range-md5",
-      "x-served-by",
-      "x-client-wire-protocol",
-      "content-language",
-  };
-
-  indexing_set_.clear();
-  indexing_set_ =
-      HeaderSet(initial_fields, initial_fields + arraysize(initial_fields));
-  tracking_set_ =
-      HeaderSet(initial_fields, initial_fields + arraysize(initial_fields));
-}
-
-bool HeaderIndexing::ShouldIndex(SpdyStringPiece header,
-                                 SpdyStringPiece /* value */) {
-  total_header_count_++;
-  if (header.empty()) {
-    return false;
-  }
-  // header is in indexing set.
-  SpdyString header_str(header.data(), header.size());
-  if (indexing_set_.find(header_str) != indexing_set_.end()) {
-    return true;
-  }
-  // header not in indexing set. Check tracking set.
-  if (tracking_set_.find(header_str) != tracking_set_.end()) {
-    // Seen this header before. Add it to indexing set.
-    TryInsertHeader(std::move(header_str), &indexing_set_, indexing_set_bound_);
-    missed_header_in_tracking_++;
-  } else {
-    // Add header to tracking set.
-    TryInsertHeader(std::move(header_str), &tracking_set_, tracking_set_bound_);
-    missed_header_in_indexing_++;
-  }
-  return false;
-}
-
-void HeaderIndexing::TryInsertHeader(SpdyString&& header,
-                                     HeaderSet* set,
-                                     size_t bound) {
-  std::pair<HeaderSet::iterator, bool> result = set->insert(std::move(header));
-  if (set->size() > bound) {
-    // Reach the size limit. Remove the header next to the newly added header.
-    // If the new header is at the end, look for the "next" element at the
-    // beginning.
-    HeaderSet::iterator it = std::next(result.first);
-    if (it != set->end()) {
-      set->erase(it);
-    } else {
-      set->erase(set->begin());
-    }
-  }
-}
-
-}  // namespace net
diff --git a/src/net/spdy/core/spdy_header_indexing.h b/src/net/spdy/core/spdy_header_indexing.h
deleted file mode 100644
index 006ed85..0000000
--- a/src/net/spdy/core/spdy_header_indexing.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef NET_SPDY_CORE_SPDY_HEADER_INDEXING_H_
-#define NET_SPDY_CORE_SPDY_HEADER_INDEXING_H_
-
-#include <stdint.h>
-#include <memory>
-#include <unordered_set>
-#include <utility>
-
-#include "net/base/net_export.h"
-#include "net/spdy/platform/api/spdy_string.h"
-#include "net/spdy/platform/api/spdy_string_piece.h"
-
-namespace net {
-
-namespace test {
-class HeaderIndexingPeer;
-}
-
-NET_EXPORT_PRIVATE extern int32_t FLAGS_gfe_spdy_indexing_set_bound;
-NET_EXPORT_PRIVATE extern int32_t FLAGS_gfe_spdy_tracking_set_bound;
-
-// Maintain two headers sets: Indexing set and tracking
-// set. Call ShouldIndex() for each header to decide if to index it. If for some
-// connections, we decide to index all headers, we may still want to call
-// UpdateSets to log the headers into both sets.
-class NET_EXPORT HeaderIndexing {
- public:
-  using HeaderSet = std::unordered_set<SpdyString>;
-
-  HeaderIndexing();
-  ~HeaderIndexing();
-
-  void CreateInitIndexingHeaders();
-
-  // Decide if a header should be indexed. We only use |header|. Add |value| to
-  // be consistent with HPACK indexing policy interface.
-  bool ShouldIndex(SpdyStringPiece header, SpdyStringPiece value);
-
-  // Not to make the indexing decision but to update sets.
-  void UpdateSets(SpdyStringPiece header, SpdyStringPiece value) {
-    update_only_header_count_++;
-    ShouldIndex(header, value);
-  }
-
-  int64_t total_header_count() { return total_header_count_; }
-  int64_t update_only_header_count() { return update_only_header_count_; }
-  int64_t missed_headers_in_indexing() { return missed_header_in_indexing_; }
-  int64_t missed_headers_in_tracking() { return missed_header_in_tracking_; }
-
- private:
-  friend class test::HeaderIndexingPeer;
-  void TryInsertHeader(SpdyString&& header, HeaderSet* set, size_t bound);
-  // Headers to index.
-  HeaderSet indexing_set_;
-  // Headers seen so far.
-  HeaderSet tracking_set_;
-  const size_t indexing_set_bound_;
-  const size_t tracking_set_bound_;
-  int64_t total_header_count_ = 0;
-  int64_t update_only_header_count_ = 0;
-  int64_t missed_header_in_indexing_ = 0;
-  int64_t missed_header_in_tracking_ = 0;
-};
-
-}  // namespace net
-
-#endif  // NET_SPDY_CORE_SPDY_HEADER_INDEXING_H_
diff --git a/src/net/spdy/core/spdy_header_indexing_test.cc b/src/net/spdy/core/spdy_header_indexing_test.cc
deleted file mode 100644
index 62de255..0000000
--- a/src/net/spdy/core/spdy_header_indexing_test.cc
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (c) 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/spdy/core/spdy_header_indexing.h"
-
-#include "base/memory/ptr_util.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/platform_test.h"
-
-namespace net {
-
-namespace test {
-
-class HeaderIndexingPeer {
- public:
-  HeaderIndexingPeer() : hi_() {}
-
-  void CreateTestInit() {
-    SpdyString input[] = {"key1", "key2", "key3"};
-    hi_.indexing_set_ =
-        HeaderIndexing::HeaderSet(input, input + arraysize(input));
-    hi_.tracking_set_ =
-        HeaderIndexing::HeaderSet(input, input + arraysize(input));
-  }
-
-  bool ShouldIndex(SpdyStringPiece header) {
-    return hi_.ShouldIndex(header, "");
-  }
-
-  void CreateInitIndexingHeaders() { hi_.CreateInitIndexingHeaders(); }
-
-  void TryInsert(SpdyString&& header) {
-    hi_.TryInsertHeader(std::move(header), &(hi_.indexing_set_),
-                        hi_.indexing_set_bound_);
-  }
-
-  bool InTrackingSet(const SpdyString& str) {
-    return hi_.tracking_set_.find(str) != hi_.tracking_set_.end();
-  }
-
-  size_t indexing_set_size() const { return hi_.indexing_set_.size(); }
-
-  size_t tracking_set_size() const { return hi_.tracking_set_.size(); }
-
-  HeaderIndexing::HeaderSet* indexing_set() { return &(hi_.indexing_set_); }
-
-  HeaderIndexing::HeaderSet* tracking_set() { return &(hi_.tracking_set_); }
-
- private:
-  HeaderIndexing hi_;
-};
-
-class SpdyHeaderIndexingTest : public ::testing::Test {
- protected:
-  SpdyHeaderIndexingTest() {
-    FLAGS_gfe_spdy_indexing_set_bound = 3;
-    FLAGS_gfe_spdy_tracking_set_bound = 4;
-    hi_ = base::MakeUnique<HeaderIndexingPeer>();
-    hi_->CreateTestInit();
-  }
-  void SetUp() override {
-    EXPECT_EQ(3u, hi_->indexing_set_size());
-    EXPECT_EQ(3u, hi_->tracking_set_size());
-  }
-  std::unique_ptr<HeaderIndexingPeer> hi_;
-};
-
-TEST_F(SpdyHeaderIndexingTest, TestTryInsertHeader) {
-  SpdyString key("key4");
-  hi_->TryInsert(std::move(key));
-  EXPECT_EQ(3u, hi_->indexing_set_size());
-  EXPECT_TRUE(hi_->ShouldIndex("key4"));
-}
-
-TEST_F(SpdyHeaderIndexingTest, TestShouldIndex) {
-  SpdyString key3 = "key3";
-  SpdyString key4 = "key4";
-  SpdyString key5 = "key5";
-  // Cache hit.
-  EXPECT_TRUE(hi_->ShouldIndex(key3));
-  EXPECT_EQ(3u, hi_->indexing_set_size());
-  EXPECT_EQ(3u, hi_->tracking_set_size());
-
-  // Cache miss. Add to tracking set.
-  EXPECT_FALSE(hi_->ShouldIndex(key4));
-  EXPECT_EQ(3u, hi_->indexing_set_size());
-  EXPECT_EQ(4u, hi_->tracking_set_size());
-  EXPECT_TRUE(hi_->InTrackingSet(key4));
-  // Cache miss. Add to indexing set by kicking one entry out.
-  EXPECT_FALSE(hi_->ShouldIndex(key4));
-  EXPECT_EQ(3u, hi_->indexing_set_size());
-  EXPECT_EQ(4u, hi_->tracking_set_size());
-  EXPECT_TRUE(hi_->InTrackingSet(key4));
-  // Cache hit.
-  EXPECT_TRUE(hi_->ShouldIndex(key4));
-
-  // Cache miss. Add to tracking set by kicking one entry out.
-  EXPECT_FALSE(hi_->ShouldIndex(key5));
-  EXPECT_EQ(3u, hi_->indexing_set_size());
-  EXPECT_EQ(4u, hi_->tracking_set_size());
-  EXPECT_TRUE(hi_->ShouldIndex(key4));
-  EXPECT_TRUE(hi_->InTrackingSet(key5));
-  // Cache miss. Add to indexing set by kicking one entry out.
-  EXPECT_FALSE(hi_->ShouldIndex(key5));
-  EXPECT_EQ(3u, hi_->indexing_set_size());
-  EXPECT_EQ(4u, hi_->tracking_set_size());
-  EXPECT_TRUE(hi_->ShouldIndex(key5));
-  EXPECT_TRUE(hi_->InTrackingSet(key5));
-}
-
-TEST_F(SpdyHeaderIndexingTest, TestSetInit) {
-  hi_->CreateInitIndexingHeaders();
-  EXPECT_EQ(100u, hi_->indexing_set_size());
-  EXPECT_EQ(100u, hi_->tracking_set_size());
-  EXPECT_TRUE(hi_->ShouldIndex(":status"));
-  EXPECT_TRUE(hi_->InTrackingSet(":status"));
-  EXPECT_FALSE(hi_->InTrackingSet("NotValid"));
-  EXPECT_FALSE(hi_->ShouldIndex("NotValid"));
-}
-
-}  // namespace test
-
-}  // namespace net
diff --git a/src/net/spdy/core/spdy_headers_handler_interface.h b/src/net/spdy/core/spdy_headers_handler_interface.h
index caa7e6a..6144cae 100644
--- a/src/net/spdy/core/spdy_headers_handler_interface.h
+++ b/src/net/spdy/core/spdy_headers_handler_interface.h
@@ -7,14 +7,14 @@
 
 #include <stddef.h>
 
-#include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
 
 // This interface defines how an object that accepts header data should behave.
 // It is used by both SpdyHeadersBlockParser and HpackDecoder.
-class NET_EXPORT_PRIVATE SpdyHeadersHandlerInterface {
+class SPDY_EXPORT_PRIVATE SpdyHeadersHandlerInterface {
  public:
   virtual ~SpdyHeadersHandlerInterface() {}
 
diff --git a/src/net/spdy/core/spdy_pinnable_buffer_piece.cc b/src/net/spdy/core/spdy_pinnable_buffer_piece.cc
index 13b2115..84df880 100644
--- a/src/net/spdy/core/spdy_pinnable_buffer_piece.cc
+++ b/src/net/spdy/core/spdy_pinnable_buffer_piece.cc
@@ -4,6 +4,8 @@
 
 #include "net/spdy/core/spdy_pinnable_buffer_piece.h"
 
+#include <new>
+
 namespace net {
 
 SpdyPinnableBufferPiece::SpdyPinnableBufferPiece()
diff --git a/src/net/spdy/core/spdy_pinnable_buffer_piece.h b/src/net/spdy/core/spdy_pinnable_buffer_piece.h
index 2ade03e..3d54c92 100644
--- a/src/net/spdy/core/spdy_pinnable_buffer_piece.h
+++ b/src/net/spdy/core/spdy_pinnable_buffer_piece.h
@@ -9,7 +9,7 @@
 
 #include <memory>
 
-#include "net/base/net_export.h"
+#include "net/spdy/platform/api/spdy_export.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
 namespace net {
@@ -20,7 +20,7 @@
 // Represents a piece of consumed buffer which may (or may not) own its
 // underlying storage. Users may "pin" the buffer at a later time to ensure
 // a SpdyPinnableBufferPiece owns and retains storage of the buffer.
-struct NET_EXPORT_PRIVATE SpdyPinnableBufferPiece {
+struct SPDY_EXPORT_PRIVATE SpdyPinnableBufferPiece {
  public:
   SpdyPinnableBufferPiece();
   ~SpdyPinnableBufferPiece();
diff --git a/src/net/spdy/core/spdy_prefixed_buffer_reader.cc b/src/net/spdy/core/spdy_prefixed_buffer_reader.cc
index 4e650b3..2dddcc8 100644
--- a/src/net/spdy/core/spdy_prefixed_buffer_reader.cc
+++ b/src/net/spdy/core/spdy_prefixed_buffer_reader.cc
@@ -4,6 +4,8 @@
 
 #include "net/spdy/core/spdy_prefixed_buffer_reader.h"
 
+#include <new>
+
 #include "base/logging.h"
 
 namespace net {
diff --git a/src/net/spdy/core/spdy_prefixed_buffer_reader.h b/src/net/spdy/core/spdy_prefixed_buffer_reader.h
index 301c742..10c54b1 100644
--- a/src/net/spdy/core/spdy_prefixed_buffer_reader.h
+++ b/src/net/spdy/core/spdy_prefixed_buffer_reader.h
@@ -7,14 +7,14 @@
 
 #include <stddef.h>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/spdy_pinnable_buffer_piece.h"
+#include "net/spdy/platform/api/spdy_export.h"
 
 namespace net {
 
 // Reader class which simplifies reading contiguously from
 // from a disjoint buffer prefix & suffix.
-class NET_EXPORT_PRIVATE SpdyPrefixedBufferReader {
+class SPDY_EXPORT_PRIVATE SpdyPrefixedBufferReader {
  public:
   SpdyPrefixedBufferReader(const char* prefix, size_t prefix_length,
                            const char* suffix, size_t suffix_length);
diff --git a/src/net/spdy/core/spdy_protocol.cc b/src/net/spdy/core/spdy_protocol.cc
index 8d85ee1..9a0f52b 100644
--- a/src/net/spdy/core/spdy_protocol.cc
+++ b/src/net/spdy/core/spdy_protocol.cc
@@ -230,7 +230,7 @@
 
 SpdyDataIR::SpdyDataIR(SpdyStreamId stream_id, SpdyString data)
     : SpdyFrameWithFinIR(stream_id),
-      data_store_(base::MakeUnique<SpdyString>(std::move(data))),
+      data_store_(SpdyMakeUnique<SpdyString>(std::move(data))),
       data_(data_store_->data()),
       data_len_(data_store_->size()),
       padded_(false),
@@ -255,7 +255,7 @@
 
 SpdyRstStreamIR::SpdyRstStreamIR(SpdyStreamId stream_id,
                                  SpdyErrorCode error_code)
-    : SpdyFrameWithStreamIdIR(stream_id) {
+    : SpdyFrameIR(stream_id) {
   set_error_code(error_code);
 }
 
@@ -324,8 +324,8 @@
 }
 
 SpdyContinuationIR::SpdyContinuationIR(SpdyStreamId stream_id)
-    : SpdyFrameWithStreamIdIR(stream_id), end_headers_(false) {
-  encoding_ = base::MakeUnique<SpdyString>();
+    : SpdyFrameIR(stream_id), end_headers_(false) {
+  encoding_ = SpdyMakeUnique<SpdyString>();
 }
 
 SpdyContinuationIR::~SpdyContinuationIR() {}
@@ -362,9 +362,7 @@
   return SpdyFrameType::PUSH_PROMISE;
 }
 
-SpdyAltSvcIR::SpdyAltSvcIR(SpdyStreamId stream_id)
-    : SpdyFrameWithStreamIdIR(stream_id) {
-}
+SpdyAltSvcIR::SpdyAltSvcIR(SpdyStreamId stream_id) : SpdyFrameIR(stream_id) {}
 
 SpdyAltSvcIR::~SpdyAltSvcIR() {
 }
diff --git a/src/net/spdy/core/spdy_protocol.h b/src/net/spdy/core/spdy_protocol.h
index 5a8031e..8670405 100644
--- a/src/net/spdy/core/spdy_protocol.h
+++ b/src/net/spdy/core/spdy_protocol.h
@@ -16,17 +16,19 @@
 #include <limits>
 #include <map>
 #include <memory>
+#include <new>
 #include <utility>
 
 #include "base/compiler_specific.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/sys_byteorder.h"
-#include "net/base/net_export.h"
 #include "net/spdy/core/spdy_alt_svc_wire_format.h"
 #include "net/spdy/core/spdy_bitmasks.h"
 #include "net/spdy/core/spdy_bug_tracker.h"
 #include "net/spdy/core/spdy_header_block.h"
+#include "net/spdy/platform/api/spdy_export.h"
+#include "net/spdy/platform/api/spdy_ptr_util.h"
 #include "net/spdy/platform/api/spdy_string.h"
 #include "net/spdy/platform/api/spdy_string_piece.h"
 
@@ -65,7 +67,7 @@
 // defined as a string literal with a null terminator, the actual connection
 // preface is only the first |kHttp2ConnectionHeaderPrefixSize| bytes, which
 // excludes the null terminator.
-NET_EXPORT_PRIVATE extern const char* const kHttp2ConnectionHeaderPrefix;
+SPDY_EXPORT_PRIVATE extern const char* const kHttp2ConnectionHeaderPrefix;
 const int kHttp2ConnectionHeaderPrefixSize = 24;
 
 // Wire values for HTTP2 frame types.
@@ -148,13 +150,13 @@
 
 // This explicit operator is needed, otherwise compiler finds
 // overloaded operator to be ambiguous.
-NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                            SpdySettingsIds id);
+SPDY_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
+                                             SpdySettingsIds id);
 
 // This operator is needed, because SpdyFrameType is an enum class,
 // therefore implicit conversion to underlying integer type is not allowed.
-NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                            SpdyFrameType frame_type);
+SPDY_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
+                                             SpdyFrameType frame_type);
 
 using SettingsMap = std::map<SpdySettingsIds, uint32_t>;
 
@@ -187,7 +189,7 @@
 const SpdyPriority kV3LowestPriority = 7;
 
 // Returns SPDY 3.x priority value clamped to the valid range of [0, 7].
-NET_EXPORT_PRIVATE SpdyPriority ClampSpdy3Priority(SpdyPriority priority);
+SPDY_EXPORT_PRIVATE SpdyPriority ClampSpdy3Priority(SpdyPriority priority);
 
 // HTTP/2 stream weights are integers in range [1, 256], as specified in RFC
 // 7540 section 5.3.2. Default stream weight is defined in section 5.3.5.
@@ -196,19 +198,19 @@
 const int kHttp2DefaultStreamWeight = 16;
 
 // Returns HTTP/2 weight clamped to the valid range of [1, 256].
-NET_EXPORT_PRIVATE int ClampHttp2Weight(int weight);
+SPDY_EXPORT_PRIVATE int ClampHttp2Weight(int weight);
 
 // Maps SPDY 3.x priority value in range [0, 7] to HTTP/2 weight value in range
 // [1, 256], where priority 0 (i.e. highest precedence) corresponds to maximum
 // weight 256 and priority 7 (lowest precedence) corresponds to minimum weight
 // 1.
-NET_EXPORT_PRIVATE int Spdy3PriorityToHttp2Weight(SpdyPriority priority);
+SPDY_EXPORT_PRIVATE int Spdy3PriorityToHttp2Weight(SpdyPriority priority);
 
 // Maps HTTP/2 weight value in range [1, 256] to SPDY 3.x priority value in
 // range [0, 7], where minimum weight 1 corresponds to priority 7 (lowest
 // precedence) and maximum weight 256 corresponds to priority 0 (highest
 // precedence).
-NET_EXPORT_PRIVATE SpdyPriority Http2WeightToSpdy3Priority(int weight);
+SPDY_EXPORT_PRIVATE SpdyPriority Http2WeightToSpdy3Priority(int weight);
 
 // Reserved ID for root stream of HTTP/2 stream dependency tree, as specified
 // in RFC 7540 section 5.3.1.
@@ -218,20 +220,20 @@
 
 // Returns true if a given on-the-wire enumeration of a frame type is defined
 // in a standardized HTTP/2 specification, false otherwise.
-NET_EXPORT_PRIVATE bool IsDefinedFrameType(uint8_t frame_type_field);
+SPDY_EXPORT_PRIVATE bool IsDefinedFrameType(uint8_t frame_type_field);
 
 // Parses a frame type from an on-the-wire enumeration.
 // Behavior is undefined for invalid frame type fields; consumers should first
 // use IsValidFrameType() to verify validity of frame type fields.
-NET_EXPORT_PRIVATE SpdyFrameType ParseFrameType(uint8_t frame_type_field);
+SPDY_EXPORT_PRIVATE SpdyFrameType ParseFrameType(uint8_t frame_type_field);
 
 // Serializes a frame type to the on-the-wire value.
-NET_EXPORT_PRIVATE uint8_t SerializeFrameType(SpdyFrameType frame_type);
+SPDY_EXPORT_PRIVATE uint8_t SerializeFrameType(SpdyFrameType frame_type);
 
 // (HTTP/2) All standard frame types except WINDOW_UPDATE are
 // (stream-specific xor connection-level). Returns false iff we know
 // the given frame type does not align with the given streamID.
-NET_EXPORT_PRIVATE bool IsValidHTTP2FrameStreamId(
+SPDY_EXPORT_PRIVATE bool IsValidHTTP2FrameStreamId(
     SpdyStreamId current_frame_stream_id,
     SpdyFrameType frame_type_field);
 
@@ -240,18 +242,18 @@
 
 // If |wire_setting_id| is the on-the-wire representation of a defined SETTINGS
 // parameter, parse it to |*setting_id| and return true.
-NET_EXPORT_PRIVATE bool ParseSettingsId(uint16_t wire_setting_id,
-                                        SpdySettingsIds* setting_id);
+SPDY_EXPORT_PRIVATE bool ParseSettingsId(uint16_t wire_setting_id,
+                                         SpdySettingsIds* setting_id);
 
 // Return if |id| corresponds to a defined setting;
 // stringify |id| to |*settings_id_string| regardless.
-NET_EXPORT_PRIVATE bool SettingsIdToString(SpdySettingsIds id,
-                                           const char** settings_id_string);
+SPDY_EXPORT_PRIVATE bool SettingsIdToString(SpdySettingsIds id,
+                                            const char** settings_id_string);
 
 // Parse |wire_error_code| to a SpdyErrorCode.
 // Treat unrecognized error codes as INTERNAL_ERROR
 // as recommended by the HTTP/2 specification.
-NET_EXPORT_PRIVATE SpdyErrorCode ParseErrorCode(uint32_t wire_error_code);
+SPDY_EXPORT_PRIVATE SpdyErrorCode ParseErrorCode(uint32_t wire_error_code);
 
 // Serialize RST_STREAM or GOAWAY frame error code to string
 // for logging/debugging.
@@ -373,45 +375,27 @@
 class SpdyFrameVisitor;
 
 // Intermediate representation for HTTP2 frames.
-class NET_EXPORT_PRIVATE SpdyFrameIR {
+class SPDY_EXPORT_PRIVATE SpdyFrameIR {
  public:
   virtual ~SpdyFrameIR() {}
 
   virtual void Visit(SpdyFrameVisitor* visitor) const = 0;
   virtual SpdyFrameType frame_type() const = 0;
-
- protected:
-  SpdyFrameIR() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR);
-};
-
-// Abstract class intended to be inherited by IRs that have a stream associated
-// to them.
-class NET_EXPORT_PRIVATE SpdyFrameWithStreamIdIR : public SpdyFrameIR {
- public:
-  ~SpdyFrameWithStreamIdIR() override {}
   SpdyStreamId stream_id() const { return stream_id_; }
-  void set_stream_id(SpdyStreamId stream_id) {
-    DCHECK_EQ(0u, stream_id & ~kStreamIdMask);
-    stream_id_ = stream_id;
-  }
 
  protected:
-  explicit SpdyFrameWithStreamIdIR(SpdyStreamId stream_id) {
-    set_stream_id(stream_id);
-  }
+  SpdyFrameIR() : stream_id_(0) {}
+  explicit SpdyFrameIR(SpdyStreamId stream_id) : stream_id_(stream_id) {}
 
  private:
   SpdyStreamId stream_id_;
 
-  DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithStreamIdIR);
+  DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR);
 };
 
 // Abstract class intended to be inherited by IRs that have the option of a FIN
-// flag. Implies SpdyFrameWithStreamIdIR.
-class NET_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameWithStreamIdIR {
+// flag.
+class SPDY_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameIR {
  public:
   ~SpdyFrameWithFinIR() override {}
   bool fin() const { return fin_; }
@@ -419,8 +403,7 @@
 
  protected:
   explicit SpdyFrameWithFinIR(SpdyStreamId stream_id)
-      : SpdyFrameWithStreamIdIR(stream_id),
-        fin_(false) {}
+      : SpdyFrameIR(stream_id), fin_(false) {}
 
  private:
   bool fin_;
@@ -430,7 +413,7 @@
 
 // Abstract class intended to be inherited by IRs that contain a header
 // block. Implies SpdyFrameWithFinIR.
-class NET_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR
+class SPDY_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR
     : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) {
  public:
   ~SpdyFrameWithHeaderBlockIR() override;
@@ -457,7 +440,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithHeaderBlockIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyDataIR
+class SPDY_EXPORT_PRIVATE SpdyDataIR
     : public NON_EXPORTED_BASE(SpdyFrameWithFinIR) {
  public:
   // Performs a deep copy on data.
@@ -491,7 +474,7 @@
 
   // Deep-copy of data (keep private copy).
   void SetDataDeep(SpdyStringPiece data) {
-    data_store_.reset(new SpdyString(data.data(), data.size()));
+    data_store_ = SpdyMakeUnique<SpdyString>(data.data(), data.size());
     data_ = data_store_->data();
     data_len_ = data.size();
   }
@@ -528,7 +511,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyDataIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameWithStreamIdIR {
+class SPDY_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameIR {
  public:
   SpdyRstStreamIR(SpdyStreamId stream_id, SpdyErrorCode error_code);
 
@@ -547,7 +530,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyRstStreamIR);
 };
 
-class NET_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR {
+class SPDY_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR {
  public:
   SpdySettingsIR();
   ~SpdySettingsIR() override;
@@ -572,7 +555,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdySettingsIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyPingIR : public SpdyFrameIR {
+class SPDY_EXPORT_PRIVATE SpdyPingIR : public SpdyFrameIR {
  public:
   explicit SpdyPingIR(SpdyPingId id) : id_(id), is_ack_(false) {}
   SpdyPingId id() const { return id_; }
@@ -591,7 +574,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyPingIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyGoAwayIR : public SpdyFrameIR {
+class SPDY_EXPORT_PRIVATE SpdyGoAwayIR : public SpdyFrameIR {
  public:
   // References description, doesn't copy it, so description must outlast
   // this SpdyGoAwayIR.
@@ -638,7 +621,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyGoAwayIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR {
+class SPDY_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR {
  public:
   explicit SpdyHeadersIR(SpdyStreamId stream_id)
       : SpdyHeadersIR(stream_id, SpdyHeaderBlock()) {}
@@ -678,10 +661,10 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR {
+class SPDY_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameIR {
  public:
   SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta)
-      : SpdyFrameWithStreamIdIR(stream_id) {
+      : SpdyFrameIR(stream_id) {
     set_delta(delta);
   }
   int32_t delta() const { return delta_; }
@@ -701,7 +684,8 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyWindowUpdateIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyPushPromiseIR : public SpdyFrameWithHeaderBlockIR {
+class SPDY_EXPORT_PRIVATE SpdyPushPromiseIR
+    : public SpdyFrameWithHeaderBlockIR {
  public:
   SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id)
       : SpdyPushPromiseIR(stream_id, promised_stream_id, SpdyHeaderBlock()) {}
@@ -737,7 +721,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameWithStreamIdIR {
+class SPDY_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameIR {
  public:
   explicit SpdyContinuationIR(SpdyStreamId stream_id);
   ~SpdyContinuationIR() override;
@@ -759,7 +743,7 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyContinuationIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameWithStreamIdIR {
+class SPDY_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameIR {
  public:
   explicit SpdyAltSvcIR(SpdyStreamId stream_id);
   ~SpdyAltSvcIR() override;
@@ -784,13 +768,13 @@
   DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR);
 };
 
-class NET_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR {
+class SPDY_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameIR {
  public:
   SpdyPriorityIR(SpdyStreamId stream_id,
                  SpdyStreamId parent_stream_id,
                  int weight,
                  bool exclusive)
-      : SpdyFrameWithStreamIdIR(stream_id),
+      : SpdyFrameIR(stream_id),
         parent_stream_id_(parent_stream_id),
         weight_(weight),
         exclusive_(exclusive) {}
diff --git a/src/net/spdy/core/spdy_test_utils.cc b/src/net/spdy/core/spdy_test_utils.cc
index cd31e00..db1359d 100644
--- a/src/net/spdy/core/spdy_test_utils.cc
+++ b/src/net/spdy/core/spdy_test_utils.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <cstring>
 #include <memory>
+#include <new>
 #include <utility>
 #include <vector>
 
diff --git a/src/net/spdy/core/write_scheduler.h b/src/net/spdy/core/write_scheduler.h
index 715df88..357dc85 100644
--- a/src/net/spdy/core/write_scheduler.h
+++ b/src/net/spdy/core/write_scheduler.h
@@ -8,8 +8,8 @@
 #include <tuple>
 #include <vector>
 
-#include "net/base/net_export.h"
 #include "net/spdy/core/spdy_protocol.h"
+#include "net/spdy/platform/api/spdy_export.h"
 
 namespace net {
 
@@ -38,7 +38,7 @@
 // returned by PopNextReadyStream(); when returned by that method, the stream's
 // state changes to not ready.
 template <typename StreamIdType>
-class NET_EXPORT_PRIVATE WriteScheduler {
+class SPDY_EXPORT_PRIVATE WriteScheduler {
  public:
   typedef StreamPrecedence<StreamIdType> StreamPrecedenceType;
 
diff --git a/src/net/spdy/hpack/hpack_decoder.h.orig b/src/net/spdy/hpack/hpack_decoder.h.orig
new file mode 100644
index 0000000..b517af8
--- /dev/null
+++ b/src/net/spdy/hpack/hpack_decoder.h.orig
@@ -0,0 +1,146 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_HPACK_DECODER_H_
+#define NET_SPDY_HPACK_DECODER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/strings/string_piece.h"
+#include "net/base/net_export.h"
+#include "net/spdy/hpack/hpack_header_table.h"
+#include "net/spdy/hpack/hpack_input_stream.h"
+#include "net/spdy/spdy_headers_handler_interface.h"
+#include "net/spdy/spdy_protocol.h"
+
+// An HpackDecoder decodes header sets as outlined in
+// http://tools.ietf.org/html/rfc7541.
+
+namespace net {
+
+namespace test {
+class HpackDecoderPeer;
+}  // namespace test
+
+class NET_EXPORT_PRIVATE HpackDecoder {
+ public:
+  friend class test::HpackDecoderPeer;
+
+  HpackDecoder();
+  ~HpackDecoder();
+
+  // Called upon acknowledgement of SETTINGS_HEADER_TABLE_SIZE.
+  void ApplyHeaderTableSizeSetting(size_t size_setting) {
+    header_table_.SetSettingsHeaderTableSize(size_setting);
+  }
+
+  // If a SpdyHeadersHandlerInterface is provided, HpackDecoder will emit
+  // headers to it rather than accumulating them in a SpdyHeaderBlock.
+  void HandleControlFrameHeadersStart(SpdyHeadersHandlerInterface* handler) {
+    handler_ = handler;
+    total_header_bytes_ = 0;
+  }
+
+  // Called as headers data arrives. Returns false if an error occurred.
+  // TODO(jgraettinger): A future version of this method will incrementally
+  // parse and deliver headers via SpdyHeadersHandlerInterface. For now,
+  // header data is buffered until HandleControlFrameHeadersComplete().
+  bool HandleControlFrameHeadersData(const char* headers_data,
+                                     size_t headers_data_length);
+
+  // Called after a headers block has been completely delivered via
+  // HandleControlFrameHeadersData(). Returns false if an error
+  // occurred.  |compressed_len| if non-null will be set to the size
+  // of the encoded buffered block that was accumulated in
+  // HandleControlFrameHeadersData(), to support subsequent
+  // calculation of compression percentage. Clears |handler_|.
+  // TODO(jgraettinger): A
+  // future version of this method will simply deliver the Cookie
+  // header (which has been incrementally reconstructed) and notify
+  // the visitor that the block is finished.
+  bool HandleControlFrameHeadersComplete(size_t* compressed_len);
+
+  // Accessor for the most recently decoded headers block. Valid until the next
+  // call to HandleControlFrameHeadersData().
+  // TODO(birenroy): Remove this method when all users of HpackDecoder specify
+  // a SpdyHeadersHandlerInterface.
+  const SpdyHeaderBlock& decoded_block() { return decoded_block_; }
+
+  // Caller retains ownership of |visitor|.
+  void SetHeaderTableDebugVisitor(
+      HpackHeaderTable::DebugVisitorInterface* visitor) {
+    header_table_.set_debug_visitor(visitor);
+  }
+
+ private:
+  // Adds the header representation to |decoded_block_|, applying the
+  // following rules:
+  //  - Multiple values of the Cookie header are joined, delmited by '; '.
+  //    This reconstruction is required to properly handle Cookie crumbling
+  //    (as per section 8.1.2.5 in RFC 7540).
+  //  - Multiple values of other headers are joined and delimited by '\0'.
+  //    Note that this may be too accomodating, as the sender's HTTP2 layer
+  //    should have already joined and delimited these values.
+  //
+  // Returns false if a pseudo-header field follows a regular header one, which
+  // MUST be treated as malformed, as per sections 8.1.2.3. of the HTTP2
+  // specification (RFC 7540).
+  //
+  bool HandleHeaderRepresentation(base::StringPiece name,
+                                  base::StringPiece value);
+
+  const uint32_t max_string_literal_size_;
+  HpackHeaderTable header_table_;
+
+  // TODO(jgraettinger): Buffer for headers data, and storage for the last-
+  // processed headers block. Both will be removed with the switch to
+  // SpdyHeadersHandlerInterface.
+  std::string headers_block_buffer_;
+  SpdyHeaderBlock decoded_block_;
+
+  // Scratch space for storing decoded literals.
+  std::string key_buffer_, value_buffer_;
+
+  // If non-NULL, handles decoded headers.
+  SpdyHeadersHandlerInterface* handler_;
+  size_t total_header_bytes_;
+
+  // Flag to keep track of having seen a regular header field.
+  bool regular_header_seen_;
+
+  // Flag to keep track of having seen the header block start.
+  bool header_block_started_;
+
+  // Total bytes have been removed from headers_block_buffer_.
+  // Its value is updated during incremental decoding.
+  uint32_t total_parsed_bytes_;
+
+  // Handlers for decoding HPACK opcodes and header representations
+  // (or parts thereof). These methods return true on success and
+  // false on error.
+  bool DecodeNextOpcodeWrapper(HpackInputStream* input_stream);
+  bool DecodeNextOpcode(HpackInputStream* input_stream);
+  bool DecodeAtMostTwoHeaderTableSizeUpdates(HpackInputStream* input_stream);
+  bool DecodeNextHeaderTableSizeUpdate(HpackInputStream* input_stream);
+  bool DecodeNextIndexedHeader(HpackInputStream* input_stream);
+  bool DecodeNextLiteralHeader(HpackInputStream* input_stream,
+                               bool should_index);
+  bool DecodeNextName(HpackInputStream* input_stream,
+                      base::StringPiece* next_name);
+  bool DecodeNextStringLiteral(HpackInputStream* input_stream,
+                               bool is_header_key,  // As distinct from a value.
+                               base::StringPiece* output);
+
+  DISALLOW_COPY_AND_ASSIGN(HpackDecoder);
+};
+
+}  // namespace net
+
+#endif  // NET_SPDY_HPACK_DECODER_H_
diff --git a/src/net/spdy/hpack/hpack_encoder.h.orig b/src/net/spdy/hpack/hpack_encoder.h.orig
new file mode 100644
index 0000000..51ea392
--- /dev/null
+++ b/src/net/spdy/hpack/hpack_encoder.h.orig
@@ -0,0 +1,107 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_HPACK_ENCODER_H_
+#define NET_SPDY_HPACK_ENCODER_H_
+
+#include <stddef.h>
+
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/strings/string_piece.h"
+#include "net/base/net_export.h"
+#include "net/spdy/hpack/hpack_header_table.h"
+#include "net/spdy/hpack/hpack_output_stream.h"
+#include "net/spdy/spdy_protocol.h"
+
+// An HpackEncoder encodes header sets as outlined in
+// http://tools.ietf.org/html/rfc7541.
+
+namespace net {
+
+class HpackHuffmanTable;
+
+namespace test {
+class HpackEncoderPeer;
+}  // namespace test
+
+class NET_EXPORT_PRIVATE HpackEncoder {
+ public:
+  friend class test::HpackEncoderPeer;
+
+  // |table| is an initialized HPACK Huffman table, having an
+  // externally-managed lifetime which spans beyond HpackEncoder.
+  explicit HpackEncoder(const HpackHuffmanTable& table);
+  ~HpackEncoder();
+
+  // Encodes the given header set into the given string. Returns
+  // whether or not the encoding was successful.
+  bool EncodeHeaderSet(const SpdyHeaderBlock& header_set, std::string* output);
+
+  // Encodes the given header set into the given string. Only non-indexed
+  // literal representations are emitted, bypassing the header table. Huffman
+  // coding is also not used. Returns whether the encoding was successful.
+  bool EncodeHeaderSetWithoutCompression(const SpdyHeaderBlock& header_set,
+                                         std::string* output);
+
+  // Called upon a change to SETTINGS_HEADER_TABLE_SIZE. Specifically, this
+  // is to be called after receiving (and sending an acknowledgement for) a
+  // SETTINGS_HEADER_TABLE_SIZE update from the remote decoding endpoint.
+  void ApplyHeaderTableSizeSetting(size_t size_setting);
+
+  size_t CurrentHeaderTableSizeSetting() const {
+    return header_table_.settings_size_bound();
+  }
+
+  // Caller retains ownership of |visitor|.
+  void SetHeaderTableDebugVisitor(
+      HpackHeaderTable::DebugVisitorInterface* visitor) {
+    header_table_.set_debug_visitor(visitor);
+  }
+
+ private:
+  typedef std::pair<base::StringPiece, base::StringPiece> Representation;
+  typedef std::vector<Representation> Representations;
+
+  // Emits a static/dynamic indexed representation (Section 7.1).
+  void EmitIndex(const HpackEntry* entry);
+
+  // Emits a literal representation (Section 7.2).
+  void EmitIndexedLiteral(const Representation& representation);
+  void EmitNonIndexedLiteral(const Representation& representation);
+  void EmitLiteral(const Representation& representation);
+
+  // Emits a Huffman or identity string (whichever is smaller).
+  void EmitString(base::StringPiece str);
+
+  // Emits the current dynamic table size if the table size was recently
+  // updated and we have not yet emitted it (Section 6.3).
+  void MaybeEmitTableSize();
+
+  // Crumbles a cookie header into ";" delimited crumbs.
+  static void CookieToCrumbs(const Representation& cookie,
+                             Representations* crumbs_out);
+
+  // Crumbles other header field values at \0 delimiters.
+  static void DecomposeRepresentation(const Representation& header_field,
+                                      Representations* out);
+
+  HpackHeaderTable header_table_;
+  HpackOutputStream output_stream_;
+
+  const HpackHuffmanTable& huffman_table_;
+  size_t min_table_size_setting_received_;
+  bool allow_huffman_compression_;
+  bool should_emit_table_size_;
+
+  DISALLOW_COPY_AND_ASSIGN(HpackEncoder);
+};
+
+}  // namespace net
+
+#endif  // NET_SPDY_HPACK_ENCODER_H_
diff --git a/src/net/spdy/hpack/hpack_entry.h.orig b/src/net/spdy/hpack/hpack_entry.h.orig
new file mode 100644
index 0000000..b094810
--- /dev/null
+++ b/src/net/spdy/hpack/hpack_entry.h.orig
@@ -0,0 +1,101 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_HPACK_ENTRY_H_
+#define NET_SPDY_HPACK_ENTRY_H_
+
+#include <stddef.h>
+
+#include <string>
+
+#include "base/macros.h"
+#include "base/strings/string_piece.h"
+#include "net/base/net_export.h"
+
+// All section references below are to
+// http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08
+
+namespace net {
+
+// A structure for an entry in the static table (3.3.1)
+// and the header table (3.3.2).
+class NET_EXPORT_PRIVATE HpackEntry {
+ public:
+  // The constant amount added to name().size() and value().size() to
+  // get the size of an HpackEntry as defined in 5.1.
+  static const size_t kSizeOverhead;
+
+  // Creates an entry. Preconditions:
+  // - |is_static| captures whether this entry is a member of the static
+  //   or dynamic header table.
+  // - |insertion_index| is this entry's index in the total set of entries ever
+  //   inserted into the header table (including static entries).
+  //
+  // The combination of |is_static| and |insertion_index| allows an
+  // HpackEntryTable to determine the index of an HpackEntry in O(1) time.
+  // Copies |name| and |value|.
+  HpackEntry(base::StringPiece name,
+             base::StringPiece value,
+             bool is_static,
+             size_t insertion_index);
+
+  // Create a 'lookup' entry (only) suitable for querying a HpackEntrySet. The
+  // instance InsertionIndex() always returns 0 and IsLookup() returns true.
+  // The memory backing |name| and |value| must outlive this object.
+  HpackEntry(base::StringPiece name, base::StringPiece value);
+
+  HpackEntry(const HpackEntry& other);
+  HpackEntry& operator=(const HpackEntry& other);
+
+  // Creates an entry with empty name and value. Only defined so that
+  // entries can be stored in STL containers.
+  HpackEntry();
+
+  ~HpackEntry();
+
+  base::StringPiece name() const { return name_ref_; }
+  base::StringPiece value() const { return value_ref_; }
+
+  // Returns whether this entry is a member of the static (as opposed to
+  // dynamic) table.
+  bool IsStatic() const { return type_ == STATIC; }
+
+  // Returns whether this entry is a lookup-only entry.
+  bool IsLookup() const { return type_ == LOOKUP; }
+
+  // Used to compute the entry's index in the header table.
+  size_t InsertionIndex() const { return insertion_index_; }
+
+  // Returns the size of an entry as defined in 5.1.
+  static size_t Size(base::StringPiece name, base::StringPiece value);
+  size_t Size() const;
+
+  std::string GetDebugString() const;
+
+ private:
+  enum EntryType {
+    LOOKUP,
+    DYNAMIC,
+    STATIC,
+  };
+
+  // These members are not used for LOOKUP entries.
+  std::string name_;
+  std::string value_;
+
+  // These members are always valid. For DYNAMIC and STATIC entries, they
+  // always point to |name_| and |value_|.
+  base::StringPiece name_ref_;
+  base::StringPiece value_ref_;
+
+  // The entry's index in the total set of entries ever inserted into the header
+  // table.
+  size_t insertion_index_;
+
+  EntryType type_;
+};
+
+}  // namespace net
+
+#endif  // NET_SPDY_HPACK_ENTRY_H_
diff --git a/src/net/spdy/hpack/hpack_header_table.cc.orig b/src/net/spdy/hpack/hpack_header_table.cc.orig
new file mode 100644
index 0000000..f9b80fd
--- /dev/null
+++ b/src/net/spdy/hpack/hpack_header_table.cc.orig
@@ -0,0 +1,268 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/spdy/hpack/hpack_header_table.h"
+
+#include <algorithm>
+
+#include "base/logging.h"
+#include "net/spdy/hpack/hpack_constants.h"
+#include "net/spdy/hpack/hpack_static_table.h"
+
+namespace net {
+
+using base::StringPiece;
+
+size_t HpackHeaderTable::EntryHasher::operator()(
+    const HpackEntry* entry) const {
+  return base::StringPieceHash()(entry->name()) ^
+         base::StringPieceHash()(entry->value());
+}
+
+bool HpackHeaderTable::EntriesEq::operator()(const HpackEntry* lhs,
+                                             const HpackEntry* rhs) const {
+  if (lhs == nullptr) {
+    return rhs == nullptr;
+  }
+  if (rhs == nullptr) {
+    return false;
+  }
+  return lhs->name() == rhs->name() && lhs->value() == rhs->value();
+}
+
+HpackHeaderTable::HpackHeaderTable()
+    : static_entries_(ObtainHpackStaticTable().GetStaticEntries()),
+      static_index_(ObtainHpackStaticTable().GetStaticIndex()),
+      static_name_index_(ObtainHpackStaticTable().GetStaticNameIndex()),
+      settings_size_bound_(kDefaultHeaderTableSizeSetting),
+      size_(0),
+      max_size_(kDefaultHeaderTableSizeSetting),
+      total_insertions_(static_entries_.size()) {}
+
+HpackHeaderTable::~HpackHeaderTable() {}
+
+const HpackEntry* HpackHeaderTable::GetByIndex(size_t index) {
+  if (index == 0) {
+    return NULL;
+  }
+  index -= 1;
+  if (index < static_entries_.size()) {
+    return &static_entries_[index];
+  }
+  index -= static_entries_.size();
+  if (index < dynamic_entries_.size()) {
+    const HpackEntry* result = &dynamic_entries_[index];
+    if (debug_visitor_) {
+      debug_visitor_->OnUseEntry(*result);
+    }
+    return result;
+  }
+  return NULL;
+}
+
+const HpackEntry* HpackHeaderTable::GetByName(StringPiece name) {
+  {
+    NameToEntryMap::const_iterator it = static_name_index_.find(name);
+    if (it != static_name_index_.end()) {
+      return it->second;
+    }
+  }
+  {
+    NameToEntryMap::const_iterator it = dynamic_name_index_.find(name);
+    if (it != dynamic_name_index_.end()) {
+      const HpackEntry* result = it->second;
+      if (debug_visitor_) {
+        debug_visitor_->OnUseEntry(*result);
+      }
+      return result;
+    }
+  }
+  return NULL;
+}
+
+const HpackEntry* HpackHeaderTable::GetByNameAndValue(StringPiece name,
+                                                      StringPiece value) {
+  HpackEntry query(name, value);
+  {
+    UnorderedEntrySet::const_iterator it = static_index_.find(&query);
+    if (it != static_index_.end()) {
+      return *it;
+    }
+  }
+  {
+    UnorderedEntrySet::const_iterator it = dynamic_index_.find(&query);
+    if (it != dynamic_index_.end()) {
+      const HpackEntry* result = *it;
+      if (debug_visitor_) {
+        debug_visitor_->OnUseEntry(*result);
+      }
+      return result;
+    }
+  }
+  return NULL;
+}
+
+size_t HpackHeaderTable::IndexOf(const HpackEntry* entry) const {
+  if (entry->IsLookup()) {
+    return 0;
+  } else if (entry->IsStatic()) {
+    return 1 + entry->InsertionIndex();
+  } else {
+    return total_insertions_ - entry->InsertionIndex() + static_entries_.size();
+  }
+}
+
+void HpackHeaderTable::SetMaxSize(size_t max_size) {
+  CHECK_LE(max_size, settings_size_bound_);
+
+  max_size_ = max_size;
+  if (size_ > max_size_) {
+    Evict(EvictionCountToReclaim(size_ - max_size_));
+    CHECK_LE(size_, max_size_);
+  }
+}
+
+void HpackHeaderTable::SetSettingsHeaderTableSize(size_t settings_size) {
+  settings_size_bound_ = settings_size;
+  if (settings_size_bound_ < max_size_) {
+    SetMaxSize(settings_size_bound_);
+  }
+}
+
+void HpackHeaderTable::EvictionSet(StringPiece name,
+                                   StringPiece value,
+                                   EntryTable::iterator* begin_out,
+                                   EntryTable::iterator* end_out) {
+  size_t eviction_count = EvictionCountForEntry(name, value);
+  *begin_out = dynamic_entries_.end() - eviction_count;
+  *end_out = dynamic_entries_.end();
+}
+
+size_t HpackHeaderTable::EvictionCountForEntry(StringPiece name,
+                                               StringPiece value) const {
+  size_t available_size = max_size_ - size_;
+  size_t entry_size = HpackEntry::Size(name, value);
+
+  if (entry_size <= available_size) {
+    // No evictions are required.
+    return 0;
+  }
+  return EvictionCountToReclaim(entry_size - available_size);
+}
+
+size_t HpackHeaderTable::EvictionCountToReclaim(size_t reclaim_size) const {
+  size_t count = 0;
+  for (EntryTable::const_reverse_iterator it = dynamic_entries_.rbegin();
+       it != dynamic_entries_.rend() && reclaim_size != 0; ++it, ++count) {
+    reclaim_size -= std::min(reclaim_size, it->Size());
+  }
+  return count;
+}
+
+void HpackHeaderTable::Evict(size_t count) {
+  for (size_t i = 0; i != count; ++i) {
+    CHECK(!dynamic_entries_.empty());
+    HpackEntry* entry = &dynamic_entries_.back();
+
+    size_ -= entry->Size();
+    UnorderedEntrySet::iterator it = dynamic_index_.find(entry);
+    DCHECK(it != dynamic_index_.end());
+    // Only remove an entry from the index if its insertion index matches;
+    // otherwise, the index refers to another entry with the same name and
+    // value.
+    if ((*it)->InsertionIndex() == entry->InsertionIndex()) {
+      dynamic_index_.erase(it);
+    }
+    NameToEntryMap::iterator name_it = dynamic_name_index_.find(entry->name());
+    DCHECK(name_it != dynamic_name_index_.end());
+    // Only remove an entry from the literal index if its insertion index
+    /// matches; otherwise, the index refers to another entry with the same
+    // name.
+    if (name_it->second->InsertionIndex() == entry->InsertionIndex()) {
+      dynamic_name_index_.erase(name_it);
+    }
+    dynamic_entries_.pop_back();
+  }
+}
+
+const HpackEntry* HpackHeaderTable::TryAddEntry(StringPiece name,
+                                                StringPiece value) {
+  Evict(EvictionCountForEntry(name, value));
+
+  size_t entry_size = HpackEntry::Size(name, value);
+  if (entry_size > (max_size_ - size_)) {
+    // Entire table has been emptied, but there's still insufficient room.
+    DCHECK(dynamic_entries_.empty());
+    DCHECK_EQ(0u, size_);
+    return NULL;
+  }
+  dynamic_entries_.push_front(HpackEntry(name, value,
+                                         false,  // is_static
+                                         total_insertions_));
+  HpackEntry* new_entry = &dynamic_entries_.front();
+  auto index_result = dynamic_index_.insert(new_entry);
+  if (!index_result.second) {
+    // An entry with the same name and value already exists in the dynamic
+    // index. We should replace it with the newly added entry.
+    DVLOG(1) << "Found existing entry: "
+             << (*index_result.first)->GetDebugString()
+             << " replacing with: " << new_entry->GetDebugString();
+    DCHECK_GT(new_entry->InsertionIndex(),
+              (*index_result.first)->InsertionIndex());
+    dynamic_index_.erase(index_result.first);
+    CHECK(dynamic_index_.insert(new_entry).second);
+  }
+
+  auto name_result =
+      dynamic_name_index_.insert(std::make_pair(new_entry->name(), new_entry));
+  if (!name_result.second) {
+    // An entry with the same name already exists in the dynamic index. We
+    // should replace it with the newly added entry.
+    DVLOG(1) << "Found existing entry: "
+             << name_result.first->second->GetDebugString()
+             << " replacing with: " << new_entry->GetDebugString();
+    DCHECK_GT(new_entry->InsertionIndex(),
+              name_result.first->second->InsertionIndex());
+    dynamic_name_index_.erase(name_result.first);
+    auto insert_result = dynamic_name_index_.insert(
+        std::make_pair(new_entry->name(), new_entry));
+    CHECK(insert_result.second);
+  }
+
+  size_ += entry_size;
+  ++total_insertions_;
+  if (debug_visitor_) {
+    // Call |debug_visitor_->OnNewEntry()| to get the current time.
+    HpackEntry& entry = dynamic_entries_.front();
+    entry.set_time_added(debug_visitor_->OnNewEntry(entry));
+  }
+
+  return &dynamic_entries_.front();
+}
+
+void HpackHeaderTable::DebugLogTableState() const {
+  DVLOG(2) << "Dynamic table:";
+  for (EntryTable::const_iterator it = dynamic_entries_.begin();
+       it != dynamic_entries_.end(); ++it) {
+    DVLOG(2) << "  " << it->GetDebugString();
+  }
+  DVLOG(2) << "Full Static Index:";
+  for (const auto entry : static_index_) {
+    DVLOG(2) << "  " << entry->GetDebugString();
+  }
+  DVLOG(2) << "Full Static Name Index:";
+  for (const auto it : static_name_index_) {
+    DVLOG(2) << "  " << it.first << ": " << it.second->GetDebugString();
+  }
+  DVLOG(2) << "Full Dynamic Index:";
+  for (const auto entry : dynamic_index_) {
+    DVLOG(2) << "  " << entry->GetDebugString();
+  }
+  DVLOG(2) << "Full Dynamic Name Index:";
+  for (const auto it : dynamic_name_index_) {
+    DVLOG(2) << "  " << it.first << ": " << it.second->GetDebugString();
+  }
+}
+
+}  // namespace net
diff --git a/src/net/spdy/hpack/hpack_header_table.h.orig b/src/net/spdy/hpack/hpack_header_table.h.orig
new file mode 100644
index 0000000..d1fd464
--- /dev/null
+++ b/src/net/spdy/hpack/hpack_header_table.h.orig
@@ -0,0 +1,176 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_HPACK_HEADER_TABLE_H_
+#define NET_SPDY_HPACK_HEADER_TABLE_H_
+
+#include <cstddef>
+#include <deque>
+#include <unordered_map>
+#include <unordered_set>
+
+#include "base/macros.h"
+#include "base/strings/string_piece.h"
+#include "net/base/net_export.h"
+#include "net/spdy/hpack/hpack_entry.h"
+
+// All section references below are to http://tools.ietf.org/html/rfc7541.
+
+namespace net {
+
+namespace test {
+class HpackHeaderTablePeer;
+}  // namespace test
+
+// A data structure for the static table (2.3.1) and the dynamic table (2.3.2).
+class NET_EXPORT_PRIVATE HpackHeaderTable {
+ public:
+  friend class test::HpackHeaderTablePeer;
+
+  // Debug visitor my be used to extract debug/internal information
+  // about the HpackHeaderTable as it operates.
+  //
+  // Most HpackHeaderTable implementations do not need to bother with
+  // this interface at all.
+  class DebugVisitorInterface {
+   public:
+    virtual ~DebugVisitorInterface() {}
+
+    // |OnNewEntry()| and |OnUseEntry()| can be used together to
+    // gather data about the distribution of time intervals between
+    // creation and reference of entries in the dynamic table.  The
+    // data is desired to sanity check a proposed extension to HPACK
+    // for QUIC that would eliminate inter-stream head of line
+    // blocking (due to standard HPACK).  The visitor should return
+    // the current time from |OnNewEntry()|, which will be passed
+    // to |OnUseEntry()| each time that particular entry is used to
+    // emit an indexed representation.
+    virtual int64_t OnNewEntry(const HpackEntry& entry) = 0;
+    virtual void OnUseEntry(const HpackEntry&, int64_t time_added) = 0;
+  };
+
+  // HpackHeaderTable takes advantage of the deque property that references
+  // remain valid, so long as insertions & deletions are at the head & tail.
+  // If this changes (eg we start to drop entries from the middle of the table),
+  // this needs to be a std::list, in which case |*_index_| can be trivially
+  // extended to map to list iterators.
+  typedef std::deque<HpackEntry> EntryTable;
+
+  struct NET_EXPORT_PRIVATE EntryHasher {
+    size_t operator()(const HpackEntry* entry) const;
+  };
+  struct NET_EXPORT_PRIVATE EntriesEq {
+    bool operator()(const HpackEntry* lhs, const HpackEntry* rhs) const;
+  };
+
+  using UnorderedEntrySet =
+      std::unordered_set<HpackEntry*, EntryHasher, EntriesEq>;
+  using NameToEntryMap = std::unordered_map<base::StringPiece,
+                                            const HpackEntry*,
+                                            base::StringPieceHash>;
+
+  HpackHeaderTable();
+
+  ~HpackHeaderTable();
+
+  // Last-acknowledged value of SETTINGS_HEADER_TABLE_SIZE.
+  size_t settings_size_bound() const { return settings_size_bound_; }
+
+  // Current and maximum estimated byte size of the table, as described in
+  // 4.1. Notably, this is /not/ the number of entries in the table.
+  size_t size() const { return size_; }
+  size_t max_size() const { return max_size_; }
+
+  // Returns the entry matching the index, or NULL.
+  const HpackEntry* GetByIndex(size_t index);
+
+  // Returns the lowest-value entry having |name|, or NULL.
+  const HpackEntry* GetByName(base::StringPiece name);
+
+  // Returns the lowest-index matching entry, or NULL.
+  const HpackEntry* GetByNameAndValue(base::StringPiece name,
+                                      base::StringPiece value);
+
+  // Returns the index of an entry within this header table.
+  size_t IndexOf(const HpackEntry* entry) const;
+
+  // Sets the maximum size of the header table, evicting entries if
+  // necessary as described in 5.2.
+  void SetMaxSize(size_t max_size);
+
+  // Sets the SETTINGS_HEADER_TABLE_SIZE bound of the table. Will call
+  // SetMaxSize() as needed to preserve max_size() <= settings_size_bound().
+  void SetSettingsHeaderTableSize(size_t settings_size);
+
+  // Determine the set of entries which would be evicted by the insertion
+  // of |name| & |value| into the table, as per section 4.4. No eviction
+  // actually occurs. The set is returned via range [begin_out, end_out).
+  void EvictionSet(base::StringPiece name,
+                   base::StringPiece value,
+                   EntryTable::iterator* begin_out,
+                   EntryTable::iterator* end_out);
+
+  // Adds an entry for the representation, evicting entries as needed. |name|
+  // and |value| must not be owned by an entry which could be evicted. The
+  // added HpackEntry is returned, or NULL is returned if all entries were
+  // evicted and the empty table is of insufficent size for the representation.
+  const HpackEntry* TryAddEntry(base::StringPiece name,
+                                base::StringPiece value);
+
+  void DebugLogTableState() const;
+
+  // Caller retains ownership of |visitor|.
+  void set_debug_visitor(DebugVisitorInterface* visitor) {
+    debug_visitor_ = visitor;
+  }
+
+ private:
+  // Returns number of evictions required to enter |name| & |value|.
+  size_t EvictionCountForEntry(base::StringPiece name,
+                               base::StringPiece value) const;
+
+  // Returns number of evictions required to reclaim |reclaim_size| table size.
+  size_t EvictionCountToReclaim(size_t reclaim_size) const;
+
+  // Evicts |count| oldest entries from the table.
+  void Evict(size_t count);
+
+  // |static_entries_| and |static_index_| are owned by HpackStaticTable
+  // singleton.
+  const EntryTable& static_entries_;
+  EntryTable dynamic_entries_;
+
+  // Tracks the unique HpackEntry for a given header name and value.
+  const UnorderedEntrySet& static_index_;
+
+  // Tracks the first static entry for each name in the static table.
+  const NameToEntryMap& static_name_index_;
+
+  // Tracks the most recently inserted HpackEntry for a given header name and
+  // value.
+  UnorderedEntrySet dynamic_index_;
+
+  // Tracks the most recently inserted HpackEntry for a given header name.
+  NameToEntryMap dynamic_name_index_;
+
+  // Last acknowledged value for SETTINGS_HEADER_TABLE_SIZE.
+  size_t settings_size_bound_;
+
+  // Estimated current and maximum byte size of the table.
+  // |max_size_| <= |settings_size_bound_|
+  size_t size_;
+  size_t max_size_;
+
+  // Total number of table insertions which have occurred. Referenced by
+  // IndexOf() for determination of an HpackEntry's table index.
+  size_t total_insertions_;
+
+  DebugVisitorInterface* debug_visitor_;
+
+  DISALLOW_COPY_AND_ASSIGN(HpackHeaderTable);
+};
+
+}  // namespace net
+
+#endif  // NET_SPDY_HPACK_HEADER_TABLE_H_
diff --git a/src/net/spdy/platform/api/spdy_export.h b/src/net/spdy/platform/api/spdy_export.h
new file mode 100644
index 0000000..9ea2d14
--- /dev/null
+++ b/src/net/spdy/platform/api/spdy_export.h
@@ -0,0 +1,10 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_API_SPDY_EXPORT_H_
+#define NET_SPDY_PLATFORM_API_SPDY_EXPORT_H_
+
+#include "net/spdy/platform/impl/spdy_export_impl.h"
+
+#endif  // NET_SPDY_PLATFORM_API_SPDY_EXPORT_H_
diff --git a/src/net/spdy/platform/api/spdy_ptr_util.h b/src/net/spdy/platform/api/spdy_ptr_util.h
new file mode 100644
index 0000000..32e5cb5
--- /dev/null
+++ b/src/net/spdy/platform/api/spdy_ptr_util.h
@@ -0,0 +1,24 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_API_SPDY_PTR_UTIL_H_
+#define NET_SPDY_PLATFORM_API_SPDY_PTR_UTIL_H_
+
+#include "net/spdy/platform/impl/spdy_ptr_util_impl.h"
+
+namespace net {
+
+template <typename T, typename... Args>
+std::unique_ptr<T> SpdyMakeUnique(Args&&... args) {
+  return SpdyMakeUniqueImpl<T>(std::forward<Args>(args)...);
+}
+
+template <typename T>
+std::unique_ptr<T> SpdyWrapUnique(T* ptr) {
+  return SpdyWrapUniqueImpl<T>(ptr);
+}
+
+}  // namespace net
+
+#endif  // NET_SPDY_PLATFORM_API_SPDY_PTR_UTIL_H_
diff --git a/src/net/spdy/platform/impl/spdy_export_impl.h b/src/net/spdy/platform/impl/spdy_export_impl.h
new file mode 100644
index 0000000..d5528a7
--- /dev/null
+++ b/src/net/spdy/platform/impl/spdy_export_impl.h
@@ -0,0 +1,13 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_IMPL_SPDY_EXPORT_IMPL_H_
+#define NET_SPDY_PLATFORM_IMPL_SPDY_EXPORT_IMPL_H_
+
+#include "net/base/net_export.h"
+
+#define SPDY_EXPORT NET_EXPORT
+#define SPDY_EXPORT_PRIVATE NET_EXPORT_PRIVATE
+
+#endif  // NET_SPDY_PLATFORM_IMPL_SPDY_EXPORT_IMPL_H_
diff --git a/src/net/spdy/platform/impl/spdy_ptr_util_impl.h b/src/net/spdy/platform/impl/spdy_ptr_util_impl.h
new file mode 100644
index 0000000..d099a8c
--- /dev/null
+++ b/src/net/spdy/platform/impl/spdy_ptr_util_impl.h
@@ -0,0 +1,24 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_PLATFORM_IMPL_SPDY_PTR_UTIL_IMPL_H_
+#define NET_SPDY_PLATFORM_IMPL_SPDY_PTR_UTIL_IMPL_H_
+
+#include "base/memory/ptr_util.h"
+
+namespace net {
+
+template <typename T, typename... Args>
+std::unique_ptr<T> SpdyMakeUniqueImpl(Args&&... args) {
+  return base::MakeUnique<T>(std::forward<Args>(args)...);
+}
+
+template <typename T>
+std::unique_ptr<T> SpdyWrapUniqueImpl(T* ptr) {
+  return base::WrapUnique<T>(ptr);
+}
+
+}  // namespace net
+
+#endif  // NET_SPDY_PLATFORM_IMPL_SPDY_PTR_UTIL_IMPL_H_
diff --git a/src/net/spdy/spdy_framer.cc.orig b/src/net/spdy/spdy_framer.cc.orig
new file mode 100644
index 0000000..793aeff
--- /dev/null
+++ b/src/net/spdy/spdy_framer.cc.orig
@@ -0,0 +1,3245 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/spdy/spdy_framer.h"
+
+#include <string.h>
+
+#include <algorithm>
+#include <ios>
+#include <iterator>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/lazy_instance.h"
+#include "base/metrics/histogram_macros.h"
+#include "net/quic/quic_flags.h"
+#include "net/spdy/hpack/hpack_constants.h"
+#include "net/spdy/spdy_bitmasks.h"
+#include "net/spdy/spdy_bug_tracker.h"
+#include "net/spdy/spdy_frame_builder.h"
+#include "net/spdy/spdy_frame_reader.h"
+#include "net/spdy/spdy_headers_block_parser.h"
+#include "third_party/zlib/zlib.h"
+
+using base::StringPiece;
+using std::hex;
+using std::string;
+using std::vector;
+
+namespace net {
+
+namespace {
+
+// Compute the id of our dictionary so that we know we're using the
+// right one when asked for it.
+uLong CalculateDictionaryId(const char* dictionary,
+                            const size_t dictionary_size) {
+  uLong initial_value = adler32(0L, Z_NULL, 0);
+  return adler32(initial_value,
+                 reinterpret_cast<const Bytef*>(dictionary),
+                 dictionary_size);
+}
+
+#if !defined(USE_SYSTEM_ZLIB)
+// Check to see if the name and value of a cookie are both empty.
+bool IsCookieEmpty(const base::StringPiece& cookie) {
+  if (cookie.size() == 0) {
+     return true;
+  }
+  size_t pos = cookie.find('=');
+  if (pos  == base::StringPiece::npos) {
+     return false;
+  }
+  // Ignore leading whitespaces of cookie value.
+  size_t value_start = pos + 1;
+  for (; value_start < cookie.size(); value_start++) {
+     if (!(cookie[value_start] == ' ' || cookie[value_start] == '\t')) {
+        break;
+     }
+  }
+  return (pos == 0) && ((cookie.size() - value_start) == 0);
+}
+#endif  // !defined(USE_SYSTEM_ZLIB)
+
+// Pack parent stream ID and exclusive flag into the format used by HTTP/2
+// headers and priority frames.
+uint32_t PackStreamDependencyValues(bool exclusive,
+                                    SpdyStreamId parent_stream_id) {
+  // Make sure the highest-order bit in the parent stream id is zeroed out.
+  uint32_t parent = parent_stream_id & 0x7fffffff;
+  // Set the one-bit exclusivity flag.
+  uint32_t e_bit = exclusive ? 0x80000000 : 0;
+  return parent | e_bit;
+}
+
+// Unpack parent stream ID and exclusive flag from the format used by HTTP/2
+// headers and priority frames.
+void UnpackStreamDependencyValues(uint32_t packed,
+                                  bool* exclusive,
+                                  SpdyStreamId* parent_stream_id) {
+  *exclusive = (packed >> 31) != 0;
+  // Zero out the highest-order bit to get the parent stream id.
+  *parent_stream_id = packed & 0x7fffffff;
+}
+
+struct DictionaryIds {
+  DictionaryIds()
+      : v3_dictionary_id(
+            CalculateDictionaryId(kV3Dictionary, kV3DictionarySize)) {}
+  const uLong v3_dictionary_id;
+};
+
+// Adler ID for the SPDY header compressor dictionaries. Note that they are
+// initialized lazily to avoid static initializers.
+base::LazyInstance<DictionaryIds>::Leaky g_dictionary_ids;
+
+// Used to indicate no flags in a SPDY flags field.
+const uint8_t kNoFlags = 0;
+
+// Wire sizes of priority payloads.
+const size_t kPriorityDependencyPayloadSize = 4;
+const size_t kPriorityWeightPayloadSize = 1;
+
+// Wire size of pad length field.
+const size_t kPadLengthFieldSize = 1;
+
+}  // namespace
+
+const SpdyStreamId SpdyFramer::kInvalidStream = static_cast<SpdyStreamId>(-1);
+const size_t SpdyFramer::kHeaderDataChunkMaxSize = 1024;
+// Even though the length field is 24 bits, we keep this 16 kB
+// limit on control frame size for legacy reasons and to
+// mitigate DOS attacks.
+const size_t SpdyFramer::kMaxControlFrameSize = (1 << 14) - 1;
+// The size of the control frame buffer. Must be >= the minimum size of the
+// largest control frame, which is SYN_STREAM. See GetSynStreamMinimumSize() for
+// calculation details.
+const size_t SpdyFramer::kControlFrameBufferSize = 19;
+
+#ifdef DEBUG_SPDY_STATE_CHANGES
+#define CHANGE_STATE(newstate)                                  \
+  do {                                                          \
+    DVLOG(1) << "Changing state from: "                         \
+             << StateToString(state_)                           \
+             << " to " << StateToString(newstate) << "\n";      \
+    DCHECK(state_ != SPDY_ERROR);                               \
+    DCHECK_EQ(previous_state_, state_);                         \
+    previous_state_ = state_;                                   \
+    state_ = newstate;                                          \
+  } while (false)
+#else
+#define CHANGE_STATE(newstate)                                  \
+  do {                                                          \
+    DCHECK(state_ != SPDY_ERROR);                               \
+    DCHECK_EQ(previous_state_, state_);                         \
+    previous_state_ = state_;                                   \
+    state_ = newstate;                                          \
+  } while (false)
+#endif
+
+SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat(SpdyMajorVersion version,
+                                                      uint32_t wire) {
+  return SettingsFlagsAndId(base::NetToHost32(wire) >> 24,
+                            base::NetToHost32(wire) & 0x00ffffff);
+}
+
+SettingsFlagsAndId::SettingsFlagsAndId(uint8_t flags, uint32_t id)
+    : flags_(flags), id_(id & 0x00ffffff) {
+  SPDY_BUG_IF(id > (1u << 24)) << "SPDY setting ID too large: " << id;
+}
+
+uint32_t SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) const {
+  return base::HostToNet32(id_ & 0x00ffffff) | base::HostToNet32(flags_ << 24);
+}
+
+bool SpdyFramerVisitorInterface::OnGoAwayFrameData(const char* goaway_data,
+                                                   size_t len) {
+  return true;
+}
+
+bool SpdyFramerVisitorInterface::OnRstStreamFrameData(
+    const char* rst_stream_data,
+    size_t len) {
+  return true;
+}
+
+SpdyFramer::SpdyFramer(SpdyMajorVersion version)
+    : current_frame_buffer_(kControlFrameBufferSize),
+      expect_continuation_(0),
+      visitor_(NULL),
+      debug_visitor_(NULL),
+      header_handler_(nullptr),
+      display_protocol_("SPDY"),
+      protocol_version_(version),
+      enable_compression_(true),
+      syn_frame_processed_(false),
+      probable_http_response_(false),
+      end_stream_when_done_(false) {
+  DCHECK(protocol_version_ == SPDY3 || protocol_version_ == HTTP2);
+  // TODO(bnc): The way kMaxControlFrameSize is currently interpreted, it
+  // includes the frame header, whereas kSpdyInitialFrameSizeLimit does not.
+  // Therefore this assertion is unnecessarily strict.
+  static_assert(kMaxControlFrameSize <= kSpdyInitialFrameSizeLimit,
+                "Our send limit should be at most our receive limit");
+  Reset();
+}
+
+SpdyFramer::~SpdyFramer() {
+  if (header_compressor_.get()) {
+    deflateEnd(header_compressor_.get());
+  }
+  if (header_decompressor_.get()) {
+    inflateEnd(header_decompressor_.get());
+  }
+}
+
+void SpdyFramer::Reset() {
+  state_ = SPDY_READY_FOR_FRAME;
+  previous_state_ = SPDY_READY_FOR_FRAME;
+  error_code_ = SPDY_NO_ERROR;
+  remaining_data_length_ = 0;
+  remaining_control_header_ = 0;
+  current_frame_buffer_.Rewind();
+  current_frame_type_ = DATA;
+  current_frame_flags_ = 0;
+  current_frame_length_ = 0;
+  current_frame_stream_id_ = kInvalidStream;
+  settings_scratch_.Reset();
+  altsvc_scratch_.reset();
+  remaining_padding_payload_length_ = 0;
+}
+
+size_t SpdyFramer::GetDataFrameMinimumSize() const {
+  return SpdyConstants::GetDataFrameMinimumSize(protocol_version_);
+}
+
+// Size, in bytes, of the control frame header.
+size_t SpdyFramer::GetControlFrameHeaderSize() const {
+  return SpdyConstants::GetControlFrameHeaderSize(protocol_version_);
+}
+
+size_t SpdyFramer::GetSynStreamMinimumSize() const {
+  // Size, in bytes, of a SYN_STREAM frame not including the variable-length
+  // header block.
+  if (protocol_version_ == SPDY3) {
+    // Calculated as:
+    // control frame header + 2 * 4 (stream IDs) + 1 (priority)
+    // + 1 (unused)
+    return GetControlFrameHeaderSize() + 10;
+  } else {
+    return GetControlFrameHeaderSize() +
+        kPriorityDependencyPayloadSize +
+        kPriorityWeightPayloadSize;
+  }
+}
+
+size_t SpdyFramer::GetSynReplyMinimumSize() const {
+  // Size, in bytes, of a SYN_REPLY frame not including the variable-length
+  // header block.
+  size_t size = GetControlFrameHeaderSize();
+  if (protocol_version_ == SPDY3) {
+    // Calculated as:
+    // control frame header + 4 (stream IDs)
+    size += 4;
+  }
+
+  return size;
+}
+
+// TODO(jamessynge): Rename this to GetRstStreamSize as the frame is fixed size.
+size_t SpdyFramer::GetRstStreamMinimumSize() const {
+  // Size, in bytes, of a RST_STREAM frame.
+  if (protocol_version_ == SPDY3) {
+    // Calculated as:
+    // control frame header + 4 (stream id) + 4 (status code)
+    return GetControlFrameHeaderSize() + 8;
+  } else {
+    // Calculated as:
+    // frame prefix + 4 (status code)
+    return GetControlFrameHeaderSize() + 4;
+  }
+}
+
+size_t SpdyFramer::GetSettingsMinimumSize() const {
+  // Size, in bytes, of a SETTINGS frame not including the IDs and values
+  // from the variable-length value block. Calculated as:
+  // control frame header + 4 (number of ID/value pairs)
+  if (protocol_version_ == SPDY3) {
+    return GetControlFrameHeaderSize() + 4;
+  } else {
+    return GetControlFrameHeaderSize();
+  }
+}
+
+size_t SpdyFramer::GetPingSize() const {
+  // Size, in bytes, of this PING frame.
+  if (protocol_version_ == SPDY3) {
+    // Calculated as:
+    // control frame header + 4 (id)
+    return GetControlFrameHeaderSize() + 4;
+  } else {
+    // Calculated as:
+    // control frame header + 8 (id)
+    return GetControlFrameHeaderSize() + 8;
+  }
+}
+
+size_t SpdyFramer::GetGoAwayMinimumSize() const {
+  // Size, in bytes, of this GOAWAY frame. Calculated as:
+  // Control frame header + last stream id (4 bytes) + error code (4 bytes).
+  return GetControlFrameHeaderSize() + 8;
+}
+
+size_t SpdyFramer::GetHeadersMinimumSize() const  {
+  // Size, in bytes, of a HEADERS frame not including the variable-length
+  // header block.
+  size_t size = GetControlFrameHeaderSize();
+  if (protocol_version_ == SPDY3) {
+    // Calculated as:
+    // control frame header + 4 (stream IDs)
+    size += 4;
+  }
+
+  return size;
+}
+
+size_t SpdyFramer::GetWindowUpdateSize() const {
+  // Size, in bytes, of a WINDOW_UPDATE frame.
+  if (protocol_version_ == SPDY3) {
+    // Calculated as:
+    // control frame header + 4 (stream id) + 4 (delta)
+    return GetControlFrameHeaderSize() + 8;
+  } else {
+    // Calculated as:
+    // frame prefix + 4 (delta)
+    return GetControlFrameHeaderSize() + 4;
+  }
+}
+
+size_t SpdyFramer::GetBlockedSize() const {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  // Size, in bytes, of a BLOCKED frame.
+  // The BLOCKED frame has no payload beyond the control frame header.
+  return GetControlFrameHeaderSize();
+}
+
+size_t SpdyFramer::GetPushPromiseMinimumSize() const {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  // Size, in bytes, of a PUSH_PROMISE frame, sans the embedded header block.
+  // Calculated as frame prefix + 4 (promised stream id).
+  return GetControlFrameHeaderSize() + 4;
+}
+
+size_t SpdyFramer::GetContinuationMinimumSize() const {
+  // Size, in bytes, of a CONTINUATION frame not including the variable-length
+  // headers fragments.
+  return GetControlFrameHeaderSize();
+}
+
+size_t SpdyFramer::GetAltSvcMinimumSize() const {
+  // Size, in bytes, of an ALTSVC frame not including the Field-Value and
+  // (optional) Origin fields, both of which can vary in length.  Note that this
+  // gives a lower bound on the frame size rather than a true minimum; the
+  // actual frame should always be larger than this.
+  // Calculated as frame prefix + 2 (origin_len).
+  return GetControlFrameHeaderSize() + 2;
+}
+
+size_t SpdyFramer::GetPrioritySize() const {
+  // Size, in bytes, of a PRIORITY frame.
+  return GetControlFrameHeaderSize() +
+      kPriorityDependencyPayloadSize +
+      kPriorityWeightPayloadSize;
+}
+
+size_t SpdyFramer::GetFrameMinimumSize() const {
+  return std::min(GetDataFrameMinimumSize(), GetControlFrameHeaderSize());
+}
+
+size_t SpdyFramer::GetFrameMaximumSize() const {
+  return SpdyConstants::GetFrameMaximumSize(protocol_version_);
+}
+
+size_t SpdyFramer::GetDataFrameMaximumPayload() const {
+  return GetFrameMaximumSize() - GetDataFrameMinimumSize();
+}
+
+size_t SpdyFramer::GetPrefixLength(SpdyFrameType type) const {
+  return SpdyConstants::GetPrefixLength(type, protocol_version_);
+}
+
+const char* SpdyFramer::StateToString(int state) {
+  switch (state) {
+    case SPDY_ERROR:
+      return "ERROR";
+    case SPDY_FRAME_COMPLETE:
+      return "FRAME_COMPLETE";
+    case SPDY_READY_FOR_FRAME:
+      return "READY_FOR_FRAME";
+    case SPDY_READING_COMMON_HEADER:
+      return "READING_COMMON_HEADER";
+    case SPDY_CONTROL_FRAME_PAYLOAD:
+      return "CONTROL_FRAME_PAYLOAD";
+    case SPDY_READ_DATA_FRAME_PADDING_LENGTH:
+      return "SPDY_READ_DATA_FRAME_PADDING_LENGTH";
+    case SPDY_CONSUME_PADDING:
+      return "SPDY_CONSUME_PADDING";
+    case SPDY_IGNORE_REMAINING_PAYLOAD:
+      return "IGNORE_REMAINING_PAYLOAD";
+    case SPDY_FORWARD_STREAM_FRAME:
+      return "FORWARD_STREAM_FRAME";
+    case SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK:
+      return "SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK";
+    case SPDY_CONTROL_FRAME_HEADER_BLOCK:
+      return "SPDY_CONTROL_FRAME_HEADER_BLOCK";
+    case SPDY_GOAWAY_FRAME_PAYLOAD:
+      return "SPDY_GOAWAY_FRAME_PAYLOAD";
+    case SPDY_RST_STREAM_FRAME_PAYLOAD:
+      return "SPDY_RST_STREAM_FRAME_PAYLOAD";
+    case SPDY_SETTINGS_FRAME_HEADER:
+      return "SPDY_SETTINGS_FRAME_HEADER";
+    case SPDY_SETTINGS_FRAME_PAYLOAD:
+      return "SPDY_SETTINGS_FRAME_PAYLOAD";
+    case SPDY_ALTSVC_FRAME_PAYLOAD:
+      return "SPDY_ALTSVC_FRAME_PAYLOAD";
+  }
+  return "UNKNOWN_STATE";
+}
+
+void SpdyFramer::set_error(SpdyError error) {
+  DCHECK(visitor_);
+  error_code_ = error;
+  // These values will usually get reset once we come to the end
+  // of a header block, but if we run into an error that
+  // might not happen, so reset them here.
+  expect_continuation_ = 0;
+  end_stream_when_done_ = false;
+
+  CHANGE_STATE(SPDY_ERROR);
+  visitor_->OnError(this);
+}
+
+const char* SpdyFramer::ErrorCodeToString(int error_code) {
+  switch (error_code) {
+    case SPDY_NO_ERROR:
+      return "NO_ERROR";
+    case SPDY_INVALID_STREAM_ID:
+      return "INVALID_STREAM_ID";
+    case SPDY_INVALID_CONTROL_FRAME:
+      return "INVALID_CONTROL_FRAME";
+    case SPDY_CONTROL_PAYLOAD_TOO_LARGE:
+      return "CONTROL_PAYLOAD_TOO_LARGE";
+    case SPDY_INVALID_CONTROL_FRAME_SIZE:
+      return "INVALID_CONTROL_FRAME_SIZE";
+    case SPDY_ZLIB_INIT_FAILURE:
+      return "ZLIB_INIT_FAILURE";
+    case SPDY_UNSUPPORTED_VERSION:
+      return "UNSUPPORTED_VERSION";
+    case SPDY_DECOMPRESS_FAILURE:
+      return "DECOMPRESS_FAILURE";
+    case SPDY_COMPRESS_FAILURE:
+      return "COMPRESS_FAILURE";
+    case SPDY_INVALID_PADDING:
+      return "SPDY_INVALID_PADDING";
+    case SPDY_INVALID_DATA_FRAME_FLAGS:
+      return "SPDY_INVALID_DATA_FRAME_FLAGS";
+    case SPDY_INVALID_CONTROL_FRAME_FLAGS:
+      return "SPDY_INVALID_CONTROL_FRAME_FLAGS";
+    case SPDY_UNEXPECTED_FRAME:
+      return "UNEXPECTED_FRAME";
+    case SPDY_INTERNAL_FRAMER_ERROR:
+      return "SPDY_INTERNAL_FRAMER_ERROR";
+  }
+  return "UNKNOWN_ERROR";
+}
+
+const char* SpdyFramer::StatusCodeToString(int status_code) {
+  switch (status_code) {
+    case RST_STREAM_INVALID:
+      return "INVALID";
+    case RST_STREAM_PROTOCOL_ERROR:
+      return "PROTOCOL_ERROR";
+    case RST_STREAM_INVALID_STREAM:
+      return "INVALID_STREAM";
+    case RST_STREAM_REFUSED_STREAM:
+      return "REFUSED_STREAM";
+    case RST_STREAM_UNSUPPORTED_VERSION:
+      return "UNSUPPORTED_VERSION";
+    case RST_STREAM_CANCEL:
+      return "CANCEL";
+    case RST_STREAM_INTERNAL_ERROR:
+      return "INTERNAL_ERROR";
+    case RST_STREAM_FLOW_CONTROL_ERROR:
+      return "FLOW_CONTROL_ERROR";
+    case RST_STREAM_STREAM_IN_USE:
+      return "STREAM_IN_USE";
+    case RST_STREAM_STREAM_ALREADY_CLOSED:
+      return "STREAM_ALREADY_CLOSED";
+    case RST_STREAM_FRAME_TOO_LARGE:
+      return "FRAME_TOO_LARGE";
+    case RST_STREAM_CONNECT_ERROR:
+      return "CONNECT_ERROR";
+    case RST_STREAM_ENHANCE_YOUR_CALM:
+      return "ENHANCE_YOUR_CALM";
+    case RST_STREAM_INADEQUATE_SECURITY:
+      return "INADEQUATE_SECURITY";
+    case RST_STREAM_HTTP_1_1_REQUIRED:
+      return "HTTP_1_1_REQUIRED";
+  }
+  return "UNKNOWN_STATUS";
+}
+
+const char* SpdyFramer::FrameTypeToString(SpdyFrameType type) {
+  switch (type) {
+    case DATA:
+      return "DATA";
+    case SYN_STREAM:
+      return "SYN_STREAM";
+    case SYN_REPLY:
+      return "SYN_REPLY";
+    case RST_STREAM:
+      return "RST_STREAM";
+    case SETTINGS:
+      return "SETTINGS";
+    case PING:
+      return "PING";
+    case GOAWAY:
+      return "GOAWAY";
+    case HEADERS:
+      return "HEADERS";
+    case WINDOW_UPDATE:
+      return "WINDOW_UPDATE";
+    case PUSH_PROMISE:
+      return "PUSH_PROMISE";
+    case CONTINUATION:
+      return "CONTINUATION";
+    case PRIORITY:
+      return "PRIORITY";
+    case ALTSVC:
+      return "ALTSVC";
+    case BLOCKED:
+      return "BLOCKED";
+  }
+  return "UNKNOWN_CONTROL_TYPE";
+}
+
+size_t SpdyFramer::ProcessInput(const char* data, size_t len) {
+  DCHECK(visitor_);
+  DCHECK(data);
+
+  const size_t original_len = len;
+  do {
+    previous_state_ = state_;
+    switch (state_) {
+      case SPDY_ERROR:
+        goto bottom;
+
+      case SPDY_FRAME_COMPLETE:
+        // Should not enter in this state.
+        DCHECK_LT(len, original_len);
+        Reset();
+        if (len > 0 && !process_single_input_frame_) {
+          CHANGE_STATE(SPDY_READING_COMMON_HEADER);
+        }
+        break;
+
+      case SPDY_READY_FOR_FRAME:
+        if (len > 0) {
+          CHANGE_STATE(SPDY_READING_COMMON_HEADER);
+        }
+        break;
+
+      case SPDY_READING_COMMON_HEADER: {
+        size_t bytes_read = ProcessCommonHeader(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK: {
+        // Control frames that contain header blocks
+        // (SYN_STREAM, SYN_REPLY, HEADERS, PUSH_PROMISE, CONTINUATION)
+        // take a special path through the state machine - they
+        // will go:
+        //   1. SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK
+        //   2. SPDY_CONTROL_FRAME_HEADER_BLOCK
+        int bytes_read = ProcessControlFrameBeforeHeaderBlock(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_SETTINGS_FRAME_HEADER: {
+        int bytes_read = ProcessSettingsFrameHeader(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_SETTINGS_FRAME_PAYLOAD: {
+        int bytes_read = ProcessSettingsFramePayload(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_CONTROL_FRAME_HEADER_BLOCK: {
+        int bytes_read = ProcessControlFrameHeaderBlock(
+            data, len, protocol_version_ == HTTP2);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_RST_STREAM_FRAME_PAYLOAD: {
+        size_t bytes_read = ProcessRstStreamFramePayload(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_GOAWAY_FRAME_PAYLOAD: {
+        size_t bytes_read = ProcessGoAwayFramePayload(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_ALTSVC_FRAME_PAYLOAD: {
+        size_t bytes_read = ProcessAltSvcFramePayload(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_CONTROL_FRAME_PAYLOAD: {
+        size_t bytes_read = ProcessControlFramePayload(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_READ_DATA_FRAME_PADDING_LENGTH: {
+        size_t bytes_read = ProcessDataFramePaddingLength(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_CONSUME_PADDING: {
+        size_t bytes_read = ProcessFramePadding(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_IGNORE_REMAINING_PAYLOAD: {
+        size_t bytes_read = ProcessIgnoredControlFramePayload(/*data,*/ len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      case SPDY_FORWARD_STREAM_FRAME: {
+        size_t bytes_read = ProcessDataFramePayload(data, len);
+        len -= bytes_read;
+        data += bytes_read;
+        break;
+      }
+
+      default:
+        SPDY_BUG << "Invalid value for " << display_protocol_
+                 << " framer state: " << state_;
+        // This ensures that we don't infinite-loop if state_ gets an
+        // invalid value somehow, such as due to a SpdyFramer getting deleted
+        // from a callback it calls.
+        goto bottom;
+    }
+  } while (state_ != previous_state_);
+ bottom:
+  DCHECK(len == 0 || state_ == SPDY_ERROR || process_single_input_frame_);
+  if (current_frame_buffer_.len() == 0 && remaining_data_length_ == 0 &&
+      remaining_control_header_ == 0) {
+    DCHECK(state_ == SPDY_READY_FOR_FRAME || state_ == SPDY_ERROR)
+        << "State: " << StateToString(state_);
+  }
+
+  return original_len - len;
+}
+
+SpdyFramer::CharBuffer::CharBuffer(size_t capacity)
+    : buffer_(new char[capacity]), capacity_(capacity), len_(0) {}
+SpdyFramer::CharBuffer::~CharBuffer() {}
+
+void SpdyFramer::CharBuffer::CopyFrom(const char* data, size_t size) {
+  DCHECK_GE(capacity_, len_ + size);
+  memcpy(buffer_.get() + len_, data, size);
+  len_ += size;
+}
+
+void SpdyFramer::CharBuffer::Rewind() {
+  len_ = 0;
+}
+
+SpdyFramer::SpdySettingsScratch::SpdySettingsScratch()
+    : buffer(8), last_setting_id(-1) {}
+
+void SpdyFramer::SpdySettingsScratch::Reset() {
+  buffer.Rewind();
+  last_setting_id = -1;
+}
+
+SpdyFrameType SpdyFramer::ValidateFrameHeader(bool is_control_frame,
+                                              int frame_type_field) {
+  if (!SpdyConstants::IsValidFrameType(protocol_version_, frame_type_field)) {
+    if (protocol_version_ == SPDY3) {
+      if (is_control_frame) {
+        DLOG(WARNING) << "Invalid control frame type " << frame_type_field
+                      << " (protocol version: " << protocol_version_ << ")";
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else {
+        // Else it's a SPDY3 data frame which we don't validate further here
+      }
+    } else {
+      // In HTTP2 we ignore unknown frame types for extensibility, as long as
+      // the rest of the control frame header is valid.
+      // We rely on the visitor to check validity of current_frame_stream_id_.
+      bool valid_stream =
+          visitor_->OnUnknownFrame(current_frame_stream_id_, frame_type_field);
+      if (expect_continuation_) {
+        // Report an unexpected frame error and close the connection
+        // if we expect a continuation and receive an unknown frame.
+        DLOG(ERROR) << "The framer was expecting to receive a CONTINUATION "
+                    << "frame, but instead received an unknown frame of type "
+                    << frame_type_field;
+        set_error(SPDY_UNEXPECTED_FRAME);
+      } else if (!valid_stream) {
+        // Report an invalid frame error and close the stream if the
+        // stream_id is not valid.
+        DLOG(WARNING) << "Unknown control frame type " << frame_type_field
+                      << " received on invalid stream "
+                      << current_frame_stream_id_;
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else {
+        DVLOG(1) << "Ignoring unknown frame type.";
+        CHANGE_STATE(SPDY_IGNORE_REMAINING_PAYLOAD);
+      }
+    }
+    return DATA;
+  }
+
+  SpdyFrameType frame_type =
+      SpdyConstants::ParseFrameType(protocol_version_, frame_type_field);
+
+  if (protocol_version_ == HTTP2) {
+    if (!SpdyConstants::IsValidHTTP2FrameStreamId(current_frame_stream_id_,
+                                                  frame_type)) {
+      DLOG(ERROR) << "The framer received an invalid streamID of "
+                  << current_frame_stream_id_ << " for a frame of type "
+                  << FrameTypeToString(frame_type);
+      set_error(SPDY_INVALID_STREAM_ID);
+      return frame_type;
+    }
+
+    // Ensure that we see a CONTINUATION frame iff we expect to.
+    if ((frame_type == CONTINUATION) != (expect_continuation_ != 0)) {
+      if (expect_continuation_ != 0) {
+        DLOG(ERROR) << "The framer was expecting to receive a CONTINUATION "
+                    << "frame, but instead received a frame of type "
+                    << FrameTypeToString(frame_type);
+      } else {
+        DLOG(ERROR) << "The framer received an unexpected CONTINUATION frame.";
+      }
+      set_error(SPDY_UNEXPECTED_FRAME);
+      return frame_type;
+    }
+  }
+
+  return frame_type;
+}
+
+size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) {
+  // This should only be called when we're in the SPDY_READING_COMMON_HEADER
+  // state.
+  DCHECK_EQ(state_, SPDY_READING_COMMON_HEADER);
+
+  size_t original_len = len;
+
+  // Update current frame buffer as needed.
+  if (current_frame_buffer_.len() < GetControlFrameHeaderSize()) {
+    size_t bytes_desired =
+        GetControlFrameHeaderSize() - current_frame_buffer_.len();
+    UpdateCurrentFrameBuffer(&data, &len, bytes_desired);
+  }
+
+  if (current_frame_buffer_.len() < GetControlFrameHeaderSize()) {
+    // Not enough information to do anything meaningful.
+    return original_len - len;
+  }
+
+  SpdyFrameReader reader(current_frame_buffer_.data(),
+                         current_frame_buffer_.len());
+  bool is_control_frame = false;
+
+  int control_frame_type_field =
+      SpdyConstants::DataFrameType(protocol_version_);
+  // ProcessControlFrameHeader() will set current_frame_type_ to the
+  // correct value if this is a valid control frame.
+  current_frame_type_ = DATA;
+  if (protocol_version_ == SPDY3) {
+    uint16_t version = 0;
+    bool successful_read = reader.ReadUInt16(&version);
+    DCHECK(successful_read);
+    is_control_frame = (version & kControlFlagMask) != 0;
+    if (is_control_frame) {
+      version &= ~kControlFlagMask;
+      if (version != kSpdy3Version) {
+        // Version does not match the version the framer was initialized with.
+        DVLOG(1) << "Unsupported SPDY version " << version << " (expected "
+                 << kSpdy3Version << ")";
+        set_error(SPDY_UNSUPPORTED_VERSION);
+        return 0;
+      }
+      uint16_t control_frame_type_field_uint16;
+      successful_read = reader.ReadUInt16(&control_frame_type_field_uint16);
+      control_frame_type_field = control_frame_type_field_uint16;
+    } else {
+      reader.Rewind();
+      successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+    }
+    DCHECK(successful_read);
+
+    successful_read = reader.ReadUInt8(&current_frame_flags_);
+    DCHECK(successful_read);
+
+    uint32_t length_field = 0;
+    successful_read = reader.ReadUInt24(&length_field);
+    DCHECK(successful_read);
+    remaining_data_length_ = length_field;
+    current_frame_length_ = remaining_data_length_ + reader.GetBytesConsumed();
+  } else {
+    uint32_t length_field = 0;
+    bool successful_read = reader.ReadUInt24(&length_field);
+    DCHECK(successful_read);
+
+    uint8_t control_frame_type_field_uint8;
+    successful_read = reader.ReadUInt8(&control_frame_type_field_uint8);
+    DCHECK(successful_read);
+    // We check control_frame_type_field's validity in
+    // ProcessControlFrameHeader().
+    control_frame_type_field = control_frame_type_field_uint8;
+    is_control_frame =
+        control_frame_type_field !=
+        SpdyConstants::SerializeFrameType(protocol_version_, DATA);
+
+    if (is_control_frame) {
+      current_frame_length_ = length_field + GetControlFrameHeaderSize();
+    } else {
+      current_frame_length_ = length_field + GetDataFrameMinimumSize();
+    }
+
+    successful_read = reader.ReadUInt8(&current_frame_flags_);
+    DCHECK(successful_read);
+
+    successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+    DCHECK(successful_read);
+
+    remaining_data_length_ = current_frame_length_ - reader.GetBytesConsumed();
+  }
+
+  DCHECK_EQ(is_control_frame ? GetControlFrameHeaderSize()
+                             : GetDataFrameMinimumSize(),
+            reader.GetBytesConsumed());
+  DCHECK_EQ(current_frame_length_,
+            remaining_data_length_ + reader.GetBytesConsumed());
+
+  // This is just a sanity check for help debugging early frame errors.
+  if (remaining_data_length_ > 1000000u) {
+    // The strncmp for 5 is safe because we only hit this point if we
+    // have kMinCommonHeader (8) bytes
+    if (!syn_frame_processed_ &&
+        strncmp(current_frame_buffer_.data(), "HTTP/", 5) == 0) {
+      LOG(WARNING) << "Unexpected HTTP response to " << display_protocol_
+                   << " request";
+      probable_http_response_ = true;
+    } else {
+      LOG(WARNING) << "Unexpectedly large frame.  " << display_protocol_
+                   << " session is likely corrupt.";
+    }
+  }
+
+  current_frame_type_ =
+      ValidateFrameHeader(is_control_frame, control_frame_type_field);
+
+  if (state_ == SPDY_ERROR || state_ == SPDY_IGNORE_REMAINING_PAYLOAD) {
+    return original_len - len;
+  }
+
+  // if we're here, then we have the common header all received.
+  if (!is_control_frame) {
+    if (protocol_version_ == HTTP2) {
+      // Catch bogus tests sending oversized DATA frames.
+      DCHECK_GE(GetFrameMaximumSize(), current_frame_length_)
+          << "DATA frame too large for SPDY >= 4.";
+    }
+
+    uint8_t valid_data_flags = 0;
+    if (protocol_version_ == SPDY3) {
+      valid_data_flags = DATA_FLAG_FIN;
+    } else {
+      valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_PADDED;
+    }
+
+    if (current_frame_flags_ & ~valid_data_flags) {
+      set_error(SPDY_INVALID_DATA_FRAME_FLAGS);
+    } else {
+      visitor_->OnDataFrameHeader(current_frame_stream_id_,
+                                  remaining_data_length_,
+                                  current_frame_flags_ & DATA_FLAG_FIN);
+      if (remaining_data_length_ > 0) {
+        CHANGE_STATE(SPDY_READ_DATA_FRAME_PADDING_LENGTH);
+      } else {
+        // Empty data frame.
+        if (current_frame_flags_ & DATA_FLAG_FIN) {
+          visitor_->OnStreamEnd(current_frame_stream_id_);
+        }
+        CHANGE_STATE(SPDY_FRAME_COMPLETE);
+      }
+    }
+  } else {
+    ProcessControlFrameHeader(control_frame_type_field);
+  }
+
+  return original_len - len;
+}
+
+void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
+  DCHECK_EQ(SPDY_NO_ERROR, error_code_);
+  DCHECK_LE(GetControlFrameHeaderSize(), current_frame_buffer_.len());
+
+  // Do some sanity checking on the control frame sizes and flags.
+  switch (current_frame_type_) {
+    case SYN_STREAM:
+      if (current_frame_length_ < GetSynStreamMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else if (current_frame_flags_ &
+                 ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS);
+      }
+      break;
+    case SYN_REPLY:
+      if (current_frame_length_ < GetSynReplyMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else if (current_frame_flags_ & ~CONTROL_FLAG_FIN) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS);
+      }
+      break;
+    case RST_STREAM:
+      if (current_frame_length_ != GetRstStreamMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
+      } else if (current_frame_flags_ != 0) {
+        VLOG(1) << "Undefined frame flags for RST_STREAM frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ = 0;
+      }
+      break;
+    case SETTINGS:
+    {
+      // Make sure that we have an integral number of 8-byte key/value pairs,
+      // plus a 4-byte length field in SPDY3 and below.
+      size_t values_prefix_size = (protocol_version_ == SPDY3 ? 4 : 0);
+      // Size of each key/value pair in bytes.
+      size_t setting_size = SpdyConstants::GetSettingSize(protocol_version_);
+      if (current_frame_length_ < GetSettingsMinimumSize() ||
+          (current_frame_length_ - GetControlFrameHeaderSize())
+          % setting_size != values_prefix_size) {
+        DLOG(WARNING) << "Invalid length for SETTINGS frame: "
+                      << current_frame_length_;
+        set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
+      } else if (protocol_version_ == SPDY3 &&
+                 current_frame_flags_ &
+                     ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS);
+      } else if (protocol_version_ == HTTP2 &&
+                 current_frame_flags_ & SETTINGS_FLAG_ACK &&
+                 current_frame_length_ > GetSettingsMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
+      } else if (protocol_version_ == HTTP2 &&
+                 current_frame_flags_ & ~SETTINGS_FLAG_ACK) {
+        VLOG(1) << "Undefined frame flags for SETTINGS frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ &= SETTINGS_FLAG_ACK;
+      }
+      break;
+    }
+    case PING:
+      if (current_frame_length_ != GetPingSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
+      } else {
+        if (protocol_version_ == SPDY3 && current_frame_flags_ != 0) {
+          VLOG(1) << "Undefined frame flags for PING frame: " << hex
+                  << static_cast<int>(current_frame_flags_);
+          current_frame_flags_ = 0;
+        } else if (protocol_version_ == HTTP2 &&
+                   current_frame_flags_ & ~PING_FLAG_ACK) {
+          VLOG(1) << "Undefined frame flags for PING frame: " << hex
+                  << static_cast<int>(current_frame_flags_);
+          current_frame_flags_ &= PING_FLAG_ACK;
+        }
+      }
+      break;
+    case GOAWAY:
+      {
+        // For SPDY/3, there are only mandatory fields and the header has a
+        // fixed length. For HTTP/2, optional opaque data may be appended to the
+        // GOAWAY frame, thus there is only a minimal length restriction.
+        if ((protocol_version_ == SPDY3 &&
+             current_frame_length_ != GetGoAwayMinimumSize()) ||
+            (protocol_version_ == HTTP2 &&
+             current_frame_length_ < GetGoAwayMinimumSize())) {
+          set_error(SPDY_INVALID_CONTROL_FRAME);
+        } else if (current_frame_flags_ != 0) {
+          VLOG(1) << "Undefined frame flags for GOAWAY frame: " << hex
+                  << static_cast<int>(current_frame_flags_);
+          current_frame_flags_ = 0;
+        }
+        break;
+      }
+    case HEADERS:
+      {
+        size_t min_size = GetHeadersMinimumSize();
+        if (protocol_version_ == HTTP2 &&
+            (current_frame_flags_ & HEADERS_FLAG_PRIORITY)) {
+          min_size += 4;
+        }
+        if (current_frame_length_ < min_size) {
+          // TODO(mlavan): check here for HEADERS with no payload?
+          // (not allowed in HTTP2)
+          set_error(SPDY_INVALID_CONTROL_FRAME);
+        } else if (protocol_version_ == SPDY3 &&
+                   current_frame_flags_ & ~CONTROL_FLAG_FIN) {
+          VLOG(1) << "Undefined frame flags for HEADERS frame: " << hex
+                  << static_cast<int>(current_frame_flags_);
+          current_frame_flags_ &= CONTROL_FLAG_FIN;
+        } else if (protocol_version_ == HTTP2 &&
+                   current_frame_flags_ &
+                       ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY |
+                         HEADERS_FLAG_END_HEADERS | HEADERS_FLAG_PADDED)) {
+          VLOG(1) << "Undefined frame flags for HEADERS frame: " << hex
+                  << static_cast<int>(current_frame_flags_);
+          current_frame_flags_ &=
+              (CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY |
+               HEADERS_FLAG_END_HEADERS | HEADERS_FLAG_PADDED);
+        }
+      }
+      break;
+    case WINDOW_UPDATE:
+      if (current_frame_length_ != GetWindowUpdateSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
+      } else if (current_frame_flags_ != 0) {
+        VLOG(1) << "Undefined frame flags for WINDOW_UPDATE frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ = 0;
+      }
+      break;
+    case BLOCKED:
+      if (protocol_version_ == SPDY3 ||
+          current_frame_length_ != GetBlockedSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else if (current_frame_flags_ != 0) {
+        VLOG(1) << "Undefined frame flags for BLOCKED frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ = 0;
+      }
+      break;
+    case PUSH_PROMISE:
+      if (current_frame_length_ < GetPushPromiseMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else if (protocol_version_ == SPDY3 && current_frame_flags_ != 0) {
+        VLOG(1) << "Undefined frame flags for PUSH_PROMISE frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ = 0;
+      } else if (protocol_version_ == HTTP2 &&
+                 current_frame_flags_ &
+                     ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE |
+                       HEADERS_FLAG_PADDED)) {
+        VLOG(1) << "Undefined frame flags for PUSH_PROMISE frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ &=
+            (PUSH_PROMISE_FLAG_END_PUSH_PROMISE | HEADERS_FLAG_PADDED);
+      }
+      break;
+    case CONTINUATION:
+      if (protocol_version_ == SPDY3 ||
+          current_frame_length_ < GetContinuationMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else if (current_frame_flags_ & ~HEADERS_FLAG_END_HEADERS) {
+        VLOG(1) << "Undefined frame flags for CONTINUATION frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ &= HEADERS_FLAG_END_HEADERS;
+      }
+      break;
+    case ALTSVC:
+      if (current_frame_length_ <= GetAltSvcMinimumSize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+      } else if (current_frame_flags_ != 0) {
+        VLOG(1) << "Undefined frame flags for ALTSVC frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ = 0;
+      }
+      break;
+    case PRIORITY:
+      if (protocol_version_ == SPDY3 ||
+          current_frame_length_ != GetPrioritySize()) {
+        set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
+      } else if (current_frame_flags_ != 0) {
+        VLOG(1) << "Undefined frame flags for PRIORITY frame: " << hex
+                << static_cast<int>(current_frame_flags_);
+        current_frame_flags_ = 0;
+      }
+      break;
+    default:
+      LOG(WARNING) << "Valid " << display_protocol_
+                   << " control frame with unhandled type: "
+                   << current_frame_type_;
+      // This branch should be unreachable because of the frame type bounds
+      // check above. However, we DLOG(FATAL) here in an effort to painfully
+      // club the head of the developer who failed to keep this file in sync
+      // with spdy_protocol.h.
+      set_error(SPDY_INVALID_CONTROL_FRAME);
+      DLOG(FATAL);
+      break;
+  }
+
+  if (state_ == SPDY_ERROR) {
+    return;
+  }
+
+  if (current_frame_length_ >
+      kSpdyInitialFrameSizeLimit +
+          SpdyConstants::GetControlFrameHeaderSize(protocol_version_)) {
+    DLOG(WARNING) << "Received control frame of type " << current_frame_type_
+                  << " with way too big of a payload: "
+                  << current_frame_length_;
+    set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE);
+    return;
+  }
+
+  if (current_frame_type_ == GOAWAY) {
+    CHANGE_STATE(SPDY_GOAWAY_FRAME_PAYLOAD);
+    return;
+  }
+
+  if (current_frame_type_ == RST_STREAM) {
+    CHANGE_STATE(SPDY_RST_STREAM_FRAME_PAYLOAD);
+    return;
+  }
+
+  if (current_frame_type_ == ALTSVC) {
+    CHANGE_STATE(SPDY_ALTSVC_FRAME_PAYLOAD);
+    return;
+  }
+  // Determine the frame size without variable-length data.
+  int32_t frame_size_without_variable_data;
+  switch (current_frame_type_) {
+    case SYN_STREAM:
+      syn_frame_processed_ = true;
+      frame_size_without_variable_data = GetSynStreamMinimumSize();
+      break;
+    case SYN_REPLY:
+      syn_frame_processed_ = true;
+      frame_size_without_variable_data = GetSynReplyMinimumSize();
+      break;
+    case SETTINGS:
+      frame_size_without_variable_data = GetSettingsMinimumSize();
+      break;
+    case HEADERS:
+      frame_size_without_variable_data = GetHeadersMinimumSize();
+      if (protocol_version_ == HTTP2) {
+        if (current_frame_flags_ & HEADERS_FLAG_PADDED) {
+          frame_size_without_variable_data += kPadLengthFieldSize;
+        }
+        if (current_frame_flags_ & HEADERS_FLAG_PRIORITY) {
+        frame_size_without_variable_data +=
+            kPriorityDependencyPayloadSize +
+            kPriorityWeightPayloadSize;
+        }
+      }
+      break;
+    case PUSH_PROMISE:
+      frame_size_without_variable_data = GetPushPromiseMinimumSize();
+      if (protocol_version_ == HTTP2 &&
+          current_frame_flags_ & PUSH_PROMISE_FLAG_PADDED) {
+        frame_size_without_variable_data += kPadLengthFieldSize;
+      }
+      break;
+    case CONTINUATION:
+      frame_size_without_variable_data = GetContinuationMinimumSize();
+      break;
+    default:
+      frame_size_without_variable_data = -1;
+      break;
+  }
+
+  if ((frame_size_without_variable_data == -1) &&
+      (current_frame_length_ > kControlFrameBufferSize)) {
+    // We should already be in an error state. Double-check.
+    DCHECK_EQ(SPDY_ERROR, state_);
+    if (state_ != SPDY_ERROR) {
+      SPDY_BUG << display_protocol_
+               << " control frame buffer too small for fixed-length frame.";
+      set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE);
+    }
+    return;
+  }
+
+  if (frame_size_without_variable_data > 0) {
+    // We have a control frame with variable-size data. We need to parse the
+    // remainder of the control frame's header before we can parse the payload.
+    // The start of the payload varies with the control frame type.
+    DCHECK_GE(frame_size_without_variable_data,
+              static_cast<int32_t>(current_frame_buffer_.len()));
+    remaining_control_header_ =
+        frame_size_without_variable_data - current_frame_buffer_.len();
+
+    if (current_frame_type_ == SETTINGS) {
+      CHANGE_STATE(SPDY_SETTINGS_FRAME_HEADER);
+    } else {
+      CHANGE_STATE(SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK);
+    }
+    return;
+  }
+
+  CHANGE_STATE(SPDY_CONTROL_FRAME_PAYLOAD);
+}
+
+size_t SpdyFramer::UpdateCurrentFrameBuffer(const char** data, size_t* len,
+                                            size_t max_bytes) {
+  size_t bytes_to_read = std::min(*len, max_bytes);
+  if (bytes_to_read > 0) {
+    current_frame_buffer_.CopyFrom(*data, bytes_to_read);
+    *data += bytes_to_read;
+    *len -= bytes_to_read;
+  }
+  return bytes_to_read;
+}
+
+size_t SpdyFramer::GetSerializedLength(
+    const SpdyMajorVersion spdy_version,
+    const SpdyHeaderBlock* headers) {
+  const size_t num_name_value_pairs_size = sizeof(uint32_t);
+  const size_t length_of_name_size = num_name_value_pairs_size;
+  const size_t length_of_value_size = num_name_value_pairs_size;
+
+  size_t total_length = num_name_value_pairs_size;
+  for (const auto& header : *headers) {
+    // We add space for the length of the name and the length of the value as
+    // well as the length of the name and the length of the value.
+    total_length += length_of_name_size + header.first.size() +
+                    length_of_value_size + header.second.size();
+  }
+  return total_length;
+}
+
+// TODO(phajdan.jr): Clean up after we no longer need
+// to workaround http://crbug.com/139744.
+#if !defined(USE_SYSTEM_ZLIB)
+
+// These constants are used by zlib to differentiate between normal data and
+// cookie data. Cookie data is handled specially by zlib when compressing.
+enum ZDataClass {
+  // kZStandardData is compressed normally, save that it will never match
+  // against any other class of data in the window.
+  kZStandardData = Z_CLASS_STANDARD,
+  // kZCookieData is compressed in its own Huffman blocks and only matches in
+  // its entirety and only against other kZCookieData blocks. Any matches must
+  // be preceeded by a kZStandardData byte, or a semicolon to prevent matching
+  // a suffix. It's assumed that kZCookieData ends in a semicolon to prevent
+  // prefix matches.
+  kZCookieData = Z_CLASS_COOKIE,
+  // kZHuffmanOnlyData is only Huffman compressed - no matches are performed
+  // against the window.
+  kZHuffmanOnlyData = Z_CLASS_HUFFMAN_ONLY,
+};
+
+// WriteZ writes |data| to the deflate context |out|. WriteZ will flush as
+// needed when switching between classes of data.
+static void WriteZ(const base::StringPiece& data,
+                   ZDataClass clas,
+                   z_stream* out) {
+  int rv;
+
+  // If we are switching from standard to non-standard data then we need to end
+  // the current Huffman context to avoid it leaking between them.
+  if (out->clas == kZStandardData &&
+      clas != kZStandardData) {
+    out->avail_in = 0;
+    rv = deflate(out, Z_PARTIAL_FLUSH);
+    DCHECK_EQ(Z_OK, rv);
+    DCHECK_EQ(0u, out->avail_in);
+    DCHECK_LT(0u, out->avail_out);
+  }
+
+  out->next_in = reinterpret_cast<Bytef*>(const_cast<char*>(data.data()));
+  out->avail_in = data.size();
+  out->clas = clas;
+  if (clas == kZStandardData) {
+    rv = deflate(out, Z_NO_FLUSH);
+  } else {
+    rv = deflate(out, Z_PARTIAL_FLUSH);
+  }
+  if (!data.empty()) {
+    // If we didn't provide any data then zlib will return Z_BUF_ERROR.
+    DCHECK_EQ(Z_OK, rv);
+  }
+  DCHECK_EQ(0u, out->avail_in);
+  DCHECK_LT(0u, out->avail_out);
+}
+
+// WriteLengthZ writes |n| as a |length|-byte, big-endian number to |out|.
+static void WriteLengthZ(size_t n,
+                         unsigned length,
+                         ZDataClass clas,
+                         z_stream* out) {
+  char buf[4];
+  DCHECK_LE(length, sizeof(buf));
+  for (unsigned i = 1; i <= length; i++) {
+    buf[length - i] = static_cast<char>(n);
+    n >>= 8;
+  }
+  WriteZ(base::StringPiece(buf, length), clas, out);
+}
+
+// WriteHeaderBlockToZ serialises |headers| to the deflate context |z| in a
+// manner that resists the length of the compressed data from compromising
+// cookie data.
+void SpdyFramer::WriteHeaderBlockToZ(const SpdyHeaderBlock* headers,
+                                     z_stream* z) const {
+  const size_t length_length = 4;
+  WriteLengthZ(headers->size(), length_length, kZStandardData, z);
+
+  SpdyHeaderBlock::const_iterator it;
+  for (it = headers->begin(); it != headers->end(); ++it) {
+    WriteLengthZ(it->first.size(), length_length, kZStandardData, z);
+    WriteZ(it->first, kZStandardData, z);
+
+    if (it->first == "cookie") {
+      // We require the cookie values (save for the last) to end with a
+      // semicolon and (save for the first) to start with a space. This is
+      // typically the format that we are given them in but we reserialize them
+      // to be sure.
+
+      std::vector<base::StringPiece> cookie_values;
+      size_t cookie_length = 0;
+      base::StringPiece cookie_data(it->second);
+
+      for (;;) {
+        while (!cookie_data.empty() &&
+               (cookie_data[0] == ' ' || cookie_data[0] == '\t')) {
+          cookie_data.remove_prefix(1);
+        }
+        if (cookie_data.empty())
+          break;
+
+        size_t i;
+        for (i = 0; i < cookie_data.size(); i++) {
+          if (cookie_data[i] == ';')
+            break;
+        }
+        if (i < cookie_data.size()) {
+          if (!IsCookieEmpty(cookie_data.substr(0, i))) {
+            cookie_values.push_back(cookie_data.substr(0, i));
+            cookie_length += i + 2 /* semicolon and space */;
+          }
+          cookie_data.remove_prefix(i + 1);
+        } else {
+          if (!IsCookieEmpty(cookie_data)) {
+            cookie_values.push_back(cookie_data);
+            cookie_length += cookie_data.size();
+          } else if (cookie_length > 2) {
+            cookie_length -= 2 /* compensate for previously added length */;
+          }
+          cookie_data.remove_prefix(i);
+        }
+      }
+
+      WriteLengthZ(cookie_length, length_length, kZStandardData, z);
+      for (size_t i = 0; i < cookie_values.size(); i++) {
+        std::string cookie;
+        // Since zlib will only back-reference complete cookies, a cookie that
+        // is currently last (and so doesn't have a trailing semicolon) won't
+        // match if it's later in a non-final position. The same is true of
+        // the first cookie.
+        if (i == 0 && cookie_values.size() == 1) {
+          cookie = cookie_values[i].as_string();
+        } else if (i == 0) {
+          cookie = cookie_values[i].as_string() + ";";
+        } else if (i < cookie_values.size() - 1) {
+          cookie = " " + cookie_values[i].as_string() + ";";
+        } else {
+          cookie = " " + cookie_values[i].as_string();
+        }
+        WriteZ(cookie, kZCookieData, z);
+      }
+    } else if (it->first == "accept" ||
+               it->first == "accept-charset" ||
+               it->first == "accept-encoding" ||
+               it->first == "accept-language" ||
+               it->first == "host" ||
+               it->first == "version" ||
+               it->first == "method" ||
+               it->first == "scheme" ||
+               it->first == ":host" ||
+               it->first == ":version" ||
+               it->first == ":method" ||
+               it->first == ":scheme" ||
+               it->first == "user-agent") {
+      WriteLengthZ(it->second.size(), length_length, kZStandardData, z);
+      WriteZ(it->second, kZStandardData, z);
+    } else {
+      // Non-whitelisted headers are Huffman compressed in their own block, but
+      // don't match against the window.
+      WriteLengthZ(it->second.size(), length_length, kZStandardData, z);
+      WriteZ(it->second, kZHuffmanOnlyData, z);
+    }
+  }
+
+  z->avail_in = 0;
+  int rv = deflate(z, Z_SYNC_FLUSH);
+  DCHECK_EQ(Z_OK, rv);
+  z->clas = kZStandardData;
+}
+
+#endif  // !defined(USE_SYSTEM_ZLIB)
+
+size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data,
+                                                        size_t len) {
+  DCHECK_EQ(SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK, state_);
+  const size_t original_len = len;
+
+  if (remaining_control_header_ > 0) {
+    size_t bytes_read = UpdateCurrentFrameBuffer(&data, &len,
+                                                 remaining_control_header_);
+    remaining_control_header_ -= bytes_read;
+    remaining_data_length_ -= bytes_read;
+  }
+
+  if (remaining_control_header_ == 0) {
+    SpdyFrameReader reader(current_frame_buffer_.data(),
+                           current_frame_buffer_.len());
+    reader.Seek(GetControlFrameHeaderSize());  // Seek past frame header.
+
+    switch (current_frame_type_) {
+      case SYN_STREAM:
+        {
+          DCHECK_EQ(SPDY3, protocol_version_);
+          bool successful_read = true;
+          successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+          DCHECK(successful_read);
+          if (current_frame_stream_id_ == 0) {
+            set_error(SPDY_INVALID_CONTROL_FRAME);
+            return original_len - len;
+          }
+
+          SpdyStreamId associated_to_stream_id = kInvalidStream;
+          successful_read = reader.ReadUInt31(&associated_to_stream_id);
+          DCHECK(successful_read);
+
+          SpdyPriority priority = 0;
+          successful_read = reader.ReadUInt8(&priority);
+          DCHECK(successful_read);
+          priority = priority >> 5;
+
+          // Seek past unused byte.
+          reader.Seek(1);
+
+          DCHECK(reader.IsDoneReading());
+          if (debug_visitor_) {
+            debug_visitor_->OnReceiveCompressedFrame(
+                current_frame_stream_id_,
+                current_frame_type_,
+                current_frame_length_);
+          }
+          visitor_->OnSynStream(
+              current_frame_stream_id_,
+              associated_to_stream_id,
+              priority,
+              (current_frame_flags_ & CONTROL_FLAG_FIN) != 0,
+              (current_frame_flags_ & CONTROL_FLAG_UNIDIRECTIONAL) != 0);
+        }
+        break;
+      case SYN_REPLY:
+        DCHECK_EQ(SPDY3, protocol_version_);
+        /* FALLTHROUGH */
+      case HEADERS:
+        // SYN_REPLY and HEADERS are the same, save for the visitor call.
+        {
+          bool successful_read = true;
+          if (protocol_version_ == SPDY3) {
+            successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+            DCHECK(successful_read);
+          }
+          if (current_frame_stream_id_ == 0) {
+            set_error(SPDY_INVALID_CONTROL_FRAME);
+            return original_len - len;
+          }
+          if (protocol_version_ == HTTP2 &&
+              !(current_frame_flags_ & HEADERS_FLAG_END_HEADERS) &&
+              current_frame_type_ == HEADERS) {
+            expect_continuation_ = current_frame_stream_id_;
+            end_stream_when_done_ = current_frame_flags_ & CONTROL_FLAG_FIN;
+          }
+          if (protocol_version_ == HTTP2 &&
+              current_frame_flags_ & HEADERS_FLAG_PADDED) {
+            uint8_t pad_payload_len = 0;
+            DCHECK_EQ(remaining_padding_payload_length_, 0u);
+            successful_read = reader.ReadUInt8(&pad_payload_len);
+            DCHECK(successful_read);
+            remaining_padding_payload_length_ = pad_payload_len;
+          }
+          const bool has_priority =
+              (current_frame_flags_ & HEADERS_FLAG_PRIORITY) != 0;
+          SpdyPriority priority = 0;
+          uint32_t parent_stream_id = 0;
+          bool exclusive = false;
+          if (protocol_version_ == HTTP2 && has_priority) {
+            uint32_t stream_dependency;
+            successful_read = reader.ReadUInt32(&stream_dependency);
+            DCHECK(successful_read);
+            UnpackStreamDependencyValues(stream_dependency, &exclusive,
+                                         &parent_stream_id);
+
+            uint8_t weight = 0;
+            successful_read = reader.ReadUInt8(&weight);
+            if (successful_read) {
+              priority = MapWeightToPriority(weight);
+            }
+          }
+          DCHECK(reader.IsDoneReading());
+          if (debug_visitor_) {
+            debug_visitor_->OnReceiveCompressedFrame(
+                current_frame_stream_id_,
+                current_frame_type_,
+                current_frame_length_);
+          }
+          if (current_frame_type_ == SYN_REPLY) {
+            visitor_->OnSynReply(
+                current_frame_stream_id_,
+                (current_frame_flags_ & CONTROL_FLAG_FIN) != 0);
+          } else {
+            visitor_->OnHeaders(
+                current_frame_stream_id_,
+                (current_frame_flags_ & HEADERS_FLAG_PRIORITY) != 0, priority,
+                parent_stream_id, exclusive,
+                (current_frame_flags_ & CONTROL_FLAG_FIN) != 0,
+                expect_continuation_ == 0);
+          }
+        }
+        break;
+      case PUSH_PROMISE:
+        {
+          DCHECK_EQ(HTTP2, protocol_version_);
+          if (current_frame_stream_id_ == 0) {
+            set_error(SPDY_INVALID_CONTROL_FRAME);
+            return original_len - len;
+          }
+          bool successful_read = true;
+          if (protocol_version_ == HTTP2 &&
+              current_frame_flags_ & PUSH_PROMISE_FLAG_PADDED) {
+            DCHECK_EQ(remaining_padding_payload_length_, 0u);
+            uint8_t pad_payload_len = 0;
+            successful_read = reader.ReadUInt8(&pad_payload_len);
+            DCHECK(successful_read);
+            remaining_padding_payload_length_ = pad_payload_len;
+          }
+        }
+        {
+          SpdyStreamId promised_stream_id = kInvalidStream;
+          bool successful_read = reader.ReadUInt31(&promised_stream_id);
+          DCHECK(successful_read);
+          DCHECK(reader.IsDoneReading());
+          if (promised_stream_id == 0) {
+            set_error(SPDY_INVALID_CONTROL_FRAME);
+            return original_len - len;
+          }
+          if (!(current_frame_flags_ & PUSH_PROMISE_FLAG_END_PUSH_PROMISE)) {
+            expect_continuation_ = current_frame_stream_id_;
+          }
+          if (debug_visitor_) {
+            debug_visitor_->OnReceiveCompressedFrame(
+                current_frame_stream_id_,
+                current_frame_type_,
+                current_frame_length_);
+          }
+          visitor_->OnPushPromise(current_frame_stream_id_,
+                                  promised_stream_id,
+                                  (current_frame_flags_ &
+                                   PUSH_PROMISE_FLAG_END_PUSH_PROMISE) != 0);
+        }
+        break;
+      case CONTINUATION:
+        {
+          // Check to make sure the stream id of the current frame is
+          // the same as that of the preceding frame.
+          // If we're at this point we should already know that
+          // expect_continuation_ != 0, so this doubles as a check
+          // that current_frame_stream_id != 0.
+          if (current_frame_stream_id_ != expect_continuation_) {
+            set_error(SPDY_UNEXPECTED_FRAME);
+            return original_len - len;
+          }
+          if (current_frame_flags_ & HEADERS_FLAG_END_HEADERS) {
+            expect_continuation_ = 0;
+          }
+          if (debug_visitor_) {
+            debug_visitor_->OnReceiveCompressedFrame(
+                current_frame_stream_id_,
+                current_frame_type_,
+                current_frame_length_);
+          }
+          visitor_->OnContinuation(current_frame_stream_id_,
+                                   (current_frame_flags_ &
+                                    HEADERS_FLAG_END_HEADERS) != 0);
+        }
+        break;
+      default:
+#ifndef NDEBUG
+        LOG(FATAL) << "Invalid control frame type: " << current_frame_type_;
+#else
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+        return original_len - len;
+#endif
+    }
+
+    if (current_frame_type_ != CONTINUATION) {
+      header_handler_ = visitor_->OnHeaderFrameStart(current_frame_stream_id_);
+      if (header_handler_ == nullptr) {
+        SPDY_BUG << "visitor_->OnHeaderFrameStart returned nullptr";
+        set_error(SPDY_INTERNAL_FRAMER_ERROR);
+        return original_len - len;
+      }
+      if (protocol_version() == SPDY3) {
+        header_parser_.reset(
+            new SpdyHeadersBlockParser(protocol_version(), header_handler_));
+      } else {
+        GetHpackDecoder()->HandleControlFrameHeadersStart(header_handler_);
+      }
+    }
+    CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK);
+  }
+  return original_len - len;
+}
+
+// Does not buffer the control payload. Instead, either passes directly to the
+// visitor or decompresses and then passes directly to the visitor, via
+// IncrementallyDeliverControlFrameHeaderData() or
+// IncrementallyDecompressControlFrameHeaderData() respectively.
+size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data,
+                                                  size_t data_len,
+                                                  bool is_hpack_header_block) {
+  DCHECK_EQ(SPDY_CONTROL_FRAME_HEADER_BLOCK, state_);
+
+  bool processed_successfully = true;
+  if (current_frame_type_ != SYN_STREAM &&
+      current_frame_type_ != SYN_REPLY &&
+      current_frame_type_ != HEADERS &&
+      current_frame_type_ != PUSH_PROMISE &&
+      current_frame_type_ != CONTINUATION) {
+    SPDY_BUG << "Unhandled frame type in ProcessControlFrameHeaderBlock.";
+  }
+
+  if (remaining_padding_payload_length_ > remaining_data_length_) {
+    set_error(SPDY_INVALID_PADDING);
+    return data_len;
+  }
+
+  size_t process_bytes = std::min(
+      data_len, remaining_data_length_ - remaining_padding_payload_length_);
+  if (is_hpack_header_block) {
+    if (!GetHpackDecoder()->HandleControlFrameHeadersData(data,
+                                                          process_bytes)) {
+      // TODO(jgraettinger): Finer-grained HPACK error codes.
+      set_error(SPDY_DECOMPRESS_FAILURE);
+      processed_successfully = false;
+    }
+  } else if (process_bytes > 0) {
+    if (protocol_version_ == SPDY3 && enable_compression_) {
+      processed_successfully = IncrementallyDecompressControlFrameHeaderData(
+          current_frame_stream_id_, data, process_bytes);
+    } else {
+      processed_successfully = IncrementallyDeliverControlFrameHeaderData(
+          current_frame_stream_id_, data, process_bytes);
+    }
+  }
+  remaining_data_length_ -= process_bytes;
+
+  // Handle the case that there is no futher data in this frame.
+  if (remaining_data_length_ == remaining_padding_payload_length_ &&
+      processed_successfully) {
+    if (expect_continuation_ == 0) {
+      if (is_hpack_header_block) {
+        size_t compressed_len = 0;
+        if (GetHpackDecoder()->HandleControlFrameHeadersComplete(
+                &compressed_len)) {
+          visitor_->OnHeaderFrameEnd(current_frame_stream_id_, true);
+          if (state_ == SPDY_ERROR) {
+            return data_len;
+          }
+        } else {
+          set_error(SPDY_DECOMPRESS_FAILURE);
+          processed_successfully = false;
+        }
+      } else {
+        visitor_->OnHeaderFrameEnd(current_frame_stream_id_, true);
+        if (state_ == SPDY_ERROR) {
+          return data_len;
+        }
+      }
+    }
+    if (processed_successfully) {
+      CHANGE_STATE(SPDY_CONSUME_PADDING);
+    }
+  }
+
+  // Handle error.
+  if (!processed_successfully) {
+    return data_len;
+  }
+
+  // Return amount processed.
+  return process_bytes;
+}
+
+size_t SpdyFramer::ProcessSettingsFrameHeader(const char* data, size_t len) {
+  // TODO(birenroy): Remove this state when removing SPDY3. I think it only
+  // exists to read the number of settings in the frame for SPDY3. This value
+  // is never parsed or used.
+  size_t bytes_read = 0;
+  if (remaining_control_header_ > 0) {
+    bytes_read =
+        UpdateCurrentFrameBuffer(&data, &len, remaining_control_header_);
+    remaining_control_header_ -= bytes_read;
+    remaining_data_length_ -= bytes_read;
+  }
+  if (remaining_control_header_ == 0) {
+    if (protocol_version_ == HTTP2 &&
+        current_frame_flags_ & SETTINGS_FLAG_ACK) {
+      visitor_->OnSettingsAck();
+      CHANGE_STATE(SPDY_FRAME_COMPLETE);
+    } else {
+      visitor_->OnSettings(current_frame_flags_ &
+                           SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS);
+      CHANGE_STATE(SPDY_SETTINGS_FRAME_PAYLOAD);
+    }
+  }
+  return bytes_read;
+}
+
+size_t SpdyFramer::ProcessSettingsFramePayload(const char* data,
+                                               size_t data_len) {
+  DCHECK_EQ(SPDY_SETTINGS_FRAME_PAYLOAD, state_);
+  DCHECK_EQ(SETTINGS, current_frame_type_);
+  size_t unprocessed_bytes = std::min(data_len, remaining_data_length_);
+  size_t processed_bytes = 0;
+
+  size_t setting_size = SpdyConstants::GetSettingSize(protocol_version_);
+
+  // Loop over our incoming data.
+  while (unprocessed_bytes > 0) {
+    // Process up to one setting at a time.
+    size_t processing = std::min(unprocessed_bytes,
+                                 setting_size - settings_scratch_.buffer.len());
+
+    // Check if we have a complete setting in our input.
+    if (processing == setting_size) {
+      // Parse the setting directly out of the input without buffering.
+      if (!ProcessSetting(data + processed_bytes)) {
+        set_error(SPDY_INVALID_CONTROL_FRAME);
+        return processed_bytes;
+      }
+    } else {
+      // Continue updating settings_scratch_.setting_buf.
+      settings_scratch_.buffer.CopyFrom(data + processed_bytes, processing);
+
+      // Check if we have a complete setting buffered.
+      if (settings_scratch_.buffer.len() == setting_size) {
+        if (!ProcessSetting(settings_scratch_.buffer.data())) {
+          set_error(SPDY_INVALID_CONTROL_FRAME);
+          return processed_bytes;
+        }
+        // Rewind settings buffer for our next setting.
+        settings_scratch_.buffer.Rewind();
+      }
+    }
+
+    // Iterate.
+    unprocessed_bytes -= processing;
+    processed_bytes += processing;
+  }
+
+  // Check if we're done handling this SETTINGS frame.
+  remaining_data_length_ -= processed_bytes;
+  if (remaining_data_length_ == 0) {
+    visitor_->OnSettingsEnd();
+    CHANGE_STATE(SPDY_FRAME_COMPLETE);
+  }
+
+  return processed_bytes;
+}
+
+void SpdyFramer::DeliverHpackBlockAsSpdy3Block(size_t compressed_len) {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  DCHECK_EQ(remaining_padding_payload_length_, remaining_data_length_);
+
+  const SpdyHeaderBlock& block = GetHpackDecoder()->decoded_block();
+  if (block.empty()) {
+    // Special-case this to make tests happy.
+    ProcessControlFrameHeaderBlock(NULL, 0, false);
+    return;
+  }
+  size_t payload_len = GetSerializedLength(protocol_version_, &block);
+  SpdyFrameBuilder builder(payload_len, SPDY3);
+
+  SerializeHeaderBlockWithoutCompression(&builder, block);
+  SpdySerializedFrame frame = builder.take();
+
+  // Preserve padding length, and reset it after the re-entrant call.
+  size_t remaining_padding = remaining_padding_payload_length_;
+
+  remaining_padding_payload_length_ = 0;
+  remaining_data_length_ = frame.size();
+
+  if (payload_len != 0) {
+    int compression_pct = 100 - (100 * compressed_len) / payload_len;
+    DVLOG(1) << "Net.SpdyHpackDecompressionPercentage: " << compression_pct;
+    UMA_HISTOGRAM_PERCENTAGE("Net.SpdyHpackDecompressionPercentage",
+                             compression_pct);
+  }
+
+  ProcessControlFrameHeaderBlock(frame.data(), frame.size(), false);
+
+  remaining_padding_payload_length_ = remaining_padding;
+  remaining_data_length_ = remaining_padding;
+}
+
+bool SpdyFramer::ProcessSetting(const char* data) {
+  int id_field;
+  SpdySettingsIds id;
+  uint8_t flags = 0;
+  uint32_t value;
+
+  // Extract fields.
+  // Maintain behavior of old SPDY 2 bug with byte ordering of flags/id.
+  if (protocol_version_ == SPDY3) {
+    const uint32_t id_and_flags_wire =
+        *(reinterpret_cast<const uint32_t*>(data));
+    SettingsFlagsAndId id_and_flags = SettingsFlagsAndId::FromWireFormat(
+        protocol_version_, id_and_flags_wire);
+    id_field = id_and_flags.id();
+    flags = id_and_flags.flags();
+    value = base::NetToHost32(*(reinterpret_cast<const uint32_t*>(data + 4)));
+  } else {
+    id_field = base::NetToHost16(*(reinterpret_cast<const uint16_t*>(data)));
+    value = base::NetToHost32(*(reinterpret_cast<const uint32_t*>(data + 2)));
+  }
+
+  // Validate id.
+  if (!SpdyConstants::IsValidSettingId(protocol_version_, id_field)) {
+    DLOG(WARNING) << "Unknown SETTINGS ID: " << id_field;
+    if (protocol_version_ == SPDY3) {
+      return false;
+    } else {
+      // In HTTP2 we ignore unknown settings for extensibility.
+      return true;
+    }
+  }
+  id = SpdyConstants::ParseSettingId(protocol_version_, id_field);
+
+  if (protocol_version_ == SPDY3) {
+    // Detect duplicates.
+    if (id <= settings_scratch_.last_setting_id) {
+      DLOG(WARNING) << "Duplicate entry or invalid ordering for id " << id
+                    << " in " << display_protocol_ << " SETTINGS frame "
+                    << "(last setting id was "
+                    << settings_scratch_.last_setting_id << ").";
+      return false;
+    }
+    settings_scratch_.last_setting_id = id;
+
+    // Validate flags.
+    uint8_t kFlagsMask = SETTINGS_FLAG_PLEASE_PERSIST | SETTINGS_FLAG_PERSISTED;
+    if ((flags & ~(kFlagsMask)) != 0) {
+      DLOG(WARNING) << "Unknown SETTINGS flags provided for id " << id << ": "
+                    << flags;
+      return false;
+    }
+  }
+
+  // Validation succeeded. Pass on to visitor.
+  visitor_->OnSetting(id, flags, value);
+  return true;
+}
+
+size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) {
+  size_t original_len = len;
+  size_t bytes_read = UpdateCurrentFrameBuffer(&data, &len,
+                                               remaining_data_length_);
+  remaining_data_length_ -= bytes_read;
+  if (remaining_data_length_ == 0) {
+    SpdyFrameReader reader(current_frame_buffer_.data(),
+                           current_frame_buffer_.len());
+    reader.Seek(GetControlFrameHeaderSize());  // Skip frame header.
+
+    // Use frame-specific handlers.
+    switch (current_frame_type_) {
+      case PING: {
+          SpdyPingId id = 0;
+          bool is_ack = protocol_version_ == HTTP2 &&
+                        (current_frame_flags_ & PING_FLAG_ACK);
+          bool successful_read = true;
+          if (protocol_version_ == SPDY3) {
+            uint32_t id32 = 0;
+            successful_read = reader.ReadUInt32(&id32);
+            id = id32;
+          } else {
+            successful_read = reader.ReadUInt64(&id);
+          }
+          DCHECK(successful_read);
+          DCHECK(reader.IsDoneReading());
+          visitor_->OnPing(id, is_ack);
+        }
+        break;
+      case WINDOW_UPDATE: {
+        uint32_t delta_window_size = 0;
+          bool successful_read = true;
+          if (protocol_version_ == SPDY3) {
+            successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+            DCHECK(successful_read);
+          }
+          successful_read = reader.ReadUInt32(&delta_window_size);
+          DCHECK(successful_read);
+          DCHECK(reader.IsDoneReading());
+          visitor_->OnWindowUpdate(current_frame_stream_id_,
+                                   delta_window_size);
+        }
+        break;
+      case BLOCKED: {
+          DCHECK_EQ(HTTP2, protocol_version_);
+          DCHECK(reader.IsDoneReading());
+          visitor_->OnBlocked(current_frame_stream_id_);
+        }
+        break;
+      case PRIORITY: {
+          DCHECK_EQ(HTTP2, protocol_version_);
+          uint32_t stream_dependency;
+          uint32_t parent_stream_id;
+          bool exclusive;
+          uint8_t weight;
+          bool successful_read = reader.ReadUInt32(&stream_dependency);
+          DCHECK(successful_read);
+          UnpackStreamDependencyValues(stream_dependency, &exclusive,
+                                       &parent_stream_id);
+
+          successful_read = reader.ReadUInt8(&weight);
+          DCHECK(successful_read);
+          DCHECK(reader.IsDoneReading());
+          visitor_->OnPriority(
+              current_frame_stream_id_, parent_stream_id, weight, exclusive);
+        }
+        break;
+      default:
+        // Unreachable.
+        LOG(FATAL) << "Unhandled control frame " << current_frame_type_;
+    }
+
+    CHANGE_STATE(SPDY_IGNORE_REMAINING_PAYLOAD);
+  }
+  return original_len - len;
+}
+
+size_t SpdyFramer::ProcessGoAwayFramePayload(const char* data, size_t len) {
+  if (len == 0) {
+    return 0;
+  }
+  // Clamp to the actual remaining payload.
+  if (len > remaining_data_length_) {
+    len = remaining_data_length_;
+  }
+  size_t original_len = len;
+
+  // Check if we had already read enough bytes to parse the GOAWAY header.
+  const size_t header_size = GetGoAwayMinimumSize();
+  size_t unread_header_bytes = header_size - current_frame_buffer_.len();
+  bool already_parsed_header = (unread_header_bytes == 0);
+  if (!already_parsed_header) {
+    // Buffer the new GOAWAY header bytes we got.
+    UpdateCurrentFrameBuffer(&data, &len, unread_header_bytes);
+
+    // Do we have enough to parse the constant size GOAWAY header?
+    if (current_frame_buffer_.len() == header_size) {
+      // Parse out the last good stream id.
+      SpdyFrameReader reader(current_frame_buffer_.data(),
+                             current_frame_buffer_.len());
+      reader.Seek(GetControlFrameHeaderSize());  // Seek past frame header.
+      bool successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+      DCHECK(successful_read);
+
+      // Parse status code.
+      SpdyGoAwayStatus status = GOAWAY_OK;
+      uint32_t status_raw = GOAWAY_OK;
+      successful_read = reader.ReadUInt32(&status_raw);
+      DCHECK(successful_read);
+      if (SpdyConstants::IsValidGoAwayStatus(protocol_version_, status_raw)) {
+        status =
+            SpdyConstants::ParseGoAwayStatus(protocol_version_, status_raw);
+      } else {
+        if (protocol_version_ == HTTP2) {
+          // Treat unrecognized status codes as INTERNAL_ERROR as
+          // recommended by the HTTP/2 spec.
+          status = GOAWAY_INTERNAL_ERROR;
+        }
+      }
+      // Finished parsing the GOAWAY header, call frame handler.
+      visitor_->OnGoAway(current_frame_stream_id_, status);
+    }
+  }
+
+  // Handle remaining data as opaque.
+  bool processed_successfully = true;
+  if (len > 0) {
+    processed_successfully = visitor_->OnGoAwayFrameData(data, len);
+  }
+  remaining_data_length_ -= original_len;
+  if (!processed_successfully) {
+    set_error(SPDY_GOAWAY_FRAME_CORRUPT);
+  } else if (remaining_data_length_ == 0) {
+    // Signal that there is not more opaque data.
+    visitor_->OnGoAwayFrameData(NULL, 0);
+    CHANGE_STATE(SPDY_FRAME_COMPLETE);
+  }
+  return original_len;
+}
+
+size_t SpdyFramer::ProcessRstStreamFramePayload(const char* data, size_t len) {
+  if (len == 0) {
+    return 0;
+  }
+  // Clamp to the actual remaining payload.
+  if (len > remaining_data_length_) {
+    len = remaining_data_length_;
+  }
+  size_t original_len = len;
+
+  // Check if we had already read enough bytes to parse the fixed-length portion
+  // of the RST_STREAM frame.
+  const size_t header_size = GetRstStreamMinimumSize();
+  size_t unread_header_bytes = header_size - current_frame_buffer_.len();
+  bool already_parsed_header = (unread_header_bytes == 0);
+  if (!already_parsed_header) {
+    // Buffer the new RST_STREAM header bytes we got.
+    UpdateCurrentFrameBuffer(&data, &len, unread_header_bytes);
+
+    // Do we have enough to parse the constant size RST_STREAM header?
+    if (current_frame_buffer_.len() == header_size) {
+      // Parse out the last good stream id.
+      SpdyFrameReader reader(current_frame_buffer_.data(),
+                             current_frame_buffer_.len());
+      reader.Seek(GetControlFrameHeaderSize());  // Seek past frame header.
+      if (protocol_version_ == SPDY3) {
+        bool successful_read = reader.ReadUInt31(&current_frame_stream_id_);
+        DCHECK(successful_read);
+      }
+
+      SpdyRstStreamStatus status = RST_STREAM_INVALID;
+      uint32_t status_raw = status;
+      bool successful_read = reader.ReadUInt32(&status_raw);
+      DCHECK(successful_read);
+      if (SpdyConstants::IsValidRstStreamStatus(protocol_version_,
+                                                status_raw)) {
+        status =
+            SpdyConstants::ParseRstStreamStatus(protocol_version_, status_raw);
+      } else {
+        if (protocol_version_ == HTTP2) {
+          // Treat unrecognized status codes as INTERNAL_ERROR as
+          // recommended by the HTTP/2 spec.
+          status = RST_STREAM_INTERNAL_ERROR;
+        }
+      }
+      // Finished parsing the RST_STREAM header, call frame handler.
+      visitor_->OnRstStream(current_frame_stream_id_, status);
+    }
+  }
+
+  // Handle remaining data as opaque.
+  // TODO(jamessynge): Remove support for variable length/opaque trailer.
+  bool processed_successfully = true;
+  if (len > 0) {
+    processed_successfully = visitor_->OnRstStreamFrameData(data, len);
+  }
+  remaining_data_length_ -= original_len;
+  if (!processed_successfully) {
+    set_error(SPDY_RST_STREAM_FRAME_CORRUPT);
+  } else if (remaining_data_length_ == 0) {
+    // Signal that there is not more opaque data.
+    visitor_->OnRstStreamFrameData(NULL, 0);
+    CHANGE_STATE(SPDY_FRAME_COMPLETE);
+  }
+  return original_len;
+}
+
+size_t SpdyFramer::ProcessAltSvcFramePayload(const char* data, size_t len) {
+  if (len == 0) {
+    return 0;
+  }
+
+  // Clamp to the actual remaining payload.
+  len = std::min(len, remaining_data_length_);
+
+  if (altsvc_scratch_ == nullptr) {
+    size_t capacity = current_frame_length_ - GetControlFrameHeaderSize();
+    altsvc_scratch_.reset(new CharBuffer(capacity));
+  }
+  altsvc_scratch_->CopyFrom(data, len);
+  remaining_data_length_ -= len;
+  if (remaining_data_length_ > 0) {
+    return len;
+  }
+
+  SpdyFrameReader reader(altsvc_scratch_->data(), altsvc_scratch_->len());
+  StringPiece origin;
+  bool successful_read = reader.ReadStringPiece16(&origin);
+  if (!successful_read) {
+    set_error(SPDY_INVALID_CONTROL_FRAME);
+    return 0;
+  }
+  StringPiece value(altsvc_scratch_->data() + reader.GetBytesConsumed(),
+                    altsvc_scratch_->len() - reader.GetBytesConsumed());
+
+  SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector;
+  bool success =
+      SpdyAltSvcWireFormat::ParseHeaderFieldValue(value, &altsvc_vector);
+  if (!success) {
+    set_error(SPDY_INVALID_CONTROL_FRAME);
+    return 0;
+  }
+
+  visitor_->OnAltSvc(current_frame_stream_id_, origin, altsvc_vector);
+  CHANGE_STATE(SPDY_FRAME_COMPLETE);
+  return len;
+}
+
+size_t SpdyFramer::ProcessDataFramePaddingLength(const char* data, size_t len) {
+  DCHECK_EQ(SPDY_READ_DATA_FRAME_PADDING_LENGTH, state_);
+  DCHECK_EQ(0u, remaining_padding_payload_length_);
+  DCHECK_EQ(DATA, current_frame_type_);
+
+  size_t original_len = len;
+  if (current_frame_flags_ & DATA_FLAG_PADDED) {
+    if (len != 0) {
+      if (remaining_data_length_ < kPadLengthFieldSize) {
+        set_error(SPDY_INVALID_DATA_FRAME_FLAGS);
+        return 0;
+      }
+
+      static_assert(kPadLengthFieldSize == 1,
+                    "Unexpected pad length field size.");
+      remaining_padding_payload_length_ =
+          *reinterpret_cast<const uint8_t*>(data);
+      ++data;
+      --len;
+      --remaining_data_length_;
+      visitor_->OnStreamPadding(current_frame_stream_id_, kPadLengthFieldSize);
+    } else {
+      // We don't have the data available for parsing the pad length field. Keep
+      // waiting.
+      return 0;
+    }
+  }
+
+  if (remaining_padding_payload_length_ > remaining_data_length_) {
+    set_error(SPDY_INVALID_PADDING);
+    return 0;
+  }
+  CHANGE_STATE(SPDY_FORWARD_STREAM_FRAME);
+  return original_len - len;
+}
+
+size_t SpdyFramer::ProcessFramePadding(const char* data, size_t len) {
+  DCHECK_EQ(SPDY_CONSUME_PADDING, state_);
+
+  size_t original_len = len;
+  if (remaining_padding_payload_length_ > 0) {
+    DCHECK_EQ(remaining_padding_payload_length_, remaining_data_length_);
+    size_t amount_to_discard = std::min(remaining_padding_payload_length_, len);
+    if (current_frame_type_ == DATA && amount_to_discard > 0) {
+      SPDY_BUG_IF(protocol_version_ == SPDY3)
+          << "Padding invalid for SPDY version " << protocol_version_;
+      visitor_->OnStreamPadding(current_frame_stream_id_, amount_to_discard);
+    }
+    data += amount_to_discard;
+    len -= amount_to_discard;
+    remaining_padding_payload_length_ -= amount_to_discard;
+    remaining_data_length_ -= amount_to_discard;
+  }
+
+  if (remaining_data_length_ == 0) {
+    // If the FIN flag is set, or this ends a header block which set FIN,
+    // inform the visitor of EOF via a 0-length data frame.
+    if (expect_continuation_ == 0 &&
+        ((current_frame_flags_ & CONTROL_FLAG_FIN) != 0 ||
+         end_stream_when_done_)) {
+      end_stream_when_done_ = false;
+      visitor_->OnStreamEnd(current_frame_stream_id_);
+    }
+    CHANGE_STATE(SPDY_FRAME_COMPLETE);
+  }
+  return original_len - len;
+}
+
+size_t SpdyFramer::ProcessDataFramePayload(const char* data, size_t len) {
+  size_t original_len = len;
+  if (remaining_data_length_ - remaining_padding_payload_length_ > 0) {
+    size_t amount_to_forward = std::min(
+        remaining_data_length_ - remaining_padding_payload_length_, len);
+    if (amount_to_forward && state_ != SPDY_IGNORE_REMAINING_PAYLOAD) {
+      // Only inform the visitor if there is data.
+      if (amount_to_forward) {
+        visitor_->OnStreamFrameData(current_frame_stream_id_, data,
+                                    amount_to_forward);
+      }
+    }
+    data += amount_to_forward;
+    len -= amount_to_forward;
+    remaining_data_length_ -= amount_to_forward;
+  }
+
+  if (remaining_data_length_ == remaining_padding_payload_length_) {
+    CHANGE_STATE(SPDY_CONSUME_PADDING);
+  }
+  return original_len - len;
+}
+
+size_t SpdyFramer::ProcessIgnoredControlFramePayload(/*const char* data,*/
+                                                     size_t len) {
+  size_t original_len = len;
+  if (remaining_data_length_ > 0) {
+    size_t amount_to_ignore = std::min(remaining_data_length_, len);
+    len -= amount_to_ignore;
+    remaining_data_length_ -= amount_to_ignore;
+  }
+
+  if (remaining_data_length_ == 0) {
+    CHANGE_STATE(SPDY_FRAME_COMPLETE);
+  }
+  return original_len - len;
+}
+
+bool SpdyFramer::ParseHeaderBlockInBuffer(const char* header_data,
+                                          size_t header_length,
+                                          SpdyHeaderBlock* block) const {
+  SpdyFrameReader reader(header_data, header_length);
+
+  // Read number of headers.
+  uint32_t num_headers;
+  if (!reader.ReadUInt32(&num_headers)) {
+    DVLOG(1) << "Unable to read number of headers.";
+    return false;
+  }
+
+  // Read each header.
+  for (uint32_t index = 0; index < num_headers; ++index) {
+    base::StringPiece temp;
+
+    // Read header name.
+    if (!reader.ReadStringPiece32(&temp)) {
+      DVLOG(1) << "Unable to read header name (" << index + 1 << " of "
+               << num_headers << ").";
+      return false;
+    }
+    std::string name = temp.as_string();
+
+    // Read header value.
+    if (!reader.ReadStringPiece32(&temp)) {
+      DVLOG(1) << "Unable to read header value (" << index + 1 << " of "
+               << num_headers << ").";
+      return false;
+    }
+    std::string value = temp.as_string();
+
+    // Ensure no duplicates.
+    if (block->find(name) != block->end()) {
+      DVLOG(1) << "Duplicate header '" << name << "' (" << index + 1 << " of "
+               << num_headers << ").";
+      return false;
+    }
+
+    // Store header.
+    (*block)[name] = value;
+  }
+  if (reader.GetBytesConsumed() != header_length) {
+    SPDY_BUG << "Buffer expected to consist entirely of headers, but only "
+             << reader.GetBytesConsumed() << " bytes consumed, from "
+             << header_length;
+    return false;
+  }
+
+  return true;
+}
+
+SpdySerializedFrame SpdyFramer::SerializeData(const SpdyDataIR& data_ir) const {
+  uint8_t flags = DATA_FLAG_NONE;
+  if (data_ir.fin()) {
+    flags = DATA_FLAG_FIN;
+  }
+
+  if (protocol_version_ == SPDY3) {
+    const size_t size = GetDataFrameMinimumSize() + data_ir.data().length();
+    SpdyFrameBuilder builder(size, protocol_version_);
+    builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
+    builder.WriteBytes(data_ir.data().data(), data_ir.data().length());
+    DCHECK_EQ(size, builder.length());
+    return builder.take();
+  } else {
+    int num_padding_fields = 0;
+    if (data_ir.padded()) {
+      flags |= DATA_FLAG_PADDED;
+      ++num_padding_fields;
+    }
+
+    const size_t size_with_padding = num_padding_fields +
+        data_ir.data().length() + data_ir.padding_payload_len() +
+        GetDataFrameMinimumSize();
+    SpdyFrameBuilder builder(size_with_padding, protocol_version_);
+    builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
+    if (data_ir.padded()) {
+      builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
+    }
+    builder.WriteBytes(data_ir.data().data(), data_ir.data().length());
+    if (data_ir.padding_payload_len() > 0) {
+      string padding(data_ir.padding_payload_len(), 0);
+      builder.WriteBytes(padding.data(), padding.length());
+    }
+    DCHECK_EQ(size_with_padding, builder.length());
+    return builder.take();
+  }
+}
+
+SpdySerializedFrame SpdyFramer::SerializeDataFrameHeaderWithPaddingLengthField(
+    const SpdyDataIR& data_ir) const {
+  uint8_t flags = DATA_FLAG_NONE;
+  if (data_ir.fin()) {
+    flags = DATA_FLAG_FIN;
+  }
+
+  size_t frame_size = GetDataFrameMinimumSize();
+  size_t num_padding_fields = 0;
+  if (protocol_version_ == HTTP2) {
+    if (data_ir.padded()) {
+      flags |= DATA_FLAG_PADDED;
+      ++num_padding_fields;
+    }
+    frame_size += num_padding_fields;
+  }
+
+  SpdyFrameBuilder builder(frame_size, protocol_version_);
+  builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
+  if (protocol_version_ == HTTP2) {
+    if (data_ir.padded()) {
+      builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
+    }
+    builder.OverwriteLength(*this,  num_padding_fields +
+        data_ir.data().length() + data_ir.padding_payload_len());
+  } else {
+    builder.OverwriteLength(*this, data_ir.data().length());
+  }
+  DCHECK_EQ(frame_size, builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeSynStream(
+    const SpdySynStreamIR& syn_stream) {
+  DCHECK_EQ(SPDY3, protocol_version_);
+  uint8_t flags = 0;
+  if (syn_stream.fin()) {
+    flags |= CONTROL_FLAG_FIN;
+  }
+  if (syn_stream.unidirectional()) {
+    flags |= CONTROL_FLAG_UNIDIRECTIONAL;
+  }
+
+  // Sanitize priority.
+  uint8_t priority = syn_stream.priority();
+  if (priority > GetLowestPriority()) {
+    SPDY_BUG << "Priority out-of-bounds.";
+    priority = GetLowestPriority();
+  }
+
+  // The size of this frame, including variable-length header block.
+  size_t size = GetSynStreamMinimumSize() +
+                GetSerializedLength(syn_stream.header_block());
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  builder.WriteControlFrameHeader(*this, SYN_STREAM, flags);
+  builder.WriteUInt32(syn_stream.stream_id());
+  builder.WriteUInt32(syn_stream.associated_to_stream_id());
+  builder.WriteUInt8(priority << 5);
+  builder.WriteUInt8(0);  // Unused byte.
+  DCHECK_EQ(GetSynStreamMinimumSize(), builder.length());
+  SerializeHeaderBlock(&builder, syn_stream);
+
+  if (debug_visitor_) {
+    const size_t payload_len =
+        GetSerializedLength(protocol_version_, &(syn_stream.header_block()));
+    debug_visitor_->OnSendCompressedFrame(syn_stream.stream_id(),
+                                          SYN_STREAM,
+                                          payload_len,
+                                          builder.length());
+  }
+
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeSynReply(
+    const SpdySynReplyIR& syn_reply) {
+  DCHECK_EQ(SPDY3, protocol_version_);
+  uint8_t flags = 0;
+  if (syn_reply.fin()) {
+    flags |= CONTROL_FLAG_FIN;
+  }
+
+  // The size of this frame, including variable-length header block.
+  const size_t size =
+      GetSynReplyMinimumSize() + GetSerializedLength(syn_reply.header_block());
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  builder.WriteControlFrameHeader(*this, SYN_REPLY, flags);
+  builder.WriteUInt32(syn_reply.stream_id());
+  DCHECK_EQ(GetSynReplyMinimumSize(), builder.length());
+  SerializeHeaderBlock(&builder, syn_reply);
+
+  if (debug_visitor_) {
+    const size_t payload_len =
+        GetSerializedLength(protocol_version_, &(syn_reply.header_block()));
+    debug_visitor_->OnSendCompressedFrame(syn_reply.stream_id(),
+                                          SYN_REPLY,
+                                          payload_len,
+                                          builder.length());
+  }
+
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeRstStream(
+    const SpdyRstStreamIR& rst_stream) const {
+  // TODO(jgraettinger): For now, Chromium will support parsing RST_STREAM
+  // payloads, but will not emit them. SPDY4 is used for draft HTTP/2,
+  // which doesn't currently include RST_STREAM payloads. GFE flags have been
+  // commented but left in place to simplify future patching.
+  // Compute the output buffer size, taking opaque data into account.
+  size_t expected_length = GetRstStreamMinimumSize();
+  SpdyFrameBuilder builder(expected_length, protocol_version_);
+
+  // Serialize the RST_STREAM frame.
+  if (protocol_version_ == SPDY3) {
+    builder.WriteControlFrameHeader(*this, RST_STREAM, 0);
+    builder.WriteUInt32(rst_stream.stream_id());
+  } else {
+    builder.BeginNewFrame(*this, RST_STREAM, 0, rst_stream.stream_id());
+  }
+
+  builder.WriteUInt32(SpdyConstants::SerializeRstStreamStatus(
+      protocol_version_, rst_stream.status()));
+
+  DCHECK_EQ(expected_length, builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeSettings(
+    const SpdySettingsIR& settings) const {
+  uint8_t flags = 0;
+
+  if (protocol_version_ == SPDY3) {
+    if (settings.clear_settings()) {
+      flags |= SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS;
+    }
+  } else {
+    if (settings.is_ack()) {
+      flags |= SETTINGS_FLAG_ACK;
+    }
+  }
+  const SpdySettingsIR::ValueMap* values = &(settings.values());
+
+  size_t setting_size = SpdyConstants::GetSettingSize(protocol_version_);
+  // Size, in bytes, of this SETTINGS frame.
+  const size_t size = GetSettingsMinimumSize() +
+                      (values->size() * setting_size);
+  SpdyFrameBuilder builder(size, protocol_version_);
+  if (protocol_version_ == SPDY3) {
+    builder.WriteControlFrameHeader(*this, SETTINGS, flags);
+  } else {
+    builder.BeginNewFrame(*this, SETTINGS, flags, 0);
+  }
+
+  // If this is an ACK, payload should be empty.
+  if (protocol_version_ == HTTP2 && settings.is_ack()) {
+    return builder.take();
+  }
+
+  if (protocol_version_ == SPDY3) {
+    builder.WriteUInt32(values->size());
+  }
+  DCHECK_EQ(GetSettingsMinimumSize(), builder.length());
+  for (SpdySettingsIR::ValueMap::const_iterator it = values->begin();
+       it != values->end();
+       ++it) {
+    int setting_id =
+        SpdyConstants::SerializeSettingId(protocol_version_, it->first);
+    DCHECK_GE(setting_id, 0);
+    if (protocol_version_ == SPDY3) {
+      uint8_t setting_flags = 0;
+      if (it->second.persist_value) {
+        setting_flags |= SETTINGS_FLAG_PLEASE_PERSIST;
+      }
+      if (it->second.persisted) {
+        setting_flags |= SETTINGS_FLAG_PERSISTED;
+      }
+      SettingsFlagsAndId flags_and_id(setting_flags, setting_id);
+      uint32_t id_and_flags_wire =
+          flags_and_id.GetWireFormat(protocol_version_);
+      builder.WriteBytes(&id_and_flags_wire, 4);
+    } else {
+      builder.WriteUInt16(static_cast<uint16_t>(setting_id));
+    }
+    builder.WriteUInt32(it->second.value);
+  }
+  DCHECK_EQ(size, builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializePing(const SpdyPingIR& ping) const {
+  SpdyFrameBuilder builder(GetPingSize(), protocol_version_);
+  if (protocol_version_ == SPDY3) {
+    builder.WriteControlFrameHeader(*this, PING, kNoFlags);
+    builder.WriteUInt32(static_cast<uint32_t>(ping.id()));
+  } else {
+    uint8_t flags = 0;
+    if (ping.is_ack()) {
+      flags |= PING_FLAG_ACK;
+    }
+    builder.BeginNewFrame(*this, PING, flags, 0);
+    builder.WriteUInt64(ping.id());
+  }
+  DCHECK_EQ(GetPingSize(), builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeGoAway(
+    const SpdyGoAwayIR& goaway) const {
+  // Compute the output buffer size, take opaque data into account.
+  size_t expected_length = GetGoAwayMinimumSize();
+  if (protocol_version_ == HTTP2) {
+    expected_length += goaway.description().size();
+  }
+  SpdyFrameBuilder builder(expected_length, protocol_version_);
+
+  // Serialize the GOAWAY frame.
+  if (protocol_version_ == SPDY3) {
+    builder.WriteControlFrameHeader(*this, GOAWAY, kNoFlags);
+  } else {
+    builder.BeginNewFrame(*this, GOAWAY, 0, 0);
+  }
+
+  // GOAWAY frames specify the last good stream id for all SPDY versions.
+  builder.WriteUInt32(goaway.last_good_stream_id());
+
+  // GOAWAY frames also specify the error status code.
+  builder.WriteUInt32(
+      SpdyConstants::SerializeGoAwayStatus(protocol_version_, goaway.status()));
+
+  // In HTTP2, GOAWAY frames may also specify opaque data.
+  if ((protocol_version_ == HTTP2) && (goaway.description().size() > 0)) {
+    builder.WriteBytes(goaway.description().data(),
+                       goaway.description().size());
+  }
+
+  DCHECK_EQ(expected_length, builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeHeaders(const SpdyHeadersIR& headers) {
+  uint8_t flags = 0;
+  if (headers.fin()) {
+    flags |= CONTROL_FLAG_FIN;
+  }
+  if (protocol_version_ == HTTP2) {
+    // This will get overwritten if we overflow into a CONTINUATION frame.
+    flags |= HEADERS_FLAG_END_HEADERS;
+    if (headers.has_priority()) {
+      flags |= HEADERS_FLAG_PRIORITY;
+    }
+    if (headers.padded()) {
+      flags |= HEADERS_FLAG_PADDED;
+    }
+  }
+
+  // The size of this frame, including padding (if there is any) and
+  // variable-length header block.
+  size_t size = GetHeadersMinimumSize();
+
+  if (protocol_version_ == HTTP2 && headers.padded()) {
+    size += kPadLengthFieldSize;
+    size += headers.padding_payload_len();
+  }
+
+  SpdyPriority priority = static_cast<SpdyPriority>(headers.priority());
+  if (headers.has_priority()) {
+    if (headers.priority() > GetLowestPriority()) {
+      SPDY_BUG << "Priority out-of-bounds.";
+      priority = GetLowestPriority();
+    }
+    size += 5;
+  }
+
+  string hpack_encoding;
+  if (protocol_version_ == SPDY3) {
+    size += GetSerializedLength(headers.header_block());
+  } else {
+    if (enable_compression_) {
+      GetHpackEncoder()->EncodeHeaderSet(headers.header_block(),
+                                         &hpack_encoding);
+    } else {
+      GetHpackEncoder()->EncodeHeaderSetWithoutCompression(
+          headers.header_block(), &hpack_encoding);
+    }
+    size += hpack_encoding.size();
+    if (size > kMaxControlFrameSize) {
+      size += GetNumberRequiredContinuationFrames(size) *
+              GetContinuationMinimumSize();
+      flags &= ~HEADERS_FLAG_END_HEADERS;
+    }
+  }
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  if (protocol_version_ == SPDY3) {
+    builder.WriteControlFrameHeader(*this, HEADERS, flags);
+    builder.WriteUInt32(headers.stream_id());
+  } else {
+    builder.BeginNewFrame(*this,
+                          HEADERS,
+                          flags,
+                          headers.stream_id());
+  }
+  DCHECK_EQ(GetHeadersMinimumSize(), builder.length());
+
+  if (protocol_version_ == SPDY3) {
+    SerializeHeaderBlock(&builder, headers);
+  } else {
+    int padding_payload_len = 0;
+    if (headers.padded()) {
+      builder.WriteUInt8(headers.padding_payload_len());
+      padding_payload_len = headers.padding_payload_len();
+    }
+    if (headers.has_priority()) {
+      builder.WriteUInt32(PackStreamDependencyValues(
+          headers.exclusive(), headers.parent_stream_id()));
+      builder.WriteUInt8(MapPriorityToWeight(priority));
+    }
+    WritePayloadWithContinuation(&builder,
+                                 hpack_encoding,
+                                 headers.stream_id(),
+                                 HEADERS,
+                                 padding_payload_len);
+  }
+
+  if (debug_visitor_) {
+    // HTTP2 uses HPACK for header compression. However, continue to
+    // use GetSerializedLength() for an apples-to-apples comparision of
+    // compression performance between HPACK and SPDY w/ deflate.
+    const size_t payload_len =
+        GetSerializedLength(protocol_version_, &(headers.header_block()));
+    debug_visitor_->OnSendCompressedFrame(headers.stream_id(),
+                                          HEADERS,
+                                          payload_len,
+                                          builder.length());
+  }
+
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeWindowUpdate(
+    const SpdyWindowUpdateIR& window_update) const {
+  SpdyFrameBuilder builder(GetWindowUpdateSize(), protocol_version_);
+  if (protocol_version_ == SPDY3) {
+    builder.WriteControlFrameHeader(*this, WINDOW_UPDATE, kNoFlags);
+    builder.WriteUInt32(window_update.stream_id());
+  } else {
+    builder.BeginNewFrame(*this,
+                          WINDOW_UPDATE,
+                          kNoFlags,
+                          window_update.stream_id());
+  }
+  builder.WriteUInt32(window_update.delta());
+  DCHECK_EQ(GetWindowUpdateSize(), builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeBlocked(
+    const SpdyBlockedIR& blocked) const {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  SpdyFrameBuilder builder(GetBlockedSize(), protocol_version_);
+  builder.BeginNewFrame(*this, BLOCKED, kNoFlags, blocked.stream_id());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializePushPromise(
+    const SpdyPushPromiseIR& push_promise) {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  uint8_t flags = 0;
+  // This will get overwritten if we overflow into a CONTINUATION frame.
+  flags |= PUSH_PROMISE_FLAG_END_PUSH_PROMISE;
+  // The size of this frame, including variable-length name-value block.
+  size_t size = GetPushPromiseMinimumSize();
+
+  if (push_promise.padded()) {
+    flags |= PUSH_PROMISE_FLAG_PADDED;
+    size += kPadLengthFieldSize;
+    size += push_promise.padding_payload_len();
+  }
+
+  string hpack_encoding;
+  if (enable_compression_) {
+    GetHpackEncoder()->EncodeHeaderSet(push_promise.header_block(),
+                                       &hpack_encoding);
+  } else {
+    GetHpackEncoder()->EncodeHeaderSetWithoutCompression(
+        push_promise.header_block(), &hpack_encoding);
+  }
+  size += hpack_encoding.size();
+  if (size > kMaxControlFrameSize) {
+    size += GetNumberRequiredContinuationFrames(size) *
+            GetContinuationMinimumSize();
+    flags &= ~PUSH_PROMISE_FLAG_END_PUSH_PROMISE;
+  }
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  builder.BeginNewFrame(*this,
+                        PUSH_PROMISE,
+                        flags,
+                        push_promise.stream_id());
+  int padding_payload_len = 0;
+  if (push_promise.padded()) {
+    builder.WriteUInt8(push_promise.padding_payload_len());
+    builder.WriteUInt32(push_promise.promised_stream_id());
+    DCHECK_EQ(GetPushPromiseMinimumSize() + kPadLengthFieldSize,
+              builder.length());
+
+    padding_payload_len = push_promise.padding_payload_len();
+  } else {
+    builder.WriteUInt32(push_promise.promised_stream_id());
+    DCHECK_EQ(GetPushPromiseMinimumSize(), builder.length());
+  }
+
+  WritePayloadWithContinuation(&builder,
+                               hpack_encoding,
+                               push_promise.stream_id(),
+                               PUSH_PROMISE,
+                               padding_payload_len);
+
+  if (debug_visitor_) {
+    // HTTP2 uses HPACK for header compression. However, continue to
+    // use GetSerializedLength() for an apples-to-apples comparision of
+    // compression performance between HPACK and SPDY w/ deflate.
+    const size_t payload_len =
+        GetSerializedLength(protocol_version_, &(push_promise.header_block()));
+    debug_visitor_->OnSendCompressedFrame(push_promise.stream_id(),
+                                          PUSH_PROMISE,
+                                          payload_len,
+                                          builder.length());
+  }
+
+  return builder.take();
+}
+
+// TODO(jgraettinger): This implementation is incorrect. The continuation
+// frame continues a previously-begun HPACK encoding; it doesn't begin a
+// new one. Figure out whether it makes sense to keep SerializeContinuation().
+SpdySerializedFrame SpdyFramer::SerializeContinuation(
+    const SpdyContinuationIR& continuation) {
+  CHECK_EQ(HTTP2, protocol_version_);
+  uint8_t flags = 0;
+  if (continuation.end_headers()) {
+    flags |= HEADERS_FLAG_END_HEADERS;
+  }
+
+  // The size of this frame, including variable-length name-value block.
+  size_t size = GetContinuationMinimumSize();
+  string hpack_encoding;
+  if (enable_compression_) {
+    GetHpackEncoder()->EncodeHeaderSet(continuation.header_block(),
+                                       &hpack_encoding);
+  } else {
+    GetHpackEncoder()->EncodeHeaderSetWithoutCompression(
+        continuation.header_block(), &hpack_encoding);
+  }
+  size += hpack_encoding.size();
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  builder.BeginNewFrame(*this, CONTINUATION, flags,
+      continuation.stream_id());
+  DCHECK_EQ(GetContinuationMinimumSize(), builder.length());
+
+  builder.WriteBytes(&hpack_encoding[0], hpack_encoding.size());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializeAltSvc(const SpdyAltSvcIR& altsvc_ir) {
+  DCHECK_EQ(HTTP2, protocol_version_);
+
+  size_t size = GetAltSvcMinimumSize();
+  size += altsvc_ir.origin().length();
+  string value = SpdyAltSvcWireFormat::SerializeHeaderFieldValue(
+      altsvc_ir.altsvc_vector());
+  size += value.length();
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  builder.BeginNewFrame(*this, ALTSVC, kNoFlags, altsvc_ir.stream_id());
+
+  builder.WriteUInt16(altsvc_ir.origin().length());
+  builder.WriteBytes(altsvc_ir.origin().data(), altsvc_ir.origin().length());
+  builder.WriteBytes(value.data(), value.length());
+  DCHECK_LT(GetAltSvcMinimumSize(), builder.length());
+  return builder.take();
+}
+
+SpdySerializedFrame SpdyFramer::SerializePriority(
+    const SpdyPriorityIR& priority) const {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  size_t size = GetPrioritySize();
+
+  SpdyFrameBuilder builder(size, protocol_version_);
+  builder.BeginNewFrame(*this, PRIORITY, kNoFlags, priority.stream_id());
+
+  builder.WriteUInt32(PackStreamDependencyValues(priority.exclusive(),
+                                                 priority.parent_stream_id()));
+  builder.WriteUInt8(priority.weight());
+  DCHECK_EQ(GetPrioritySize(), builder.length());
+  return builder.take();
+}
+
+namespace {
+
+class FrameSerializationVisitor : public SpdyFrameVisitor {
+ public:
+  explicit FrameSerializationVisitor(SpdyFramer* framer)
+      : framer_(framer), frame_() {}
+  ~FrameSerializationVisitor() override {}
+
+  SpdySerializedFrame ReleaseSerializedFrame() { return std::move(frame_); }
+
+  void VisitData(const SpdyDataIR& data) override {
+    frame_ = framer_->SerializeData(data);
+  }
+  void VisitSynStream(const SpdySynStreamIR& syn_stream) override {
+    frame_ = framer_->SerializeSynStream(syn_stream);
+  }
+  void VisitSynReply(const SpdySynReplyIR& syn_reply) override {
+    frame_ = framer_->SerializeSynReply(syn_reply);
+  }
+  void VisitRstStream(const SpdyRstStreamIR& rst_stream) override {
+    frame_ = framer_->SerializeRstStream(rst_stream);
+  }
+  void VisitSettings(const SpdySettingsIR& settings) override {
+    frame_ = framer_->SerializeSettings(settings);
+  }
+  void VisitPing(const SpdyPingIR& ping) override {
+    frame_ = framer_->SerializePing(ping);
+  }
+  void VisitGoAway(const SpdyGoAwayIR& goaway) override {
+    frame_ = framer_->SerializeGoAway(goaway);
+  }
+  void VisitHeaders(const SpdyHeadersIR& headers) override {
+    frame_ = framer_->SerializeHeaders(headers);
+  }
+  void VisitWindowUpdate(const SpdyWindowUpdateIR& window_update) override {
+    frame_ = framer_->SerializeWindowUpdate(window_update);
+  }
+  void VisitBlocked(const SpdyBlockedIR& blocked) override {
+    frame_ = framer_->SerializeBlocked(blocked);
+  }
+  void VisitPushPromise(const SpdyPushPromiseIR& push_promise) override {
+    frame_ = framer_->SerializePushPromise(push_promise);
+  }
+  void VisitContinuation(const SpdyContinuationIR& continuation) override {
+    frame_ = framer_->SerializeContinuation(continuation);
+  }
+  void VisitAltSvc(const SpdyAltSvcIR& altsvc) override {
+    frame_ = framer_->SerializeAltSvc(altsvc);
+  }
+  void VisitPriority(const SpdyPriorityIR& priority) override {
+    frame_ = framer_->SerializePriority(priority);
+  }
+
+ private:
+  SpdyFramer* framer_;
+  SpdySerializedFrame frame_;
+};
+
+}  // namespace
+
+SpdySerializedFrame SpdyFramer::SerializeFrame(const SpdyFrameIR& frame) {
+  FrameSerializationVisitor visitor(this);
+  frame.Visit(&visitor);
+  return visitor.ReleaseSerializedFrame();
+}
+
+size_t SpdyFramer::GetSerializedLength(const SpdyHeaderBlock& headers) {
+  const size_t uncompressed_length =
+      GetSerializedLength(protocol_version_, &headers);
+  if (!enable_compression_) {
+    return uncompressed_length;
+  }
+  z_stream* compressor = GetHeaderCompressor();
+  // Since we'll be performing lots of flushes when compressing the data,
+  // zlib's lower bounds may be insufficient.
+  return 2 * deflateBound(compressor, uncompressed_length);
+}
+
+size_t SpdyFramer::GetNumberRequiredContinuationFrames(size_t size) {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  DCHECK_GT(size, kMaxControlFrameSize);
+  size_t overflow = size - kMaxControlFrameSize;
+  size_t payload_size = kMaxControlFrameSize - GetContinuationMinimumSize();
+  // This is ceiling(overflow/payload_size) using integer arithmetics.
+  return (overflow - 1) / payload_size + 1;
+}
+
+void SpdyFramer::WritePayloadWithContinuation(SpdyFrameBuilder* builder,
+                                              const string& hpack_encoding,
+                                              SpdyStreamId stream_id,
+                                              SpdyFrameType type,
+                                              int padding_payload_len) {
+  uint8_t end_flag = 0;
+  uint8_t flags = 0;
+  if (type == HEADERS) {
+    end_flag = HEADERS_FLAG_END_HEADERS;
+  } else if (type == PUSH_PROMISE) {
+    end_flag = PUSH_PROMISE_FLAG_END_PUSH_PROMISE;
+  } else {
+    DLOG(FATAL) << "CONTINUATION frames cannot be used with frame type "
+                << FrameTypeToString(type);
+  }
+
+  // Write all the padding payload and as much of the data payload as possible
+  // into the initial frame.
+  size_t bytes_remaining = 0;
+  bytes_remaining =
+      hpack_encoding.size() -
+      std::min(hpack_encoding.size(),
+               kMaxControlFrameSize - builder->length() - padding_payload_len);
+  builder->WriteBytes(&hpack_encoding[0],
+                      hpack_encoding.size() - bytes_remaining);
+  if (padding_payload_len > 0) {
+    string padding = string(padding_payload_len, 0);
+    builder->WriteBytes(padding.data(), padding.length());
+  }
+  if (bytes_remaining > 0) {
+    builder->OverwriteLength(
+        *this, kMaxControlFrameSize - GetControlFrameHeaderSize());
+  }
+
+  // Tack on CONTINUATION frames for the overflow.
+  while (bytes_remaining > 0) {
+    size_t bytes_to_write = std::min(
+        bytes_remaining, kMaxControlFrameSize - GetContinuationMinimumSize());
+    // Write CONTINUATION frame prefix.
+    if (bytes_remaining == bytes_to_write) {
+      flags |= end_flag;
+    }
+    builder->BeginNewFrame(*this, CONTINUATION, flags, stream_id);
+    // Write payload fragment.
+    builder->WriteBytes(
+        &hpack_encoding[hpack_encoding.size() - bytes_remaining],
+        bytes_to_write);
+    bytes_remaining -= bytes_to_write;
+  }
+}
+
+// The following compression setting are based on Brian Olson's analysis. See
+// https://groups.google.com/group/spdy-dev/browse_thread/thread/dfaf498542fac792
+// for more details.
+#if defined(USE_SYSTEM_ZLIB)
+// System zlib is not expected to have workaround for http://crbug.com/139744,
+// so disable compression in that case.
+// TODO(phajdan.jr): Remove the special case when it's no longer necessary.
+static const int kCompressorLevel = 0;
+#else  // !defined(USE_SYSTEM_ZLIB)
+static const int kCompressorLevel = 9;
+#endif  // !defined(USE_SYSTEM_ZLIB)
+static const int kCompressorWindowSizeInBits = 11;
+static const int kCompressorMemLevel = 1;
+
+z_stream* SpdyFramer::GetHeaderCompressor() {
+  if (header_compressor_.get()) {
+    return header_compressor_.get();  // Already initialized.
+  }
+
+  header_compressor_.reset(new z_stream);
+  memset(header_compressor_.get(), 0, sizeof(z_stream));
+
+  int success = deflateInit2(header_compressor_.get(),
+                             kCompressorLevel,
+                             Z_DEFLATED,
+                             kCompressorWindowSizeInBits,
+                             kCompressorMemLevel,
+                             Z_DEFAULT_STRATEGY);
+  if (success == Z_OK) {
+    const char* dictionary = kV3Dictionary;
+    const int dictionary_size = kV3DictionarySize;
+    success = deflateSetDictionary(header_compressor_.get(),
+                                   reinterpret_cast<const Bytef*>(dictionary),
+                                   dictionary_size);
+  }
+  if (success != Z_OK) {
+    LOG(WARNING) << "deflateSetDictionary failure: " << success;
+    header_compressor_.reset(NULL);
+    return NULL;
+  }
+  return header_compressor_.get();
+}
+
+z_stream* SpdyFramer::GetHeaderDecompressor() {
+  if (header_decompressor_.get()) {
+    return header_decompressor_.get();  // Already initialized.
+  }
+
+  header_decompressor_.reset(new z_stream);
+  memset(header_decompressor_.get(), 0, sizeof(z_stream));
+
+  int success = inflateInit(header_decompressor_.get());
+  if (success != Z_OK) {
+    LOG(WARNING) << "inflateInit failure: " << success;
+    header_decompressor_.reset(NULL);
+    return NULL;
+  }
+  return header_decompressor_.get();
+}
+
+HpackEncoder* SpdyFramer::GetHpackEncoder() {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  if (hpack_encoder_.get() == nullptr) {
+    hpack_encoder_.reset(new HpackEncoder(ObtainHpackHuffmanTable()));
+  }
+  return hpack_encoder_.get();
+}
+
+HpackDecoder* SpdyFramer::GetHpackDecoder() {
+  DCHECK_EQ(HTTP2, protocol_version_);
+  if (hpack_decoder_.get() == nullptr) {
+    hpack_decoder_.reset(new HpackDecoder());
+  }
+  return hpack_decoder_.get();
+}
+
+uint8_t SpdyFramer::MapPriorityToWeight(SpdyPriority priority) {
+  const float kSteps = 255.9f / 7.f;
+  return static_cast<uint8_t>(kSteps * (7.f - priority));
+}
+
+SpdyPriority SpdyFramer::MapWeightToPriority(uint8_t weight) {
+  const float kSteps = 255.9f / 7.f;
+  return static_cast<SpdyPriority>(7.f - weight / kSteps);
+}
+
+// Incrementally decompress the control frame's header block, feeding the
+// result to the visitor in chunks. Continue this until the visitor
+// indicates that it cannot process any more data, or (more commonly) we
+// run out of data to deliver.
+bool SpdyFramer::IncrementallyDecompressControlFrameHeaderData(
+    SpdyStreamId stream_id,
+    const char* data,
+    size_t len) {
+  // Get a decompressor or set error.
+  z_stream* decomp = GetHeaderDecompressor();
+  if (decomp == NULL) {
+    SPDY_BUG << "Couldn't get decompressor for handling compressed headers.";
+    set_error(SPDY_DECOMPRESS_FAILURE);
+    return false;
+  }
+
+  bool processed_successfully = true;
+  char buffer[kHeaderDataChunkMaxSize];
+
+  decomp->next_in = reinterpret_cast<Bytef*>(const_cast<char*>(data));
+  decomp->avail_in = len;
+  // If we get a SYN_STREAM/SYN_REPLY/HEADERS frame with stream ID zero, we
+  // signal an error back in ProcessControlFrameBeforeHeaderBlock.  So if we've
+  // reached this method successfully, stream_id should be nonzero.
+  DCHECK_LT(0u, stream_id);
+  while (decomp->avail_in > 0 && processed_successfully) {
+    decomp->next_out = reinterpret_cast<Bytef*>(buffer);
+    decomp->avail_out = arraysize(buffer);
+
+    int rv = inflate(decomp, Z_SYNC_FLUSH);
+    if (rv == Z_NEED_DICT) {
+      const char* dictionary = kV3Dictionary;
+      const int dictionary_size = kV3DictionarySize;
+      const DictionaryIds& ids = g_dictionary_ids.Get();
+      const uLong dictionary_id = ids.v3_dictionary_id;
+      // Need to try again with the right dictionary.
+      if (decomp->adler == dictionary_id) {
+        rv = inflateSetDictionary(decomp,
+                                  reinterpret_cast<const Bytef*>(dictionary),
+                                  dictionary_size);
+        if (rv == Z_OK) {
+          rv = inflate(decomp, Z_SYNC_FLUSH);
+        }
+      }
+    }
+
+    // Inflate will generate a Z_BUF_ERROR if it runs out of input
+    // without producing any output.  The input is consumed and
+    // buffered internally by zlib so we can detect this condition by
+    // checking if avail_in is 0 after the call to inflate.
+    bool input_exhausted = ((rv == Z_BUF_ERROR) && (decomp->avail_in == 0));
+    if ((rv == Z_OK) || input_exhausted) {
+      size_t decompressed_len = arraysize(buffer) - decomp->avail_out;
+      if (decompressed_len > 0) {
+        processed_successfully = header_parser_->HandleControlFrameHeadersData(
+            stream_id, buffer, decompressed_len);
+        if (header_parser_->get_error() ==
+            SpdyHeadersBlockParser::NEED_MORE_DATA) {
+          processed_successfully = true;
+        }
+      }
+      if (!processed_successfully) {
+        // Assume that the problem was the header block was too large for the
+        // visitor.
+        set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE);
+      }
+    } else {
+      DLOG(WARNING) << "inflate failure: " << rv << " " << len;
+      set_error(SPDY_DECOMPRESS_FAILURE);
+      processed_successfully = false;
+    }
+  }
+  return processed_successfully;
+}
+
+bool SpdyFramer::IncrementallyDeliverControlFrameHeaderData(
+    SpdyStreamId stream_id, const char* data, size_t len) {
+  bool read_successfully = true;
+  while (read_successfully && len > 0) {
+    size_t bytes_to_deliver = std::min(len, kHeaderDataChunkMaxSize);
+    read_successfully = header_parser_->HandleControlFrameHeadersData(
+        stream_id, data, bytes_to_deliver);
+    if (header_parser_->get_error() == SpdyHeadersBlockParser::NEED_MORE_DATA) {
+      read_successfully = true;
+    }
+    data += bytes_to_deliver;
+    len -= bytes_to_deliver;
+    if (!read_successfully) {
+      // Assume that the problem was the header block was too large for the
+      // visitor.
+      set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE);
+    }
+  }
+  return read_successfully;
+}
+
+void SpdyFramer::SetDecoderHeaderTableDebugVisitor(
+    HpackHeaderTable::DebugVisitorInterface* visitor) {
+  GetHpackDecoder()->SetHeaderTableDebugVisitor(visitor);
+}
+
+void SpdyFramer::SetEncoderHeaderTableDebugVisitor(
+    HpackHeaderTable::DebugVisitorInterface* visitor) {
+  GetHpackEncoder()->SetHeaderTableDebugVisitor(visitor);
+}
+
+void SpdyFramer::UpdateHeaderEncoderTableSize(uint32_t value) {
+  GetHpackEncoder()->ApplyHeaderTableSizeSetting(value);
+}
+
+size_t SpdyFramer::header_encoder_table_size() const {
+  if (hpack_encoder_ == nullptr) {
+    return kDefaultHeaderTableSizeSetting;
+  } else {
+    return hpack_encoder_->CurrentHeaderTableSizeSetting();
+  }
+}
+
+void SpdyFramer::SerializeHeaderBlockWithoutCompression(
+    SpdyFrameBuilder* builder,
+    const SpdyHeaderBlock& header_block) const {
+  // Serialize number of headers.
+  builder->WriteUInt32(header_block.size());
+
+  // Serialize each header.
+  for (const auto& header : header_block) {
+    builder->WriteStringPiece32(header.first);
+    builder->WriteStringPiece32(header.second);
+  }
+}
+
+void SpdyFramer::SerializeHeaderBlock(SpdyFrameBuilder* builder,
+                                      const SpdyFrameWithHeaderBlockIR& frame) {
+  if (!enable_compression_) {
+    return SerializeHeaderBlockWithoutCompression(builder,
+                                                  frame.header_block());
+  }
+
+  // First build an uncompressed version to be fed into the compressor.
+  const size_t uncompressed_len =
+      GetSerializedLength(protocol_version_, &(frame.header_block()));
+  SpdyFrameBuilder uncompressed_builder(uncompressed_len, protocol_version_);
+  SerializeHeaderBlockWithoutCompression(&uncompressed_builder,
+                                         frame.header_block());
+  SpdySerializedFrame uncompressed_payload(uncompressed_builder.take());
+
+  z_stream* compressor = GetHeaderCompressor();
+  if (!compressor) {
+    SPDY_BUG << "Could not obtain compressor.";
+    return;
+  }
+  // Create an output frame.
+  // Since we'll be performing lots of flushes when compressing the data,
+  // zlib's lower bounds may be insufficient.
+  //
+  // TODO(akalin): Avoid the duplicate calculation with
+  // GetSerializedLength(const SpdyHeaderBlock&).
+  const int compressed_max_size =
+      2 * deflateBound(compressor, uncompressed_len);
+
+  // TODO(phajdan.jr): Clean up after we no longer need
+  // to workaround http://crbug.com/139744.
+#if defined(USE_SYSTEM_ZLIB)
+  compressor->next_in = reinterpret_cast<Bytef*>(uncompressed_payload.data());
+  compressor->avail_in = uncompressed_len;
+#endif  // defined(USE_SYSTEM_ZLIB)
+  compressor->next_out = reinterpret_cast<Bytef*>(
+      builder->GetWritableBuffer(compressed_max_size));
+  compressor->avail_out = compressed_max_size;
+
+  // TODO(phajdan.jr): Clean up after we no longer need
+  // to workaround http://crbug.com/139744.
+#if defined(USE_SYSTEM_ZLIB)
+  int rv = deflate(compressor, Z_SYNC_FLUSH);
+  if (rv != Z_OK) {  // How can we know that it compressed everything?
+    // This shouldn't happen, right?
+    LOG(WARNING) << "deflate failure: " << rv;
+    // TODO(akalin): Upstream this return.
+    return;
+  }
+#else
+  WriteHeaderBlockToZ(&frame.header_block(), compressor);
+#endif  // defined(USE_SYSTEM_ZLIB)
+
+  int compressed_size = compressed_max_size - compressor->avail_out;
+  builder->Seek(compressed_size);
+  builder->RewriteLength(*this);
+}
+
+}  // namespace net
diff --git a/src/net/spdy/spdy_framer.h.orig b/src/net/spdy/spdy_framer.h.orig
new file mode 100644
index 0000000..9928695
--- /dev/null
+++ b/src/net/spdy/spdy_framer.h.orig
@@ -0,0 +1,823 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_SPDY_FRAMER_H_
+#define NET_SPDY_SPDY_FRAMER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+
+#include "base/strings/string_piece.h"
+#include "base/sys_byteorder.h"
+#include "net/base/net_export.h"
+#include "net/spdy/hpack/hpack_decoder.h"
+#include "net/spdy/hpack/hpack_encoder.h"
+#include "net/spdy/spdy_alt_svc_wire_format.h"
+#include "net/spdy/spdy_header_block.h"
+#include "net/spdy/spdy_headers_block_parser.h"
+#include "net/spdy/spdy_protocol.h"
+
+typedef struct z_stream_s z_stream;  // Forward declaration for zlib.
+
+namespace net {
+
+class HttpProxyClientSocketPoolTest;
+class HttpNetworkLayer;
+class HttpNetworkTransactionTest;
+class SpdyHttpStreamTest;
+class SpdyNetworkTransactionTest;
+class SpdyProxyClientSocketTest;
+class SpdySessionTest;
+class SpdyStreamTest;
+
+class SpdyFramer;
+class SpdyFrameBuilder;
+
+namespace test {
+
+class TestSpdyVisitor;
+class SpdyFramerPeer;
+
+}  // namespace test
+
+// A datastructure for holding the ID and flag fields for SETTINGS.
+// Conveniently handles converstion to/from wire format.
+class NET_EXPORT_PRIVATE SettingsFlagsAndId {
+ public:
+  static SettingsFlagsAndId FromWireFormat(SpdyMajorVersion version,
+                                           uint32_t wire);
+
+  SettingsFlagsAndId() : flags_(0), id_(0) {}
+
+  // TODO(hkhalil): restrict to enums instead of free-form ints.
+  SettingsFlagsAndId(uint8_t flags, uint32_t id);
+
+  uint32_t GetWireFormat(SpdyMajorVersion version) const;
+
+  uint32_t id() const { return id_; }
+  uint8_t flags() const { return flags_; }
+
+ private:
+  uint8_t flags_;
+  uint32_t id_;
+};
+
+// SettingsMap has unique (flags, value) pair for given SpdySettingsIds ID.
+typedef std::pair<SpdySettingsFlags, uint32_t> SettingsFlagsAndValue;
+typedef std::map<SpdySettingsIds, SettingsFlagsAndValue> SettingsMap;
+
+// SpdyFramerVisitorInterface is a set of callbacks for the SpdyFramer.
+// Implement this interface to receive event callbacks as frames are
+// decoded from the framer.
+//
+// Control frames that contain SPDY header blocks (SYN_STREAM, SYN_REPLY,
+// HEADER, and PUSH_PROMISE) are processed in fashion that allows the
+// decompressed header block to be delivered in chunks to the visitor.
+// The following steps are followed:
+//   1. OnSynStream, OnSynReply, OnHeaders, or OnPushPromise is called.
+//   2. Repeated: OnControlFrameHeaderData is called with chunks of the
+//      decompressed header block. In each call the len parameter is greater
+//      than zero.
+//   3. OnControlFrameHeaderData is called with len set to zero, indicating
+//      that the full header block has been delivered for the control frame.
+// During step 2 the visitor may return false, indicating that the chunk of
+// header data could not be handled by the visitor (typically this indicates
+// resource exhaustion). If this occurs the framer will discontinue
+// delivering chunks to the visitor, set a SPDY_CONTROL_PAYLOAD_TOO_LARGE
+// error, and clean up appropriately. Note that this will cause the header
+// decompressor to lose synchronization with the sender's header compressor,
+// making the SPDY session unusable for future work. The visitor's OnError
+// function should deal with this condition by closing the SPDY connection.
+class NET_EXPORT_PRIVATE SpdyFramerVisitorInterface {
+ public:
+  virtual ~SpdyFramerVisitorInterface() {}
+
+  // Called if an error is detected in the SpdySerializedFrame protocol.
+  virtual void OnError(SpdyFramer* framer) = 0;
+
+  // Called when a data frame header is received. The frame's data
+  // payload will be provided via subsequent calls to
+  // OnStreamFrameData().
+  virtual void OnDataFrameHeader(SpdyStreamId stream_id,
+                                 size_t length,
+                                 bool fin) = 0;
+
+  // Called when data is received.
+  // |stream_id| The stream receiving data.
+  // |data| A buffer containing the data received.
+  // |len| The length of the data buffer.
+  virtual void OnStreamFrameData(SpdyStreamId stream_id,
+                                 const char* data,
+                                 size_t len) = 0;
+
+  // Called when the other side has finished sending data on this stream.
+  // |stream_id| The stream that was receivin data.
+  virtual void OnStreamEnd(SpdyStreamId stream_id) = 0;
+
+  // Called when padding is received (padding length field or padding octets).
+  // |stream_id| The stream receiving data.
+  // |len| The number of padding octets.
+  virtual void OnStreamPadding(SpdyStreamId stream_id, size_t len) = 0;
+
+  // Called just before processing the payload of a frame containing header
+  // data. Should return an implementation of SpdyHeadersHandlerInterface that
+  // will receive headers for stream |stream_id|. The caller will not take
+  // ownership of the headers handler. The same instance should remain live
+  // and be returned for all header frames comprising a logical header block
+  // (i.e. until OnHeaderFrameEnd() is called with end_headers == true).
+  virtual SpdyHeadersHandlerInterface* OnHeaderFrameStart(
+      SpdyStreamId stream_id) = 0;
+
+  // Called after processing the payload of a frame containing header data.
+  // |end_headers| is true if there will not be any subsequent CONTINUATION
+  // frames.
+  virtual void OnHeaderFrameEnd(SpdyStreamId stream_id, bool end_headers) = 0;
+
+  // Called when a chunk of header data is available. This is called
+  // after OnSynStream, OnSynReply, OnHeaders(), or OnPushPromise.
+  // |stream_id| The stream receiving the header data.
+  // |header_data| A buffer containing the header data chunk received.
+  // |len| The length of the header data buffer. A length of zero indicates
+  //       that the header data block has been completely sent.
+  // When this function returns true the visitor indicates that it accepted
+  // all of the data. Returning false indicates that that an unrecoverable
+  // error has occurred, such as bad header data or resource exhaustion.
+  virtual bool OnControlFrameHeaderData(SpdyStreamId stream_id,
+                                        const char* header_data,
+                                        size_t len) = 0;
+
+  // Called when a SYN_STREAM frame is received.
+  // Note that header block data is not included. See
+  // OnControlFrameHeaderData().
+  virtual void OnSynStream(SpdyStreamId stream_id,
+                           SpdyStreamId associated_stream_id,
+                           SpdyPriority priority,
+                           bool fin,
+                           bool unidirectional) = 0;
+
+  // Called when a SYN_REPLY frame is received.
+  // Note that header block data is not included. See
+  // OnControlFrameHeaderData().
+  virtual void OnSynReply(SpdyStreamId stream_id, bool fin) = 0;
+
+  // Called when a RST_STREAM frame has been parsed.
+  virtual void OnRstStream(SpdyStreamId stream_id,
+                           SpdyRstStreamStatus status) = 0;
+
+  // Called when a SETTINGS frame is received.
+  // |clear_persisted| True if the respective flag is set on the SETTINGS frame.
+  virtual void OnSettings(bool clear_persisted) {}
+
+  // Called when a complete setting within a SETTINGS frame has been parsed and
+  // validated.
+  virtual void OnSetting(SpdySettingsIds id, uint8_t flags, uint32_t value) = 0;
+
+  // Called when a SETTINGS frame is received with the ACK flag set.
+  virtual void OnSettingsAck() {}
+
+  // Called before and after parsing SETTINGS id and value tuples.
+  virtual void OnSettingsEnd() = 0;
+
+  // Called when a PING frame has been parsed.
+  virtual void OnPing(SpdyPingId unique_id, bool is_ack) = 0;
+
+  // Called when a GOAWAY frame has been parsed.
+  virtual void OnGoAway(SpdyStreamId last_accepted_stream_id,
+                        SpdyGoAwayStatus status) = 0;
+
+  // Called when a HEADERS frame is received.
+  // Note that header block data is not included. See
+  // OnControlFrameHeaderData().
+  // |stream_id| The stream receiving the header.
+  // |has_priority| Whether or not the headers frame included a priority value,
+  //     and, if protocol version == HTTP2, stream dependency info.
+  // |priority| If |has_priority| is true, then priority value for the receiving
+  //     stream, otherwise 0.
+  // |parent_stream_id| If |has_priority| is true and protocol
+  //     version == HTTP2, the parent stream of the receiving stream, else 0.
+  // |exclusive| If |has_priority| is true and protocol
+  //     version == HTTP2, the exclusivity of dependence on the parent stream,
+  //     else false.
+  // |fin| Whether FIN flag is set in frame headers.
+  // |end| False if HEADERs frame is to be followed by a CONTINUATION frame,
+  //     or true if not.
+  virtual void OnHeaders(SpdyStreamId stream_id,
+                         bool has_priority,
+                         SpdyPriority priority,
+                         SpdyStreamId parent_stream_id,
+                         bool exclusive,
+                         bool fin,
+                         bool end) = 0;
+
+  // Called when a WINDOW_UPDATE frame has been parsed.
+  virtual void OnWindowUpdate(SpdyStreamId stream_id,
+                              int delta_window_size) = 0;
+
+  // Called when a goaway frame opaque data is available.
+  // |goaway_data| A buffer containing the opaque GOAWAY data chunk received.
+  // |len| The length of the header data buffer. A length of zero indicates
+  //       that the header data block has been completely sent.
+  // When this function returns true the visitor indicates that it accepted
+  // all of the data. Returning false indicates that that an error has
+  // occurred while processing the data. Default implementation returns true.
+  virtual bool OnGoAwayFrameData(const char* goaway_data, size_t len);
+
+  // Called when rst_stream frame opaque data is available.
+  // |rst_stream_data| A buffer containing the opaque RST_STREAM
+  // data chunk received.
+  // |len| The length of the header data buffer. A length of zero indicates
+  //       that the opaque data has been completely sent.
+  // When this function returns true the visitor indicates that it accepted
+  // all of the data. Returning false indicates that that an error has
+  // occurred while processing the data. Default implementation returns true.
+  virtual bool OnRstStreamFrameData(const char* rst_stream_data, size_t len);
+
+  // Called when a BLOCKED frame has been parsed.
+  virtual void OnBlocked(SpdyStreamId stream_id) {}
+
+  // Called when a PUSH_PROMISE frame is received.
+  // Note that header block data is not included. See
+  // OnControlFrameHeaderData().
+  virtual void OnPushPromise(SpdyStreamId stream_id,
+                             SpdyStreamId promised_stream_id,
+                             bool end) = 0;
+
+  // Called when a CONTINUATION frame is received.
+  // Note that header block data is not included. See
+  // OnControlFrameHeaderData().
+  virtual void OnContinuation(SpdyStreamId stream_id, bool end) = 0;
+
+  // Called when an ALTSVC frame has been parsed.
+  virtual void OnAltSvc(
+      SpdyStreamId stream_id,
+      base::StringPiece origin,
+      const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector) {}
+
+  // Called when a PRIORITY frame is received.
+  virtual void OnPriority(SpdyStreamId stream_id,
+                          SpdyStreamId parent_stream_id,
+                          uint8_t weight,
+                          bool exclusive) {}
+
+  // Called when a frame type we don't recognize is received.
+  // Return true if this appears to be a valid extension frame, false otherwise.
+  // We distinguish between extension frames and nonsense by checking
+  // whether the stream id is valid.
+  virtual bool OnUnknownFrame(SpdyStreamId stream_id, int frame_type) = 0;
+};
+
+// Optionally, and in addition to SpdyFramerVisitorInterface, a class supporting
+// SpdyFramerDebugVisitorInterface may be used in conjunction with SpdyFramer in
+// order to extract debug/internal information about the SpdyFramer as it
+// operates.
+//
+// Most SPDY implementations need not bother with this interface at all.
+class NET_EXPORT_PRIVATE SpdyFramerDebugVisitorInterface {
+ public:
+  virtual ~SpdyFramerDebugVisitorInterface() {}
+
+  // Called after compressing a frame with a payload of
+  // a list of name-value pairs.
+  // |payload_len| is the uncompressed payload size.
+  // |frame_len| is the compressed frame size.
+  virtual void OnSendCompressedFrame(SpdyStreamId stream_id,
+                                     SpdyFrameType type,
+                                     size_t payload_len,
+                                     size_t frame_len) {}
+
+  // Called when a frame containing a compressed payload of
+  // name-value pairs is received.
+  // |frame_len| is the compressed frame size.
+  virtual void OnReceiveCompressedFrame(SpdyStreamId stream_id,
+                                        SpdyFrameType type,
+                                        size_t frame_len) {}
+};
+
+class NET_EXPORT_PRIVATE SpdyFramer {
+ public:
+  // SPDY states.
+  // TODO(mbelshe): Can we move these into the implementation
+  //                and avoid exposing through the header.  (Needed for test)
+  enum SpdyState {
+    SPDY_ERROR,
+    SPDY_READY_FOR_FRAME,  // Framer is ready for reading the next frame.
+    SPDY_FRAME_COMPLETE,  // Framer has finished reading a frame, need to reset.
+    SPDY_READING_COMMON_HEADER,
+    SPDY_CONTROL_FRAME_PAYLOAD,
+    SPDY_READ_DATA_FRAME_PADDING_LENGTH,
+    SPDY_CONSUME_PADDING,
+    SPDY_IGNORE_REMAINING_PAYLOAD,
+    SPDY_FORWARD_STREAM_FRAME,
+    SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK,
+    SPDY_CONTROL_FRAME_HEADER_BLOCK,
+    SPDY_GOAWAY_FRAME_PAYLOAD,
+    SPDY_RST_STREAM_FRAME_PAYLOAD,
+    SPDY_SETTINGS_FRAME_HEADER,
+    SPDY_SETTINGS_FRAME_PAYLOAD,
+    SPDY_ALTSVC_FRAME_PAYLOAD,
+  };
+
+  // SPDY error codes.
+  enum SpdyError {
+    SPDY_NO_ERROR,
+    SPDY_INVALID_STREAM_ID,            // Stream ID is invalid
+    SPDY_INVALID_CONTROL_FRAME,        // Control frame is mal-formatted.
+    SPDY_CONTROL_PAYLOAD_TOO_LARGE,    // Control frame payload was too large.
+    SPDY_ZLIB_INIT_FAILURE,            // The Zlib library could not initialize.
+    SPDY_UNSUPPORTED_VERSION,          // Control frame has unsupported version.
+    SPDY_DECOMPRESS_FAILURE,           // There was an error decompressing.
+    SPDY_COMPRESS_FAILURE,             // There was an error compressing.
+    SPDY_GOAWAY_FRAME_CORRUPT,         // GOAWAY frame could not be parsed.
+    SPDY_RST_STREAM_FRAME_CORRUPT,     // RST_STREAM frame could not be parsed.
+    SPDY_INVALID_PADDING,              // HEADERS or DATA frame padding invalid
+    SPDY_INVALID_DATA_FRAME_FLAGS,     // Data frame has invalid flags.
+    SPDY_INVALID_CONTROL_FRAME_FLAGS,  // Control frame has invalid flags.
+    SPDY_UNEXPECTED_FRAME,             // Frame received out of order.
+    SPDY_INTERNAL_FRAMER_ERROR,        // SpdyFramer was used incorrectly.
+    SPDY_INVALID_CONTROL_FRAME_SIZE,   // Control frame not sized to spec
+
+    LAST_ERROR,  // Must be the last entry in the enum.
+  };
+
+  // Constant for invalid (or unknown) stream IDs.
+  static const SpdyStreamId kInvalidStream;
+
+  // The maximum size of header data chunks delivered to the framer visitor
+  // through OnControlFrameHeaderData. (It is exposed here for unit test
+  // purposes.)
+  static const size_t kHeaderDataChunkMaxSize;
+
+  void SerializeHeaderBlockWithoutCompression(
+      SpdyFrameBuilder* builder,
+      const SpdyHeaderBlock& header_block) const;
+
+  // Retrieve serialized length of SpdyHeaderBlock.
+  // TODO(hkhalil): Remove, or move to quic code.
+  static size_t GetSerializedLength(
+      const SpdyMajorVersion spdy_version,
+      const SpdyHeaderBlock* headers);
+
+  // Create a new Framer, provided a SPDY version.
+  explicit SpdyFramer(SpdyMajorVersion version);
+  virtual ~SpdyFramer();
+
+  // Set callbacks to be called from the framer.  A visitor must be set, or
+  // else the framer will likely crash.  It is acceptable for the visitor
+  // to do nothing.  If this is called multiple times, only the last visitor
+  // will be used.
+  void set_visitor(SpdyFramerVisitorInterface* visitor) {
+    visitor_ = visitor;
+  }
+
+  // Set debug callbacks to be called from the framer. The debug visitor is
+  // completely optional and need not be set in order for normal operation.
+  // If this is called multiple times, only the last visitor will be used.
+  void set_debug_visitor(SpdyFramerDebugVisitorInterface* debug_visitor) {
+    debug_visitor_ = debug_visitor;
+  }
+
+  // Sets whether or not ProcessInput returns after finishing a frame, or
+  // continues processing additional frames. Normally ProcessInput processes
+  // all input, but this method enables the caller (and visitor) to work with
+  // a single frame at a time (or that portion of the frame which is provided
+  // as input). Reset() does not change the value of this flag.
+  void set_process_single_input_frame(bool v) {
+    process_single_input_frame_ = v;
+  }
+
+  // Pass data into the framer for parsing.
+  // Returns the number of bytes consumed. It is safe to pass more bytes in
+  // than may be consumed.
+  size_t ProcessInput(const char* data, size_t len);
+
+  // Resets the framer state after a frame has been successfully decoded.
+  // TODO(mbelshe): can we make this private?
+  void Reset();
+
+  // Check the state of the framer.
+  SpdyError error_code() const { return error_code_; }
+  SpdyState state() const { return state_; }
+  bool HasError() const { return state_ == SPDY_ERROR; }
+
+  // Given a buffer containing a decompressed header block in SPDY
+  // serialized format, parse out a SpdyHeaderBlock, putting the results
+  // in the given header block.
+  // Returns true if successfully parsed, false otherwise.
+  bool ParseHeaderBlockInBuffer(const char* header_data,
+                                size_t header_length,
+                                SpdyHeaderBlock* block) const;
+
+  // Serialize a data frame.
+  SpdySerializedFrame SerializeData(const SpdyDataIR& data) const;
+  // Serializes the data frame header and optionally padding length fields,
+  // excluding actual data payload and padding.
+  SpdySerializedFrame SerializeDataFrameHeaderWithPaddingLengthField(
+      const SpdyDataIR& data) const;
+
+  // Serializes a SYN_STREAM frame.
+  SpdySerializedFrame SerializeSynStream(const SpdySynStreamIR& syn_stream);
+
+  // Serialize a SYN_REPLY frame.
+  SpdySerializedFrame SerializeSynReply(const SpdySynReplyIR& syn_reply);
+
+  SpdySerializedFrame SerializeRstStream(
+      const SpdyRstStreamIR& rst_stream) const;
+
+  // Serializes a SETTINGS frame. The SETTINGS frame is
+  // used to communicate name/value pairs relevant to the communication channel.
+  SpdySerializedFrame SerializeSettings(const SpdySettingsIR& settings) const;
+
+  // Serializes a PING frame. The unique_id is used to
+  // identify the ping request/response.
+  SpdySerializedFrame SerializePing(const SpdyPingIR& ping) const;
+
+  // Serializes a GOAWAY frame. The GOAWAY frame is used
+  // prior to the shutting down of the TCP connection, and includes the
+  // stream_id of the last stream the sender of the frame is willing to process
+  // to completion.
+  SpdySerializedFrame SerializeGoAway(const SpdyGoAwayIR& goaway) const;
+
+  // Serializes a HEADERS frame. The HEADERS frame is used
+  // for sending additional headers outside of a SYN_STREAM/SYN_REPLY.
+  SpdySerializedFrame SerializeHeaders(const SpdyHeadersIR& headers);
+
+  // Serializes a WINDOW_UPDATE frame. The WINDOW_UPDATE
+  // frame is used to implement per stream flow control in SPDY.
+  SpdySerializedFrame SerializeWindowUpdate(
+      const SpdyWindowUpdateIR& window_update) const;
+
+  // Serializes a BLOCKED frame. The BLOCKED frame is used to
+  // indicate to the remote endpoint that this endpoint believes itself to be
+  // flow-control blocked but otherwise ready to send data. The BLOCKED frame
+  // is purely advisory and optional.
+  SpdySerializedFrame SerializeBlocked(const SpdyBlockedIR& blocked) const;
+
+  // Serializes a PUSH_PROMISE frame. The PUSH_PROMISE frame is used
+  // to inform the client that it will be receiving an additional stream
+  // in response to the original request. The frame includes synthesized
+  // headers to explain the upcoming data.
+  SpdySerializedFrame SerializePushPromise(
+      const SpdyPushPromiseIR& push_promise);
+
+  // Serializes a CONTINUATION frame. The CONTINUATION frame is used
+  // to continue a sequence of header block fragments.
+  // TODO(jgraettinger): This implementation is incorrect. The continuation
+  // frame continues a previously-begun HPACK encoding; it doesn't begin a
+  // new one. Figure out whether it makes sense to keep SerializeContinuation().
+  SpdySerializedFrame SerializeContinuation(
+      const SpdyContinuationIR& continuation);
+
+  // Serializes an ALTSVC frame. The ALTSVC frame advertises the
+  // availability of an alternative service to the client.
+  SpdySerializedFrame SerializeAltSvc(const SpdyAltSvcIR& altsvc);
+
+  // Serializes a PRIORITY frame. The PRIORITY frame advises a change in
+  // the relative priority of the given stream.
+  SpdySerializedFrame SerializePriority(const SpdyPriorityIR& priority) const;
+
+  // Serialize a frame of unknown type.
+  SpdySerializedFrame SerializeFrame(const SpdyFrameIR& frame);
+
+  // NOTES about frame compression.
+  // We want spdy to compress headers across the entire session.  As long as
+  // the session is over TCP, frames are sent serially.  The client & server
+  // can each compress frames in the same order and then compress them in that
+  // order, and the remote can do the reverse.  However, we ultimately want
+  // the creation of frames to be less sensitive to order so that they can be
+  // placed over a UDP based protocol and yet still benefit from some
+  // compression.  We don't know of any good compression protocol which does
+  // not build its state in a serial (stream based) manner....  For now, we're
+  // using zlib anyway.
+
+  // For ease of testing and experimentation we can tweak compression on/off.
+  void set_enable_compression(bool value) {
+    enable_compression_ = value;
+  }
+
+  // Used only in log messages.
+  void set_display_protocol(const std::string& protocol) {
+    display_protocol_ = protocol;
+  }
+
+  // Caller retains ownership of |visitor|.
+  void SetDecoderHeaderTableDebugVisitor(
+      HpackHeaderTable::DebugVisitorInterface* visitor);
+
+  // Caller retains ownership of |visitor|.
+  void SetEncoderHeaderTableDebugVisitor(
+      HpackHeaderTable::DebugVisitorInterface* visitor);
+
+  // Returns the (minimum) size of frames (sans variable-length portions).
+  size_t GetDataFrameMinimumSize() const;
+  size_t GetControlFrameHeaderSize() const;
+  size_t GetSynStreamMinimumSize() const;
+  size_t GetSynReplyMinimumSize() const;
+  size_t GetRstStreamMinimumSize() const;
+  size_t GetSettingsMinimumSize() const;
+  size_t GetPingSize() const;
+  size_t GetGoAwayMinimumSize() const;
+  size_t GetHeadersMinimumSize() const;
+  size_t GetWindowUpdateSize() const;
+  size_t GetBlockedSize() const;
+  size_t GetPushPromiseMinimumSize() const;
+  size_t GetContinuationMinimumSize() const;
+  size_t GetAltSvcMinimumSize() const;
+  size_t GetPrioritySize() const;
+
+  // Returns the minimum size a frame can be (data or control).
+  size_t GetFrameMinimumSize() const;
+
+  // Returns the maximum size a frame can be (data or control).
+  size_t GetFrameMaximumSize() const;
+
+  // Returns the maximum payload size of a DATA frame.
+  size_t GetDataFrameMaximumPayload() const;
+
+  // Returns the prefix length for the given frame type.
+  size_t GetPrefixLength(SpdyFrameType type) const;
+
+  // For debugging.
+  static const char* StateToString(int state);
+  static const char* ErrorCodeToString(int error_code);
+  static const char* StatusCodeToString(int status_code);
+  static const char* FrameTypeToString(SpdyFrameType type);
+
+  SpdyMajorVersion protocol_version() const { return protocol_version_; }
+
+  bool probable_http_response() const { return probable_http_response_; }
+
+  SpdyPriority GetLowestPriority() const { return kV3LowestPriority; }
+
+  SpdyPriority GetHighestPriority() const { return kV3HighestPriority; }
+
+  // Interpolates SpdyPriority values into SPDY4/HTTP2 priority weights, and
+  // vice versa. Note that these methods accept/return weight values in their
+  // on-the-wire form, i.e. in range [0, 255], rather than their effective
+  // values in range [1, 256].
+  static uint8_t MapPriorityToWeight(SpdyPriority priority);
+  static SpdyPriority MapWeightToPriority(uint8_t weight);
+
+  // Deliver the given control frame's compressed headers block to the visitor
+  // in decompressed form, in chunks. Returns true if the visitor has
+  // accepted all of the chunks.
+  bool IncrementallyDecompressControlFrameHeaderData(
+      SpdyStreamId stream_id,
+      const char* data,
+      size_t len);
+
+  // Updates the maximum size of the header encoder compression table.
+  void UpdateHeaderEncoderTableSize(uint32_t value);
+
+  // Returns the maximum size of the header encoder compression table.
+  size_t header_encoder_table_size() const;
+
+ protected:
+  friend class BufferedSpdyFramer;
+  friend class HttpNetworkLayer;  // This is temporary for the server.
+  friend class HttpNetworkTransactionTest;
+  friend class HttpProxyClientSocketPoolTest;
+  friend class SpdyHttpStreamTest;
+  friend class SpdyNetworkTransactionTest;
+  friend class SpdyProxyClientSocketTest;
+  friend class SpdySessionTest;
+  friend class SpdyStreamTest;
+  friend class test::TestSpdyVisitor;
+  friend class test::SpdyFramerPeer;
+
+ private:
+  class CharBuffer {
+   public:
+    explicit CharBuffer(size_t capacity);
+    ~CharBuffer();
+
+    void CopyFrom(const char* data, size_t size);
+    void Rewind();
+
+    const char* data() const { return buffer_.get(); }
+    size_t len() const { return len_; }
+
+   private:
+    std::unique_ptr<char[]> buffer_;
+    size_t capacity_;
+    size_t len_;
+  };
+
+  // Scratch space necessary for processing SETTINGS frames.
+  struct SpdySettingsScratch {
+    SpdySettingsScratch();
+    void Reset();
+
+    // Buffer contains up to one complete key/value pair.
+    CharBuffer buffer;
+
+    // The ID of the last setting that was processed in the current SETTINGS
+    // frame. Used for detecting out-of-order or duplicate keys within a
+    // settings frame. Set to -1 before first key/value pair is processed.
+    int last_setting_id;
+  };
+
+  // Internal breakouts from ProcessInput. Each returns the number of bytes
+  // consumed from the data.
+  size_t ProcessCommonHeader(const char* data, size_t len);
+  size_t ProcessControlFramePayload(const char* data, size_t len);
+  size_t ProcessControlFrameBeforeHeaderBlock(const char* data, size_t len);
+  // HPACK data is re-encoded as SPDY3 and re-entrantly delivered through
+  // |ProcessControlFrameHeaderBlock()|. |is_hpack_header_block| controls
+  // whether data is treated as HPACK- vs SPDY3-encoded.
+  size_t ProcessControlFrameHeaderBlock(const char* data,
+                                        size_t len,
+                                        bool is_hpack_header_block);
+  size_t ProcessDataFramePaddingLength(const char* data, size_t len);
+  size_t ProcessFramePadding(const char* data, size_t len);
+  size_t ProcessDataFramePayload(const char* data, size_t len);
+  size_t ProcessGoAwayFramePayload(const char* data, size_t len);
+  size_t ProcessRstStreamFramePayload(const char* data, size_t len);
+  size_t ProcessSettingsFrameHeader(const char* data, size_t len);
+  size_t ProcessSettingsFramePayload(const char* data, size_t len);
+  size_t ProcessAltSvcFramePayload(const char* data, size_t len);
+  size_t ProcessIgnoredControlFramePayload(/*const char* data,*/ size_t len);
+
+  // Validates the frame header against the current protocol, e.g.
+  // Frame type must be known, must specify a non-zero stream id.
+  //
+  // is_control_frame: the control bit for SPDY3
+  // frame_type_field: the unparsed frame type octet(s)
+  //
+  // For valid frames, returns the correct SpdyFrameType.
+  // Otherwise returns a best guess at invalid frame type,
+  // after setting the appropriate SpdyError.
+  SpdyFrameType ValidateFrameHeader(bool is_control_frame,
+                                    int frame_type_field);
+
+  // TODO(jgraettinger): To be removed with migration to
+  // SpdyHeadersHandlerInterface.  Serializes the last-processed
+  // header block of |hpack_decoder_| as a SPDY3 format block, and
+  // delivers it to the visitor via reentrant call to
+  // ProcessControlFrameHeaderBlock().  |compressed_len| is used for
+  // logging compression percentage.
+  void DeliverHpackBlockAsSpdy3Block(size_t compressed_len);
+
+  // Helpers for above internal breakouts from ProcessInput.
+  void ProcessControlFrameHeader(int control_frame_type_field);
+  // Always passed exactly 1 setting's worth of data.
+  bool ProcessSetting(const char* data);
+
+  // Retrieve serialized length of SpdyHeaderBlock. If compression is enabled, a
+  // maximum estimate is returned.
+  size_t GetSerializedLength(const SpdyHeaderBlock& headers);
+
+  // Get (and lazily initialize) the ZLib state.
+  z_stream* GetHeaderCompressor();
+  z_stream* GetHeaderDecompressor();
+
+  // Get (and lazily initialize) the HPACK state.
+  HpackEncoder* GetHpackEncoder();
+  HpackDecoder* GetHpackDecoder();
+
+  size_t GetNumberRequiredContinuationFrames(size_t size);
+
+  void WritePayloadWithContinuation(SpdyFrameBuilder* builder,
+                                    const std::string& hpack_encoding,
+                                    SpdyStreamId stream_id,
+                                    SpdyFrameType type,
+                                    int padding_payload_len);
+
+  // Deliver the given control frame's uncompressed headers block to the
+  // visitor in chunks. Returns true if the visitor has accepted all of the
+  // chunks.
+  bool IncrementallyDeliverControlFrameHeaderData(SpdyStreamId stream_id,
+                                                  const char* data,
+                                                  size_t len);
+
+  // Utility to copy the given data block to the current frame buffer, up
+  // to the given maximum number of bytes, and update the buffer
+  // data (pointer and length). Returns the number of bytes
+  // read, and:
+  //   *data is advanced the number of bytes read.
+  //   *len is reduced by the number of bytes read.
+  size_t UpdateCurrentFrameBuffer(const char** data, size_t* len,
+                                  size_t max_bytes);
+
+  void WriteHeaderBlockToZ(const SpdyHeaderBlock* headers,
+                           z_stream* out) const;
+
+  // Compresses automatically according to enable_compression_.
+  void SerializeHeaderBlock(SpdyFrameBuilder* builder,
+                            const SpdyFrameWithHeaderBlockIR& frame);
+
+  // Set the error code and moves the framer into the error state.
+  void set_error(SpdyError error);
+
+  // The size of the control frame buffer.
+  // Since this is only used for control frame headers, the maximum control
+  // frame header size (SYN_STREAM) is sufficient; all remaining control
+  // frame data is streamed to the visitor.
+  static const size_t kControlFrameBufferSize;
+
+  // The maximum size of the control frames that we send, including the size of
+  // the header. This limit is arbitrary. We can enforce it here or at the
+  // application layer. We chose the framing layer, but this can be changed (or
+  // removed) if necessary later down the line.
+  // TODO(diannahu): Rename to make it clear that this limit is for sending.
+  static const size_t kMaxControlFrameSize;
+
+  SpdyState state_;
+  SpdyState previous_state_;
+  SpdyError error_code_;
+
+  // Note that for DATA frame, remaining_data_length_ is sum of lengths of
+  // frame header, padding length field (optional), data payload (optional) and
+  // padding payload (optional).
+  size_t remaining_data_length_;
+
+  // The length (in bytes) of the padding payload to be processed.
+  size_t remaining_padding_payload_length_;
+
+  // The number of bytes remaining to read from the current control frame's
+  // headers. Note that header data blocks (for control types that have them)
+  // are part of the frame's payload, and not the frame's headers.
+  size_t remaining_control_header_;
+
+  CharBuffer current_frame_buffer_;
+
+  // The type of the frame currently being read.
+  SpdyFrameType current_frame_type_;
+
+  // The total length of the frame currently being read, including frame header.
+  uint32_t current_frame_length_;
+
+  // The stream ID field of the frame currently being read, if applicable.
+  SpdyStreamId current_frame_stream_id_;
+
+  // Set this to the current stream when we receive a HEADERS, PUSH_PROMISE, or
+  // CONTINUATION frame without the END_HEADERS(0x4) bit set. These frames must
+  // be followed by a CONTINUATION frame, or else we throw a PROTOCOL_ERROR.
+  // A value of 0 indicates that we are not expecting a CONTINUATION frame.
+  SpdyStreamId expect_continuation_;
+
+  // Scratch space for handling SETTINGS frames.
+  // TODO(hkhalil): Unify memory for this scratch space with
+  // current_frame_buffer_.
+  SpdySettingsScratch settings_scratch_;
+
+  std::unique_ptr<CharBuffer> altsvc_scratch_;
+
+  // SPDY header compressors.
+  std::unique_ptr<z_stream> header_compressor_;
+  std::unique_ptr<z_stream> header_decompressor_;
+
+  std::unique_ptr<HpackEncoder> hpack_encoder_;
+  std::unique_ptr<HpackDecoder> hpack_decoder_;
+
+  SpdyFramerVisitorInterface* visitor_;
+  SpdyFramerDebugVisitorInterface* debug_visitor_;
+
+  std::unique_ptr<SpdyHeadersBlockParser> header_parser_;
+  SpdyHeadersHandlerInterface* header_handler_;
+
+  std::string display_protocol_;
+
+  // The protocol version to be spoken/understood by this framer.
+  const SpdyMajorVersion protocol_version_;
+
+  // The flags field of the frame currently being read.
+  uint8_t current_frame_flags_;
+
+  // Determines whether HPACK or gzip compression is used.
+  bool enable_compression_;
+
+  // Tracks if we've ever gotten far enough in framing to see a control frame of
+  // type SYN_STREAM or SYN_REPLY.
+  //
+  // If we ever get something which looks like a data frame before we've had a
+  // SYN, we explicitly check to see if it looks like we got an HTTP response
+  // to a SPDY request.  This boolean lets us do that.
+  bool syn_frame_processed_;
+
+  // If we ever get a data frame before a SYN frame, we check to see if it
+  // starts with HTTP.  If it does, we likely have an HTTP response.   This
+  // isn't guaranteed though: we could have gotten a settings frame and then
+  // corrupt data that just looks like HTTP, but deterministic checking requires
+  // a lot more state.
+  bool probable_http_response_;
+
+  // If a HEADERS frame is followed by a CONTINUATION frame, the FIN/END_STREAM
+  // flag is still carried in the HEADERS frame. If it's set, flip this so that
+  // we know to terminate the stream when the entire header block has been
+  // processed.
+  bool end_stream_when_done_;
+
+  // If true, then ProcessInput returns after processing a full frame,
+  // rather than reading all available input.
+  bool process_single_input_frame_ = false;
+};
+
+}  // namespace net
+
+#endif  // NET_SPDY_SPDY_FRAMER_H_
diff --git a/src/net/ssl/client_cert_store.h b/src/net/ssl/client_cert_store.h
index f87c22e..b73d871 100644
--- a/src/net/ssl/client_cert_store.h
+++ b/src/net/ssl/client_cert_store.h
@@ -22,14 +22,16 @@
  public:
   virtual ~ClientCertStore() {}
 
+  using ClientCertListCallback = base::Callback<void(CertificateList)>;
+
   // Get client certs matching the |cert_request_info|. On completion, the
   // results will be stored in |selected_certs| and the |callback| will be run.
   // The |callback| may be called sychronously. The caller must ensure the
-  // ClientCertStore, |cert_request_info|, and |selected_certs| remain alive
-  // until the callback has been run.
+  // ClientCertStore and |cert_request_info| remain alive until the callback
+  // has been run.
   virtual void GetClientCerts(const SSLCertRequestInfo& cert_request_info,
-                              CertificateList* selected_certs,
-                              const base::Closure& callback) = 0;
+                              const ClientCertListCallback& callback) = 0;
+
  protected:
   ClientCertStore() {}
 
diff --git a/src/net/ssl/client_cert_store_mac.cc b/src/net/ssl/client_cert_store_mac.cc
index a3ef589..8003524 100644
--- a/src/net/ssl/client_cert_store_mac.cc
+++ b/src/net/ssl/client_cert_store_mac.cc
@@ -236,9 +236,9 @@
 
 ClientCertStoreMac::~ClientCertStoreMac() {}
 
-void ClientCertStoreMac::GetClientCerts(const SSLCertRequestInfo& request,
-                                         CertificateList* selected_certs,
-                                         const base::Closure& callback) {
+void ClientCertStoreMac::GetClientCerts(
+    const SSLCertRequestInfo& request,
+    const ClientCertListCallback& callback) {
   std::string server_domain = request.host_and_port.host();
 
   ScopedCFTypeRef<SecIdentityRef> preferred_identity;
@@ -270,8 +270,7 @@
     err = SecIdentitySearchCreate(NULL, CSSM_KEYUSE_SIGN, &search);
   }
   if (err) {
-    selected_certs->clear();
-    callback.Run();
+    callback.Run(CertificateList());
     return;
   }
   ScopedCFTypeRef<SecIdentitySearchRef> scoped_search(search);
@@ -311,14 +310,14 @@
 
   if (err != errSecItemNotFound) {
     OSSTATUS_LOG(ERROR, err) << "SecIdentitySearch error";
-    selected_certs->clear();
-    callback.Run();
+    callback.Run(CertificateList());
     return;
   }
 
+  CertificateList selected_certs;
   GetClientCertsImpl(preferred_cert, regular_certs, request, true,
-                     selected_certs);
-  callback.Run();
+                     &selected_certs);
+  callback.Run(std::move(selected_certs));
 }
 
 bool ClientCertStoreMac::SelectClientCertsForTesting(
diff --git a/src/net/ssl/client_cert_store_mac.h b/src/net/ssl/client_cert_store_mac.h
index aade83c..1bad779 100644
--- a/src/net/ssl/client_cert_store_mac.h
+++ b/src/net/ssl/client_cert_store_mac.h
@@ -20,8 +20,7 @@
 
   // ClientCertStore:
   void GetClientCerts(const SSLCertRequestInfo& cert_request_info,
-                      CertificateList* selected_certs,
-                      const base::Closure& callback) override;
+                      const ClientCertListCallback& callback) override;
 
  private:
   friend class ClientCertStoreMacTest;
diff --git a/src/net/ssl/client_cert_store_nss.cc b/src/net/ssl/client_cert_store_nss.cc
index b5d77af..7f22765 100644
--- a/src/net/ssl/client_cert_store_nss.cc
+++ b/src/net/ssl/client_cert_store_nss.cc
@@ -17,6 +17,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/strings/string_piece.h"
+#include "base/task_runner_util.h"
 #include "base/threading/worker_pool.h"
 #include "crypto/nss_crypto_module_delegate.h"
 #include "net/cert/scoped_nss_types.h"
@@ -32,29 +33,28 @@
 
 ClientCertStoreNSS::~ClientCertStoreNSS() {}
 
-void ClientCertStoreNSS::GetClientCerts(const SSLCertRequestInfo& request,
-                                         CertificateList* selected_certs,
-                                         const base::Closure& callback) {
+void ClientCertStoreNSS::GetClientCerts(
+    const SSLCertRequestInfo& request,
+    const ClientCertListCallback& callback) {
   std::unique_ptr<crypto::CryptoModuleBlockingPasswordDelegate>
       password_delegate;
   if (!password_delegate_factory_.is_null()) {
     password_delegate.reset(
         password_delegate_factory_.Run(request.host_and_port));
   }
-  if (base::WorkerPool::PostTaskAndReply(
+  if (base::PostTaskAndReplyWithResult(
+          base::WorkerPool::GetTaskRunner(true /* task_is_slow */).get(),
           FROM_HERE,
           base::Bind(&ClientCertStoreNSS::GetAndFilterCertsOnWorkerThread,
                      // Caller is responsible for keeping the ClientCertStore
                      // alive until the callback is run.
                      base::Unretained(this), base::Passed(&password_delegate),
-                     &request, selected_certs),
-          callback, true)) {
+                     &request),
+          callback)) {
     return;
   }
-  // If the task could not be posted, behave as if there were no certificates
-  // which requires to clear |selected_certs|.
-  selected_certs->clear();
-  callback.Run();
+  // If the task could not be posted, behave as if there were no certificates.
+  callback.Run(CertificateList());
 }
 
 // static
@@ -109,14 +109,15 @@
             x509_util::ClientCertSorter());
 }
 
-void ClientCertStoreNSS::GetAndFilterCertsOnWorkerThread(
+CertificateList ClientCertStoreNSS::GetAndFilterCertsOnWorkerThread(
     std::unique_ptr<crypto::CryptoModuleBlockingPasswordDelegate>
         password_delegate,
-    const SSLCertRequestInfo* request,
-    CertificateList* selected_certs) {
+    const SSLCertRequestInfo* request) {
   CertificateList platform_certs;
   GetPlatformCertsOnWorkerThread(std::move(password_delegate), &platform_certs);
-  FilterCertsOnWorkerThread(platform_certs, *request, selected_certs);
+  CertificateList selected_certs;
+  FilterCertsOnWorkerThread(platform_certs, *request, &selected_certs);
+  return selected_certs;
 }
 
 // static
diff --git a/src/net/ssl/client_cert_store_nss.h b/src/net/ssl/client_cert_store_nss.h
index 60f6e21..d49d50f 100644
--- a/src/net/ssl/client_cert_store_nss.h
+++ b/src/net/ssl/client_cert_store_nss.h
@@ -33,8 +33,7 @@
 
   // ClientCertStore:
   void GetClientCerts(const SSLCertRequestInfo& cert_request_info,
-                      CertificateList* selected_certs,
-                      const base::Closure& callback) override;
+                      const ClientCertListCallback& callback) override;
 
   // Examines the certificates in |certs| to find all certificates that match
   // the client certificate request in |request|, storing the matching
@@ -54,11 +53,10 @@
       net::CertificateList* certs);
 
  private:
-  void GetAndFilterCertsOnWorkerThread(
+  CertificateList GetAndFilterCertsOnWorkerThread(
       std::unique_ptr<crypto::CryptoModuleBlockingPasswordDelegate>
           password_delegate,
-      const SSLCertRequestInfo* request,
-      CertificateList* selected_certs);
+      const SSLCertRequestInfo* request);
 
   // The factory for creating the delegate for requesting a password to a
   // PKCS#11 token. May be null.
diff --git a/src/net/ssl/client_cert_store_nss_unittest.cc b/src/net/ssl/client_cert_store_nss_unittest.cc
index bc222e8..8bfae53 100644
--- a/src/net/ssl/client_cert_store_nss_unittest.cc
+++ b/src/net/ssl/client_cert_store_nss_unittest.cc
@@ -11,6 +11,7 @@
 #include <memory>
 #include <string>
 
+#include "base/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/run_loop.h"
 #include "crypto/scoped_test_nss_db.h"
@@ -22,6 +23,17 @@
 
 namespace net {
 
+namespace {
+
+void SaveCertsAndQuitCallback(CertificateList* out_certs,
+                              base::Closure quit_closure,
+                              CertificateList in_certs) {
+  *out_certs = std::move(in_certs);
+  quit_closure.Run();
+}
+
+}  // namespace
+
 class ClientCertStoreNSSTestDelegate {
  public:
   ClientCertStoreNSSTestDelegate() {}
@@ -68,7 +80,9 @@
 
     CertificateList selected_certs;
     base::RunLoop loop;
-    store->GetClientCerts(*request.get(), &selected_certs, loop.QuitClosure());
+    store->GetClientCerts(*request.get(),
+                          base::Bind(SaveCertsAndQuitCallback, &selected_certs,
+                                     loop.QuitClosure()));
     loop.Run();
 
     // The result be |client_1| with no intermediates.
@@ -88,7 +102,9 @@
 
     CertificateList selected_certs;
     base::RunLoop loop;
-    store->GetClientCerts(*request.get(), &selected_certs, loop.QuitClosure());
+    store->GetClientCerts(*request.get(),
+                          base::Bind(SaveCertsAndQuitCallback, &selected_certs,
+                                     loop.QuitClosure()));
     loop.Run();
 
     // The result be |client_1| with |client_1_ca| as an intermediate.
diff --git a/src/net/ssl/client_cert_store_unittest-inl.h b/src/net/ssl/client_cert_store_unittest-inl.h
index b72ba25..df561f3 100644
--- a/src/net/ssl/client_cert_store_unittest-inl.h
+++ b/src/net/ssl/client_cert_store_unittest-inl.h
@@ -93,7 +93,8 @@
 
 // Verify that certificates are correctly filtered against CertRequestInfo with
 // |cert_authorities| containing only |authority_1_DN|.
-TYPED_TEST_P(ClientCertStoreTest, CertAuthorityFiltering) {
+// Flaky: https://crbug.com/716730
+TYPED_TEST_P(ClientCertStoreTest, DISABLED_CertAuthorityFiltering) {
   scoped_refptr<X509Certificate> cert_1(
       ImportCertFromFile(GetTestCertsDirectory(), "client_1.pem"));
   ASSERT_TRUE(cert_1.get());
@@ -129,7 +130,7 @@
 REGISTER_TYPED_TEST_CASE_P(ClientCertStoreTest,
                            EmptyQuery,
                            AllIssuersAllowed,
-                           CertAuthorityFiltering);
+                           DISABLED_CertAuthorityFiltering);
 
 }  // namespace net
 
diff --git a/src/net/ssl/client_cert_store_win.cc b/src/net/ssl/client_cert_store_win.cc
index cdeee46..fec9c33 100644
--- a/src/net/ssl/client_cert_store_win.cc
+++ b/src/net/ssl/client_cert_store_win.cc
@@ -171,15 +171,16 @@
 
 ClientCertStoreWin::~ClientCertStoreWin() {}
 
-void ClientCertStoreWin::GetClientCerts(const SSLCertRequestInfo& request,
-                                        CertificateList* selected_certs,
-                                        const base::Closure& callback) {
+void ClientCertStoreWin::GetClientCerts(
+    const SSLCertRequestInfo& request,
+    const ClientCertListCallback& callback) {
+  CertificateList selected_certs;
   if (cert_store_) {
     // Use the existing client cert store. Note: Under some situations,
     // it's possible for this to return certificates that aren't usable
     // (see below).
-    GetClientCertsImpl(cert_store_, request, selected_certs);
-    callback.Run();
+    GetClientCertsImpl(cert_store_, request, &selected_certs);
+    callback.Run(std::move(selected_certs));
     return;
   }
 
@@ -190,14 +191,12 @@
   ScopedHCERTSTORE my_cert_store(CertOpenSystemStore(NULL, L"MY"));
   if (!my_cert_store) {
     PLOG(ERROR) << "Could not open the \"MY\" system certificate store: ";
-    selected_certs->clear();
-    callback.Run();
+    callback.Run(CertificateList());
     return;
   }
 
-  GetClientCertsImpl(my_cert_store, request, selected_certs);
-
-  callback.Run();
+  GetClientCertsImpl(my_cert_store, request, &selected_certs);
+  callback.Run(std::move(selected_certs));
 }
 
 bool ClientCertStoreWin::SelectClientCertsForTesting(
diff --git a/src/net/ssl/client_cert_store_win.h b/src/net/ssl/client_cert_store_win.h
index ffbb301..a8a4bab 100644
--- a/src/net/ssl/client_cert_store_win.h
+++ b/src/net/ssl/client_cert_store_win.h
@@ -28,8 +28,7 @@
   // will use that. Otherwise it will use the current user's "MY" cert store
   // instead.
   void GetClientCerts(const SSLCertRequestInfo& cert_request_info,
-                      CertificateList* selected_certs,
-                      const base::Closure& callback) override;
+                      const ClientCertListCallback& callback) override;
 
  private:
   using ScopedHCERTSTORE = crypto::ScopedCAPIHandle<
diff --git a/src/net/ssl/openssl_client_key_store.cc b/src/net/ssl/openssl_client_key_store.cc
index 295810f..48895e9 100644
--- a/src/net/ssl/openssl_client_key_store.cc
+++ b/src/net/ssl/openssl_client_key_store.cc
@@ -7,6 +7,7 @@
 #include <utility>
 
 #include "base/memory/singleton.h"
+#include "net/cert/asn1_util.h"
 #include "net/cert/x509_certificate.h"
 #include "net/ssl/ssl_private_key.h"
 #include "third_party/boringssl/src/include/openssl/evp.h"
@@ -19,6 +20,16 @@
 
 // Serializes the SubjectPublicKeyInfo for |cert|.
 bool GetCertificateSPKI(const X509Certificate* cert, std::string* spki) {
+#if BUILDFLAG(USE_BYTE_CERTS)
+  base::StringPiece cert_der(
+      reinterpret_cast<const char*>(CRYPTO_BUFFER_data(cert->os_cert_handle())),
+      CRYPTO_BUFFER_len(cert->os_cert_handle()));
+  base::StringPiece spki_tmp;
+  if (!asn1::ExtractSPKIFromDERCert(cert_der, &spki_tmp))
+    return false;
+  spki_tmp.CopyToString(spki);
+  return true;
+#else
   bssl::UniquePtr<EVP_PKEY> pkey(X509_get_pubkey(cert->os_cert_handle()));
   if (!pkey) {
     LOG(ERROR) << "Can't extract private key from certificate!";
@@ -38,6 +49,7 @@
                reinterpret_cast<char*>(der) + der_len);
   OPENSSL_free(der);
   return true;
+#endif
 }
 
 }  // namespace
diff --git a/src/net/ssl/ssl_cert_request_info.cc b/src/net/ssl/ssl_cert_request_info.cc
index e76aa45..245dfdc 100644
--- a/src/net/ssl/ssl_cert_request_info.cc
+++ b/src/net/ssl/ssl_cert_request_info.cc
@@ -16,7 +16,6 @@
   is_proxy = false;
   cert_authorities.clear();
   cert_key_types.clear();
-  client_certs.clear();
 }
 
 SSLCertRequestInfo::~SSLCertRequestInfo() {
diff --git a/src/net/ssl/ssl_cert_request_info.h b/src/net/ssl/ssl_cert_request_info.h
index 8b9e542..3f0443e 100644
--- a/src/net/ssl/ssl_cert_request_info.h
+++ b/src/net/ssl/ssl_cert_request_info.h
@@ -15,8 +15,6 @@
 
 namespace net {
 
-class X509Certificate;
-
 // The SSLCertRequestInfo class represents server criteria regarding client
 // certificate required for a secure connection.
 //
@@ -54,10 +52,6 @@
 
   std::vector<SSLClientCertType> cert_key_types;
 
-  // Client certificates matching the server criteria. This should be removed
-  // soon as being tracked in http://crbug.com/166642.
-  std::vector<scoped_refptr<X509Certificate> > client_certs;
-
  private:
   friend class base::RefCountedThreadSafe<SSLCertRequestInfo>;
 
diff --git a/src/net/test/embedded_test_server/default_handlers.cc b/src/net/test/embedded_test_server/default_handlers.cc
index ce337ba..4419d16 100644
--- a/src/net/test/embedded_test_server/default_handlers.cc
+++ b/src/net/test/embedded_test_server/default_handlers.cc
@@ -599,6 +599,24 @@
   return std::move(http_response);
 }
 
+// Never returns a response.
+class HungHttpResponse : public BasicHttpResponse {
+ public:
+  HungHttpResponse() {}
+
+  void SendResponse(const SendBytesCallback& send,
+                    const SendCompleteCallback& done) override {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(HungHttpResponse);
+};
+
+// /hung
+// Never returns a response.
+std::unique_ptr<HttpResponse> HandleHungResponse(const HttpRequest& request) {
+  return base::MakeUnique<HungHttpResponse>();
+}
+
 }  // namespace anonymous
 
 #define PREFIXED_HANDLER(prefix, handler) \
@@ -642,6 +660,8 @@
   server->RegisterDefaultHandler(
       PREFIXED_HANDLER("/defaultresponse", &HandleDefaultResponse));
   server->RegisterDefaultHandler(PREFIXED_HANDLER("/slow", &HandleSlowServer));
+  server->RegisterDefaultHandler(
+      PREFIXED_HANDLER("/hung", &HandleHungResponse));
 
   // TODO(svaldez): HandleDownload
   // TODO(svaldez): HandleDownloadFinish
diff --git a/src/net/test/embedded_test_server/embedded_test_server.cc b/src/net/test/embedded_test_server/embedded_test_server.cc
index 0f89bd9..83112a2 100644
--- a/src/net/test/embedded_test_server/embedded_test_server.cc
+++ b/src/net/test/embedded_test_server/embedded_test_server.cc
@@ -78,7 +78,7 @@
 
 void EmbeddedTestServer::SetConnectionListener(
     EmbeddedTestServerConnectionListener* listener) {
-  DCHECK(!Started());
+  DCHECK(!io_thread_.get());
   connection_listener_ = listener;
 }
 
diff --git a/src/net/tools/cert_verify_tool/verify_using_path_builder.cc b/src/net/tools/cert_verify_tool/verify_using_path_builder.cc
index 45dec38..53c11ad 100644
--- a/src/net/tools/cert_verify_tool/verify_using_path_builder.cc
+++ b/src/net/tools/cert_verify_tool/verify_using_path_builder.cc
@@ -74,12 +74,6 @@
       return false;
   }
 
-  if (chain.trust_anchor && chain.trust_anchor->cert()) {
-    if (!AddPemEncodedCert(chain.trust_anchor->cert().get(),
-                           &pem_encoded_chain))
-      return false;
-  }
-
   return WriteToFile(file_path, base::JoinString(pem_encoded_chain, ""));
 }
 
@@ -104,19 +98,6 @@
   return SubjectToString(parsed_subject);
 }
 
-// Returns a textual representation of the Subject of |trust_anchor|.
-std::string SubjectFromTrustAnchor(const net::TrustAnchor* trust_anchor) {
-  // If the cert is present, display the original subject from that rather than
-  // the normalized subject.
-  if (trust_anchor->cert())
-    return SubjectFromParsedCertificate(trust_anchor->cert().get());
-
-  net::RDNSequence parsed_subject;
-  if (!net::ParseNameValue(trust_anchor->normalized_subject(), &parsed_subject))
-    return std::string();
-  return SubjectToString(parsed_subject);
-}
-
 // Dumps a ResultPath to std::cout.
 void PrintResultPath(const net::CertPathBuilder::ResultPath* result_path,
                      size_t index,
@@ -131,18 +112,6 @@
               << SubjectFromParsedCertificate(cert.get()) << "\n";
   }
 
-  // Print the trust anchor (if there was one).
-  const auto& trust_anchor = result_path->path.trust_anchor;
-  if (trust_anchor) {
-    std::string trust_anchor_cert_fingerprint = "<no cert>";
-    if (trust_anchor->cert()) {
-      trust_anchor_cert_fingerprint =
-          FingerPrintParsedCertificate(trust_anchor->cert().get());
-    }
-    std::cout << " " << trust_anchor_cert_fingerprint << " "
-              << SubjectFromTrustAnchor(trust_anchor.get()) << "\n";
-  }
-
   // Print the errors/warnings if there were any.
   std::string errors_str =
       result_path->errors.ToDebugString(result_path->path.certs);
@@ -215,8 +184,7 @@
   for (const auto& der_cert : root_der_certs) {
     scoped_refptr<net::ParsedCertificate> cert = ParseCertificate(der_cert);
     if (cert) {
-      ssl_trust_store->AddTrustAnchor(
-          net::TrustAnchor::CreateFromCertificateNoConstraints(cert));
+      ssl_trust_store->AddTrustAnchor(cert);
     }
   }
 
@@ -244,9 +212,6 @@
       net::KeyPurpose::SERVER_AUTH, &result);
   path_builder.AddCertIssuerSource(&intermediate_cert_issuer_source);
 
-  if (ssl_trust_store->GetCertIssuerSource())
-    path_builder.AddCertIssuerSource(ssl_trust_store->GetCertIssuerSource());
-
   // Create a network thread to be used for AIA fetches, and wait for a
   // CertNetFetcher to be constructed on that thread.
   base::Thread::Options options(base::MessageLoop::TYPE_IO, 0);
diff --git a/src/net/tools/quic/chlo_extractor_test.cc b/src/net/tools/quic/chlo_extractor_test.cc
index df069ca..54f5a31 100644
--- a/src/net/tools/quic/chlo_extractor_test.cc
+++ b/src/net/tools/quic/chlo_extractor_test.cc
@@ -5,6 +5,7 @@
 #include "net/tools/quic/chlo_extractor.h"
 
 #include "net/quic/core/quic_framer.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 
@@ -40,7 +41,7 @@
   string chlo_;
 };
 
-class ChloExtractorTest : public ::testing::Test {
+class ChloExtractorTest : public QuicTest {
  public:
   ChloExtractorTest() {
     header_.public_header.connection_id = 42;
diff --git a/src/net/tools/quic/end_to_end_test.cc b/src/net/tools/quic/end_to_end_test.cc
index db3b8f9..8e0a816 100644
--- a/src/net/tools/quic/end_to_end_test.cc
+++ b/src/net/tools/quic/end_to_end_test.cc
@@ -34,6 +34,7 @@
 #include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/platform/api/quic_str_cat.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_config_peer.h"
@@ -293,7 +294,7 @@
   QuicClient* client_;
 };
 
-class EndToEndTest : public ::testing::TestWithParam<TestParams> {
+class EndToEndTest : public QuicTestWithParam<TestParams> {
  protected:
   EndToEndTest()
       : initialized_(false),
@@ -602,7 +603,6 @@
     stream_factory_ = factory;
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   bool initialized_;
   QuicSocketAddress server_address_;
   string server_hostname_;
@@ -2003,7 +2003,6 @@
       GetPeerInMemoryConnectionId(connection_id);
   header.public_header.reset_flag = true;
   header.public_header.version_flag = false;
-  header.rejected_packet_number = 10101;
   QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
                     Perspective::IS_SERVER);
   std::unique_ptr<QuicEncryptedPacket> packet(
@@ -2037,7 +2036,6 @@
       GetPeerInMemoryConnectionId(incorrect_connection_id);
   header.public_header.reset_flag = true;
   header.public_header.version_flag = false;
-  header.rejected_packet_number = 10101;
   QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
                     Perspective::IS_SERVER);
   std::unique_ptr<QuicEncryptedPacket> packet(
@@ -2073,7 +2071,6 @@
   header.public_header.connection_id = incorrect_connection_id;
   header.public_header.reset_flag = true;
   header.public_header.version_flag = false;
-  header.rejected_packet_number = 10101;
   QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
                     Perspective::IS_CLIENT);
   std::unique_ptr<QuicEncryptedPacket> packet(
@@ -3023,6 +3020,48 @@
             client_->connection_error());
 }
 
+class WindowUpdateObserver : public QuicConnectionDebugVisitor {
+ public:
+  WindowUpdateObserver() : num_window_update_frames_(0) {}
+
+  size_t num_window_update_frames() const { return num_window_update_frames_; }
+
+  void OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) override {
+    ++num_window_update_frames_;
+  }
+
+ private:
+  size_t num_window_update_frames_;
+};
+
+TEST_P(EndToEndTest, WindowUpdateInAck) {
+  FLAGS_quic_reloadable_flag_quic_enable_version_38 = true;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = true;
+  ASSERT_TRUE(Initialize());
+  EXPECT_TRUE(client_->client()->WaitForCryptoHandshakeConfirmed());
+  WindowUpdateObserver observer;
+  QuicConnection* client_connection =
+      client_->client()->session()->connection();
+  client_connection->set_debug_visitor(&observer);
+  QuicVersion version = client_connection->version();
+  // 100KB body.
+  string body(100 * 1024, 'a');
+  SpdyHeaderBlock headers;
+  headers[":method"] = "POST";
+  headers[":path"] = "/foo";
+  headers[":scheme"] = "https";
+  headers[":authority"] = server_hostname_;
+
+  EXPECT_EQ(kFooResponseBody,
+            client_->SendCustomSynchronousRequest(headers, body));
+  client_->Disconnect();
+  if (version > QUIC_VERSION_38) {
+    EXPECT_LT(0u, observer.num_window_update_frames());
+  } else {
+    EXPECT_EQ(0u, observer.num_window_update_frames());
+  }
+}
+
 class EndToEndBufferedPacketsTest : public EndToEndTest {
  public:
   void CreateClientWithWriter() override {
diff --git a/src/net/tools/quic/end_to_end_test.cc.orig b/src/net/tools/quic/end_to_end_test.cc.orig
new file mode 100644
index 0000000..9b78393
--- /dev/null
+++ b/src/net/tools/quic/end_to_end_test.cc.orig
@@ -0,0 +1,2843 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stddef.h>
+#include <sys/epoll.h>
+
+#include <list>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "base/memory/singleton.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/platform_thread.h"
+#include "base/time/time.h"
+#include "net/base/ip_address.h"
+#include "net/base/ip_endpoint.h"
+#include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
+#include "net/quic/crypto/null_encrypter.h"
+#include "net/quic/quic_client_session_base.h"
+#include "net/quic/quic_flags.h"
+#include "net/quic/quic_framer.h"
+#include "net/quic/quic_packet_creator.h"
+#include "net/quic/quic_protocol.h"
+#include "net/quic/quic_server_id.h"
+#include "net/quic/quic_session.h"
+#include "net/quic/quic_utils.h"
+#include "net/quic/test_tools/crypto_test_utils.h"
+#include "net/quic/test_tools/quic_config_peer.h"
+#include "net/quic/test_tools/quic_connection_peer.h"
+#include "net/quic/test_tools/quic_flow_controller_peer.h"
+#include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
+#include "net/quic/test_tools/quic_session_peer.h"
+#include "net/quic/test_tools/quic_spdy_session_peer.h"
+#include "net/quic/test_tools/quic_test_utils.h"
+#include "net/quic/test_tools/reliable_quic_stream_peer.h"
+#include "net/test/gtest_util.h"
+#include "net/tools/epoll_server/epoll_server.h"
+#include "net/tools/quic/quic_epoll_connection_helper.h"
+#include "net/tools/quic/quic_in_memory_cache.h"
+#include "net/tools/quic/quic_packet_writer_wrapper.h"
+#include "net/tools/quic/quic_server.h"
+#include "net/tools/quic/quic_simple_server_stream.h"
+#include "net/tools/quic/quic_socket_utils.h"
+#include "net/tools/quic/quic_spdy_client_stream.h"
+#include "net/tools/quic/test_tools/http_message.h"
+#include "net/tools/quic/test_tools/packet_dropping_test_writer.h"
+#include "net/tools/quic/test_tools/quic_client_peer.h"
+#include "net/tools/quic/test_tools/quic_dispatcher_peer.h"
+#include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h"
+#include "net/tools/quic/test_tools/quic_server_peer.h"
+#include "net/tools/quic/test_tools/quic_test_client.h"
+#include "net/tools/quic/test_tools/quic_test_server.h"
+#include "net/tools/quic/test_tools/server_thread.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::IntToString;
+using base::StringPiece;
+using base::WaitableEvent;
+using net::EpollServer;
+using net::test::ConstructEncryptedPacket;
+using net::test::CryptoTestUtils;
+using net::test::GenerateBody;
+using net::test::Loopback4;
+using net::test::MockQuicConnectionDebugVisitor;
+using net::test::QuicConnectionPeer;
+using net::test::QuicFlowControllerPeer;
+using net::test::QuicSentPacketManagerPeer;
+using net::test::QuicSessionPeer;
+using net::test::QuicSpdySessionPeer;
+using net::test::ReliableQuicStreamPeer;
+using net::test::ValueRestore;
+using net::test::kClientDataStreamId1;
+using net::test::kInitialSessionFlowControlWindowForTest;
+using net::test::kInitialStreamFlowControlWindowForTest;
+using net::test::PacketDroppingTestWriter;
+using net::test::QuicDispatcherPeer;
+using net::test::QuicServerPeer;
+using std::ostream;
+using std::string;
+using std::vector;
+
+namespace net {
+namespace test {
+namespace {
+
+const char kFooResponseBody[] = "Artichoke hearts make me happy.";
+const char kBarResponseBody[] = "Palm hearts are pretty delicious, also.";
+const float kSessionToStreamRatio = 1.5;
+
+// Run all tests with the cross products of all versions.
+struct TestParams {
+  TestParams(const QuicVersionVector& client_supported_versions,
+             const QuicVersionVector& server_supported_versions,
+             QuicVersion negotiated_version,
+             bool client_supports_stateless_rejects,
+             bool server_uses_stateless_rejects_if_peer_supported,
+             QuicTag congestion_control_tag,
+             bool auto_tune_flow_control_window,
+             bool disable_hpack_dynamic_table,
+             bool force_hol_blocking)
+      : client_supported_versions(client_supported_versions),
+        server_supported_versions(server_supported_versions),
+        negotiated_version(negotiated_version),
+        client_supports_stateless_rejects(client_supports_stateless_rejects),
+        server_uses_stateless_rejects_if_peer_supported(
+            server_uses_stateless_rejects_if_peer_supported),
+        congestion_control_tag(congestion_control_tag),
+        auto_tune_flow_control_window(auto_tune_flow_control_window),
+        disable_hpack_dynamic_table(disable_hpack_dynamic_table),
+        force_hol_blocking(force_hol_blocking) {}
+
+  friend ostream& operator<<(ostream& os, const TestParams& p) {
+    os << "{ server_supported_versions: "
+       << QuicVersionVectorToString(p.server_supported_versions);
+    os << " client_supported_versions: "
+       << QuicVersionVectorToString(p.client_supported_versions);
+    os << " negotiated_version: " << QuicVersionToString(p.negotiated_version);
+    os << " client_supports_stateless_rejects: "
+       << p.client_supports_stateless_rejects;
+    os << " server_uses_stateless_rejects_if_peer_supported: "
+       << p.server_uses_stateless_rejects_if_peer_supported;
+    os << " congestion_control_tag: "
+       << QuicUtils::TagToString(p.congestion_control_tag);
+    os << " auto_tune_flow_control_window: " << p.auto_tune_flow_control_window;
+    os << " disable_hpack_dynamic_table: " << p.disable_hpack_dynamic_table;
+    os << " force_hol_blocking: " << p.force_hol_blocking << " }";
+    return os;
+  }
+
+  QuicVersionVector client_supported_versions;
+  QuicVersionVector server_supported_versions;
+  QuicVersion negotiated_version;
+  bool client_supports_stateless_rejects;
+  bool server_uses_stateless_rejects_if_peer_supported;
+  QuicTag congestion_control_tag;
+  bool auto_tune_flow_control_window;
+  bool disable_hpack_dynamic_table;
+  bool force_hol_blocking;
+};
+
+// Constructs various test permutations.
+vector<TestParams> GetTestParams() {
+  // Divide the versions into buckets in which the intra-frame format
+  // is compatible. When clients encounter QUIC version negotiation
+  // they simply retransmit all packets using the new version's
+  // QUIC framing. However, they are unable to change the intra-frame
+  // layout (for example to change SPDY/4 headers to SPDY/3). So
+  // these tests need to ensure that clients are never attempting
+  // to do 0-RTT across incompatible versions. Chromium only supports
+  // a single version at a time anyway. :)
+  QuicVersionVector all_supported_versions = QuicSupportedVersions();
+  QuicVersionVector version_buckets[4];
+
+  for (const QuicVersion version : all_supported_versions) {
+    if (version <= QUIC_VERSION_25) {
+      // SPDY/4
+      version_buckets[0].push_back(version);
+    } else if (version <= QUIC_VERSION_32) {
+      // QUIC_VERSION_26 changes the kdf in a way that is incompatible with
+      // version negotiation across the version 26 boundary.
+      version_buckets[1].push_back(version);
+    } else if (version <= QUIC_VERSION_33) {
+      // QUIC_VERSION_33 changes the kdf in a way that is incompatible with
+      // version negotiation across the version 33 boundary, by using the
+      // diversification nonce.
+      version_buckets[2].push_back(version);
+    } else {
+      // QUIC_VERSION_34 deprecates entropy and uses new ack and stop waiting
+      // wire formats, so it is incompatible with version negotiation across the
+      // version 34 boundary.
+      version_buckets[3].push_back(version);
+    }
+  }
+
+  // This must be kept in sync with the number of nested for-loops below as it
+  // is used to prune the number of tests that are run.
+  const int kMaxEnabledOptions = 5;
+  int max_enabled_options = 0;
+  vector<TestParams> params;
+  for (bool server_uses_stateless_rejects_if_peer_supported : {true, false}) {
+    for (bool client_supports_stateless_rejects : {true, false}) {
+      for (const QuicTag congestion_control_tag : {kRENO, kQBIC}) {
+        for (bool auto_tune_flow_control_window : {true, false}) {
+          for (bool disable_hpack_dynamic_table : {false}) {
+            for (bool force_hol_blocking : {true, false}) {
+              int enabled_options = 0;
+              if (force_hol_blocking) {
+                ++enabled_options;
+              }
+              if (congestion_control_tag != kQBIC) {
+                ++enabled_options;
+              }
+              if (auto_tune_flow_control_window) {
+                ++enabled_options;
+              }
+              if (disable_hpack_dynamic_table) {
+                ++enabled_options;
+              }
+              if (client_supports_stateless_rejects) {
+                ++enabled_options;
+              }
+              if (server_uses_stateless_rejects_if_peer_supported) {
+                ++enabled_options;
+              }
+              CHECK_GE(kMaxEnabledOptions, enabled_options);
+              if (enabled_options > max_enabled_options) {
+                max_enabled_options = enabled_options;
+              }
+
+              // Run tests with no options, a single option, or all the options
+              // enabled to avoid a combinatorial explosion.
+              if (enabled_options > 1 && enabled_options < kMaxEnabledOptions) {
+                continue;
+              }
+
+              for (const QuicVersionVector& client_versions : version_buckets) {
+                if (client_versions.front() < QUIC_VERSION_30 &&
+                    FLAGS_quic_disable_pre_30) {
+                  continue;
+                }
+                CHECK(!client_versions.empty());
+                // Add an entry for server and client supporting all versions.
+                params.push_back(TestParams(
+                    client_versions, all_supported_versions,
+                    client_versions.front(), client_supports_stateless_rejects,
+                    server_uses_stateless_rejects_if_peer_supported,
+                    congestion_control_tag, auto_tune_flow_control_window,
+                    disable_hpack_dynamic_table, force_hol_blocking));
+
+                // Run version negotiation tests tests with no options, or all
+                // the options enabled to avoid a combinatorial explosion.
+                if (enabled_options > 0 &&
+                    enabled_options < kMaxEnabledOptions) {
+                  continue;
+                }
+
+                // Test client supporting all versions and server
+                // supporting 1 version. Simulate an old server and
+                // exercise version downgrade in the client. Protocol
+                // negotiation should occur. Skip the i = 0 case
+                // because it is essentially the same as the default
+                // case.
+                for (size_t i = 1; i < client_versions.size(); ++i) {
+                  if (client_versions[i] < QUIC_VERSION_30 &&
+                      FLAGS_quic_disable_pre_30) {
+                    continue;
+                  }
+                  QuicVersionVector server_supported_versions;
+                  server_supported_versions.push_back(client_versions[i]);
+                  params.push_back(TestParams(
+                      client_versions, server_supported_versions,
+                      server_supported_versions.front(),
+                      client_supports_stateless_rejects,
+                      server_uses_stateless_rejects_if_peer_supported,
+                      congestion_control_tag, auto_tune_flow_control_window,
+                      disable_hpack_dynamic_table, force_hol_blocking));
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    CHECK_EQ(kMaxEnabledOptions, max_enabled_options);
+  }
+  return params;
+}
+
+class ServerDelegate : public PacketDroppingTestWriter::Delegate {
+ public:
+  explicit ServerDelegate(QuicDispatcher* dispatcher)
+      : dispatcher_(dispatcher) {}
+  ~ServerDelegate() override {}
+  void OnCanWrite() override { dispatcher_->OnCanWrite(); }
+
+ private:
+  QuicDispatcher* dispatcher_;
+};
+
+class ClientDelegate : public PacketDroppingTestWriter::Delegate {
+ public:
+  explicit ClientDelegate(QuicClient* client) : client_(client) {}
+  ~ClientDelegate() override {}
+  void OnCanWrite() override {
+    EpollEvent event(EPOLLOUT, false);
+    client_->OnEvent(client_->GetLatestFD(), &event);
+  }
+
+ private:
+  QuicClient* client_;
+};
+
+class EndToEndTest : public ::testing::TestWithParam<TestParams> {
+ protected:
+  EndToEndTest()
+      : initialized_(false),
+        server_address_(IPEndPoint(Loopback4(), 0)),
+        server_hostname_("example.com"),
+        server_started_(false),
+        strike_register_no_startup_period_(false),
+        chlo_multiplier_(0),
+        stream_factory_(nullptr),
+        support_server_push_(false) {
+    client_supported_versions_ = GetParam().client_supported_versions;
+    server_supported_versions_ = GetParam().server_supported_versions;
+    negotiated_version_ = GetParam().negotiated_version;
+
+    VLOG(1) << "Using Configuration: " << GetParam();
+
+    // Use different flow control windows for client/server.
+    client_config_.SetInitialStreamFlowControlWindowToSend(
+        2 * kInitialStreamFlowControlWindowForTest);
+    client_config_.SetInitialSessionFlowControlWindowToSend(
+        2 * kInitialSessionFlowControlWindowForTest);
+    server_config_.SetInitialStreamFlowControlWindowToSend(
+        3 * kInitialStreamFlowControlWindowForTest);
+    server_config_.SetInitialSessionFlowControlWindowToSend(
+        3 * kInitialSessionFlowControlWindowForTest);
+
+    // The default idle timeouts can be too strict when running on a busy
+    // machine.
+    const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(30);
+    client_config_.set_max_time_before_crypto_handshake(timeout);
+    client_config_.set_max_idle_time_before_crypto_handshake(timeout);
+    server_config_.set_max_time_before_crypto_handshake(timeout);
+    server_config_.set_max_idle_time_before_crypto_handshake(timeout);
+
+    QuicInMemoryCachePeer::ResetForTests();
+    AddToCache("/foo", 200, kFooResponseBody);
+    AddToCache("/bar", 200, kBarResponseBody);
+  }
+
+  ~EndToEndTest() override {
+    // TODO(rtenneti): port RecycleUnusedPort if needed.
+    // RecycleUnusedPort(server_address_.port());
+    QuicInMemoryCachePeer::ResetForTests();
+  }
+
+  QuicTestClient* CreateQuicClient(QuicPacketWriterWrapper* writer) {
+    QuicTestClient* client =
+        new QuicTestClient(server_address_, server_hostname_, client_config_,
+                           client_supported_versions_);
+    client->UseWriter(writer);
+    client->Connect();
+    return client;
+  }
+
+  void set_smaller_flow_control_receive_window() {
+    const uint32_t kClientIFCW = 64 * 1024;
+    const uint32_t kServerIFCW = 1024 * 1024;
+    set_client_initial_stream_flow_control_receive_window(kClientIFCW);
+    set_client_initial_session_flow_control_receive_window(
+        kSessionToStreamRatio * kClientIFCW);
+    set_server_initial_stream_flow_control_receive_window(kServerIFCW);
+    set_server_initial_session_flow_control_receive_window(
+        kSessionToStreamRatio * kServerIFCW);
+  }
+
+  void set_client_initial_stream_flow_control_receive_window(uint32_t window) {
+    CHECK(client_.get() == nullptr);
+    DVLOG(1) << "Setting client initial stream flow control window: " << window;
+    client_config_.SetInitialStreamFlowControlWindowToSend(window);
+  }
+
+  void set_client_initial_session_flow_control_receive_window(uint32_t window) {
+    CHECK(client_.get() == nullptr);
+    DVLOG(1) << "Setting client initial session flow control window: "
+             << window;
+    client_config_.SetInitialSessionFlowControlWindowToSend(window);
+  }
+
+  void set_server_initial_stream_flow_control_receive_window(uint32_t window) {
+    CHECK(server_thread_.get() == nullptr);
+    DVLOG(1) << "Setting server initial stream flow control window: " << window;
+    server_config_.SetInitialStreamFlowControlWindowToSend(window);
+  }
+
+  void set_server_initial_session_flow_control_receive_window(uint32_t window) {
+    CHECK(server_thread_.get() == nullptr);
+    DVLOG(1) << "Setting server initial session flow control window: "
+             << window;
+    server_config_.SetInitialSessionFlowControlWindowToSend(window);
+  }
+
+  const QuicSentPacketManagerInterface*
+  GetSentPacketManagerFromFirstServerSession() const {
+    QuicDispatcher* dispatcher =
+        QuicServerPeer::GetDispatcher(server_thread_->server());
+    QuicSession* session = dispatcher->session_map().begin()->second;
+    return &session->connection()->sent_packet_manager();
+  }
+
+  bool Initialize() {
+    QuicTagVector copt;
+    server_config_.SetConnectionOptionsToSend(copt);
+
+    // TODO(nimia): Consider setting the congestion control algorithm for the
+    // client as well according to the test parameter.
+    copt.push_back(GetParam().congestion_control_tag);
+    if (support_server_push_) {
+      copt.push_back(kSPSH);
+    }
+    if (GetParam().client_supports_stateless_rejects) {
+      copt.push_back(kSREJ);
+    }
+    if (GetParam().auto_tune_flow_control_window) {
+      copt.push_back(kAFCW);
+      copt.push_back(kIFW5);
+    }
+    if (GetParam().disable_hpack_dynamic_table) {
+      copt.push_back(kDHDT);
+    }
+    if (GetParam().force_hol_blocking) {
+      client_config_.SetForceHolBlocking();
+      QuicConfigPeer::SetReceivedForceHolBlocking(&server_config_);
+    }
+    client_config_.SetConnectionOptionsToSend(copt);
+
+    // Start the server first, because CreateQuicClient() attempts
+    // to connect to the server.
+    StartServer();
+
+    client_.reset(CreateQuicClient(client_writer_));
+    static EpollEvent event(EPOLLOUT, false);
+    client_writer_->Initialize(
+        reinterpret_cast<QuicEpollConnectionHelper*>(
+            QuicConnectionPeer::GetHelper(
+                client_->client()->session()->connection())),
+        QuicConnectionPeer::GetAlarmFactory(
+            client_->client()->session()->connection()),
+        new ClientDelegate(client_->client()));
+
+    initialized_ = true;
+    return client_->client()->connected();
+  }
+
+  void SetUp() override {
+    // The ownership of these gets transferred to the QuicPacketWriterWrapper
+    // when Initialize() is executed.
+    client_writer_ = new PacketDroppingTestWriter();
+    server_writer_ = new PacketDroppingTestWriter();
+  }
+
+  void TearDown() override {
+    ASSERT_TRUE(initialized_) << "You must call Initialize() in every test "
+                              << "case. Otherwise, your test will leak memory.";
+    StopServer();
+  }
+
+  void StartServer() {
+    server_thread_.reset(new ServerThread(
+        new QuicTestServer(CryptoTestUtils::ProofSourceForTesting(),
+                           server_config_, server_supported_versions_),
+        server_address_, strike_register_no_startup_period_));
+    if (chlo_multiplier_ != 0) {
+      server_thread_->server()->SetChloMultiplier(chlo_multiplier_);
+    }
+    server_thread_->Initialize();
+    server_address_ =
+        IPEndPoint(server_address_.address(), server_thread_->GetPort());
+    QuicDispatcher* dispatcher =
+        QuicServerPeer::GetDispatcher(server_thread_->server());
+    QuicDispatcherPeer::UseWriter(dispatcher, server_writer_);
+
+    FLAGS_enable_quic_stateless_reject_support =
+        GetParam().server_uses_stateless_rejects_if_peer_supported;
+
+    server_writer_->Initialize(QuicDispatcherPeer::GetHelper(dispatcher),
+                               QuicDispatcherPeer::GetAlarmFactory(dispatcher),
+                               new ServerDelegate(dispatcher));
+    if (stream_factory_ != nullptr) {
+      static_cast<QuicTestServer*>(server_thread_->server())
+          ->SetSpdyStreamFactory(stream_factory_);
+    }
+
+    server_thread_->Start();
+    server_started_ = true;
+  }
+
+  void StopServer() {
+    if (!server_started_)
+      return;
+    if (server_thread_.get()) {
+      server_thread_->Quit();
+      server_thread_->Join();
+    }
+  }
+
+  void AddToCache(StringPiece path, int response_code, StringPiece body) {
+    QuicInMemoryCache::GetInstance()->AddSimpleResponse("www.google.com", path,
+                                                        response_code, body);
+  }
+
+  void SetPacketLossPercentage(int32_t loss) {
+    // TODO(rtenneti): enable when we can do random packet loss tests in
+    // chrome's tree.
+    if (loss != 0 && loss != 100)
+      return;
+    client_writer_->set_fake_packet_loss_percentage(loss);
+    server_writer_->set_fake_packet_loss_percentage(loss);
+  }
+
+  void SetPacketSendDelay(QuicTime::Delta delay) {
+    // TODO(rtenneti): enable when we can do random packet send delay tests in
+    // chrome's tree.
+    // client_writer_->set_fake_packet_delay(delay);
+    // server_writer_->set_fake_packet_delay(delay);
+  }
+
+  void SetReorderPercentage(int32_t reorder) {
+    // TODO(rtenneti): enable when we can do random packet reorder tests in
+    // chrome's tree.
+    // client_writer_->set_fake_reorder_percentage(reorder);
+    // server_writer_->set_fake_reorder_percentage(reorder);
+  }
+
+  // Verifies that the client and server connections were both free of packets
+  // being discarded, based on connection stats.
+  // Calls server_thread_ Pause() and Resume(), which may only be called once
+  // per test.
+  void VerifyCleanConnection(bool had_packet_loss) {
+    QuicConnectionStats client_stats =
+        client_->client()->session()->connection()->GetStats();
+    if (FLAGS_quic_reply_to_rej && !had_packet_loss) {
+      EXPECT_EQ(0u, client_stats.packets_lost);
+    }
+    EXPECT_EQ(0u, client_stats.packets_discarded);
+    // When doing 0-RTT with stateless rejects, the encrypted requests cause
+    // a retranmission of the SREJ packets which are dropped by the client.
+    if (!BothSidesSupportStatelessRejects()) {
+      EXPECT_EQ(0u, client_stats.packets_dropped);
+    }
+    EXPECT_EQ(client_stats.packets_received, client_stats.packets_processed);
+
+    const int num_expected_stateless_rejects =
+        (BothSidesSupportStatelessRejects() &&
+         client_->client()->session()->GetNumSentClientHellos() > 0)
+            ? 1
+            : 0;
+    EXPECT_EQ(num_expected_stateless_rejects,
+              client_->client()->num_stateless_rejects_received());
+
+    server_thread_->Pause();
+    QuicDispatcher* dispatcher =
+        QuicServerPeer::GetDispatcher(server_thread_->server());
+    ASSERT_EQ(1u, dispatcher->session_map().size());
+    QuicSession* session = dispatcher->session_map().begin()->second;
+    QuicConnectionStats server_stats = session->connection()->GetStats();
+    if (FLAGS_quic_reply_to_rej && !had_packet_loss) {
+      EXPECT_EQ(0u, server_stats.packets_lost);
+    }
+    EXPECT_EQ(0u, server_stats.packets_discarded);
+    // TODO(ianswett): Restore the check for packets_dropped equals 0.
+    // The expect for packets received is equal to packets processed fails
+    // due to version negotiation packets.
+    server_thread_->Resume();
+  }
+
+  bool BothSidesSupportStatelessRejects() {
+    return (GetParam().server_uses_stateless_rejects_if_peer_supported &&
+            GetParam().client_supports_stateless_rejects);
+  }
+
+  void ExpectFlowControlsSynced(QuicFlowController* client,
+                                QuicFlowController* server) {
+    EXPECT_EQ(QuicFlowControllerPeer::SendWindowSize(client),
+              QuicFlowControllerPeer::ReceiveWindowSize(server));
+    EXPECT_EQ(QuicFlowControllerPeer::ReceiveWindowSize(client),
+              QuicFlowControllerPeer::SendWindowSize(server));
+  }
+
+  // Must be called before Initialize to have effect.
+  void SetSpdyStreamFactory(QuicTestServer::StreamFactory* factory) {
+    stream_factory_ = factory;
+  }
+
+  bool initialized_;
+  IPEndPoint server_address_;
+  string server_hostname_;
+  std::unique_ptr<ServerThread> server_thread_;
+  std::unique_ptr<QuicTestClient> client_;
+  PacketDroppingTestWriter* client_writer_;
+  PacketDroppingTestWriter* server_writer_;
+  bool server_started_;
+  QuicConfig client_config_;
+  QuicConfig server_config_;
+  QuicVersionVector client_supported_versions_;
+  QuicVersionVector server_supported_versions_;
+  QuicVersion negotiated_version_;
+  bool strike_register_no_startup_period_;
+  size_t chlo_multiplier_;
+  QuicTestServer::StreamFactory* stream_factory_;
+  bool support_server_push_;
+  bool force_hol_blocking_;
+};
+
+// Run all end to end tests with all supported versions.
+INSTANTIATE_TEST_CASE_P(EndToEndTests,
+                        EndToEndTest,
+                        ::testing::ValuesIn(GetTestParams()));
+
+TEST_P(EndToEndTest, SimpleRequestResponse) {
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+}
+
+TEST_P(EndToEndTest, SimpleRequestResponseWithLargeReject) {
+  chlo_multiplier_ = 1;
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  EXPECT_EQ(3, client_->client()->GetNumSentClientHellos());
+}
+
+// TODO(rch): figure out how to detect missing v6 support (like on the linux
+// try bots) and selectively disable this test.
+TEST_P(EndToEndTest, DISABLED_SimpleRequestResponsev6) {
+  server_address_ =
+      IPEndPoint(IPAddress::IPv6Localhost(), server_address_.port());
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, SeparateFinPacket) {
+  ASSERT_TRUE(Initialize());
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.set_has_complete_message(false);
+
+  // Send a request in two parts: the request and then an empty packet with FIN.
+  client_->SendMessage(request);
+  client_->SendData("", true);
+  client_->WaitForResponse();
+  EXPECT_EQ(kFooResponseBody, client_->response_body());
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Now do the same thing but with a content length.
+  request.AddBody("foo", true);
+  client_->SendMessage(request);
+  client_->SendData("", true);
+  client_->WaitForResponse();
+  EXPECT_EQ(kFooResponseBody, client_->response_body());
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, MultipleRequestResponse) {
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, MultipleClients) {
+  ASSERT_TRUE(Initialize());
+  std::unique_ptr<QuicTestClient> client2(CreateQuicClient(nullptr));
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddHeader("content-length", "3");
+  request.set_has_complete_message(false);
+
+  client_->SendMessage(request);
+  client2->SendMessage(request);
+
+  client_->SendData("bar", true);
+  client_->WaitForResponse();
+  EXPECT_EQ(kFooResponseBody, client_->response_body());
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  client2->SendData("eep", true);
+  client2->WaitForResponse();
+  EXPECT_EQ(kFooResponseBody, client2->response_body());
+  EXPECT_EQ(200u, client2->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, RequestOverMultiplePackets) {
+  // Send a large enough request to guarantee fragmentation.
+  string huge_request = "/some/path?query=" + string(kMaxPacketSize, '.');
+  AddToCache(huge_request, 200, kBarResponseBody);
+
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest(huge_request));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, MultiplePacketsRandomOrder) {
+  // Send a large enough request to guarantee fragmentation.
+  string huge_request = "/some/path?query=" + string(kMaxPacketSize, '.');
+  AddToCache(huge_request, 200, kBarResponseBody);
+
+  ASSERT_TRUE(Initialize());
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(50);
+
+  EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest(huge_request));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, PostMissingBytes) {
+  ASSERT_TRUE(Initialize());
+
+  // Add a content length header with no body.
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddHeader("content-length", "3");
+  request.set_skip_message_validation(true);
+
+  // This should be detected as stream fin without complete request,
+  // triggering an error response.
+  client_->SendCustomSynchronousRequest(request);
+  EXPECT_EQ(QuicSimpleServerStream::kErrorResponseBody,
+            client_->response_body());
+  EXPECT_EQ(500u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, LargePostNoPacketLoss) {
+  ASSERT_TRUE(Initialize());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // 1 MB body.
+  string body;
+  GenerateBody(&body, 1024 * 1024);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  // TODO(ianswett): There should not be packet loss in this test, but on some
+  // platforms the receive buffer overflows.
+  VerifyCleanConnection(true);
+}
+
+TEST_P(EndToEndTest, LargePostNoPacketLoss1sRTT) {
+  ASSERT_TRUE(Initialize());
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(1000));
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // 100 KB body.
+  string body;
+  GenerateBody(&body, 100 * 1024);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  VerifyCleanConnection(false);
+}
+
+TEST_P(EndToEndTest, LargePostWithPacketLoss) {
+  if (!BothSidesSupportStatelessRejects()) {
+    // Connect with lower fake packet loss than we'd like to test.
+    // Until b/10126687 is fixed, losing handshake packets is pretty
+    // brutal.
+    // TODO(jokulik): Until we support redundant SREJ packets, don't
+    // drop handshake packets for stateless rejects.
+    SetPacketLossPercentage(5);
+  }
+  ASSERT_TRUE(Initialize());
+
+  // Wait for the server SHLO before upping the packet loss.
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(30);
+
+  // 10 KB body.
+  string body;
+  GenerateBody(&body, 1024 * 10);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  VerifyCleanConnection(true);
+}
+
+TEST_P(EndToEndTest, LargePostWithPacketLossAndBlockedSocket) {
+  if (!BothSidesSupportStatelessRejects()) {
+    // Connect with lower fake packet loss than we'd like to test.  Until
+    // b/10126687 is fixed, losing handshake packets is pretty brutal.
+    // TODO(jokulik): Until we support redundant SREJ packets, don't
+    // drop handshake packets for stateless rejects.
+    SetPacketLossPercentage(5);
+  }
+  ASSERT_TRUE(Initialize());
+
+  // Wait for the server SHLO before upping the packet loss.
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(10);
+  client_writer_->set_fake_blocked_socket_percentage(10);
+
+  // 10 KB body.
+  string body;
+  GenerateBody(&body, 1024 * 10);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+}
+
+TEST_P(EndToEndTest, LargePostNoPacketLossWithDelayAndReordering) {
+  ASSERT_TRUE(Initialize());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  // Both of these must be called when the writer is not actively used.
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(30);
+
+  // 1 MB body.
+  string body;
+  GenerateBody(&body, 1024 * 1024);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+}
+
+TEST_P(EndToEndTest, LargePostZeroRTTFailure) {
+  // Have the server accept 0-RTT without waiting a startup period.
+  strike_register_no_startup_period_ = true;
+
+  // Send a request and then disconnect. This prepares the client to attempt
+  // a 0-RTT handshake for the next request.
+  ASSERT_TRUE(Initialize());
+
+  string body;
+  GenerateBody(&body, 20480);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  // In the non-stateless case, the same session is used for both
+  // hellos, so the number of hellos sent on that session is 2.  In
+  // the stateless case, the first client session will be completely
+  // torn down after the reject.  The number of hellos on the latest
+  // session is 1.
+  const int expected_num_hellos_latest_session =
+      BothSidesSupportStatelessRejects() ? 1 : 2;
+  EXPECT_EQ(expected_num_hellos_latest_session,
+            client_->client()->session()->GetNumSentClientHellos());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+
+  client_->Disconnect();
+
+  // The 0-RTT handshake should succeed.
+  client_->Connect();
+  client_->WaitForResponseForMs(-1);
+  ASSERT_TRUE(client_->client()->connected());
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+
+  if (negotiated_version_ <= QUIC_VERSION_32) {
+    EXPECT_EQ(expected_num_hellos_latest_session,
+              client_->client()->session()->GetNumSentClientHellos());
+    EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+  } else {
+    EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
+    EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
+  }
+
+  client_->Disconnect();
+
+  // Restart the server so that the 0-RTT handshake will take 1 RTT.
+  StopServer();
+  server_writer_ = new PacketDroppingTestWriter();
+  StartServer();
+
+  client_->Connect();
+  ASSERT_TRUE(client_->client()->connected());
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  // In the non-stateless case, the same session is used for both
+  // hellos, so the number of hellos sent on that session is 2.  In
+  // the stateless case, the first client session will be completely
+  // torn down after the reject.  The number of hellos sent on the
+  // latest session is 1.
+  EXPECT_EQ(expected_num_hellos_latest_session,
+            client_->client()->session()->GetNumSentClientHellos());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+
+  VerifyCleanConnection(false);
+}
+
+TEST_P(EndToEndTest, SynchronousRequestZeroRTTFailure) {
+  // Have the server accept 0-RTT without waiting a startup period.
+  strike_register_no_startup_period_ = true;
+
+  // Send a request and then disconnect. This prepares the client to attempt
+  // a 0-RTT handshake for the next request.
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  // In the non-stateless case, the same session is used for both
+  // hellos, so the number of hellos sent on that session is 2.  In
+  // the stateless case, the first client session will be completely
+  // torn down after the reject.  The number of hellos on that second
+  // latest session is 1.
+  const int expected_num_hellos_latest_session =
+      BothSidesSupportStatelessRejects() ? 1 : 2;
+  EXPECT_EQ(expected_num_hellos_latest_session,
+            client_->client()->session()->GetNumSentClientHellos());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+
+  client_->Disconnect();
+
+  // The 0-RTT handshake should succeed.
+  client_->Connect();
+  client_->WaitForInitialResponse();
+  ASSERT_TRUE(client_->client()->connected());
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+
+  if (negotiated_version_ <= QUIC_VERSION_32) {
+    EXPECT_EQ(expected_num_hellos_latest_session,
+              client_->client()->session()->GetNumSentClientHellos());
+    EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+  } else {
+    EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
+    EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
+  }
+
+  client_->Disconnect();
+
+  // Restart the server so that the 0-RTT handshake will take 1 RTT.
+  StopServer();
+  server_writer_ = new PacketDroppingTestWriter();
+  StartServer();
+
+  client_->Connect();
+  ASSERT_TRUE(client_->client()->connected());
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  // In the non-stateless case, the same session is used for both
+  // hellos, so the number of hellos sent on that session is 2.  In
+  // the stateless case, the first client session will be completely
+  // torn down after the reject.  The number of hellos sent on the
+  // latest session is 1.
+  EXPECT_EQ(expected_num_hellos_latest_session,
+            client_->client()->session()->GetNumSentClientHellos());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+
+  VerifyCleanConnection(false);
+}
+
+TEST_P(EndToEndTest, LargePostSynchronousRequest) {
+  // Have the server accept 0-RTT without waiting a startup period.
+  strike_register_no_startup_period_ = true;
+
+  // Send a request and then disconnect. This prepares the client to attempt
+  // a 0-RTT handshake for the next request.
+  ASSERT_TRUE(Initialize());
+
+  string body;
+  GenerateBody(&body, 20480);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  // In the non-stateless case, the same session is used for both
+  // hellos, so the number of hellos sent on that session is 2.  In
+  // the stateless case, the first client session will be completely
+  // torn down after the reject.  The number of hellos on the latest
+  // session is 1.
+  const int expected_num_hellos_latest_session =
+      BothSidesSupportStatelessRejects() ? 1 : 2;
+  EXPECT_EQ(expected_num_hellos_latest_session,
+            client_->client()->session()->GetNumSentClientHellos());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+
+  client_->Disconnect();
+
+  // The 0-RTT handshake should succeed.
+  client_->Connect();
+  client_->WaitForInitialResponse();
+  ASSERT_TRUE(client_->client()->connected());
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+
+  if (negotiated_version_ <= QUIC_VERSION_32) {
+    EXPECT_EQ(expected_num_hellos_latest_session,
+              client_->client()->session()->GetNumSentClientHellos());
+    EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+  } else {
+    EXPECT_EQ(1, client_->client()->session()->GetNumSentClientHellos());
+    EXPECT_EQ(1, client_->client()->GetNumSentClientHellos());
+  }
+
+  client_->Disconnect();
+
+  // Restart the server so that the 0-RTT handshake will take 1 RTT.
+  StopServer();
+  server_writer_ = new PacketDroppingTestWriter();
+  StartServer();
+
+  client_->Connect();
+  ASSERT_TRUE(client_->client()->connected());
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  // In the non-stateless case, the same session is used for both
+  // hellos, so the number of hellos sent on that session is 2.  In
+  // the stateless case, the first client session will be completely
+  // torn down after the reject.  The number of hellos sent on the
+  // latest session is 1.
+  EXPECT_EQ(expected_num_hellos_latest_session,
+            client_->client()->session()->GetNumSentClientHellos());
+  EXPECT_EQ(2, client_->client()->GetNumSentClientHellos());
+
+  VerifyCleanConnection(false);
+}
+
+TEST_P(EndToEndTest, StatelessRejectWithPacketLoss) {
+  // In this test, we intentionally drop the first packet from the
+  // server, which corresponds with the initial REJ/SREJ response from
+  // the server.
+  server_writer_->set_fake_drop_first_n_packets(1);
+  ASSERT_TRUE(Initialize());
+}
+
+TEST_P(EndToEndTest, SetInitialReceivedConnectionOptions) {
+  QuicTagVector initial_received_options;
+  initial_received_options.push_back(kTBBR);
+  initial_received_options.push_back(kIW10);
+  initial_received_options.push_back(kPRST);
+  EXPECT_TRUE(server_config_.SetInitialReceivedConnectionOptions(
+      initial_received_options));
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  EXPECT_FALSE(server_config_.SetInitialReceivedConnectionOptions(
+      initial_received_options));
+
+  // Verify that server's configuration is correct.
+  server_thread_->Pause();
+  EXPECT_TRUE(server_config_.HasReceivedConnectionOptions());
+  EXPECT_TRUE(
+      ContainsQuicTag(server_config_.ReceivedConnectionOptions(), kTBBR));
+  EXPECT_TRUE(
+      ContainsQuicTag(server_config_.ReceivedConnectionOptions(), kIW10));
+  EXPECT_TRUE(
+      ContainsQuicTag(server_config_.ReceivedConnectionOptions(), kPRST));
+}
+
+TEST_P(EndToEndTest, LargePostSmallBandwidthLargeBuffer) {
+  ASSERT_TRUE(Initialize());
+  SetPacketSendDelay(QuicTime::Delta::FromMicroseconds(1));
+  // 256KB per second with a 256KB buffer from server to client.  Wireless
+  // clients commonly have larger buffers, but our max CWND is 200.
+  server_writer_->set_max_bandwidth_and_buffer_size(
+      QuicBandwidth::FromBytesPerSecond(256 * 1024), 256 * 1024);
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // 1 MB body.
+  string body;
+  GenerateBody(&body, 1024 * 1024);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+
+  EXPECT_EQ(kFooResponseBody, client_->SendCustomSynchronousRequest(request));
+  // This connection may drop packets, because the buffer is smaller than the
+  // max CWND.
+  VerifyCleanConnection(true);
+}
+
+TEST_P(EndToEndTest, DoNotSetResumeWriteAlarmIfConnectionFlowControlBlocked) {
+  // Regression test for b/14677858.
+  // Test that the resume write alarm is not set in QuicConnection::OnCanWrite
+  // if currently connection level flow control blocked. If set, this results in
+  // an infinite loop in the EpollServer, as the alarm fires and is immediately
+  // rescheduled.
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // Ensure both stream and connection level are flow control blocked by setting
+  // the send window offset to 0.
+  const uint64_t flow_control_window =
+      server_config_.GetInitialStreamFlowControlWindowToSend();
+  QuicSpdyClientStream* stream = client_->GetOrCreateStream();
+  QuicSession* session = client_->client()->session();
+  QuicFlowControllerPeer::SetSendWindowOffset(stream->flow_controller(), 0);
+  QuicFlowControllerPeer::SetSendWindowOffset(session->flow_controller(), 0);
+  EXPECT_TRUE(stream->flow_controller()->IsBlocked());
+  EXPECT_TRUE(session->flow_controller()->IsBlocked());
+
+  // Make sure that the stream has data pending so that it will be marked as
+  // write blocked when it receives a stream level WINDOW_UPDATE.
+  stream->WriteOrBufferBody("hello", false, nullptr);
+
+  // The stream now attempts to write, fails because it is still connection
+  // level flow control blocked, and is added to the write blocked list.
+  QuicWindowUpdateFrame window_update(stream->id(), 2 * flow_control_window);
+  stream->OnWindowUpdateFrame(window_update);
+
+  // Prior to fixing b/14677858 this call would result in an infinite loop in
+  // Chromium. As a proxy for detecting this, we now check whether the
+  // resume_writes_alarm is set after OnCanWrite. It should not be, as the
+  // connection is still flow control blocked.
+  session->connection()->OnCanWrite();
+
+  QuicAlarm* resume_writes_alarm =
+      QuicConnectionPeer::GetResumeWritesAlarm(session->connection());
+  EXPECT_FALSE(resume_writes_alarm->IsSet());
+}
+
+TEST_P(EndToEndTest, InvalidStream) {
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  string body;
+  GenerateBody(&body, kMaxPacketSize);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(body, true);
+  // Force the client to write with a stream ID belonging to a nonexistent
+  // server-side stream.
+  QuicSessionPeer::SetNextOutgoingStreamId(client_->client()->session(), 2);
+
+  client_->SendCustomSynchronousRequest(request);
+  // EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
+  EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
+  EXPECT_EQ(QUIC_INVALID_STREAM_ID, client_->connection_error());
+}
+
+TEST_P(EndToEndTest, EarlyResponseWithQuicStreamNoError) {
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  string large_body;
+  GenerateBody(&large_body, 1024 * 1024);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddBody(large_body, false);
+
+  // Insert an invalid content_length field in request to trigger an early
+  // response from server.
+  request.AddHeader("content-length", "-3");
+
+  request.set_skip_message_validation(true);
+  client_->SendCustomSynchronousRequest(request);
+  EXPECT_EQ("bad", client_->response_body());
+  EXPECT_EQ(500u, client_->response_headers()->parsed_response_code());
+  EXPECT_EQ(QUIC_STREAM_NO_ERROR, client_->stream_error());
+  EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error());
+}
+
+// TODO(rch): this test seems to cause net_unittests timeouts :|
+TEST_P(EndToEndTest, DISABLED_MultipleTermination) {
+  ASSERT_TRUE(Initialize());
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddHeader("content-length", "3");
+  request.set_has_complete_message(false);
+
+  // Set the offset so we won't frame.  Otherwise when we pick up termination
+  // before HTTP framing is complete, we send an error and close the stream,
+  // and the second write is picked up as writing on a closed stream.
+  QuicSpdyClientStream* stream = client_->GetOrCreateStream();
+  ASSERT_TRUE(stream != nullptr);
+  ReliableQuicStreamPeer::SetStreamBytesWritten(3, stream);
+
+  client_->SendData("bar", true);
+  client_->WaitForWriteToFlush();
+
+  // By default the stream protects itself from writes after terminte is set.
+  // Override this to test the server handling buggy clients.
+  ReliableQuicStreamPeer::SetWriteSideClosed(false,
+                                             client_->GetOrCreateStream());
+
+  EXPECT_DFATAL(client_->SendData("eep", true), "Fin already buffered");
+}
+
+TEST_P(EndToEndTest, Timeout) {
+  client_config_.SetIdleConnectionStateLifetime(
+      QuicTime::Delta::FromMicroseconds(500),
+      QuicTime::Delta::FromMicroseconds(500));
+  // Note: we do NOT ASSERT_TRUE: we may time out during initial handshake:
+  // that's enough to validate timeout in this case.
+  Initialize();
+  while (client_->client()->connected()) {
+    client_->client()->WaitForEvents();
+  }
+}
+
+TEST_P(EndToEndTest, NegotiateMaxOpenStreams) {
+  // Negotiate 1 max open stream.
+  client_config_.SetMaxStreamsPerConnection(1, 1);
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  if (negotiated_version_ > QUIC_VERSION_34) {
+    // Newer versions use max incoming dynamic streams.
+    return;
+  }
+
+  // Make the client misbehave after negotiation.
+  const int kServerMaxStreams = kMaxStreamsMinimumIncrement + 1;
+  QuicSessionPeer::SetMaxOpenOutgoingStreams(client_->client()->session(),
+                                             kServerMaxStreams + 1);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddHeader("content-length", "3");
+  request.set_has_complete_message(false);
+
+  // The server supports a small number of additional streams beyond the
+  // negotiated limit. Open enough streams to go beyond that limit.
+  for (int i = 0; i < kServerMaxStreams + 1; ++i) {
+    client_->SendMessage(request);
+  }
+  client_->WaitForResponse();
+
+  if (negotiated_version_ <= QUIC_VERSION_27) {
+    EXPECT_FALSE(client_->connected());
+    EXPECT_EQ(QUIC_STREAM_CONNECTION_ERROR, client_->stream_error());
+    EXPECT_EQ(QUIC_TOO_MANY_OPEN_STREAMS, client_->connection_error());
+  } else {
+    EXPECT_TRUE(client_->connected());
+    EXPECT_EQ(QUIC_REFUSED_STREAM, client_->stream_error());
+    EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error());
+  }
+}
+
+TEST_P(EndToEndTest, MaxIncomingDynamicStreamsLimitRespected) {
+  // Set a limit on maximum number of incoming dynamic streams.
+  // Make sure the limit is respected.
+  const uint32_t kServerMaxIncomingDynamicStreams = 1;
+  server_config_.SetMaxIncomingDynamicStreamsToSend(
+      kServerMaxIncomingDynamicStreams);
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  if (negotiated_version_ <= QUIC_VERSION_34) {
+    // Earlier versions negotiated max open streams.
+    return;
+  }
+
+  // Make the client misbehave after negotiation.
+  const int kServerMaxStreams =
+      kMaxStreamsMinimumIncrement + kServerMaxIncomingDynamicStreams;
+  QuicSessionPeer::SetMaxOpenOutgoingStreams(client_->client()->session(),
+                                             kServerMaxStreams + 1);
+
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.AddHeader("content-length", "3");
+  request.set_has_complete_message(false);
+
+  // The server supports a small number of additional streams beyond the
+  // negotiated limit. Open enough streams to go beyond that limit.
+  for (int i = 0; i < kServerMaxStreams + 1; ++i) {
+    client_->SendMessage(request);
+  }
+  client_->WaitForResponse();
+
+  EXPECT_TRUE(client_->connected());
+  EXPECT_EQ(QUIC_REFUSED_STREAM, client_->stream_error());
+  EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error());
+}
+
+TEST_P(EndToEndTest, SetIndependentMaxIncomingDynamicStreamsLimits) {
+  // Each endpoint can set max incoming dynamic streams independently.
+  const uint32_t kClientMaxIncomingDynamicStreams = 2;
+  const uint32_t kServerMaxIncomingDynamicStreams = 1;
+  client_config_.SetMaxIncomingDynamicStreamsToSend(
+      kClientMaxIncomingDynamicStreams);
+  server_config_.SetMaxIncomingDynamicStreamsToSend(
+      kServerMaxIncomingDynamicStreams);
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  if (negotiated_version_ <= QUIC_VERSION_34) {
+    // Earlier versions negotiated max open streams.
+    return;
+  }
+
+  // The client has received the server's limit and vice versa.
+  EXPECT_EQ(kServerMaxIncomingDynamicStreams,
+            client_->client()->session()->max_open_outgoing_streams());
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  QuicSession* server_session = dispatcher->session_map().begin()->second;
+  EXPECT_EQ(kClientMaxIncomingDynamicStreams,
+            server_session->max_open_outgoing_streams());
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, NegotiateCongestionControl) {
+  ValueRestore<bool> old_flag(&FLAGS_quic_allow_bbr, true);
+  // Disable this flag because if connection uses multipath sent packet manager,
+  // static_cast here does not work.
+  FLAGS_quic_enable_multipath = false;
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  CongestionControlType expected_congestion_control_type = kReno;
+  switch (GetParam().congestion_control_tag) {
+    case kRENO:
+      expected_congestion_control_type = kReno;
+      break;
+    case kTBBR:
+      expected_congestion_control_type = kBBR;
+      break;
+    case kQBIC:
+      expected_congestion_control_type = kCubic;
+      break;
+    default:
+      DLOG(FATAL) << "Unexpected congestion control tag";
+  }
+
+  EXPECT_EQ(expected_congestion_control_type,
+            QuicSentPacketManagerPeer::GetSendAlgorithm(
+                *static_cast<const QuicSentPacketManager*>(
+                    GetSentPacketManagerFromFirstServerSession()))
+                ->GetCongestionControlType());
+}
+
+TEST_P(EndToEndTest, LimitMaxOpenStreams) {
+  // Server limits the number of max streams to 2.
+  server_config_.SetMaxStreamsPerConnection(2, 2);
+  // Client tries to negotiate for 10.
+  client_config_.SetMaxStreamsPerConnection(10, 5);
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  if (negotiated_version_ > QUIC_VERSION_34) {
+    // No negotiated max streams beyond version 34.
+    return;
+  }
+  QuicConfig* client_negotiated_config = client_->client()->session()->config();
+  EXPECT_EQ(2u, client_negotiated_config->MaxStreamsPerConnection());
+}
+
+TEST_P(EndToEndTest, ClientSuggestsRTT) {
+  // Client suggests initial RTT, verify it is used.
+  const uint32_t kInitialRTT = 20000;
+  client_config_.SetInitialRoundTripTimeUsToSend(kInitialRTT);
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  ASSERT_EQ(1u, dispatcher->session_map().size());
+  const QuicSentPacketManagerInterface& client_sent_packet_manager =
+      client_->client()->session()->connection()->sent_packet_manager();
+  const QuicSentPacketManagerInterface* server_sent_packet_manager =
+      GetSentPacketManagerFromFirstServerSession();
+
+  EXPECT_EQ(kInitialRTT,
+            client_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  EXPECT_EQ(kInitialRTT,
+            server_sent_packet_manager->GetRttStats()->initial_rtt_us());
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, MaxInitialRTT) {
+  // Client tries to suggest twice the server's max initial rtt and the server
+  // uses the max.
+  client_config_.SetInitialRoundTripTimeUsToSend(2 *
+                                                 kMaxInitialRoundTripTimeUs);
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  ASSERT_EQ(1u, dispatcher->session_map().size());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  const QuicSentPacketManagerInterface& client_sent_packet_manager =
+      client_->client()->session()->connection()->sent_packet_manager();
+
+  // Now that acks have been exchanged, the RTT estimate has decreased on the
+  // server and is not infinite on the client.
+  EXPECT_FALSE(
+      client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite());
+  const RttStats& server_rtt_stats =
+      *session->connection()->sent_packet_manager().GetRttStats();
+  EXPECT_EQ(static_cast<int64_t>(kMaxInitialRoundTripTimeUs),
+            server_rtt_stats.initial_rtt_us());
+  EXPECT_GE(static_cast<int64_t>(kMaxInitialRoundTripTimeUs),
+            server_rtt_stats.smoothed_rtt().ToMicroseconds());
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, MinInitialRTT) {
+  // Client tries to suggest 0 and the server uses the default.
+  client_config_.SetInitialRoundTripTimeUsToSend(0);
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  ASSERT_EQ(1u, dispatcher->session_map().size());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  const QuicSentPacketManagerInterface& client_sent_packet_manager =
+      client_->client()->session()->connection()->sent_packet_manager();
+  const QuicSentPacketManagerInterface& server_sent_packet_manager =
+      session->connection()->sent_packet_manager();
+
+  // Now that acks have been exchanged, the RTT estimate has decreased on the
+  // server and is not infinite on the client.
+  EXPECT_FALSE(
+      client_sent_packet_manager.GetRttStats()->smoothed_rtt().IsInfinite());
+  // Expect the default rtt of 100ms.
+  EXPECT_EQ(static_cast<int64_t>(100 * kNumMicrosPerMilli),
+            server_sent_packet_manager.GetRttStats()->initial_rtt_us());
+  // Ensure the bandwidth is valid.
+  client_sent_packet_manager.BandwidthEstimate();
+  server_sent_packet_manager.BandwidthEstimate();
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, 0ByteConnectionId) {
+  client_config_.SetBytesForConnectionIdToSend(0);
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader(
+      client_->client()->session()->connection());
+  EXPECT_EQ(PACKET_0BYTE_CONNECTION_ID,
+            header->public_header.connection_id_length);
+}
+
+TEST_P(EndToEndTest, 8ByteConnectionId) {
+  client_config_.SetBytesForConnectionIdToSend(8);
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader(
+      client_->client()->session()->connection());
+  EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID,
+            header->public_header.connection_id_length);
+}
+
+TEST_P(EndToEndTest, 15ByteConnectionId) {
+  client_config_.SetBytesForConnectionIdToSend(15);
+  ASSERT_TRUE(Initialize());
+
+  // Our server is permissive and allows for out of bounds values.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  QuicPacketHeader* header = QuicConnectionPeer::GetLastHeader(
+      client_->client()->session()->connection());
+  EXPECT_EQ(PACKET_8BYTE_CONNECTION_ID,
+            header->public_header.connection_id_length);
+}
+
+TEST_P(EndToEndTest, ResetConnection) {
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  client_->ResetConnection();
+  EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, MaxStreamsUberTest) {
+  if (!BothSidesSupportStatelessRejects()) {
+    // Connect with lower fake packet loss than we'd like to test.  Until
+    // b/10126687 is fixed, losing handshake packets is pretty brutal.
+    // TODO(jokulik): Until we support redundant SREJ packets, don't
+    // drop handshake packets for stateless rejects.
+    SetPacketLossPercentage(1);
+  }
+  ASSERT_TRUE(Initialize());
+  string large_body;
+  GenerateBody(&large_body, 10240);
+  int max_streams = 100;
+
+  AddToCache("/large_response", 200, large_body);
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(10);
+
+  for (int i = 0; i < max_streams; ++i) {
+    EXPECT_LT(0, client_->SendRequest("/large_response"));
+  }
+
+  // WaitForEvents waits 50ms and returns true if there are outstanding
+  // requests.
+  while (client_->client()->WaitForEvents() == true) {
+  }
+}
+
+TEST_P(EndToEndTest, StreamCancelErrorTest) {
+  ASSERT_TRUE(Initialize());
+  string small_body;
+  GenerateBody(&small_body, 256);
+
+  AddToCache("/small_response", 200, small_body);
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  QuicSession* session = client_->client()->session();
+  // Lose the request.
+  SetPacketLossPercentage(100);
+  EXPECT_LT(0, client_->SendRequest("/small_response"));
+  client_->client()->WaitForEvents();
+  // Transmit the cancel, and ensure the connection is torn down properly.
+  SetPacketLossPercentage(0);
+  QuicStreamId stream_id = kClientDataStreamId1;
+  session->SendRstStream(stream_id, QUIC_STREAM_CANCELLED, 0);
+
+  // WaitForEvents waits 50ms and returns true if there are outstanding
+  // requests.
+  while (client_->client()->WaitForEvents() == true) {
+  }
+  // It should be completely fine to RST a stream before any data has been
+  // received for that stream.
+  EXPECT_EQ(QUIC_NO_ERROR, client_->connection_error());
+}
+
+class WrongAddressWriter : public QuicPacketWriterWrapper {
+ public:
+  WrongAddressWriter() {
+    self_address_ = IPEndPoint(IPAddress(127, 0, 0, 2), 0);
+  }
+
+  WriteResult WritePacket(const char* buffer,
+                          size_t buf_len,
+                          const IPAddress& /*real_self_address*/,
+                          const IPEndPoint& peer_address,
+                          PerPacketOptions* options) override {
+    // Use wrong address!
+    return QuicPacketWriterWrapper::WritePacket(
+        buffer, buf_len, self_address_.address(), peer_address, options);
+  }
+
+  bool IsWriteBlockedDataBuffered() const override { return false; }
+
+  IPEndPoint self_address_;
+};
+
+TEST_P(EndToEndTest, ConnectionMigrationClientIPChanged) {
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Store the client IP address which was used to send the first request.
+  IPAddress old_host = client_->client()->GetLatestClientAddress().address();
+
+  // Migrate socket to the new IP address.
+  IPAddress new_host(127, 0, 0, 2);
+  EXPECT_NE(old_host, new_host);
+  ASSERT_TRUE(client_->client()->MigrateSocket(new_host));
+
+  // Send a request using the new socket.
+  EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+TEST_P(EndToEndTest, ConnectionMigrationClientPortChanged) {
+  // Tests that the client's port can change during an established QUIC
+  // connection, and that doing so does not result in the connection being
+  // closed by the server.
+  ASSERT_TRUE(Initialize());
+
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Store the client address which was used to send the first request.
+  IPEndPoint old_address = client_->client()->GetLatestClientAddress();
+  int old_fd = client_->client()->GetLatestFD();
+
+  // Create a new socket before closing the old one, which will result in a new
+  // ephemeral port.
+  QuicClientPeer::CreateUDPSocketAndBind(client_->client());
+
+  // Stop listening and close the old FD.
+  QuicClientPeer::CleanUpUDPSocket(client_->client(), old_fd);
+
+  // The packet writer needs to be updated to use the new FD.
+  client_->client()->CreateQuicPacketWriter();
+
+  // Change the internal state of the client and connection to use the new port,
+  // this is done because in a real NAT rebinding the client wouldn't see any
+  // port change, and so expects no change to incoming port.
+  // This is kind of ugly, but needed as we are simply swapping out the client
+  // FD rather than any more complex NAT rebinding simulation.
+  int new_port = client_->client()->GetLatestClientAddress().port();
+  QuicClientPeer::SetClientPort(client_->client(), new_port);
+  QuicConnectionPeer::SetSelfAddress(
+      client_->client()->session()->connection(),
+      IPEndPoint(
+          client_->client()->session()->connection()->self_address().address(),
+          new_port));
+
+  // Register the new FD for epoll events.
+  int new_fd = client_->client()->GetLatestFD();
+  EpollServer* eps = client_->epoll_server();
+  eps->RegisterFD(new_fd, client_->client(), EPOLLIN | EPOLLOUT | EPOLLET);
+
+  // Send a second request, using the new FD.
+  EXPECT_EQ(kBarResponseBody, client_->SendSynchronousRequest("/bar"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Verify that the client's ephemeral port is different.
+  IPEndPoint new_address = client_->client()->GetLatestClientAddress();
+  EXPECT_EQ(old_address.address(), new_address.address());
+  EXPECT_NE(old_address.port(), new_address.port());
+}
+
+TEST_P(EndToEndTest, DifferentFlowControlWindows) {
+  // Client and server can set different initial flow control receive windows.
+  // These are sent in CHLO/SHLO. Tests that these values are exchanged properly
+  // in the crypto handshake.
+  const uint32_t kClientStreamIFCW = 123456;
+  const uint32_t kClientSessionIFCW = 234567;
+  set_client_initial_stream_flow_control_receive_window(kClientStreamIFCW);
+  set_client_initial_session_flow_control_receive_window(kClientSessionIFCW);
+
+  uint32_t kServerStreamIFCW =
+      GetParam().auto_tune_flow_control_window ? 32 * 1024 : 654321;
+  uint32_t kServerSessionIFCW =
+      GetParam().auto_tune_flow_control_window ? 48 * 1024 : 765432;
+  set_server_initial_stream_flow_control_receive_window(kServerStreamIFCW);
+  set_server_initial_session_flow_control_receive_window(kServerSessionIFCW);
+
+  ASSERT_TRUE(Initialize());
+
+  // Values are exchanged during crypto handshake, so wait for that to finish.
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  // Open a data stream to make sure the stream level flow control is updated.
+  QuicSpdyClientStream* stream = client_->GetOrCreateStream();
+  stream->WriteOrBufferBody("hello", false, nullptr);
+
+  // Client should have the right values for server's receive window.
+  EXPECT_EQ(kServerStreamIFCW,
+            client_->client()
+                ->session()
+                ->config()
+                ->ReceivedInitialStreamFlowControlWindowBytes());
+  EXPECT_EQ(kServerSessionIFCW,
+            client_->client()
+                ->session()
+                ->config()
+                ->ReceivedInitialSessionFlowControlWindowBytes());
+  EXPECT_EQ(kServerStreamIFCW, QuicFlowControllerPeer::SendWindowOffset(
+                                   stream->flow_controller()));
+  EXPECT_EQ(kServerSessionIFCW,
+            QuicFlowControllerPeer::SendWindowOffset(
+                client_->client()->session()->flow_controller()));
+
+  // Server should have the right values for client's receive window.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  EXPECT_EQ(kClientStreamIFCW,
+            session->config()->ReceivedInitialStreamFlowControlWindowBytes());
+  EXPECT_EQ(kClientSessionIFCW,
+            session->config()->ReceivedInitialSessionFlowControlWindowBytes());
+  EXPECT_EQ(kClientSessionIFCW, QuicFlowControllerPeer::SendWindowOffset(
+                                    session->flow_controller()));
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, HeadersAndCryptoStreamsNoConnectionFlowControl) {
+  // The special headers and crypto streams should be subject to per-stream flow
+  // control limits, but should not be subject to connection level flow control
+  const uint32_t kStreamIFCW =
+      GetParam().auto_tune_flow_control_window ? 32 * 1024 : 123456;
+  const uint32_t kSessionIFCW =
+      GetParam().auto_tune_flow_control_window ? 48 * 1024 : 234567;
+  set_client_initial_stream_flow_control_receive_window(kStreamIFCW);
+  set_client_initial_session_flow_control_receive_window(kSessionIFCW);
+  set_server_initial_stream_flow_control_receive_window(kStreamIFCW);
+  set_server_initial_session_flow_control_receive_window(kSessionIFCW);
+
+  ASSERT_TRUE(Initialize());
+
+  // Wait for crypto handshake to finish. This should have contributed to the
+  // crypto stream flow control window, but not affected the session flow
+  // control window.
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  QuicCryptoStream* crypto_stream =
+      QuicSessionPeer::GetCryptoStream(client_->client()->session());
+  EXPECT_LT(
+      QuicFlowControllerPeer::SendWindowSize(crypto_stream->flow_controller()),
+      kStreamIFCW);
+  EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::SendWindowSize(
+                              client_->client()->session()->flow_controller()));
+
+  // Send a request with no body, and verify that the connection level window
+  // has not been affected.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+
+  QuicHeadersStream* headers_stream =
+      QuicSpdySessionPeer::GetHeadersStream(client_->client()->session());
+  EXPECT_LT(
+      QuicFlowControllerPeer::SendWindowSize(headers_stream->flow_controller()),
+      kStreamIFCW);
+  EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::SendWindowSize(
+                              client_->client()->session()->flow_controller()));
+
+  // Server should be in a similar state: connection flow control window should
+  // not have any bytes marked as received.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  QuicFlowController* server_connection_flow_controller =
+      session->flow_controller();
+  EXPECT_EQ(kSessionIFCW, QuicFlowControllerPeer::ReceiveWindowSize(
+                              server_connection_flow_controller));
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, FlowControlsSynced) {
+  set_smaller_flow_control_receive_window();
+
+  ASSERT_TRUE(Initialize());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  server_thread_->WaitForCryptoHandshakeConfirmed();
+
+  server_thread_->Pause();
+  QuicSpdySession* const client_session = client_->client()->session();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  QuicSpdySession* server_session = dispatcher->session_map().begin()->second;
+
+  ExpectFlowControlsSynced(client_session->flow_controller(),
+                           server_session->flow_controller());
+  ExpectFlowControlsSynced(
+      QuicSessionPeer::GetCryptoStream(client_session)->flow_controller(),
+      QuicSessionPeer::GetCryptoStream(server_session)->flow_controller());
+  ExpectFlowControlsSynced(
+      QuicSpdySessionPeer::GetHeadersStream(client_session)->flow_controller(),
+      QuicSpdySessionPeer::GetHeadersStream(server_session)->flow_controller());
+
+  EXPECT_EQ(static_cast<float>(QuicFlowControllerPeer::ReceiveWindowSize(
+                client_session->flow_controller())) /
+                QuicFlowControllerPeer::ReceiveWindowSize(
+                    QuicSpdySessionPeer::GetHeadersStream(client_session)
+                        ->flow_controller()),
+            kSessionToStreamRatio);
+
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, RequestWithNoBodyWillNeverSendStreamFrameWithFIN) {
+  // A stream created on receipt of a simple request with no body will never get
+  // a stream frame with a FIN. Verify that we don't keep track of the stream in
+  // the locally closed streams map: it will never be removed if so.
+  ASSERT_TRUE(Initialize());
+
+  // Send a simple headers only request, and receive response.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Now verify that the server is not waiting for a final FIN or RST.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  EXPECT_EQ(
+      0u,
+      QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(session).size());
+  server_thread_->Resume();
+}
+
+// A TestAckListener verifies that its OnAckNotification method has been
+// called exactly once on destruction.
+class TestAckListener : public QuicAckListenerInterface {
+ public:
+  explicit TestAckListener(int num_packets) : num_notifications_(num_packets) {}
+
+  void OnPacketAcked(int /*acked_bytes*/,
+                     QuicTime::Delta /*delta_largest_observed*/) override {
+    ASSERT_LT(0, num_notifications_);
+    num_notifications_--;
+  }
+
+  void OnPacketRetransmitted(int /*retransmitted_bytes*/) override {}
+
+  bool has_been_notified() const { return num_notifications_ == 0; }
+
+ protected:
+  // Object is ref counted.
+  ~TestAckListener() override { EXPECT_EQ(0, num_notifications_); }
+
+ private:
+  int num_notifications_;
+};
+
+class TestResponseListener : public QuicClient::ResponseListener {
+ public:
+  void OnCompleteResponse(QuicStreamId id,
+                          const BalsaHeaders& response_headers,
+                          const string& response_body) override {
+    string debug_string;
+    response_headers.DumpHeadersToString(&debug_string);
+    DVLOG(1) << "response for stream " << id << " " << debug_string << "\n"
+             << response_body;
+  }
+};
+
+TEST_P(EndToEndTest, AckNotifierWithPacketLossAndBlockedSocket) {
+  // Verify that even in the presence of packet loss and occasionally blocked
+  // socket,  an AckNotifierDelegate will get informed that the data it is
+  // interested in has been ACKed. This tests end-to-end ACK notification, and
+  // demonstrates that retransmissions do not break this functionality.
+  if (!BothSidesSupportStatelessRejects()) {
+    // TODO(jokulik): Until we support redundant SREJ packets, don't
+    // drop handshake packets for stateless rejects.
+    SetPacketLossPercentage(5);
+  }
+  ASSERT_TRUE(Initialize());
+
+  // Wait for the server SHLO before upping the packet loss.
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(30);
+  client_writer_->set_fake_blocked_socket_percentage(10);
+
+  // Create a POST request and send the headers only.
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  request.set_has_complete_message(false);
+  client_->SendMessage(request);
+
+  // The TestAckListener will cause a failure if not notified.
+  scoped_refptr<TestAckListener> delegate(new TestAckListener(2));
+
+  // Test the AckNotifier's ability to track multiple packets by making the
+  // request body exceed the size of a single packet.
+  string request_string =
+      "a request body bigger than one packet" + string(kMaxPacketSize, '.');
+
+  // Send the request, and register the delegate for ACKs.
+  client_->SendData(request_string, true, delegate.get());
+  client_->WaitForResponse();
+  EXPECT_EQ(kFooResponseBody, client_->response_body());
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Send another request to flush out any pending ACKs on the server.
+  client_->SendSynchronousRequest("/bar");
+
+  // Pause the server to avoid races.
+  server_thread_->Pause();
+  // Make sure the delegate does get the notification it expects.
+  while (!delegate->has_been_notified()) {
+    // Waits for up to 50 ms.
+    client_->client()->WaitForEvents();
+  }
+  server_thread_->Resume();
+}
+
+// Send a public reset from the server.
+TEST_P(EndToEndTest, ServerSendPublicReset) {
+  ASSERT_TRUE(Initialize());
+
+  // Send the public reset.
+  QuicConnectionId connection_id =
+      client_->client()->session()->connection()->connection_id();
+  QuicPublicResetPacket header;
+  header.public_header.connection_id = connection_id;
+  header.public_header.reset_flag = true;
+  header.public_header.version_flag = false;
+  header.rejected_packet_number = 10101;
+  QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
+                    Perspective::IS_SERVER);
+  std::unique_ptr<QuicEncryptedPacket> packet(
+      framer.BuildPublicResetPacket(header));
+  // We must pause the server's thread in order to call WritePacket without
+  // race conditions.
+  server_thread_->Pause();
+  server_writer_->WritePacket(
+      packet->data(), packet->length(), server_address_.address(),
+      client_->client()->GetLatestClientAddress(), nullptr);
+  server_thread_->Resume();
+
+  // The request should fail.
+  EXPECT_EQ("", client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(0u, client_->response_headers()->parsed_response_code());
+  EXPECT_EQ(QUIC_PUBLIC_RESET, client_->connection_error());
+}
+
+// Send a public reset from the server for a different connection ID.
+// It should be ignored.
+TEST_P(EndToEndTest, ServerSendPublicResetWithDifferentConnectionId) {
+  ASSERT_TRUE(Initialize());
+
+  // Send the public reset.
+  QuicConnectionId incorrect_connection_id =
+      client_->client()->session()->connection()->connection_id() + 1;
+  QuicPublicResetPacket header;
+  header.public_header.connection_id = incorrect_connection_id;
+  header.public_header.reset_flag = true;
+  header.public_header.version_flag = false;
+  header.rejected_packet_number = 10101;
+  QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
+                    Perspective::IS_SERVER);
+  std::unique_ptr<QuicEncryptedPacket> packet(
+      framer.BuildPublicResetPacket(header));
+  testing::NiceMock<MockQuicConnectionDebugVisitor> visitor;
+  client_->client()->session()->connection()->set_debug_visitor(&visitor);
+  EXPECT_CALL(visitor, OnIncorrectConnectionId(incorrect_connection_id))
+      .Times(1);
+  // We must pause the server's thread in order to call WritePacket without
+  // race conditions.
+  server_thread_->Pause();
+  server_writer_->WritePacket(
+      packet->data(), packet->length(), server_address_.address(),
+      client_->client()->GetLatestClientAddress(), nullptr);
+  server_thread_->Resume();
+
+  // The connection should be unaffected.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  client_->client()->session()->connection()->set_debug_visitor(nullptr);
+}
+
+// Send a public reset from the client for a different connection ID.
+// It should be ignored.
+TEST_P(EndToEndTest, ClientSendPublicResetWithDifferentConnectionId) {
+  ASSERT_TRUE(Initialize());
+
+  // Send the public reset.
+  QuicConnectionId incorrect_connection_id =
+      client_->client()->session()->connection()->connection_id() + 1;
+  QuicPublicResetPacket header;
+  header.public_header.connection_id = incorrect_connection_id;
+  header.public_header.reset_flag = true;
+  header.public_header.version_flag = false;
+  header.rejected_packet_number = 10101;
+  QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
+                    Perspective::IS_CLIENT);
+  std::unique_ptr<QuicEncryptedPacket> packet(
+      framer.BuildPublicResetPacket(header));
+  client_writer_->WritePacket(
+      packet->data(), packet->length(),
+      client_->client()->GetLatestClientAddress().address(), server_address_,
+      nullptr);
+
+  // The connection should be unaffected.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+// Send a version negotiation packet from the server for a different
+// connection ID.  It should be ignored.
+TEST_P(EndToEndTest, ServerSendVersionNegotiationWithDifferentConnectionId) {
+  ASSERT_TRUE(Initialize());
+
+  // Send the version negotiation packet.
+  QuicConnectionId incorrect_connection_id =
+      client_->client()->session()->connection()->connection_id() + 1;
+  std::unique_ptr<QuicEncryptedPacket> packet(
+      QuicFramer::BuildVersionNegotiationPacket(incorrect_connection_id,
+                                                server_supported_versions_));
+  testing::NiceMock<MockQuicConnectionDebugVisitor> visitor;
+  client_->client()->session()->connection()->set_debug_visitor(&visitor);
+  EXPECT_CALL(visitor, OnIncorrectConnectionId(incorrect_connection_id))
+      .Times(1);
+  // We must pause the server's thread in order to call WritePacket without
+  // race conditions.
+  server_thread_->Pause();
+  server_writer_->WritePacket(
+      packet->data(), packet->length(), server_address_.address(),
+      client_->client()->GetLatestClientAddress(), nullptr);
+  server_thread_->Resume();
+
+  // The connection should be unaffected.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  client_->client()->session()->connection()->set_debug_visitor(nullptr);
+}
+
+// A bad header shouldn't tear down the connection, because the receiver can't
+// tell the connection ID.
+TEST_P(EndToEndTest, BadPacketHeaderTruncated) {
+  ASSERT_TRUE(Initialize());
+
+  // Start the connection.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Packet with invalid public flags.
+  char packet[] = {// public flags (8 byte connection_id)
+                   0x3C,
+                   // truncated connection ID
+                   0x11};
+  client_writer_->WritePacket(
+      &packet[0], sizeof(packet),
+      client_->client()->GetLatestClientAddress().address(), server_address_,
+      nullptr);
+  // Give the server time to process the packet.
+  base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  EXPECT_EQ(QUIC_INVALID_PACKET_HEADER,
+            QuicDispatcherPeer::GetAndClearLastError(dispatcher));
+  server_thread_->Resume();
+
+  // The connection should not be terminated.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+// A bad header shouldn't tear down the connection, because the receiver can't
+// tell the connection ID.
+TEST_P(EndToEndTest, BadPacketHeaderFlags) {
+  ASSERT_TRUE(Initialize());
+
+  // Start the connection.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  // Packet with invalid public flags.
+  char packet[] = {
+      // invalid public flags
+      0xFF,
+      // connection_id
+      0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
+      // packet sequence number
+      0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
+      // private flags
+      0x00,
+  };
+  client_writer_->WritePacket(
+      &packet[0], sizeof(packet),
+      client_->client()->GetLatestClientAddress().address(), server_address_,
+      nullptr);
+  // Give the server time to process the packet.
+  base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  EXPECT_EQ(QUIC_INVALID_PACKET_HEADER,
+            QuicDispatcherPeer::GetAndClearLastError(dispatcher));
+  server_thread_->Resume();
+
+  // The connection should not be terminated.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+// Send a packet from the client with bad encrypted data.  The server should not
+// tear down the connection.
+TEST_P(EndToEndTest, BadEncryptedData) {
+  ASSERT_TRUE(Initialize());
+
+  // Start the connection.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+
+  std::unique_ptr<QuicEncryptedPacket> packet(ConstructEncryptedPacket(
+      client_->client()->session()->connection()->connection_id(), false, false,
+      false, kDefaultPathId, 1, "At least 20 characters.",
+      PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_PACKET_NUMBER));
+  // Damage the encrypted data.
+  string damaged_packet(packet->data(), packet->length());
+  damaged_packet[30] ^= 0x01;
+  DVLOG(1) << "Sending bad packet.";
+  client_writer_->WritePacket(
+      damaged_packet.data(), damaged_packet.length(),
+      client_->client()->GetLatestClientAddress().address(), server_address_,
+      nullptr);
+  // Give the server time to process the packet.
+  base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
+  // This error is sent to the connection's OnError (which ignores it), so the
+  // dispatcher doesn't see it.
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  EXPECT_EQ(QUIC_NO_ERROR,
+            QuicDispatcherPeer::GetAndClearLastError(dispatcher));
+  server_thread_->Resume();
+
+  // The connection should not be terminated.
+  EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+}
+
+// A test stream that gives |response_body_| as an error response body.
+class ServerStreamWithErrorResponseBody : public QuicSimpleServerStream {
+ public:
+  ServerStreamWithErrorResponseBody(QuicStreamId id,
+                                    QuicSpdySession* session,
+                                    string response_body)
+      : QuicSimpleServerStream(id, session), response_body_(response_body) {}
+
+  ~ServerStreamWithErrorResponseBody() override {}
+
+ protected:
+  void SendErrorResponse() override {
+    DVLOG(1) << "Sending error response for stream " << id();
+    SpdyHeaderBlock headers;
+    headers[":status"] = "500";
+    headers["content-length"] = base::UintToString(response_body_.size());
+    // This method must call CloseReadSide to cause the test case, StopReading
+    // is not sufficient.
+    ReliableQuicStreamPeer::CloseReadSide(this);
+    SendHeadersAndBody(std::move(headers), response_body_);
+  }
+
+  string response_body_;
+};
+
+class StreamWithErrorFactory : public QuicTestServer::StreamFactory {
+ public:
+  explicit StreamWithErrorFactory(string response_body)
+      : response_body_(response_body) {}
+
+  ~StreamWithErrorFactory() override {}
+
+  QuicSimpleServerStream* CreateStream(QuicStreamId id,
+                                       QuicSpdySession* session) override {
+    return new ServerStreamWithErrorResponseBody(id, session, response_body_);
+  }
+
+ private:
+  string response_body_;
+};
+
+// A test server stream that drops all received body.
+class ServerStreamThatDropsBody : public QuicSimpleServerStream {
+ public:
+  ServerStreamThatDropsBody(QuicStreamId id, QuicSpdySession* session)
+      : QuicSimpleServerStream(id, session) {}
+
+  ~ServerStreamThatDropsBody() override {}
+
+ protected:
+  void OnDataAvailable() override {
+    while (HasBytesToRead()) {
+      struct iovec iov;
+      if (GetReadableRegions(&iov, 1) == 0) {
+        // No more data to read.
+        break;
+      }
+      DVLOG(1) << "Processed " << iov.iov_len << " bytes for stream " << id();
+      MarkConsumed(iov.iov_len);
+    }
+
+    if (!sequencer()->IsClosed()) {
+      sequencer()->SetUnblocked();
+      return;
+    }
+
+    // If the sequencer is closed, then all the body, including the fin, has
+    // been consumed.
+    OnFinRead();
+
+    if (write_side_closed() || fin_buffered()) {
+      return;
+    }
+
+    SendResponse();
+  }
+};
+
+class ServerStreamThatDropsBodyFactory : public QuicTestServer::StreamFactory {
+ public:
+  ServerStreamThatDropsBodyFactory() {}
+
+  ~ServerStreamThatDropsBodyFactory() override{};
+
+  QuicSimpleServerStream* CreateStream(QuicStreamId id,
+                                       QuicSpdySession* session) override {
+    return new ServerStreamThatDropsBody(id, session);
+  }
+};
+
+// A test server stream that sends response with body size greater than 4GB.
+class ServerStreamThatSendsHugeResponse : public QuicSimpleServerStream {
+ public:
+  ServerStreamThatSendsHugeResponse(QuicStreamId id,
+                                    QuicSpdySession* session,
+                                    int64_t body_bytes)
+      : QuicSimpleServerStream(id, session), body_bytes_(body_bytes) {}
+
+  ~ServerStreamThatSendsHugeResponse() override {}
+
+ protected:
+  void SendResponse() override {
+    QuicInMemoryCache::Response response;
+    string body;
+    test::GenerateBody(&body, body_bytes_);
+    response.set_body(body);
+    SendHeadersAndBodyAndTrailers(response.headers().Clone(), response.body(),
+                                  response.trailers().Clone());
+  }
+
+ private:
+  // Use a explicit int64 rather than size_t to simulate a 64-bit server talking
+  // to a 32-bit client.
+  int64_t body_bytes_;
+};
+
+class ServerStreamThatSendsHugeResponseFactory
+    : public QuicTestServer::StreamFactory {
+ public:
+  explicit ServerStreamThatSendsHugeResponseFactory(int64_t body_bytes)
+      : body_bytes_(body_bytes) {}
+
+  ~ServerStreamThatSendsHugeResponseFactory() override{};
+
+  QuicSimpleServerStream* CreateStream(QuicStreamId id,
+                                       QuicSpdySession* session) override {
+    return new ServerStreamThatSendsHugeResponse(id, session, body_bytes_);
+  }
+
+  int64_t body_bytes_;
+};
+
+// A test client stream that drops all received body.
+class ClientStreamThatDropsBody : public QuicSpdyClientStream {
+ public:
+  ClientStreamThatDropsBody(QuicStreamId id, QuicClientSession* session)
+      : QuicSpdyClientStream(id, session) {}
+  ~ClientStreamThatDropsBody() override {}
+
+  void OnDataAvailable() override {
+    while (HasBytesToRead()) {
+      struct iovec iov;
+      if (GetReadableRegions(&iov, 1) == 0) {
+        break;
+      }
+      MarkConsumed(iov.iov_len);
+    }
+    if (sequencer()->IsClosed()) {
+      OnFinRead();
+    } else {
+      sequencer()->SetUnblocked();
+    }
+  }
+};
+
+class ClientSessionThatDropsBody : public QuicClientSession {
+ public:
+  ClientSessionThatDropsBody(const QuicConfig& config,
+                             QuicConnection* connection,
+                             const QuicServerId& server_id,
+                             QuicCryptoClientConfig* crypto_config,
+                             QuicClientPushPromiseIndex* push_promise_index)
+      : QuicClientSession(config,
+                          connection,
+                          server_id,
+                          crypto_config,
+                          push_promise_index) {}
+
+  ~ClientSessionThatDropsBody() override {}
+
+  QuicSpdyClientStream* CreateClientStream() override {
+    return new ClientStreamThatDropsBody(GetNextOutgoingStreamId(), this);
+  }
+};
+
+class MockableQuicClientThatDropsBody : public MockableQuicClient {
+ public:
+  MockableQuicClientThatDropsBody(IPEndPoint server_address,
+                                  const QuicServerId& server_id,
+                                  const QuicConfig& config,
+                                  const QuicVersionVector& supported_versions,
+                                  EpollServer* epoll_server)
+      : MockableQuicClient(server_address,
+                           server_id,
+                           config,
+                           supported_versions,
+                           epoll_server) {}
+  ~MockableQuicClientThatDropsBody() override {}
+
+  QuicClientSession* CreateQuicClientSession(
+      QuicConnection* connection) override {
+    auto* session =
+        new ClientSessionThatDropsBody(*config(), connection, server_id(),
+                                       crypto_config(), push_promise_index());
+    set_session(session);
+    return session;
+  }
+};
+
+class QuicTestClientThatDropsBody : public QuicTestClient {
+ public:
+  QuicTestClientThatDropsBody(IPEndPoint server_address,
+                              const string& server_hostname,
+                              const QuicConfig& config,
+                              const QuicVersionVector& supported_versions)
+      : QuicTestClient(server_address,
+                       server_hostname,
+                       config,
+                       supported_versions) {
+    set_client(new MockableQuicClientThatDropsBody(
+        server_address, QuicServerId(server_hostname, server_address.port(),
+                                     PRIVACY_MODE_DISABLED),
+        config, supported_versions, epoll_server()));
+  }
+  ~QuicTestClientThatDropsBody() override {}
+};
+
+TEST_P(EndToEndTest, EarlyResponseFinRecording) {
+  set_smaller_flow_control_receive_window();
+
+  // Verify that an incoming FIN is recorded in a stream object even if the read
+  // side has been closed.  This prevents an entry from being made in
+  // locally_close_streams_highest_offset_ (which will never be deleted).
+  // To set up the test condition, the server must do the following in order:
+  // start sending the response and call CloseReadSide
+  // receive the FIN of the request
+  // send the FIN of the response
+
+  string response_body;
+  // The response body must be larger than the flow control window so the server
+  // must receive a window update from the client before it can finish sending
+  // it.
+  uint32_t response_body_size =
+      2 * client_config_.GetInitialStreamFlowControlWindowToSend();
+  GenerateBody(&response_body, response_body_size);
+
+  StreamWithErrorFactory stream_factory(response_body);
+  SetSpdyStreamFactory(&stream_factory);
+
+  ASSERT_TRUE(Initialize());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // A POST that gets an early error response, after the headers are received
+  // and before the body is received, due to invalid content-length.
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage");
+  // The body must be large enough that the FIN will be in a different packet
+  // than the end of the headers, but short enough to not require a flow control
+  // update.  This allows headers processing to trigger the error response
+  // before the request FIN is processed but receive the request FIN before the
+  // response is sent completely.
+  const uint32_t kRequestBodySize = kMaxPacketSize + 10;
+  string request_body;
+  GenerateBody(&request_body, kRequestBodySize);
+  request.AddBody(request_body, false);
+  // Set an invalid content-length, so the request will receive an early 500
+  // response.  Must be done after AddBody, which also sets content-length.
+  request.AddHeader("content-length", "-1");
+  request.set_skip_message_validation(true);
+
+  // Send the request.
+  client_->SendMessage(request);
+  client_->WaitForResponse();
+  EXPECT_EQ(500u, client_->response_headers()->parsed_response_code());
+
+  // Pause the server so we can access the server's internals without races.
+  server_thread_->Pause();
+
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  QuicDispatcher::SessionMap const& map =
+      QuicDispatcherPeer::session_map(dispatcher);
+  QuicDispatcher::SessionMap::const_iterator it = map.begin();
+  EXPECT_TRUE(it != map.end());
+  QuicServerSessionBase* server_session = it->second;
+
+  // The stream is not waiting for the arrival of the peer's final offset.
+  EXPECT_EQ(
+      0u, QuicSessionPeer::GetLocallyClosedStreamsHighestOffset(server_session)
+              .size());
+
+  server_thread_->Resume();
+}
+
+TEST_P(EndToEndTest, LargePostEarlyResponse) {
+  const uint32_t kWindowSize = 65536;
+  set_client_initial_stream_flow_control_receive_window(kWindowSize);
+  set_client_initial_session_flow_control_receive_window(kWindowSize);
+  set_server_initial_stream_flow_control_receive_window(kWindowSize);
+  set_server_initial_session_flow_control_receive_window(kWindowSize);
+
+  ASSERT_TRUE(Initialize());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // POST to a URL that gets an early error response, after the headers are
+  // received and before the body is received.
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/garbage");
+  const uint32_t kBodySize = 2 * kWindowSize;
+  // Invalid content-length so the request will receive an early 500 response.
+  request.AddHeader("content-length", "-1");
+  request.set_skip_message_validation(true);
+  request.set_has_complete_message(false);
+
+  // Tell the client to not close the stream if it receives an early response.
+  client_->set_allow_bidirectional_data(true);
+  // Send the headers.
+  client_->SendMessage(request);
+  // Receive the response and let the server close writing.
+  client_->WaitForInitialResponse();
+  EXPECT_EQ(500u, client_->response_headers()->parsed_response_code());
+
+  if (negotiated_version_ > QUIC_VERSION_28) {
+    // Receive the reset stream from server on early response.
+    client_->WaitForResponseForMs(100);
+    ReliableQuicStream* stream =
+        client_->client()->session()->GetOrCreateStream(kClientDataStreamId1);
+    // The stream is reset by server's reset stream.
+    EXPECT_EQ(stream, nullptr);
+    return;
+  }
+
+  // Send a body larger than the stream flow control window.
+  string body;
+  GenerateBody(&body, kBodySize);
+  client_->SendData(body, true);
+
+  // Run the client to let any buffered data be sent.
+  // (This is OK despite already waiting for a response.)
+  client_->WaitForResponse();
+  // There should be no buffered data to write in the client's stream.
+  ReliableQuicStream* stream =
+      client_->client()->session()->GetOrCreateStream(kClientDataStreamId1);
+  EXPECT_FALSE(stream != nullptr && stream->HasBufferedData());
+}
+
+TEST_P(EndToEndTest, Trailers) {
+  // Test sending and receiving HTTP/2 Trailers (trailing HEADERS frames).
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // Set reordering to ensure that Trailers arriving before body is ok.
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(30);
+
+  // Add a response with headers, body, and trailers.
+  const string kBody = "body content";
+
+  SpdyHeaderBlock headers;
+  headers[":status"] = "200";
+  headers[":version"] = "HTTP/1.1";
+  headers["content-length"] = IntToString(kBody.size());
+
+  SpdyHeaderBlock trailers;
+  trailers["some-trailing-header"] = "trailing-header-value";
+
+  QuicInMemoryCache::GetInstance()->AddResponse(
+      "www.google.com", "/trailer_url", std::move(headers), kBody,
+      trailers.Clone());
+
+  EXPECT_EQ(kBody, client_->SendSynchronousRequest("/trailer_url"));
+  EXPECT_EQ(200u, client_->response_headers()->parsed_response_code());
+  EXPECT_EQ(trailers, client_->response_trailers());
+}
+
+class EndToEndTestServerPush : public EndToEndTest {
+ protected:
+  const size_t kNumMaxStreams = 10;
+
+  EndToEndTestServerPush() : EndToEndTest() {
+    FLAGS_quic_supports_push_promise = true;
+    client_config_.SetMaxStreamsPerConnection(kNumMaxStreams, kNumMaxStreams);
+    client_config_.SetMaxIncomingDynamicStreamsToSend(kNumMaxStreams);
+    server_config_.SetMaxStreamsPerConnection(kNumMaxStreams, kNumMaxStreams);
+    server_config_.SetMaxIncomingDynamicStreamsToSend(kNumMaxStreams);
+    support_server_push_ = true;
+  }
+
+  // Add a request with its response and |num_resources| push resources into
+  // cache.
+  // If |resource_size| == 0, response body of push resources use default string
+  // concatenating with resource url. Otherwise, generate a string of
+  // |resource_size| as body.
+  void AddRequestAndResponseWithServerPush(string host,
+                                           string path,
+                                           string response_body,
+                                           string* push_urls,
+                                           const size_t num_resources,
+                                           const size_t resource_size) {
+    bool use_large_response = resource_size != 0;
+    string large_resource;
+    if (use_large_response) {
+      // Generate a response common body larger than flow control window for
+      // push response.
+      test::GenerateBody(&large_resource, resource_size);
+    }
+    std::list<QuicInMemoryCache::ServerPushInfo> push_resources;
+    for (size_t i = 0; i < num_resources; ++i) {
+      string url = push_urls[i];
+      GURL resource_url(url);
+      string body = use_large_response
+                        ? large_resource
+                        : "This is server push response body for " + url;
+      SpdyHeaderBlock response_headers;
+      response_headers[":version"] = "HTTP/1.1";
+      response_headers[":status"] = "200";
+      response_headers["content-length"] = IntToString(body.size());
+      push_resources.push_back(QuicInMemoryCache::ServerPushInfo(
+          resource_url, std::move(response_headers), kV3LowestPriority, body));
+    }
+
+    QuicInMemoryCache::GetInstance()->AddSimpleResponseWithServerPushResources(
+        host, path, 200, response_body, push_resources);
+  }
+};
+
+// Run all server push end to end tests with all supported versions.
+INSTANTIATE_TEST_CASE_P(EndToEndTestsServerPush,
+                        EndToEndTestServerPush,
+                        ::testing::ValuesIn(GetTestParams()));
+
+TEST_P(EndToEndTestServerPush, ServerPush) {
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(30);
+
+  // Add a response with headers, body, and push resources.
+  const string kBody = "body content";
+  size_t kNumResources = 4;
+  string push_urls[] = {
+      "https://google.com/font.woff", "https://google.com/script.js",
+      "https://fonts.google.com/font.woff", "https://google.com/logo-hires.jpg",
+  };
+  AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
+                                      push_urls, kNumResources, 0);
+
+  client_->client()->set_response_listener(new TestResponseListener);
+
+  DVLOG(1) << "send request for /push_example";
+  EXPECT_EQ(kBody, client_->SendSynchronousRequest(
+                       "https://example.com/push_example"));
+  for (const string& url : push_urls) {
+    DVLOG(1) << "send request for pushed stream on url " << url;
+    string expected_body = "This is server push response body for " + url;
+    string response_body = client_->SendSynchronousRequest(url);
+    DVLOG(1) << "response body " << response_body;
+    EXPECT_EQ(expected_body, response_body);
+  }
+}
+
+TEST_P(EndToEndTestServerPush, ServerPushUnderLimit) {
+  // Tests that sending a request which has 4 push resources will trigger server
+  // to push those 4 resources and client can handle pushed resources and match
+  // them with requests later.
+  ASSERT_TRUE(Initialize());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(30);
+
+  // Add a response with headers, body, and push resources.
+  const string kBody = "body content";
+  size_t const kNumResources = 4;
+  string push_urls[] = {
+      "https://example.com/font.woff", "https://example.com/script.js",
+      "https://fonts.example.com/font.woff",
+      "https://example.com/logo-hires.jpg",
+  };
+  AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
+                                      push_urls, kNumResources, 0);
+  client_->client()->set_response_listener(new TestResponseListener);
+
+  // Send the first request: this will trigger the server to send all the push
+  // resources associated with this request, and these will be cached by the
+  // client.
+  EXPECT_EQ(kBody, client_->SendSynchronousRequest(
+                       "https://example.com/push_example"));
+
+  for (string url : push_urls) {
+    // Sending subsequent requesets will not actually send anything on the wire,
+    // as the responses are already in the client's cache.
+    DVLOG(1) << "send request for pushed stream on url " << url;
+    string expected_body = "This is server push response body for " + url;
+    string response_body = client_->SendSynchronousRequest(url);
+    DVLOG(1) << "response body " << response_body;
+    EXPECT_EQ(expected_body, response_body);
+  }
+  // Expect only original request has been sent and push responses have been
+  // received as normal response.
+  EXPECT_EQ(1u, client_->num_requests());
+  EXPECT_EQ(1u + kNumResources, client_->num_responses());
+}
+
+TEST_P(EndToEndTestServerPush, ServerPushOverLimitNonBlocking) {
+  // Tests that when streams are not blocked by flow control or congestion
+  // control, pushing even more resources than max number of open outgoing
+  // streams should still work because all response streams get closed
+  // immediately after pushing resources.
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(30);
+
+  // Add a response with headers, body, and push resources.
+  const string kBody = "body content";
+
+  // One more resource than max number of outgoing stream of this session.
+  const size_t kNumResources = 1 + kNumMaxStreams;  // 11.
+  string push_urls[11];
+  for (uint32_t i = 0; i < kNumResources; ++i) {
+    push_urls[i] = "https://example.com/push_resources" + base::UintToString(i);
+  }
+  AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
+                                      push_urls, kNumResources, 0);
+  client_->client()->set_response_listener(new TestResponseListener);
+
+  // Send the first request: this will trigger the server to send all the push
+  // resources associated with this request, and these will be cached by the
+  // client.
+  EXPECT_EQ(kBody, client_->SendSynchronousRequest(
+                       "https://example.com/push_example"));
+
+  for (const string& url : push_urls) {
+    // Sending subsequent requesets will not actually send anything on the wire,
+    // as the responses are already in the client's cache.
+    EXPECT_EQ("This is server push response body for " + url,
+              client_->SendSynchronousRequest(url));
+  }
+
+  // Only 1 request should have been sent.
+  EXPECT_EQ(1u, client_->num_requests());
+  // The responses to the original request and all the promised resources
+  // should have been received.
+  EXPECT_EQ(12u, client_->num_responses());
+}
+
+TEST_P(EndToEndTestServerPush, ServerPushOverLimitWithBlocking) {
+  // Tests that when server tries to send more large resources(large enough to
+  // be blocked by flow control window or congestion control window) than max
+  // open outgoing streams , server can open upto max number of outgoing
+  // streams for them, and the rest will be queued up.
+
+  // Reset flow control windows.
+  size_t kFlowControlWnd = 20 * 1024;  // 20KB.
+  // Response body is larger than 1 flow controlblock window.
+  size_t kBodySize = kFlowControlWnd * 2;
+  set_client_initial_stream_flow_control_receive_window(kFlowControlWnd);
+  // Make sure conntection level flow control window is large enough not to
+  // block data being sent out though they will be blocked by stream level one.
+  set_client_initial_session_flow_control_receive_window(
+      kBodySize * kNumMaxStreams + 1024);
+
+  ASSERT_TRUE(Initialize());
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+
+  // Set reordering to ensure that body arriving before PUSH_PROMISE is ok.
+  SetPacketSendDelay(QuicTime::Delta::FromMilliseconds(2));
+  SetReorderPercentage(30);
+
+  // Add a response with headers, body, and push resources.
+  const string kBody = "body content";
+
+  const size_t kNumResources = kNumMaxStreams + 1;
+  string push_urls[11];
+  for (uint32_t i = 0; i < kNumResources; ++i) {
+    push_urls[i] = "http://example.com/push_resources" + base::UintToString(i);
+  }
+  AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
+                                      push_urls, kNumResources, kBodySize);
+
+  client_->client()->set_response_listener(new TestResponseListener);
+
+  client_->SendRequest("https://example.com/push_example");
+
+  // Pause after the first response arrives.
+  while (!client_->response_complete()) {
+    // Because of priority, the first response arrived should be to original
+    // request.
+    client_->WaitForResponse();
+  }
+
+  // Check server session to see if it has max number of outgoing streams opened
+  // though more resources need to be pushed.
+  server_thread_->Pause();
+  QuicDispatcher* dispatcher =
+      QuicServerPeer::GetDispatcher(server_thread_->server());
+  ASSERT_EQ(1u, dispatcher->session_map().size());
+  QuicSession* session = dispatcher->session_map().begin()->second;
+  EXPECT_EQ(kNumMaxStreams, session->GetNumOpenOutgoingStreams());
+  server_thread_->Resume();
+
+  EXPECT_EQ(1u, client_->num_requests());
+  EXPECT_EQ(1u, client_->num_responses());
+  EXPECT_EQ(kBody, client_->response_body());
+
+  // "Send" request for a promised resources will not really send out it because
+  // its response is being pushed(but blocked). And the following ack and
+  // flow control behavior of SendSynchronousRequests()
+  // will unblock the stream to finish receiving response.
+  client_->SendSynchronousRequest(push_urls[0]);
+  EXPECT_EQ(1u, client_->num_requests());
+  EXPECT_EQ(2u, client_->num_responses());
+
+  // Do same thing for the rest 10 resources.
+  for (uint32_t i = 1; i < kNumResources; ++i) {
+    client_->SendSynchronousRequest(push_urls[i]);
+  }
+
+  // Because of server push, client gets all pushed resources without actually
+  // sending requests for them.
+  EXPECT_EQ(1u, client_->num_requests());
+  // Including response to original request, 12 responses in total were
+  // recieved.
+  EXPECT_EQ(12u, client_->num_responses());
+}
+
+TEST_P(EndToEndTestServerPush, DisabledWithoutConnectionOption) {
+  // Tests that server push won't be triggered when kSPSH is not set by client.
+  support_server_push_ = false;
+  ASSERT_TRUE(Initialize());
+
+  // Add a response with headers, body, and push resources.
+  const string kBody = "body content";
+  size_t const kNumResources = 4;
+  string push_urls[] = {
+      "https://example.com/font.woff", "https://example.com/script.js",
+      "https://fonts.example.com/font.woff",
+      "https://example.com/logo-hires.jpg",
+  };
+  AddRequestAndResponseWithServerPush("example.com", "/push_example", kBody,
+                                      push_urls, kNumResources, 0);
+  client_->client()->set_response_listener(new TestResponseListener);
+  EXPECT_EQ(kBody, client_->SendSynchronousRequest(
+                       "https://example.com/push_example"));
+
+  for (const string& url : push_urls) {
+    // Sending subsequent requests will trigger sending real requests because
+    // client doesn't support server push.
+    const string expected_body = "This is server push response body for " + url;
+    const string response_body = client_->SendSynchronousRequest(url);
+    EXPECT_EQ(expected_body, response_body);
+  }
+  // Same number of requests are sent as that of responses received.
+  EXPECT_EQ(1 + kNumResources, client_->num_requests());
+  EXPECT_EQ(1 + kNumResources, client_->num_responses());
+}
+
+// TODO(fayang): this test seems to cause net_unittests timeouts :|
+TEST_P(EndToEndTest, DISABLED_TestHugePostWithPacketLoss) {
+  // This test tests a huge post with introduced packet loss from client to
+  // server and body size greater than 4GB, making sure QUIC code does not break
+  // for 32-bit builds.
+  ServerStreamThatDropsBodyFactory stream_factory;
+  SetSpdyStreamFactory(&stream_factory);
+  ASSERT_TRUE(Initialize());
+  // Set client's epoll server's time out to 0 to make this test be finished
+  // within a short time.
+  client_->epoll_server()->set_timeout_in_us(0);
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(1);
+  // To avoid storing the whole request body in memory, use a loop to repeatedly
+  // send body size of kSizeBytes until the whole request body size is reached.
+  const int kSizeBytes = 128 * 1024;
+  HTTPMessage request(HttpConstants::HTTP_1_1, HttpConstants::POST, "/foo");
+  // Request body size is 4G plus one more kSizeBytes.
+  int64_t request_body_size_bytes = pow(2, 32) + kSizeBytes;
+  ASSERT_LT(INT64_C(4294967296), request_body_size_bytes);
+  request.AddHeader("content-length", IntToString(request_body_size_bytes));
+  request.set_has_complete_message(false);
+  string body;
+  test::GenerateBody(&body, kSizeBytes);
+
+  client_->SendMessage(request);
+  for (int i = 0; i < request_body_size_bytes / kSizeBytes; ++i) {
+    bool fin = (i == request_body_size_bytes - 1);
+    client_->SendData(string(body.data(), kSizeBytes), fin);
+    client_->client()->WaitForEvents();
+  }
+  VerifyCleanConnection(true);
+}
+
+// TODO(fayang): this test seems to cause net_unittests timeouts :|
+TEST_P(EndToEndTest, DISABLED_TestHugeResponseWithPacketLoss) {
+  // This test tests a huge response with introduced loss from server to client
+  // and body size greater than 4GB, making sure QUIC code does not break for
+  // 32-bit builds.
+  const int kSizeBytes = 128 * 1024;
+  int64_t response_body_size_bytes = pow(2, 32) + kSizeBytes;
+  ASSERT_LT(4294967296, response_body_size_bytes);
+  ServerStreamThatSendsHugeResponseFactory stream_factory(
+      response_body_size_bytes);
+  SetSpdyStreamFactory(&stream_factory);
+
+  StartServer();
+
+  // Use a quic client that drops received body.
+  QuicTestClient* client = new QuicTestClientThatDropsBody(
+      server_address_, server_hostname_, client_config_,
+      client_supported_versions_);
+  client->UseWriter(client_writer_);
+  client->Connect();
+  client_.reset(client);
+  static EpollEvent event(EPOLLOUT, false);
+  client_writer_->Initialize(
+      QuicConnectionPeer::GetHelper(client_->client()->session()->connection()),
+      QuicConnectionPeer::GetAlarmFactory(
+          client_->client()->session()->connection()),
+      new ClientDelegate(client_->client()));
+  initialized_ = true;
+  ASSERT_TRUE(client_->client()->connected());
+
+  client_->client()->WaitForCryptoHandshakeConfirmed();
+  SetPacketLossPercentage(1);
+  client_->SendRequest("/huge_response");
+  client_->WaitForResponse();
+  // TODO(fayang): Fix this test to work with stateless rejects.
+  if (!BothSidesSupportStatelessRejects()) {
+    VerifyCleanConnection(true);
+  }
+}
+
+}  // namespace
+}  // namespace test
+}  // namespace net
diff --git a/src/net/tools/quic/platform/impl/quic_epoll_clock_test.cc b/src/net/tools/quic/platform/impl/quic_epoll_clock_test.cc
index 0805429..52115a7 100644
--- a/src/net/tools/quic/platform/impl/quic_epoll_clock_test.cc
+++ b/src/net/tools/quic/platform/impl/quic_epoll_clock_test.cc
@@ -4,13 +4,15 @@
 
 #include "net/tools/quic/platform/impl/quic_epoll_clock.h"
 
+#include "net/quic/platform/api/quic_test.h"
 #include "net/tools/quic/test_tools/mock_epoll_server.h"
-#include "testing/gmock/include/gmock/gmock.h"
 
 namespace net {
 namespace test {
 
-TEST(QuicEpollClockTest, ApproximateNowInUsec) {
+class QuicEpollClockTest : public QuicTest {};
+
+TEST_F(QuicEpollClockTest, ApproximateNowInUsec) {
   MockEpollServer epoll_server;
   QuicEpollClock clock(&epoll_server);
 
@@ -31,7 +33,7 @@
   EXPECT_EQ(11000005u, clock.WallNow().ToUNIXMicroseconds());
 }
 
-TEST(QuicEpollClockTest, NowInUsec) {
+TEST_F(QuicEpollClockTest, NowInUsec) {
   MockEpollServer epoll_server;
   QuicEpollClock clock(&epoll_server);
 
diff --git a/src/net/tools/quic/platform/impl/quic_socket_utils_test.cc b/src/net/tools/quic/platform/impl/quic_socket_utils_test.cc
index 58fd70b..3b4e733 100644
--- a/src/net/tools/quic/platform/impl/quic_socket_utils_test.cc
+++ b/src/net/tools/quic/platform/impl/quic_socket_utils_test.cc
@@ -10,7 +10,7 @@
 
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_socket_address.h"
-#include "testing/gtest/include/gtest/gtest.h"
+#include "net/quic/platform/api/quic_test.h"
 
 namespace net {
 namespace test {
@@ -19,7 +19,7 @@
 // A test fixture is used to ensure that all sockets are closed down gracefully
 // upon test completion.  Also provides a convenient API to Bind not presently
 // available in QuicSocketUtils.
-class QuicSocketUtilsTest : public ::testing::Test {
+class QuicSocketUtilsTest : public QuicTest {
  protected:
   ~QuicSocketUtilsTest() override {
     for (int fd : open_sockets_) {
diff --git a/src/net/tools/quic/quic_client_session.cc.orig b/src/net/tools/quic/quic_client_session.cc.orig
new file mode 100644
index 0000000..ba0f0ed
--- /dev/null
+++ b/src/net/tools/quic/quic_client_session.cc.orig
@@ -0,0 +1,126 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/tools/quic/quic_client_session.h"
+
+#include "base/logging.h"
+#include "net/quic/crypto/crypto_protocol.h"
+#include "net/quic/crypto/proof_verifier_chromium.h"
+#include "net/quic/quic_server_id.h"
+#include "net/tools/quic/quic_spdy_client_stream.h"
+
+using std::string;
+
+namespace net {
+
+QuicClientSession::QuicClientSession(
+    const QuicConfig& config,
+    QuicConnection* connection,
+    const QuicServerId& server_id,
+    QuicCryptoClientConfig* crypto_config,
+    QuicClientPushPromiseIndex* push_promise_index)
+    : QuicClientSessionBase(connection, push_promise_index, config),
+      server_id_(server_id),
+      crypto_config_(crypto_config),
+      respect_goaway_(true) {}
+
+QuicClientSession::~QuicClientSession() {}
+
+void QuicClientSession::Initialize() {
+  crypto_stream_.reset(CreateQuicCryptoStream());
+  QuicClientSessionBase::Initialize();
+}
+
+void QuicClientSession::OnProofValid(
+    const QuicCryptoClientConfig::CachedState& /*cached*/) {}
+
+void QuicClientSession::OnProofVerifyDetailsAvailable(
+    const ProofVerifyDetails& /*verify_details*/) {}
+
+bool QuicClientSession::ShouldCreateOutgoingDynamicStream() {
+  if (!crypto_stream_->encryption_established()) {
+    DVLOG(1) << "Encryption not active so no outgoing stream created.";
+    return false;
+  }
+  if (GetNumOpenOutgoingStreams() >= max_open_outgoing_streams()) {
+    DVLOG(1) << "Failed to create a new outgoing stream. "
+             << "Already " << GetNumOpenOutgoingStreams() << " open.";
+    return false;
+  }
+  if (goaway_received() && respect_goaway_) {
+    DVLOG(1) << "Failed to create a new outgoing stream. "
+             << "Already received goaway.";
+    return false;
+  }
+  return true;
+}
+
+QuicSpdyClientStream* QuicClientSession::CreateOutgoingDynamicStream(
+    SpdyPriority priority) {
+  if (!ShouldCreateOutgoingDynamicStream()) {
+    return nullptr;
+  }
+  QuicSpdyClientStream* stream = CreateClientStream();
+  stream->SetPriority(priority);
+  ActivateStream(stream);
+  return stream;
+}
+
+QuicSpdyClientStream* QuicClientSession::CreateClientStream() {
+  return new QuicSpdyClientStream(GetNextOutgoingStreamId(), this);
+}
+
+QuicCryptoClientStreamBase* QuicClientSession::GetCryptoStream() {
+  return crypto_stream_.get();
+}
+
+void QuicClientSession::CryptoConnect() {
+  DCHECK(flow_controller());
+  crypto_stream_->CryptoConnect();
+}
+
+int QuicClientSession::GetNumSentClientHellos() const {
+  return crypto_stream_->num_sent_client_hellos();
+}
+
+bool QuicClientSession::ShouldCreateIncomingDynamicStream(QuicStreamId id) {
+  if (!connection()->connected()) {
+    LOG(DFATAL) << "ShouldCreateIncomingDynamicStream called when disconnected";
+    return false;
+  }
+  if (goaway_received() && respect_goaway_) {
+    DVLOG(1) << "Failed to create a new outgoing stream. "
+             << "Already received goaway.";
+    return false;
+  }
+  if (id % 2 != 0) {
+    LOG(WARNING) << "Received invalid push stream id " << id;
+    connection()->SendConnectionCloseWithDetails(
+        QUIC_INVALID_STREAM_ID, "Server created odd numbered stream");
+    return false;
+  }
+  return true;
+}
+
+QuicSpdyStream* QuicClientSession::CreateIncomingDynamicStream(
+    QuicStreamId id) {
+  if (!ShouldCreateIncomingDynamicStream(id)) {
+    return nullptr;
+  }
+  QuicSpdyStream* stream = new QuicSpdyClientStream(id, this);
+  stream->CloseWriteSide();
+  return stream;
+}
+
+QuicCryptoClientStreamBase* QuicClientSession::CreateQuicCryptoStream() {
+  return new QuicCryptoClientStream(
+      server_id_, this, new ProofVerifyContextChromium(0, BoundNetLog()),
+      crypto_config_, this);
+}
+
+bool QuicClientSession::IsAuthorized(const string& authority) {
+  return true;
+}
+
+}  // namespace net
diff --git a/src/net/tools/quic/quic_client_session.h.orig b/src/net/tools/quic/quic_client_session.h.orig
new file mode 100644
index 0000000..2cbf236
--- /dev/null
+++ b/src/net/tools/quic/quic_client_session.h.orig
@@ -0,0 +1,96 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// A client specific QuicSession subclass.
+
+#ifndef NET_TOOLS_QUIC_QUIC_CLIENT_SESSION_H_
+#define NET_TOOLS_QUIC_QUIC_CLIENT_SESSION_H_
+
+#include <string>
+
+#include "base/macros.h"
+#include "net/quic/quic_client_session_base.h"
+#include "net/quic/quic_crypto_client_stream.h"
+#include "net/quic/quic_protocol.h"
+#include "net/tools/quic/quic_spdy_client_stream.h"
+
+namespace net {
+
+class QuicConnection;
+class QuicServerId;
+class ReliableQuicStream;
+
+class QuicClientSession : public QuicClientSessionBase {
+ public:
+  // Caller retains ownership of |promised_by_url|.
+  QuicClientSession(const QuicConfig& config,
+                    QuicConnection* connection,
+                    const QuicServerId& server_id,
+                    QuicCryptoClientConfig* crypto_config,
+                    QuicClientPushPromiseIndex* push_promise_index);
+  ~QuicClientSession() override;
+  // Set up the QuicClientSession. Must be called prior to use.
+  void Initialize() override;
+
+  // QuicSession methods:
+  QuicSpdyClientStream* CreateOutgoingDynamicStream(
+      SpdyPriority priority) override;
+  QuicCryptoClientStreamBase* GetCryptoStream() override;
+
+  bool IsAuthorized(const std::string& authority) override;
+
+  // QuicClientSessionBase methods:
+  void OnProofValid(const QuicCryptoClientConfig::CachedState& cached) override;
+  void OnProofVerifyDetailsAvailable(
+      const ProofVerifyDetails& verify_details) override;
+
+  // Performs a crypto handshake with the server.
+  void CryptoConnect();
+
+  // Returns the number of client hello messages that have been sent on the
+  // crypto stream. If the handshake has completed then this is one greater
+  // than the number of round-trips needed for the handshake.
+  int GetNumSentClientHellos() const;
+
+  void set_respect_goaway(bool respect_goaway) {
+    respect_goaway_ = respect_goaway;
+  }
+
+ protected:
+  // QuicSession methods:
+  QuicSpdyStream* CreateIncomingDynamicStream(QuicStreamId id) override;
+
+  // Create the crypto stream. Called by Initialize()
+  virtual QuicCryptoClientStreamBase* CreateQuicCryptoStream();
+
+  // Unlike CreateOutgoingDynamicStream, which applies a bunch of sanity checks,
+  // this simply returns a new QuicSpdyClientStream. This may be used by
+  // subclasses which want to use a subclass of QuicSpdyClientStream for streams
+  // but wish to use the sanity checks in CreateOutgoingDynamicStream.
+  virtual QuicSpdyClientStream* CreateClientStream();
+
+  const QuicServerId& server_id() { return server_id_; }
+  QuicCryptoClientConfig* crypto_config() { return crypto_config_; }
+
+ private:
+  // If an outgoing stream can be created, return true.
+  bool ShouldCreateOutgoingDynamicStream();
+
+  // If an incoming stream can be created, return true.
+  bool ShouldCreateIncomingDynamicStream(QuicStreamId id);
+
+  scoped_ptr<QuicCryptoClientStreamBase> crypto_stream_;
+  QuicServerId server_id_;
+  QuicCryptoClientConfig* crypto_config_;
+
+  // If this is set to false, the client will ignore server GOAWAYs and allow
+  // the creation of streams regardless of the high chance they will fail.
+  bool respect_goaway_;
+
+  DISALLOW_COPY_AND_ASSIGN(QuicClientSession);
+};
+
+}  // namespace net
+
+#endif  // NET_TOOLS_QUIC_QUIC_CLIENT_SESSION_H_
diff --git a/src/net/tools/quic/quic_client_session_test.cc b/src/net/tools/quic/quic_client_session_test.cc
index b60833d..7afd538 100644
--- a/src/net/tools/quic/quic_client_session_test.cc
+++ b/src/net/tools/quic/quic_client_session_test.cc
@@ -12,6 +12,7 @@
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_quic_spdy_client_stream.h"
 #include "net/quic/test_tools/quic_config_peer.h"
@@ -20,7 +21,6 @@
 #include "net/quic/test_tools/quic_spdy_session_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/tools/quic/quic_spdy_client_stream.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using google::protobuf::implicit_cast;
 using std::string;
@@ -62,7 +62,7 @@
   }
 };
 
-class QuicClientSessionTest : public ::testing::TestWithParam<QuicVersion> {
+class QuicClientSessionTest : public QuicTestWithParam<QuicVersion> {
  protected:
   QuicClientSessionTest()
       : crypto_config_(crypto_test_utils::ProofVerifierForTesting()),
@@ -199,8 +199,8 @@
 
   QuicSpdyClientStream* stream =
       session_->CreateOutgoingDynamicStream(kDefaultPriority);
-  ASSERT_TRUE(stream);
-  EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
+  ASSERT_NE(nullptr, stream);
+  EXPECT_EQ(nullptr, session_->CreateOutgoingDynamicStream(kDefaultPriority));
 
   // Close the stream and receive an RST frame to remove the unfinished stream
   session_->CloseStream(stream->id());
@@ -209,7 +209,81 @@
   // Check that a new one can be created.
   EXPECT_EQ(0u, session_->GetNumOpenOutgoingStreams());
   stream = session_->CreateOutgoingDynamicStream(kDefaultPriority);
-  EXPECT_TRUE(stream);
+  EXPECT_NE(nullptr, stream);
+}
+
+TEST_P(QuicClientSessionTest, ResetAndTrailers) {
+  // Tests the situation in which the client sends a RST at the same time that
+  // the server sends trailing headers (trailers). Receipt of the trailers by
+  // the client should result in all outstanding stream state being tidied up
+  // (including flow control, and number of available outgoing streams).
+  const uint32_t kServerMaxIncomingStreams = 1;
+  CompleteCryptoHandshake(kServerMaxIncomingStreams);
+
+  QuicSpdyClientStream* stream =
+      session_->CreateOutgoingDynamicStream(kDefaultPriority);
+  ASSERT_NE(nullptr, stream);
+  EXPECT_FALSE(session_->CreateOutgoingDynamicStream(kDefaultPriority));
+
+  QuicStreamId stream_id = stream->id();
+  EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(1);
+  session_->SendRstStream(stream_id, QUIC_STREAM_PEER_GOING_AWAY, 0);
+
+  // A new stream cannot be created as the reset stream still counts as an open
+  // outgoing stream until closed by the server.
+  EXPECT_EQ(1u, session_->GetNumOpenOutgoingStreams());
+  stream = session_->CreateOutgoingDynamicStream(kDefaultPriority);
+  EXPECT_EQ(nullptr, stream);
+
+  // The stream receives trailers with final byte offset: this is one of three
+  // ways that a peer can signal the end of a stream (the others being RST,
+  // stream data + FIN).
+  QuicHeaderList trailers;
+  trailers.OnHeaderBlockStart();
+  trailers.OnHeader(kFinalOffsetHeaderKey, "0");
+  trailers.OnHeaderBlockEnd(0);
+  session_->OnStreamHeaderList(stream_id, /*fin=*/false, 0, trailers);
+
+  if (FLAGS_quic_reloadable_flag_quic_final_offset_from_trailers) {
+    // The stream is now complete from the client's perspective, and it should
+    // be able to create a new outgoing stream.
+    EXPECT_EQ(0u, session_->GetNumOpenOutgoingStreams());
+    stream = session_->CreateOutgoingDynamicStream(kDefaultPriority);
+    EXPECT_NE(nullptr, stream);
+  } else {
+    // The old behavior: receiving trailers with final offset does not trigger
+    // cleanup of local stream state. New streams cannot be created.
+    EXPECT_EQ(1u, session_->GetNumOpenOutgoingStreams());
+    stream = session_->CreateOutgoingDynamicStream(kDefaultPriority);
+    EXPECT_EQ(nullptr, stream);
+  }
+}
+
+TEST_P(QuicClientSessionTest, ReceivedMalformedTrailersAfterSendingRst) {
+  // Tests the situation where the client has sent a RST to the server, and has
+  // received trailing headers with a malformed final byte offset value.
+  FLAGS_quic_reloadable_flag_quic_final_offset_from_trailers = true;
+  CompleteCryptoHandshake();
+
+  QuicSpdyClientStream* stream =
+      session_->CreateOutgoingDynamicStream(kDefaultPriority);
+  ASSERT_NE(nullptr, stream);
+
+  // Send the RST, which results in the stream being closed locally (but some
+  // state remains while the client waits for a response from the server).
+  QuicStreamId stream_id = stream->id();
+  EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(1);
+  session_->SendRstStream(stream_id, QUIC_STREAM_PEER_GOING_AWAY, 0);
+
+  // The stream receives trailers with final byte offset, but the header value
+  // is non-numeric and should be treated as malformed.
+  QuicHeaderList trailers;
+  trailers.OnHeaderBlockStart();
+  trailers.OnHeader(kFinalOffsetHeaderKey, "invalid non-numeric value");
+  trailers.OnHeaderBlockEnd(0);
+
+  EXPECT_CALL(*connection_, CloseConnection(_, _, _)).Times(1);
+  session_->OnStreamHeaderList(stream_id, /*fin=*/false, 0, trailers);
 }
 
 TEST_P(QuicClientSessionTest, GoAwayReceived) {
diff --git a/src/net/tools/quic/quic_client_test.cc b/src/net/tools/quic/quic_client_test.cc
index 8f3ff96..458a5b7 100644
--- a/src/net/tools/quic/quic_client_test.cc
+++ b/src/net/tools/quic/quic_client_test.cc
@@ -11,6 +11,7 @@
 
 #include "base/files/file_enumerator.h"
 #include "base/files/file_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
@@ -60,7 +61,9 @@
   return client;
 }
 
-TEST(QuicClientTest, DoNotLeakSocketFDs) {
+class QuicClientTest : public QuicTest {};
+
+TEST_F(QuicClientTest, DoNotLeakSocketFDs) {
   // Make sure that the QuicClient doesn't leak socket FDs. Doing so could cause
   // port exhaustion in long running processes which repeatedly create clients.
 
@@ -87,7 +90,7 @@
   EXPECT_EQ(number_of_open_fds, NumOpenSocketFDs());
 }
 
-TEST(QuicClientTest, CreateAndCleanUpUDPSockets) {
+TEST_F(QuicClientTest, CreateAndCleanUpUDPSockets) {
   // Create a ProofVerifier before counting the number of open FDs to work
   // around some ASAN weirdness.
   crypto_test_utils::ProofVerifierForTesting().reset();
diff --git a/src/net/tools/quic/quic_dispatcher.cc b/src/net/tools/quic/quic_dispatcher.cc
index 6721c07..5e325f3 100644
--- a/src/net/tools/quic/quic_dispatcher.cc
+++ b/src/net/tools/quic/quic_dispatcher.cc
@@ -336,10 +336,9 @@
   if (time_wait_list_manager_->IsConnectionIdInTimeWait(
           header.public_header.connection_id)) {
     // This connection ID is already in time-wait state.
-    time_wait_list_manager_->ProcessPacket(
-        current_server_address_, current_client_address_,
-        header.public_header.connection_id, header.packet_number,
-        *current_packet_);
+    time_wait_list_manager_->ProcessPacket(current_server_address_,
+                                           current_client_address_,
+                                           header.public_header.connection_id);
     return false;
   }
 
@@ -348,11 +347,12 @@
   if (fate == kFateProcess) {
     // Execute stateless rejection logic to determine the packet fate, then
     // invoke ProcessUnauthenticatedHeaderFate.
-    MaybeRejectStatelessly(connection_id, header);
+    MaybeRejectStatelessly(connection_id,
+                           header.public_header.versions.front());
   } else {
     // If the fate is already known, process it without executing stateless
     // rejection logic.
-    ProcessUnauthenticatedHeaderFate(fate, connection_id, header.packet_number);
+    ProcessUnauthenticatedHeaderFate(fate, connection_id);
   }
 
   return false;
@@ -360,11 +360,10 @@
 
 void QuicDispatcher::ProcessUnauthenticatedHeaderFate(
     QuicPacketFate fate,
-    QuicConnectionId connection_id,
-    QuicPacketNumber packet_number) {
+    QuicConnectionId connection_id) {
   switch (fate) {
     case kFateProcess: {
-      ProcessChlo(packet_number);
+      ProcessChlo();
       break;
     }
     case kFateTimeWait:
@@ -382,8 +381,7 @@
       }
       DCHECK(time_wait_list_manager_->IsConnectionIdInTimeWait(connection_id));
       time_wait_list_manager_->ProcessPacket(
-          current_server_address_, current_client_address_, connection_id,
-          packet_number, *current_packet_);
+          current_server_address_, current_client_address_, connection_id);
 
       // Any packets which were buffered while the stateless rejector logic was
       // running should be discarded.  Do not inform the time wait list manager,
@@ -717,7 +715,7 @@
   }
 }
 
-void QuicDispatcher::ProcessChlo(QuicPacketNumber packet_number) {
+void QuicDispatcher::ProcessChlo() {
   if (!accept_new_connections_) {
     // Don't any create new connection.
     time_wait_list_manager()->AddConnectionIdToTimeWait(
@@ -725,9 +723,9 @@
         /*connection_rejected_statelessly=*/false,
         /*termination_packets=*/nullptr);
     // This will trigger sending Public Reset packet.
-    time_wait_list_manager()->ProcessPacket(
-        current_server_address(), current_client_address(),
-        current_connection_id(), packet_number, current_packet());
+    time_wait_list_manager()->ProcessPacket(current_server_address(),
+                                            current_client_address(),
+                                            current_connection_id());
     return;
   }
   if (FLAGS_quic_reloadable_flag_quic_create_session_after_insertion &&
@@ -815,20 +813,18 @@
     : public StatelessRejector::ProcessDoneCallback {
  public:
   StatelessRejectorProcessDoneCallback(QuicDispatcher* dispatcher,
-                                       QuicPacketNumber packet_number,
                                        QuicVersion first_version)
       : dispatcher_(dispatcher),
         current_client_address_(dispatcher->current_client_address_),
         current_server_address_(dispatcher->current_server_address_),
         current_packet_(
             dispatcher->current_packet_->Clone()),  // Note: copies the packet
-        packet_number_(packet_number),
         first_version_(first_version) {}
 
   void Run(std::unique_ptr<StatelessRejector> rejector) override {
     dispatcher_->OnStatelessRejectorProcessDone(
         std::move(rejector), current_client_address_, current_server_address_,
-        std::move(current_packet_), packet_number_, first_version_);
+        std::move(current_packet_), first_version_);
   }
 
  private:
@@ -836,12 +832,11 @@
   QuicSocketAddress current_client_address_;
   QuicSocketAddress current_server_address_;
   std::unique_ptr<QuicReceivedPacket> current_packet_;
-  QuicPacketNumber packet_number_;
   QuicVersion first_version_;
 };
 
 void QuicDispatcher::MaybeRejectStatelessly(QuicConnectionId connection_id,
-                                            const QuicPacketHeader& header) {
+                                            QuicVersion version) {
   // TODO(rch): This logic should probably live completely inside the rejector.
   if (!FLAGS_quic_allow_chlo_buffering ||
       !FLAGS_quic_reloadable_flag_quic_use_cheap_stateless_rejects ||
@@ -852,26 +847,23 @@
         !ChloExtractor::Extract(*current_packet_, GetSupportedVersions(),
                                 nullptr)) {
       // Buffer non-CHLO packets.
-      ProcessUnauthenticatedHeaderFate(kFateBuffer, connection_id,
-                                       header.packet_number);
+      ProcessUnauthenticatedHeaderFate(kFateBuffer, connection_id);
       return;
     }
-    ProcessUnauthenticatedHeaderFate(kFateProcess, connection_id,
-                                     header.packet_number);
+    ProcessUnauthenticatedHeaderFate(kFateProcess, connection_id);
     return;
   }
 
   std::unique_ptr<StatelessRejector> rejector(new StatelessRejector(
-      header.public_header.versions.front(), GetSupportedVersions(),
-      crypto_config_, &compressed_certs_cache_, helper()->GetClock(),
-      helper()->GetRandomGenerator(), current_packet_->length(),
-      current_client_address_, current_server_address_));
+      version, GetSupportedVersions(), crypto_config_, &compressed_certs_cache_,
+      helper()->GetClock(), helper()->GetRandomGenerator(),
+      current_packet_->length(), current_client_address_,
+      current_server_address_));
   ChloValidator validator(session_helper_.get(), current_server_address_,
                           rejector.get());
   if (!ChloExtractor::Extract(*current_packet_, GetSupportedVersions(),
                               &validator)) {
-    ProcessUnauthenticatedHeaderFate(kFateBuffer, connection_id,
-                                     header.packet_number);
+    ProcessUnauthenticatedHeaderFate(kFateBuffer, connection_id);
     return;
   }
 
@@ -882,16 +874,14 @@
     terminator.CloseConnection(QUIC_HANDSHAKE_FAILED,
                                validator.error_details());
     OnConnectionClosedStatelessly(QUIC_HANDSHAKE_FAILED);
-    ProcessUnauthenticatedHeaderFate(kFateTimeWait, connection_id,
-                                     header.packet_number);
+    ProcessUnauthenticatedHeaderFate(kFateTimeWait, connection_id);
     return;
   }
 
   // If we were able to make a decision about this CHLO based purely on the
   // information available in OnChlo, just invoke the done callback immediately.
   if (rejector->state() != StatelessRejector::UNKNOWN) {
-    ProcessStatelessRejectorState(std::move(rejector), header.packet_number,
-                                  header.public_header.versions.front());
+    ProcessStatelessRejectorState(std::move(rejector), version);
     return;
   }
 
@@ -904,8 +894,7 @@
 
   // Continue stateless rejector processing
   std::unique_ptr<StatelessRejectorProcessDoneCallback> cb(
-      new StatelessRejectorProcessDoneCallback(
-          this, header.packet_number, header.public_header.versions.front()));
+      new StatelessRejectorProcessDoneCallback(this, version));
   StatelessRejector::Process(std::move(rejector), std::move(cb));
 }
 
@@ -914,7 +903,6 @@
     const QuicSocketAddress& current_client_address,
     const QuicSocketAddress& current_server_address,
     std::unique_ptr<QuicReceivedPacket> current_packet,
-    QuicPacketNumber packet_number,
     QuicVersion first_version) {
   // Stop buffering packets on this connection
   const auto num_erased =
@@ -927,9 +915,9 @@
   // don't proceed.
   if (time_wait_list_manager_->IsConnectionIdInTimeWait(
           rejector->connection_id())) {
-    time_wait_list_manager_->ProcessPacket(
-        current_server_address, current_client_address,
-        rejector->connection_id(), packet_number, *current_packet);
+    time_wait_list_manager_->ProcessPacket(current_server_address,
+                                           current_client_address,
+                                           rejector->connection_id());
     return;
   }
 
@@ -940,13 +928,11 @@
   current_packet_ = current_packet.get();
   current_connection_id_ = rejector->connection_id();
 
-  ProcessStatelessRejectorState(std::move(rejector), packet_number,
-                                first_version);
+  ProcessStatelessRejectorState(std::move(rejector), first_version);
 }
 
 void QuicDispatcher::ProcessStatelessRejectorState(
     std::unique_ptr<StatelessRejector> rejector,
-    QuicPacketNumber packet_number,
     QuicVersion first_version) {
   QuicPacketFate fate;
   switch (rejector->state()) {
@@ -988,8 +974,7 @@
       fate = kFateDrop;
       break;
   }
-  ProcessUnauthenticatedHeaderFate(fate, rejector->connection_id(),
-                                   packet_number);
+  ProcessUnauthenticatedHeaderFate(fate, rejector->connection_id());
 }
 
 const QuicVersionVector& QuicDispatcher::GetSupportedVersions() {
diff --git a/src/net/tools/quic/quic_dispatcher.h b/src/net/tools/quic/quic_dispatcher.h
index 132cd28..210d4ea 100644
--- a/src/net/tools/quic/quic_dispatcher.h
+++ b/src/net/tools/quic/quic_dispatcher.h
@@ -204,7 +204,7 @@
 
   // Called when |current_packet_| is a CHLO packet. Creates a new connection
   // and delivers any buffered packets for that connection id.
-  void ProcessChlo(QuicPacketNumber packet_number);
+  void ProcessChlo();
 
   QuicTimeWaitListManager* time_wait_list_manager() {
     return time_wait_list_manager_.get();
@@ -296,7 +296,7 @@
   // fate which describes what subsequent processing should be performed on the
   // packets, like ValidityChecks, and invokes ProcessUnauthenticatedHeaderFate.
   void MaybeRejectStatelessly(QuicConnectionId connection_id,
-                              const QuicPacketHeader& header);
+                              QuicVersion version);
 
   // Deliver |packets| to |session| for further processing.
   void DeliverPacketsToSession(
@@ -306,8 +306,7 @@
   // Perform the appropriate actions on the current packet based on |fate| -
   // either process, buffer, or drop it.
   void ProcessUnauthenticatedHeaderFate(QuicPacketFate fate,
-                                        QuicConnectionId connection_id,
-                                        QuicPacketNumber packet_number);
+                                        QuicConnectionId connection_id);
 
   // Invoked when StatelessRejector::Process completes.
   void OnStatelessRejectorProcessDone(
@@ -315,14 +314,12 @@
       const QuicSocketAddress& current_client_address,
       const QuicSocketAddress& current_server_address,
       std::unique_ptr<QuicReceivedPacket> current_packet,
-      QuicPacketNumber packet_number,
       QuicVersion first_version);
 
   // Examine the state of the rejector and decide what to do with the current
   // packet.
   void ProcessStatelessRejectorState(
       std::unique_ptr<StatelessRejector> rejector,
-      QuicPacketNumber packet_number,
       QuicVersion first_version);
 
   void set_new_sessions_allowed_per_event_loop(
diff --git a/src/net/tools/quic/quic_dispatcher_test.cc b/src/net/tools/quic/quic_dispatcher_test.cc
index 2b582dd..7f5a416 100644
--- a/src/net/tools/quic/quic_dispatcher_test.cc
+++ b/src/net/tools/quic/quic_dispatcher_test.cc
@@ -17,6 +17,7 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/fake_proof_source.h"
 #include "net/quic/test_tools/quic_buffered_packet_store_peer.h"
@@ -166,7 +167,7 @@
   QuicDispatcher* dispatcher_;
 };
 
-class QuicDispatcherTest : public ::testing::Test {
+class QuicDispatcherTest : public QuicTest {
  public:
   QuicDispatcherTest()
       : QuicDispatcherTest(crypto_test_utils::ProofSourceForTesting()) {}
@@ -320,7 +321,6 @@
         .as_string();
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   EpollServer eps_;
   QuicEpollConnectionHelper helper_;
   MockQuicConnectionHelper mock_helper_;
@@ -428,7 +428,6 @@
   packet.public_header.connection_id = connection_id;
   packet.public_header.reset_flag = true;
   packet.public_header.version_flag = false;
-  packet.rejected_packet_number = 19191;
   packet.nonce_proof = 132232;
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       QuicFramer::BuildPublicResetPacket(packet));
@@ -450,8 +449,7 @@
 
   // Dispatcher forwards subsequent packets for this connection_id to the time
   // wait list manager.
-  EXPECT_CALL(*time_wait_list_manager_,
-              ProcessPacket(_, _, connection_id, _, _))
+  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, connection_id))
       .Times(1);
   EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _))
       .Times(0);
@@ -466,8 +464,7 @@
   // Dispatcher forwards all packets for this connection_id to the time wait
   // list manager.
   EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _)).Times(0);
-  EXPECT_CALL(*time_wait_list_manager_,
-              ProcessPacket(_, _, connection_id, _, _))
+  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, connection_id))
       .Times(1);
   EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _))
       .Times(1);
@@ -482,7 +479,7 @@
 
   // dispatcher_ should drop this packet.
   EXPECT_CALL(*dispatcher_, CreateQuicSession(1, client_address)).Times(0);
-  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, _, _, _)).Times(0);
+  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, _)).Times(0);
   EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _))
       .Times(0);
   ProcessPacket(client_address, 1, true, SerializeCHLO());
@@ -519,8 +516,7 @@
   // Dispatcher forwards this packet for this connection_id to the time wait
   // list manager.
   EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _)).Times(0);
-  EXPECT_CALL(*time_wait_list_manager_,
-              ProcessPacket(_, _, connection_id, _, _))
+  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, connection_id))
       .Times(1);
   EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _))
       .Times(1);
@@ -535,7 +531,7 @@
   static_assert(arraysize(kSupportedQuicVersions) == 5u,
                 "Supported versions out of sync");
   FLAGS_quic_reloadable_flag_quic_enable_version_38 = true;
-  FLAGS_quic_enable_version_39 = true;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = true;
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
   server_address_ = QuicSocketAddress(QuicIpAddress::Any4(), 5);
   QuicConnectionId connection_id = 1;
@@ -575,7 +571,7 @@
                 PACKET_6BYTE_PACKET_NUMBER, 1);
 
   // Turn off version 39.
-  FLAGS_quic_enable_version_39 = false;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = false;
   ++connection_id;
   EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
       .Times(0);
@@ -584,7 +580,7 @@
                 PACKET_6BYTE_PACKET_NUMBER, 1);
 
   // Turn on version 39.
-  FLAGS_quic_enable_version_39 = true;
+  FLAGS_quic_reloadable_flag_quic_enable_version_39 = true;
   ++connection_id;
   EXPECT_CALL(*dispatcher_, CreateQuicSession(connection_id, client_address))
       .WillOnce(testing::Return(CreateSession(
@@ -753,8 +749,7 @@
             time_wait_list_manager_->IsConnectionIdInTimeWait(connection_id));
   if (ExpectStatelessReject()) {
     // The second packet will be processed on the time-wait list.
-    EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, _, connection_id, _, _))
+    EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, connection_id))
         .Times(1);
   } else {
     // The second packet will trigger a packet-validation
@@ -865,8 +860,7 @@
   QuicConnectionId connection_id = 1;
   // Dispatcher drops this packet.
   EXPECT_CALL(*dispatcher_, CreateQuicSession(_, _)).Times(0);
-  EXPECT_CALL(*time_wait_list_manager_,
-              ProcessPacket(_, _, connection_id, _, _))
+  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, connection_id))
       .Times(0);
   EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _))
       .Times(0);
@@ -1351,7 +1345,7 @@
   // New arrived CHLO will be dropped because this connection is in time wait
   // list.
   ASSERT_TRUE(time_wait_list_manager_->IsConnectionIdInTimeWait(conn_id));
-  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, conn_id, _, _));
+  EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, conn_id));
   ProcessPacket(client_address, conn_id, true, SerializeFullCHLO());
 }
 
@@ -1709,13 +1703,13 @@
     EXPECT_CALL(*time_wait_list_manager_,
                 AddConnectionIdToTimeWait(conn_id, _, true, _));
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id, _, _));
+                ProcessPacket(_, client_addr_, conn_id));
 
     EXPECT_CALL(check, Call(2));
     EXPECT_CALL(*dispatcher_, CreateQuicSession(conn_id, client_addr_))
         .Times(0);
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id, _, _));
+                ProcessPacket(_, client_addr_, conn_id));
   }
 
   // Send a CHLO that the StatelessRejector will reject.
@@ -1831,11 +1825,11 @@
     EXPECT_CALL(*time_wait_list_manager_,
                 AddConnectionIdToTimeWait(conn_id_2, _, true, _));
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id_2, _, _));
+                ProcessPacket(_, client_addr_, conn_id_2));
 
     EXPECT_CALL(check, Call(2));
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id_2, _, _));
+                ProcessPacket(_, client_addr_, conn_id_2));
 
     EXPECT_CALL(check, Call(3));
     EXPECT_CALL(*dispatcher_,
@@ -1845,7 +1839,7 @@
     EXPECT_CALL(*time_wait_list_manager_,
                 AddConnectionIdToTimeWait(conn_id_1, _, true, _));
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id_1, _, _));
+                ProcessPacket(_, client_addr_, conn_id_1));
   }
 
   // Send a CHLO that the StatelessRejector will reject.
@@ -1904,7 +1898,7 @@
     EXPECT_CALL(*time_wait_list_manager_,
                 AddConnectionIdToTimeWait(conn_id_1, _, true, _));
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id_1, _, _));
+                ProcessPacket(_, client_addr_, conn_id_1));
   }
 
   // Send a CHLO that the StatelessRejector will reject.
@@ -1944,7 +1938,7 @@
 
     EXPECT_CALL(check, Call(2));
     EXPECT_CALL(*time_wait_list_manager_,
-                ProcessPacket(_, client_addr_, conn_id, _, _));
+                ProcessPacket(_, client_addr_, conn_id));
     EXPECT_CALL(*dispatcher_, CreateQuicSession(conn_id, client_addr_))
         .Times(0);
   }
diff --git a/src/net/tools/quic/quic_epoll_alarm_factory_test.cc b/src/net/tools/quic/quic_epoll_alarm_factory_test.cc
index 7ff26f3..1ee2b84 100644
--- a/src/net/tools/quic/quic_epoll_alarm_factory_test.cc
+++ b/src/net/tools/quic/quic_epoll_alarm_factory_test.cc
@@ -4,9 +4,9 @@
 
 #include "net/tools/quic/quic_epoll_alarm_factory.h"
 
+#include "net/quic/platform/api/quic_test.h"
 #include "net/tools/quic/platform/impl/quic_epoll_clock.h"
 #include "net/tools/quic/test_tools/mock_epoll_server.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
@@ -25,7 +25,7 @@
 };
 
 // The boolean parameter denotes whether or not to use an arena.
-class QuicEpollAlarmFactoryTest : public ::testing::TestWithParam<bool> {
+class QuicEpollAlarmFactoryTest : public QuicTestWithParam<bool> {
  protected:
   QuicEpollAlarmFactoryTest()
       : clock_(&epoll_server_), alarm_factory_(&epoll_server_) {}
diff --git a/src/net/tools/quic/quic_epoll_connection_helper_test.cc b/src/net/tools/quic/quic_epoll_connection_helper_test.cc
index e0d66a6..c31dceb 100644
--- a/src/net/tools/quic/quic_epoll_connection_helper_test.cc
+++ b/src/net/tools/quic/quic_epoll_connection_helper_test.cc
@@ -5,14 +5,14 @@
 #include "net/tools/quic/quic_epoll_connection_helper.h"
 
 #include "net/quic/core/crypto/quic_random.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/tools/quic/test_tools/mock_epoll_server.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace net {
 namespace test {
 namespace {
 
-class QuicEpollConnectionHelperTest : public ::testing::Test {
+class QuicEpollConnectionHelperTest : public QuicTest {
  protected:
   QuicEpollConnectionHelperTest()
       : helper_(&epoll_server_, QuicAllocator::BUFFER_POOL) {}
diff --git a/src/net/tools/quic/quic_http_response_cache_test.cc b/src/net/tools/quic/quic_http_response_cache_test.cc
index 5e19cb2..60ea65f 100644
--- a/src/net/tools/quic/quic_http_response_cache_test.cc
+++ b/src/net/tools/quic/quic_http_response_cache_test.cc
@@ -8,8 +8,8 @@
 #include "base/path_service.h"
 #include "net/quic/platform/api/quic_map_util.h"
 #include "net/quic/platform/api/quic_str_cat.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 
@@ -21,7 +21,7 @@
 typedef QuicHttpResponseCache::ServerPushInfo ServerPushInfo;
 };  // namespace
 
-class QuicHttpResponseCacheTest : public ::testing::Test {
+class QuicHttpResponseCacheTest : public QuicTest {
  protected:
   void CreateRequest(string host, string path, SpdyHeaderBlock* headers) {
     (*headers)[":method"] = "GET";
diff --git a/src/net/tools/quic/quic_server_test.cc b/src/net/tools/quic/quic_server_test.cc
index ec1bcae..6c0037a 100644
--- a/src/net/tools/quic/quic_server_test.cc
+++ b/src/net/tools/quic/quic_server_test.cc
@@ -9,13 +9,13 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_quic_dispatcher.h"
 #include "net/tools/quic/quic_epoll_alarm_factory.h"
 #include "net/tools/quic/quic_epoll_connection_helper.h"
 #include "net/tools/quic/quic_simple_crypto_server_stream_helper.h"
 #include "net/tools/quic/test_tools/quic_server_peer.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using ::testing::_;
 
@@ -78,7 +78,7 @@
   QuicHttpResponseCache response_cache_;
 };
 
-class QuicServerEpollInTest : public ::testing::Test {
+class QuicServerEpollInTest : public QuicTest {
  public:
   QuicServerEpollInTest()
       : port_(net::test::kTestPort),
@@ -95,7 +95,6 @@
   }
 
  protected:
-  QuicFlagSaver saver_;
   int port_;
   QuicSocketAddress server_address_;
   TestQuicServer server_;
@@ -142,7 +141,7 @@
   }
 }
 
-class QuicServerDispatchPacketTest : public ::testing::Test {
+class QuicServerDispatchPacketTest : public QuicTest {
  public:
   QuicServerDispatchPacketTest()
       : crypto_config_("blah",
diff --git a/src/net/tools/quic/quic_simple_server_session_test.cc b/src/net/tools/quic/quic_simple_server_session_test.cc
index cf1af8a..d5af4c6 100644
--- a/src/net/tools/quic/quic_simple_server_session_test.cc
+++ b/src/net/tools/quic/quic_simple_server_session_test.cc
@@ -17,6 +17,7 @@
 #include "net/quic/platform/api/quic_flags.h"
 #include "net/quic/platform/api/quic_socket_address.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_config_peer.h"
@@ -31,8 +32,6 @@
 #include "net/test/gtest_util.h"
 #include "net/tools/quic/quic_simple_server_stream.h"
 #include "net/tools/quic/test_tools/mock_quic_session_visitor.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using std::string;
 using testing::_;
@@ -175,8 +174,7 @@
                  ack_listener));
 };
 
-class QuicSimpleServerSessionTest
-    : public ::testing::TestWithParam<QuicVersion> {
+class QuicSimpleServerSessionTest : public QuicTestWithParam<QuicVersion> {
  protected:
   QuicSimpleServerSessionTest()
       : crypto_config_(QuicCryptoServerConfig::TESTING,
diff --git a/src/net/tools/quic/quic_simple_server_session_test.cc.orig b/src/net/tools/quic/quic_simple_server_session_test.cc.orig
new file mode 100644
index 0000000..e342c32
--- /dev/null
+++ b/src/net/tools/quic/quic_simple_server_session_test.cc.orig
@@ -0,0 +1,635 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/tools/quic/quic_simple_server_session.h"
+
+#include <algorithm>
+#include <memory>
+
+#include "base/macros.h"
+#include "base/strings/string_number_conversions.h"
+#include "net/quic/crypto/quic_crypto_server_config.h"
+#include "net/quic/crypto/quic_random.h"
+#include "net/quic/proto/cached_network_parameters.pb.h"
+#include "net/quic/quic_connection.h"
+#include "net/quic/quic_crypto_server_stream.h"
+#include "net/quic/quic_utils.h"
+#include "net/quic/test_tools/crypto_test_utils.h"
+#include "net/quic/test_tools/quic_config_peer.h"
+#include "net/quic/test_tools/quic_connection_peer.h"
+#include "net/quic/test_tools/quic_sent_packet_manager_peer.h"
+#include "net/quic/test_tools/quic_session_peer.h"
+#include "net/quic/test_tools/quic_spdy_session_peer.h"
+#include "net/quic/test_tools/quic_spdy_stream_peer.h"
+#include "net/quic/test_tools/quic_sustained_bandwidth_recorder_peer.h"
+#include "net/quic/test_tools/quic_test_utils.h"
+#include "net/test/gtest_util.h"
+#include "net/tools/quic/quic_simple_server_stream.h"
+#include "net/tools/quic/test_tools/mock_quic_server_session_visitor.h"
+#include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using net::test::CryptoTestUtils;
+using net::test::GenerateBody;
+using net::test::MockQuicConnection;
+using net::test::MockQuicConnectionHelper;
+using net::test::QuicConfigPeer;
+using net::test::QuicConnectionPeer;
+using net::test::QuicSpdyStreamPeer;
+using net::test::QuicSentPacketManagerPeer;
+using net::test::QuicSessionPeer;
+using net::test::QuicSpdySessionPeer;
+using net::test::QuicSustainedBandwidthRecorderPeer;
+using net::test::SupportedVersions;
+using net::test::ValueRestore;
+using net::test::kClientDataStreamId1;
+using net::test::kClientDataStreamId2;
+using net::test::kClientDataStreamId3;
+using net::test::kInitialSessionFlowControlWindowForTest;
+using net::test::kInitialStreamFlowControlWindowForTest;
+using std::string;
+using testing::StrictMock;
+using testing::_;
+using testing::InSequence;
+using testing::Return;
+using testing::AtLeast;
+
+namespace net {
+namespace test {
+namespace {
+typedef QuicSimpleServerSession::PromisedStreamInfo PromisedStreamInfo;
+}  // namespace
+
+class MockQuicHeadersStream : public QuicHeadersStream {
+ public:
+  explicit MockQuicHeadersStream(QuicSpdySession* session)
+      : QuicHeadersStream(session) {}
+
+  // Methods taking non-copyable types like SpdyHeaderBlock by value cannot be
+  // mocked directly.
+  size_t WritePushPromise(QuicStreamId original_stream_id,
+                          QuicStreamId promised_stream_id,
+                          SpdyHeaderBlock headers,
+                          QuicAckListenerInterface* ack_listener) override {
+    return WritePushPromiseMock(original_stream_id, promised_stream_id, headers,
+                                ack_listener);
+  }
+  MOCK_METHOD4(WritePushPromiseMock,
+               size_t(QuicStreamId original_stream_id,
+                      QuicStreamId promised_stream_id,
+                      const SpdyHeaderBlock& headers,
+                      QuicAckListenerInterface* ack_listener));
+
+  size_t WriteHeaders(QuicStreamId stream_id,
+                      SpdyHeaderBlock headers,
+                      bool fin,
+                      SpdyPriority priority,
+                      QuicAckListenerInterface* ack_listener) override {
+    return WriteHeadersMock(stream_id, headers, fin, priority, ack_listener);
+  }
+  MOCK_METHOD5(WriteHeadersMock,
+               size_t(QuicStreamId stream_id,
+                      const SpdyHeaderBlock& headers,
+                      bool fin,
+                      SpdyPriority priority,
+                      QuicAckListenerInterface* ack_listener));
+};
+
+class MockQuicCryptoServerStream : public QuicCryptoServerStream {
+ public:
+  explicit MockQuicCryptoServerStream(
+      const QuicCryptoServerConfig* crypto_config,
+      QuicCompressedCertsCache* compressed_certs_cache,
+      QuicServerSessionBase* session)
+      : QuicCryptoServerStream(crypto_config,
+                               compressed_certs_cache,
+                               FLAGS_enable_quic_stateless_reject_support,
+                               session) {}
+  ~MockQuicCryptoServerStream() override {}
+
+  MOCK_METHOD1(SendServerConfigUpdate,
+               void(const CachedNetworkParameters* cached_network_parameters));
+
+  void set_encryption_established(bool has_established) {
+    encryption_established_ = has_established;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockQuicCryptoServerStream);
+};
+
+class MockQuicConnectionWithSendStreamData : public MockQuicConnection {
+ public:
+  MockQuicConnectionWithSendStreamData(
+      MockQuicConnectionHelper* helper,
+      MockAlarmFactory* alarm_factory,
+      Perspective perspective,
+      const QuicVersionVector& supported_versions)
+      : MockQuicConnection(helper,
+                           alarm_factory,
+                           perspective,
+                           supported_versions) {}
+
+  MOCK_METHOD5(SendStreamData,
+               QuicConsumedData(QuicStreamId id,
+                                QuicIOVector iov,
+                                QuicStreamOffset offset,
+                                bool fin,
+                                QuicAckListenerInterface* listern));
+};
+
+class QuicSimpleServerSessionPeer {
+ public:
+  static void SetCryptoStream(QuicSimpleServerSession* s,
+                              QuicCryptoServerStream* crypto_stream) {
+    s->crypto_stream_.reset(crypto_stream);
+    s->static_streams()[kCryptoStreamId] = crypto_stream;
+  }
+
+  static QuicSpdyStream* CreateIncomingDynamicStream(QuicSimpleServerSession* s,
+                                                     QuicStreamId id) {
+    return s->CreateIncomingDynamicStream(id);
+  }
+
+  static QuicSimpleServerStream* CreateOutgoingDynamicStream(
+      QuicSimpleServerSession* s,
+      SpdyPriority priority) {
+    return s->CreateOutgoingDynamicStream(priority);
+  }
+
+  static std::deque<PromisedStreamInfo>* promised_streams(
+      QuicSimpleServerSession* s) {
+    return &(s->promised_streams_);
+  }
+
+  static QuicStreamId hightest_promised_stream_id(QuicSimpleServerSession* s) {
+    return s->highest_promised_stream_id_;
+  }
+};
+
+namespace {
+
+const size_t kMaxStreamsForTest = 10;
+
+class QuicSimpleServerSessionTest
+    : public ::testing::TestWithParam<QuicVersion> {
+ protected:
+  QuicSimpleServerSessionTest()
+      : crypto_config_(QuicCryptoServerConfig::TESTING,
+                       QuicRandom::GetInstance(),
+                       CryptoTestUtils::ProofSourceForTesting()),
+        compressed_certs_cache_(
+            QuicCompressedCertsCache::kQuicCompressedCertsCacheSize) {
+    FLAGS_quic_always_log_bugs_for_tests = true;
+    config_.SetMaxStreamsPerConnection(kMaxStreamsForTest, kMaxStreamsForTest);
+    config_.SetMaxIncomingDynamicStreamsToSend(kMaxStreamsForTest);
+    QuicConfigPeer::SetReceivedMaxIncomingDynamicStreams(&config_,
+                                                         kMaxStreamsForTest);
+    config_.SetInitialStreamFlowControlWindowToSend(
+        kInitialStreamFlowControlWindowForTest);
+    config_.SetInitialSessionFlowControlWindowToSend(
+        kInitialSessionFlowControlWindowForTest);
+
+    connection_ = new StrictMock<MockQuicConnectionWithSendStreamData>(
+        &helper_, &alarm_factory_, Perspective::IS_SERVER,
+        SupportedVersions(GetParam()));
+    session_.reset(new QuicSimpleServerSession(
+        config_, connection_, &owner_, &session_helper_, &crypto_config_,
+        &compressed_certs_cache_));
+    MockClock clock;
+    handshake_message_.reset(crypto_config_.AddDefaultConfig(
+        QuicRandom::GetInstance(), &clock,
+        QuicCryptoServerConfig::ConfigOptions()));
+    session_->Initialize();
+    visitor_ = QuicConnectionPeer::GetVisitor(connection_);
+    headers_stream_ = new MockQuicHeadersStream(session_.get());
+    QuicSpdySessionPeer::SetHeadersStream(session_.get(), headers_stream_);
+    // TODO(jri): Remove this line once tests pass.
+    FLAGS_quic_cede_correctly = false;
+
+    session_->OnConfigNegotiated();
+  }
+
+  StrictMock<MockQuicServerSessionVisitor> owner_;
+  StrictMock<MockQuicServerSessionHelper> session_helper_;
+  MockQuicConnectionHelper helper_;
+  MockAlarmFactory alarm_factory_;
+  StrictMock<MockQuicConnectionWithSendStreamData>* connection_;
+  QuicConfig config_;
+  QuicCryptoServerConfig crypto_config_;
+  QuicCompressedCertsCache compressed_certs_cache_;
+  std::unique_ptr<QuicSimpleServerSession> session_;
+  std::unique_ptr<CryptoHandshakeMessage> handshake_message_;
+  QuicConnectionVisitorInterface* visitor_;
+  MockQuicHeadersStream* headers_stream_;
+};
+
+INSTANTIATE_TEST_CASE_P(Tests,
+                        QuicSimpleServerSessionTest,
+                        ::testing::ValuesIn(QuicSupportedVersions()));
+
+TEST_P(QuicSimpleServerSessionTest, CloseStreamDueToReset) {
+  // Open a stream, then reset it.
+  // Send two bytes of payload to open it.
+  QuicStreamFrame data1(kClientDataStreamId1, false, 0, StringPiece("HT"));
+  session_->OnStreamFrame(data1);
+  EXPECT_EQ(1u, session_->GetNumOpenIncomingStreams());
+
+  // Receive a reset (and send a RST in response).
+  QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM,
+                          0);
+  EXPECT_CALL(*connection_,
+              SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0));
+  visitor_->OnRstStream(rst1);
+  EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams());
+
+  // Send the same two bytes of payload in a new packet.
+  visitor_->OnStreamFrame(data1);
+
+  // The stream should not be re-opened.
+  EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams());
+  EXPECT_TRUE(connection_->connected());
+}
+
+TEST_P(QuicSimpleServerSessionTest, NeverOpenStreamDueToReset) {
+  // Send a reset (and expect the peer to send a RST in response).
+  QuicRstStreamFrame rst1(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM,
+                          0);
+  EXPECT_CALL(*connection_,
+              SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0));
+  visitor_->OnRstStream(rst1);
+  EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams());
+
+  // Send two bytes of payload.
+  QuicStreamFrame data1(kClientDataStreamId1, false, 0, StringPiece("HT"));
+  visitor_->OnStreamFrame(data1);
+
+  // The stream should never be opened, now that the reset is received.
+  EXPECT_EQ(0u, session_->GetNumOpenIncomingStreams());
+  EXPECT_TRUE(connection_->connected());
+}
+
+TEST_P(QuicSimpleServerSessionTest, AcceptClosedStream) {
+  // Send (empty) compressed headers followed by two bytes of data.
+  QuicStreamFrame frame1(kClientDataStreamId1, false, 0,
+                         StringPiece("\1\0\0\0\0\0\0\0HT"));
+  QuicStreamFrame frame2(kClientDataStreamId2, false, 0,
+                         StringPiece("\2\0\0\0\0\0\0\0HT"));
+  visitor_->OnStreamFrame(frame1);
+  visitor_->OnStreamFrame(frame2);
+  EXPECT_EQ(2u, session_->GetNumOpenIncomingStreams());
+
+  // Send a reset (and expect the peer to send a RST in response).
+  QuicRstStreamFrame rst(kClientDataStreamId1, QUIC_ERROR_PROCESSING_STREAM, 0);
+  EXPECT_CALL(*connection_,
+              SendRstStream(kClientDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 0));
+  visitor_->OnRstStream(rst);
+
+  // If we were tracking, we'd probably want to reject this because it's data
+  // past the reset point of stream 3.  As it's a closed stream we just drop the
+  // data on the floor, but accept the packet because it has data for stream 5.
+  QuicStreamFrame frame3(kClientDataStreamId1, false, 2, StringPiece("TP"));
+  QuicStreamFrame frame4(kClientDataStreamId2, false, 2, StringPiece("TP"));
+  visitor_->OnStreamFrame(frame3);
+  visitor_->OnStreamFrame(frame4);
+  // The stream should never be opened, now that the reset is received.
+  EXPECT_EQ(1u, session_->GetNumOpenIncomingStreams());
+  EXPECT_TRUE(connection_->connected());
+}
+
+TEST_P(QuicSimpleServerSessionTest, CreateIncomingDynamicStreamDisconnected) {
+  // Tests that incoming stream creation fails when connection is not connected.
+  size_t initial_num_open_stream = session_->GetNumOpenIncomingStreams();
+  QuicConnectionPeer::TearDownLocalConnectionState(connection_);
+  EXPECT_DFATAL(QuicSimpleServerSessionPeer::CreateIncomingDynamicStream(
+                    session_.get(), kClientDataStreamId1),
+                "ShouldCreateIncomingDynamicStream called when disconnected");
+  EXPECT_EQ(initial_num_open_stream, session_->GetNumOpenIncomingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionTest, CreateEvenIncomingDynamicStream) {
+  // Tests that incoming stream creation fails when given stream id is even.
+  size_t initial_num_open_stream = session_->GetNumOpenIncomingStreams();
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_INVALID_STREAM_ID,
+                              "Client created even numbered stream", _));
+  QuicSimpleServerSessionPeer::CreateIncomingDynamicStream(session_.get(), 2);
+  EXPECT_EQ(initial_num_open_stream, session_->GetNumOpenIncomingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionTest, CreateIncomingDynamicStream) {
+  QuicSpdyStream* stream =
+      QuicSimpleServerSessionPeer::CreateIncomingDynamicStream(
+          session_.get(), kClientDataStreamId1);
+  EXPECT_NE(nullptr, stream);
+  EXPECT_EQ(kClientDataStreamId1, stream->id());
+}
+
+TEST_P(QuicSimpleServerSessionTest, CreateOutgoingDynamicStreamDisconnected) {
+  // Tests that outgoing stream creation fails when connection is not connected.
+  size_t initial_num_open_stream = session_->GetNumOpenOutgoingStreams();
+  QuicConnectionPeer::TearDownLocalConnectionState(connection_);
+  EXPECT_DFATAL(QuicSimpleServerSessionPeer::CreateOutgoingDynamicStream(
+                    session_.get(), kDefaultPriority),
+                "ShouldCreateOutgoingDynamicStream called when disconnected");
+
+  EXPECT_EQ(initial_num_open_stream, session_->GetNumOpenOutgoingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionTest, CreateOutgoingDynamicStreamUnencrypted) {
+  // Tests that outgoing stream creation fails when encryption has not yet been
+  // established.
+  size_t initial_num_open_stream = session_->GetNumOpenOutgoingStreams();
+  EXPECT_DFATAL(QuicSimpleServerSessionPeer::CreateOutgoingDynamicStream(
+                    session_.get(), kDefaultPriority),
+                "Encryption not established so no outgoing stream created.");
+  EXPECT_EQ(initial_num_open_stream, session_->GetNumOpenOutgoingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionTest, CreateOutgoingDynamicStreamUptoLimit) {
+  // Tests that outgoing stream creation should not be affected by existing
+  // incoming stream and vice-versa. But when reaching the limit of max outgoing
+  // stream allowed, creation should fail.
+
+  // Receive some data to initiate a incoming stream which should not effect
+  // creating outgoing streams.
+  QuicStreamFrame data1(kClientDataStreamId1, false, 0, StringPiece("HT"));
+  session_->OnStreamFrame(data1);
+  EXPECT_EQ(1u, session_->GetNumOpenIncomingStreams());
+  EXPECT_EQ(0u, session_->GetNumOpenOutgoingStreams());
+
+  // Assume encryption already established.
+  MockQuicCryptoServerStream* crypto_stream = new MockQuicCryptoServerStream(
+      &crypto_config_, &compressed_certs_cache_, session_.get());
+  crypto_stream->set_encryption_established(true);
+  QuicSimpleServerSessionPeer::SetCryptoStream(session_.get(), crypto_stream);
+
+  // Create push streams till reaching the upper limit of allowed open streams.
+  for (size_t i = 0; i < kMaxStreamsForTest; ++i) {
+    QuicSpdyStream* created_stream =
+        QuicSimpleServerSessionPeer::CreateOutgoingDynamicStream(
+            session_.get(), kDefaultPriority);
+    EXPECT_EQ(2 * (i + 1), created_stream->id());
+    EXPECT_EQ(i + 1, session_->GetNumOpenOutgoingStreams());
+  }
+
+  // Continuing creating push stream would fail.
+  EXPECT_EQ(nullptr, QuicSimpleServerSessionPeer::CreateOutgoingDynamicStream(
+                         session_.get(), kDefaultPriority));
+  EXPECT_EQ(kMaxStreamsForTest, session_->GetNumOpenOutgoingStreams());
+
+  // Create peer initiated stream should have no problem.
+  QuicStreamFrame data2(kClientDataStreamId2, false, 0, StringPiece("HT"));
+  session_->OnStreamFrame(data2);
+  EXPECT_EQ(2u, session_->GetNumOpenIncomingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionTest, OnStreamFrameWithEvenStreamId) {
+  QuicStreamFrame frame(2, false, 0, StringPiece());
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_INVALID_STREAM_ID,
+                              "Client sent data on server push stream", _));
+  session_->OnStreamFrame(frame);
+}
+
+TEST_P(QuicSimpleServerSessionTest, GetEvenIncomingError) {
+  // Tests that calling GetOrCreateDynamicStream() on an outgoing stream not
+  // promised yet should result close connection.
+  EXPECT_CALL(*connection_, CloseConnection(QUIC_INVALID_STREAM_ID,
+                                            "Data for nonexistent stream", _));
+  EXPECT_EQ(nullptr,
+            QuicSessionPeer::GetOrCreateDynamicStream(session_.get(), 4));
+}
+
+// In order to test the case where server push stream creation goes beyond
+// limit, server push streams need to be hanging there instead of
+// immediately closing after sending back response.
+// To achieve this goal, this class resets flow control windows so that large
+// responses will not be sent fully in order to prevent push streams from being
+// closed immediately.
+// Also adjust connection-level flow control window to ensure a large response
+// can cause stream-level flow control blocked but not connection-level.
+class QuicSimpleServerSessionServerPushTest
+    : public QuicSimpleServerSessionTest {
+ protected:
+  const size_t kStreamFlowControlWindowSize = 32 * 1024;  // 32KB.
+
+  QuicSimpleServerSessionServerPushTest() : QuicSimpleServerSessionTest() {
+    config_.SetMaxStreamsPerConnection(kMaxStreamsForTest, kMaxStreamsForTest);
+
+    // Reset stream level flow control window to be 32KB.
+    QuicConfigPeer::SetReceivedInitialStreamFlowControlWindow(
+        &config_, kStreamFlowControlWindowSize);
+    // Reset connection level flow control window to be 1.5 MB which is large
+    // enough that it won't block any stream to write before stream level flow
+    // control blocks it.
+    QuicConfigPeer::SetReceivedInitialSessionFlowControlWindow(
+        &config_, kInitialSessionFlowControlWindowForTest);
+    // Enable server push.
+    QuicTagVector copt;
+    copt.push_back(kSPSH);
+    QuicConfigPeer::SetReceivedConnectionOptions(&config_, copt);
+
+    connection_ = new StrictMock<MockQuicConnectionWithSendStreamData>(
+        &helper_, &alarm_factory_, Perspective::IS_SERVER,
+        SupportedVersions(GetParam()));
+    session_.reset(new QuicSimpleServerSession(
+        config_, connection_, &owner_, &session_helper_, &crypto_config_,
+        &compressed_certs_cache_));
+    session_->Initialize();
+    // Needed to make new session flow control window and server push work.
+    session_->OnConfigNegotiated();
+
+    visitor_ = QuicConnectionPeer::GetVisitor(connection_);
+    headers_stream_ = new MockQuicHeadersStream(session_.get());
+    QuicSpdySessionPeer::SetHeadersStream(session_.get(), headers_stream_);
+
+    // Assume encryption already established.
+    MockQuicCryptoServerStream* crypto_stream = new MockQuicCryptoServerStream(
+        &crypto_config_, &compressed_certs_cache_, session_.get());
+    crypto_stream->set_encryption_established(true);
+    QuicSimpleServerSessionPeer::SetCryptoStream(session_.get(), crypto_stream);
+  }
+
+  // Given |num_resources|, create this number of fake push resources and push
+  // them by sending PUSH_PROMISE for all and sending push responses for as much
+  // as possible(limited by kMaxStreamsForTest).
+  // If |num_resources| > kMaxStreamsForTest, the left over will be queued.
+  void PromisePushResources(size_t num_resources) {
+    // To prevent push streams from being closed the response need to be larger
+    // than stream flow control window so stream won't send the full body.
+    size_t body_size = 2 * kStreamFlowControlWindowSize;  // 64KB.
+
+    config_.SetMaxStreamsPerConnection(kMaxStreamsForTest, kMaxStreamsForTest);
+
+    QuicInMemoryCachePeer::ResetForTests();
+
+    string request_url = "mail.google.com/";
+    SpdyHeaderBlock request_headers;
+    string resource_host = "www.google.com";
+    string partial_push_resource_path = "/server_push_src";
+    std::list<QuicInMemoryCache::ServerPushInfo> push_resources;
+    string scheme = "http";
+    for (unsigned int i = 1; i <= num_resources; ++i) {
+      QuicStreamId stream_id = i * 2;
+      string path = partial_push_resource_path + base::UintToString(i);
+      string url = scheme + "://" + resource_host + path;
+      GURL resource_url = GURL(url);
+      string body;
+      GenerateBody(&body, body_size);
+      QuicInMemoryCache::GetInstance()->AddSimpleResponse(resource_host, path,
+                                                          200, body);
+      push_resources.push_back(QuicInMemoryCache::ServerPushInfo(
+          resource_url, SpdyHeaderBlock(), kDefaultPriority, body));
+      // PUSH_PROMISED are sent for all the resources.
+      EXPECT_CALL(
+          *headers_stream_,
+          WritePushPromiseMock(kClientDataStreamId1, stream_id, _, nullptr));
+      if (i <= kMaxStreamsForTest) {
+        // |kMaxStreamsForTest| promised responses should be sent.
+        EXPECT_CALL(
+            *headers_stream_,
+            WriteHeadersMock(stream_id, _, false, kDefaultPriority, nullptr));
+        // Since flow control window is smaller than response body, not the
+        // whole body will be sent.
+        if (!session_->force_hol_blocking()) {
+          EXPECT_CALL(*connection_,
+                      SendStreamData(stream_id, _, 0, false, nullptr))
+              .WillOnce(Return(
+                  QuicConsumedData(kStreamFlowControlWindowSize, false)));
+          EXPECT_CALL(*connection_, SendBlocked(stream_id));
+        } else {
+          // The forced HOL blocking encapsulates the stream data into
+          // HTTP/2 DATA frames within the headers stream.  HTTP/2
+          // DATA frames are limited to a max size of 16KB, so the
+          // 64KB body will be fragemented into four DATA frames.
+          EXPECT_CALL(*connection_, SendStreamData(_, _, _, false, nullptr))
+              .Times(body_size / 16384)
+              .WillOnce(Return(QuicConsumedData(9 + 16394, false)))
+              .WillOnce(Return(QuicConsumedData(9 + 16394, false)))
+              .WillOnce(Return(QuicConsumedData(9 + 16394, false)))
+              .WillOnce(Return(QuicConsumedData(9 + 16394, false)));
+          EXPECT_CALL(*connection_, SendBlocked(_));
+        }
+      }
+    }
+    session_->PromisePushResources(request_url, push_resources,
+                                   kClientDataStreamId1, request_headers);
+  }
+};
+
+INSTANTIATE_TEST_CASE_P(Tests,
+                        QuicSimpleServerSessionServerPushTest,
+                        ::testing::ValuesIn(QuicSupportedVersions()));
+
+TEST_P(QuicSimpleServerSessionServerPushTest, TestPromisePushResources) {
+  // Tests that given more than kMaxOpenStreamForTest resources, all their
+  // PUSH_PROMISE's will be sent out and only |kMaxOpenStreamForTest| streams
+  // will be opened and send push response.
+
+  if (session_->force_hol_blocking()) {
+    return;
+  }
+  size_t num_resources = kMaxStreamsForTest + 5;
+  PromisePushResources(num_resources);
+  EXPECT_EQ(kMaxStreamsForTest, session_->GetNumOpenOutgoingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionServerPushTest,
+       HandlePromisedPushRequestsAfterStreamDraining) {
+  if (session_->force_hol_blocking()) {
+    return;
+  }
+
+  // Tests that after promised stream queued up, when an opened stream is marked
+  // draining, a queued promised stream will become open and send push response.
+  size_t num_resources = kMaxStreamsForTest + 1;
+  PromisePushResources(num_resources);
+  QuicStreamId next_out_going_stream_id = num_resources * 2;
+
+  // After an open stream is marked draining, a new stream is expected to be
+  // created and a response sent on the stream.
+  EXPECT_CALL(*headers_stream_,
+              WriteHeadersMock(next_out_going_stream_id, _, false,
+                               kDefaultPriority, nullptr));
+  EXPECT_CALL(*connection_,
+              SendStreamData(next_out_going_stream_id, _, 0, false, nullptr))
+      .WillOnce(Return(QuicConsumedData(kStreamFlowControlWindowSize, false)));
+  EXPECT_CALL(*connection_, SendBlocked(next_out_going_stream_id));
+  session_->StreamDraining(2);
+  // Number of open outgoing streams should still be the same, because a new
+  // stream is opened. And the queue should be empty.
+  EXPECT_EQ(kMaxStreamsForTest, session_->GetNumOpenOutgoingStreams());
+}
+
+TEST_P(QuicSimpleServerSessionServerPushTest,
+       ResetPromisedStreamToCancelServerPush) {
+  if (session_->force_hol_blocking()) {
+    return;
+  }
+  // Tests that after all resources are promised, a RST frame from client can
+  // prevent a promised resource to be send out.
+
+  // Having two extra resources to be send later. One of them will be reset, so
+  // when opened stream become close, only one will become open.
+  size_t num_resources = kMaxStreamsForTest + 2;
+  PromisePushResources(num_resources);
+
+  // Reset the last stream in the queue. It should be marked cancelled.
+  QuicStreamId stream_got_reset = num_resources * 2;
+  QuicRstStreamFrame rst(stream_got_reset, QUIC_STREAM_CANCELLED, 0);
+  EXPECT_CALL(*connection_,
+              SendRstStream(stream_got_reset, QUIC_RST_ACKNOWLEDGEMENT, 0));
+  visitor_->OnRstStream(rst);
+
+  // When the first 2 streams becomes draining, the two queued up stream could
+  // be created. But since one of them was marked cancelled due to RST frame,
+  // only one queued resource will be sent out.
+  QuicStreamId stream_not_reset = (kMaxStreamsForTest + 1) * 2;
+  InSequence s;
+  EXPECT_CALL(*headers_stream_, WriteHeadersMock(stream_not_reset, _, false,
+                                                 kDefaultPriority, nullptr));
+  EXPECT_CALL(*connection_,
+              SendStreamData(stream_not_reset, _, 0, false, nullptr))
+      .WillOnce(Return(QuicConsumedData(kStreamFlowControlWindowSize, false)));
+  EXPECT_CALL(*connection_, SendBlocked(stream_not_reset));
+  EXPECT_CALL(*headers_stream_, WriteHeadersMock(stream_got_reset, _, false,
+                                                 kDefaultPriority, nullptr))
+      .Times(0);
+
+  session_->StreamDraining(2);
+  session_->StreamDraining(4);
+}
+
+TEST_P(QuicSimpleServerSessionServerPushTest,
+       CloseStreamToHandleMorePromisedStream) {
+  if (session_->force_hol_blocking()) {
+    return;
+  }
+  // Tests that closing a open outgoing stream can trigger a promised resource
+  // in the queue to be send out.
+  size_t num_resources = kMaxStreamsForTest + 1;
+  PromisePushResources(num_resources);
+  QuicStreamId stream_to_open = num_resources * 2;
+
+  // Resetting 1st open stream will close the stream and give space for extra
+  // stream to be opened.
+  QuicStreamId stream_got_reset = 2;
+  EXPECT_CALL(*connection_,
+              SendRstStream(stream_got_reset, QUIC_RST_ACKNOWLEDGEMENT, _));
+  EXPECT_CALL(*headers_stream_, WriteHeadersMock(stream_to_open, _, false,
+                                                 kDefaultPriority, nullptr));
+  EXPECT_CALL(*connection_,
+              SendStreamData(stream_to_open, _, 0, false, nullptr))
+      .WillOnce(Return(QuicConsumedData(kStreamFlowControlWindowSize, false)));
+
+  EXPECT_CALL(*connection_, SendBlocked(stream_to_open));
+  QuicRstStreamFrame rst(stream_got_reset, QUIC_STREAM_CANCELLED, 0);
+  visitor_->OnRstStream(rst);
+}
+
+}  // namespace
+}  // namespace test
+}  // namespace net
diff --git a/src/net/tools/quic/quic_simple_server_stream_test.cc b/src/net/tools/quic/quic_simple_server_stream_test.cc
index 69567f6..ca8ab2a 100644
--- a/src/net/tools/quic/quic_simple_server_stream_test.cc
+++ b/src/net/tools/quic/quic_simple_server_stream_test.cc
@@ -12,6 +12,7 @@
 #include "net/quic/core/spdy_utils.h"
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_stream_peer.h"
 #include "net/quic/test_tools/quic_test_utils.h"
@@ -164,8 +165,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockQuicSimpleServerSession);
 };
 
-class QuicSimpleServerStreamTest
-    : public ::testing::TestWithParam<QuicVersion> {
+class QuicSimpleServerStreamTest : public QuicTestWithParam<QuicVersion> {
  public:
   QuicSimpleServerStreamTest()
       : connection_(
diff --git a/src/net/tools/quic/quic_simple_server_test.cc b/src/net/tools/quic/quic_simple_server_test.cc
index 58cd14e..72e8282 100644
--- a/src/net/tools/quic/quic_simple_server_test.cc
+++ b/src/net/tools/quic/quic_simple_server_test.cc
@@ -7,6 +7,7 @@
 #include "net/quic/core/crypto/quic_random.h"
 #include "net/quic/core/quic_crypto_stream.h"
 #include "net/quic/core/quic_utils.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/mock_quic_dispatcher.h"
 #include "net/quic/test_tools/quic_test_utils.h"
@@ -19,7 +20,7 @@
 namespace test {
 
 // TODO(dmz) Remove "Chrome" part of name once net/tools/quic is deleted.
-class QuicChromeServerDispatchPacketTest : public ::testing::Test {
+class QuicChromeServerDispatchPacketTest : public QuicTest {
  public:
   QuicChromeServerDispatchPacketTest()
       : crypto_config_("blah",
diff --git a/src/net/tools/quic/quic_spdy_client_stream_test.cc b/src/net/tools/quic/quic_spdy_client_stream_test.cc
index dcebc1a..aaed5a7 100644
--- a/src/net/tools/quic/quic_spdy_client_stream_test.cc
+++ b/src/net/tools/quic/quic_spdy_client_stream_test.cc
@@ -11,12 +11,11 @@
 #include "net/quic/core/spdy_utils.h"
 #include "net/quic/platform/api/quic_logging.h"
 #include "net/quic/platform/api/quic_socket_address.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/tools/quic/quic_client_session.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using base::IntToString;
 using std::string;
@@ -49,7 +48,7 @@
   DISALLOW_COPY_AND_ASSIGN(MockQuicClientSession);
 };
 
-class QuicSpdyClientStreamTest : public ::testing::Test {
+class QuicSpdyClientStreamTest : public QuicTest {
  public:
   class StreamVisitor;
 
diff --git a/src/net/tools/quic/quic_spdy_server_stream_base_test.cc b/src/net/tools/quic/quic_spdy_server_stream_base_test.cc
index 95ffe48..a808691 100644
--- a/src/net/tools/quic/quic_spdy_server_stream_base_test.cc
+++ b/src/net/tools/quic/quic_spdy_server_stream_base_test.cc
@@ -5,9 +5,8 @@
 #include "net/tools/quic/quic_spdy_server_stream_base.h"
 
 #include "net/quic/platform/api/quic_ptr_util.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using testing::_;
 
@@ -23,7 +22,7 @@
   void OnDataAvailable() override {}
 };
 
-class QuicSpdyServerStreamBaseTest : public ::testing::Test {
+class QuicSpdyServerStreamBaseTest : public QuicTest {
  protected:
   QuicSpdyServerStreamBaseTest()
       : session_(new MockQuicConnection(&helper_,
diff --git a/src/net/tools/quic/quic_time_wait_list_manager.cc b/src/net/tools/quic/quic_time_wait_list_manager.cc
index 4fa077f..04ce85b 100644
--- a/src/net/tools/quic/quic_time_wait_list_manager.cc
+++ b/src/net/tools/quic/quic_time_wait_list_manager.cc
@@ -147,9 +147,7 @@
 void QuicTimeWaitListManager::ProcessPacket(
     const QuicSocketAddress& server_address,
     const QuicSocketAddress& client_address,
-    QuicConnectionId connection_id,
-    QuicPacketNumber packet_number,
-    const QuicEncryptedPacket& /*packet*/) {
+    QuicConnectionId connection_id) {
   DCHECK(IsConnectionIdInTimeWait(connection_id));
   QUIC_DLOG(INFO) << "Processing " << connection_id << " in time wait state.";
   // TODO(satyamshekhar): Think about handling packets from different client
@@ -177,7 +175,7 @@
     return;
   }
 
-  SendPublicReset(server_address, client_address, connection_id, packet_number);
+  SendPublicReset(server_address, client_address, connection_id);
 }
 
 void QuicTimeWaitListManager::SendVersionNegotiationPacket(
@@ -200,13 +198,11 @@
 void QuicTimeWaitListManager::SendPublicReset(
     const QuicSocketAddress& server_address,
     const QuicSocketAddress& client_address,
-    QuicConnectionId connection_id,
-    QuicPacketNumber rejected_packet_number) {
+    QuicConnectionId connection_id) {
   QuicPublicResetPacket packet;
   packet.public_header.connection_id = connection_id;
   packet.public_header.reset_flag = true;
   packet.public_header.version_flag = false;
-  packet.rejected_packet_number = rejected_packet_number;
   // TODO(satyamshekhar): generate a valid nonce for this connection_id.
   packet.nonce_proof = 1010101;
   packet.client_address = client_address;
diff --git a/src/net/tools/quic/quic_time_wait_list_manager.h b/src/net/tools/quic/quic_time_wait_list_manager.h
index 6e61179..f2eb505 100644
--- a/src/net/tools/quic/quic_time_wait_list_manager.h
+++ b/src/net/tools/quic/quic_time_wait_list_manager.h
@@ -85,9 +85,7 @@
   // state. virtual to override in tests.
   virtual void ProcessPacket(const QuicSocketAddress& server_address,
                              const QuicSocketAddress& client_address,
-                             QuicConnectionId connection_id,
-                             QuicPacketNumber packet_number,
-                             const QuicEncryptedPacket& packet);
+                             QuicConnectionId connection_id);
 
   // Called by the dispatcher when the underlying socket becomes writable again,
   // since we might need to send pending public reset packets which we didn't
@@ -124,8 +122,7 @@
   // Creates a public reset packet and sends it or queues it to be sent later.
   virtual void SendPublicReset(const QuicSocketAddress& server_address,
                                const QuicSocketAddress& client_address,
-                               QuicConnectionId connection_id,
-                               QuicPacketNumber rejected_packet_number);
+                               QuicConnectionId connection_id);
 
  private:
   friend class test::QuicDispatcherPeer;
diff --git a/src/net/tools/quic/quic_time_wait_list_manager_test.cc b/src/net/tools/quic/quic_time_wait_list_manager_test.cc
index 96d74d0..e81ffae 100644
--- a/src/net/tools/quic/quic_time_wait_list_manager_test.cc
+++ b/src/net/tools/quic/quic_time_wait_list_manager_test.cc
@@ -18,14 +18,13 @@
 #include "net/quic/core/quic_packets.h"
 #include "net/quic/core/quic_utils.h"
 #include "net/quic/platform/api/quic_flags.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/test_tools/quic_test_utils.h"
 #include "net/quic/test_tools/quic_time_wait_list_manager_peer.h"
 #include "net/tools/quic/quic_epoll_alarm_factory.h"
 #include "net/tools/quic/quic_epoll_connection_helper.h"
 #include "net/tools/quic/test_tools/mock_epoll_server.h"
 #include "net/tools/quic/test_tools/mock_quic_session_visitor.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 using testing::Args;
 using testing::Assign;
@@ -68,7 +67,7 @@
                void(int64_t timeout_in_us, EpollAlarmCallbackInterface* alarm));
 };
 
-class QuicTimeWaitListManagerTest : public ::testing::Test {
+class QuicTimeWaitListManagerTest : public QuicTest {
  protected:
   QuicTimeWaitListManagerTest()
       : helper_(&epoll_server_, QuicAllocator::BUFFER_POOL),
@@ -114,11 +113,9 @@
     return time_wait_list_manager_.IsConnectionIdInTimeWait(connection_id);
   }
 
-  void ProcessPacket(QuicConnectionId connection_id,
-                     QuicPacketNumber packet_number) {
-    QuicEncryptedPacket packet(nullptr, 0);
+  void ProcessPacket(QuicConnectionId connection_id) {
     time_wait_list_manager_.ProcessPacket(server_address_, client_address_,
-                                          connection_id, packet_number, packet);
+                                          connection_id);
   }
 
   QuicEncryptedPacket* ConstructEncryptedPacket(
@@ -128,7 +125,6 @@
                                                packet_number, "data");
   }
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
   NiceMock<MockFakeTimeEpollServer> epoll_server_;
   QuicEpollConnectionHelper helper_;
   QuicEpollAlarmFactory alarm_factory_;
@@ -144,9 +140,8 @@
 class ValidatePublicResetPacketPredicate
     : public MatcherInterface<const std::tr1::tuple<const char*, int>> {
  public:
-  explicit ValidatePublicResetPacketPredicate(QuicConnectionId connection_id,
-                                              QuicPacketNumber number)
-      : connection_id_(connection_id), packet_number_(number) {}
+  explicit ValidatePublicResetPacketPredicate(QuicConnectionId connection_id)
+      : connection_id_(connection_id) {}
 
   bool MatchAndExplain(
       const std::tr1::tuple<const char*, int> packet_buffer,
@@ -163,7 +158,6 @@
                                  packet.public_header.connection_id) &&
            packet.public_header.reset_flag &&
            !packet.public_header.version_flag &&
-           packet_number_ == packet.rejected_packet_number &&
            net::test::TestPeerIPAddress() == packet.client_address.host() &&
            kTestPort == packet.client_address.port();
   }
@@ -174,14 +168,11 @@
 
  private:
   QuicConnectionId connection_id_;
-  QuicPacketNumber packet_number_;
 };
 
 Matcher<const std::tr1::tuple<const char*, int>> PublicResetPacketEq(
-    QuicConnectionId connection_id,
-    QuicPacketNumber packet_number) {
-  return MakeMatcher(
-      new ValidatePublicResetPacketPredicate(connection_id, packet_number));
+    QuicConnectionId connection_id) {
+  return MakeMatcher(new ValidatePublicResetPacketPredicate(connection_id));
 }
 
 TEST_F(QuicTimeWaitListManagerTest, CheckConnectionIdInTimeWait) {
@@ -223,12 +214,11 @@
   AddConnectionId(connection_id_, QuicVersionMax(),
                   /*connection_rejected_statelessly=*/false,
                   &termination_packets);
-  const int kRandomSequenceNumber = 1;
   EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
                                    server_address_.host(), client_address_, _))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
 
-  ProcessPacket(connection_id_, kRandomSequenceNumber);
+  ProcessPacket(connection_id_);
 }
 
 TEST_F(QuicTimeWaitListManagerTest, SendTwoConnectionCloses) {
@@ -244,25 +234,23 @@
   AddConnectionId(connection_id_, QuicVersionMax(),
                   /*connection_rejected_statelessly=*/false,
                   &termination_packets);
-  const int kRandomSequenceNumber = 1;
   EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
                                    server_address_.host(), client_address_, _))
       .Times(2)
       .WillRepeatedly(Return(WriteResult(WRITE_STATUS_OK, 1)));
 
-  ProcessPacket(connection_id_, kRandomSequenceNumber);
+  ProcessPacket(connection_id_);
 }
 
 TEST_F(QuicTimeWaitListManagerTest, SendPublicReset) {
   EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
   AddConnectionId(connection_id_);
-  const int kRandomSequenceNumber = 1;
   EXPECT_CALL(writer_,
               WritePacket(_, _, server_address_.host(), client_address_, _))
-      .With(Args<0, 1>(PublicResetPacketEq(connection_id_, 0)))
+      .With(Args<0, 1>(PublicResetPacketEq(connection_id_)))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 0)));
 
-  ProcessPacket(connection_id_, kRandomSequenceNumber);
+  ProcessPacket(connection_id_);
 }
 
 TEST_F(QuicTimeWaitListManagerTest, SendPublicResetWithExponentialBackOff) {
@@ -274,7 +262,7 @@
       EXPECT_CALL(writer_, WritePacket(_, _, _, _, _))
           .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
     }
-    ProcessPacket(connection_id_, packet_number);
+    ProcessPacket(connection_id_);
     // Send public reset with exponential back off.
     if ((packet_number & (packet_number - 1)) == 0) {
       EXPECT_TRUE(QuicTimeWaitListManagerPeer::ShouldSendResponse(
@@ -289,13 +277,12 @@
 TEST_F(QuicTimeWaitListManagerTest, NoPublicResetForStatelessConnections) {
   EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
   AddStatelessConnectionId(connection_id_);
-  const int kRandomSequenceNumber = 1;
 
   EXPECT_CALL(writer_,
               WritePacket(_, _, server_address_.host(), client_address_, _))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
 
-  ProcessPacket(connection_id_, kRandomSequenceNumber);
+  ProcessPacket(connection_id_);
 }
 
 TEST_F(QuicTimeWaitListManagerTest, CleanUpOldConnectionIds) {
@@ -354,20 +341,20 @@
   // Let first write through.
   EXPECT_CALL(writer_,
               WritePacket(_, _, server_address_.host(), client_address_, _))
-      .With(Args<0, 1>(PublicResetPacketEq(connection_id, 0)))
+      .With(Args<0, 1>(PublicResetPacketEq(connection_id)))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
-  ProcessPacket(connection_id, packet_number);
+  ProcessPacket(connection_id);
 
   // write block for the next packet.
   EXPECT_CALL(writer_,
               WritePacket(_, _, server_address_.host(), client_address_, _))
-      .With(Args<0, 1>(PublicResetPacketEq(connection_id, 0)))
+      .With(Args<0, 1>(PublicResetPacketEq(connection_id)))
       .WillOnce(DoAll(Assign(&writer_is_blocked_, true),
                       Return(WriteResult(WRITE_STATUS_BLOCKED, EAGAIN))));
   EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
-  ProcessPacket(connection_id, packet_number);
+  ProcessPacket(connection_id);
   // 3rd packet. No public reset should be sent;
-  ProcessPacket(connection_id, packet_number);
+  ProcessPacket(connection_id);
 
   // write packet should not be called since we are write blocked but the
   // should be queued.
@@ -379,18 +366,18 @@
       ConstructEncryptedPacket(other_connection_id, other_packet_number));
   EXPECT_CALL(writer_, WritePacket(_, _, _, _, _)).Times(0);
   EXPECT_CALL(visitor_, OnWriteBlocked(&time_wait_list_manager_));
-  ProcessPacket(other_connection_id, other_packet_number);
+  ProcessPacket(other_connection_id);
   EXPECT_EQ(2u, time_wait_list_manager_.num_connections());
 
   // Now expect all the write blocked public reset packets to be sent again.
   writer_is_blocked_ = false;
   EXPECT_CALL(writer_,
               WritePacket(_, _, server_address_.host(), client_address_, _))
-      .With(Args<0, 1>(PublicResetPacketEq(connection_id, 0)))
+      .With(Args<0, 1>(PublicResetPacketEq(connection_id)))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, packet->length())));
   EXPECT_CALL(writer_,
               WritePacket(_, _, server_address_.host(), client_address_, _))
-      .With(Args<0, 1>(PublicResetPacketEq(other_connection_id, 0)))
+      .With(Args<0, 1>(PublicResetPacketEq(other_connection_id)))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, other_packet->length())));
   time_wait_list_manager_.OnCanWrite();
 }
@@ -442,8 +429,7 @@
                                    server_address_.host(), client_address_, _))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
 
-  const int kRandomSequenceNumber = 1;
-  ProcessPacket(connection_id_, kRandomSequenceNumber);
+  ProcessPacket(connection_id_);
 
   const QuicTime::Delta time_wait_period =
       QuicTimeWaitListManagerPeer::time_wait_period(&time_wait_list_manager_);
diff --git a/src/net/tools/quic/stateless_rejector_test.cc b/src/net/tools/quic/stateless_rejector_test.cc
index 50b5a83..190121c 100644
--- a/src/net/tools/quic/stateless_rejector_test.cc
+++ b/src/net/tools/quic/stateless_rejector_test.cc
@@ -15,6 +15,7 @@
 #include "net/quic/platform/api/quic_ptr_util.h"
 #include "net/quic/platform/api/quic_str_cat.h"
 #include "net/quic/platform/api/quic_string_piece.h"
+#include "net/quic/platform/api/quic_test.h"
 #include "net/quic/platform/api/quic_text_utils.h"
 #include "net/quic/test_tools/crypto_test_utils.h"
 #include "net/quic/test_tools/quic_crypto_server_config_peer.h"
@@ -73,7 +74,7 @@
   return params;
 }
 
-class StatelessRejectorTest : public ::testing::TestWithParam<TestParams> {
+class StatelessRejectorTest : public QuicTestWithParam<TestParams> {
  public:
   StatelessRejectorTest()
       : proof_source_(crypto_test_utils::ProofSourceForTesting()),
@@ -147,8 +148,6 @@
     StatelessRejectorTest* test_;
   };
 
-  QuicFlagSaver flags_;  // Save/restore all QUIC flag values.
-
   std::unique_ptr<ProofSource> proof_source_;
   MockClock clock_;
   QuicCryptoServerConfig config_;
diff --git a/src/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.h b/src/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.h
index a2d7fa6..5e1f5cf 100644
--- a/src/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.h
+++ b/src/net/tools/quic/test_tools/mock_quic_time_wait_list_manager.h
@@ -36,12 +36,10 @@
         termination_packets);
   }
 
-  MOCK_METHOD5(ProcessPacket,
+  MOCK_METHOD3(ProcessPacket,
                void(const QuicSocketAddress& server_address,
                     const QuicSocketAddress& client_address,
-                    QuicConnectionId connection_id,
-                    QuicPacketNumber packet_number,
-                    const QuicEncryptedPacket& packet));
+                    QuicConnectionId connection_id));
 
   MOCK_METHOD4(SendVersionNegotiationPacket,
                void(QuicConnectionId connection_id,
diff --git a/src/net/tools/quic/test_tools/quic_dispatcher_peer.cc b/src/net/tools/quic/test_tools/quic_dispatcher_peer.cc
index cf7dfe7..7f693c6 100644
--- a/src/net/tools/quic/test_tools/quic_dispatcher_peer.cc
+++ b/src/net/tools/quic/test_tools/quic_dispatcher_peer.cc
@@ -86,10 +86,9 @@
     QuicDispatcher* dispatcher,
     const QuicSocketAddress& server_address,
     const QuicSocketAddress& client_address,
-    QuicConnectionId connection_id,
-    QuicPacketNumber rejected_packet_number) {
+    QuicConnectionId connection_id) {
   dispatcher->time_wait_list_manager()->SendPublicReset(
-      server_address, client_address, connection_id, rejected_packet_number);
+      server_address, client_address, connection_id);
 }
 
 }  // namespace test
diff --git a/src/net/tools/quic/test_tools/quic_dispatcher_peer.h b/src/net/tools/quic/test_tools/quic_dispatcher_peer.h
index f035a5c..9353a60 100644
--- a/src/net/tools/quic/test_tools/quic_dispatcher_peer.h
+++ b/src/net/tools/quic/test_tools/quic_dispatcher_peer.h
@@ -52,8 +52,7 @@
   static void SendPublicReset(QuicDispatcher* dispatcher,
                               const QuicSocketAddress& server_address,
                               const QuicSocketAddress& client_address,
-                              QuicConnectionId connection_id,
-                              QuicPacketNumber rejected_packet_number);
+                              QuicConnectionId connection_id);
 
  private:
   DISALLOW_COPY_AND_ASSIGN(QuicDispatcherPeer);
diff --git a/src/net/tools/quic/test_tools/quic_test_client.cc b/src/net/tools/quic/test_tools/quic_test_client.cc
index 3e86670..0655c80 100644
--- a/src/net/tools/quic/test_tools/quic_test_client.cc
+++ b/src/net/tools/quic/test_tools/quic_test_client.cc
@@ -243,7 +243,6 @@
   for (std::pair<QuicStreamId, QuicSpdyClientStream*> stream : open_streams_) {
     stream.second->set_visitor(nullptr);
   }
-  client_->Disconnect();
 }
 
 void QuicTestClient::Initialize() {
diff --git a/src/net/url_request/report_sender.cc b/src/net/url_request/report_sender.cc
index ef56015..7bf712e 100644
--- a/src/net/url_request/report_sender.cc
+++ b/src/net/url_request/report_sender.cc
@@ -11,6 +11,7 @@
 #include "net/base/load_flags.h"
 #include "net/base/request_priority.h"
 #include "net/base/upload_bytes_element_reader.h"
+#include "net/http/http_status_code.h"
 #include "net/url_request/url_request_context.h"
 #include "net/url_request/url_request_status.h"
 
@@ -40,10 +41,8 @@
 
 namespace net {
 
-ReportSender::ReportSender(URLRequestContext* request_context,
-                           CookiesPreference cookies_preference)
-    : request_context_(request_context),
-      cookies_preference_(cookies_preference) {}
+ReportSender::ReportSender(URLRequestContext* request_context)
+    : request_context_(request_context) {}
 
 ReportSender::~ReportSender() {
 }
@@ -60,12 +59,9 @@
       &kUserDataKey,
       base::MakeUnique<CallbackInfo>(success_callback, error_callback));
 
-  int load_flags =
-      LOAD_BYPASS_CACHE | LOAD_DISABLE_CACHE | LOAD_DO_NOT_SEND_AUTH_DATA;
-  if (cookies_preference_ != SEND_COOKIES) {
-    load_flags |= LOAD_DO_NOT_SEND_COOKIES | LOAD_DO_NOT_SAVE_COOKIES;
-  }
-  url_request->SetLoadFlags(load_flags);
+  url_request->SetLoadFlags(
+      LOAD_BYPASS_CACHE | LOAD_DISABLE_CACHE | LOAD_DO_NOT_SEND_AUTH_DATA |
+      LOAD_DO_NOT_SEND_COOKIES | LOAD_DO_NOT_SAVE_COOKIES);
 
   HttpRequestHeaders extra_headers;
   extra_headers.SetHeader(HttpRequestHeaders::kContentType, content_type);
@@ -93,11 +89,15 @@
   if (net_error != OK) {
     DVLOG(1) << "Failed to send report for " << request->url().host();
     if (!callback_info->error_callback().is_null())
-      callback_info->error_callback().Run(request->url(), net_error);
-  } else if (!callback_info->success_callback().is_null()) {
-    callback_info->success_callback().Run();
+      callback_info->error_callback().Run(request->url(), net_error, -1);
+  } else if (request->GetResponseCode() != net::HTTP_OK) {
+    if (!callback_info->error_callback().is_null())
+      callback_info->error_callback().Run(request->url(), OK,
+                                          request->GetResponseCode());
+  } else {
+    if (!callback_info->success_callback().is_null())
+      callback_info->success_callback().Run();
   }
-
   CHECK_GT(inflight_requests_.erase(request), 0u);
 }
 
diff --git a/src/net/url_request/report_sender.h b/src/net/url_request/report_sender.h
index a230f06..7ba8302 100644
--- a/src/net/url_request/report_sender.h
+++ b/src/net/url_request/report_sender.h
@@ -31,17 +31,13 @@
       public TransportSecurityState::ReportSenderInterface {
  public:
   using SuccessCallback = base::Callback<void()>;
-  using ErrorCallback = base::Callback<void(const GURL&, int)>;
-
-  // Represents whether or not to send cookies along with reports.
-  enum CookiesPreference { SEND_COOKIES, DO_NOT_SEND_COOKIES };
+  using ErrorCallback = base::Callback<
+      void(const GURL&, int /* net_error */, int /* http_response_code */)>;
 
   // Constructs a ReportSender that sends reports with the
-  // given |request_context| and includes or excludes cookies based on
-  // |cookies_preference|. |request_context| must outlive the
-  // ReportSender.
-  ReportSender(URLRequestContext* request_context,
-               CookiesPreference cookies_preference);
+  // given |request_context|, always excluding cookies. |request_context| must
+  // outlive the ReportSender.
+  explicit ReportSender(URLRequestContext* request_context);
 
   ~ReportSender() override;
 
@@ -58,9 +54,6 @@
 
  private:
   net::URLRequestContext* const request_context_;
-
-  CookiesPreference cookies_preference_;
-
   std::map<URLRequest*, std::unique_ptr<URLRequest>> inflight_requests_;
 
   DISALLOW_COPY_AND_ASSIGN(ReportSender);
diff --git a/src/net/url_request/report_sender_unittest.cc b/src/net/url_request/report_sender_unittest.cc
index 3865730..c4e8da4 100644
--- a/src/net/url_request/report_sender_unittest.cc
+++ b/src/net/url_request/report_sender_unittest.cc
@@ -14,8 +14,11 @@
 #include "net/base/upload_bytes_element_reader.h"
 #include "net/base/upload_data_stream.h"
 #include "net/base/upload_element_reader.h"
+#include "net/http/http_response_headers.h"
+#include "net/http/http_status_code.h"
 #include "net/test/url_request/url_request_failed_job.h"
 #include "net/test/url_request/url_request_mock_data_job.h"
+#include "net/test/url_request/url_request_mock_http_job.h"
 #include "net/url_request/url_request_filter.h"
 #include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -25,6 +28,7 @@
 
 const char kDummyReport[] = "foo.test";
 const char kSecondDummyReport[] = "foo2.test";
+const char kServerErrorHostname[] = "mock.server.error";
 
 void MarkURLRequestDestroyed(bool* url_request_destroyed) {
   *url_request_destroyed = true;
@@ -47,10 +51,24 @@
   EXPECT_EQ(1u, expect_reports->erase(upload_data));
 }
 
-// Provides an error callback for report sending that sets |called| to
-// true.
-void ErrorCallback(bool* called, const GURL& report_uri, int net_error) {
+// Error callback for a report with a net error.
+void ErrorCallback(bool* called,
+                   const GURL& report_uri,
+                   int net_error,
+                   int http_response_code) {
   EXPECT_NE(OK, net_error);
+  EXPECT_EQ(-1, http_response_code);
+  *called = true;
+}
+
+// Error callback for a report with a non-200 HTTP response code and no net
+// errors.
+void ServerErrorResponseCallback(bool* called,
+                                 const GURL& report_uri,
+                                 int net_error,
+                                 int http_response_code) {
+  EXPECT_EQ(OK, net_error);
+  EXPECT_EQ(HTTP_INTERNAL_SERVER_ERROR, http_response_code);
   *called = true;
 }
 
@@ -58,6 +76,41 @@
   *called = true;
 }
 
+// URLRequestJob that returns an HTTP 500 response.
+class MockServerErrorJob : public URLRequestJob {
+ public:
+  MockServerErrorJob(URLRequest* request, NetworkDelegate* network_delegate)
+      : URLRequestJob(request, network_delegate) {}
+  ~MockServerErrorJob() override {}
+
+ protected:
+  void GetResponseInfo(HttpResponseInfo* info) override {
+    info->headers = new HttpResponseHeaders(
+        "HTTP/1.1 500 Internal Server Error\n"
+        "Content-type: text/plain\n"
+        "Content-Length: 0\n");
+  }
+  void Start() override { NotifyHeadersComplete(); }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockServerErrorJob);
+};
+
+class MockServerErrorJobInterceptor : public URLRequestInterceptor {
+ public:
+  MockServerErrorJobInterceptor() {}
+  ~MockServerErrorJobInterceptor() override {}
+
+  URLRequestJob* MaybeInterceptRequest(
+      URLRequest* request,
+      NetworkDelegate* network_delegate) const override {
+    return new MockServerErrorJob(request, network_delegate);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockServerErrorJobInterceptor);
+};
+
 // A network delegate that lets tests check that a report
 // was sent. It counts the number of requests and lets tests register a
 // callback to run when the request is destroyed. It also checks that
@@ -67,8 +120,7 @@
   TestReportSenderNetworkDelegate()
       : url_request_destroyed_callback_(base::Bind(&base::DoNothing)),
         all_url_requests_destroyed_callback_(base::Bind(&base::DoNothing)),
-        num_requests_(0),
-        expect_cookies_(false) {}
+        num_requests_(0) {}
 
   void ExpectReport(const std::string& report) {
     expect_reports_.insert(report);
@@ -86,11 +138,6 @@
 
   size_t num_requests() const { return num_requests_; }
 
-  // Sets whether cookies are expected to be sent on requests.
-  void set_expect_cookies(bool expect_cookies) {
-    expect_cookies_ = expect_cookies;
-  }
-
   void set_expected_content_type(const std::string& content_type) {
     expected_content_type_ = content_type;
   }
@@ -102,14 +149,8 @@
     num_requests_++;
     EXPECT_EQ(expect_url_, request->url());
     EXPECT_STRCASEEQ("POST", request->method().data());
-
-    if (expect_cookies_) {
-      EXPECT_FALSE(request->load_flags() & LOAD_DO_NOT_SEND_COOKIES);
-      EXPECT_FALSE(request->load_flags() & LOAD_DO_NOT_SAVE_COOKIES);
-    } else {
-      EXPECT_TRUE(request->load_flags() & LOAD_DO_NOT_SEND_COOKIES);
-      EXPECT_TRUE(request->load_flags() & LOAD_DO_NOT_SAVE_COOKIES);
-    }
+    EXPECT_TRUE(request->load_flags() & LOAD_DO_NOT_SEND_COOKIES);
+    EXPECT_TRUE(request->load_flags() & LOAD_DO_NOT_SAVE_COOKIES);
 
     const HttpRequestHeaders& extra_headers = request->extra_request_headers();
     std::string content_type;
@@ -136,7 +177,6 @@
   size_t num_requests_;
   GURL expect_url_;
   std::set<std::string> expect_reports_;
-  bool expect_cookies_;
   std::string expected_content_type_;
 
   DISALLOW_COPY_AND_ASSIGN(TestReportSenderNetworkDelegate);
@@ -152,6 +192,10 @@
   void SetUp() override {
     URLRequestFailedJob::AddUrlHandler();
     URLRequestMockDataJob::AddUrlHandler();
+    URLRequestFilter::GetInstance()->AddHostnameInterceptor(
+        "http", kServerErrorHostname,
+        std::unique_ptr<URLRequestInterceptor>(
+            new MockServerErrorJobInterceptor()));
   }
 
   void TearDown() override { URLRequestFilter::GetInstance()->ClearHandlers(); }
@@ -165,7 +209,7 @@
       const GURL& url,
       size_t request_sequence_number,
       const base::Callback<void()>& success_callback,
-      const base::Callback<void(const GURL&, int)>& error_callback) {
+      const base::Callback<void(const GURL&, int, int)>& error_callback) {
     base::RunLoop run_loop;
     network_delegate_.set_url_request_destroyed_callback(
         run_loop.QuitClosure());
@@ -191,8 +235,9 @@
                   const std::string& report,
                   const GURL& url,
                   size_t request_sequence_number) {
-    SendReport(reporter, report, url, request_sequence_number, base::Closure(),
-               base::Callback<void(const GURL&, int)>());
+    SendReport(reporter, report, url, request_sequence_number,
+               base::Callback<void()>(),
+               base::Callback<void(const GURL&, int, int)>());
   }
 
   TestReportSenderNetworkDelegate network_delegate_;
@@ -205,13 +250,13 @@
 // endpoint and sends the expected data.
 TEST_F(ReportSenderTest, SendsRequest) {
   GURL url = URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
+  ReportSender reporter(context());
   SendReport(&reporter, kDummyReport, url, 0);
 }
 
 TEST_F(ReportSenderTest, SendMultipleReportsSequentially) {
   GURL url = URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
+  ReportSender reporter(context());
   SendReport(&reporter, kDummyReport, url, 0);
   SendReport(&reporter, kDummyReport, url, 1);
 }
@@ -227,14 +272,16 @@
   network_delegate_.ExpectReport(kSecondDummyReport);
   network_delegate_.set_expected_content_type("application/foobar");
 
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
+  ReportSender reporter(context());
 
   EXPECT_EQ(0u, network_delegate_.num_requests());
 
-  reporter.Send(url, "application/foobar", kDummyReport, base::Closure(),
-                base::Callback<void(const GURL&, int)>());
-  reporter.Send(url, "application/foobar", kSecondDummyReport, base::Closure(),
-                base::Callback<void(const GURL&, int)>());
+  reporter.Send(url, "application/foobar", kDummyReport,
+                base::Callback<void()>(),
+                base::Callback<void(const GURL&, int, int)>());
+  reporter.Send(url, "application/foobar", kSecondDummyReport,
+                base::Callback<void()>(),
+                base::Callback<void(const GURL&, int, int)>());
 
   run_loop.Run();
 
@@ -256,10 +303,10 @@
 
   EXPECT_EQ(0u, network_delegate_.num_requests());
 
-  std::unique_ptr<ReportSender> reporter(
-      new ReportSender(context(), ReportSender::DO_NOT_SEND_COOKIES));
-  reporter->Send(url, "application/foobar", kDummyReport, base::Closure(),
-                 base::Callback<void(const GURL&, int)>());
+  std::unique_ptr<ReportSender> reporter(new ReportSender(context()));
+  reporter->Send(url, "application/foobar", kDummyReport,
+                 base::Callback<void()>(),
+                 base::Callback<void(const GURL&, int, int)>());
   reporter.reset();
 
   EXPECT_EQ(1u, network_delegate_.num_requests());
@@ -269,7 +316,7 @@
 // Test that a request that returns an error gets cleaned up.
 TEST_F(ReportSenderTest, ErroredRequestGetsDeleted) {
   GURL url = URLRequestFailedJob::GetMockHttpsUrl(ERR_FAILED);
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
+  ReportSender reporter(context());
   // SendReport will block until the URLRequest is destroyed.
   SendReport(&reporter, kDummyReport, url, 0);
 }
@@ -279,8 +326,8 @@
 TEST_F(ReportSenderTest, ErroredRequestCallsErrorCallback) {
   bool error_callback_called = false;
   bool success_callback_called = false;
-  GURL url = URLRequestFailedJob::GetMockHttpsUrl(ERR_FAILED);
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
+  const GURL url = URLRequestFailedJob::GetMockHttpsUrl(ERR_FAILED);
+  ReportSender reporter(context());
   // SendReport will block until the URLRequest is destroyed.
   SendReport(&reporter, kDummyReport, url, 0,
              base::Bind(SuccessCallback, &success_callback_called),
@@ -289,13 +336,29 @@
   EXPECT_FALSE(success_callback_called);
 }
 
+// Test that the error callback, if provided, gets called when a request
+// finishes successfully but results in a server error, and the success callback
+// doesn't get called.
+TEST_F(ReportSenderTest, BadResponseCodeCallsErrorCallback) {
+  bool error_callback_called = false;
+  bool success_callback_called = false;
+  const GURL url(std::string("http://") + kServerErrorHostname);
+  ReportSender reporter(context());
+  // SendReport will block until the URLRequest is destroyed.
+  SendReport(&reporter, kDummyReport, url, 0,
+             base::Bind(SuccessCallback, &success_callback_called),
+             base::Bind(ServerErrorResponseCallback, &error_callback_called));
+  EXPECT_TRUE(error_callback_called);
+  EXPECT_FALSE(success_callback_called);
+}
+
 // Test that the error callback does not get called and the success callback
 /// gets called when a request does not return an error.
 TEST_F(ReportSenderTest, SuccessfulRequestCallsSuccessCallback) {
   bool error_callback_called = false;
   bool success_callback_called = false;
-  GURL url = URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
+  const GURL url = URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
+  ReportSender reporter(context());
   SendReport(&reporter, kDummyReport, url, 0,
              base::Bind(SuccessCallback, &success_callback_called),
              base::Bind(ErrorCallback, &error_callback_called));
@@ -303,24 +366,5 @@
   EXPECT_TRUE(success_callback_called);
 }
 
-// Test that cookies are sent or not sent according to the error
-// reporter's cookies preference.
-
-TEST_F(ReportSenderTest, SendCookiesPreference) {
-  GURL url = URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
-  ReportSender reporter(context(), ReportSender::SEND_COOKIES);
-
-  network_delegate_.set_expect_cookies(true);
-  SendReport(&reporter, kDummyReport, url, 0);
-}
-
-TEST_F(ReportSenderTest, DoNotSendCookiesPreference) {
-  GURL url = URLRequestMockDataJob::GetMockHttpsUrl("dummy data", 1);
-  ReportSender reporter(context(), ReportSender::DO_NOT_SEND_COOKIES);
-
-  network_delegate_.set_expect_cookies(false);
-  SendReport(&reporter, kDummyReport, url, 0);
-}
-
 }  // namespace
 }  // namespace net
diff --git a/src/net/url_request/test_url_fetcher_factory.cc b/src/net/url_request/test_url_fetcher_factory.cc
index e714a20..ec9a454 100644
--- a/src/net/url_request/test_url_fetcher_factory.cc
+++ b/src/net/url_request/test_url_fetcher_factory.cc
@@ -21,6 +21,7 @@
 #include "net/base/net_errors.h"
 #include "net/base/upload_data_stream.h"
 #include "net/http/http_response_headers.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_fetcher_impl.h"
 #include "net/url_request/url_fetcher_response_writer.h"
@@ -485,7 +486,8 @@
     const GURL& url,
     URLFetcher::RequestType request_type,
     URLFetcherDelegate* d) {
-  return std::unique_ptr<URLFetcher>(new URLFetcherImpl(url, request_type, d));
+  return std::unique_ptr<URLFetcher>(
+      new URLFetcherImpl(url, request_type, d, TRAFFIC_ANNOTATION_FOR_TESTS));
 }
 
 }  // namespace net
diff --git a/src/net/url_request/url_fetcher.cc b/src/net/url_request/url_fetcher.cc
index a6ed109..6f020a8 100644
--- a/src/net/url_request/url_fetcher.cc
+++ b/src/net/url_request/url_fetcher.cc
@@ -25,10 +25,7 @@
     const GURL& url,
     URLFetcher::RequestType request_type,
     URLFetcherDelegate* d) {
-  URLFetcherFactory* factory = URLFetcherImpl::factory();
-  return factory ? factory->CreateURLFetcher(id, url, request_type, d)
-                 : std::unique_ptr<URLFetcher>(
-                       new URLFetcherImpl(url, request_type, d));
+  return Create(id, url, request_type, d, NO_TRAFFIC_ANNOTATION_YET);
 }
 
 // static
@@ -47,9 +44,10 @@
     URLFetcher::RequestType request_type,
     URLFetcherDelegate* d,
     NetworkTrafficAnnotationTag traffic_annotation) {
-  // traffic_annotation is just a tag that is extracted during static
-  // code analysis and can be ignored here.
-  return Create(id, url, request_type, d);
+  URLFetcherFactory* factory = URLFetcherImpl::factory();
+  return factory ? factory->CreateURLFetcher(id, url, request_type, d)
+                 : std::unique_ptr<URLFetcher>(new URLFetcherImpl(
+                       url, request_type, d, traffic_annotation));
 }
 
 // static
diff --git a/src/net/url_request/url_fetcher_core.cc b/src/net/url_request/url_fetcher_core.cc
index 98edef6..a4727c7 100644
--- a/src/net/url_request/url_fetcher_core.cc
+++ b/src/net/url_request/url_fetcher_core.cc
@@ -71,10 +71,12 @@
 base::LazyInstance<URLFetcherCore::Registry>::DestructorAtExit
     URLFetcherCore::g_registry = LAZY_INSTANCE_INITIALIZER;
 
-URLFetcherCore::URLFetcherCore(URLFetcher* fetcher,
-                               const GURL& original_url,
-                               URLFetcher::RequestType request_type,
-                               URLFetcherDelegate* d)
+URLFetcherCore::URLFetcherCore(
+    URLFetcher* fetcher,
+    const GURL& original_url,
+    URLFetcher::RequestType request_type,
+    URLFetcherDelegate* d,
+    net::NetworkTrafficAnnotationTag traffic_annotation)
     : fetcher_(fetcher),
       original_url_(original_url),
       request_type_(request_type),
@@ -103,7 +105,8 @@
       max_retries_on_network_changes_(0),
       current_upload_bytes_(-1),
       current_response_bytes_(0),
-      total_response_bytes_(-1) {
+      total_response_bytes_(-1),
+      traffic_annotation_(traffic_annotation) {
   CHECK(original_url_.is_valid());
 }
 
@@ -552,7 +555,7 @@
   current_response_bytes_ = 0;
   request_context_getter_->AddObserver(this);
   request_ = request_context_getter_->GetURLRequestContext()->CreateRequest(
-      original_url_, DEFAULT_PRIORITY, this);
+      original_url_, DEFAULT_PRIORITY, this, traffic_annotation_);
   int flags = request_->load_flags() | load_flags_;
 
   // TODO(mmenke): This should really be with the other code to set the upload
diff --git a/src/net/url_request/url_fetcher_core.h b/src/net/url_request/url_fetcher_core.h
index db0e8a1..53bcf62 100644
--- a/src/net/url_request/url_fetcher_core.h
+++ b/src/net/url_request/url_fetcher_core.h
@@ -20,6 +20,7 @@
 #include "net/base/chunked_upload_data_stream.h"
 #include "net/base/host_port_pair.h"
 #include "net/http/http_request_headers.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context_getter_observer.h"
@@ -47,7 +48,8 @@
   URLFetcherCore(URLFetcher* fetcher,
                  const GURL& original_url,
                  URLFetcher::RequestType request_type,
-                 URLFetcherDelegate* d);
+                 URLFetcherDelegate* d,
+                 net::NetworkTrafficAnnotationTag traffic_annotation);
 
   // Starts the load. It's important that this not happen in the constructor
   // because it causes the IO thread to begin AddRef()ing and Release()ing
@@ -346,6 +348,8 @@
   // Total expected bytes to receive (-1 if it cannot be determined).
   int64_t total_response_bytes_;
 
+  const net::NetworkTrafficAnnotationTag traffic_annotation_;
+
   static base::LazyInstance<Registry>::DestructorAtExit g_registry;
 
   DISALLOW_COPY_AND_ASSIGN(URLFetcherCore);
diff --git a/src/net/url_request/url_fetcher_impl.cc b/src/net/url_request/url_fetcher_impl.cc
index bdeee40..05605f5 100644
--- a/src/net/url_request/url_fetcher_impl.cc
+++ b/src/net/url_request/url_fetcher_impl.cc
@@ -17,11 +17,13 @@
 
 static URLFetcherFactory* g_factory = NULL;
 
-URLFetcherImpl::URLFetcherImpl(const GURL& url,
-                               RequestType request_type,
-                               URLFetcherDelegate* d)
-    : core_(new URLFetcherCore(this, url, request_type, d)) {
-}
+URLFetcherImpl::URLFetcherImpl(
+    const GURL& url,
+    RequestType request_type,
+    URLFetcherDelegate* d,
+    net::NetworkTrafficAnnotationTag traffic_annotation)
+    : core_(
+          new URLFetcherCore(this, url, request_type, d, traffic_annotation)) {}
 
 URLFetcherImpl::~URLFetcherImpl() {
   core_->Stop();
diff --git a/src/net/url_request/url_fetcher_impl.h b/src/net/url_request/url_fetcher_impl.h
index 810b5b4..f52b812 100644
--- a/src/net/url_request/url_fetcher_impl.h
+++ b/src/net/url_request/url_fetcher_impl.h
@@ -20,6 +20,7 @@
 
 #include "base/macros.h"
 #include "net/base/net_export.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
 #include "net/url_request/url_fetcher.h"
 
 namespace net {
@@ -34,7 +35,8 @@
   // |d| the object that will receive the callback on fetch completion.
   URLFetcherImpl(const GURL& url,
                  RequestType request_type,
-                 URLFetcherDelegate* d);
+                 URLFetcherDelegate* d,
+                 net::NetworkTrafficAnnotationTag traffic_annotation);
   ~URLFetcherImpl() override;
 
   // URLFetcher implementation:
diff --git a/src/net/url_request/url_fetcher_impl_unittest.cc b/src/net/url_request/url_fetcher_impl_unittest.cc
index 62777bf..df54de0 100644
--- a/src/net/url_request/url_fetcher_impl_unittest.cc
+++ b/src/net/url_request/url_fetcher_impl_unittest.cc
@@ -42,6 +42,7 @@
 #include "net/http/http_response_headers.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 #include "net/test/gtest_util.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_test_util.h"
@@ -95,7 +96,8 @@
       const GURL& url,
       URLFetcher::RequestType request_type,
       scoped_refptr<net::URLRequestContextGetter> context_getter) {
-    fetcher_.reset(new URLFetcherImpl(url, request_type, this));
+    fetcher_.reset(new URLFetcherImpl(url, request_type, this,
+                                      TRAFFIC_ANNOTATION_FOR_TESTS));
     fetcher_->SetRequestContext(context_getter.get());
   }
 
diff --git a/src/net/url_request/url_request_context_builder.cc b/src/net/url_request/url_request_context_builder.cc
index a64544e..ab0fda6 100644
--- a/src/net/url_request/url_request_context_builder.cc
+++ b/src/net/url_request/url_request_context_builder.cc
@@ -334,7 +334,6 @@
 #endif  // !defined(OS_LINUX) && !defined(OS_ANDROID)
     proxy_service_ = ProxyService::CreateUsingSystemProxyResolver(
         std::move(proxy_config_service_),
-        0,  // This results in using the default value.
         context->net_log());
   }
   storage->set_proxy_service(std::move(proxy_service_));
diff --git a/src/net/url_request/url_request_data_job_fuzzer.cc b/src/net/url_request/url_request_data_job_fuzzer.cc
index 82b6047..d996079 100644
--- a/src/net/url_request/url_request_data_job_fuzzer.cc
+++ b/src/net/url_request/url_request_data_job_fuzzer.cc
@@ -13,6 +13,7 @@
 #include "base/test/scoped_task_scheduler.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/http/http_request_headers.h"
+#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
 #include "net/url_request/data_protocol_handler.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_job_factory_impl.h"
@@ -80,8 +81,8 @@
 
     // Create a URLRequest with the given data URL and start reading
     // from it.
-    std::unique_ptr<net::URLRequest> request =
-        context_.CreateRequest(data_url, net::DEFAULT_PRIORITY, this);
+    std::unique_ptr<net::URLRequest> request = context_.CreateRequest(
+        data_url, net::DEFAULT_PRIORITY, this, TRAFFIC_ANNOTATION_FOR_TESTS);
     if (use_range) {
       if (!net::HttpUtil::IsValidHeaderValue(range))
         range = "bytes=3-";
diff --git a/src/net/url_request/url_request_simple_job.cc b/src/net/url_request/url_request_simple_job.cc
index f5bbb24..0e95ae6 100644
--- a/src/net/url_request/url_request_simple_job.cc
+++ b/src/net/url_request/url_request_simple_job.cc
@@ -13,7 +13,6 @@
 #include "base/single_thread_task_runner.h"
 #include "base/task_scheduler/post_task.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "base/threading/worker_pool.h"
 #include "net/base/io_buffer.h"
 #include "net/base/net_errors.h"
 #include "net/http/http_request_headers.h"
diff --git a/src/net/url_request/url_request_test_job.cc b/src/net/url_request/url_request_test_job.cc
index ab359b4..a3512f9 100644
--- a/src/net/url_request/url_request_test_job.cc
+++ b/src/net/url_request/url_request_test_job.cc
@@ -296,12 +296,6 @@
   load_timing_info->request_start_time = request_start_time;
 }
 
-int URLRequestTestJob::GetResponseCode() const {
-  if (response_headers_.get())
-    return response_headers_->response_code();
-  return -1;
-}
-
 int64_t URLRequestTestJob::GetTotalReceivedBytes() const {
   return response_headers_length_ + offset_;
 }
diff --git a/src/net/url_request/url_request_test_job.h b/src/net/url_request/url_request_test_job.h
index 7082678..cd899bc 100644
--- a/src/net/url_request/url_request_test_job.h
+++ b/src/net/url_request/url_request_test_job.h
@@ -138,7 +138,6 @@
   bool GetMimeType(std::string* mime_type) const override;
   void GetResponseInfo(HttpResponseInfo* info) override;
   void GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override;
-  int GetResponseCode() const override;
   int64_t GetTotalReceivedBytes() const override;
   bool IsRedirectResponse(GURL* location, int* http_status_code) override;
 
diff --git a/src/net/url_request/url_request_unittest.cc b/src/net/url_request/url_request_unittest.cc
index 22833ca..2021906 100644
--- a/src/net/url_request/url_request_unittest.cc
+++ b/src/net/url_request/url_request_unittest.cc
@@ -725,12 +725,12 @@
   MockCertificateReportSender() {}
   ~MockCertificateReportSender() override {}
 
-  void Send(
-      const GURL& report_uri,
-      base::StringPiece content_type,
-      base::StringPiece report,
-      const base::Callback<void()>& success_callback,
-      const base::Callback<void(const GURL&, int)>& error_callback) override {
+  void Send(const GURL& report_uri,
+            base::StringPiece content_type,
+            base::StringPiece report,
+            const base::Callback<void()>& success_callback,
+            const base::Callback<void(const GURL&, int, int)>& error_callback)
+      override {
     latest_report_uri_ = report_uri;
     report.CopyToString(&latest_report_);
     content_type.CopyToString(&latest_content_type_);
@@ -6639,10 +6639,12 @@
     std::string header_value;
   };
 
-  ~TestReportingService() override {}
-
   const std::vector<Header>& headers() { return headers_; }
 
+  // ReportingService implementation:
+
+  ~TestReportingService() override {}
+
   void QueueReport(const GURL& url,
                    const std::string& group,
                    const std::string& type,
@@ -9720,10 +9722,7 @@
 // several tests are effected because our testing EV certificate won't be
 // recognised as EV.
 static bool SystemUsesChromiumEVMetadata() {
-#if defined(USE_OPENSSL_CERTS) && !defined(OS_ANDROID)
-  // http://crbug.com/117478 - OpenSSL does not support EV validation.
-  return false;
-#elif defined(OS_ANDROID)
+#if defined(OS_ANDROID)
   // On Android, we use the system to tell us whether a certificate is EV or not
   // and the system won't recognise our testing root.
   return false;
diff --git a/src/net/websockets/websocket_channel.cc b/src/net/websockets/websocket_channel.cc
index da32e2e..8310aec 100644
--- a/src/net/websockets/websocket_channel.cc
+++ b/src/net/websockets/websocket_channel.cc
@@ -477,7 +477,8 @@
 
     pending_received_frames_.pop();
   }
-  if (pending_received_frames_.empty() && has_received_close_frame_) {
+  if (!InClosingState() && pending_received_frames_.empty() &&
+      has_received_close_frame_) {
     // We've been waiting for the client to consume the frames before
     // responding to the closing handshake initiated by the server.
     return RespondToClosingHandshake();
diff --git a/src/net/websockets/websocket_channel_test.cc b/src/net/websockets/websocket_channel_test.cc
index 7a50c41..d5ceae8 100644
--- a/src/net/websockets/websocket_channel_test.cc
+++ b/src/net/websockets/websocket_channel_test.cc
@@ -2542,6 +2542,39 @@
   checkpoint.Call(4);
 }
 
+// SendFlowControl calls should not trigger multiple close respond frames.
+TEST_F(WebSocketChannelFlowControlTest, DoNotSendMultipleCloseRespondFrames) {
+  std::unique_ptr<ReadableFakeWebSocketStream> stream(
+      new ReadableFakeWebSocketStream);
+  static constexpr InitFrame frames[] = {
+      {FINAL_FRAME, WebSocketFrameHeader::kOpCodeText, NOT_MASKED,
+       "FIRST SECOND"},
+      {FINAL_FRAME, WebSocketFrameHeader::kOpCodeClose, NOT_MASKED,
+       CLOSE_DATA(NORMAL_CLOSURE, "GOOD BYE")},
+  };
+  stream->PrepareReadFrames(ReadableFakeWebSocketStream::SYNC, OK, frames);
+  set_stream(std::move(stream));
+  Checkpoint checkpoint;
+  InSequence s;
+  EXPECT_CALL(*event_interface_, OnAddChannelResponse(_, _));
+  EXPECT_CALL(*event_interface_, OnFlowControl(_));
+  EXPECT_CALL(*event_interface_,
+              OnDataFrameVector(false, WebSocketFrameHeader::kOpCodeText,
+                                AsVector("FIRST ")));
+  EXPECT_CALL(checkpoint, Call(1));
+  EXPECT_CALL(*event_interface_,
+              OnDataFrameVector(true, WebSocketFrameHeader::kOpCodeContinuation,
+                                AsVector("SECOND")));
+  EXPECT_CALL(*event_interface_, OnClosingHandshake());
+  EXPECT_CALL(checkpoint, Call(2));
+
+  CreateChannelAndConnectWithQuota(6);
+  checkpoint.Call(1);
+  ASSERT_EQ(CHANNEL_ALIVE, channel_->SendFlowControl(6));
+  checkpoint.Call(2);
+  ASSERT_EQ(CHANNEL_ALIVE, channel_->SendFlowControl(6));
+}
+
 // RFC6455 5.1 "a client MUST mask all frames that it sends to the server".
 // WebSocketChannel actually only sets the mask bit in the header, it doesn't
 // perform masking itself (not all transports actually use masking).
diff --git a/src/testing/buildbot/chromium.android.fyi.json b/src/testing/buildbot/chromium.android.fyi.json
index 1a34b3e..6180531 100644
--- a/src/testing/buildbot/chromium.android.fyi.json
+++ b/src/testing/buildbot/chromium.android.fyi.json
@@ -761,7 +761,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -777,7 +777,8 @@
               ],
               "name": "shard #${SHARD_INDEX} logcats"
             }
-          ]
+          ],
+          "shards": 2
         },
         "test": "android_webview_test_apk"
       },
@@ -794,7 +795,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -827,7 +828,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -863,7 +864,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -896,7 +897,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -929,7 +930,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -965,7 +966,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -981,7 +982,8 @@
               ],
               "name": "shard #${SHARD_INDEX} logcats"
             }
-          ]
+          ],
+          "shards": 6
         },
         "test": "chrome_public_test_apk"
       },
@@ -1001,7 +1003,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1034,7 +1036,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1067,7 +1069,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1100,7 +1102,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1116,7 +1118,8 @@
               ],
               "name": "shard #${SHARD_INDEX} logcats"
             }
-          ]
+          ],
+          "shards": 4
         },
         "test": "content_browsertests"
       },
@@ -1136,7 +1139,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1169,7 +1172,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1202,7 +1205,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1235,7 +1238,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1268,7 +1271,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1301,7 +1304,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1334,7 +1337,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1367,7 +1370,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1400,7 +1403,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1433,7 +1436,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1466,7 +1469,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1499,7 +1502,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1535,7 +1538,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1568,7 +1571,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1601,7 +1604,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1634,7 +1637,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1667,7 +1670,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1700,7 +1703,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1733,7 +1736,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -1766,7 +1769,7 @@
           ],
           "dimension_sets": [
             {
-              "android_devices": "4",
+              "android_devices": "1",
               "device_os": "NRD91N",
               "device_type": "bullhead"
             }
@@ -2607,19 +2610,6 @@
         "test": "mojo_common_unittests"
       },
       {
-        "override_isolate_target": "mojo_public_application_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "device_type": "coho"
-            }
-          ]
-        },
-        "test": "mojo_public_application_unittests"
-      },
-      {
         "override_isolate_target": "mojo_public_bindings_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -3151,20 +3141,6 @@
         "test": "mojo_common_unittests"
       },
       {
-        "override_isolate_target": "mojo_public_application_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "4",
-              "device_type": "gce_x86"
-            }
-          ],
-          "hard_timeout": 60
-        },
-        "test": "mojo_public_application_unittests"
-      },
-      {
         "override_isolate_target": "mojo_public_bindings_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
diff --git a/src/testing/buildbot/chromium.android.json b/src/testing/buildbot/chromium.android.json
index 4ff354e..9b5599a 100644
--- a/src/testing/buildbot/chromium.android.json
+++ b/src/testing/buildbot/chromium.android.json
@@ -809,38 +809,6 @@
         "test": "mojo_common_unittests"
       },
       {
-        "override_isolate_target": "mojo_public_application_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "android_devices": "4",
-              "device_os": "MMB29Q",
-              "device_type": "bullhead"
-            }
-          ],
-          "hard_timeout": 60,
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
-        },
-        "test": "mojo_public_application_unittests"
-      },
-      {
         "override_isolate_target": "mojo_public_bindings_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
diff --git a/src/testing/buildbot/chromium.chromiumos.json b/src/testing/buildbot/chromium.chromiumos.json
index 0cb94d8..3a59678 100644
--- a/src/testing/buildbot/chromium.chromiumos.json
+++ b/src/testing/buildbot/chromium.chromiumos.json
@@ -251,7 +251,7 @@
           "--override-use-software-gl-for-tests",
           "--test-launcher-filter-file=../../testing/buildbot/filters/mash.browser_tests.filter"
         ],
-        "hard_timeout": 60,
+        "hard_timeout": 15,
         "swarming": {
           "can_use_on_swarming_builders": true
         },
@@ -299,7 +299,7 @@
           "--override-use-software-gl-for-tests",
           "--test-launcher-filter-file=../../testing/buildbot/filters/mus.browser_tests.filter"
         ],
-        "hard_timeout": 60,
+        "hard_timeout": 15,
         "swarming": {
           "can_use_on_swarming_builders": true
         },
diff --git a/src/testing/buildbot/chromium.fyi.json b/src/testing/buildbot/chromium.fyi.json
index d06725f..c8c0afb 100644
--- a/src/testing/buildbot/chromium.fyi.json
+++ b/src/testing/buildbot/chromium.fyi.json
@@ -3135,19 +3135,6 @@
         "test": "mojo_common_unittests"
       },
       {
-        "override_isolate_target": "mojo_public_application_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "device_type": "coho"
-            }
-          ]
-        },
-        "test": "mojo_public_application_unittests"
-      },
-      {
         "override_isolate_target": "mojo_public_bindings_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -11783,6 +11770,21 @@
       }
     ]
   },
+  "Mojo Linux": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--enable-network-service",
+          "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter"
+        ],
+        "name": "network_service_content_browsertests",
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "content_browsertests"
+      }
+    ]
+  },
   "Mojo Windows": {
     "additional_compile_targets": [
       "mash:all"
@@ -12922,6 +12924,11 @@
         "name": "webkit_layout_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Mac-10.12"
+            }
+          ],
           "shards": 1
         }
       }
@@ -12934,6 +12941,11 @@
         "name": "webkit_layout_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
+          "dimension_sets": [
+            {
+              "os": "Windows-10-10240"
+            }
+          ],
           "shards": 1
         }
       }
diff --git a/src/testing/buildbot/chromium.gpu.fyi.json b/src/testing/buildbot/chromium.gpu.fyi.json
index dc052fb..476512a 100644
--- a/src/testing/buildbot/chromium.gpu.fyi.json
+++ b/src/testing/buildbot/chromium.gpu.fyi.json
@@ -2722,29 +2722,13 @@
       }
     ]
   },
-  "GPU Linux Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Linux Builder": {},
   "GPU Linux Builder (dbg)": {},
-  "GPU Mac Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Mac Builder": {},
   "GPU Mac Builder (dbg)": {},
-  "GPU Win Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Win Builder": {},
   "GPU Win Builder (dbg)": {},
-  "GPU Win x64 Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Win x64 Builder": {},
   "GPU Win x64 Builder (dbg)": {},
   "Linux ChromiumOS Builder": {
     "additional_compile_targets": [
@@ -6251,6 +6235,432 @@
       }
     ]
   },
+  "Mac Experimental Release (Intel)": {
+    "gtest_tests": [
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "angle_end2end_tests",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests",
+          "--test-launcher-retry-limit=0"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "angle_unittests",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "audio_unittests",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--enable-gpu",
+          "--no-xvfb",
+          "--test-launcher-jobs=1",
+          "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*"
+        ],
+        "name": "tab_capture_end2end_tests",
+        "swarming": {
+          "can_use_on_swarming_builders": false
+        },
+        "test": "browser_tests",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "gl_tests",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "gl_unittests",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "gles2_conform_test",
+        "use_xvfb": false
+      },
+      {
+        "args": [
+          "--gtest_filter=*Detection*",
+          "--use-gpu-in-tests"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        },
+        "test": "service_unittests",
+        "use_xvfb": false
+      }
+    ],
+    "isolated_scripts": [
+      {
+        "args": [
+          "context_lost",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "context_lost_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "depth_capture",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "depth_capture_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "gpu_process",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "gpu_process_launch_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "hardware_accelerated_feature",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "hardware_accelerated_feature_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "info_collection",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--expected-vendor-id",
+          "8086",
+          "--expected-device-id",
+          "0a2e"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "info_collection_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "maps",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--os-type",
+          "mac",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "maps_pixel_test",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "pixel",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--refimg-cloud-storage-bucket",
+          "chromium-gpu-archive/reference-images",
+          "--os-type",
+          "mac",
+          "--build-revision",
+          "${got_revision}",
+          "--test-machine-name",
+          "${buildername}"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "pixel_test",
+        "non_precommit_args": [
+          "--upload-refimg-to-cloud-storage"
+        ],
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "precommit_args": [
+          "--download-refimg-from-cloud-storage"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "screenshot_sync",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "screenshot_sync_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "trace_test",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "trace_test",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc",
+          "--webgl-conformance-version=2.0.1",
+          "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "webgl2_conformance_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ],
+          "shards": 15
+        }
+      },
+      {
+        "args": [
+          "webgl_conformance",
+          "--show-stdout",
+          "--browser=release",
+          "--passthrough",
+          "-v",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc"
+        ],
+        "isolate_name": "telemetry_gpu_integration_test",
+        "name": "webgl_conformance_tests",
+        "override_compile_targets": [
+          "telemetry_gpu_integration_test"
+        ],
+        "swarming": {
+          "can_use_on_swarming_builders": false,
+          "dimension_sets": [
+            {
+              "gpu": "8086:0a2e",
+              "os": "Mac"
+            }
+          ]
+        }
+      }
+    ]
+  },
   "Mac Experimental Retina Release (AMD)": {
     "gtest_tests": [
       {
diff --git a/src/testing/buildbot/chromium.gpu.json b/src/testing/buildbot/chromium.gpu.json
index 52236dc..4d562ae 100644
--- a/src/testing/buildbot/chromium.gpu.json
+++ b/src/testing/buildbot/chromium.gpu.json
@@ -1,23 +1,11 @@
 {
   "AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
   "AAAAA2 See generate_buildbot_json.py to make changes": {},
-  "GPU Linux Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Linux Builder": {},
   "GPU Linux Builder (dbg)": {},
-  "GPU Mac Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Mac Builder": {},
   "GPU Mac Builder (dbg)": {},
-  "GPU Win Builder": {
-    "additional_compile_targets": [
-      "browser_tests"
-    ]
-  },
+  "GPU Win Builder": {},
   "GPU Win Builder (dbg)": {},
   "Linux Debug (NVIDIA)": {
     "gtest_tests": [
diff --git a/src/testing/buildbot/chromium.linux.json b/src/testing/buildbot/chromium.linux.json
index d39de42..3012a48 100644
--- a/src/testing/buildbot/chromium.linux.json
+++ b/src/testing/buildbot/chromium.linux.json
@@ -67,6 +67,15 @@
         "test": "android_webview_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "android_webview_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "android_webview_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -98,6 +107,15 @@
         "test": "android_webview_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "base_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "base_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -129,6 +147,15 @@
         "test": "base_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "blink_heap_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "blink_heap_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -161,6 +188,15 @@
         "test": "blink_heap_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "breakpad_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "breakpad_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -192,6 +228,15 @@
         "test": "breakpad_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "capture_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "capture_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -342,6 +387,15 @@
         "test": "chrome_sync_shell_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "components_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "components_browsertests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -373,6 +427,15 @@
         "test": "components_browsertests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "components_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "components_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -404,6 +467,15 @@
         "test": "components_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "content_browsertests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -480,6 +552,15 @@
         "test": "content_shell_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "content_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -511,6 +592,15 @@
         "test": "content_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "device_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "device_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -542,6 +632,15 @@
         "test": "device_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "events_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "events_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -573,6 +672,15 @@
         "test": "events_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gl_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gl_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -604,6 +712,15 @@
         "test": "gl_tests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gl_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gl_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -636,6 +753,15 @@
         "test": "gl_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gpu_ipc_service_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gpu_ipc_service_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -667,6 +793,15 @@
         "test": "gpu_ipc_service_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gpu_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gpu_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -698,6 +833,15 @@
         "test": "gpu_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ipc_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ipc_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -760,6 +904,15 @@
         "test": "libjingle_xmpp_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "media_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "media_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -791,6 +944,15 @@
         "test": "media_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_common_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "mojo_common_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -823,38 +985,15 @@
         "test": "mojo_common_unittests"
       },
       {
-        "override_isolate_target": "mojo_public_application_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_public_bindings_unittests"
           ],
-          "dimension_sets": [
-            {
-              "android_devices": "4",
-              "device_os": "KTU84P",
-              "device_type": "hammerhead"
-            }
-          ],
-          "hard_timeout": 60,
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "test": "mojo_public_application_unittests"
-      },
-      {
         "override_isolate_target": "mojo_public_bindings_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -887,6 +1026,15 @@
         "test": "mojo_public_bindings_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_public_system_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "mojo_public_system_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -919,6 +1067,15 @@
         "test": "mojo_public_system_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_system_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "mojo_system_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -951,6 +1108,15 @@
         "test": "mojo_system_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_compile_targets": [
           "mojo_test_apk"
         ],
@@ -986,6 +1152,15 @@
         "test": "mojo_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "net_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "net_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1017,6 +1192,15 @@
         "test": "net_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "sandbox_linux_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "sandbox_linux_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1048,6 +1232,15 @@
         "test": "sandbox_linux_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "sql_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "sql_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1079,6 +1272,15 @@
         "test": "sql_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "storage_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "storage_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1110,6 +1312,15 @@
         "test": "storage_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_android_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ui_android_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1141,6 +1352,15 @@
         "test": "ui_android_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_base_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ui_base_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1172,6 +1392,15 @@
         "test": "ui_base_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_touch_selection_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ui_touch_selection_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1203,6 +1432,15 @@
         "test": "ui_touch_selection_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "unit_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "unit_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1349,6 +1587,15 @@
         "test": "android_webview_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "android_webview_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "android_webview_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1380,6 +1627,15 @@
         "test": "android_webview_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "base_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "base_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1411,6 +1667,15 @@
         "test": "base_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "blink_heap_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "blink_heap_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1443,6 +1708,15 @@
         "test": "blink_heap_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "breakpad_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "breakpad_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1474,6 +1748,15 @@
         "test": "breakpad_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "capture_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "capture_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1565,7 +1848,7 @@
               "device_type": "hammerhead"
             }
           ],
-          "hard_timeout": 1800,
+          "hard_timeout": 2400,
           "output_links": [
             {
               "link": [
@@ -1624,6 +1907,15 @@
         "test": "chrome_sync_shell_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "components_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "components_browsertests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1655,6 +1947,15 @@
         "test": "components_browsertests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "components_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "components_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1686,6 +1987,15 @@
         "test": "components_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_browsertests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "content_browsertests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1762,6 +2072,15 @@
         "test": "content_shell_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "content_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "content_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1793,6 +2112,15 @@
         "test": "content_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "device_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "device_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1824,6 +2152,15 @@
         "test": "device_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "events_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "events_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1855,6 +2192,15 @@
         "test": "events_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gl_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gl_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1886,6 +2232,15 @@
         "test": "gl_tests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gl_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gl_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1918,6 +2273,15 @@
         "test": "gl_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gpu_ipc_service_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gpu_ipc_service_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1949,6 +2313,15 @@
         "test": "gpu_ipc_service_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "gpu_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "gpu_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1980,6 +2353,15 @@
         "test": "gpu_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ipc_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ipc_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2042,6 +2424,15 @@
         "test": "libjingle_xmpp_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "media_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "media_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2073,6 +2464,15 @@
         "test": "media_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_common_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "mojo_common_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2105,38 +2505,15 @@
         "test": "mojo_common_unittests"
       },
       {
-        "override_isolate_target": "mojo_public_application_unittests",
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_public_bindings_unittests"
           ],
-          "dimension_sets": [
-            {
-              "android_devices": "4",
-              "device_os": "KTU84P",
-              "device_type": "hammerhead"
-            }
-          ],
-          "hard_timeout": 60,
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "test": "mojo_public_application_unittests"
-      },
-      {
         "override_isolate_target": "mojo_public_bindings_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2169,6 +2546,15 @@
         "test": "mojo_public_bindings_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_public_system_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "mojo_public_system_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2201,6 +2587,15 @@
         "test": "mojo_public_system_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_system_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "mojo_system_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2233,6 +2628,15 @@
         "test": "mojo_system_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "mojo_test_apk"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_compile_targets": [
           "mojo_test_apk"
         ],
@@ -2268,6 +2672,15 @@
         "test": "mojo_test_apk"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "net_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "net_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2299,6 +2712,15 @@
         "test": "net_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "sandbox_linux_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "sandbox_linux_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2362,6 +2784,15 @@
         "test": "service_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "sql_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "sql_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2393,6 +2824,15 @@
         "test": "sql_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "storage_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "storage_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2424,6 +2864,15 @@
         "test": "storage_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_android_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ui_android_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2455,6 +2904,15 @@
         "test": "ui_android_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_base_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ui_base_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2486,6 +2944,15 @@
         "test": "ui_base_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "ui_touch_selection_unittests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "ui_touch_selection_unittests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2517,6 +2984,15 @@
         "test": "ui_touch_selection_unittests"
       },
       {
+        "merge": {
+          "args": [
+            "--bucket",
+            "chromium-result-details",
+            "--test-name",
+            "unit_tests"
+          ],
+          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
+        },
         "override_isolate_target": "unit_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -2998,6 +3474,18 @@
       },
       {
         "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "blink_heap_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "blink_platform_unittests"
+      },
+      {
+        "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 5
         },
@@ -3367,12 +3855,6 @@
         "swarming": {
           "can_use_on_swarming_builders": true
         },
-        "test": "mojo_public_application_unittests"
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "mojo_public_bindings_unittests"
       },
       {
@@ -3573,7 +4055,19 @@
         "swarming": {
           "can_use_on_swarming_builders": true
         },
+        "test": "webkit_unit_tests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
         "test": "wm_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "wtf_unittests"
       }
     ],
     "isolated_scripts": [
@@ -4049,12 +4543,6 @@
         "swarming": {
           "can_use_on_swarming_builders": true
         },
-        "test": "mojo_public_application_unittests"
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "mojo_public_bindings_unittests"
       },
       {
diff --git a/src/testing/buildbot/chromium.mac.json b/src/testing/buildbot/chromium.mac.json
index 4f946b4..4ca881b 100644
--- a/src/testing/buildbot/chromium.mac.json
+++ b/src/testing/buildbot/chromium.mac.json
@@ -1295,6 +1295,18 @@
       },
       {
         "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "blink_heap_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "blink_platform_unittests"
+      },
+      {
+        "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 10
         },
@@ -1606,6 +1618,18 @@
           "can_use_on_swarming_builders": true
         },
         "test": "views_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "webkit_unit_tests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "wtf_unittests"
       }
     ],
     "isolated_scripts": [
diff --git a/src/testing/buildbot/chromium.perf.fyi.json b/src/testing/buildbot/chromium.perf.fyi.json
index 85eee41..30c67a4 100644
--- a/src/testing/buildbot/chromium.perf.fyi.json
+++ b/src/testing/buildbot/chromium.perf.fyi.json
@@ -139,7 +139,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -169,7 +169,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -241,65 +241,6 @@
       },
       {
         "args": [
-          "blink_perf.canvas",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.canvas",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.canvas",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.canvas.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "blink_perf.css",
           "-v",
           "--upload-results",
@@ -316,7 +257,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -346,7 +287,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -375,7 +316,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -405,7 +346,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -434,7 +375,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -464,7 +405,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -493,7 +434,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -523,7 +464,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -552,7 +493,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -582,7 +523,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -611,7 +552,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -641,66 +582,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -729,7 +611,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -759,7 +641,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -788,7 +670,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -818,7 +700,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -965,7 +847,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -995,125 +877,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blob_storage.blob_storage",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blob_storage.blob_storage",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blob_storage.blob_storage",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blob_storage.blob_storage.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1142,7 +906,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1172,7 +936,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1201,7 +965,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1231,7 +995,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1319,7 +1083,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1349,597 +1113,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1968,7 +1142,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -1998,7 +1172,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build245-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2027,7 +1201,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2057,153 +1231,6 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
               "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
@@ -2211,95 +1238,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -2322,7 +1260,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2352,7 +1290,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2440,7 +1378,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2470,7 +1408,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2499,7 +1437,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2529,66 +1467,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -2896,65 +1775,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -2971,183 +1791,6 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.mse_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.mse_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.tough_video_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.tough_video_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.tough_video_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.tough_video_cases_extra",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.tough_video_cases_extra",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.tough_video_cases_extra",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.tough_video_cases_extra.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
               "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
@@ -3161,7 +1804,7 @@
       },
       {
         "args": [
-          "media.tough_video_cases_tbmv2",
+          "media.mse_cases",
           "-v",
           "--upload-results",
           "--output-format=chartjson",
@@ -3169,7 +1812,7 @@
           "--output-trace-tag=_ref"
         ],
         "isolate_name": "telemetry_perf_tests",
-        "name": "media.tough_video_cases_tbmv2.reference",
+        "name": "media.mse_cases.reference",
         "override_compile_targets": [
           "telemetry_perf_tests"
         ],
@@ -3309,124 +1952,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -3443,7 +1968,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -3473,7 +1998,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -3502,7 +2027,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -3532,7 +2057,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -3679,7 +2204,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -3709,302 +2234,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oortonline",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oortonline",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oortonline",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oortonline.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4033,7 +2263,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4063,65 +2293,6 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.basic_oopif",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.basic_oopif",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.basic_oopif",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.basic_oopif.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
               "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
@@ -4312,65 +2483,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.intl_ja_zh",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.intl_ja_zh",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.intl_ja_zh",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.intl_ja_zh.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.intl_ko_th_vi",
           "-v",
           "--upload-results",
@@ -4446,7 +2558,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4476,7 +2588,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4548,124 +2660,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.typical_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.typical_25",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.typical_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.typical_25.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2_site_isolation.basic_oopif",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2_site_isolation.basic_oopif",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2_site_isolation.basic_oopif",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2_site_isolation.basic_oopif.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.android_acceptance",
           "-v",
           "--upload-results",
@@ -4770,7 +2764,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4800,7 +2794,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4829,7 +2823,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4859,7 +2853,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4888,7 +2882,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -4918,66 +2912,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5006,7 +2941,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5036,7 +2971,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5108,537 +3043,6 @@
       },
       {
         "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.partial_invalidation",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.partial_invalidation",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.partial_invalidation",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.partial_invalidation.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.top_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.top_25",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.top_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.top_25.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "scheduler.tough_scheduling_cases",
           "-v",
           "--upload-results",
@@ -5655,7 +3059,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5685,7 +3089,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5714,7 +3118,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5744,7 +3148,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build245-m4--device6",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5773,7 +3177,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5803,7 +3207,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build245-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5832,7 +3236,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -5862,7 +3266,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6009,7 +3413,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6039,7 +3443,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build249-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6068,7 +3472,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6098,302 +3502,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization_and_decoding.image_decoding_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization_and_decoding.image_decoding_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.image_decoding_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.image_decoding_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.image_decoding_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.image_decoding_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_desktop_move_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_desktop_move_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_desktop_move_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_desktop_move_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6642,65 +3751,6 @@
       },
       {
         "args": [
-          "smoothness.scrolling_tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.scrolling_tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.scrolling_tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.scrolling_tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.simple_mobile_sites",
           "-v",
           "--upload-results",
@@ -6835,7 +3885,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6865,7 +3915,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6894,7 +3944,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -6924,125 +3974,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_canvas_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_canvas_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_canvas_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_canvas_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7071,7 +4003,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7101,66 +4033,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_image_decode_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_image_decode_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_image_decode_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_image_decode_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7189,7 +4062,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7219,66 +4092,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device3",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7307,7 +4121,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7337,7 +4151,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7366,7 +4180,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7396,7 +4210,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7425,7 +4239,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7455,125 +4269,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_webgl_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_webgl_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_webgl_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_webgl_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "spaceport",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "spaceport",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "spaceport",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "spaceport.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build248-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -7674,65 +4370,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -7763,124 +4400,6 @@
       },
       {
         "args": [
-          "start_with_ext.cold.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_ext.cold.blank_page",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_ext.cold.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_ext.cold.blank_page.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_ext.warm.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_ext.warm.blank_page",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_ext.warm.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_ext.warm.blank_page.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "start_with_url.cold.startup_pages",
           "-v",
           "--upload-results",
@@ -7999,301 +4518,6 @@
       },
       {
         "args": [
-          "startup.cold.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.cold.blank_page",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.cold.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.cold.blank_page.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.large_profile.cold.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.large_profile.cold.blank_page",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.large_profile.cold.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.large_profile.cold.blank_page.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.large_profile.warm.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.large_profile.warm.blank_page",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.large_profile.warm.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.large_profile.warm.blank_page.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.blank_page",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.blank_page",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.blank_page.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "storage.indexeddb_endure",
           "-v",
           "--upload-results",
@@ -8310,7 +4534,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -8340,7 +4564,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device7",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -8369,7 +4593,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -8399,66 +4623,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
+              "id": "build248-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -8825,183 +4990,6 @@
       },
       {
         "args": [
-          "tab_switching.typical_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "tab_switching.typical_25",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "tab_switching.typical_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "tab_switching.typical_25.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device3",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "thread_times.key_hit_test_cases",
           "-v",
           "--upload-results",
@@ -9018,7 +5006,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9048,7 +5036,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device5",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9490,7 +5478,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9520,7 +5508,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9549,7 +5537,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9579,7 +5567,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device2",
+              "id": "build248-m4--device3",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9608,7 +5596,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
+              "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -9638,183 +5626,6 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device2",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
               "id": "build248-m4--device4",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
@@ -9946,65 +5757,6 @@
       },
       {
         "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -10021,7 +5773,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -10051,7 +5803,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device6",
+              "id": "build248-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -10080,7 +5832,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -10110,184 +5862,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device1",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build245-m4--device4",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build249-m4--device1",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -10418,65 +5993,6 @@
       },
       {
         "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.mobile_infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -10536,242 +6052,6 @@
       },
       {
         "args": [
-          "v8.runtime_stats.top_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtime_stats.top_25",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtime_stats.top_25",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtime_stats.top_25.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device5",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.runtimestats.browsing_mobile",
           "-v",
           "--upload-results",
@@ -10890,65 +6170,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build248-m4--device6",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -10965,7 +6186,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -10995,7 +6216,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device2",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11024,7 +6245,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11054,7 +6275,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device4",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11083,7 +6304,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11113,7 +6334,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build249-m4--device3",
+              "id": "build249-m4--device7",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11142,7 +6363,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11172,7 +6393,7 @@
           "dimension_sets": [
             {
               "android_devices": "1",
-              "id": "build248-m4--device6",
+              "id": "build249-m4--device5",
               "os": "Android",
               "pool": "Chrome-perf-fyi"
             }
@@ -11244,65 +6465,6 @@
       },
       {
         "args": [
-          "webrtc.webrtc_smoothness",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=android-chromium"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "webrtc.webrtc_smoothness",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "webrtc.webrtc_smoothness",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "webrtc.webrtc_smoothness.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "android_devices": "1",
-              "id": "build249-m4--device7",
-              "os": "Android",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "webrtc.webrtc_smoothness_tbmv2",
           "-v",
           "--upload-results",
@@ -11520,7 +6682,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11550,7 +6712,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11638,7 +6800,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11668,7 +6830,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11697,7 +6859,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11727,7 +6889,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11756,7 +6918,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11786,7 +6948,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11815,7 +6977,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11845,7 +7007,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11874,7 +7036,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11904,7 +7066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11933,7 +7095,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11963,7 +7125,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -11992,7 +7154,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12022,66 +7184,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build149-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12110,7 +7213,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12140,7 +7243,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12169,7 +7272,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12199,125 +7302,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12346,7 +7331,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12376,7 +7361,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12405,7 +7390,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12435,7 +7420,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12468,65 +7453,6 @@
       },
       {
         "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "dromaeo.domcoreattr",
           "-v",
           "--upload-results",
@@ -12543,7 +7469,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12573,7 +7499,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12602,7 +7528,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12632,7 +7558,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12661,7 +7587,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12691,7 +7617,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12720,7 +7646,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -12750,330 +7676,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build144-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build144-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build150-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build150-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
               "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -13081,272 +7683,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build154-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build154-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -13369,7 +7705,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13399,7 +7735,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13428,7 +7764,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13458,7 +7794,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13491,242 +7827,6 @@
       },
       {
         "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build153-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build153-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "image_decoding.image_decoding_measurement",
           "-v",
           "--upload-results",
@@ -13743,7 +7843,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13773,7 +7873,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13802,7 +7902,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13832,7 +7932,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build142-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13861,7 +7961,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13891,7 +7991,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13920,7 +8020,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13950,7 +8050,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -13983,124 +8083,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -14160,65 +8142,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -14337,65 +8260,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -14412,7 +8276,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14442,7 +8306,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14471,7 +8335,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14501,7 +8365,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14530,7 +8394,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14560,7 +8424,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14632,65 +8496,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build137-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build137-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -14750,124 +8555,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -14884,7 +8571,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14914,7 +8601,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build147-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14943,7 +8630,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -14973,125 +8660,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15120,7 +8689,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15150,243 +8719,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build149-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build148-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15415,7 +8748,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15445,7 +8778,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15474,7 +8807,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15504,7 +8837,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15533,7 +8866,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15563,7 +8896,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -15871,65 +9204,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -16064,7 +9338,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16094,7 +9368,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16127,65 +9401,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build153-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build153-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -16231,7 +9446,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16261,7 +9476,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16290,7 +9505,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16320,7 +9535,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16349,7 +9564,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16379,66 +9594,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build153-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16467,7 +9623,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16497,243 +9653,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build136-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build136-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16762,7 +9682,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16792,66 +9712,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16880,7 +9741,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -16910,94 +9771,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
               "id": "build147-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -17005,95 +9778,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -17116,7 +9800,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17146,7 +9830,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17175,7 +9859,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17205,7 +9889,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17234,7 +9918,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17264,7 +9948,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17336,124 +10020,6 @@
       },
       {
         "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build137-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build137-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.gpu_rasterization.tough_filters_cases",
           "-v",
           "--upload-results",
@@ -17470,7 +10036,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17500,7 +10066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17529,7 +10095,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17559,125 +10125,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17706,7 +10154,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17736,7 +10184,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build146-b1",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17765,7 +10213,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17795,7 +10243,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17824,7 +10272,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -17854,124 +10302,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build142-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
               "id": "build142-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -18044,65 +10374,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -18119,7 +10390,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18149,125 +10420,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build136-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build136-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build144-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18296,7 +10449,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18326,7 +10479,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18355,7 +10508,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18385,7 +10538,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build152-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18473,7 +10626,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18503,7 +10656,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build154-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18532,7 +10685,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18562,7 +10715,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18591,7 +10744,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18621,7 +10774,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18650,7 +10803,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18680,66 +10833,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18827,7 +10921,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18857,7 +10951,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build154-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18886,7 +10980,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18916,7 +11010,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18945,7 +11039,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -18975,7 +11069,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build146-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19063,7 +11157,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19135,65 +11229,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build139-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build139-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -19211,7 +11246,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19342,124 +11377,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -19476,7 +11393,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19506,7 +11423,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build155-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19594,7 +11511,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19624,7 +11541,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19653,7 +11570,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19683,66 +11600,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build143-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19771,7 +11629,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19801,7 +11659,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build148-b1",
+              "id": "build145-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19830,7 +11688,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19860,66 +11718,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -19991,65 +11790,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build139-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build139-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -20109,65 +11849,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -20302,7 +11983,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
+              "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -20332,271 +12013,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build147-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build146-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build148-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build148-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build151-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
               "id": "build47-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -20604,272 +12020,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build47-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build143-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build150-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build150-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -20892,7 +12042,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -20922,7 +12072,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build149-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -20951,7 +12101,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -20981,7 +12131,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21010,7 +12160,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21040,7 +12190,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build48-b4",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21148,7 +12298,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21178,7 +12328,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build151-b1",
+              "id": "build150-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21250,242 +12400,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build141-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build155-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build152-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -21502,7 +12416,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21532,7 +12446,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build149-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21561,7 +12475,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21591,7 +12505,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build153-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21663,65 +12577,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build154-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build154-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -21738,7 +12593,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -21768,243 +12623,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build145-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build136-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build136-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build148-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build148-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build138-b1",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22194,242 +12813,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build148-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build148-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build140-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build137-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build137-b1",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:22b1",
-              "id": "build48-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -22446,7 +12829,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22476,7 +12859,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build144-b1",
+              "id": "build48-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22505,7 +12888,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22535,7 +12918,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build141-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22564,7 +12947,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22594,7 +12977,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build47-b4",
+              "id": "build151-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22623,7 +13006,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22653,7 +13036,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build150-b1",
+              "id": "build153-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22741,7 +13124,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22771,7 +13154,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:22b1",
-              "id": "build155-b1",
+              "id": "build152-b1",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -22981,7 +13364,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23011,7 +13394,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23099,7 +13482,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23129,7 +13512,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23158,7 +13541,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23188,7 +13571,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23217,7 +13600,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23247,7 +13630,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23276,7 +13659,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23306,7 +13689,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23335,7 +13718,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23365,7 +13748,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23394,7 +13777,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23424,7 +13807,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23453,7 +13836,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23483,66 +13866,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build213-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23571,7 +13895,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23601,7 +13925,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23630,7 +13954,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23660,125 +13984,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23807,7 +14013,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23837,7 +14043,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23866,7 +14072,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23896,66 +14102,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -23984,7 +14131,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24014,7 +14161,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24043,7 +14190,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24073,7 +14220,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24102,7 +14249,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24132,7 +14279,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24161,7 +14308,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24191,330 +14338,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build208-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build208-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build214-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build214-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
               "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -24522,272 +14345,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build218-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build218-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -24810,7 +14367,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24840,7 +14397,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24869,7 +14426,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -24899,243 +14456,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build217-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build217-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25164,7 +14485,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25194,7 +14515,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25223,7 +14544,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25253,7 +14574,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build206-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25282,7 +14603,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25312,7 +14633,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25341,7 +14662,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25371,7 +14692,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25384,124 +14705,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -25561,65 +14764,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -25738,65 +14882,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -25813,7 +14898,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25843,7 +14928,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25872,7 +14957,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25902,7 +14987,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25931,7 +15016,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -25961,7 +15046,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26033,65 +15118,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build186-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build186-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -26151,124 +15177,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -26285,7 +15193,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26315,7 +15223,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build211-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26344,7 +15252,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26374,125 +15282,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26521,7 +15311,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26551,243 +15341,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build213-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build212-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26816,7 +15370,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26846,7 +15400,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26875,7 +15429,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26905,7 +15459,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26934,7 +15488,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -26964,7 +15518,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27272,65 +15826,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -27465,7 +15960,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27495,66 +15990,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build217-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27612,7 +16048,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27642,7 +16078,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27671,7 +16107,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27701,7 +16137,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27730,7 +16166,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27760,66 +16196,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build217-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27848,7 +16225,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -27878,243 +16255,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build171-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build171-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28143,7 +16284,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28173,66 +16314,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28261,7 +16343,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28291,94 +16373,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
               "id": "build211-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -28386,95 +16380,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -28497,7 +16402,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28527,7 +16432,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28556,7 +16461,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28586,7 +16491,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28615,7 +16520,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28645,7 +16550,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28717,124 +16622,6 @@
       },
       {
         "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build186-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build186-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.gpu_rasterization.tough_filters_cases",
           "-v",
           "--upload-results",
@@ -28851,7 +16638,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28881,7 +16668,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28910,7 +16697,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -28940,125 +16727,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29087,7 +16756,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29117,7 +16786,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build210-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29146,7 +16815,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29176,7 +16845,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29205,7 +16874,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29235,124 +16904,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build206-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
               "id": "build206-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -29425,65 +16976,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -29500,7 +16992,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29530,125 +17022,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build171-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build171-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build208-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29677,7 +17051,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29707,7 +17081,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29736,7 +17110,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29766,7 +17140,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build216-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29854,7 +17228,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29884,7 +17258,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build218-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29913,7 +17287,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29943,7 +17317,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -29972,7 +17346,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30002,7 +17376,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30031,7 +17405,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30061,66 +17435,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30208,7 +17523,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30238,7 +17553,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build218-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30267,7 +17582,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30297,7 +17612,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30326,7 +17641,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30356,7 +17671,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build210-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30444,7 +17759,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30516,65 +17831,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build203-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build203-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -30592,7 +17848,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30723,124 +17979,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -30857,7 +17995,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30887,7 +18025,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build219-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -30975,7 +18113,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31005,7 +18143,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31034,7 +18172,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31064,66 +18202,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build207-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31152,7 +18231,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31182,7 +18261,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build212-b4",
+              "id": "build209-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31211,7 +18290,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31241,66 +18320,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31372,65 +18392,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build203-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build203-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -31490,65 +18451,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -31683,7 +18585,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
+              "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -31713,271 +18615,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build211-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build210-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build212-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build212-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build215-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
               "id": "build220-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
@@ -31985,272 +18622,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build220-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build207-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build214-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build214-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -32273,7 +18644,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32303,7 +18674,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build213-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32332,7 +18703,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32362,7 +18733,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32391,7 +18762,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32421,7 +18792,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build221-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32509,7 +18880,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32539,7 +18910,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build215-b4",
+              "id": "build214-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32611,242 +18982,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build205-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build219-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build216-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -32863,7 +18998,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32893,7 +19028,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build213-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32922,7 +19057,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -32952,7 +19087,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build217-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33024,65 +19159,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build218-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build218-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -33099,7 +19175,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33129,243 +19205,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build209-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build171-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build171-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build212-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build212-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build202-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33555,242 +19395,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build212-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build212-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build204-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build186-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build186-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:9874",
-              "id": "build221-b4",
-              "os": "Windows-10-10586",
-              "pool": "Chrome-perf-fyi"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -33807,7 +19411,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33837,7 +19441,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build208-b4",
+              "id": "build221-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33866,7 +19470,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33896,7 +19500,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build205-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33925,7 +19529,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33955,7 +19559,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build220-b4",
+              "id": "build215-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -33984,7 +19588,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -34014,7 +19618,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build214-b4",
+              "id": "build217-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -34102,7 +19706,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
@@ -34132,7 +19736,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:9874",
-              "id": "build219-b4",
+              "id": "build216-b4",
               "os": "Windows-10-10586",
               "pool": "Chrome-perf-fyi"
             }
diff --git a/src/testing/buildbot/chromium.perf.json b/src/testing/buildbot/chromium.perf.json
index 7f01752..07f1802 100644
--- a/src/testing/buildbot/chromium.perf.json
+++ b/src/testing/buildbot/chromium.perf.json
@@ -206,7 +206,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -236,7 +236,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -324,7 +324,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -354,7 +354,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -383,7 +383,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -413,7 +413,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -678,7 +678,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -708,66 +708,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -796,7 +737,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -826,7 +767,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -855,7 +796,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -885,124 +826,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -1091,7 +914,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1121,66 +944,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1209,7 +973,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1239,7 +1003,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1268,7 +1032,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1298,7 +1062,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1327,7 +1091,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1357,7 +1121,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1386,7 +1150,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -1416,94 +1180,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -1511,508 +1187,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -2035,7 +1209,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2065,7 +1239,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2094,7 +1268,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2124,94 +1298,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -2219,154 +1305,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -2389,7 +1327,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2419,7 +1357,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2448,7 +1386,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2478,7 +1416,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2507,7 +1445,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2537,7 +1475,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -2609,124 +1547,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -2786,65 +1606,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -2963,65 +1724,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -3038,7 +1740,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3068,7 +1770,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3097,7 +1799,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3127,7 +1829,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3156,7 +1858,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3186,7 +1888,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3278,65 +1980,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -3396,124 +2039,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -3530,7 +2055,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3560,7 +2085,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3589,7 +2114,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3619,125 +2144,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3766,7 +2173,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -3796,35 +2203,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -3832,213 +2210,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -4061,7 +2232,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4091,7 +2262,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4120,7 +2291,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4150,7 +2321,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4179,7 +2350,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4209,7 +2380,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4517,65 +2688,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -4710,7 +2822,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4740,66 +2852,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4857,7 +2910,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4887,7 +2940,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -4975,7 +3028,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5005,66 +3058,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5093,7 +3087,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5123,243 +3117,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5388,7 +3146,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5418,66 +3176,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5506,7 +3205,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5536,184 +3235,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5742,7 +3264,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5772,7 +3294,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5801,7 +3323,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5831,7 +3353,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5860,7 +3382,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5890,7 +3412,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5919,7 +3441,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -5949,125 +3471,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6155,7 +3559,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6185,35 +3589,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -6221,95 +3596,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -6332,7 +3618,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6362,7 +3648,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6391,7 +3677,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6421,7 +3707,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6450,7 +3736,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6480,35 +3766,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -6516,95 +3773,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -6670,65 +3838,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -6745,7 +3854,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6775,125 +3884,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6922,7 +3913,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6952,7 +3943,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -6981,7 +3972,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7011,7 +4002,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7099,7 +4090,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7129,7 +4120,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7217,7 +4208,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7247,7 +4238,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7276,7 +4267,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7306,66 +4297,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7394,7 +4326,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7424,7 +4356,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7453,7 +4385,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7483,7 +4415,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7512,7 +4444,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7542,7 +4474,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7571,7 +4503,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7601,7 +4533,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7689,7 +4621,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7761,65 +4693,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -7837,7 +4710,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -7968,124 +4841,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -8102,7 +4857,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8132,7 +4887,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8279,7 +5034,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8309,65 +5064,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -8397,7 +5093,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8427,7 +5123,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8456,7 +5152,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8486,66 +5182,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8617,65 +5254,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -8735,65 +5313,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -8928,7 +5447,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -8958,271 +5477,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
@@ -9230,272 +5484,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build148-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -9518,7 +5506,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9548,7 +5536,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9577,7 +5565,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9607,7 +5595,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9636,7 +5624,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9666,7 +5654,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9695,7 +5683,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9725,7 +5713,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build150-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9774,7 +5762,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9804,7 +5792,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -9876,242 +5864,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -10128,7 +5880,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10158,7 +5910,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build151-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10187,7 +5939,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10217,7 +5969,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10289,65 +6041,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -10364,7 +6057,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10394,243 +6087,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build151-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -10820,242 +6277,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build150-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build152-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build149-m1",
-              "os": "Ubuntu-14.04",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -11072,7 +6293,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11102,7 +6323,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11131,7 +6352,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11161,7 +6382,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build151-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11190,7 +6411,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11220,7 +6441,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build152-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11249,7 +6470,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11279,7 +6500,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build149-m1",
+              "id": "build148-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11367,7 +6588,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11397,7 +6618,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build148-m1",
+              "id": "build149-m1",
               "os": "Ubuntu-14.04",
               "pool": "Chrome-perf"
             }
@@ -11607,7 +6828,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11637,7 +6858,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11725,7 +6946,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11755,7 +6976,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11784,7 +7005,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -11814,7 +7035,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12079,7 +7300,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12109,66 +7330,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12197,7 +7359,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12227,7 +7389,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12256,7 +7418,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12286,124 +7448,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -12492,7 +7536,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12522,66 +7566,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12610,7 +7595,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12640,7 +7625,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12669,7 +7654,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12699,7 +7684,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12728,7 +7713,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12758,7 +7743,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12787,7 +7772,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -12817,94 +7802,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -12912,508 +7809,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -13436,7 +7831,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13466,7 +7861,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13495,7 +7890,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13525,94 +7920,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -13620,154 +7927,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -13790,7 +7949,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13820,7 +7979,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13849,7 +8008,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13879,7 +8038,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13908,7 +8067,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -13938,7 +8097,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14010,124 +8169,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -14187,65 +8228,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -14364,65 +8346,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -14439,7 +8362,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14469,7 +8392,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14498,7 +8421,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14528,7 +8451,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14557,7 +8480,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14587,7 +8510,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14679,65 +8602,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -14797,124 +8661,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -14931,7 +8677,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14961,7 +8707,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -14990,7 +8736,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15020,125 +8766,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15167,7 +8795,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15197,35 +8825,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -15233,213 +8832,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -15462,7 +8854,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15492,7 +8884,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15521,7 +8913,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15551,7 +8943,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15580,7 +8972,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15610,7 +9002,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -15918,65 +9310,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -16111,7 +9444,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16141,66 +9474,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16258,7 +9532,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16288,7 +9562,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16376,7 +9650,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16406,66 +9680,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16494,7 +9709,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16524,243 +9739,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16789,7 +9768,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16819,66 +9798,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16907,7 +9827,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -16937,184 +9857,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17143,7 +9886,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17173,7 +9916,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17202,7 +9945,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17232,7 +9975,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17261,7 +10004,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17291,7 +10034,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17320,7 +10063,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17350,125 +10093,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17556,7 +10181,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17586,35 +10211,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -17622,95 +10218,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -17733,7 +10240,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17763,7 +10270,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17792,7 +10299,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17822,7 +10329,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17851,7 +10358,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -17881,35 +10388,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -17917,95 +10395,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -18071,65 +10460,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -18146,7 +10476,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18176,125 +10506,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18323,7 +10535,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18353,7 +10565,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18382,7 +10594,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18412,7 +10624,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18500,7 +10712,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18530,7 +10742,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18618,7 +10830,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18648,7 +10860,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18677,7 +10889,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18707,66 +10919,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18795,7 +10948,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18825,7 +10978,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18854,7 +11007,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18884,7 +11037,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18913,7 +11066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18943,7 +11096,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -18972,7 +11125,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19002,7 +11155,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19090,7 +11243,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19162,65 +11315,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -19238,7 +11332,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19369,124 +11463,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -19503,7 +11479,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19533,7 +11509,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19680,7 +11656,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19710,65 +11686,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -19798,7 +11715,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19828,7 +11745,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19857,7 +11774,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -19887,66 +11804,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20018,65 +11876,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -20136,65 +11935,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -20329,7 +12069,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20359,271 +12099,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
               "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -20631,272 +12106,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build102-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -20919,7 +12128,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20949,7 +12158,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -20978,7 +12187,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21008,7 +12217,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21037,7 +12246,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21067,7 +12276,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21096,7 +12305,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21126,7 +12335,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build104-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21155,7 +12364,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21185,7 +12394,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21257,242 +12466,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -21509,7 +12482,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21539,7 +12512,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build105-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21568,7 +12541,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21598,7 +12571,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21670,65 +12643,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -21745,7 +12659,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -21775,243 +12689,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build105-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22201,242 +12879,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build104-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build106-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0166",
-              "id": "build103-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -22453,7 +12895,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22483,7 +12925,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22512,7 +12954,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22542,7 +12984,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build105-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22571,7 +13013,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22601,7 +13043,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build106-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22630,7 +13072,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22660,7 +13102,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build103-b1",
+              "id": "build102-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22748,7 +13190,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22778,7 +13220,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0166",
-              "id": "build102-b1",
+              "id": "build103-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -22988,7 +13430,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23018,7 +13460,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23106,7 +13548,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23136,7 +13578,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23165,7 +13607,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23195,7 +13637,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23460,7 +13902,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23490,66 +13932,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23578,7 +13961,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23608,7 +13991,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23637,7 +14020,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23667,124 +14050,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -23873,7 +14138,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23903,66 +14168,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -23991,7 +14197,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24021,7 +14227,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24050,7 +14256,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24080,7 +14286,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24109,7 +14315,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24139,7 +14345,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24168,7 +14374,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24198,94 +14404,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -24293,508 +14411,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -24817,7 +14433,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24847,7 +14463,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24876,7 +14492,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -24906,94 +14522,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -25001,154 +14529,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -25171,7 +14551,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25201,7 +14581,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25230,7 +14610,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25260,7 +14640,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25289,7 +14669,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25319,7 +14699,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25391,124 +14771,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -25568,65 +14830,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -25745,65 +14948,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -25820,7 +14964,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25850,7 +14994,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25879,7 +15023,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25909,7 +15053,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25938,7 +15082,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -25968,7 +15112,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26040,65 +15184,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -26158,124 +15243,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -26292,7 +15259,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26322,7 +15289,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26351,7 +15318,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26381,125 +15348,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26528,7 +15377,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26558,35 +15407,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -26594,213 +15414,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -26823,7 +15436,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26853,7 +15466,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26882,7 +15495,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26912,7 +15525,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26941,7 +15554,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -26971,7 +15584,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27279,65 +15892,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -27472,7 +16026,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27502,66 +16056,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27619,7 +16114,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27649,7 +16144,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27737,7 +16232,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27767,66 +16262,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27855,7 +16291,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -27885,243 +16321,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28150,7 +16350,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28180,66 +16380,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28268,7 +16409,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28298,184 +16439,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28504,7 +16468,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28534,7 +16498,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28563,7 +16527,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28593,7 +16557,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28622,7 +16586,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28652,7 +16616,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28681,7 +16645,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28711,125 +16675,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28917,7 +16763,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -28947,35 +16793,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -28983,95 +16800,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -29094,7 +16822,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29124,7 +16852,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29153,7 +16881,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29183,7 +16911,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29212,7 +16940,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29242,35 +16970,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -29278,95 +16977,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -29432,65 +17042,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -29507,7 +17058,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29537,125 +17088,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29684,7 +17117,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29714,7 +17147,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29743,7 +17176,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29773,7 +17206,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29861,7 +17294,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29891,7 +17324,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -29979,7 +17412,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30009,7 +17442,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30038,7 +17471,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30068,66 +17501,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30156,7 +17530,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30186,7 +17560,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30215,7 +17589,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30245,7 +17619,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30274,7 +17648,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30304,7 +17678,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30333,7 +17707,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30363,7 +17737,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30451,7 +17825,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30523,65 +17897,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -30599,7 +17914,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30730,124 +18045,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -30864,7 +18061,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -30894,7 +18091,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31041,7 +18238,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31071,65 +18268,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -31159,7 +18297,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31189,7 +18327,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31218,7 +18356,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31248,66 +18386,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31379,65 +18458,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -31497,65 +18517,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -31690,7 +18651,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -31720,271 +18681,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
               "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -31992,272 +18688,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build158-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -32280,7 +18710,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32310,7 +18740,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32339,7 +18769,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32369,7 +18799,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32398,7 +18828,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32428,7 +18858,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32457,7 +18887,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32487,7 +18917,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build160-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32516,7 +18946,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32546,7 +18976,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32618,242 +19048,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -32870,7 +19064,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32900,7 +19094,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build161-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32929,7 +19123,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -32959,7 +19153,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33031,65 +19225,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -33106,7 +19241,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33136,243 +19271,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build161-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33562,242 +19461,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build160-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build162-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a2e",
-              "id": "build159-m1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -33814,7 +19477,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33844,7 +19507,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33873,7 +19536,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33903,7 +19566,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build161-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33932,7 +19595,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33962,7 +19625,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build162-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -33991,7 +19654,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -34021,7 +19684,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build159-m1",
+              "id": "build158-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -34109,7 +19772,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -34139,7 +19802,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a2e",
-              "id": "build158-m1",
+              "id": "build159-m1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -34349,7 +20012,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34379,7 +20042,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34467,7 +20130,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34497,7 +20160,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34526,7 +20189,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34556,7 +20219,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34821,7 +20484,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34851,66 +20514,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34939,7 +20543,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34969,7 +20573,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -34998,7 +20602,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35028,124 +20632,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -35234,7 +20720,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35264,66 +20750,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35352,7 +20779,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35382,7 +20809,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35411,7 +20838,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35441,7 +20868,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35470,7 +20897,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35500,7 +20927,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35529,7 +20956,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -35559,94 +20986,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -35654,508 +20993,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -36178,7 +21015,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36208,7 +21045,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36237,7 +21074,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36267,94 +21104,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -36362,154 +21111,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -36532,7 +21133,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36562,7 +21163,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36591,7 +21192,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36621,7 +21222,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36650,7 +21251,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36680,7 +21281,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -36752,124 +21353,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -36929,65 +21412,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -37106,65 +21530,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -37181,7 +21546,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37211,7 +21576,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37240,7 +21605,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37270,7 +21635,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37299,7 +21664,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37329,7 +21694,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37401,65 +21766,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -37519,124 +21825,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -37653,7 +21841,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37683,7 +21871,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37712,7 +21900,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37742,125 +21930,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37889,7 +21959,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -37919,35 +21989,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -37955,213 +21996,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -38184,7 +22018,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38214,7 +22048,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38243,7 +22077,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38273,7 +22107,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38302,7 +22136,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38332,7 +22166,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38640,65 +22474,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -38833,7 +22608,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38863,66 +22638,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -38980,7 +22696,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39010,7 +22726,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39098,7 +22814,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39128,66 +22844,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39216,7 +22873,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39246,243 +22903,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39511,7 +22932,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39541,66 +22962,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39629,7 +22991,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39659,184 +23021,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39865,7 +23050,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39895,7 +23080,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39924,7 +23109,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39954,7 +23139,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -39983,7 +23168,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40013,7 +23198,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40042,7 +23227,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40072,125 +23257,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40278,7 +23345,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40308,35 +23375,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -40344,95 +23382,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -40455,7 +23404,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40485,7 +23434,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40514,7 +23463,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40544,7 +23493,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40573,7 +23522,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40603,35 +23552,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -40639,95 +23559,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -40793,65 +23624,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -40868,7 +23640,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -40898,125 +23670,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41045,7 +23699,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41075,7 +23729,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41104,7 +23758,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41134,7 +23788,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41222,7 +23876,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41252,7 +23906,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41340,7 +23994,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41370,7 +24024,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41399,7 +24053,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41429,66 +24083,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41517,7 +24112,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41547,7 +24142,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41576,7 +24171,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41606,7 +24201,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41635,7 +24230,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41665,7 +24260,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41694,7 +24289,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41724,7 +24319,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41812,7 +24407,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -41884,65 +24479,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -41960,7 +24496,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42091,124 +24627,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -42225,7 +24643,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42255,7 +24673,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42402,7 +24820,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42432,65 +24850,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -42520,7 +24879,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42550,7 +24909,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42579,7 +24938,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42609,66 +24968,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -42740,65 +25040,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -42858,65 +25099,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -43051,7 +25233,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43081,271 +25263,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
               "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -43353,272 +25270,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build123-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -43641,7 +25292,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43671,7 +25322,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43700,7 +25351,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43730,7 +25381,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43759,7 +25410,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43789,7 +25440,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43818,7 +25469,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43848,7 +25499,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build125-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43877,7 +25528,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43907,7 +25558,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -43979,242 +25630,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -44231,7 +25646,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44261,7 +25676,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build126-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44290,7 +25705,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44320,7 +25735,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44392,65 +25807,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -44467,7 +25823,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44497,243 +25853,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build126-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -44923,242 +26043,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build125-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build127-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1626",
-              "id": "build124-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -45175,7 +26059,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45205,7 +26089,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45234,7 +26118,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45264,7 +26148,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build126-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45293,7 +26177,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45323,7 +26207,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build127-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45352,7 +26236,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45382,7 +26266,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build124-b1",
+              "id": "build123-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45470,7 +26354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45500,7 +26384,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1626",
-              "id": "build123-b1",
+              "id": "build124-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -45710,7 +26594,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45740,7 +26624,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45828,7 +26712,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45858,7 +26742,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45887,7 +26771,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -45917,7 +26801,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46182,7 +27066,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46212,66 +27096,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46300,7 +27125,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46330,7 +27155,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46359,7 +27184,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46389,124 +27214,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -46595,7 +27302,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46625,66 +27332,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46713,7 +27361,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46743,7 +27391,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46772,7 +27420,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46802,7 +27450,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46831,7 +27479,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46861,7 +27509,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46890,7 +27538,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -46920,94 +27568,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -47015,508 +27575,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -47539,7 +27597,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47569,7 +27627,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47598,7 +27656,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47628,94 +27686,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -47723,154 +27693,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -47893,7 +27715,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47923,7 +27745,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47952,7 +27774,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -47982,7 +27804,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48011,7 +27833,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48041,7 +27863,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48113,124 +27935,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -48290,65 +27994,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -48467,65 +28112,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -48542,7 +28128,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48572,7 +28158,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48601,7 +28187,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48631,7 +28217,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48660,7 +28246,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48690,7 +28276,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -48762,65 +28348,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -48880,124 +28407,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -49014,7 +28423,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49044,7 +28453,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49073,7 +28482,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49103,125 +28512,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49250,7 +28541,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49280,35 +28571,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -49316,213 +28578,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -49545,7 +28600,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49575,7 +28630,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49604,7 +28659,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49634,7 +28689,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49663,7 +28718,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -49693,7 +28748,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50001,65 +29056,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -50194,7 +29190,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50224,66 +29220,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50341,7 +29278,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50371,7 +29308,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50459,7 +29396,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50489,66 +29426,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50577,7 +29455,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50607,243 +29485,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50872,7 +29514,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50902,66 +29544,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -50990,7 +29573,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51020,184 +29603,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51226,7 +29632,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51256,7 +29662,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51285,7 +29691,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51315,7 +29721,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51344,7 +29750,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51374,7 +29780,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51403,7 +29809,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51433,125 +29839,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51639,7 +29927,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51669,35 +29957,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -51705,95 +29964,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -51816,7 +29986,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51846,7 +30016,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51875,7 +30045,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51905,7 +30075,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51934,7 +30104,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -51964,35 +30134,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -52000,95 +30141,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -52154,65 +30206,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -52229,7 +30222,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52259,125 +30252,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52406,7 +30281,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52436,7 +30311,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52465,7 +30340,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52495,7 +30370,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52583,7 +30458,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52613,7 +30488,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52701,7 +30576,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52731,7 +30606,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52760,7 +30635,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52790,66 +30665,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52878,7 +30694,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52908,7 +30724,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52937,7 +30753,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52967,7 +30783,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -52996,7 +30812,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53026,7 +30842,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53055,7 +30871,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53085,7 +30901,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53173,7 +30989,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53245,65 +31061,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -53321,7 +31078,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53452,124 +31209,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -53586,7 +31225,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53616,7 +31255,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53763,7 +31402,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53793,65 +31432,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -53881,7 +31461,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53911,7 +31491,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53940,7 +31520,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -53970,66 +31550,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54101,65 +31622,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -54219,65 +31681,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -54412,7 +31815,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -54442,271 +31845,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
               "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
@@ -54714,272 +31852,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build24-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -55002,7 +31874,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55032,7 +31904,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55061,7 +31933,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55091,7 +31963,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55120,7 +31992,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55150,7 +32022,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55179,7 +32051,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55209,7 +32081,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build26-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55238,7 +32110,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55268,7 +32140,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55340,242 +32212,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -55592,7 +32228,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55622,7 +32258,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build27-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55651,7 +32287,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55681,7 +32317,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55753,65 +32389,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -55828,7 +32405,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -55858,243 +32435,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build27-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56284,242 +32625,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build26-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build28-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0a26",
-              "id": "build25-b1",
-              "os": "Mac-10.12",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -56536,7 +32641,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56566,7 +32671,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56595,7 +32700,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56625,7 +32730,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build27-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56654,7 +32759,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56684,7 +32789,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build28-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56713,7 +32818,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56743,7 +32848,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build25-b1",
+              "id": "build24-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56831,7 +32936,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -56861,7 +32966,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0a26",
-              "id": "build24-b1",
+              "id": "build25-b1",
               "os": "Mac-10.12",
               "pool": "Chrome-perf"
             }
@@ -57071,7 +33176,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57101,7 +33206,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57189,7 +33294,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57219,7 +33324,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57248,7 +33353,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57278,7 +33383,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57543,7 +33648,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57573,66 +33678,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57661,7 +33707,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57691,7 +33737,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57720,7 +33766,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57750,124 +33796,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -57956,7 +33884,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -57986,66 +33914,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58074,7 +33943,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58104,7 +33973,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58133,7 +34002,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58163,7 +34032,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58192,7 +34061,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58222,7 +34091,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58251,7 +34120,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58281,94 +34150,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -58376,508 +34157,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -58900,7 +34179,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58930,7 +34209,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58959,7 +34238,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -58989,94 +34268,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -59084,154 +34275,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -59254,7 +34297,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59284,7 +34327,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59313,7 +34356,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59343,7 +34386,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59372,7 +34415,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59402,7 +34445,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59474,124 +34517,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -59651,65 +34576,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -59828,65 +34694,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -59903,7 +34710,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59933,7 +34740,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59962,7 +34769,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -59992,7 +34799,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60021,7 +34828,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60051,7 +34858,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60123,65 +34930,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -60241,124 +34989,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -60375,7 +35005,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60405,7 +35035,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60434,7 +35064,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60464,125 +35094,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60611,7 +35123,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60641,35 +35153,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -60677,213 +35160,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -60906,7 +35182,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60936,7 +35212,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60965,7 +35241,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -60995,7 +35271,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61024,7 +35300,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61054,7 +35330,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61362,65 +35638,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -61555,7 +35772,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61585,66 +35802,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61702,7 +35860,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61732,7 +35890,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61820,7 +35978,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61850,66 +36008,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61938,7 +36037,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -61968,243 +36067,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62233,7 +36096,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62263,66 +36126,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62351,7 +36155,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62381,184 +36185,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62587,7 +36214,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62617,7 +36244,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62646,7 +36273,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62676,7 +36303,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62705,7 +36332,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62735,7 +36362,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62764,7 +36391,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -62794,125 +36421,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63000,7 +36509,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63030,35 +36539,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -63066,95 +36546,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -63177,7 +36568,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63207,7 +36598,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63236,7 +36627,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63266,7 +36657,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63295,7 +36686,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63325,35 +36716,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -63361,95 +36723,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -63515,65 +36788,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -63590,7 +36804,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63620,125 +36834,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63767,7 +36863,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63797,7 +36893,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63826,7 +36922,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63856,7 +36952,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63944,7 +37040,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -63974,7 +37070,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64062,7 +37158,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64092,7 +37188,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64121,7 +37217,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64151,66 +37247,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64239,7 +37276,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64269,7 +37306,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64298,7 +37335,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64328,7 +37365,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64357,7 +37394,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64387,7 +37424,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64416,7 +37453,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64446,7 +37483,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64534,7 +37571,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64606,65 +37643,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -64682,7 +37660,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64813,124 +37791,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -64947,7 +37807,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -64977,7 +37837,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65124,7 +37984,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65154,65 +38014,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -65242,7 +38043,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65272,7 +38073,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65301,7 +38102,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65331,66 +38132,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65462,65 +38204,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -65580,65 +38263,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -65773,7 +38397,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -65803,271 +38427,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
               "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -66075,272 +38434,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build128-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -66363,7 +38456,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66393,7 +38486,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66422,7 +38515,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66452,7 +38545,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66481,7 +38574,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66511,7 +38604,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66540,7 +38633,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66570,7 +38663,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build130-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66599,7 +38692,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66629,7 +38722,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66701,242 +38794,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -66953,7 +38810,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -66983,7 +38840,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build131-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67012,7 +38869,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67042,7 +38899,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67114,65 +38971,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -67189,7 +38987,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67219,243 +39017,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build131-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67645,242 +39207,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build130-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build132-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6821",
-              "id": "build129-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -67897,7 +39223,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67927,7 +39253,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67956,7 +39282,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -67986,7 +39312,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build131-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68015,7 +39341,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68045,7 +39371,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build132-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68074,7 +39400,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68104,7 +39430,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build129-b1",
+              "id": "build128-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68192,7 +39518,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68222,7 +39548,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6821",
-              "id": "build128-b1",
+              "id": "build129-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68432,7 +39758,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68462,7 +39788,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68550,7 +39876,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68580,7 +39906,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68609,7 +39935,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68639,7 +39965,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68904,7 +40230,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -68934,66 +40260,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69022,7 +40289,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69052,7 +40319,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69081,7 +40348,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69111,124 +40378,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -69317,7 +40466,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69347,66 +40496,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69435,7 +40525,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69465,7 +40555,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69494,7 +40584,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69524,7 +40614,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69553,7 +40643,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69583,7 +40673,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69612,7 +40702,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -69642,94 +40732,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -69737,508 +40739,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -70261,7 +40761,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70291,7 +40791,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70320,7 +40820,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70350,94 +40850,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -70445,154 +40857,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -70615,7 +40879,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70645,7 +40909,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70674,7 +40938,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70704,7 +40968,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70733,7 +40997,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70763,7 +41027,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -70835,124 +41099,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -71012,65 +41158,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -71189,65 +41276,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -71264,7 +41292,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71294,7 +41322,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71323,7 +41351,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71353,7 +41381,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71382,7 +41410,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71412,7 +41440,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71484,65 +41512,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -71602,124 +41571,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -71736,7 +41587,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71766,7 +41617,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71795,7 +41646,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71825,125 +41676,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -71972,7 +41705,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72002,35 +41735,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -72038,213 +41742,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -72267,7 +41764,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72297,7 +41794,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72326,7 +41823,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72356,7 +41853,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72385,7 +41882,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72415,7 +41912,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72723,65 +42220,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -72916,7 +42354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -72946,66 +42384,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73063,7 +42442,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73093,7 +42472,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73181,7 +42560,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73211,66 +42590,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73299,7 +42619,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73329,243 +42649,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73594,7 +42678,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73624,66 +42708,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73712,7 +42737,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73742,184 +42767,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73948,7 +42796,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -73978,7 +42826,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74007,7 +42855,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74037,7 +42885,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74066,7 +42914,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74096,7 +42944,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74125,7 +42973,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74155,125 +43003,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74361,7 +43091,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74391,35 +43121,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -74427,95 +43128,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -74538,7 +43150,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74568,7 +43180,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74597,7 +43209,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74627,7 +43239,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74656,7 +43268,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74686,35 +43298,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -74722,95 +43305,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -74876,65 +43370,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -74951,7 +43386,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -74981,125 +43416,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75128,7 +43445,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75158,7 +43475,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75187,7 +43504,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75217,7 +43534,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75305,7 +43622,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75335,7 +43652,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75423,7 +43740,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75453,7 +43770,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75482,7 +43799,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75512,66 +43829,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75600,7 +43858,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75630,7 +43888,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75659,7 +43917,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75689,7 +43947,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75718,7 +43976,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75748,7 +44006,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75777,7 +44035,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75807,7 +44065,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75895,7 +44153,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -75967,65 +44225,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -76043,7 +44242,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76174,124 +44373,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -76308,7 +44389,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76338,7 +44419,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76485,7 +44566,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76515,65 +44596,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -76603,7 +44625,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76633,7 +44655,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76662,7 +44684,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76692,66 +44714,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -76823,65 +44786,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -76941,65 +44845,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -77134,7 +44979,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77164,271 +45009,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
               "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
@@ -77436,272 +45016,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build4-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -77724,7 +45038,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77754,7 +45068,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77783,7 +45097,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77813,7 +45127,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77842,7 +45156,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77872,7 +45186,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77901,7 +45215,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77931,7 +45245,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build6-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77960,7 +45274,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -77990,7 +45304,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -78062,242 +45376,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -78314,7 +45392,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -78344,7 +45422,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build7-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -78373,7 +45451,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -78403,7 +45481,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -78475,65 +45553,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -78550,7 +45569,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -78580,243 +45599,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build7-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79006,242 +45789,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build6-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build8-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:0d26",
-              "id": "build5-b1",
-              "os": "Mac-10.11",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -79258,7 +45805,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79288,7 +45835,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79317,7 +45864,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79347,7 +45894,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build7-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79376,7 +45923,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79406,7 +45953,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build8-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79435,7 +45982,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79465,7 +46012,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build5-b1",
+              "id": "build4-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79553,7 +46100,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79583,7 +46130,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:0d26",
-              "id": "build4-b1",
+              "id": "build5-b1",
               "os": "Mac-10.11",
               "pool": "Chrome-perf"
             }
@@ -79793,7 +46340,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -79823,7 +46370,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -79911,7 +46458,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -79941,7 +46488,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -79970,7 +46517,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80000,7 +46547,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80265,7 +46812,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80295,66 +46842,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80383,7 +46871,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80413,7 +46901,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80442,7 +46930,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80472,124 +46960,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -80678,7 +47048,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80708,66 +47078,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80796,7 +47107,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80826,7 +47137,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80855,7 +47166,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80885,7 +47196,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80914,7 +47225,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80944,7 +47255,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -80973,7 +47284,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -81003,94 +47314,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -81098,508 +47321,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -81622,7 +47343,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -81652,7 +47373,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -81681,7 +47402,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -81711,94 +47432,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -81806,154 +47439,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -81976,7 +47461,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82006,7 +47491,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82035,7 +47520,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82065,7 +47550,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82094,7 +47579,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82124,7 +47609,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82196,124 +47681,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -82373,65 +47740,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -82550,65 +47858,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -82625,7 +47874,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82655,7 +47904,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82684,7 +47933,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82714,7 +47963,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82743,7 +47992,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82773,7 +48022,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -82845,65 +48094,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -82963,124 +48153,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -83097,7 +48169,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83127,7 +48199,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83156,7 +48228,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83186,125 +48258,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83333,7 +48287,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83363,35 +48317,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -83399,213 +48324,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -83628,7 +48346,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83658,7 +48376,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83687,7 +48405,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83717,7 +48435,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83746,7 +48464,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -83776,7 +48494,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84084,65 +48802,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -84277,7 +48936,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84307,66 +48966,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84424,7 +49024,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84454,7 +49054,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84542,7 +49142,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84572,66 +49172,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84660,7 +49201,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84690,243 +49231,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84955,7 +49260,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -84985,66 +49290,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85073,7 +49319,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85103,184 +49349,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85309,7 +49378,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85339,7 +49408,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85368,7 +49437,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85398,7 +49467,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85427,7 +49496,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85457,7 +49526,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85486,7 +49555,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85516,125 +49585,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85722,7 +49673,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85752,35 +49703,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -85788,95 +49710,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -85899,7 +49732,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85929,7 +49762,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85958,7 +49791,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -85988,7 +49821,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86017,7 +49850,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86047,35 +49880,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -86083,95 +49887,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -86237,65 +49952,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -86312,7 +49968,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86342,125 +49998,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86489,7 +50027,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86519,7 +50057,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86548,7 +50086,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86578,7 +50116,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86666,7 +50204,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86696,7 +50234,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86784,7 +50322,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86814,7 +50352,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86843,7 +50381,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86873,66 +50411,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86961,7 +50440,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -86991,7 +50470,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87020,7 +50499,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87050,7 +50529,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87079,7 +50558,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87109,7 +50588,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87138,7 +50617,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87168,7 +50647,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87256,7 +50735,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87328,65 +50807,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -87404,7 +50824,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87535,124 +50955,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -87669,7 +50971,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87699,7 +51001,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87846,7 +51148,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87876,65 +51178,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -87964,7 +51207,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -87994,7 +51237,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88023,7 +51266,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88053,66 +51296,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88184,65 +51368,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -88302,65 +51427,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -88495,7 +51561,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -88525,271 +51591,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
               "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -88797,272 +51598,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build117-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -89085,7 +51620,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89115,7 +51650,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89144,7 +51679,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89174,7 +51709,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89203,7 +51738,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89233,7 +51768,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89262,7 +51797,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89292,7 +51827,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build119-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89321,7 +51856,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89351,7 +51886,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89423,242 +51958,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -89675,7 +51974,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89705,7 +52004,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build120-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89734,7 +52033,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89764,7 +52063,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89836,65 +52135,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -89911,7 +52151,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -89941,243 +52181,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build120-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90367,242 +52371,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build119-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build180-b4",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1616",
-              "id": "build118-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -90619,7 +52387,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90649,7 +52417,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90678,7 +52446,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90708,7 +52476,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build120-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90737,7 +52505,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90767,7 +52535,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build180-b4",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90796,7 +52564,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90826,7 +52594,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build118-b1",
+              "id": "build117-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90914,7 +52682,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -90944,7 +52712,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:1616",
-              "id": "build117-b1",
+              "id": "build118-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91154,7 +52922,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91184,7 +52952,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91272,7 +53040,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91302,7 +53070,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91331,7 +53099,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91361,7 +53129,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91626,7 +53394,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91656,66 +53424,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91744,7 +53453,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91774,7 +53483,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91803,7 +53512,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -91833,124 +53542,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -92039,7 +53630,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92069,66 +53660,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92157,7 +53689,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92187,7 +53719,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92216,7 +53748,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92246,7 +53778,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92275,7 +53807,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92305,7 +53837,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92334,7 +53866,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -92364,94 +53896,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -92459,508 +53903,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -92983,7 +53925,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93013,7 +53955,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93042,7 +53984,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93072,94 +54014,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -93167,154 +54021,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -93337,7 +54043,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93367,7 +54073,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93396,7 +54102,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93426,7 +54132,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93455,7 +54161,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93485,7 +54191,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -93557,124 +54263,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -93734,65 +54322,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -93911,65 +54440,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -93986,7 +54456,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94016,7 +54486,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94045,7 +54515,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94075,7 +54545,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94104,7 +54574,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94134,7 +54604,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94226,65 +54696,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -94344,124 +54755,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -94478,7 +54771,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94508,7 +54801,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94537,7 +54830,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94567,125 +54860,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94714,7 +54889,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -94744,35 +54919,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -94780,213 +54926,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -95009,7 +54948,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95039,7 +54978,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95068,7 +55007,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95098,7 +55037,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95127,7 +55066,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95157,7 +55096,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95465,65 +55404,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -95658,7 +55538,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95688,66 +55568,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95805,7 +55626,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95835,7 +55656,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95923,7 +55744,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -95953,66 +55774,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96041,7 +55803,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96071,243 +55833,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96336,7 +55862,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96366,66 +55892,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96454,7 +55921,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96484,184 +55951,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96690,7 +55980,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96720,7 +56010,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96749,7 +56039,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96779,7 +56069,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96808,7 +56098,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96838,7 +56128,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96867,7 +56157,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -96897,125 +56187,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97103,7 +56275,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97133,35 +56305,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -97169,95 +56312,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -97280,7 +56334,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97310,7 +56364,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97339,7 +56393,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97369,7 +56423,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97398,7 +56452,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97428,35 +56482,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -97464,95 +56489,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -97618,65 +56554,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -97693,7 +56570,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97723,125 +56600,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97870,7 +56629,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97900,7 +56659,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97929,7 +56688,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -97959,7 +56718,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98047,7 +56806,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98077,7 +56836,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98165,7 +56924,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98195,7 +56954,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98224,7 +56983,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98254,66 +57013,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98342,7 +57042,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98372,7 +57072,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98401,7 +57101,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98431,7 +57131,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98460,7 +57160,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98490,7 +57190,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98519,7 +57219,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98549,7 +57249,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98637,7 +57337,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98709,65 +57409,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -98785,7 +57426,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -98916,124 +57557,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -99050,7 +57573,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99080,7 +57603,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99227,7 +57750,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99257,65 +57780,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -99345,7 +57809,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99375,7 +57839,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99404,7 +57868,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99434,66 +57898,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99565,65 +57970,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -99683,65 +58029,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -99876,7 +58163,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -99906,271 +58193,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
               "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -100178,272 +58200,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build132-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -100466,7 +58222,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100496,7 +58252,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100525,7 +58281,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100555,7 +58311,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100584,7 +58340,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100614,7 +58370,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100643,7 +58399,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100673,7 +58429,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build134-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100702,7 +58458,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100732,7 +58488,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -100804,242 +58560,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -101056,7 +58576,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -101086,7 +58606,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build135-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -101115,7 +58635,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -101145,7 +58665,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -101217,65 +58737,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -101292,7 +58753,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -101322,243 +58783,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build135-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -101748,242 +58973,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build134-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build136-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0534",
-              "id": "build133-m1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -102000,7 +58989,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102030,7 +59019,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102059,7 +59048,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102089,7 +59078,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build135-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102118,7 +59107,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102148,7 +59137,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build136-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102177,7 +59166,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102207,7 +59196,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build133-m1",
+              "id": "build132-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102295,7 +59284,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102325,7 +59314,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0534",
-              "id": "build132-m1",
+              "id": "build133-m1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -102555,7 +59544,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102585,7 +59574,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102673,7 +59662,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102703,7 +59692,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102732,7 +59721,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -102762,7 +59751,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103027,7 +60016,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103057,66 +60046,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103145,7 +60075,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103175,7 +60105,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103204,7 +60134,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103234,124 +60164,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -103440,7 +60252,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103470,66 +60282,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103558,7 +60311,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103588,7 +60341,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103617,7 +60370,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103647,7 +60400,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103676,7 +60429,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103706,7 +60459,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103735,7 +60488,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -103765,94 +60518,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -103860,508 +60525,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -104384,7 +60547,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104414,7 +60577,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104443,7 +60606,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104473,94 +60636,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -104568,154 +60643,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -104738,7 +60665,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104768,7 +60695,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104797,7 +60724,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104827,7 +60754,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104856,7 +60783,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104886,7 +60813,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -104978,124 +60905,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -105155,65 +60964,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -105332,65 +61082,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -105407,7 +61098,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105437,7 +61128,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105466,7 +61157,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105496,7 +61187,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105525,7 +61216,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105555,7 +61246,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105647,65 +61338,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -105765,124 +61397,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -105899,7 +61413,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105929,7 +61443,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105958,7 +61472,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -105988,125 +61502,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106135,7 +61531,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106165,35 +61561,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -106201,213 +61568,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -106430,7 +61590,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106460,7 +61620,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106489,7 +61649,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106519,7 +61679,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106548,7 +61708,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106578,7 +61738,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -106886,65 +62046,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -107079,7 +62180,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107109,7 +62210,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107142,65 +62243,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -107246,7 +62288,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107276,7 +62318,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107364,7 +62406,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107394,66 +62436,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107482,7 +62465,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107512,243 +62495,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107777,7 +62524,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107807,66 +62554,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107895,7 +62583,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -107925,184 +62613,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108131,7 +62642,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108161,7 +62672,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108190,7 +62701,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108220,7 +62731,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108249,7 +62760,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108279,7 +62790,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108308,7 +62819,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108338,125 +62849,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108544,7 +62937,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108574,35 +62967,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -108610,95 +62974,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -108721,7 +62996,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108751,7 +63026,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108780,7 +63055,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108810,7 +63085,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108839,7 +63114,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -108869,35 +63144,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -108905,95 +63151,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -109059,65 +63216,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -109134,7 +63232,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109164,125 +63262,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109311,7 +63291,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109341,7 +63321,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109370,7 +63350,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109400,7 +63380,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109488,7 +63468,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109518,7 +63498,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109606,7 +63586,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109636,7 +63616,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109665,7 +63645,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109695,66 +63675,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109783,7 +63704,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109813,7 +63734,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109842,7 +63763,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109872,7 +63793,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109901,7 +63822,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109931,7 +63852,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109960,7 +63881,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -109990,7 +63911,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110078,7 +63999,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110150,65 +64071,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -110226,7 +64088,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110357,124 +64219,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -110491,7 +64235,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110521,7 +64265,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110668,7 +64412,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110698,65 +64442,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -110786,7 +64471,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110816,7 +64501,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110845,7 +64530,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -110875,66 +64560,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111006,65 +64632,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -111124,65 +64691,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -111317,7 +64825,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111347,271 +64855,6 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
               "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -111619,272 +64862,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build101-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -111907,7 +64884,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111937,7 +64914,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111966,7 +64943,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -111996,7 +64973,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112025,7 +65002,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112055,7 +65032,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112084,7 +65061,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112114,7 +65091,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build103-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112143,7 +65120,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112173,7 +65150,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112245,242 +65222,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -112497,7 +65238,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112527,7 +65268,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build104-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112556,7 +65297,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112586,7 +65327,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112658,65 +65399,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -112733,7 +65415,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -112763,243 +65445,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build104-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113189,242 +65635,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build103-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build105-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "id": "build102-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -113441,7 +65651,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113471,7 +65681,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113500,7 +65710,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113530,7 +65740,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build104-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113559,7 +65769,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113589,7 +65799,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build105-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113618,7 +65828,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113648,7 +65858,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build102-m1",
+              "id": "build101-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113736,7 +65946,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113766,7 +65976,7 @@
           "dimension_sets": [
             {
               "gpu": "1002:6613",
-              "id": "build101-m1",
+              "id": "build102-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -113996,7 +66206,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114026,7 +66236,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114114,7 +66324,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114144,7 +66354,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114173,7 +66383,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114203,7 +66413,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114468,7 +66678,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114498,66 +66708,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114586,7 +66737,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114616,7 +66767,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114645,7 +66796,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114675,124 +66826,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -114881,7 +66914,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114911,66 +66944,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -114999,7 +66973,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115029,7 +67003,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115058,7 +67032,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115088,7 +67062,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115117,7 +67091,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115147,7 +67121,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115176,7 +67150,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115206,94 +67180,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -115301,508 +67187,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -115825,7 +67209,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115855,7 +67239,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115884,7 +67268,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -115914,94 +67298,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -116009,154 +67305,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -116179,7 +67327,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116209,7 +67357,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116238,7 +67386,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116268,7 +67416,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116297,7 +67445,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116327,7 +67475,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116419,124 +67567,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -116596,65 +67626,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -116773,65 +67744,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -116848,7 +67760,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116878,7 +67790,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116907,7 +67819,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116937,7 +67849,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116966,7 +67878,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -116996,7 +67908,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117068,65 +67980,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -117186,124 +68039,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -117320,7 +68055,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117350,7 +68085,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117379,7 +68114,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117409,125 +68144,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117556,7 +68173,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117586,35 +68203,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -117622,213 +68210,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -117851,7 +68232,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117881,7 +68262,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117910,7 +68291,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117940,7 +68321,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117969,7 +68350,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -117999,7 +68380,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118307,65 +68688,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -118500,7 +68822,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118530,7 +68852,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118563,65 +68885,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -118667,7 +68930,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118697,7 +68960,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118785,7 +69048,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118815,66 +69078,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118903,7 +69107,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -118933,243 +69137,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119198,7 +69166,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119228,66 +69196,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119316,7 +69225,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119346,184 +69255,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119552,7 +69284,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119582,7 +69314,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119611,7 +69343,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119641,7 +69373,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119670,7 +69402,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119700,7 +69432,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119729,7 +69461,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119759,125 +69491,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119965,7 +69579,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -119995,35 +69609,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -120031,95 +69616,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -120142,7 +69638,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120172,7 +69668,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120201,7 +69697,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120231,7 +69727,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120260,7 +69756,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120290,35 +69786,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -120326,95 +69793,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -120480,65 +69858,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -120555,7 +69874,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120585,125 +69904,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120732,7 +69933,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120762,7 +69963,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120791,7 +69992,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120821,7 +70022,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120909,7 +70110,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -120939,7 +70140,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121027,7 +70228,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121057,7 +70258,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121086,7 +70287,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121116,66 +70317,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121204,7 +70346,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121234,7 +70376,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121263,7 +70405,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121293,7 +70435,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121322,7 +70464,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121352,7 +70494,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121381,7 +70523,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121411,7 +70553,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121499,7 +70641,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121571,65 +70713,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -121647,7 +70730,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121778,124 +70861,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -121912,7 +70877,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -121942,7 +70907,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122089,7 +71054,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122119,65 +71084,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -122207,7 +71113,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122237,7 +71143,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122266,7 +71172,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122296,66 +71202,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122427,65 +71274,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -122545,65 +71333,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -122738,7 +71467,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -122768,271 +71497,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
               "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -123040,272 +71504,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build164-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -123328,7 +71526,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123358,7 +71556,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123387,7 +71585,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123417,7 +71615,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123446,7 +71644,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123476,7 +71674,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123505,7 +71703,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123535,7 +71733,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build166-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123564,7 +71762,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123594,7 +71792,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123666,242 +71864,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -123918,7 +71880,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123948,7 +71910,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build167-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -123977,7 +71939,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124007,7 +71969,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124079,65 +72041,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -124154,7 +72057,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124184,243 +72087,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build167-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124610,242 +72277,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build166-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build168-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:041a",
-              "id": "build165-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -124862,7 +72293,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124892,7 +72323,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124921,7 +72352,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124951,7 +72382,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build167-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -124980,7 +72411,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125010,7 +72441,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build168-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125039,7 +72470,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125069,7 +72500,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build165-m1",
+              "id": "build164-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125157,7 +72588,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125187,7 +72618,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:041a",
-              "id": "build164-m1",
+              "id": "build165-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125417,7 +72848,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125447,7 +72878,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125535,7 +72966,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125565,7 +72996,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125594,7 +73025,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125624,7 +73055,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125889,7 +73320,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -125919,66 +73350,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126007,7 +73379,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126037,7 +73409,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126066,7 +73438,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126096,124 +73468,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -126302,7 +73556,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126332,66 +73586,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126420,7 +73615,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126450,7 +73645,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126479,7 +73674,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126509,7 +73704,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126538,7 +73733,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126568,7 +73763,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126597,7 +73792,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -126627,94 +73822,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -126722,508 +73829,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -127246,7 +73851,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127276,7 +73881,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127305,7 +73910,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127335,94 +73940,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -127430,154 +73947,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -127600,7 +73969,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127630,7 +73999,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127659,7 +74028,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127689,7 +74058,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127718,7 +74087,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127748,7 +74117,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -127840,124 +74209,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -128017,65 +74268,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -128194,65 +74386,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -128269,7 +74402,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128299,7 +74432,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128328,7 +74461,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128358,7 +74491,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128387,7 +74520,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128417,7 +74550,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128509,65 +74642,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -128627,124 +74701,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -128761,7 +74717,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128791,7 +74747,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128820,7 +74776,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128850,125 +74806,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -128997,7 +74835,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129027,35 +74865,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -129063,213 +74872,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -129292,7 +74894,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129322,7 +74924,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129351,7 +74953,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129381,7 +74983,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129410,7 +75012,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129440,7 +75042,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129748,65 +75350,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -129941,7 +75484,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -129971,7 +75514,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130004,65 +75547,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -130108,7 +75592,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130138,7 +75622,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130226,7 +75710,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130256,66 +75740,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130344,7 +75769,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130374,243 +75799,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130639,7 +75828,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130669,66 +75858,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130757,7 +75887,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130787,184 +75917,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -130993,7 +75946,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131023,7 +75976,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131052,7 +76005,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131082,7 +76035,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131111,7 +76064,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131141,7 +76094,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131170,7 +76123,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131200,125 +76153,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131406,7 +76241,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131436,35 +76271,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -131472,95 +76278,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -131583,7 +76300,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131613,7 +76330,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131642,7 +76359,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131672,7 +76389,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131701,7 +76418,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -131731,35 +76448,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -131767,95 +76455,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -131921,65 +76520,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -131996,7 +76536,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132026,125 +76566,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132173,7 +76595,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132203,7 +76625,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132232,7 +76654,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132262,7 +76684,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132350,7 +76772,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132380,7 +76802,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132468,7 +76890,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132498,7 +76920,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132527,7 +76949,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132557,66 +76979,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132645,7 +77008,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132675,7 +77038,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132704,7 +77067,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132734,7 +77097,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132763,7 +77126,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132793,7 +77156,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132822,7 +77185,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132852,7 +77215,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -132940,7 +77303,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133012,65 +77375,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -133088,7 +77392,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133219,124 +77523,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -133353,7 +77539,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133383,7 +77569,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133530,7 +77716,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133560,65 +77746,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -133648,7 +77775,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133678,7 +77805,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133707,7 +77834,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133737,66 +77864,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -133868,65 +77936,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -133986,65 +77995,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -134179,7 +78129,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134209,271 +78159,6 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
               "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -134481,272 +78166,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build92-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -134769,7 +78188,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134799,7 +78218,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134828,7 +78247,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134858,7 +78277,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134887,7 +78306,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134917,7 +78336,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134946,7 +78365,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -134976,7 +78395,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build94-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135005,7 +78424,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135035,7 +78454,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135107,242 +78526,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -135359,7 +78542,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135389,7 +78572,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build95-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135418,7 +78601,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135448,7 +78631,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135520,65 +78703,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -135595,7 +78719,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -135625,243 +78749,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build95-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136051,242 +78939,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build94-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build96-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "id": "build93-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -136303,7 +78955,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136333,7 +78985,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136362,7 +79014,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136392,7 +79044,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build95-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136421,7 +79073,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136451,7 +79103,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build96-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136480,7 +79132,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136510,7 +79162,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build93-m1",
+              "id": "build92-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136598,7 +79250,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136628,7 +79280,7 @@
           "dimension_sets": [
             {
               "gpu": "10de:104a",
-              "id": "build92-m1",
+              "id": "build93-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136838,7 +79490,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136868,7 +79520,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136956,7 +79608,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -136986,7 +79638,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137015,7 +79667,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137045,7 +79697,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137310,7 +79962,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137340,66 +79992,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137428,7 +80021,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137458,7 +80051,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137487,7 +80080,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137517,124 +80110,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -137723,7 +80198,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137753,66 +80228,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137841,7 +80257,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137871,7 +80287,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137900,7 +80316,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137930,7 +80346,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137959,7 +80375,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -137989,7 +80405,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138018,7 +80434,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138048,94 +80464,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -138143,508 +80471,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -138667,7 +80493,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138697,7 +80523,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138726,7 +80552,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -138756,94 +80582,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -138851,154 +80589,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -139021,7 +80611,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139051,7 +80641,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139080,7 +80670,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139110,7 +80700,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139139,7 +80729,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139169,7 +80759,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139261,124 +80851,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -139438,65 +80910,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -139615,65 +81028,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -139690,7 +81044,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139720,7 +81074,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139749,7 +81103,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139779,7 +81133,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139808,7 +81162,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139838,7 +81192,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -139930,65 +81284,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -140048,124 +81343,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -140182,7 +81359,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140212,7 +81389,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140241,7 +81418,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140271,125 +81448,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140418,7 +81477,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140448,35 +81507,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -140484,213 +81514,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -140713,7 +81536,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140743,7 +81566,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140772,7 +81595,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140802,7 +81625,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140831,7 +81654,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -140861,7 +81684,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141169,65 +81992,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -141362,7 +82126,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141392,7 +82156,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141425,65 +82189,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -141529,7 +82234,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141559,7 +82264,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141647,7 +82352,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141677,66 +82382,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141765,7 +82411,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -141795,243 +82441,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142060,7 +82470,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142090,66 +82500,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142178,7 +82529,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142208,184 +82559,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142414,7 +82588,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142444,7 +82618,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142473,7 +82647,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142503,7 +82677,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142532,7 +82706,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142562,7 +82736,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142591,7 +82765,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142621,125 +82795,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142827,7 +82883,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -142857,35 +82913,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -142893,95 +82920,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -143004,7 +82942,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143034,7 +82972,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143063,7 +83001,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143093,7 +83031,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143122,7 +83060,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143152,35 +83090,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -143188,95 +83097,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -143342,65 +83162,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -143417,7 +83178,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143447,125 +83208,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143594,7 +83237,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143624,7 +83267,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143653,7 +83296,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143683,7 +83326,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143771,7 +83414,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143801,7 +83444,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143889,7 +83532,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143919,7 +83562,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143948,7 +83591,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -143978,66 +83621,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144066,7 +83650,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144096,7 +83680,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144125,7 +83709,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144155,7 +83739,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144184,7 +83768,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144214,7 +83798,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144243,7 +83827,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144273,7 +83857,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144361,7 +83945,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144433,65 +84017,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -144509,7 +84034,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144640,124 +84165,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -144774,7 +84181,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144804,7 +84211,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144951,7 +84358,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -144981,65 +84388,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -145069,7 +84417,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145099,7 +84447,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145128,7 +84476,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145158,66 +84506,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145289,65 +84578,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -145407,65 +84637,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -145600,7 +84771,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -145630,271 +84801,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -145902,272 +84808,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build185-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -146190,7 +84830,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146220,7 +84860,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146249,7 +84889,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146279,7 +84919,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146308,7 +84948,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146338,7 +84978,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146367,7 +85007,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146397,7 +85037,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build187-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146426,7 +85066,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146456,7 +85096,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146528,242 +85168,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -146780,7 +85184,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146810,7 +85214,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build188-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146839,7 +85243,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146869,7 +85273,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -146941,65 +85345,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -147016,7 +85361,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147046,243 +85391,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build188-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147472,242 +85581,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build187-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build189-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build186-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -147724,7 +85597,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147754,7 +85627,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147783,7 +85656,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147813,7 +85686,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build188-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147842,7 +85715,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147872,7 +85745,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build189-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147901,7 +85774,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -147931,7 +85804,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build186-m1",
+              "id": "build185-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148019,7 +85892,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148049,7 +85922,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build185-m1",
+              "id": "build186-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148259,7 +86132,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148289,7 +86162,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148377,7 +86250,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148407,7 +86280,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148436,7 +86309,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148466,7 +86339,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148731,7 +86604,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148761,66 +86634,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148849,7 +86663,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148879,7 +86693,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148908,7 +86722,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -148938,124 +86752,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -149144,7 +86840,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149174,66 +86870,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149262,7 +86899,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149292,7 +86929,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149321,7 +86958,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149351,7 +86988,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149380,7 +87017,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149410,7 +87047,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149439,7 +87076,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -149469,94 +87106,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -149564,508 +87113,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -150088,7 +87135,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150118,7 +87165,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150147,7 +87194,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150177,94 +87224,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -150272,154 +87231,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -150442,7 +87253,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150472,7 +87283,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150501,7 +87312,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150531,7 +87342,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150560,7 +87371,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150590,7 +87401,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -150682,124 +87493,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -150859,65 +87552,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -151036,65 +87670,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -151111,7 +87686,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151141,7 +87716,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151170,7 +87745,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151200,7 +87775,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151229,7 +87804,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151259,7 +87834,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151331,65 +87906,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -151449,124 +87965,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -151583,7 +87981,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151613,7 +88011,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151642,7 +88040,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151672,125 +88070,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151819,7 +88099,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -151849,35 +88129,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -151885,213 +88136,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -152114,7 +88158,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152144,7 +88188,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152173,7 +88217,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152203,7 +88247,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152232,7 +88276,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152262,7 +88306,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152570,65 +88614,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -152763,7 +88748,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152793,7 +88778,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152826,65 +88811,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -152930,7 +88856,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -152960,7 +88886,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153048,7 +88974,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153078,66 +89004,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153166,7 +89033,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153196,243 +89063,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153461,7 +89092,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153491,66 +89122,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153579,7 +89151,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153609,184 +89181,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153815,7 +89210,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153845,7 +89240,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153874,7 +89269,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153904,7 +89299,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153933,7 +89328,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153963,7 +89358,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -153992,7 +89387,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154022,125 +89417,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154228,7 +89505,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154258,35 +89535,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -154294,95 +89542,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -154405,7 +89564,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154435,7 +89594,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154464,7 +89623,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154494,7 +89653,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154523,7 +89682,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154553,35 +89712,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -154589,95 +89719,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -154743,65 +89784,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -154818,7 +89800,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154848,125 +89830,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -154995,7 +89859,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155025,7 +89889,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155054,7 +89918,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155084,7 +89948,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155172,7 +90036,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155202,7 +90066,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155290,7 +90154,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155320,7 +90184,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155349,7 +90213,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155379,66 +90243,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155467,7 +90272,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155497,7 +90302,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155526,7 +90331,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155556,7 +90361,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155585,7 +90390,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155615,7 +90420,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155644,7 +90449,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155674,7 +90479,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155762,7 +90567,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -155834,65 +90639,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -155910,7 +90656,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156041,124 +90787,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -156175,7 +90803,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156205,7 +90833,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156352,7 +90980,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156382,65 +91010,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -156470,7 +91039,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156500,7 +91069,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156529,7 +91098,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156559,66 +91128,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -156690,65 +91200,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -156808,65 +91259,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -157001,7 +91393,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157031,271 +91423,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
@@ -157303,272 +91430,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build138-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -157591,7 +91452,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157621,7 +91482,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157650,7 +91511,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157680,7 +91541,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157709,7 +91570,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157739,7 +91600,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157768,7 +91629,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157798,7 +91659,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build140-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157827,7 +91688,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157857,7 +91718,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -157929,242 +91790,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -158181,7 +91806,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -158211,7 +91836,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build141-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -158240,7 +91865,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -158270,7 +91895,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -158342,65 +91967,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -158417,7 +91983,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -158447,243 +92013,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build141-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -158873,242 +92203,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build140-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build142-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build139-m1",
-              "os": "Windows-2008ServerR2-SP1",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -159125,7 +92219,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159155,7 +92249,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159184,7 +92278,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159214,7 +92308,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build141-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159243,7 +92337,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159273,7 +92367,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build142-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159302,7 +92396,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159332,7 +92426,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build139-m1",
+              "id": "build138-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159420,7 +92514,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159450,7 +92544,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build138-m1",
+              "id": "build139-m1",
               "os": "Windows-2008ServerR2-SP1",
               "pool": "Chrome-perf"
             }
@@ -159660,7 +92754,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159690,7 +92784,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159778,7 +92872,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159808,7 +92902,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159837,7 +92931,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -159867,7 +92961,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160132,7 +93226,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160162,66 +93256,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160250,7 +93285,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160280,7 +93315,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160309,7 +93344,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160339,124 +93374,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -160545,7 +93462,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160575,66 +93492,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160663,7 +93521,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160693,7 +93551,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160722,7 +93580,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160752,7 +93610,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160781,7 +93639,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160811,7 +93669,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160840,7 +93698,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -160870,94 +93728,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -160965,508 +93735,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -161489,7 +93757,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161519,7 +93787,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161548,7 +93816,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161578,94 +93846,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -161673,154 +93853,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -161843,7 +93875,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161873,7 +93905,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161902,7 +93934,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161932,7 +93964,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161961,7 +93993,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -161991,7 +94023,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162083,124 +94115,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -162260,65 +94174,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -162437,65 +94292,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -162512,7 +94308,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162542,7 +94338,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162571,7 +94367,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162601,7 +94397,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162630,7 +94426,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162660,7 +94456,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -162752,65 +94548,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -162870,124 +94607,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -163004,7 +94623,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163034,7 +94653,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163063,7 +94682,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163093,125 +94712,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163240,7 +94741,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163270,35 +94771,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -163306,213 +94778,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -163535,7 +94800,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163565,7 +94830,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163594,7 +94859,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163624,7 +94889,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163653,7 +94918,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163683,7 +94948,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -163991,65 +95256,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -164184,7 +95390,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164214,7 +95420,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164247,65 +95453,6 @@
       },
       {
         "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "power.idle_platform",
           "-v",
           "--upload-results",
@@ -164351,7 +95498,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164381,7 +95528,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164469,7 +95616,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164499,66 +95646,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164587,7 +95675,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164617,243 +95705,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164882,7 +95734,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -164912,66 +95764,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165000,7 +95793,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165030,184 +95823,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165236,7 +95852,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165266,7 +95882,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165295,7 +95911,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165325,7 +95941,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165354,7 +95970,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165384,7 +96000,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165413,7 +96029,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165443,125 +96059,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165649,7 +96147,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165679,35 +96177,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -165715,95 +96184,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -165826,7 +96206,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165856,7 +96236,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165885,7 +96265,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165915,7 +96295,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165944,7 +96324,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -165974,35 +96354,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -166010,95 +96361,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -166164,65 +96426,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -166239,7 +96442,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166269,125 +96472,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166416,7 +96501,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166446,7 +96531,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166475,7 +96560,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166505,7 +96590,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166593,7 +96678,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166623,7 +96708,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166711,7 +96796,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166741,7 +96826,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166770,7 +96855,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166800,66 +96885,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166888,7 +96914,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166918,7 +96944,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166947,7 +96973,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -166977,7 +97003,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167006,7 +97032,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167036,7 +97062,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167065,7 +97091,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167095,7 +97121,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167183,7 +97209,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167255,65 +97281,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -167331,7 +97298,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167462,124 +97429,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -167596,7 +97445,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167626,7 +97475,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167773,7 +97622,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167803,65 +97652,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -167891,7 +97681,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167921,7 +97711,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167950,7 +97740,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -167980,66 +97770,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -168111,65 +97842,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -168229,65 +97901,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -168422,7 +98035,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -168452,271 +98065,6 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
               "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
@@ -168724,272 +98072,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build143-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -169012,7 +98094,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169042,7 +98124,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169071,7 +98153,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169101,7 +98183,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169130,7 +98212,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169160,7 +98242,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169189,7 +98271,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169219,7 +98301,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build145-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169248,7 +98330,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169278,7 +98360,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169350,242 +98432,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -169602,7 +98448,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169632,7 +98478,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build146-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169661,7 +98507,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169691,7 +98537,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169763,65 +98609,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -169838,7 +98625,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -169868,243 +98655,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build146-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170294,242 +98845,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build145-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build147-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "102b:0532",
-              "id": "build144-m1",
-              "os": "Windows-2012ServerR2-SP0",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -170546,7 +98861,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170576,7 +98891,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170605,7 +98920,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170635,7 +98950,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build146-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170664,7 +98979,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170694,7 +99009,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build147-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170723,7 +99038,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170753,7 +99068,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build144-m1",
+              "id": "build143-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170841,7 +99156,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -170871,7 +99186,7 @@
           "dimension_sets": [
             {
               "gpu": "102b:0532",
-              "id": "build143-m1",
+              "id": "build144-m1",
               "os": "Windows-2012ServerR2-SP0",
               "pool": "Chrome-perf"
             }
@@ -171081,7 +99396,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171111,7 +99426,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171199,7 +99514,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171229,7 +99544,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171258,7 +99573,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171288,7 +99603,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171553,7 +99868,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171583,66 +99898,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_perf.pywebsocket",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_perf.pywebsocket.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171671,7 +99927,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171701,7 +99957,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171730,7 +99986,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171760,124 +100016,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "blink_style.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "blink_style.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -171966,7 +100104,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -171996,66 +100134,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.cssqueryjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.cssqueryjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172084,7 +100163,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172114,7 +100193,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172143,7 +100222,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172173,7 +100252,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172202,7 +100281,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172232,7 +100311,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172261,7 +100340,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172291,94 +100370,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -172386,508 +100377,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibattrprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibattrprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibeventprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibeventprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyjquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyjquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibmodifyprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibmodifyprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstylejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstylejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibstyleprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibstyleprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraversejquery",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraversejquery.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "dromaeo.jslibtraverseprototype",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "dromaeo.jslibtraverseprototype.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -172910,7 +100399,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172940,7 +100429,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172969,7 +100458,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -172999,94 +100488,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -173094,154 +100495,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "gpu_times.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "gpu_times.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -173264,7 +100517,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173294,7 +100547,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173323,7 +100576,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173353,7 +100606,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173382,7 +100635,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173412,7 +100665,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173484,124 +100737,6 @@
       },
       {
         "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.cluster_telemetry",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.cluster_telemetry.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "loading.mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "loading.mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 14400,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.android.tough_video_cases",
           "-v",
           "--upload-results",
@@ -173661,65 +100796,6 @@
       },
       {
         "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.android.tough_video_cases_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.android.tough_video_cases_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.chromeOS.tough_video_cases",
           "-v",
           "--upload-results",
@@ -173838,65 +100914,6 @@
       },
       {
         "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "media.media_cns_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "media.media_cns_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "media.mse_cases",
           "-v",
           "--upload-results",
@@ -173913,7 +100930,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173943,7 +100960,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -173972,7 +100989,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174002,7 +101019,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174031,7 +101048,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174061,7 +101078,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174133,65 +101150,6 @@
       },
       {
         "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.blink_memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.blink_memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.desktop",
           "-v",
           "--upload-results",
@@ -174251,124 +101209,6 @@
       },
       {
         "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.long_running_dual_browser_test",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.long_running_dual_browser_test.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "memory.long_running_idle_gmail_background_tbmv2",
           "-v",
           "--upload-results",
@@ -174385,7 +101225,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174415,7 +101255,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174444,7 +101284,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174474,125 +101314,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "memory.top_10_mobile_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "memory.top_10_mobile_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174621,7 +101343,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174651,35 +101373,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -174687,213 +101380,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.blink_perf_stress",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.blink_perf_stress.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "oilpan_gc_times.tough_animation_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "oilpan_gc_times.tough_animation_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -174916,7 +101402,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174946,7 +101432,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -174975,7 +101461,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175005,7 +101491,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175034,7 +101520,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175064,7 +101550,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175372,65 +101858,6 @@
       },
       {
         "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "page_cycler_v2.top_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "page_cycler_v2.top_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "page_cycler_v2.tough_layout_cases",
           "-v",
           "--upload-results",
@@ -175565,7 +101992,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175595,66 +102022,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.android_acceptance",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.android_acceptance.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175712,7 +102080,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175742,7 +102110,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175830,7 +102198,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175860,66 +102228,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.tough_ad_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.tough_ad_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175948,7 +102257,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -175978,243 +102287,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "power.typical_10_mobile_reload",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "power.typical_10_mobile_reload.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176243,7 +102316,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176273,66 +102346,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "rasterize_and_record_micro.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "rasterize_and_record_micro.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176361,7 +102375,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176391,184 +102405,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.gpu_rasterization.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.gpu_rasterization.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "repaint.key_mobile_sites_repaint",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "repaint.key_mobile_sites_repaint.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "robohornet_pro",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "robohornet_pro.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176597,7 +102434,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176627,7 +102464,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176656,7 +102493,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176686,7 +102523,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176715,7 +102552,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176745,7 +102582,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176774,7 +102611,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -176804,125 +102641,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.top_25_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.top_25_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177010,7 +102729,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177040,35 +102759,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -177076,95 +102766,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.gpu_rasterization.tough_scrolling_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.gpu_rasterization.tough_scrolling_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -177187,7 +102788,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177217,7 +102818,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177246,7 +102847,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177276,7 +102877,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177305,7 +102906,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177335,35 +102936,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -177371,95 +102943,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -177525,65 +103008,6 @@
       },
       {
         "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.pathological_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.pathological_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "smoothness.scrolling_tough_ad_cases",
           "-v",
           "--upload-results",
@@ -177600,7 +103024,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177630,125 +103054,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.sync_scroll.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.sync_scroll.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177777,7 +103083,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177807,7 +103113,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177836,7 +103142,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177866,7 +103172,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177954,7 +103260,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -177984,7 +103290,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178072,7 +103378,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178102,7 +103408,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178131,7 +103437,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178161,66 +103467,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "smoothness.tough_pinch_zoom_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "smoothness.tough_pinch_zoom_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178249,7 +103496,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178279,7 +103526,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178308,7 +103555,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178338,7 +103585,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178367,7 +103614,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178397,7 +103644,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178426,7 +103673,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178456,7 +103703,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178544,7 +103791,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178616,65 +103863,6 @@
       },
       {
         "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "speedometer-turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "speedometer-turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "speedometer",
           "-v",
           "--upload-results",
@@ -178692,7 +103880,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178823,124 +104011,6 @@
       },
       {
         "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.cold.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.cold.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "start_with_url.warm.startup_pages",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "start_with_url.warm.startup_pages.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "startup.cold.blank_page",
           "-v",
           "--upload-results",
@@ -178957,7 +104027,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -178987,7 +104057,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179134,7 +104204,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179164,65 +104234,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "startup.warm.chrome_signin",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "startup.warm.chrome_signin.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -179252,7 +104263,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179282,7 +104293,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179311,7 +104322,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179341,66 +104352,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "sunspider",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "sunspider.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179472,65 +104424,6 @@
       },
       {
         "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.common_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.common_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.memory_desktop",
           "-v",
           "--upload-results",
@@ -179590,65 +104483,6 @@
       },
       {
         "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "system_health.memory_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "system_health.memory_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 10800,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "system_health.webview_startup",
           "-v",
           "--upload-results",
@@ -179783,7 +104617,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -179813,271 +104647,6 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.character",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.character.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "text_selection.direction",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "text_selection.direction.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_hit_test_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_hit_test_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_idle_power_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_idle_power_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
               "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
@@ -180085,272 +104654,6 @@
           ],
           "expiration": 36000,
           "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_noop_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_noop_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.key_silk_cases",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.key_silk_cases.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build30-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.polymer",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.polymer.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "thread_times.simple_mobile_sites",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "thread_times.simple_mobile_sites.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
           "ignore_task_failure": true,
           "io_timeout": 3600
         }
@@ -180373,7 +104676,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180403,7 +104706,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180432,7 +104735,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180462,7 +104765,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180491,7 +104794,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180521,7 +104824,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180550,7 +104853,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180580,7 +104883,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build32-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180609,7 +104912,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180639,7 +104942,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180711,242 +105014,6 @@
       },
       {
         "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.detached_context_age_in_gc",
           "-v",
           "--upload-results",
@@ -180963,7 +105030,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -180993,7 +105060,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build33-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181022,7 +105089,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181052,7 +105119,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181124,65 +105191,6 @@
       },
       {
         "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.infinite_scroll_tbmv2",
           "-v",
           "--upload-results",
@@ -181199,7 +105207,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181229,243 +105237,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.key_mobile_sites_smooth",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.key_mobile_sites_smooth.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-classic_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-classic_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build33-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll-turbo_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll-turbo_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.mobile_infinite_scroll_tbmv2",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.mobile_infinite_scroll_tbmv2.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181655,242 +105427,6 @@
       },
       {
         "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_desktop_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_desktop_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build32-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build34-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_classic",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_classic.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=release_x64"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": false,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
-          "v8.runtimestats.browsing_mobile_turbo",
-          "-v",
-          "--upload-results",
-          "--output-format=chartjson",
-          "--browser=reference",
-          "--output-trace-tag=_ref"
-        ],
-        "isolate_name": "telemetry_perf_tests",
-        "name": "v8.runtimestats.browsing_mobile_turbo.reference",
-        "override_compile_targets": [
-          "telemetry_perf_tests"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "8086:161e",
-              "id": "build31-b1",
-              "os": "Windows-10-10240",
-              "pool": "Chrome-perf"
-            }
-          ],
-          "expiration": 36000,
-          "hard_timeout": 7200,
-          "ignore_task_failure": true,
-          "io_timeout": 3600
-        }
-      },
-      {
-        "args": [
           "v8.top_25_smooth",
           "-v",
           "--upload-results",
@@ -181907,7 +105443,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181937,7 +105473,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181966,7 +105502,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -181996,7 +105532,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build33-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -182025,7 +105561,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -182055,7 +105591,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build34-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -182084,7 +105620,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -182114,7 +105650,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build31-b1",
+              "id": "build30-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -182202,7 +105738,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
@@ -182232,7 +105768,7 @@
           "dimension_sets": [
             {
               "gpu": "8086:161e",
-              "id": "build30-b1",
+              "id": "build31-b1",
               "os": "Windows-10-10240",
               "pool": "Chrome-perf"
             }
diff --git a/src/testing/buildbot/chromium.webrtc.json b/src/testing/buildbot/chromium.webrtc.json
index bc995a0..7768a76 100644
--- a/src/testing/buildbot/chromium.webrtc.json
+++ b/src/testing/buildbot/chromium.webrtc.json
@@ -6,9 +6,7 @@
       "content_browsertests",
       "content_unittests",
       "frame_analyzer",
-      "gpu_ipc_service_unittests",
-      "media_unittests",
-      "midi_unittests",
+      "jingle_unittests",
       "remoting_unittests"
     ]
   },
@@ -19,9 +17,7 @@
       "content_browsertests",
       "content_unittests",
       "frame_analyzer",
-      "gpu_ipc_service_unittests",
-      "media_unittests",
-      "midi_unittests",
+      "jingle_unittests",
       "remoting_unittests"
     ]
   },
@@ -32,9 +28,7 @@
       "content_browsertests",
       "content_unittests",
       "frame_analyzer",
-      "gpu_ipc_service_unittests",
-      "media_unittests",
-      "midi_unittests",
+      "jingle_unittests",
       "remoting_unittests"
     ]
   }
diff --git a/src/testing/buildbot/chromium.win.json b/src/testing/buildbot/chromium.win.json
index cfac60e..fef8bbe 100644
--- a/src/testing/buildbot/chromium.win.json
+++ b/src/testing/buildbot/chromium.win.json
@@ -271,12 +271,6 @@
         "swarming": {
           "can_use_on_swarming_builders": true
         },
-        "test": "mojo_public_application_unittests"
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "mojo_public_bindings_unittests"
       },
       {
@@ -1068,6 +1062,18 @@
       },
       {
         "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "blink_heap_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "blink_platform_unittests"
+      },
+      {
+        "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 10
         },
@@ -1312,12 +1318,6 @@
         "swarming": {
           "can_use_on_swarming_builders": true
         },
-        "test": "mojo_public_application_unittests"
-      },
-      {
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
         "test": "mojo_public_bindings_unittests"
       },
       {
@@ -1474,7 +1474,19 @@
         "swarming": {
           "can_use_on_swarming_builders": true
         },
+        "test": "webkit_unit_tests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
         "test": "wm_unittests"
+      },
+      {
+        "swarming": {
+          "can_use_on_swarming_builders": true
+        },
+        "test": "wtf_unittests"
       }
     ],
     "isolated_scripts": [
diff --git a/src/testing/buildbot/filters/BUILD.gn b/src/testing/buildbot/filters/BUILD.gn
index ac9af62..b814a18 100644
--- a/src/testing/buildbot/filters/BUILD.gn
+++ b/src/testing/buildbot/filters/BUILD.gn
@@ -35,6 +35,7 @@
   data = [
     "//testing/buildbot/filters/cast-linux.content_browsertests.filter",
     "//testing/buildbot/filters/isolate-extensions.content_browsertests.filter",
+    "//testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter",
     "//testing/buildbot/filters/site-per-process.content_browsertests.filter",
   ]
 }
diff --git a/src/testing/buildbot/filters/ash_mus_unittests.filter b/src/testing/buildbot/filters/ash_mus_unittests.filter
index 02224f2..5dc857c 100644
--- a/src/testing/buildbot/filters/ash_mus_unittests.filter
+++ b/src/testing/buildbot/filters/ash_mus_unittests.filter
@@ -257,6 +257,7 @@
 -ScreenLayoutObserverTest.ExitMirrorModeBecauseOfThirdDisplayMessage
 -ScreenLayoutObserverTest.ExitMirrorModeNoInternalDisplayBecauseOfDisplayRemovedMessage
 -ScreenLayoutObserverTest.OverscanDisplay
+-ScreenLayoutObserverTest.RotationNotification
 -ScreenLayoutObserverTest.UpdateAfterSuppressDisplayNotification
 -ScreenPositionControllerTest.ConvertHostPointToScreen
 -ScreenPositionControllerTest.ConvertHostPointToScreenHiDPI
@@ -343,7 +344,6 @@
 -TrayIMETest.PerformActionOnDetailedView
 -TrayRotationLockTest.CreateDefaultView
 -TrayRotationLockTest.CreateDefaultViewDuringMaximizeMode
--TrayRotationLockTest.CreateTrayViewDuringMaximizeModeAndRotationLock
 -TrayRotationLockTest.DefaultViewVisibilityChangesDuringMaximizeMode
 -TrayRotationLockTest.InternalDisplayNotAvailableAtCreation
 -TrayRotationLockTest.PerformActionOnDefaultView
diff --git a/src/testing/buildbot/filters/mash.browser_tests.filter b/src/testing/buildbot/filters/mash.browser_tests.filter
index 93388f3..f928258 100644
--- a/src/testing/buildbot/filters/mash.browser_tests.filter
+++ b/src/testing/buildbot/filters/mash.browser_tests.filter
@@ -48,7 +48,6 @@
 ChromeServiceWorkerTest.FailRegisterServiceWorkerWhenJSDisabled
 ChromeServiceWorkerTest.FallbackMainResourceRequestWhenJSDisabled
 ConstrainedWebDialogBrowserTest.ReleaseWebContents
-ContentVerifierPolicyTest.FailedUpdateRetries
 ContentVerifierPolicyTest.PRE_PolicyCorruptedOnStartup
 ContentVerifierPolicyTest.PolicyCorruptedOnStartup
 CreateNewFolder/FileManagerBrowserTest.Test/0
@@ -58,7 +57,6 @@
 DefaultTaskDialog/FileManagerBrowserTest.Test/0
 DefaultTaskDialog/FileManagerBrowserTest.Test/1
 DefaultTaskDialog/FileManagerBrowserTest.Test/2
-Delete/FileManagerBrowserTest.Test/0
 Delete/FileManagerBrowserTest.Test/1
 DeviceStatusCollectorNetworkInterfacesTest.NetworkInterfaces
 DeviceStatusCollectorNetworkInterfacesTest.ReportIfPublicSession
@@ -104,7 +102,6 @@
 DirectoryTreeContextMenu/FileManagerBrowserTest.Test/20
 DirectoryTreeContextMenu/FileManagerBrowserTest.Test/21
 DirectoryTreeContextMenu/FileManagerBrowserTest.Test/22
-DirectoryTreeContextMenu/FileManagerBrowserTest.Test/23
 DirectoryTreeContextMenu/FileManagerBrowserTest.Test/24
 DirectoryTreeContextMenu/FileManagerBrowserTest.Test/3
 DirectoryTreeContextMenu/FileManagerBrowserTest.Test/4
@@ -169,13 +166,8 @@
 OpenAudioFiles/FileManagerBrowserTest.Test/4
 OpenAudioFiles/FileManagerBrowserTest.Test/5
 OpenAudioFiles/FileManagerBrowserTest.Test/6
-OpenAudioFiles/FileManagerBrowserTest.Test/7
-OpenAudioFiles/FileManagerBrowserTest.Test/8
 OpenFileDialog/FileManagerBrowserTest.Test/0
-OpenFileDialog/FileManagerBrowserTest.Test/1
 OpenFileDialog/FileManagerBrowserTest.Test/2
-OpenFileDialog/FileManagerBrowserTest.Test/3
-OpenFileDialog/FileManagerBrowserTest.Test/4
 OpenFileDialog/FileManagerBrowserTest.Test/5
 PageClickTrackerTest.PageClickTrackerClickDisabledInputDoesNotResetClickCounter
 PageClickTrackerTest.PageClickTrackerDisabledInputClickedNoEvent
@@ -226,8 +218,6 @@
 PolicyCertVerifierTest.VerifyTrustedCert
 PolicyCertVerifierTest.VerifyUntrustedCert
 PolicyCertVerifierTest.VerifyUsingAdditionalTrustAnchor
-PrerenderBrowserTestWithNaCl.PrerenderNaClPluginEnabled
-PrintPreviewDestinationSearchTest.Select
 Providers/FileManagerBrowserTest.Test/0
 Providers/FileManagerBrowserTest.Test/1
 Providers/FileManagerBrowserTest.Test/2
diff --git a/src/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter b/src/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
new file mode 100644
index 0000000..c9da201
--- /dev/null
+++ b/src/testing/buildbot/filters/mojo.fyi.network_content_browsertests.filter
@@ -0,0 +1,130 @@
+# http://crbug.com/715640
+-BackgroundSyncBrowserTest*
+-ServiceWorker*
+
+# http://crbug.com/715677
+-Blob*
+
+# http://crbug.com/715630
+-DownloadContentTest.*
+
+
+-AsyncResourceHandlerBrowserTest/AsyncResourceHandlerBrowserTest.UploadProgress*
+-BrowserSideNavigationBrowserTest.FailedNavigation
+-ClearSiteDataThrottleBrowserTest.Insecure
+-ClearSiteDataThrottleBrowserTest.Redirect
+-ClearSiteDataThrottleBrowserTest.Types
+-CrossSiteResourceHandlerTest.NoDeliveryToDetachedFrame
+-CrossSiteTransferTest/CrossSiteTransferTest.NoLeakOnCrossSiteCancel*
+-CrossSiteTransferTest/CrossSiteTransferTest.ReplaceEntryCrossProcessThenTransfer*
+-DataUrlNavigationBrowserTest.OctetStream_BrowserInitiated_Download
+-DataUrlNavigationBrowserTest.OctetStream_FormPost_Download
+-DataUrlNavigationBrowserTest.OctetStream_NavigationFromFrame_Download
+-DataUrlNavigationBrowserTest.OctetStream_Navigation_Download
+-DataUrlNavigationBrowserTest.OctetStream_WindowOpen_Download
+-DataUrlNavigationBrowserTest.UnknownMimeType_BrowserInitiated_Download
+-DataUrlNavigationBrowserTest.UnknownMimeType_FormPost_Download
+-DataUrlNavigationBrowserTest.UnknownMimeType_NavigationFromFrame_Download
+-DataUrlNavigationBrowserTest.UnknownMimeType_Navigation_Download
+-DataUrlNavigationBrowserTest.UnknownMimeType_WindowOpen_Download
+-DevToolsProtocolTest.CertificateError
+-DevToolsProtocolTest.SubresourceWithCertificateError
+-FrameTreeBrowserTest.NavigateGrandchildToBlob
+-GenericSensorBrowserTest.AmbientLightSensorTest
+-HostZoomMapImplBrowserTest.GetZoomForView_Host
+-HostZoomMapImplBrowserTest.GetZoomForView_HostAndScheme
+-IndexedDBBrowserTestInstantiation/IndexedDBBrowserTest.OperationOnCorruptedOpenDatabase*
+-MemoryCoordinatorImplBrowserTest.CanSuspendRenderer
+-MemoryCoordinatorImplBrowserTest.GetStateForProcess
+-MemoryCoordinatorImplBrowserTest.HandleAdded
+-MemoryCoordinatorWithServiceWorkerTest.CannotSuspendRendererWithServiceWorker
+-MHTMLGenerationTest.GenerateMHTMLIgnoreNoStore
+-MHTMLGenerationTest.GenerateMHTMLIgnoreNoStoreSubFrame
+-MHTMLGenerationTest.GenerateMHTMLObeyNoStoreMainFrame
+-MHTMLGenerationTest.GenerateMHTMLObeyNoStoreSubFrame
+-MHTMLGenerationTest.InvalidPath
+-MHTMLGenerationTest.ViewedMHTMLContainsNoStoreContentIfNoCacheControlPolicy
+-MHTMLGenerationTest.ViewedMHTMLDoesNotContainNoStoreContent
+-ManifestBrowserTest.UseCredentialsSendCookies
+-MediaSessionImplVisibilityBrowserTestInstances/MediaSessionImplVisibilityBrowserTest*
+-NavigationControllerBrowserTest.204Navigation
+-NavigationControllerBrowserTest.CorrectLengthWithNewTabNavigatingFromWebUI
+-NavigationControllerBrowserTest.ErrorPageReplacement
+-NavigationControllerBrowserTest.NavigateFromLoadDataWithBaseURL
+-NavigationControllerBrowserTest.NoDialogsFromSwappedOutFrames
+-NavigationControllerBrowserTest.RefererStoredForSubFrame
+-ParallelDownloadTest.ParallelDownloadComplete
+-PaymentAppBrowserTest.PaymentAppInvocation
+-PlzNavigateNavigationHandleImplBrowserTest.ErrorPageNetworkError
+-PreviewsStateResourceDispatcherHostBrowserTest.ShouldEnableLoFiModeNavigateBackThenForward
+-PreviewsStateResourceDispatcherHostBrowserTest.ShouldEnableLoFiModeOff
+-PreviewsStateResourceDispatcherHostBrowserTest.ShouldEnableLoFiModeOn
+-PreviewsStateResourceDispatcherHostBrowserTest.ShouldEnableLoFiModeReload
+-PreviewsStateResourceDispatcherHostBrowserTest.ShouldEnableLoFiModeReloadDisableLoFi
+-RenderFrameHostImplBrowserTest.IframeBeforeUnloadParentHang
+-RenderFrameHostManagerTest.ChromeSchemeSubframesStayInProcessWithParent
+-RenderFrameHostManagerTest.ClearPendingWebUIOnCommit
+-RenderFrameHostManagerTest.ClickLinkAfter204Error
+-RenderFrameHostManagerTest.ForceSwapAfterWebUIBindings
+-RenderFrameHostManagerTest.WebUIGetsBindings
+-RenderFrameHostManagerTest.WebUIJavascriptDisallowedAfterSwapOut
+-RenderFrameMessageFilterBrowserTest.Cookies
+-RenderFrameMessageFilterBrowserTest.SameSiteCookies
+-RenderThreadImplBrowserTest.NonResourceDispatchIPCTasksDontGoThroughScheduler
+-RenderThreadImplBrowserTest.ResourceDispatchIPCTasksGoThroughScheduler
+-RenderViewBrowserTest.ConfirmCacheInformationPlumbed
+-RequestDataResourceDispatcherHostBrowserTest.Basic
+-RequestDataResourceDispatcherHostBrowserTest.BasicCrossSite
+-RequestDataResourceDispatcherHostBrowserTest.CrossOriginAuxiliary
+-RequestDataResourceDispatcherHostBrowserTest.CrossOriginNested
+-RequestDataResourceDispatcherHostBrowserTest.FailedNavigation
+-RequestDataResourceDispatcherHostBrowserTest.SameOriginAuxiliary
+-RequestDataResourceDispatcherHostBrowserTest.SameOriginNested
+-ResourceDispatcherHostBrowserTest.ContentDispositionEmpty
+-ResourceDispatcherHostBrowserTest.ContentDispositionInline
+-ResourceDispatcherHostBrowserTest.CookiePolicy
+-ResourceDispatcherHostBrowserTest.CrossOriginRedirectBlocked
+-ResourceDispatcherHostBrowserTest.CrossSiteAfterCrash
+-ResourceDispatcherHostBrowserTest.CrossSiteNavigationNonBuffered
+-ResourceDispatcherHostBrowserTest.CrossSiteNoUnloadOn204
+-ResourceDispatcherHostBrowserTest.PageTransitionClientRedirect
+-ResourceDispatcherHostBrowserTest.SniffHTMLWithNoContentType
+-ResourceDispatcherHostBrowserTest.SniffNoContentTypeNoData
+-ResourceDispatcherHostBrowserTest.SyncXMLHttpRequest
+-SessionHistoryTest.FrameFormBackForward
+-SessionHistoryTest.HistoryLength
+-SessionHistoryTest.CrossFrameFormBackForward
+-SitePerProcessBrowserTest.CrossSiteIframeBlockedByCSPInheritedBySrcDocParent
+-SitePerProcessBrowserTest.CrossSiteIframeBlockedByParentCSPFromHeaders
+-SitePerProcessBrowserTest.CrossProcessFocusChangeFiresBlurEvents
+-SitePerProcessBrowserTest.ProxyCreationSkipsSubtree
+-SitePerProcessBrowserTest.SubframeWindowFocus
+-SitePerProcessDownloadDevToolsBrowserTest.NotCommittedNavigationDoesNotBlockAgent
+-SitePerProcessFeaturePolicyBrowserTest.ContainerPolicyDynamic
+-SitePerProcessFeaturePolicyBrowserTest.ContainerPolicySandboxDynamic
+-SitePerProcessFeaturePolicyBrowserTest.TestFeaturePolicyReplicationFromRemoteFrames
+-SitePerProcessFeaturePolicyBrowserTest.TestFeaturePolicyReplicationOnCrossOriginNavigation
+-SitePerProcessFeaturePolicyBrowserTest.TestFeaturePolicyReplicationOnSameOriginNavigation
+-SitePerProcessIgnoreCertErrorsBrowserTest.SubresourceWithCertificateErrors
+-TouchInputBrowserTest.MultiPointTouchPress
+-TouchInputBrowserTest.TouchHandlerNoConsume
+-WebContentsImplBrowserTest.ClearNonVisiblePendingOnFail
+-WebContentsImplBrowserTest.DownloadImage_Deny_FileImage
+-WebContentsImplBrowserTest.GetSizeForNewRenderView
+-WebContentsImplBrowserTest.UserAgentOverride
+-WebContentsViewAuraTest.ScreenshotForSwappedOutRenderViews
+-WebRtcGetUserMediaOldConstraintsBrowserTest.TwoGetUserMediaWithFirstHdSecondVga
+-WebRtcGetUserMediaOldConstraintsBrowserTest.TwoGetUserMediaWithSecondVideoCropped
+-WebRtcInternalsBrowserTest.AddAndRemovePeerConnection
+-WebRtcInternalsBrowserTest.AddStats
+-WebRtcInternalsBrowserTest.BweCompoundGraph
+-WebRtcInternalsBrowserTest.ConvertedGraphs
+-WebRtcInternalsBrowserTest.CreatePageDump
+-WebRtcInternalsBrowserTest.ReceivedPropagationDelta
+-WebRtcInternalsBrowserTest.UpdateAllPeerConnections
+-WebRtcInternalsBrowserTest.UpdateGetUserMedia
+-WebRtcInternalsBrowserTest.UpdatePeerConnection
+-WebUIMojoTest.EndToEndPing
+-WorkerTest.SharedWorkerHttpAuth
+-WorkerTest.WorkerHttpAuth
+-WorkerTest.WorkerTlsClientAuth
\ No newline at end of file
diff --git a/src/testing/buildbot/filters/mus.browser_tests.filter b/src/testing/buildbot/filters/mus.browser_tests.filter
index 6e8aee8..ea8346c 100644
--- a/src/testing/buildbot/filters/mus.browser_tests.filter
+++ b/src/testing/buildbot/filters/mus.browser_tests.filter
@@ -1,6 +1,7 @@
-BrowserTest.*
 # Failing test
 -BrowserTest.FullscreenBookmarkBar
+-BrowserTest.DisableOptionsAndImportMenuItemsConsistently
+-BrowserTest.ReattachDevToolsWindow
 
 # Flaky tests -crbug.com/707195
 -BrowserTest.AboutVersion
@@ -12,138 +13,4 @@
 -BrowserTest.Title
 
 # Trying to whitelist
-BluetoothInternalsTest.Startup_BluetoothInternals
-BrowserDialogTest.Invoke
-BrowsingDataRemoverTransportSecurityStateBrowserTest.ClearTransportSecurityState
-CastSessionBrowserTest.CreateAndDestroy
 ChromeContentRendererClientSearchBoxTest.RewriteThumbnailURL
-ChromeRenderFrameObserverTest.SkipCapturingSubFrames
-ChromeRenderViewTest.DidBlockContentType
-ChromeRenderViewTest.ImagesAllowedByDefault
-ChromeRenderViewTest.ImagesBlockedByDefault
-ChromeRenderViewTest.JSBlockSentAfterPageLoad
-ChromeRenderViewTest.PluginsTemporarilyAllowed
-ChromeServiceWorkerManifestFetchTest.OtherOrigin
-ChromeServiceWorkerManifestFetchTest.OtherOriginUseCredentials
-ChromeServiceWorkerManifestFetchTest.SameOrigin
-ChromeServiceWorkerManifestFetchTest.SameOriginUseCredentials
-ChromeServiceWorkerTest.CanCloseIncognitoWindowWithServiceWorkerController
-ChromeServiceWorkerTest.CanShutDownWithRegisteredServiceWorker
-ChromeServiceWorkerTest.FailRegisterServiceWorkerWhenJSDisabled
-ChromeServiceWorkerTest.FallbackMainResourceRequestWhenJSDisabled
-ConstrainedWebDialogBrowserTest.ReleaseWebContents
-ContentVerifierPolicyTest.FailedUpdateRetries
-ContentVerifierPolicyTest.PRE_PolicyCorruptedOnStartup
-ContentVerifierPolicyTest.PolicyCorruptedOnStartup
-DeviceStatusCollectorNetworkInterfacesTest.NetworkInterfaces
-DeviceStatusCollectorNetworkInterfacesTest.ReportIfPublicSession
-DeviceStatusCollectorTest.ActivityCrossingMidnight
-DeviceStatusCollectorTest.ActivityTimesEnabledByDefault
-DeviceStatusCollectorTest.ActivityTimesKeptUntilSubmittedSuccessfully
-DeviceStatusCollectorTest.ActivityTimesOff
-DeviceStatusCollectorTest.AllActive
-DeviceStatusCollectorTest.AllIdle
-DeviceStatusCollectorTest.DevSwitchBootMode
-DeviceStatusCollectorTest.MaxStoredPeriods
-DeviceStatusCollectorTest.MixedStates
-DeviceStatusCollectorTest.NoOsUpdateStatusByDefault
-DeviceStatusCollectorTest.NoRegularUserAndroidReportingWhenDisabled
-DeviceStatusCollectorTest.NoRegularUserAndroidReportingWhenNotAffiliated
-DeviceStatusCollectorTest.NoSessionStatusIfNoSession
-DeviceStatusCollectorTest.NoSessionStatusIfSessionReportingDisabled
-DeviceStatusCollectorTest.RegularUserAndroidReporting
-DeviceStatusCollectorTest.ReportOsUpdateStatus
-DeviceStatusCollectorTest.ReportOsUpdateStatusUpToDate
-DeviceStatusCollectorTest.ReportUsers
-DeviceStatusCollectorTest.StateKeptInPref
-DeviceStatusCollectorTest.TestAvailableMemory
-DeviceStatusCollectorTest.TestCPUSamples
-DeviceStatusCollectorTest.TestCPUTemp
-DeviceStatusCollectorTest.TestSoundVolume
-DeviceStatusCollectorTest.TestVolumeInfo
-DeviceStatusCollectorTest.Times
-DeviceStatusCollectorTest.VersionInfo
-DownloadInterruptReasonEnumsSynced.DownloadInterruptReasonEnumsSynced
-FormAutocompleteTest.AjaxSucceeded_FilledFormIsInvisible
-FormAutocompleteTest.AjaxSucceeded_FilledFormStillVisible
-FormAutocompleteTest.AjaxSucceeded_FormlessElements
-FormAutocompleteTest.AjaxSucceeded_NoFormInteractionInvisible
-FormAutocompleteTest.AjaxSucceeded_NoLongerVisible
-FormAutocompleteTest.AjaxSucceeded_NoLongerVisible_DifferentActionsSameData
-FormAutocompleteTest.AjaxSucceeded_NoLongerVisible_NoAction
-FormAutocompleteTest.AjaxSucceeded_StillVisible
-FormAutocompleteTest.AutoCompleteOffFormSubmit
-FormAutocompleteTest.AutoCompleteOffInputSubmit
-FormAutocompleteTest.CollectFormlessElements
-FormAutocompleteTest.DynamicAutoCompleteOffFormSubmit
-FormAutocompleteTest.InteractedFormNoLongerFocused_FocusNoLongerOnForm
-FormAutocompleteTest.InteractingInDifferentForms_FocusNoLongerOnForm
-FormAutocompleteTest.NoLongerVisibleBothNoActions
-FormAutocompleteTest.NormalFormSubmit
-FormAutocompleteTest.SubmitEventPrevented
-FormClassifierTest.SigninForm
-FormClassifierTest.SigninFormWithInvisibleFieldsHTML
-FormClassifierTest.SigninFormWithTextFeatureInFormTagHTML
-FormClassifierTest.SignupFormWithManyCheckboxesHTML
-FormClassifierTest.SignupFormWithOtherFieldsHTML
-FormClassifierTest.SignupFormWithSeveralPasswordFieldsHTML
-FormClassifierTest.SignupFormWithSeveralTextFields
-FormClassifierTest.SignupFormWithSigninButtonHTML
-FormClassifierTest.SignupFormWithSigninTextFeatureAndManyFieldsHTML
-FormClassifierTest.SignupFormWithTextFeatureInInputElementHTML
-FormClassifierTest.SomeFormWithoutPasswordFields
-FormClassifierTest.kChangeFormWithTreePasswordFieldsHTML
-InstantProcessNavigationTest.ForkForNavigationsFromInstantProcess
-InstantProcessNavigationTest.ForkForNavigationsToSearchURLs
-PageClickTrackerTest.PageClickTrackerClickDisabledInputDoesNotResetClickCounter
-PageClickTrackerTest.PageClickTrackerDisabledInputClickedNoEvent
-PageClickTrackerTest.PageClickTrackerInputClicked
-PageClickTrackerTest.PageClickTrackerInputFocusedAndClicked
-PageClickTrackerTest.PageClickTrackerInputRightClicked
-PageClickTrackerTest.PageClickTrackerScaledTextareaClicked
-PageClickTrackerTest.PageClickTrackerScaledTextareaTapped
-PageClickTrackerTest.PageClickTrackerTapNearEdgeIsPageClick
-PageClickTrackerTest.PageClickTrackerTextAreaClicked
-PageClickTrackerTest.PageClickTrackerTextAreaFocusedAndClicked
-PasswordGenerationAgentTest.AccountCreationFormsDetectedTest
-PasswordGenerationAgentTest.AutocompleteAttributesTest
-PasswordGenerationAgentTest.BlacklistedTest
-PasswordGenerationAgentTest.BlurTest
-PasswordGenerationAgentTest.ChangePasswordFormDetectionTest
-PasswordGenerationAgentTest.ConfirmationFieldVoteFromServer
-PasswordGenerationAgentTest.DetectionTest
-PasswordGenerationAgentTest.DynamicFormTest
-PasswordGenerationAgentTest.EditingTest
-PasswordGenerationAgentTest.FillTest
-PasswordGenerationAgentTest.FormClassifierDisabled
-PasswordGenerationAgentTest.FormClassifierVotesSigninForm
-PasswordGenerationAgentTest.JavascriptClearedTheField
-PasswordGenerationAgentTest.ManualGenerationChangeFocusTest
-PasswordGenerationAgentTest.ManualGenerationInFormTest
-PasswordGenerationAgentTest.ManualGenerationNoFormTest
-PasswordGenerationAgentTest.MaximumOfferSize
-PasswordGenerationAgentTest.MessagesAfterAccountSignupFormFound
-PasswordGenerationAgentTest.MultiplePasswordFormsTest
-PasswordGenerationAgentTest.PresavingGeneratedPassword
-PasswordGenerationAgentTest.RevealPassword
-PhishingClassifierDelegateTest.DuplicatePageCapture
-PhishingClassifierDelegateTest.IgnorePreliminaryCapture
-PhishingClassifierDelegateTest.Navigation
-PhishingClassifierDelegateTest.NoScorer
-PhishingClassifierDelegateTest.NoScorer_Ref
-PhishingClassifierDelegateTest.NoStartPhishingDetection
-PhishingClassifierDelegateTest.PhishingDetectionDone
-PhishingDOMFeatureExtractorTest.Continuation
-PhishingDOMFeatureExtractorTest.FormFeatures
-PhishingDOMFeatureExtractorTest.LinkFeatures
-PhishingDOMFeatureExtractorTest.ScriptAndImageFeatures
-PhishingDOMFeatureExtractorTest.SubFrames
-PhishingDOMFeatureExtractorTest.SubframeRemoval
-PnaclHeaderTest.TestHasPnaclHeader
-PolicyCertVerifierTest.VerifyTrustedCert
-PolicyCertVerifierTest.VerifyUntrustedCert
-PolicyCertVerifierTest.VerifyUsingAdditionalTrustAnchor
-PrerenderBrowserTestWithNaCl.PrerenderNaClPluginEnabled
-PrintPreviewDestinationSearchTest.Select
-ScriptContextTest.GetEffectiveDocumentURL
-SiteEngagementUiBrowserTest.Basic
diff --git a/src/testing/buildbot/gn_isolate_map.pyl b/src/testing/buildbot/gn_isolate_map.pyl
index b661a94..fa8dff8 100644
--- a/src/testing/buildbot/gn_isolate_map.pyl
+++ b/src/testing/buildbot/gn_isolate_map.pyl
@@ -712,10 +712,6 @@
     "label": "//mojo/edk/js/tests:mojo_js_unittests",
     "type": "console_test_launcher",
   },
-  "mojo_public_application_unittests": {
-    "label": "//services/service_manager/public/cpp/tests:mojo_public_application_unittests",
-    "type": "windowed_test_launcher",
-  },
   "mojo_public_bindings_unittests": {
     "label": "//mojo/edk/test:mojo_public_bindings_unittests",
     "type": "console_test_launcher",
diff --git a/src/testing/variations/fieldtrial_testing_config.json b/src/testing/variations/fieldtrial_testing_config.json
index 661fa50..9cf4e79 100644
--- a/src/testing/variations/fieldtrial_testing_config.json
+++ b/src/testing/variations/fieldtrial_testing_config.json
@@ -112,6 +112,24 @@
             ]
         }
     ],
+    "AutoDismissingDialogs": [
+        {
+            "platforms": [
+                "chromeos",
+                "linux",
+                "mac",
+                "win"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "AutoDismissingDialogs"
+                    ]
+                }
+            ]
+        }
+    ],
     "AutodetectEncoding": [
         {
             "platforms": [
@@ -363,7 +381,11 @@
             ],
             "experiments": [
                 {
-                    "name": "Default",
+                    "//1": "Enable on-by-default redirections with default",
+                    "//2": "client-side init params (ref.",
+                    "//3": "GetDefaultTaskSchedulerInitParams() in",
+                    "//4": "browser_main_loop.cc).",
+                    "name": "RedirectWithDefaultInitParams",
                     "params": {
                         "RedirectSequencedWorkerPools": "true"
                     }
@@ -780,24 +802,6 @@
             ]
         }
     ],
-    "DownloadAttributionPerformanceTest": [
-        {
-            "platforms": [
-                "chromeos",
-                "linux",
-                "mac",
-                "win"
-            ],
-            "experiments": [
-                {
-                    "name": "DownloadAttributionEnabled",
-                    "enable_features": [
-                        "DownloadAttribution"
-                    ]
-                }
-            ]
-        }
-    ],
     "DownloadsUi": [
         {
             "platforms": [
@@ -1273,21 +1277,6 @@
             ]
         }
     ],
-    "LowPriorityIFrames": [
-        {
-            "platforms": [
-                "android"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "params": {
-                        "lowPriorityIframes": "true"
-                    }
-                }
-            ]
-        }
-    ],
     "MacAllowBackgroundingProcesses": [
         {
             "platforms": [
@@ -1588,26 +1577,6 @@
             ]
         }
     ],
-    "NetProxyPreconnects": [
-        {
-            "platforms": [
-                "android",
-                "chromeos",
-                "ios",
-                "linux",
-                "mac",
-                "win"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled",
-                    "params": {
-                        "restrict_to_one_preconnect_for_proxies": "true"
-                    }
-                }
-            ]
-        }
-    ],
     "NetworkQualityEstimator": [
         {
             "platforms": [
@@ -2793,21 +2762,6 @@
             ]
         }
     ],
-    "SiteIsolationExtensions": [
-        {
-            "platforms": [
-                "chromeos",
-                "linux",
-                "mac",
-                "win"
-            ],
-            "experiments": [
-                {
-                    "name": "Enabled"
-                }
-            ]
-        }
-    ],
     "SpeculativeLaunchServiceWorker": [
         {
             "platforms": [
diff --git a/src/third_party/brotli/BUILD.gn b/src/third_party/brotli/BUILD.gn
index 4391133..d855167 100644
--- a/src/third_party/brotli/BUILD.gn
+++ b/src/third_party/brotli/BUILD.gn
@@ -12,6 +12,15 @@
   include_dirs = [ "include" ]
 }
 
+source_set("headers") {
+  sources = [
+    "include/brotli/decode.h",
+    "include/brotli/encode.h",
+    "include/brotli/port.h",
+    "include/brotli/types.h",
+  ]
+}
+
 static_library("common") {
   sources = [
     "common/constants.h",
@@ -20,6 +29,9 @@
     "common/version.h",
   ]
   public_configs = [ ":includes" ]
+  deps = [
+    ":headers",
+  ]
 }
 
 static_library("dec") {
@@ -38,6 +50,10 @@
   ]
   public_configs = [ ":includes" ]
 
+  public_deps = [
+    ":headers",
+  ]
+
   deps = [
     ":common",
   ]
@@ -113,6 +129,7 @@
     deps = [
       ":common",
       ":dec",
+      ":headers",
       "//build/config/sanitizers:deps",
       "//build/win:default_exe_manifest",
     ]
diff --git a/src/third_party/closure_compiler/compiled_resources2.gyp b/src/third_party/closure_compiler/compiled_resources2.gyp
index e38e522..446ba6d 100644
--- a/src/third_party/closure_compiler/compiled_resources2.gyp
+++ b/src/third_party/closure_compiler/compiled_resources2.gyp
@@ -19,7 +19,7 @@
         '<(DEPTH)/chrome/browser/resources/chromeos/network_ui/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/chromeos/quick_unlock/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/chromeos/select_to_speak/compiled_resources2.gyp:*',
-	'<(DEPTH)/chrome/browser/resources/chromeos/switch_access/compiled_resources2.gyp:*',
+        '<(DEPTH)/chrome/browser/resources/chromeos/switch_access/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/cleanup_tool/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/extensions/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/history/compiled_resources2.gyp:*',
@@ -32,6 +32,8 @@
         '<(DEPTH)/chrome/browser/resources/media_router/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/offline_pages/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/settings/compiled_resources2.gyp:*',
+        # TODO(dpapad): Uncomment following line once all errors are fixed.
+        #'<(DEPTH)/chrome/browser/resources/print_preview/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/uber/compiled_resources2.gyp:*',
         '<(DEPTH)/chrome/browser/resources/webapks/compiled_resources2.gyp:*',
         '<(DEPTH)/ui/file_manager/compiled_resources2.gyp:*',
diff --git a/src/third_party/closure_compiler/externs/networking_private.js b/src/third_party/closure_compiler/externs/networking_private.js
index e911ff8..676f193 100644
--- a/src/third_party/closure_compiler/externs/networking_private.js
+++ b/src/third_party/closure_compiler/externs/networking_private.js
@@ -304,6 +304,7 @@
  *   SaveCredentials: (boolean|undefined),
  *   ServerCAPEMs: (!Array<string>|undefined),
  *   ServerCARefs: (!Array<string>|undefined),
+ *   SubjectMatch: (string|undefined),
  *   UseProactiveKeyCaching: (boolean|undefined),
  *   UseSystemCAs: (boolean|undefined)
  * }}
@@ -324,6 +325,7 @@
  *   SaveCredentials: (!chrome.networkingPrivate.ManagedBoolean|undefined),
  *   ServerCAPEMs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
  *   ServerCARefs: (!chrome.networkingPrivate.ManagedDOMStringList|undefined),
+ *   SubjectMatch: (!chrome.networkingPrivate.ManagedDOMString|undefined),
  *   UseProactiveKeyCaching: (!chrome.networkingPrivate.ManagedBoolean|undefined),
  *   UseSystemCAs: (!chrome.networkingPrivate.ManagedBoolean|undefined)
  * }}
@@ -767,6 +769,7 @@
  * @typedef {{
  *   BatteryPercentage: (number|undefined),
  *   Carrier: (string|undefined),
+ *   HasConnectedToHost: boolean,
  *   SignalStrength: (number|undefined)
  * }}
  * @see https://developer.chrome.com/extensions/networkingPrivate#type-TetherProperties
@@ -775,16 +778,6 @@
 
 /**
  * @typedef {{
- *   BatteryPercentage: (!chrome.networkingPrivate.ManagedLong|undefined),
- *   Carrier: (!chrome.networkingPrivate.ManagedDOMString|undefined),
- *   SignalStrength: (!chrome.networkingPrivate.ManagedLong|undefined)
- * }}
- * @see https://developer.chrome.com/extensions/networkingPrivate#type-ManagedTetherProperties
- */
-chrome.networkingPrivate.ManagedTetherProperties;
-
-/**
- * @typedef {{
  *   AutoConnect: (boolean|undefined),
  *   Host: (string|undefined),
  *   IPsec: (!chrome.networkingPrivate.IPSecProperties|undefined),
@@ -968,7 +961,7 @@
  *   StaticIPConfig: (!chrome.networkingPrivate.ManagedIPConfigProperties|undefined),
  *   SavedIPConfig: (!chrome.networkingPrivate.IPConfigProperties|undefined),
  *   Source: (string|undefined),
- *   Tether: (!chrome.networkingPrivate.ManagedTetherProperties|undefined),
+ *   Tether: (!chrome.networkingPrivate.TetherProperties|undefined),
  *   Type: !chrome.networkingPrivate.NetworkType,
  *   VPN: (!chrome.networkingPrivate.ManagedVPNProperties|undefined),
  *   WiFi: (!chrome.networkingPrivate.ManagedWiFiProperties|undefined),
diff --git a/src/third_party/closure_compiler/externs/users_private.js b/src/third_party/closure_compiler/externs/users_private.js
index aef2b1a..8015b8d 100644
--- a/src/third_party/closure_compiler/externs/users_private.js
+++ b/src/third_party/closure_compiler/externs/users_private.js
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 // This file was generated by:
-//   tools/json_schema_compiler/compiler.py.
+//   ./tools/json_schema_compiler/compiler.py.
 // NOTE: The format of types has changed. 'FooType' is now
 //   'chrome.usersPrivate.FooType'.
 // Please run the closure compiler before committing changes.
@@ -20,7 +20,8 @@
  * @typedef {{
  *   email: string,
  *   name: string,
- *   isOwner: boolean
+ *   isOwner: boolean,
+ *   isSupervised: boolean
  * }}
  * @see https://developer.chrome.com/extensions/usersPrivate#type-User
  */
diff --git a/src/third_party/instrumented_libraries/BUILD.gn b/src/third_party/instrumented_libraries/BUILD.gn
index 9d7636a..5f5db35 100644
--- a/src/third_party/instrumented_libraries/BUILD.gn
+++ b/src/third_party/instrumented_libraries/BUILD.gn
@@ -152,7 +152,10 @@
       ":zlib1g",
     ]
     if (is_msan) {
-      deps += [ ":libcups2" ]
+      deps += [
+        ":libcups2",
+        ":libgnutls26",
+      ]
     }
     if (!is_tsan) {
       deps += [ ":libpng12-0" ]
@@ -545,6 +548,18 @@
     package_ldflags = [ "-Wl,--as-needed" ]
   }
 
+  instrumented_library("libgnutls26") {
+    extra_configure_flags = [
+      # from debian/rules.
+      "--enable-ld-version-script",
+      "--enable-cxx",
+      "--without-lzo",
+      "--disable-guile",
+      "--with-libgcrypt",
+      "--with-packager=Debian",
+    ]
+  }
+
   instrumented_library("libgpg-error0") {
     extra_configure_flags = [ "--disable-static" ]
   }
diff --git a/src/third_party/instrumented_libraries/binaries/msan-chained-origins-trusty.tgz.sha1 b/src/third_party/instrumented_libraries/binaries/msan-chained-origins-trusty.tgz.sha1
index 02691d6..22db5e0 100644
--- a/src/third_party/instrumented_libraries/binaries/msan-chained-origins-trusty.tgz.sha1
+++ b/src/third_party/instrumented_libraries/binaries/msan-chained-origins-trusty.tgz.sha1
@@ -1 +1 @@
-da8e4e3e82a728d9b2b05a781e5117db80422f61
\ No newline at end of file
+0dcb36e70349be00195414cee70ff0d780e3b461
\ No newline at end of file
diff --git a/src/third_party/instrumented_libraries/binaries/msan-no-origins-trusty.tgz.sha1 b/src/third_party/instrumented_libraries/binaries/msan-no-origins-trusty.tgz.sha1
index fb4ad52..baca72e 100644
--- a/src/third_party/instrumented_libraries/binaries/msan-no-origins-trusty.tgz.sha1
+++ b/src/third_party/instrumented_libraries/binaries/msan-no-origins-trusty.tgz.sha1
@@ -1 +1 @@
-24bf29e2bb3199ccfdb4932d1b7bd3bec167816d
\ No newline at end of file
+66e243aeaafa32567781733747d569c9e1fe461d
\ No newline at end of file
diff --git a/src/third_party/instrumented_libraries/scripts/install-build-deps.sh b/src/third_party/instrumented_libraries/scripts/install-build-deps.sh
index d63ab98..25e63d1 100755
--- a/src/third_party/instrumented_libraries/scripts/install-build-deps.sh
+++ b/src/third_party/instrumented_libraries/scripts/install-build-deps.sh
@@ -83,9 +83,9 @@
 # for reasons which are not entirely clear. 
 sudo apt-get install libltdl3-dev libjson0-dev \
          libsndfile1-dev libspeexdsp-dev libjack0 \
-         chrpath -y  # Chrpath is required by fix_rpaths.sh.
+         chrpath -y --force-yes  # Chrpath is required by fix_rpaths.sh.
 
-sudo apt-get build-dep -y $packages
+sudo apt-get build-dep -y --force-yes $packages
 
 if test "$ubuntu_release" = "trusty" ; then
   # On Trusty, build deps for some of the instrumented packages above conflict
diff --git a/src/third_party/tcmalloc/OWNERS b/src/third_party/tcmalloc/OWNERS
index f1d7297..c9b293a 100644
--- a/src/third_party/tcmalloc/OWNERS
+++ b/src/third_party/tcmalloc/OWNERS
@@ -1,2 +1,4 @@
 jar@chromium.org
 wfh@chromium.org
+
+# COMPONENT: Internals>Core
diff --git a/src/tools/android/eclipse/.classpath b/src/tools/android/eclipse/.classpath
index 3a0c57c..69a0a6f 100644
--- a/src/tools/android/eclipse/.classpath
+++ b/src/tools/android/eclipse/.classpath
@@ -123,9 +123,6 @@
     <classpathentry kind="src" path="third_party/leakcanary/src/leakcanary-android/src/main/java"/>
     <classpathentry kind="src" path="third_party/leakcanary/src/leakcanary-watcher/src/main/java"/>
     <classpathentry kind="src" path="third_party/mockito/src/src/main/java"/>
-    <classpathentry kind="src" path="third_party/robolectric/robolectric/robolectric-annotations/src/main/java"/>
-    <classpathentry kind="src" path="third_party/robolectric/robolectric/robolectric-resources/src/main/java"/>
-    <classpathentry kind="src" path="third_party/robolectric/robolectric/robolectric-shadows/shadows-multidex/src/main/java"/>
     <classpathentry kind="src" path="tools/android/findbugs_plugin/src"/>
     <classpathentry kind="src" path="tools/android/findbugs_plugin/test/java/src"/>
     <classpathentry kind="src" path="tools/android/memconsumer/java/src"/>
@@ -233,8 +230,6 @@
     <classpathentry kind="lib" path="third_party/android_tools/sdk/extras/android/support/v7/recyclerview/libs/android-support-v7-recyclerview.jar" sourcepath="third_party/android_tools/sdk/sources"/>
     <classpathentry kind="lib" path="third_party/android_tools/sdk/extras/android/support/v13/android-support-v13.jar" sourcepath="third_party/android_tools/sdk/sources"/>
     <classpathentry kind="lib" path="third_party/android_tools/sdk/extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar" sourcepath="third_party/android_tools/sdk/sources"/>
-    <classpathentry kind="lib" path="third_party/android_support_test_runner/lib/runner-0.5-release-no-dep.jar"/>
-    <classpathentry kind="lib" path="third_party/android_support_test_runner/lib/rules-0.5.jar"/>
     <classpathentry kind="lib" path="third_party/bouncycastle/lib/bcprov-jdk16-1.46.jar"/>
     <classpathentry kind="lib" path="third_party/byte_buddy/lib/byte-buddy-1.4.17.jar"/>
     <classpathentry kind="lib" path="third_party/findbugs/lib/findbugs.jar"/>
@@ -297,10 +292,15 @@
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/cacheinvalidation/cacheinvalidation_proto_java.jar"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/cardboard-java/cardboard-java.jar"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/gif_player/gif_player_java.jar"/>
+    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/guava/guava-20.0.jar"/>
+    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/robolectric_annotations_java.jar" sourcepath="third_party/robolectric/robolectric/robolectric-annotations/src/main/java"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/robolectric_java.jar" sourcepath="third_party/robolectric/robolectric/robolectric/src/main/java"/>
+    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/robolectric_resources_java.jar" sourcepath="third_party/robolectric/robolectric/robolectric-resources/src/main/java"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/robolectric_utils_java.jar" sourcepath="third_party/robolectric/robolectric/robolectric-utils/src/main/java"/>
-    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/shadows-core-3.0-21.jar" sourcepath="third_party/robolectric/robolectric/robolectric-shadows/shadows-core/src/main/java"/>
+    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/shadows-core-3.2.jar" sourcepath="third_party/robolectric/robolectric/robolectric-shadows/shadows-core/src/main/java"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/robolectric/shadows-multidex-3.0.jar" sourcepath="third_party/robolectric/robolectric/robolectric-shadows/shadows-multidex/src/main/java"/>
+    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/android_support_test_runner/runner-0.5-release-no-dep.jar"/>
+    <classpathentry kind="lib" path="out/Debug/lib.java/third_party/android_support_test_runner/rules_java.jar"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/third_party/WebKit/public/blink_headers_java.jar"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/ui/accessibility/ui_accessibility_java.jar"/>
     <classpathentry kind="lib" path="out/Debug/lib.java/ui/android/ui_java.jar"/>
diff --git a/src/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorService.java b/src/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorService.java
index e81d0f1..1348a29 100644
--- a/src/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorService.java
+++ b/src/tools/android/kerberos/SpnegoAuthenticator/src/org/chromium/tools/spnegoauthenticator/SpnegoAuthenticatorService.java
@@ -4,6 +4,7 @@
 
 package org.chromium.tools.spnegoauthenticator;
 
+import android.annotation.SuppressLint;
 import android.app.Service;
 import android.content.Intent;
 import android.os.IBinder;
@@ -13,6 +14,7 @@
 /** Service exposing the dummy {@link SpnegoAuthenticator}. */
 public class SpnegoAuthenticatorService extends Service {
     private static final String TAG = "tools_SpnegoAuth";
+    @SuppressLint("StaticFieldLeak")
     private static SpnegoAuthenticator sAuthenticator;
 
     @Override
diff --git a/src/tools/binary_size/README.md b/src/tools/binary_size/README.md
index 598e53d..85bf49b 100644
--- a/src/tools/binary_size/README.md
+++ b/src/tools/binary_size/README.md
@@ -11,6 +11,8 @@
 
 ### Example Usage:
 
+Note: Supersize on Linux has known deficiencies (crbug/717550).
+
     # Android:
     # Googlers:
     gn gen out/Release --args='is_official_build=true symbol_level=1 is_chrome_branded=true target_os="android"'
@@ -58,23 +60,24 @@
 
     tools/binary_size/supersize diff before.size after.size --all
 
-# diagnose_apk_bloat.py
+# diagnose_bloat.py
 
-Determine the cause of binary size bloat for a patch.
+Determine the cause of binary size bloat between two commits. Works for Android
+and partially works for Linux (crbug/717550).
 
 ## Example Usage:
 
     # Build and diff HEAD^ and HEAD.
-    tools/binary_size/diagnose_apk_bloat.py HEAD
+    tools/binary_size/diagnose_bloat.py HEAD
 
     # Diff OTHERREV and REV using downloaded build artifacts.
-    tools/binary_size/diagnose_apk_bloat.py REV --reference-rev OTHERREV --cloud
+    tools/binary_size/diagnose_bloat.py REV --reference-rev OTHERREV --cloud
 
-    # Build and diff contiguous revs in range OTHERREV..REV for src/v8.
-    tools/binary_size/diagnose_apk_bloat.py REV --reference-rev OTHERREV --subrepo v8 --all
+    # Build and diff all contiguous revs in range OTHERREV..REV for src/v8.
+    tools/binary_size/diagnose_bloat.py REV --reference-rev OTHERREV --subrepo v8 --all
 
     # Display detailed usage info (there are many options).
-    tools/binary_size/diagnose_apk_bloat.py -h
+    tools/binary_size/diagnose_bloat.py -h
 
 # Roadmap for Super Size:
 
@@ -107,8 +110,7 @@
 1. Speed up some steps (like normalizing names) via multiprocessing.
 1. Add dependency graph info, perhaps just on a per-file basis.
 
-# Roadmap for diagnose_apk_bloat.py:
-1. More `diagnose_apk_bloat.py` features:
+# Roadmap for diagnose_bloat.py:
+1. More `diagnose_bloat.py` features:
 
-  * Add more diff types (pak files, Java symbols, native symbols).
-  * Support local builds for revs before supersize existed.
+  * Add more diff types (pak files, Java symbols).
diff --git a/src/tools/binary_size/diagnose_apk_bloat.py b/src/tools/binary_size/diagnose_bloat.py
similarity index 66%
rename from src/tools/binary_size/diagnose_apk_bloat.py
rename to src/tools/binary_size/diagnose_bloat.py
index a49f5b7..0f0e2e6 100755
--- a/src/tools/binary_size/diagnose_apk_bloat.py
+++ b/src/tools/binary_size/diagnose_bloat.py
@@ -8,11 +8,13 @@
 Run diagnose_apk_bloat.py -h for detailed usage help.
 """
 
+import atexit
 import argparse
 import collections
 from contextlib import contextmanager
 import distutils.spawn
 import json
+import logging
 import multiprocessing
 import os
 import re
@@ -27,25 +29,14 @@
 _DIFF_DETAILS_LINES_THRESHOLD = 100
 _BUILDER_URL = \
     'https://build.chromium.org/p/chromium.perf/builders/Android%20Builder'
-_CLOUD_OUT_DIR = os.path.join('out', 'Release')
 _SRC_ROOT = os.path.abspath(
     os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
 _DEFAULT_ARCHIVE_DIR = os.path.join(_SRC_ROOT, 'binary-size-bloat')
 _DEFAULT_OUT_DIR = os.path.join(_SRC_ROOT, 'out', 'diagnose-apk-bloat')
-_DEFAULT_TARGET = 'monochrome_public_apk'
+_DEFAULT_ANDROID_TARGET = 'monochrome_public_apk'
 
 
-_global_restore_checkout_func = None
-
-
-def _SetRestoreFunc(subrepo):
-  branch = _GitCmd(['rev-parse', '--abbrev-ref', 'HEAD'], subrepo)
-  global _global_restore_checkout_func
-  _global_restore_checkout_func = lambda: _GitCmd(['checkout', branch], subrepo)
-
-
-_DiffResult = collections.namedtuple(
-    'DiffResult', ['name', 'value', 'units'])
+_DiffResult = collections.namedtuple('DiffResult', ['name', 'value', 'units'])
 
 
 class BaseDiff(object):
@@ -74,12 +65,13 @@
     """An iterable description of the cause of binary size bloat."""
     raise NotImplementedError()
 
-  def ProduceDiff(self, archive_dirs):
+  def ProduceDiff(self, before_dir, after_dir):
     """Prepare a binary size diff with ready to print results."""
     raise NotImplementedError()
 
-  def RunDiff(self, logfile, archive_dirs):
-    self.ProduceDiff(archive_dirs)
+  def RunDiff(self, logfile, before_dir, after_dir):
+    logging.info('Creating: %s', self.name)
+    self.ProduceDiff(before_dir, after_dir)
     self.AppendResults(logfile)
 
 
@@ -111,10 +103,10 @@
   def Summary(self):
     return NativeDiff._RE_SUMMARY.match(self._diff).group(1)
 
-  def ProduceDiff(self, archive_dirs):
-    size_files = [os.path.join(a, self._size_name)
-                  for a in reversed(archive_dirs)]
-    cmd = [self._supersize_path, 'diff'] + size_files
+  def ProduceDiff(self, before_dir, after_dir):
+    before_size = os.path.join(before_dir, self._size_name)
+    after_size = os.path.join(after_dir, self._size_name)
+    cmd = [self._supersize_path, 'diff', before_size, after_size]
     self._diff = _RunCmd(cmd)[0].replace('{', '{{').replace('}', '}}')
 
 
@@ -143,42 +135,40 @@
     return 'Normalized APK size: {:+,} {}'.format(
         self.summary_stat.value, self.summary_stat.units)
 
-  def ProduceDiff(self, archive_dirs):
-    chartjsons = self._RunResourceSizes(archive_dirs)
+  def ProduceDiff(self, before_dir, after_dir):
+    before = self._RunResourceSizes(before_dir)
+    after = self._RunResourceSizes(after_dir)
     diff = []
-    with_patch = chartjsons[0]['charts']
-    without_patch = chartjsons[1]['charts']
-    for section, section_dict in with_patch.iteritems():
+    for section, section_dict in after.iteritems():
       for subsection, v in section_dict.iteritems():
         # Ignore entries when resource_sizes.py chartjson format has changed.
-        if (section not in without_patch or
-            subsection not in without_patch[section] or
-            v['units'] != without_patch[section][subsection]['units']):
-          _Print('Found differing dict structures for resource_sizes.py, '
-                 'skipping {} {}', section, subsection)
+        if (section not in before or
+            subsection not in before[section] or
+            v['units'] != before[section][subsection]['units']):
+          logging.warning(
+              'Found differing dict structures for resource_sizes.py, '
+              'skipping %s %s', section, subsection)
         else:
           diff.append(
               _DiffResult(
                   '%s %s' % (section, subsection),
-                  v['value'] - without_patch[section][subsection]['value'],
+                  v['value'] - before[section][subsection]['value'],
                   v['units']))
     self._diff = sorted(diff, key=lambda x: abs(x.value), reverse=True)
 
-  def _RunResourceSizes(self, archive_dirs):
-    chartjsons = []
-    for archive_dir in archive_dirs:
-      apk_path = os.path.join(archive_dir, self._apk_name)
-      chartjson_file = os.path.join(archive_dir, 'results-chart.json')
-      cmd = [self._RESOURCE_SIZES_PATH, apk_path,'--output-dir', archive_dir,
-             '--no-output-dir', '--chartjson']
-      if self._slow_options:
-        cmd += ['--estimate-patch-size']
-      else:
-        cmd += ['--no-static-initializer-check']
-      _RunCmd(cmd)
-      with open(chartjson_file) as f:
-        chartjsons.append(json.load(f))
-    return chartjsons
+  def _RunResourceSizes(self, archive_dir):
+    apk_path = os.path.join(archive_dir, self._apk_name)
+    chartjson_file = os.path.join(archive_dir, 'results-chart.json')
+    cmd = [self._RESOURCE_SIZES_PATH, apk_path,'--output-dir', archive_dir,
+           '--no-output-dir', '--chartjson']
+    if self._slow_options:
+      cmd += ['--estimate-patch-size']
+    else:
+      cmd += ['--no-static-initializer-check']
+    _RunCmd(cmd)
+    with open(chartjson_file) as f:
+      chartjson = json.load(f)
+    return chartjson['charts']
 
 
 class _BuildHelper(object):
@@ -224,6 +214,14 @@
     return os.path.join(self.output_directory, self.main_lib_path)
 
   @property
+  def download_bucket(self):
+    return 'gs://chrome-perf/%s Builder/' % self.target_os.title()
+
+  @property
+  def download_output_dir(self):
+    return 'out/Release' if self.IsAndroid() else 'full-build-linux'
+
+  @property
   def map_file_path(self):
     return self.main_lib_path + '.map.gz'
 
@@ -244,6 +242,7 @@
     else:
       self.extra_gn_args_str = (' exclude_unwind_tables=true '
           'ffmpeg_branding="Chrome" proprietary_codecs=true')
+    self.target = self.target if self.IsAndroid() else 'chrome'
 
   def _GenGnCmd(self):
     gn_args = 'is_official_build=true symbol_level=1'
@@ -263,13 +262,16 @@
 
   def Run(self):
     """Run GN gen/ninja build and return the process returncode."""
-    _Print('Building: {}.', self.target)
+    logging.info('Building: %s.', self.target)
     retcode = _RunCmd(
-        self._GenGnCmd(), print_stdout=True, exit_on_failure=False)[1]
+        self._GenGnCmd(), verbose=True, exit_on_failure=False)[1]
     if retcode:
       return retcode
     return _RunCmd(
-        self._GenNinjaCmd(), print_stdout=True, exit_on_failure=False)[1]
+        self._GenNinjaCmd(), verbose=True, exit_on_failure=False)[1]
+
+  def DownloadUrl(self, rev):
+    return self.download_bucket + 'full-build-linux_%s.zip' % rev
 
   def IsAndroid(self):
     return self.target_os == 'android'
@@ -288,11 +290,11 @@
     self.dir = os.path.join(base_archive_dir, rev)
     metadata_path = os.path.join(self.dir, 'metadata.txt')
     self.rev = rev
-    self.metadata = _GenerateMetadata([self], build, metadata_path, subrepo)
+    self.metadata = _Metadata([self], build, metadata_path, subrepo)
 
   def ArchiveBuildResults(self, supersize_path):
     """Save build artifacts necessary for diffing."""
-    _Print('Saving build results to: {}', self.dir)
+    logging.info('Saving build results to: %s', self.dir)
     _EnsureDirsExist(self.dir)
     build = self.build
     self._ArchiveFile(build.abs_main_lib_path)
@@ -306,15 +308,16 @@
       supersize_cmd += ['--apk-file', build.abs_apk_path]
       self._ArchiveFile(build.abs_apk_path)
 
+    logging.info('Creating .size file')
     _RunCmd(supersize_cmd)
-    _WriteMetadata(self.metadata)
+    self.metadata.Write()
 
   def Exists(self):
-    return _MetadataExists(self.metadata)
+    return self.metadata.Exists()
 
   def _ArchiveFile(self, filename):
     if not os.path.exists(filename):
-      _Die('missing expected file: {}', filename)
+      _Die('missing expected file: %s', filename)
     shutil.copy(filename, self.dir)
 
 
@@ -332,31 +335,32 @@
   def IterArchives(self):
     return iter(self.build_archives)
 
-  def MaybeDiff(self, first_id, second_id):
+  def MaybeDiff(self, before_id, after_id):
     """Perform diffs given two build archives."""
-    archives = [
-        self.build_archives[first_id], self.build_archives[second_id]]
-    diff_path = self._DiffFilePath(archives)
-    if not self._CanDiff(archives):
-      _Print('Skipping diff for {} due to missing build archives.', diff_path)
+    before = self.build_archives[before_id]
+    after = self.build_archives[after_id]
+    diff_path = self._DiffFilePath(before, after)
+    if not self._CanDiff(before, after):
+      logging.info(
+          'Skipping diff for %s due to missing build archives.', diff_path)
       return
 
-    metadata_path = self._DiffMetadataPath(archives)
-    metadata = _GenerateMetadata(
-        archives, self.build, metadata_path, self.subrepo)
-    if _MetadataExists(metadata):
-      _Print('Skipping diff for {} and {}. Matching diff already exists: {}',
-             archives[0].rev, archives[1].rev, diff_path)
+    metadata_path = self._DiffMetadataPath(before, after)
+    metadata = _Metadata(
+        [before, after], self.build, metadata_path, self.subrepo)
+    if metadata.Exists():
+      logging.info(
+          'Skipping diff for %s and %s. Matching diff already exists: %s',
+          before.rev, after.rev, diff_path)
     else:
       if os.path.exists(diff_path):
         os.remove(diff_path)
-      archive_dirs = [archives[0].dir, archives[1].dir]
       with open(diff_path, 'a') as diff_file:
         for d in self.diffs:
-          d.RunDiff(diff_file, archive_dirs)
-        _Print('\nSee detailed diff results here: {}.', diff_path)
-      _WriteMetadata(metadata)
-      self._AddDiffSummaryStat(archives)
+          d.RunDiff(diff_file, before.dir, after.dir)
+        logging.info('See detailed diff results here: %s.', diff_path)
+      metadata.Write()
+      self._AddDiffSummaryStat(before, after)
 
   def Summarize(self):
     if self._summary_stats:
@@ -369,7 +373,7 @@
           _PrintAndWriteToFile(f, '{:>+10} {} {} for range: {}..{}',
                                s.value, s.units, s.name, before, after)
 
-  def _AddDiffSummaryStat(self, archives):
+  def _AddDiffSummaryStat(self, before, after):
     stat = None
     if self.build.IsAndroid():
       summary_diff_type = ResourceSizesDiff
@@ -379,89 +383,91 @@
       if isinstance(d, summary_diff_type):
         stat = d.summary_stat
     if stat:
-      self._summary_stats.append((stat, archives[1].rev, archives[0].rev))
+      self._summary_stats.append((stat, before.rev, after.rev))
 
-  def _CanDiff(self, archives):
-    return all(a.Exists() for a in archives)
+  def _CanDiff(self, before, after):
+    return before.Exists() and after.Exists()
 
-  def _DiffFilePath(self, archives):
-    return os.path.join(self._DiffDir(archives), 'diff_results.txt')
+  def _DiffFilePath(self, before, after):
+    return os.path.join(self._DiffDir(before, after), 'diff_results.txt')
 
-  def _DiffMetadataPath(self, archives):
-    return os.path.join(self._DiffDir(archives), 'metadata.txt')
+  def _DiffMetadataPath(self, before, after):
+    return os.path.join(self._DiffDir(before, after), 'metadata.txt')
 
-  def _DiffDir(self, archives):
-    archive_range = '%s..%s' % (archives[1].rev, archives[0].rev)
+  def _DiffDir(self, before, after):
+    archive_range = '%s..%s' % (before.rev, after.rev)
     diff_path = os.path.join(self.archive_dir, 'diffs', archive_range)
     _EnsureDirsExist(diff_path)
     return diff_path
 
 
+class _Metadata(object):
+
+  def __init__(self, archives, build, path, subrepo):
+    self.is_cloud = build.IsCloud()
+    self.data = {
+      'revs': [a.rev for a in archives],
+      'archive_dirs': [a.dir for a in archives],
+      'target': build.target,
+      'target_os': build.target_os,
+      'is_cloud': build.IsCloud(),
+      'subrepo': subrepo,
+      'path': path,
+      'gn_args': {
+        'extra_gn_args_str': build.extra_gn_args_str,
+        'enable_chrome_android_internal': build.enable_chrome_android_internal,
+      }
+    }
+
+  def Exists(self):
+    old_metadata = {}
+    path = self.data['path']
+    if os.path.exists(path):
+      with open(path, 'r') as f:
+        old_metadata = json.load(f)
+        # For local builds, all keys need to be the same. Differing GN args will
+        # make diffs noisy and inaccurate. GN args do not matter for --cloud
+        # since we download prebuilt build artifacts.
+        keys = self.data.keys()
+        if self.is_cloud:
+          keys.remove('gn_args')
+        return all(v == old_metadata[k]
+                   for k, v in self.data.iteritems() if k in keys)
+
+  def Write(self):
+    with open(self.data['path'], 'w') as f:
+      json.dump(self.data, f)
+
+
 def _EnsureDirsExist(path):
   if not os.path.exists(path):
     os.makedirs(path)
 
 
-def _GenerateMetadata(archives, build, path, subrepo):
-  return {
-    'revs': [a.rev for a in archives],
-    'archive_dirs': [a.dir for a in archives],
-    'target': build.target,
-    'target_os': build.target_os,
-    'is_cloud': build.IsCloud(),
-    'subrepo': subrepo,
-    'path': path,
-    'gn_args': {
-      'extra_gn_args_str': build.extra_gn_args_str,
-      'enable_chrome_android_internal': build.enable_chrome_android_internal,
-    }
-  }
-
-
-def _WriteMetadata(metadata):
-  with open(metadata['path'], 'w') as f:
-    json.dump(metadata, f)
-
-
-def _MetadataExists(metadata):
-  old_metadata = {}
-  path = metadata['path']
-  if os.path.exists(path):
-    with open(path, 'r') as f:
-      old_metadata = json.load(f)
-      ret = len(metadata) == len(old_metadata)
-      ret &= all(v == old_metadata[k]
-                 for k, v in metadata.items() if k != 'gn_args')
-      # GN args don't matter when artifacts are downloaded. For local builds
-      # they need to be the same so that diffs are accurate (differing GN args
-      # will change the final APK/native library).
-      if not metadata['is_cloud']:
-        ret &= metadata['gn_args'] == old_metadata['gn_args']
-      return ret
-  return False
-
-
-def _RunCmd(cmd, print_stdout=False, exit_on_failure=True):
+def _RunCmd(cmd, verbose=False, exit_on_failure=True):
   """Convenience function for running commands.
 
   Args:
     cmd: the command to run.
-    print_stdout: if this is True, then the stdout of the process will be
-        printed instead of returned.
+    verbose: if this is True, then the stdout and stderr of the process will be
+        printed. If it's false, the stdout will be returned.
     exit_on_failure: die if an error occurs when this is True.
 
   Returns:
     Tuple of (process stdout, process returncode).
   """
+  assert not (verbose and exit_on_failure)
   cmd_str = ' '.join(c for c in cmd)
-  _Print('Running: {}', cmd_str)
-  proc_stdout = sys.stdout if print_stdout else subprocess.PIPE
+  logging.debug('Running: %s', cmd_str)
+  proc_stdout = proc_stderr = subprocess.PIPE
+  if verbose and logging.getLogger().getEffectiveLevel() < logging.INFO:
+    proc_stdout, proc_stderr = sys.stdout, subprocess.STDOUT
 
-  proc = subprocess.Popen(cmd, stdout=proc_stdout, stderr=subprocess.PIPE)
+  proc = subprocess.Popen(cmd, stdout=proc_stdout, stderr=proc_stderr)
   stdout, stderr = proc.communicate()
 
   if proc.returncode and exit_on_failure:
-    _Die('command failed: {}\nstderr:\n{}', cmd_str, stderr)
+    _Die('command failed: %s\nstderr:\n%s', cmd_str, stderr)
 
   stdout = stdout.strip() if stdout else ''
   return stdout, proc.returncode
@@ -474,8 +480,10 @@
 def _GclientSyncCmd(rev, subrepo):
   cwd = os.getcwd()
   os.chdir(subrepo)
-  _RunCmd(['gclient', 'sync', '-r', 'src@' + rev], print_stdout=True)
+  _, retcode = _RunCmd(['gclient', 'sync', '-r', 'src@' + rev],
+                       verbose=True, exit_on_failure=False)
   os.chdir(cwd)
+  return retcode
 
 
 def _FindToolPrefix(output_directory):
@@ -494,62 +502,74 @@
 
 
 def _SyncAndBuild(archive, build, subrepo):
+  """Sync, build and return non 0 if any commands failed."""
   # Simply do a checkout if subrepo is used.
   if subrepo != _SRC_ROOT:
     _GitCmd(['checkout',  archive.rev], subrepo)
+    return 0
   else:
     # Move to a detached state since gclient sync doesn't work with local
     # commits on a branch.
     _GitCmd(['checkout', '--detach'], subrepo)
-    _GclientSyncCmd(archive.rev, subrepo)
-  retcode = build.Run()
-  return retcode == 0
+    logging.info('Syncing to %s', archive.rev)
+    return _GclientSyncCmd(archive.rev, subrepo) or build.Run()
 
 
-def _GenerateRevList(with_patch, without_patch, all_in_range, subrepo):
+def _GenerateRevList(rev, reference_rev, all_in_range, subrepo):
   """Normalize and optionally generate a list of commits in the given range.
 
-  Returns a list of revisions ordered from newest to oldest.
+  Returns:
+    A list of revisions ordered from oldest to newest.
   """
-  cmd = ['git', '-C', subrepo, 'merge-base', '--is-ancestor', without_patch,
-         with_patch]
-  _, retcode = _RunCmd(cmd, exit_on_failure=False)
-  assert not retcode and with_patch != without_patch, (
-      'Invalid revision arguments, rev_without_patch (%s) is newer than '
-      'rev_with_patch (%s)' % (without_patch, with_patch))
-
-  rev_seq = '%s^..%s' % (without_patch, with_patch)
+  rev_seq = '%s^..%s' % (reference_rev, rev)
   stdout = _GitCmd(['rev-list', rev_seq], subrepo)
-  all_revs = stdout.splitlines()
+  all_revs = stdout.splitlines()[::-1]
   if all_in_range:
     revs = all_revs
   else:
     revs = [all_revs[0], all_revs[-1]]
-  _VerifyUserAckCommitCount(len(revs))
+  if len(revs) >= _COMMIT_COUNT_WARN_THRESHOLD:
+    _VerifyUserAccepts(
+        'You\'ve provided a commit range that contains %d commits' % len(revs))
   return revs
 
 
-def _VerifyUserAckCommitCount(count):
-  if count >= _COMMIT_COUNT_WARN_THRESHOLD:
-    _Print('You\'ve provided a commit range that contains {} commits, do you '
-           'want to proceed? [y/n]', count)
-    if raw_input('> ').lower() != 'y':
-      _global_restore_checkout_func()
-      sys.exit(1)
+def _ValidateRevs(rev, reference_rev, subrepo):
+  def git_fatal(args, message):
+    devnull = open(os.devnull, 'wb')
+    retcode = subprocess.call(
+        ['git', '-C', subrepo] + args, stdout=devnull, stderr=subprocess.STDOUT)
+    if retcode:
+      _Die(message)
+
+  if rev == reference_rev:
+    _Die('rev and reference-rev cannot be equal')
+  no_obj_message = ('%s either doesn\'t exist or your local repo is out of '
+                    'date, try "git fetch origin master"')
+  git_fatal(['cat-file', '-e', rev], no_obj_message % rev)
+  git_fatal(['cat-file', '-e', reference_rev], no_obj_message % reference_rev)
+  git_fatal(['merge-base', '--is-ancestor', reference_rev, rev],
+            'reference-rev is newer than rev')
+  return rev, reference_rev
 
 
-def _EnsureDirectoryClean(subrepo):
-  _Print('Checking source directory')
-  stdout = _GitCmd(['status', '--porcelain'], subrepo)
-  # Ignore untracked files.
-  if stdout and stdout[:2] != '??':
-    _Print('Failure: please ensure working directory is clean.')
+def _VerifyUserAccepts(message):
+  print message + 'Do you want to proceed? [y/n]'
+  if raw_input('> ').lower() != 'y':
     sys.exit()
 
 
-def _Die(s, *args, **kwargs):
-  _Print('Failure: ' + s, *args, **kwargs)
-  _global_restore_checkout_func()
+def _EnsureDirectoryClean(subrepo):
+  logging.info('Checking source directory')
+  stdout = _GitCmd(['status', '--porcelain'], subrepo)
+  # Ignore untracked files.
+  if stdout and stdout[:2] != '??':
+    logging.error('Failure: please ensure working directory is clean.')
+    sys.exit()
+
+
+def _Die(s, *args):
+  logging.error('Failure: ' + s, *args)
   sys.exit(1)
 
 
@@ -573,29 +593,29 @@
 
 
 def _DownloadAndArchive(gsutil_path, archive, dl_dir, build, supersize_path):
-  dl_file = 'full-build-linux_%s.zip' % archive.rev
-  dl_url = 'gs://chrome-perf/Android Builder/%s' % dl_file
-  dl_dst = os.path.join(dl_dir, dl_file)
-  _Print('Downloading build artifacts for {}', archive.rev)
+  dl_dst = os.path.join(dl_dir, archive.rev)
+  logging.info('Downloading build artifacts for %s', archive.rev)
   # gsutil writes stdout and stderr to stderr, so pipe stdout and stderr to
   # sys.stdout.
-  retcode = subprocess.call([gsutil_path, 'cp', dl_url, dl_dir],
-                             stdout=sys.stdout, stderr=subprocess.STDOUT)
+  retcode = subprocess.call(
+      [gsutil_path, 'cp', build.DownloadUrl(archive.rev), dl_dst],
+      stdout=sys.stdout, stderr=subprocess.STDOUT)
   if retcode:
-      _Die('unexpected error while downloading {}. It may no longer exist on '
-           'the server or it may not have been uploaded yet (check {}). '
+      _Die('unexpected error while downloading %s. It may no longer exist on '
+           'the server or it may not have been uploaded yet (check %s). '
            'Otherwise, you may not have the correct access permissions.',
-           dl_url, _BUILDER_URL)
+           build.DownloadUrl(archive.rev), _BUILDER_URL)
 
   # Files needed for supersize and resource_sizes. Paths relative to out dir.
-  to_extract = [build.main_lib_path, build.map_file_path, 'args.gn',
-                'build_vars.txt', build.apk_path]
-  extract_dir = os.path.join(os.path.splitext(dl_dst)[0], 'unzipped')
+  to_extract = [build.main_lib_path, build.map_file_path, 'args.gn']
+  if build.IsAndroid():
+    to_extract += ['build_vars.txt', build.apk_path]
+  extract_dir = dl_dst + '_' + 'unzipped'
   # Storage bucket stores entire output directory including out/Release prefix.
-  _Print('Extracting build artifacts')
+  logging.info('Extracting build artifacts')
   with zipfile.ZipFile(dl_dst, 'r') as z:
-    _ExtractFiles(to_extract, _CLOUD_OUT_DIR, extract_dir, z)
-    dl_out = os.path.join(extract_dir, _CLOUD_OUT_DIR)
+    _ExtractFiles(to_extract, build.download_output_dir, extract_dir, z)
+    dl_out = os.path.join(extract_dir, build.download_output_dir)
     build.output_directory, output_directory = dl_out, build.output_directory
     archive.ArchiveBuildResults(supersize_path)
     build.output_directory = output_directory
@@ -610,21 +630,17 @@
     z.extract(f, path=dst)
 
 
-def _Print(s, *args, **kwargs):
-  print s.format(*args, **kwargs)
-
-
 def _PrintAndWriteToFile(logfile, s, *args, **kwargs):
   """Write and print |s| thottling output if |s| is a large list."""
   if isinstance(s, basestring):
     s = s.format(*args, **kwargs)
-    _Print(s)
+    print s
     logfile.write('%s\n' % s)
   else:
     for l in s[:_DIFF_DETAILS_LINES_THRESHOLD]:
-      _Print(l)
+      print l
     if len(s) > _DIFF_DETAILS_LINES_THRESHOLD:
-      _Print('\nOutput truncated, see {} for more.', logfile.name)
+      print '\nOutput truncated, see %s for more.' % logfile.name
     logfile.write('\n'.join(s))
 
 
@@ -642,6 +658,11 @@
     shutil.rmtree(tmp_dir)
 
 
+def _SetRestoreFunc(subrepo):
+  branch = _GitCmd(['rev-parse', '--abbrev-ref', 'HEAD'], subrepo)
+  atexit.register(lambda: _GitCmd(['checkout', branch], subrepo))
+
+
 def main():
   parser = argparse.ArgumentParser(
       description='Find the cause of APK size bloat.')
@@ -674,6 +695,9 @@
                       'will be skipped if this option is used and all git '
                       'commands will be executed from the subrepo directory. '
                       'This option doesn\'t work with --cloud.')
+  parser.add_argument('--silent',
+                      action='store_true',
+                      help='Less logging, no Ninja/GN output.')
 
   build_group = parser.add_argument_group('ninja', 'Args to use with ninja/gn')
   build_group.add_argument('-j',
@@ -700,27 +724,29 @@
                            action='store_true',
                            help='Allow downstream targets to be built.')
   build_group.add_argument('--target',
-                           default=_DEFAULT_TARGET,
-                           help='GN APK target to build. '
-                           'Default %s.' % _DEFAULT_TARGET)
+                           default=_DEFAULT_ANDROID_TARGET,
+                           help='GN APK target to build. Ignored for Linux. '
+                           'Default %s.' % _DEFAULT_ANDROID_TARGET)
   if len(sys.argv) == 1:
     parser.print_help()
     sys.exit()
   args = parser.parse_args()
+  log_level = logging.INFO if args.silent else logging.DEBUG
+  logging.basicConfig(level=log_level,
+                      format='%(levelname).1s %(relativeCreated)6d %(message)s')
   build = _BuildHelper(args)
-  if build.IsCloud():
-    if build.IsLinux():
-      parser.error('--cloud only works for android')
-    if args.subrepo:
+  if build.IsCloud() and args.subrepo:
       parser.error('--subrepo doesn\'t work with --cloud')
 
   subrepo = args.subrepo or _SRC_ROOT
   _EnsureDirectoryClean(subrepo)
   _SetRestoreFunc(subrepo)
-  revs = _GenerateRevList(args.rev,
-                          args.reference_rev or args.rev + '^',
-                          args.all,
-                          subrepo)
+  if build.IsLinux():
+    _VerifyUserAccepts('Linux diffs have known deficiencies (crbug/717550).')
+
+  rev, reference_rev = _ValidateRevs(
+      args.rev, args.reference_rev or args.rev + '^', subrepo)
+  revs = _GenerateRevList(rev, reference_rev, args.all, subrepo)
   with _TmpCopyBinarySizeDir() as supersize_path:
     diffs = [NativeDiff(build.size_name, supersize_path)]
     if build.IsAndroid():
@@ -733,18 +759,22 @@
     consecutive_failures = 0
     for i, archive in enumerate(diff_mngr.IterArchives()):
       if archive.Exists():
-        _Print('Found matching metadata for {}, skipping build step.',
-               archive.rev)
+        step = 'download' if build.IsCloud() else 'build'
+        logging.info('Found matching metadata for %s, skipping %s step.',
+                     archive.rev, step)
       else:
         if build.IsCloud():
           _DownloadBuildArtifacts(
               archive, build, supersize_path, args.depot_tools_path)
         else:
-          build_success = _SyncAndBuild(archive, build, subrepo)
-          if not build_success:
+          build_failure = _SyncAndBuild(archive, build, subrepo)
+          if build_failure:
+            logging.info(
+                'Build failed for %s, diffs using this rev will be skipped.',
+                archive.rev)
             consecutive_failures += 1
             if consecutive_failures > _ALLOWED_CONSECUTIVE_FAILURES:
-              _Die('{} builds failed in a row, last failure was {}.',
+              _Die('%d builds failed in a row, last failure was %s.',
                    consecutive_failures, archive.rev)
           else:
             archive.ArchiveBuildResults(supersize_path)
@@ -755,7 +785,6 @@
 
     diff_mngr.Summarize()
 
-  _global_restore_checkout_func()
 
 if __name__ == '__main__':
   sys.exit(main())
diff --git a/src/tools/binary_size/libsupersize/archive.py b/src/tools/binary_size/libsupersize/archive.py
index 13441d0..77e4c92 100644
--- a/src/tools/binary_size/libsupersize/archive.py
+++ b/src/tools/binary_size/libsupersize/archive.py
@@ -18,13 +18,14 @@
 import tempfile
 import zipfile
 
+import concurrent
 import describe
 import file_format
 import function_signature
-import helpers
 import linker_map_parser
 import models
 import ninja_parser
+import nm
 import paths
 
 
@@ -37,12 +38,12 @@
   return open(path, mode or 'r')
 
 
-def _StripLinkerAddedSymbolPrefixes(symbols):
+def _StripLinkerAddedSymbolPrefixes(raw_symbols):
   """Removes prefixes sometimes added to symbol names during link
 
   Removing prefixes make symbol names match up with those found in .o files.
   """
-  for symbol in symbols:
+  for symbol in raw_symbols:
     name = symbol.name
     if name.startswith('startup.'):
       symbol.flags |= models.FLAG_STARTUP
@@ -58,9 +59,9 @@
       symbol.name = name[4:]
 
 
-def _UnmangleRemainingSymbols(symbols, tool_prefix):
+def _UnmangleRemainingSymbols(raw_symbols, tool_prefix):
   """Uses c++filt to unmangle any symbols that need it."""
-  to_process = [s for s in symbols if s.name.startswith('_Z')]
+  to_process = [s for s in raw_symbols if s.name.startswith('_Z')]
   if not to_process:
     return
 
@@ -127,21 +128,18 @@
   logging.debug('Found name prefixes of: %r', found_prefixes)
 
 
-def _NormalizeObjectPaths(symbols):
-  """Ensures that all paths are formatted in a useful way."""
-  for symbol in symbols:
-    path = symbol.object_path
-    if path.startswith('obj/'):
-      # Convert obj/third_party/... -> third_party/...
-      path = path[4:]
-    elif path.startswith('../../'):
-      # Convert ../../third_party/... -> third_party/...
-      path = path[6:]
-    if path.endswith(')'):
-      # Convert foo/bar.a(baz.o) -> foo/bar.a/baz.o
-      start_idx = path.index('(')
-      path = os.path.join(path[:start_idx], path[start_idx + 1:-1])
-    symbol.object_path = path
+def _NormalizeObjectPath(path):
+  if path.startswith('obj/'):
+    # Convert obj/third_party/... -> third_party/...
+    path = path[4:]
+  elif path.startswith('../../'):
+    # Convert ../../third_party/... -> third_party/...
+    path = path[6:]
+  if path.endswith(')'):
+    # Convert foo/bar.a(baz.o) -> foo/bar.a/baz.o
+    start_idx = path.index('(')
+    path = os.path.join(path[:start_idx], path[start_idx + 1:-1])
+  return path
 
 
 def _NormalizeSourcePath(path):
@@ -154,19 +152,111 @@
   return path
 
 
-def _ExtractSourcePaths(symbols, source_mapper):
-  """Fills in the .source_path attribute of all symbols."""
-  logging.debug('Parsed %d .ninja files.', source_mapper.parsed_file_count)
+def _SourcePathForObjectPath(object_path, source_mapper):
+  # We don't have source info for prebuilt .a files.
+  if not os.path.isabs(object_path) and not object_path.startswith('..'):
+    source_path = source_mapper.FindSourceForPath(object_path)
+    if source_path:
+      return _NormalizeSourcePath(source_path)
+  return ''
 
-  for symbol in symbols:
+
+def _ExtractSourcePaths(raw_symbols, source_mapper):
+  """Fills in the |source_path| attribute."""
+  logging.debug('Parsed %d .ninja files.', source_mapper.parsed_file_count)
+  for symbol in raw_symbols:
     object_path = symbol.object_path
-    if symbol.source_path or not object_path:
+    if object_path and not symbol.source_path:
+      symbol.source_path = _SourcePathForObjectPath(object_path, source_mapper)
+
+
+def _ComputeAnscestorPath(path_list):
+  """Returns the common anscestor of the given paths."""
+  # Ignore missing paths.
+  path_list = [p for p in path_list if p]
+  prefix = os.path.commonprefix(path_list)
+  # Put the path count as a subdirectory to allow for better grouping when
+  # path-based breakdowns.
+  if not prefix:
+    if len(path_list) < 2:
+      return ''
+    return os.path.join('{shared}', str(len(path_list)))
+  if prefix == path_list[0]:
+    return prefix
+  assert len(path_list) > 1, 'path_list: ' + repr(path_list)
+  return os.path.join(os.path.dirname(prefix), '{shared}', str(len(path_list)))
+
+
+# This must normalize object paths at the same time because normalization
+# needs to occur before finding common ancestor.
+def _ComputeAnscestorPathsAndNormalizeObjectPaths(
+    raw_symbols, object_paths_by_name, source_mapper):
+  num_found_paths = 0
+  num_unknown_names = 0
+  num_path_mismatches = 0
+  num_unmatched_aliases = 0
+  for symbol in raw_symbols:
+    name = symbol.name
+    if (symbol.IsBss() or
+        not name or
+        name[0] in '*.' or  # e.g. ** merge symbols, .Lswitch.table
+        name == 'startup'):
+      symbol.object_path = _NormalizeObjectPath(symbol.object_path)
       continue
-    # We don't have source info for prebuilt .a files.
-    if not os.path.isabs(object_path) and not object_path.startswith('..'):
-      source_path = source_mapper.FindSourceForPath(object_path)
-      if source_path:
-        symbol.source_path = _NormalizeSourcePath(source_path)
+
+    object_paths = object_paths_by_name.get(name)
+    if object_paths:
+      num_found_paths += 1
+    else:
+      if not symbol.object_path and symbol.aliases:
+        # Happens when aliases are from object files where all symbols were
+        # pruned or de-duped as aliases. Since we are only scanning .o files
+        # referenced by included symbols, such files are missed.
+        # TODO(agrieve): This could be fixed by retrieving linker inputs from
+        #     build.ninja, or by looking for paths within the .map file's
+        #     discarded sections.
+        num_unmatched_aliases += 1
+        continue
+      if num_unknown_names < 10:
+        logging.warning('Symbol not found in any .o files: %r', symbol)
+      num_unknown_names += 1
+      symbol.object_path = _NormalizeObjectPath(symbol.object_path)
+      continue
+
+    if symbol.object_path and symbol.object_path not in object_paths:
+      if num_path_mismatches < 10:
+        logging.warning('Symbol path reported by .map not found by nm.')
+        logging.warning('sym=%r', symbol)
+        logging.warning('paths=%r', object_paths)
+      num_path_mismatches += 1
+
+    if source_mapper:
+      source_paths = [
+          _SourcePathForObjectPath(p, source_mapper) for p in object_paths]
+      symbol.source_path = _ComputeAnscestorPath(source_paths)
+
+    object_paths = [_NormalizeObjectPath(p) for p in object_paths]
+    symbol.object_path = _ComputeAnscestorPath(object_paths)
+
+  logging.debug('Cross-referenced %d symbols with nm output. '
+                'num_unknown_names=%d num_path_mismatches=%d '
+                'num_unused_aliases=%d', num_found_paths, num_unknown_names,
+                num_path_mismatches, num_unmatched_aliases)
+
+
+def _DiscoverMissedObjectPaths(raw_symbols, elf_object_paths):
+  # Missing object paths are caused by .a files added by -l flags, which are not
+  # listed as explicit inputs within .ninja rules.
+  parsed_inputs = set(elf_object_paths)
+  missed_inputs = set()
+  for symbol in raw_symbols:
+    path = symbol.object_path
+    if path.endswith(')'):
+      # Convert foo/bar.a(baz.o) -> foo/bar.a
+      path = path[:path.index('(')]
+    if path and path not in parsed_inputs:
+      missed_inputs.add(path)
+  return missed_inputs
 
 
 def _CalculatePadding(symbols):
@@ -184,29 +274,27 @@
       continue
     if symbol.address <= 0 or prev_symbol.address <= 0:
       continue
-    # Padding-only symbols happen for ** symbol gaps.
-    prev_is_padding_only = prev_symbol.size_without_padding == 0
-    if symbol.address == prev_symbol.address and not prev_is_padding_only:
-      assert False, 'Found duplicate symbols:\n%r\n%r' % (prev_symbol, symbol)
-    # Even with symbols at the same address removed, overlaps can still
-    # happen. In this case, padding will be negative (and this is fine).
+
+    if symbol.address == prev_symbol.address:
+      if symbol.aliases and symbol.aliases is prev_symbol.aliases:
+        symbol.padding = prev_symbol.padding
+        symbol.size = prev_symbol.size
+        continue
+      # Padding-only symbols happen for ** symbol gaps.
+      assert prev_symbol.size_without_padding == 0, (
+          'Found duplicate symbols:\n%r\n%r' % (prev_symbol, symbol))
+
     padding = symbol.address - prev_symbol.end_address
-    # These thresholds were found by manually auditing arm32 Chrome.
-    # E.g.: Set them to 0 and see what warnings get logged.
+    # These thresholds were found by experimenting with arm32 Chrome.
+    # E.g.: Set them to 0 and see what warnings get logged, then take max value.
     # TODO(agrieve): See if these thresholds make sense for architectures
     #     other than arm32.
     if not symbol.name.startswith('*') and (
         symbol.section in 'rd' and padding >= 256 or
         symbol.section in 't' and padding >= 64):
-      # For nm data, this is caused by data that has no associated symbol.
-      # The linker map file lists them with no name, but with a file.
-      # Example:
-      #   .data 0x02d42764 0x120 .../V8SharedWorkerGlobalScope.o
-      # Where as most look like:
-      #   .data.MANGLED_NAME...
-      logging.debug('Large padding of %d between:\n  A) %r\n  B) %r' % (
-                    padding, prev_symbol, symbol))
-      continue
+      # Should not happen.
+      logging.warning('Large padding of %d between:\n  A) %r\n  B) %r' % (
+                      padding, prev_symbol, symbol))
     symbol.padding = padding
     symbol.size += padding
     assert symbol.size >= 0, (
@@ -214,107 +302,49 @@
         '%r\nprev symbol: %r' % (symbol, prev_symbol))
 
 
-def _ClusterSymbols(symbols):
-  """Returns a new list of symbols with some symbols moved into groups.
+def _AddSymbolAliases(raw_symbols, aliases_by_address):
+  # Step 1: Create list of (index_of_symbol, name_list).
+  logging.debug('Creating alias list')
+  replacements = []
+  num_new_symbols = 0
+  for i, s in enumerate(raw_symbols):
+    # Don't alias padding-only symbols (e.g. ** symbol gap)
+    if s.size_without_padding == 0:
+      continue
+    name_list = aliases_by_address.get(s.address)
+    if name_list:
+      if s.name not in name_list:
+        logging.warning('Name missing from aliases: %s %s', s.name, name_list)
+        continue
+      replacements.append((i, name_list))
+      num_new_symbols += len(name_list) - 1
 
-  Groups include:
-   * Symbols that have [clone] in their name (created by compiler optimization).
-   * Star symbols (such as "** merge strings", and "** symbol gap")
+  # Step 2: Create new symbols as siblings to each existing one.
+  logging.debug('Creating %d aliases', num_new_symbols)
+  src_cursor_end = len(raw_symbols)
+  raw_symbols += [None] * num_new_symbols
+  dst_cursor_end = len(raw_symbols)
+  for src_index, name_list in reversed(replacements):
+    # Copy over symbols that come after the current one.
+    chunk_size = src_cursor_end - src_index - 1
+    dst_cursor_end -= chunk_size
+    src_cursor_end -= chunk_size
+    raw_symbols[dst_cursor_end:dst_cursor_end + chunk_size] = (
+        raw_symbols[src_cursor_end:src_cursor_end + chunk_size])
+    sym = raw_symbols[src_index]
+    src_cursor_end -= 1
 
-  To view created groups:
-    Print(size_info.symbols.Filter(lambda s: s.IsGroup()), recursive=True)
-  """
-  # http://unix.stackexchange.com/questions/223013/function-symbol-gets-part-suffix-after-compilation
-  # Example name suffixes:
-  #     [clone .part.322]  # GCC
-  #     [clone .isra.322]  # GCC
-  #     [clone .constprop.1064]  # GCC
-  #     [clone .11064]  # clang
+    # Create aliases (does not bother reusing the existing symbol).
+    aliases = [None] * len(name_list)
+    for i, name in enumerate(name_list):
+      aliases[i] = models.Symbol(
+          sym.section_name, sym.size, address=sym.address, name=name,
+          aliases=aliases)
 
-  # Step 1: Create name map, find clones, collect star syms into replacements.
-  logging.debug('Creating name -> symbol map')
-  clone_indices = []
-  indices_by_full_name = {}
-  # (name, full_name) -> [(index, sym),...]
-  replacements_by_name = collections.defaultdict(list)
-  for i, symbol in enumerate(symbols):
-    if symbol.name.startswith('**'):
-      # "symbol gap 3" -> "symbol gaps"
-      name = re.sub(r'\s+\d+$', 's', symbol.name)
-      replacements_by_name[(name, None)].append((i, symbol))
-    elif symbol.full_name:
-      if symbol.full_name.endswith(']') and ' [clone ' in symbol.full_name:
-        clone_indices.append(i)
-      else:
-        indices_by_full_name[symbol.full_name] = i
+    dst_cursor_end -= len(aliases)
+    raw_symbols[dst_cursor_end:dst_cursor_end + len(aliases)] = aliases
 
-  # Step 2: Collect same-named clone symbols.
-  logging.debug('Grouping all clones')
-  group_names_by_index = {}
-  for i in clone_indices:
-    symbol = symbols[i]
-    # Multiple attributes could exist, so search from left-to-right.
-    stripped_name = symbol.name[:symbol.name.index(' [clone ')]
-    stripped_full_name = symbol.full_name[:symbol.full_name.index(' [clone ')]
-    name_tup = (stripped_name, stripped_full_name)
-    replacement_list = replacements_by_name[name_tup]
-
-    if not replacement_list:
-      # First occurance, check for non-clone symbol.
-      non_clone_idx = indices_by_full_name.get(stripped_name)
-      if non_clone_idx is not None:
-        non_clone_symbol = symbols[non_clone_idx]
-        replacement_list.append((non_clone_idx, non_clone_symbol))
-        group_names_by_index[non_clone_idx] = stripped_name
-
-    replacement_list.append((i, symbol))
-    group_names_by_index[i] = stripped_name
-
-  # Step 3: Undo clustering when length=1.
-  # Removing these groups means Diff() logic must know about [clone] suffix.
-  to_clear = []
-  for name_tup, replacement_list in replacements_by_name.iteritems():
-    if len(replacement_list) == 1:
-      to_clear.append(name_tup)
-  for name_tup in to_clear:
-    del replacements_by_name[name_tup]
-
-  # Step 4: Replace first symbol from each cluster with a SymbolGroup.
-  before_symbol_count = sum(len(x) for x in replacements_by_name.itervalues())
-  logging.debug('Creating %d symbol groups from %d symbols. %d clones had only '
-                'one symbol.', len(replacements_by_name), before_symbol_count,
-                len(to_clear))
-
-  len_delta = len(replacements_by_name) - before_symbol_count
-  grouped_symbols = [None] * (len(symbols) + len_delta)
-  dest_index = 0
-  src_index = 0
-  seen_names = set()
-  replacement_names_by_index = {}
-  for name_tup, replacement_list in replacements_by_name.iteritems():
-    for tup in replacement_list:
-      replacement_names_by_index[tup[0]] = name_tup
-
-  sorted_items = replacement_names_by_index.items()
-  sorted_items.sort(key=lambda tup: tup[0])
-  for index, name_tup in sorted_items:
-    count = index - src_index
-    grouped_symbols[dest_index:dest_index + count] = (
-        symbols[src_index:src_index + count])
-    src_index = index + 1
-    dest_index += count
-    if name_tup not in seen_names:
-      seen_names.add(name_tup)
-      group_symbols = [tup[1] for tup in replacements_by_name[name_tup]]
-      grouped_symbols[dest_index] = models.SymbolGroup(
-          group_symbols, name=name_tup[0], full_name=name_tup[1],
-          section_name=group_symbols[0].section_name)
-      dest_index += 1
-
-  assert len(grouped_symbols[dest_index:None]) == len(symbols[src_index:None])
-  grouped_symbols[dest_index:None] = symbols[src_index:None]
-  logging.debug('Finished making groups.')
-  return grouped_symbols
+  assert dst_cursor_end == src_cursor_end
 
 
 def LoadAndPostProcessSizeInfo(path):
@@ -327,33 +357,109 @@
 
 def _PostProcessSizeInfo(size_info):
   logging.info('Normalizing symbol names')
-  _NormalizeNames(size_info.raw_symbols)
+  _NormalizeNames(size_info.symbols)
   logging.info('Calculating padding')
-  _CalculatePadding(size_info.raw_symbols)
-  logging.info('Grouping decomposed functions')
-  size_info.symbols = models.SymbolGroup(
-      _ClusterSymbols(size_info.raw_symbols))
-  logging.info('Processed %d symbols', len(size_info.raw_symbols))
+  _CalculatePadding(size_info.symbols)
+  logging.info('Processed %d symbols', len(size_info.symbols))
 
 
-def CreateSizeInfo(map_path, lazy_paths=None, no_source_paths=False,
+def CreateMetadata(map_path, elf_path, apk_path, tool_prefix, output_directory):
+  metadata = None
+  if elf_path:
+    logging.debug('Constructing metadata')
+    git_rev = _DetectGitRevision(os.path.dirname(elf_path))
+    architecture = _ArchFromElf(elf_path, tool_prefix)
+    build_id = BuildIdFromElf(elf_path, tool_prefix)
+    timestamp_obj = datetime.datetime.utcfromtimestamp(os.path.getmtime(
+        elf_path))
+    timestamp = calendar.timegm(timestamp_obj.timetuple())
+
+    metadata = {
+        models.METADATA_GIT_REVISION: git_rev,
+        models.METADATA_ELF_ARCHITECTURE: architecture,
+        models.METADATA_ELF_MTIME: timestamp,
+        models.METADATA_ELF_BUILD_ID: build_id,
+    }
+
+    if output_directory:
+      relative_to_out = lambda path: os.path.relpath(path, output_directory)
+      gn_args = _ParseGnArgs(os.path.join(output_directory, 'args.gn'))
+      metadata[models.METADATA_MAP_FILENAME] = relative_to_out(map_path)
+      metadata[models.METADATA_ELF_FILENAME] = relative_to_out(elf_path)
+      metadata[models.METADATA_GN_ARGS] = gn_args
+
+      if apk_path:
+        metadata[models.METADATA_APK_FILENAME] = relative_to_out(apk_path)
+  return metadata
+
+
+def CreateSizeInfo(map_path, elf_path, tool_prefix, output_directory,
                    raw_only=False):
-  """Creates a SizeInfo from the given map file."""
-  # tool_prefix needed for c++filt.
-  lazy_paths.VerifyToolPrefix()
+  """Creates a SizeInfo.
 
-  if not no_source_paths:
-    # Parse .ninja files at the same time as parsing the .map file.
-    source_mapper_result = helpers.ForkAndCall(
-        ninja_parser.Parse, lazy_paths.VerifyOutputDirectory())
+  Args:
+    map_path: Path to the linker .map(.gz) file to parse.
+    elf_path: Path to the corresponding unstripped ELF file. Used to find symbol
+        aliases and inlined functions. Can be None.
+    tool_prefix: Prefix for c++filt & nm (required).
+    output_directory: Build output directory. If None, source_paths and symbol
+        alias information will not be recorded.
+    raw_only: Fill in just the information required for creating a .size file.
+  """
+  source_mapper = None
+  if output_directory:
+    # Start by finding the elf_object_paths, so that nm can run on them while
+    # the linker .map is being parsed.
+    logging.info('Parsing ninja files.')
+    source_mapper, elf_object_paths = ninja_parser.Parse(
+        output_directory, elf_path)
+    assert not elf_path or elf_object_paths, (
+        'Failed to find link command in ninja files for ' +
+        os.path.relpath(elf_path, output_directory))
 
+  if elf_path:
+    # Run nm on the elf file to retrieve the list of symbol names per-address.
+    # This list is required because the .map file contains only a single name
+    # for each address, yet multiple symbols are often coalesced when they are
+    # identical. This coalescing happens mainly for small symbols and for C++
+    # templates. Such symbols make up ~500kb of libchrome.so on Android.
+    elf_nm_result = nm.CollectAliasesByAddressAsync(elf_path, tool_prefix)
+
+    # Run nm on all .o/.a files to retrieve the symbol names within them.
+    # The list is used to detect when mutiple .o files contain the same symbol
+    # (e.g. inline functions), and to update the object_path / source_path
+    # fields accordingly.
+    # Looking in object files is required because the .map file choses a
+    # single path for these symbols.
+    # Rather than record all paths for each symbol, set the paths to be the
+    # common ancestor of all paths.
+    if output_directory:
+      bulk_analyzer = nm.BulkObjectFileAnalyzer(tool_prefix, output_directory)
+      bulk_analyzer.AnalyzePaths(elf_object_paths)
+
+  logging.info('Parsing Linker Map')
   with _OpenMaybeGz(map_path) as map_file:
     section_sizes, raw_symbols = (
         linker_map_parser.MapFileParser().Parse(map_file))
 
-  if not no_source_paths:
-    logging.info('Extracting source paths from .ninja files')
-    source_mapper = source_mapper_result.get()
+  if elf_path:
+    logging.debug('Validating section sizes')
+    elf_section_sizes = _SectionSizesFromElf(elf_path, tool_prefix)
+    for k, v in elf_section_sizes.iteritems():
+      if v != section_sizes.get(k):
+        logging.error('ELF file and .map file do not agree on section sizes.')
+        logging.error('.map file: %r', section_sizes)
+        logging.error('readelf: %r', elf_section_sizes)
+        sys.exit(1)
+
+  if elf_path and output_directory:
+    missed_object_paths = _DiscoverMissedObjectPaths(
+        raw_symbols, elf_object_paths)
+    bulk_analyzer.AnalyzePaths(missed_object_paths)
+    bulk_analyzer.Close()
+
+  if source_mapper:
+    logging.info('Looking up source paths from ninja files')
     _ExtractSourcePaths(raw_symbols, source_mapper)
     assert source_mapper.unmatched_paths_count == 0, (
         'One or more source file paths could not be found. Likely caused by '
@@ -363,25 +469,47 @@
   _StripLinkerAddedSymbolPrefixes(raw_symbols)
   # Map file for some reason doesn't unmangle all names.
   # Unmangle prints its own log statement.
-  _UnmangleRemainingSymbols(raw_symbols, lazy_paths.tool_prefix)
-  logging.info('Normalizing object paths')
-  _NormalizeObjectPaths(raw_symbols)
-  size_info = models.SizeInfo(section_sizes, raw_symbols)
+  _UnmangleRemainingSymbols(raw_symbols, tool_prefix)
+
+  if elf_path:
+    logging.info('Adding aliased symbols, as reported by nm')
+    # This normally does not block (it's finished by this time).
+    aliases_by_address = elf_nm_result.get()
+    _AddSymbolAliases(raw_symbols, aliases_by_address)
+
+    if output_directory:
+      # For aliases, this provides path information where there wasn't any.
+      logging.info('Computing ancestor paths for inline functions and '
+                   'normalizing object paths')
+
+      object_paths_by_name = bulk_analyzer.Get()
+      logging.debug('Fetched path information for %d symbols from %d files',
+                    len(object_paths_by_name),
+                    len(elf_object_paths) + len(missed_object_paths))
+      _ComputeAnscestorPathsAndNormalizeObjectPaths(
+          raw_symbols, object_paths_by_name, source_mapper)
+
+  if not elf_path or not output_directory:
+    logging.info('Normalizing object paths.')
+    for symbol in raw_symbols:
+      symbol.object_path = _NormalizeObjectPath(symbol.object_path)
+
+  size_info = models.SizeInfo(section_sizes, models.SymbolGroup(raw_symbols))
 
   # Name normalization not strictly required, but makes for smaller files.
   if raw_only:
     logging.info('Normalizing symbol names')
-    _NormalizeNames(size_info.raw_symbols)
+    _NormalizeNames(size_info.symbols)
   else:
     _PostProcessSizeInfo(size_info)
 
   if logging.getLogger().isEnabledFor(logging.DEBUG):
     # Padding is reported in size coverage logs.
     if raw_only:
-      _CalculatePadding(size_info.raw_symbols)
+      _CalculatePadding(size_info.symbols)
     for line in describe.DescribeSizeInfoCoverage(size_info):
       logging.info(line)
-  logging.info('Recorded info for %d symbols', len(size_info.raw_symbols))
+  logging.info('Recorded info for %d symbols', len(size_info.symbols))
   return size_info
 
 
@@ -488,7 +616,7 @@
     #     secondary architectures.
     apk_so_path = max(lib_infos, key=lambda x:x.file_size).filename
     logging.debug('Sub-apk path=%s', apk_so_path)
-    if not elf_path:
+    if not elf_path and lazy_paths.output_directory:
       elf_path = os.path.join(
           lazy_paths.output_directory, 'lib.unstripped',
           os.path.basename(apk_so_path.replace('crazy.', '')))
@@ -504,56 +632,34 @@
     if not os.path.exists(map_path):
       parser.error('Could not find .map(.gz)? file. Use --map-file.')
 
-  metadata = None
-  if elf_path:
-    logging.debug('Constructing metadata')
-    git_rev = _DetectGitRevision(os.path.dirname(elf_path))
-    architecture = _ArchFromElf(elf_path, lazy_paths.tool_prefix)
-    build_id = BuildIdFromElf(elf_path, lazy_paths.tool_prefix)
-    timestamp_obj = datetime.datetime.utcfromtimestamp(os.path.getmtime(
-        elf_path))
-    timestamp = calendar.timegm(timestamp_obj.timetuple())
-    gn_args = _ParseGnArgs(os.path.join(lazy_paths.output_directory, 'args.gn'))
+  tool_prefix = lazy_paths.VerifyToolPrefix()
+  output_directory = None
+  if not args.no_source_paths:
+    output_directory = lazy_paths.VerifyOutputDirectory()
 
-    def relative_to_out(path):
-      return os.path.relpath(path, lazy_paths.VerifyOutputDirectory())
-
-    metadata = {
-        models.METADATA_GIT_REVISION: git_rev,
-        models.METADATA_MAP_FILENAME: relative_to_out(map_path),
-        models.METADATA_ELF_ARCHITECTURE: architecture,
-        models.METADATA_ELF_FILENAME: relative_to_out(elf_path),
-        models.METADATA_ELF_MTIME: timestamp,
-        models.METADATA_ELF_BUILD_ID: build_id,
-        models.METADATA_GN_ARGS: gn_args,
-    }
-
-    if apk_path:
-      metadata[models.METADATA_APK_FILENAME] = relative_to_out(apk_path)
-      # Extraction takes around 1 second, so do it in parallel.
-      apk_elf_result = helpers.ForkAndCall(
-          _ElfInfoFromApk, apk_path, apk_so_path, lazy_paths.tool_prefix)
+  metadata = CreateMetadata(map_path, elf_path, apk_path, tool_prefix,
+                            output_directory)
+  if apk_path and elf_path:
+    # Extraction takes around 1 second, so do it in parallel.
+    apk_elf_result = concurrent.ForkAndCall(
+        _ElfInfoFromApk, (apk_path, apk_so_path, tool_prefix))
 
   size_info = CreateSizeInfo(
-      map_path, lazy_paths, no_source_paths=args.no_source_paths, raw_only=True)
+      map_path, elf_path, tool_prefix, output_directory, raw_only=True)
 
   if metadata:
     size_info.metadata = metadata
-    logging.debug('Validating section sizes')
-    elf_section_sizes = _SectionSizesFromElf(elf_path, lazy_paths.tool_prefix)
-    for k, v in elf_section_sizes.iteritems():
-      assert v == size_info.section_sizes.get(k), (
-          'ELF file and .map file do not match.')
 
     if apk_path:
       logging.debug('Extracting section sizes from .so within .apk')
       unstripped_section_sizes = size_info.section_sizes
       apk_build_id, size_info.section_sizes = apk_elf_result.get()
-      assert apk_build_id == build_id, (
+      assert apk_build_id == metadata[models.METADATA_ELF_BUILD_ID], (
           'BuildID for %s within %s did not match the one at %s' %
           (apk_so_path, apk_path, elf_path))
 
       packed_section_name = None
+      architecture = metadata[models.METADATA_ELF_ARCHITECTURE]
       if architecture == 'ARM':
         packed_section_name = '.rel.dyn'
       elif architecture == 'AArch64':
diff --git a/src/tools/binary_size/libsupersize/cluster_symbols.py b/src/tools/binary_size/libsupersize/cluster_symbols.py
new file mode 100644
index 0000000..2c1f407
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/cluster_symbols.py
@@ -0,0 +1,104 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Logic for clustering similar symbols."""
+
+import collections
+import logging
+import re
+
+
+# Refer to models.SymbolGroup.Cluster() for pydoc
+def ClusterSymbols(symbols):
+  # http://unix.stackexchange.com/questions/223013/function-symbol-gets-part-suffix-after-compilation
+  # Example name suffixes:
+  #     [clone .part.322]  # GCC
+  #     [clone .isra.322]  # GCC
+  #     [clone .constprop.1064]  # GCC
+  #     [clone .11064]  # clang
+
+  # Step 1: Create name map, find clones, collect star syms into replacements.
+  logging.debug('Creating name -> symbol map')
+  clone_indices = []
+  indices_by_full_name = {}
+  # (section_name, name, full_name) -> [(index, sym),...]
+  replacements_by_tup = collections.defaultdict(list)
+  for i, symbol in enumerate(symbols):
+    if symbol.name.startswith('**'):
+      # "symbol gap 3" -> "symbol gaps"
+      name = re.sub(r'\s+\d+( \(.*\))?$', 's', symbol.name)
+      replacements_by_tup[(symbol.section_name, name, None)].append((i, symbol))
+    elif symbol.full_name:
+      if symbol.full_name.endswith(']') and ' [clone ' in symbol.full_name:
+        clone_indices.append(i)
+      else:
+        indices_by_full_name[symbol.full_name] = i
+
+  # Step 2: Collect same-named clone symbols.
+  logging.debug('Grouping all clones')
+  group_names_by_index = {}
+  for i in clone_indices:
+    symbol = symbols[i]
+    # Multiple attributes could exist, so search from left-to-right.
+    stripped_name = symbol.name[:symbol.name.index(' [clone ')]
+    stripped_full_name = symbol.full_name[:symbol.full_name.index(' [clone ')]
+    name_tup = (symbol.section_name, stripped_name, stripped_full_name)
+    replacement_list = replacements_by_tup[name_tup]
+
+    if not replacement_list:
+      # First occurance, check for non-clone symbol.
+      non_clone_idx = indices_by_full_name.get(stripped_name)
+      if non_clone_idx is not None:
+        non_clone_symbol = symbols[non_clone_idx]
+        replacement_list.append((non_clone_idx, non_clone_symbol))
+        group_names_by_index[non_clone_idx] = stripped_name
+
+    replacement_list.append((i, symbol))
+    group_names_by_index[i] = stripped_name
+
+  # Step 3: Undo clustering when length=1.
+  # Removing these groups means Diff() logic must know about [clone] suffix.
+  to_clear = []
+  for name_tup, replacement_list in replacements_by_tup.iteritems():
+    if len(replacement_list) == 1:
+      to_clear.append(name_tup)
+  for name_tup in to_clear:
+    del replacements_by_tup[name_tup]
+
+  # Step 4: Replace first symbol from each cluster with a SymbolGroup.
+  before_symbol_count = sum(len(x) for x in replacements_by_tup.itervalues())
+  logging.debug('Creating %d symbol groups from %d symbols. %d clones had only '
+                'one symbol.', len(replacements_by_tup), before_symbol_count,
+                len(to_clear))
+
+  len_delta = len(replacements_by_tup) - before_symbol_count
+  grouped_symbols = [None] * (len(symbols) + len_delta)
+  dest_index = 0
+  src_index = 0
+  seen_tups = set()
+  replacement_tup_by_index = {}
+  for name_tup, replacement_list in replacements_by_tup.iteritems():
+    for tup in replacement_list:
+      replacement_tup_by_index[tup[0]] = name_tup
+
+  sorted_items = replacement_tup_by_index.items()
+  sorted_items.sort(key=lambda tup: tup[0])
+  for index, name_tup in sorted_items:
+    count = index - src_index
+    grouped_symbols[dest_index:dest_index + count] = (
+        symbols[src_index:src_index + count])
+    src_index = index + 1
+    dest_index += count
+    if name_tup not in seen_tups:
+      seen_tups.add(name_tup)
+      group_symbols = [tup[1] for tup in replacements_by_tup[name_tup]]
+      grouped_symbols[dest_index] = symbols._CreateTransformed(
+          group_symbols, name=name_tup[1], full_name=name_tup[2],
+          section_name=name_tup[0])
+      dest_index += 1
+
+  assert len(grouped_symbols[dest_index:None]) == len(symbols[src_index:None])
+  grouped_symbols[dest_index:None] = symbols[src_index:None]
+  logging.debug('Finished clustering symbols.')
+  return grouped_symbols
diff --git a/src/tools/binary_size/libsupersize/concurrent.py b/src/tools/binary_size/libsupersize/concurrent.py
new file mode 100644
index 0000000..416a501
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/concurrent.py
@@ -0,0 +1,210 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Helpers related to multiprocessing."""
+
+import atexit
+import logging
+import multiprocessing
+import multiprocessing.dummy
+import os
+import sys
+import threading
+import traceback
+
+
+DISABLE_ASYNC = os.environ.get('SUPERSIZE_DISABLE_ASYNC') == '1'
+if DISABLE_ASYNC:
+  logging.debug('Running in synchronous mode.')
+
+_all_pools = None
+_is_child_process = False
+_silence_exceptions = False
+
+
+class _ImmediateResult(object):
+  def __init__(self, value):
+    self._value = value
+
+  def get(self):
+    return self._value
+
+  def wait(self):
+    pass
+
+  def ready(self):
+    return True
+
+  def successful(self):
+    return True
+
+
+class _ExceptionWrapper(object):
+  """Used to marshal exception messages back to main process."""
+  def __init__(self, msg):
+    self.msg = msg
+
+
+class _FuncWrapper(object):
+  """Runs on the fork()'ed side to catch exceptions and spread *args."""
+  def __init__(self, func):
+    global _is_child_process
+    _is_child_process = True
+    self._func = func
+
+  def __call__(self, args, _=None):
+    try:
+      return self._func(*args)
+    except:  # pylint: disable=bare-except
+      # multiprocessing is supposed to catch and return exceptions automatically
+      # but it doesn't seem to work properly :(.
+      logging.warning('CAUGHT EXCEPTION')
+      return _ExceptionWrapper(traceback.format_exc())
+
+
+class _WrappedResult(object):
+  """Allows for host-side logic to be run after child process has terminated.
+
+  * Unregisters associated pool _all_pools.
+  * Raises exception caught by _FuncWrapper.
+  * Allows for custom unmarshalling of return value.
+  """
+  def __init__(self, result, pool=None, decode_func=None):
+    self._result = result
+    self._pool = pool
+    self._decode_func = decode_func
+
+  def get(self):
+    self.wait()
+    value = self._result.get()
+    _CheckForException(value)
+    if not self._decode_func or not self._result.successful():
+      return value
+    return self._decode_func(value)
+
+  def wait(self):
+    self._result.wait()
+    if self._pool:
+      _all_pools.remove(self._pool)
+      self._pool = None
+
+  def ready(self):
+    return self._result.ready()
+
+  def successful(self):
+    return self._result.successful()
+
+
+def _TerminatePools():
+  """Calls .terminate() on all active process pools.
+
+  Not supposed to be necessary according to the docs, but seems to be required
+  when child process throws an exception or Ctrl-C is hit.
+  """
+  global _silence_exceptions
+  _silence_exceptions = True
+  # Child processes cannot have pools, but atexit runs this function because
+  # it was registered before fork()ing.
+  if _is_child_process:
+    return
+  def close_pool(pool):
+    try:
+      pool.terminate()
+    except:  # pylint: disable=bare-except
+      pass
+
+  for i, pool in enumerate(_all_pools):
+    # Without calling terminate() on a separate thread, the call can block
+    # forever.
+    thread = threading.Thread(name='Pool-Terminate-{}'.format(i),
+                              target=close_pool, args=(pool,))
+    thread.daemon = True
+    thread.start()
+
+
+def _CheckForException(value):
+  if isinstance(value, _ExceptionWrapper):
+    global _silence_exceptions
+    if not _silence_exceptions:
+      _silence_exceptions = True
+      logging.error('Subprocess raised an exception:\n%s', value.msg)
+    sys.exit(1)
+
+
+def _MakeProcessPool(*args):
+  global _all_pools
+  ret = multiprocessing.Pool(*args)
+  if _all_pools is None:
+    _all_pools = []
+    atexit.register(_TerminatePools)
+  _all_pools.append(ret)
+  return ret
+
+
+def ForkAndCall(func, args, decode_func=None):
+  """Runs |func| in a fork'ed process.
+
+  Returns:
+    A Result object (call .get() to get the return value)
+  """
+  if DISABLE_ASYNC:
+    pool = None
+    result = _ImmediateResult(func(*args))
+  else:
+    pool = _MakeProcessPool(1)
+    result = pool.apply_async(_FuncWrapper(func), (args,))
+    pool.close()
+  return _WrappedResult(result, pool=pool, decode_func=decode_func)
+
+
+def BulkForkAndCall(func, arg_tuples):
+  """Calls |func| in a fork'ed process for each set of args within |arg_tuples|.
+
+  Yields the return values as they come in.
+  """
+  pool_size = min(len(arg_tuples), multiprocessing.cpu_count())
+  if DISABLE_ASYNC:
+    for args in arg_tuples:
+      yield func(*args)
+    return
+  pool = _MakeProcessPool(pool_size)
+  wrapped_func = _FuncWrapper(func)
+  for result in pool.imap_unordered(wrapped_func, arg_tuples):
+    _CheckForException(result)
+    yield result
+  pool.close()
+  pool.join()
+  _all_pools.remove(pool)
+
+
+def CallOnThread(func, *args, **kwargs):
+  """Calls |func| on a new thread and returns a promise for its return value."""
+  if DISABLE_ASYNC:
+    return _ImmediateResult(func(*args, **kwargs))
+  pool = multiprocessing.dummy.Pool(1)
+  result = pool.apply_async(func, args=args, kwds=kwargs)
+  pool.close()
+  return result
+
+
+def EncodeDictOfLists(d, key_transform=None):
+  """Serializes a dict where values are lists of strings."""
+  keys = iter(d)
+  if key_transform:
+    keys = (key_transform(k) for k in keys)
+  keys = '\x01'.join(keys)
+  values = '\x01'.join('\x02'.join(x) for x in d.itervalues())
+  return keys, values
+
+
+def DecodeDictOfLists(encoded_keys, encoded_values, key_transform=None):
+  """Deserializes a dict where values are lists of strings."""
+  keys = encoded_keys.split('\x01')
+  if key_transform:
+    keys = (key_transform(k) for k in keys)
+  values = encoded_values.split('\x01')
+  ret = {}
+  for i, key in enumerate(keys):
+    ret[key] = values[i].split('\x02')
+  return ret
diff --git a/src/tools/binary_size/libsupersize/console.py b/src/tools/binary_size/libsupersize/console.py
index e350f81..40a8746 100644
--- a/src/tools/binary_size/libsupersize/console.py
+++ b/src/tools/binary_size/libsupersize/console.py
@@ -17,6 +17,7 @@
 
 import archive
 import describe
+import diff
 import file_format
 import match_util
 import models
@@ -67,7 +68,7 @@
   def __init__(self, size_infos, lazy_paths):
     self._variables = {
         'Print': self._PrintFunc,
-        'Diff': models.Diff,
+        'Diff': diff.Diff,
         'Disassemble': self._DisassembleFunc,
         'ExpandRegex': match_util.ExpandRegexIdentifierPlaceholder,
         'ShowExamples': self._ShowExamplesFunc,
diff --git a/src/tools/binary_size/libsupersize/describe.py b/src/tools/binary_size/libsupersize/describe.py
index 5dd831d..876f1e1 100644
--- a/src/tools/binary_size/libsupersize/describe.py
+++ b/src/tools/binary_size/libsupersize/describe.py
@@ -75,9 +75,9 @@
       address = hex(sym.address)
     if self.verbose:
       count_part = '  count=%d' % len(sym) if sym.IsGroup() else ''
-      yield '{}@{:<9s}  size={}  padding={}  size_without_padding={}{}'.format(
-          sym.section, address, sym.size, sym.padding, sym.size_without_padding,
-          count_part)
+      yield '{}@{:<9s}  pss={}  padding={}  size_without_padding={}{}'.format(
+          sym.section, address, int(sym.pss), sym.padding,
+          sym.size_without_padding, count_part)
       yield '    source_path={} \tobject_path={}'.format(
           sym.source_path, sym.object_path)
       if sym.name:
@@ -89,7 +89,7 @@
             sym.FlagsString(), sym.full_name)
     else:
       yield '{}@{:<9s}  {:<7} {}'.format(
-          sym.section, address, sym.size,
+          sym.section, address, int(sym.pss),
           sym.source_path or sym.object_path or '{no path}')
       if sym.name:
         count_part = ' (count=%d)' % len(sym) if sym.IsGroup() else ''
@@ -104,7 +104,7 @@
     diff_prefix = ''
     for s in sorted_syms:
       if group.IsBss() or not s.IsBss():
-        running_total += s.size
+        running_total += s.pss
       for l in self._DescribeSymbol(s):
         if l[:4].isspace():
           indent_size = 8 + len(indent_prefix) + len(diff_prefix)
@@ -113,28 +113,28 @@
           if is_diff:
             diff_prefix = _DiffPrefix(group, s)
           yield '{}{}{:8} {}'.format(indent_prefix, diff_prefix,
-                                     running_total, l)
+                                     int(running_total), l)
 
       if self.recursive and s.IsGroup():
         for l in self._DescribeSymbolGroupChildren(s, indent=indent + 1):
           yield l
 
   def _DescribeSymbolGroup(self, group):
-    total_size = group.size
+    total_size = group.pss
     code_syms = group.WhereInSection('t')
-    code_size = code_syms.size
-    ro_size = code_syms.Inverted().WhereInSection('r').size
+    code_size = code_syms.pss
+    ro_size = code_syms.Inverted().WhereInSection('r').pss
     unique_paths = set(s.object_path for s in group)
     header_desc = [
-        'Showing {:,} symbols with total size: {} bytes'.format(
-            len(group), total_size),
+        'Showing {:,} symbols ({:,} unique) with total pss: {} bytes'.format(
+            len(group), group.CountUniqueSymbols(), int(total_size)),
         '.text={:<10} .rodata={:<10} other={:<10} total={}'.format(
-            _PrettySize(code_size), _PrettySize(ro_size),
-            _PrettySize(total_size - code_size - ro_size),
-            _PrettySize(total_size)),
+            _PrettySize(int(code_size)), _PrettySize(int(ro_size)),
+            _PrettySize(int(total_size - code_size - ro_size)),
+            _PrettySize(int(total_size))),
         'Number of object files: {}'.format(len(unique_paths)),
         '',
-        'First columns are: running total, type, size',
+        'First columns are: running total, address, pss',
     ]
     children_desc = self._DescribeSymbolGroupChildren(group)
     return itertools.chain(header_desc, children_desc)
@@ -220,7 +220,6 @@
 
 def DescribeSizeInfoCoverage(size_info):
   """Yields lines describing how accurate |size_info| is."""
-  symbols = models.SymbolGroup(size_info.raw_symbols)
   for section in models.SECTION_TO_SECTION_NAME:
     if section == 'd':
       expected_size = sum(v for k, v in size_info.section_sizes.iteritems()
@@ -229,29 +228,45 @@
       expected_size = size_info.section_sizes[
           models.SECTION_TO_SECTION_NAME[section]]
 
-    def one_stat(group):
-      template = ('Section %s has %.1f%% of %d bytes accounted for from '
-                  '%d symbols. %d bytes are unaccounted for. Padding '
-                  'accounts for %d bytes')
-      actual_size = group.size
-      count = len(group)
-      padding = group.padding
-      size_percent = 100.0 * actual_size / expected_size
-      return (template % (section, size_percent, actual_size, count,
-                          expected_size - actual_size, padding))
 
-    in_section = symbols.WhereInSection(section)
-    yield one_stat(in_section)
-
+    in_section = size_info.symbols.WhereInSection(section)
+    actual_size = in_section.size
+    size_percent = float(actual_size) / expected_size
+    yield ('Section {}: has {:.1%} of {} bytes accounted for from '
+           '{} symbols. {} bytes are unaccounted for.').format(
+               section, size_percent, actual_size, len(in_section),
+               expected_size - actual_size)
     star_syms = in_section.WhereNameMatches(r'^\*')
-    attributed_syms = star_syms.Inverted().WhereHasAnyAttribution()
-    anonymous_syms = attributed_syms.Inverted()
-    if star_syms or anonymous_syms:
-      missing_size = star_syms.size + anonymous_syms.size
-      yield ('+ Without %d merge sections and %d anonymous entries ('
-                  'accounting for %d bytes):') % (
-          len(star_syms),  len(anonymous_syms), missing_size)
-      yield '+ ' + one_stat(attributed_syms)
+    padding = in_section.padding - star_syms.padding
+    anonymous_syms = star_syms.Inverted().WhereHasAnyAttribution().Inverted()
+    yield '* Padding accounts for {} bytes ({:.1%})'.format(
+        padding, float(padding) / in_section.size)
+    if len(star_syms):
+      yield ('* {} placeholders (symbols that start with **) account for '
+             '{} bytes ({:.1%})').format(
+                 len(star_syms), star_syms.pss, star_syms.pss / in_section.size)
+    if anonymous_syms:
+      yield '* {} anonymous symbols account for {} bytes ({:.1%})'.format(
+          len(anonymous_syms), int(anonymous_syms.pss),
+          star_syms.pss / in_section.size)
+
+    aliased_symbols = in_section.Filter(lambda s: s.aliases)
+    if section == 't':
+      if len(aliased_symbols):
+        uniques = sum(1 for s in aliased_symbols.IterUniqueSymbols())
+        yield ('* Contains {} aliases, mapped to {} unique addresses '
+               '({} bytes)').format(
+                   len(aliased_symbols), uniques, aliased_symbols.size)
+      else:
+        yield '* Contains 0 aliases'
+
+    inlined_symbols = in_section.WhereObjectPathMatches('{shared}')
+    if len(inlined_symbols):
+      yield '* {} symbols have shared ownership ({} bytes)'.format(
+          len(inlined_symbols), inlined_symbols.size)
+    else:
+      yield '* 0 symbols have shared ownership'
+
 
 
 def _UtcToLocal(utc):
@@ -270,7 +285,7 @@
         _UtcToLocal(timestamp_obj).strftime('%Y-%m-%d %H:%M:%S'))
   gn_args = display_dict.get(models.METADATA_GN_ARGS)
   if gn_args:
-    display_dict[models.METADATA_GN_ARGS] = '; '.join(gn_args)
+    display_dict[models.METADATA_GN_ARGS] = ' '.join(gn_args)
   return sorted('%s=%s' % t for t in display_dict.iteritems())
 
 
diff --git a/src/tools/binary_size/libsupersize/diff.py b/src/tools/binary_size/libsupersize/diff.py
new file mode 100644
index 0000000..c79207d
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/diff.py
@@ -0,0 +1,198 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Logic for diffing two SizeInfo objects."""
+
+import collections
+import re
+
+import models
+
+
+def _SymbolKey(symbol):
+  """Returns a tuple that can be used to see if two Symbol are the same.
+
+  Keys are not guaranteed to be unique within a SymbolGroup. When multiple
+  symbols have the same key, they will be matched up in order of appearance.
+  We do this because the numbering of these generated symbols is not stable.
+
+  Examples of symbols with shared keys:
+    "** merge strings"
+    "** symbol gap 3", "** symbol gap 5"
+    "foo() [clone ##]"
+    "CSWTCH.61", "CSWTCH.62"
+    "._468", "._467"
+    ".L__unnamed_1193", ".L__unnamed_712"
+  """
+  name = symbol.full_name or symbol.name
+  clone_idx = name.find(' [clone ')
+  if clone_idx != -1:
+    name = name[:clone_idx]
+  if name.startswith('*'):
+    # "symbol gap 3 (bar)" -> "symbol gaps"
+    name = re.sub(r'\s+\d+( \(.*\))?$', 's', name)
+
+  if '.' not in name:
+    return (symbol.section_name, name)
+  # Compiler or Linker generated symbol.
+  name = re.sub(r'[.0-9]', '', name)  # Strip out all numbers and dots.
+  return (symbol.section_name, name, symbol.object_path)
+
+
+def _CloneSymbol(sym, size):
+  """Returns a copy of |sym| with an updated |size|.
+
+  Padding and aliases are not copied.
+  """
+  return models.Symbol(
+      sym.section_name, size, address=sym.address, name=sym.name,
+      source_path=sym.source_path, object_path=sym.object_path,
+      full_name=sym.full_name, flags=sym.flags)
+
+
+def _CloneAlias(sym, diffed_alias):
+  """Returns a copy of |sym| and making it an alias of |diffed_alias|."""
+  ret = _CloneSymbol(sym, diffed_alias.size_without_padding)
+  ret.padding = diffed_alias.padding
+  ret.aliases = diffed_alias.aliases
+  ret.aliases.append(ret)
+  return ret
+
+
+def _DiffSymbol(before_sym, after_sym, diffed_symbol_by_after_aliases,
+                padding_by_section_name):
+  diffed_alias = None
+  if after_sym.aliases:
+    diffed_alias = diffed_symbol_by_after_aliases.get(id(after_sym.aliases))
+
+  if diffed_alias:
+    ret = _CloneAlias(after_sym, diffed_alias)
+  else:
+    size_diff = (after_sym.size_without_padding -
+                 before_sym.size_without_padding)
+    ret = _CloneSymbol(after_sym, size_diff)
+    # Diffs are more stable when comparing size without padding, except when
+    # the symbol is a padding-only symbol.
+    if after_sym.size_without_padding == 0 and size_diff == 0:
+      ret.padding = after_sym.padding - before_sym.padding
+    else:
+      padding_diff = after_sym.padding - before_sym.padding
+      padding_by_section_name[ret.section_name] += padding_diff
+
+    # If this is the first matched symbol of an alias group, initialize its
+    # aliases list. The remaining aliases will be appended when diff'ed.
+    if after_sym.aliases:
+      ret.aliases = [ret]
+      diffed_symbol_by_after_aliases[id(after_sym.aliases)] = ret
+  return ret
+
+
+def _CloneUnmatched(after_symbols, diffed_symbol_by_after_aliases):
+  ret = [None] * len(after_symbols)
+  for i, sym in enumerate(after_symbols):
+    cloned = sym
+    if sym.aliases:
+      diffed_alias = diffed_symbol_by_after_aliases.get(id(sym.aliases))
+      if diffed_alias:
+        # At least one alias was diffed.
+        cloned = _CloneAlias(sym, diffed_alias)
+    ret[i] = cloned
+  return ret
+
+
+def _NegateAndClone(before_symbols, matched_before_aliases,
+                    negated_symbol_by_before_aliases):
+  ret = [None] * len(before_symbols)
+  for i, sym in enumerate(before_symbols):
+    if sym.aliases:
+      negated_alias = negated_symbol_by_before_aliases.get(id(sym.aliases))
+      if negated_alias:
+        cloned = _CloneAlias(sym, negated_alias)
+      else:
+        all_aliases_removed = id(sym.aliases) not in matched_before_aliases
+        # If all alises are removed, then given them negative size to reflect
+        # the savings.
+        if all_aliases_removed:
+          cloned = _CloneSymbol(sym, -sym.size_without_padding)
+          cloned.padding = -sym.padding
+        else:
+          # But if only a subset of aliases are removed, do not actually treat
+          # them as aliases anymore, or else they will weigh down the PSS of
+          # the symbols that were not removed.
+          cloned = _CloneSymbol(sym, 0)
+        cloned.aliases = [cloned]
+        negated_symbol_by_before_aliases[id(sym.aliases)] = cloned
+    else:
+      cloned = _CloneSymbol(sym, -sym.size_without_padding)
+      cloned.padding = -sym.padding
+    ret[i] = cloned
+  return ret
+
+
+def _DiffSymbolGroups(before, after):
+  before_symbols_by_key = collections.defaultdict(list)
+  for s in before:
+    before_symbols_by_key[_SymbolKey(s)].append(s)
+
+  similar = []
+  diffed_symbol_by_after_aliases = {}
+  matched_before_aliases = set()
+  unmatched_after_syms = []
+  # For similar symbols, padding is zeroed out. In order to not lose the
+  # information entirely, store it in aggregate.
+  padding_by_section_name = collections.defaultdict(int)
+
+  # Step 1: Create all delta symbols and record unmatched symbols.
+  for after_sym in after:
+    matching_syms = before_symbols_by_key.get(_SymbolKey(after_sym))
+    if matching_syms:
+      before_sym = matching_syms.pop(0)
+      if before_sym.IsGroup() and after_sym.IsGroup():
+        similar.append(_DiffSymbolGroups(before_sym, after_sym))
+      else:
+        if before_sym.aliases:
+          matched_before_aliases.add(id(before_sym.aliases))
+        similar.append(
+            _DiffSymbol(before_sym, after_sym, diffed_symbol_by_after_aliases,
+                        padding_by_section_name))
+    else:
+      unmatched_after_syms.append(after_sym)
+      continue
+
+  # Step 2: Copy symbols only in "after" (being careful with aliases).
+  added = _CloneUnmatched(unmatched_after_syms, diffed_symbol_by_after_aliases)
+
+  # Step 3: Negate symbols only in "before" (being careful with aliases).
+  removed = []
+  negated_symbol_by_before_aliases = {}
+  for remaining_syms in before_symbols_by_key.itervalues():
+    removed.extend(_NegateAndClone(remaining_syms, matched_before_aliases,
+                                   negated_symbol_by_before_aliases))
+
+  # Step 4: Create ** symbols to represent padding differences.
+  for section_name, padding in padding_by_section_name.iteritems():
+    if padding != 0:
+      similar.append(models.Symbol(
+          section_name, padding,
+          name="** aggregate padding of diff'ed symbols"))
+  return models.SymbolDiff(
+      added, removed, similar, name=after.name, full_name=after.full_name,
+      section_name=after.section_name)
+
+
+def Diff(before, after, cluster=True):
+  """Diffs two SizeInfo objects. Returns a SizeInfoDiff.
+
+  Args:
+    cluster: When True, calls SymbolGroup.Cluster() after diffing. This
+        generally reduces noise.
+  """
+  assert isinstance(before, models.SizeInfo)
+  assert isinstance(after, models.SizeInfo)
+  section_sizes = {k: after.section_sizes[k] - v
+                   for k, v in before.section_sizes.iteritems()}
+  symbol_diff = _DiffSymbolGroups(before.symbols, after.symbols)
+  if cluster:
+    symbol_diff = symbol_diff.Cluster()
+  return models.SizeInfoDiff(section_sizes, symbol_diff, before.metadata,
+                             after.metadata)
diff --git a/src/tools/binary_size/libsupersize/file_format.py b/src/tools/binary_size/libsupersize/file_format.py
index 537523a..e58494d 100644
--- a/src/tools/binary_size/libsupersize/file_format.py
+++ b/src/tools/binary_size/libsupersize/file_format.py
@@ -45,7 +45,7 @@
   # Store a single copy of all paths and have them referenced by index.
   # Using an OrderedDict makes the indices more repetitive (better compression).
   path_tuples = collections.OrderedDict.fromkeys(
-      (s.object_path, s.source_path) for s in size_info.raw_symbols)
+      (s.object_path, s.source_path) for s in size_info.symbols)
   for i, key in enumerate(path_tuples):
     path_tuples[key] = i
   file_obj.write('%d\n' % len(path_tuples))
@@ -53,7 +53,7 @@
   _LogSize(file_obj, 'paths')  # For libchrome, adds 200kb.
 
   # Symbol counts by section.
-  by_section = models.SymbolGroup(size_info.raw_symbols)
+  by_section = models.SymbolGroup(size_info.symbols)
   by_section = by_section.GroupBySectionName().SortedByName()
   file_obj.write('%s\n' % '\t'.join(g.name for g in by_section))
   file_obj.write('%s\n' % '\t'.join(str(len(g)) for g in by_section))
@@ -80,10 +80,14 @@
                 delta=True)
   _LogSize(file_obj, 'path indices')  # For libchrome: adds 125kb.
 
+  prev_aliases = None
   for group in by_section:
     for symbol in group:
       # Do not write name when full_name exists. It will be derived on load.
       file_obj.write(symbol.full_name or symbol.name)
+      if symbol.aliases and symbol.aliases is not prev_aliases:
+        file_obj.write('\t0%x' % symbol.num_aliases)
+      prev_aliases = symbol.aliases
       if symbol.flags:
         file_obj.write('\t%x' % symbol.flags)
       file_obj.write('\n')
@@ -132,14 +136,24 @@
   raw_symbols = [None] * sum(section_counts)
   symbol_idx = 0
   for section_index, cur_section_name in enumerate(section_names):
+    alias_counter = 0
     for i in xrange(section_counts[section_index]):
-      line = next(lines)[:-1]
-      name = line
-      flags = 0
-      last_tab_idx = line.find('\t', -3)  # Allows for two digits of flags.
-      if last_tab_idx != -1:
-        flags = int(line[last_tab_idx + 1:], 16)
-        name = line[:last_tab_idx]
+      parts = next(lines)[:-1].split('\t')
+      flags_part = None
+      aliases_part = None
+
+      if len(parts) == 3:
+        aliases_part = parts[1]
+        flags_part = parts[2]
+      elif len(parts) == 2:
+        if parts[1][0] == '0':
+          aliases_part = parts[1]
+        else:
+          flags_part = parts[1]
+
+      name = parts[0]
+      flags = int(flags_part, 16) if flags_part else 0
+      num_aliases = int(aliases_part, 16) if aliases_part else 0
 
       new_sym = models.Symbol.__new__(models.Symbol)
       new_sym.section_name = cur_section_name
@@ -152,15 +166,28 @@
       new_sym.flags = flags
       new_sym.padding = 0  # Derived
       new_sym.full_name = None  # Derived
+
+      if num_aliases:
+        assert alias_counter == 0
+        new_sym.aliases = [new_sym]
+        alias_counter = num_aliases - 1
+      elif alias_counter > 0:
+        new_sym.aliases = raw_symbols[symbol_idx - 1].aliases
+        new_sym.aliases.append(new_sym)
+        alias_counter -= 1
+      else:
+        new_sym.aliases = None
+
       raw_symbols[symbol_idx] = new_sym
       symbol_idx += 1
 
-  return models.SizeInfo(section_sizes, raw_symbols, metadata=metadata)
+  return models.SizeInfo(section_sizes, models.SymbolGroup(raw_symbols),
+                         metadata=metadata)
 
 
 def SaveSizeInfo(size_info, path):
   """Saves |size_info| to |path}."""
-  if os.environ.get('MEASURE_GZIP') == '1':
+  if os.environ.get('SUPERSIZE_MEASURE_GZIP') == '1':
     with gzip.open(path, 'wb') as f:
       _SaveSizeInfoToFile(size_info, f)
   else:
diff --git a/src/tools/binary_size/libsupersize/function_signature.py b/src/tools/binary_size/libsupersize/function_signature.py
index b267fc5..bedc99e 100644
--- a/src/tools/binary_size/libsupersize/function_signature.py
+++ b/src/tools/binary_size/libsupersize/function_signature.py
@@ -43,7 +43,8 @@
           start_idx = idx + 21
           continue
         # Special case: skip "decltype (...)"
-        if name[idx - 1] != ' ':
+        # Special case: skip "{lambda(PaintOp*)#63}"
+        if name[idx - 1] != ' ' and name[idx - 7:idx] != '{lambda':
           return idx
       start_idx = idx + 1
       paren_balance_count += 1
@@ -85,6 +86,14 @@
   return space_idx
 
 
+def _NormalizeTopLevelLambda(name, space_idx, left_paren_idx):
+  # cc::{lambda(PaintOp*)#63}::_FUN() -> cc:{lambda#63}()
+  paren_idx = name.index('(', space_idx + 1)
+  hash_idx = name.rindex('#', paren_idx)
+  return (name[:paren_idx] + name[hash_idx:left_paren_idx - 6] +
+          name[left_paren_idx:])
+
+
 def Parse(name):
   """Extracts a function name from a function signature.
 
@@ -95,10 +104,20 @@
   """
   left_paren_idx = _FindParameterListParen(name)
 
+  full_name = name
   if left_paren_idx > 0:
     right_paren_idx = name.rindex(')')
     assert right_paren_idx > left_paren_idx
     space_idx = _FindReturnValueSpace(name, left_paren_idx)
-    return (name[space_idx + 1:],
-            name[space_idx + 1:left_paren_idx] + name[right_paren_idx + 1:])
-  return name, name
+    name_without_attrib = name[space_idx + 1:left_paren_idx]
+    # Special case for top-level lamdas.
+    if name_without_attrib.endswith('}::_FUN'):
+      # Don't use name_without_attrib in here since prior _idx will be off if
+      # there was a return value.
+      name = _NormalizeTopLevelLambda(name, space_idx, left_paren_idx)
+      return Parse(name)
+
+    full_name = name[space_idx + 1:]
+    name = name_without_attrib + name[right_paren_idx + 1:]
+
+  return full_name, name
diff --git a/src/tools/binary_size/libsupersize/function_signature_test.py b/src/tools/binary_size/libsupersize/function_signature_test.py
index ca61338..6c6ac73 100755
--- a/src/tools/binary_size/libsupersize/function_signature_test.py
+++ b/src/tools/binary_size/libsupersize/function_signature_test.py
@@ -66,6 +66,11 @@
           ' const')
     # Make sure []s are not removed from the name part.
     check('', 'Foo', '()', ' [virtual thunk]')
+    # Template function that accepts an anonymous lambda.
+    check('',
+          'blink::FrameView::ForAllNonThrottledFrameViews<blink::FrameView::Pre'
+          'Paint()::{lambda(FrameView&)#2}>',
+          '(blink::FrameView::PrePaint()::{lambda(FrameView&)#2} const&)', '')
 
     # SkArithmeticImageFilter.cpp has class within function body. e.g.:
     #   ArithmeticFP::onCreateGLSLInstance() looks like:
@@ -82,6 +87,13 @@
     self.assertEqual('(anonymous namespace)::Foo::Baz', got_name)
     self.assertEqual(SIG, got_full)
 
+    # Top-level lambda.
+    # Note: Inline lambdas do not seem to be broken into their own symbols.
+    SIG = 'cc::{lambda(cc::PaintOp*)#63}::_FUN(cc::PaintOp*)'
+    got_full, got_name = function_signature.Parse(SIG)
+    self.assertEqual('cc::{lambda#63}', got_name)
+    self.assertEqual('cc::{lambda#63}(cc::PaintOp*)', got_full)
+
 
 if __name__ == '__main__':
   logging.basicConfig(level=logging.DEBUG,
diff --git a/src/tools/binary_size/libsupersize/helpers.py b/src/tools/binary_size/libsupersize/helpers.py
index 4379f82..bddcd76 100644
--- a/src/tools/binary_size/libsupersize/helpers.py
+++ b/src/tools/binary_size/libsupersize/helpers.py
@@ -4,40 +4,8 @@
 
 """Utility methods."""
 
-import atexit
-import multiprocessing
 import os
-import threading
 
 
 SRC_ROOT = os.path.dirname(
     os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
-
-
-def MakeProcessPool(*args):
-  """Wrapper for multiprocessing.Pool, with fix to terminate on exit."""
-  ret = multiprocessing.Pool(*args)
-  def close_pool():
-    ret.terminate()
-
-  def on_exit():
-    thread = threading.Thread(target=close_pool)
-    thread.daemon = True
-    thread.start()
-
-  # Without calling terminate() on a separate thread, the call can block
-  # forever.
-  atexit.register(on_exit)
-  return ret
-
-
-def ForkAndCall(func, *args, **kwargs):
-  """Uses multiprocessing to run the given function in a fork'ed process.
-
-  Returns:
-    A Result object (call .get() to get the return value)
-  """
-  pool_of_one = MakeProcessPool(1)
-  result = pool_of_one.apply_async(func, args=args, kwds=kwargs)
-  pool_of_one.close()
-  return result
diff --git a/src/tools/binary_size/libsupersize/html_report.py b/src/tools/binary_size/libsupersize/html_report.py
index ac21349..c1bb059 100644
--- a/src/tools/binary_size/libsupersize/html_report.py
+++ b/src/tools/binary_size/libsupersize/html_report.py
@@ -134,7 +134,7 @@
       symbol_type = _NODE_SYMBOL_TYPE_VTABLE
     elif symbol.name.endswith(']'):
       symbol_type = _NODE_SYMBOL_TYPE_GENERATED
-    _AddSymbolIntoFileNode(node, symbol_type, symbol.name, symbol.size,
+    _AddSymbolIntoFileNode(node, symbol_type, symbol.name, symbol.pss,
                            include_symbols)
     depth += 2
     result[_NODE_MAX_DEPTH_KEY] = max(result[_NODE_MAX_DEPTH_KEY], depth)
diff --git a/src/tools/binary_size/libsupersize/integration_test.py b/src/tools/binary_size/libsupersize/integration_test.py
index e9ad925..777a09c 100755
--- a/src/tools/binary_size/libsupersize/integration_test.py
+++ b/src/tools/binary_size/libsupersize/integration_test.py
@@ -3,6 +3,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import contextlib
 import copy
 import difflib
 import glob
@@ -10,20 +11,25 @@
 import logging
 import os
 import unittest
+import re
 import subprocess
 import sys
 import tempfile
 
 import archive
 import describe
+import diff
 import file_format
 import models
-import paths
 
 
 _SCRIPT_DIR = os.path.dirname(__file__)
 _TEST_DATA_DIR = os.path.join(_SCRIPT_DIR, 'testdata')
+_TEST_OUTPUT_DIR = os.path.join(_TEST_DATA_DIR, 'mock_output_directory')
+_TEST_TOOL_PREFIX = os.path.join(
+    os.path.abspath(_TEST_DATA_DIR), 'mock_toolchain', '')
 _TEST_MAP_PATH = os.path.join(_TEST_DATA_DIR, 'test.map')
+_TEST_ELF_PATH = os.path.join(_TEST_OUTPUT_DIR, 'elf')
 
 update_goldens = False
 
@@ -35,66 +41,115 @@
       ''.join(difflib.unified_diff(expected, actual, 'expected', 'actual')))
 
 
-def _CompareWithGolden(func):
-  name = func.__name__.replace('test_', '')
-  golden_path = os.path.join(_TEST_DATA_DIR, name + '.golden')
+def _CompareWithGolden(name=None):
+  def real_decorator(func):
+    basename = name
+    if not basename:
+      basename = func.__name__.replace('test_', '')
+    golden_path = os.path.join(_TEST_DATA_DIR, basename + '.golden')
 
-  def inner(self):
-    actual_lines = func(self)
+    def inner(self):
+      actual_lines = func(self)
+      actual_lines = (re.sub(r'(elf_mtime=).*', r'\1{redacted}', l)
+                      for l in actual_lines)
 
-    if update_goldens:
-      with open(golden_path, 'w') as file_obj:
-        describe.WriteLines(actual_lines, file_obj.write)
-      logging.info('Wrote %s', golden_path)
-    else:
-      with open(golden_path) as file_obj:
-        _AssertGolden(file_obj, actual_lines)
-  return inner
+      if update_goldens:
+        with open(golden_path, 'w') as file_obj:
+          describe.WriteLines(actual_lines, file_obj.write)
+        logging.info('Wrote %s', golden_path)
+      else:
+        with open(golden_path) as file_obj:
+          _AssertGolden(file_obj, actual_lines)
+    return inner
+  return real_decorator
 
 
-def _RunApp(name, *args):
+@contextlib.contextmanager
+def _AddMocksToPath():
+  prev_path = os.environ['PATH']
+  os.environ['PATH'] = _TEST_TOOL_PREFIX[:-1] + os.path.pathsep + prev_path
+  yield
+  os.environ['PATH'] = prev_path
+
+
+def _RunApp(name, args, debug_measures=False):
   argv = [os.path.join(_SCRIPT_DIR, 'main.py'), name, '--no-pypy']
   argv.extend(args)
-  return subprocess.check_output(argv).splitlines()
+  with _AddMocksToPath():
+    env = None
+    if debug_measures:
+      env = os.environ.copy()
+      env['SUPERSIZE_DISABLE_ASYNC'] = '1'
+      env['SUPERSIZE_MEASURE_GZIP'] = '1'
+
+    return subprocess.check_output(argv, env=env).splitlines()
 
 
 class IntegrationTest(unittest.TestCase):
-  size_info = None
+  cached_size_info = [None, None, None]
 
-  def _CloneSizeInfo(self):
-    if not IntegrationTest.size_info:
-      lazy_paths = paths.LazyPaths(output_directory=_TEST_DATA_DIR)
-      IntegrationTest.size_info = (
-          archive.CreateSizeInfo(_TEST_MAP_PATH, lazy_paths))
-    return copy.deepcopy(IntegrationTest.size_info)
+  def _CloneSizeInfo(self, use_output_directory=True, use_elf=True):
+    assert not use_elf or use_output_directory
+    i = int(use_output_directory) + int(use_elf)
+    if not IntegrationTest.cached_size_info[i]:
+      elf_path = _TEST_ELF_PATH if use_elf else None
+      output_directory = _TEST_OUTPUT_DIR if use_output_directory else None
+      IntegrationTest.cached_size_info[i] = archive.CreateSizeInfo(
+          _TEST_MAP_PATH, elf_path, _TEST_TOOL_PREFIX, output_directory)
+      if use_elf:
+        with _AddMocksToPath():
+          IntegrationTest.cached_size_info[i].metadata = archive.CreateMetadata(
+              _TEST_MAP_PATH, elf_path, None, _TEST_TOOL_PREFIX,
+              output_directory)
+    return copy.deepcopy(IntegrationTest.cached_size_info[i])
 
-  @_CompareWithGolden
-  def test_Archive(self):
+  def _DoArchiveTest(self, use_output_directory=True, use_elf=True,
+                     debug_measures=False):
     with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
-      _RunApp('archive', temp_file.name, '--output-directory', _TEST_DATA_DIR,
-              '--map-file', _TEST_MAP_PATH)
+      args = [temp_file.name, '--map-file', _TEST_MAP_PATH]
+      if use_output_directory:
+        # Let autodetection find output_directory when --elf-file is used.
+        if not use_elf:
+          args += ['--output-directory', _TEST_OUTPUT_DIR]
+      else:
+        args += ['--no-source-paths']
+      if use_elf:
+        args += ['--elf-file', _TEST_ELF_PATH]
+      _RunApp('archive', args, debug_measures=debug_measures)
       size_info = archive.LoadAndPostProcessSizeInfo(temp_file.name)
     # Check that saving & loading is the same as directly parsing the .map.
-    expected_size_info = self._CloneSizeInfo()
+    expected_size_info = self._CloneSizeInfo(
+        use_output_directory=use_output_directory, use_elf=use_elf)
     self.assertEquals(expected_size_info.metadata, size_info.metadata)
-    expected = '\n'.join(describe.GenerateLines(
-        expected_size_info, verbose=True, recursive=True)),
-    actual = '\n'.join(describe.GenerateLines(
-        size_info, verbose=True, recursive=True)),
+    expected = list(describe.GenerateLines(expected_size_info.Cluster()))
+    actual = list(describe.GenerateLines(size_info.Cluster()))
     self.assertEquals(expected, actual)
 
     sym_strs = (repr(sym) for sym in size_info.symbols)
     stats = describe.DescribeSizeInfoCoverage(size_info)
-    return itertools.chain(stats, sym_strs)
+    if size_info.metadata:
+      metadata = describe.DescribeMetadata(size_info.metadata)
+    else:
+      metadata = []
+    return itertools.chain(metadata, stats, sym_strs)
 
-  def test_Archive_NoSourcePaths(self):
-    # Just tests that it doesn't crash.
-    with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
-      _RunApp('archive', temp_file.name, '--no-source-paths',
-              '--map-file', _TEST_MAP_PATH)
-      archive.LoadAndPostProcessSizeInfo(temp_file.name)
+  @_CompareWithGolden()
+  def test_Archive(self):
+    return self._DoArchiveTest(use_output_directory=False, use_elf=False)
 
-  @_CompareWithGolden
+  @_CompareWithGolden()
+  def test_Archive_OutputDirectory(self):
+    return self._DoArchiveTest(use_elf=False)
+
+  @_CompareWithGolden()
+  def test_Archive_Elf(self):
+    return self._DoArchiveTest()
+
+  @_CompareWithGolden(name='Archive_Elf')
+  def test_Archive_Elf_DebugMeasures(self):
+    return self._DoArchiveTest(debug_measures=True)
+
+  @_CompareWithGolden()
   def test_Console(self):
     with tempfile.NamedTemporaryFile(suffix='.size') as size_file, \
          tempfile.NamedTemporaryFile(suffix='.txt') as output_file:
@@ -104,34 +159,112 @@
           'ExpandRegex("_foo_")',
           'Print(size_info, to_file=%r)' % output_file.name,
       ]
-      ret = _RunApp('console', size_file.name, '--query', '; '.join(query))
+      ret = _RunApp('console', [size_file.name, '--query', '; '.join(query)])
       with open(output_file.name) as f:
         ret.extend(l.rstrip() for l in f)
       return ret
 
-  @_CompareWithGolden
+  @_CompareWithGolden()
   def test_Diff_NullDiff(self):
     with tempfile.NamedTemporaryFile(suffix='.size') as temp_file:
       file_format.SaveSizeInfo(self._CloneSizeInfo(), temp_file.name)
-      return _RunApp('diff', temp_file.name, temp_file.name)
+      return _RunApp('diff', [temp_file.name, temp_file.name])
 
-  @_CompareWithGolden
-  def test_ActualDiff(self):
-    size_info1 = self._CloneSizeInfo()
-    size_info2 = self._CloneSizeInfo()
+  @_CompareWithGolden()
+  def test_Diff_Basic(self):
+    size_info1 = self._CloneSizeInfo(use_elf=False)
+    size_info2 = self._CloneSizeInfo(use_elf=False)
     size_info1.metadata = {"foo": 1, "bar": [1,2,3], "baz": "yes"}
     size_info2.metadata = {"foo": 1, "bar": [1,3], "baz": "yes"}
     size_info1.symbols -= size_info1.symbols[:2]
     size_info2.symbols -= size_info2.symbols[-3:]
     size_info1.symbols[1].size -= 10
-    diff = models.Diff(size_info1, size_info2)
-    return describe.GenerateLines(diff, verbose=True)
+    d = diff.Diff(size_info1, size_info2)
+    return describe.GenerateLines(d, verbose=True)
 
-  @_CompareWithGolden
+  def test_Diff_Aliases1(self):
+    size_info1 = self._CloneSizeInfo()
+    size_info2 = self._CloneSizeInfo()
+
+    # Removing 1 alias should not change the size.
+    a1, _, _ = (
+        size_info2.symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases)
+    size_info2.symbols -= [a1]
+    a1.aliases.remove(a1)
+    d = diff.Diff(size_info1, size_info2)
+    self.assertEquals(d.symbols.size, 0)
+    self.assertEquals(d.symbols.removed_count, 1)
+
+    # Adding one alias should not change size.
+    d = diff.Diff(size_info2, size_info1)
+    self.assertEquals(d.symbols.size, 0)
+    self.assertEquals(d.symbols.added_count, 1)
+
+  def test_Diff_Aliases2(self):
+    size_info1 = self._CloneSizeInfo()
+    size_info2 = self._CloneSizeInfo()
+
+    # Removing 2 aliases should not change the size.
+    a1, a2, _ = (
+        size_info2.symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases)
+    size_info2.symbols -= [a1, a2]
+    a1.aliases.remove(a1)
+    a1.aliases.remove(a2)
+    d = diff.Diff(size_info1, size_info2)
+    self.assertEquals(d.symbols.size, 0)
+    self.assertEquals(d.symbols.removed_count, 2)
+
+    # Adding 2 aliases should not change size.
+    d = diff.Diff(size_info2, size_info1)
+    self.assertEquals(d.symbols.size, 0)
+    self.assertEquals(d.symbols.added_count, 2)
+
+  def test_Diff_Aliases3(self):
+    size_info1 = self._CloneSizeInfo()
+    size_info2 = self._CloneSizeInfo()
+
+    # Removing all 3 aliases should change the size.
+    a1, a2, a3 = (
+        size_info2.symbols.Filter(lambda s: s.num_aliases == 3)[0].aliases)
+    size_info2.symbols -= [a1, a2, a3]
+    d = diff.Diff(size_info1, size_info2)
+    self.assertEquals(d.symbols.size, -a1.size)
+    self.assertEquals(d.symbols.removed_count, 3)
+
+    # Adding all 3 aliases should change size.
+    d = diff.Diff(size_info2, size_info1)
+    self.assertEquals(d.symbols.size, a1.size)
+    self.assertEquals(d.symbols.added_count, 3)
+
+  def test_Diff_Clustering(self):
+    size_info1 = self._CloneSizeInfo()
+    size_info2 = self._CloneSizeInfo()
+    S = '.text'
+    size_info1.symbols += [
+        models.Symbol(S, 11, name='.L__unnamed_1193', object_path='a'), # 1
+        models.Symbol(S, 22, name='.L__unnamed_1194', object_path='a'), # 2
+        models.Symbol(S, 33, name='.L__unnamed_1195', object_path='b'), # 3
+        models.Symbol(S, 44, name='.L__bar_195', object_path='b'), # 4
+        models.Symbol(S, 55, name='.L__bar_1195', object_path='b'), # 5
+    ]
+    size_info2.symbols += [
+        models.Symbol(S, 33, name='.L__unnamed_2195', object_path='b'), # 3
+        models.Symbol(S, 11, name='.L__unnamed_2194', object_path='a'), # 1
+        models.Symbol(S, 22, name='.L__unnamed_2193', object_path='a'), # 2
+        models.Symbol(S, 44, name='.L__bar_2195', object_path='b'), # 4
+        models.Symbol(S, 55, name='.L__bar_295', object_path='b'), # 5
+    ]
+    d = diff.Diff(size_info1, size_info2)
+    self.assertEquals(d.symbols.added_count, 0)
+    self.assertEquals(d.symbols.size, 0)
+
+
+  @_CompareWithGolden()
   def test_FullDescription(self):
-    return describe.GenerateLines(self._CloneSizeInfo())
+    return describe.GenerateLines(self._CloneSizeInfo().Cluster(),
+                                  recursive=True, verbose=True)
 
-  @_CompareWithGolden
+  @_CompareWithGolden()
   def test_SymbolGroupMethods(self):
     all_syms = self._CloneSizeInfo().symbols
     global_syms = all_syms.WhereNameMatches('GLOBAL')
diff --git a/src/tools/binary_size/libsupersize/linker_map_parser.py b/src/tools/binary_size/libsupersize/linker_map_parser.py
index 5c6eca4..9bdf9b2 100644
--- a/src/tools/binary_size/libsupersize/linker_map_parser.py
+++ b/src/tools/binary_size/libsupersize/linker_map_parser.py
@@ -6,6 +6,13 @@
 
 import models
 
+# About linker maps:
+# * "Discarded input sections" include symbols merged with other symbols
+#   (aliases), so the information there is not actually a list of unused things.
+# * Linker maps include symbols that do not have names (with object path),
+#   whereas "nm" skips over these (they don't account for much though).
+# * The parse time for compressed linker maps is dominated by ungzipping.
+
 
 class MapFileParser(object):
   """Parses a linker map file (tested only on files from gold linker)."""
@@ -13,6 +20,7 @@
   # https://github.com/gittup/binutils/blob/HEAD/gold/mapfile.cc
 
   def __init__(self):
+    self._common_symbols = []
     self._symbols = []
     self._section_sizes = {}
     self._lines = None
@@ -27,16 +35,22 @@
       A tuple of (section_sizes, symbols).
     """
     self._lines = iter(lines)
-    logging.info('Parsing common symbols')
-    self._ParseCommonSymbols()
-    logging.debug('.bss common entries: %d', len(self._symbols))
-    logging.info('Parsing section symbols')
-    self._ParseSections()
+    logging.debug('Scanning for Header')
+
+    while True:
+      line = self._SkipToLineWithPrefix('Common symbol', 'Memory map')
+      if line.startswith('Common symbol'):
+        self._common_symbols = self._ParseCommonSymbols()
+        logging.debug('.bss common entries: %d', len(self._common_symbols))
+        continue
+      elif line.startswith('Memory map'):
+        self._ParseSections()
+      break
     return self._section_sizes, self._symbols
 
-  def _SkipToLineWithPrefix(self, prefix):
+  def _SkipToLineWithPrefix(self, prefix, prefix2=None):
     for l in self._lines:
-      if l.startswith(prefix):
+      if l.startswith(prefix) or (prefix2 and l.startswith(prefix2)):
         return l
 
   def _ParsePossiblyWrappedParts(self, line, count):
@@ -56,7 +70,7 @@
 # ff_cos_131072       0x40000           obj/third_party/<snip>
 # ff_cos_131072_fixed
 #                     0x20000           obj/third_party/<snip>
-    self._SkipToLineWithPrefix('Common symbol')
+    ret = []
     next(self._lines)  # Skip past blank line
 
     name, size_str, path = None, None, None
@@ -65,9 +79,10 @@
       if not parts:
         break
       name, size_str, path = parts
-      self._symbols.append(
-          models.Symbol('.bss',  int(size_str[2:], 16), name=name,
-                        object_path=path))
+      sym = models.Symbol('.bss',  int(size_str[2:], 16), name=name,
+                          object_path=path)
+      ret.append(sym)
+    return ret
 
   def _ParseSections(self):
 # .text           0x0028c600  0x22d3468
@@ -95,7 +110,6 @@
 #  ** merge constants
 #                 0x0255fb00   0x8
 # ** common      0x02db5700   0x13ab48
-    self._SkipToLineWithPrefix('Memory map')
     syms = self._symbols
     symbol_gap_count = 0
     while True:
@@ -108,13 +122,18 @@
         parts = self._ParsePossiblyWrappedParts(line, 3)
         if not parts:
           break
-        section_name, address, size_str = parts
-        self._section_sizes[section_name] = int(size_str[2:], 16)
+        section_name, section_address_str, section_size_str = parts
+        section_address = int(section_address_str[2:], 16)
+        section_size = int(section_size_str[2:], 16)
+        self._section_sizes[section_name] = section_size
         if (section_name in ('.bss', '.rodata', '.text') or
             section_name.startswith('.data')):
           logging.info('Parsing %s', section_name)
+          if section_name == '.bss':
+            # Common symbols have no address.
+            syms.extend(self._common_symbols)
           prefix_len = len(section_name) + 1  # + 1 for the trailing .
-          merge_symbol_start_address = 0
+          merge_symbol_start_address = section_address
           sym_count_at_start = len(syms)
           line = next(self._lines)
           # Parse section symbols.
@@ -139,9 +158,9 @@
               address = int(address_str[2:], 16)
               size = int(size_str[2:], 16)
               path = None
-              syms.append(
-                  models.Symbol(section_name, size, address=address, name=name,
-                                object_path=path))
+              sym = models.Symbol(section_name, size, address=address,
+                                  name=name, object_path=path)
+              syms.append(sym)
             else:
               # A normal symbol entry.
               subsection_name, address_str, size_str, path = (
@@ -190,21 +209,32 @@
                 # Finish off active address gap / merge section.
                 if merge_symbol_start_address:
                   merge_size = address - merge_symbol_start_address
-                  logging.debug('Merge symbol of size %d found at:\n  %r',
-                                merge_size, syms[-1])
-                  # Set size=0 so that it will show up as padding.
-                  sym = models.Symbol(
-                      section_name, 0,
-                      address=address,
-                      name='** symbol gap %d' % symbol_gap_count,
-                      object_path=path)
-                  symbol_gap_count += 1
-                  syms.append(sym)
                   merge_symbol_start_address = 0
+                  if merge_size > 0:
+                    # merge_size == 0 for the initial symbol generally.
+                    logging.debug('Merge symbol of size %d found at:\n  %r',
+                                  merge_size, syms[-1])
+                    # Set size=0 so that it will show up as padding.
+                    sym = models.Symbol(
+                        section_name, 0,
+                        address=address,
+                        name='** symbol gap %d' % symbol_gap_count,
+                        object_path=path)
+                    symbol_gap_count += 1
+                    syms.append(sym)
 
-              syms.append(models.Symbol(section_name, size, address=address,
-                                        name=name or mangled_name,
-                                        object_path=path))
+              sym = models.Symbol(section_name, size, address=address,
+                                  name=name or mangled_name, object_path=path)
+              syms.append(sym)
+          section_end_address = section_address + section_size
+          if section_name != '.bss' and (
+              syms[-1].end_address < section_end_address):
+            # Set size=0 so that it will show up as padding.
+            sym = models.Symbol(
+                section_name, 0,
+                address=section_end_address,
+                name='** symbol gap %d (end of section)' % symbol_gap_count)
+            syms.append(sym)
           logging.debug('Symbol count for %s: %d', section_name,
                         len(syms) - sym_count_at_start)
       except:
diff --git a/src/tools/binary_size/libsupersize/main.py b/src/tools/binary_size/libsupersize/main.py
index 33b82f0..41dbd4a 100755
--- a/src/tools/binary_size/libsupersize/main.py
+++ b/src/tools/binary_size/libsupersize/main.py
@@ -100,4 +100,4 @@
 
 
 if __name__ == '__main__':
-  sys.exit(main())
+  main()
diff --git a/src/tools/binary_size/libsupersize/models.py b/src/tools/binary_size/libsupersize/models.py
index 93843dc..1828016 100644
--- a/src/tools/binary_size/libsupersize/models.py
+++ b/src/tools/binary_size/libsupersize/models.py
@@ -10,6 +10,8 @@
         May be 0 (e.g. for .bss or for SymbolGroups).
   * size: The number of bytes this symbol takes up, including padding that comes
        before |address|.
+  * num_aliases: The number of symbols with the same address (including self).
+  * pss: size / num_aliases.
   * padding: The number of bytes of padding before |address| due to this symbol.
   * name: Symbol names with parameter list removed.
         Never None, but will be '' for anonymous symbols.
@@ -23,10 +25,11 @@
 """
 
 import collections
-import copy
+import logging
 import os
 import re
 
+import cluster_symbols
 import match_util
 
 
@@ -59,28 +62,28 @@
 
   Fields:
     section_sizes: A dict of section_name -> size.
-    raw_symbols: A flat list of all symbols.
-    symbols: A SymbolGroup containing raw_symbols, but with some Symbols grouped
-        into sub-SymbolGroups.
+    symbols: A SymbolGroup containing all symbols, sorted by address.
     metadata: A dict.
   """
   __slots__ = (
       'section_sizes',
-      'raw_symbols',
       'symbols',
       'metadata',
   )
 
   """Root size information."""
-  def __init__(self, section_sizes, raw_symbols, grouped_symbols=None,
-               metadata=None):
+  def __init__(self, section_sizes, symbols, metadata=None):
     self.section_sizes = section_sizes  # E.g. {'.text': 0}
-    # List of symbols sorted by address per-section.
-    self.raw_symbols = raw_symbols
-    # Root SymbolGroup. Cloned symbols grouped together within sub-SymbolGroups.
-    self.symbols = grouped_symbols
+    self.symbols = symbols
     self.metadata = metadata or {}
 
+  def Cluster(self):
+    """Returns a new SizeInfo with some symbols moved into subgroups.
+
+    See SymbolGroup.Cluster() for more details.
+    """
+    return SizeInfo(self.section_sizes, self.symbols.Cluster(), self.metadata)
+
 
 class SizeInfoDiff(object):
   """What you get when you Diff() two SizeInfo objects.
@@ -132,10 +135,14 @@
   def is_anonymous(self):
     return bool(self.flags & FLAG_ANONYMOUS)
 
+  @property
+  def num_aliases(self):
+    return len(self.aliases) if self.aliases else 1
+
   def FlagsString(self):
     # Most flags are 0.
     flags = self.flags
-    if not flags:
+    if not flags and not self.aliases:
       return '{}'
     parts = []
     if flags & FLAG_ANONYMOUS:
@@ -148,6 +155,9 @@
       parts.append('rel')
     if flags & FLAG_REL_LOCAL:
       parts.append('rel.loc')
+    # Not actually a part of flags, but useful to show it here.
+    if self.aliases:
+      parts.append('{} aliases'.format(self.num_aliases))
     return '{%s}' % ','.join(parts)
 
   def IsBss(self):
@@ -161,19 +171,6 @@
     #     startup._GLOBAL__sub_I_page_allocator.cc
     return self.name.endswith(']') and not self.name.endswith('[]')
 
-  def _Key(self):
-    """Returns a tuple that can be used to see if two Symbol are the same.
-
-    Keys are not guaranteed to be unique within a SymbolGroup. For example, it
-    is common to have multiple "** merge strings" symbols, which will have a
-    common key."""
-    stripped_full_name = self.full_name
-    if stripped_full_name:
-      clone_idx = stripped_full_name.find(' [clone ')
-      if clone_idx != -1:
-        stripped_full_name = stripped_full_name[:clone_idx]
-    return (self.section_name, stripped_full_name or self.name)
-
 
 class Symbol(BaseSymbol):
   """Represents a single symbol within a binary.
@@ -187,6 +184,7 @@
       'flags',
       'object_path',
       'name',
+      'aliases',
       'padding',
       'section_name',
       'source_path',
@@ -195,7 +193,7 @@
 
   def __init__(self, section_name, size_without_padding, address=None,
                name=None, source_path=None, object_path=None, full_name=None,
-               flags=0):
+               flags=0, aliases=None):
     self.section_name = section_name
     self.address = address or 0
     self.name = name or ''
@@ -204,13 +202,24 @@
     self.object_path = object_path or ''
     self.size = size_without_padding
     self.flags = flags
+    self.aliases = aliases
     self.padding = 0
 
   def __repr__(self):
-    return ('%s@%x(size_without_padding=%d,padding=%d,name=%s,path=%s,flags=%s)'
-            % (self.section_name, self.address, self.size_without_padding,
-               self.padding, self.name, self.source_path or self.object_path,
-               self.FlagsString()))
+    template = ('{}@{:x}(size_without_padding={},padding={},name={},'
+                'object_path={},source_path={},flags={})')
+    return template.format(
+        self.section_name, self.address, self.size_without_padding,
+        self.padding, self.name, self.object_path, self.source_path,
+        self.FlagsString())
+
+  @property
+  def pss(self):
+    return float(self.size) / self.num_aliases
+
+  @property
+  def pss_without_padding(self):
+    return float(self.size_without_padding) / self.num_aliases
 
 
 class SymbolGroup(BaseSymbol):
@@ -231,6 +240,7 @@
   __slots__ = (
       '_padding',
       '_size',
+      '_pss',
       '_symbols',
       '_filtered_symbols',
       'full_name',
@@ -243,6 +253,7 @@
                full_name=None, section_name=None, is_sorted=False):
     self._padding = None
     self._size = None
+    self._pss = None
     self._symbols = symbols
     self._filtered_symbols = filtered_symbols or []
     self.name = name or ''
@@ -302,36 +313,75 @@
   @property
   def object_path(self):
     first = self._symbols[0].object_path
-    return first if all(s.object_path == first for s in self._symbols) else None
+    return first if all(s.object_path == first for s in self._symbols) else ''
 
   @property
   def source_path(self):
     first = self._symbols[0].source_path
-    return first if all(s.source_path == first for s in self._symbols) else None
+    return first if all(s.source_path == first for s in self._symbols) else ''
+
+  def IterUniqueSymbols(self):
+    seen_aliases_lists = set()
+    for s in self:
+      if not s.aliases:
+        yield s
+      elif id(s.aliases) not in seen_aliases_lists:
+        seen_aliases_lists.add(id(s.aliases))
+        yield s
+
+  def CountUniqueSymbols(self):
+    return sum(1 for s in self.IterUniqueSymbols())
 
   @property
   def size(self):
     if self._size is None:
       if self.IsBss():
         self._size = sum(s.size for s in self)
-      self._size = sum(s.size for s in self if not s.IsBss())
+      else:
+        self._size = sum(s.size for s in self.IterUniqueSymbols())
     return self._size
 
   @property
+  def pss(self):
+    if self._pss is None:
+      if self.IsBss():
+        self._pss = float(self.size)
+      else:
+        self._pss = sum(s.pss for s in self)
+    return self._pss
+
+  @property
   def padding(self):
     if self._padding is None:
-      self._padding = sum(s.padding for s in self)
+      self._padding = sum(s.padding for s in self.IterUniqueSymbols())
     return self._padding
 
+  @property
+  def aliases(self):
+    return None
+
   def IsGroup(self):
     return True
 
   def _CreateTransformed(self, symbols, filtered_symbols=None, name=None,
-                         section_name=None, is_sorted=None):
+                         full_name=None, section_name=None, is_sorted=None):
     if is_sorted is None:
       is_sorted = self.is_sorted
     return SymbolGroup(symbols, filtered_symbols=filtered_symbols, name=name,
-                       section_name=section_name, is_sorted=is_sorted)
+                       full_name=full_name, section_name=section_name,
+                       is_sorted=is_sorted)
+
+  def Cluster(self):
+    """Returns a new SymbolGroup with some symbols moved into subgroups.
+
+    Subgroups include:
+     * Symbols that have [clone] in their name (created during inlining).
+     * Star symbols (such as "** merge strings", and "** symbol gap")
+
+    To view created groups:
+      Print(clustered.Filter(lambda s: s.IsGroup()), recursive=True)
+    """
+    return self._CreateTransformed(cluster_symbols.ClusterSymbols(self))
 
   def Sorted(self, cmp_func=None, key=None, reverse=False):
     # Default to sorting by abs(size) then name.
@@ -356,8 +406,14 @@
 
   def Filter(self, func):
     filtered_and_kept = ([], [])
-    for symbol in self:
-      filtered_and_kept[int(bool(func(symbol)))].append(symbol)
+    symbol = None
+    try:
+      for symbol in self:
+        filtered_and_kept[int(bool(func(symbol)))].append(symbol)
+    except:
+      logging.warning('Filter failed on symbol %r', symbol)
+      raise
+
     return self._CreateTransformed(filtered_and_kept[1],
                                    filtered_symbols=filtered_and_kept[0],
                                    section_name=self.section_name)
@@ -570,18 +626,42 @@
         self.unchanged_count, self.size)
 
   def _CreateTransformed(self, symbols, filtered_symbols=None, name=None,
-                         section_name=None, is_sorted=None):
-    ret = SymbolDiff.__new__(SymbolDiff)
-    # Printing sorts, so fast-path the same symbols case.
+                         full_name=None, section_name=None, is_sorted=None):
+    # Printing sorts, so short-circuit the same symbols case.
     if len(symbols) == len(self._symbols):
-      ret._added_ids = self._added_ids
-      ret._removed_ids = self._removed_ids
+      new_added_ids = self._added_ids
+      new_removed_ids = self._removed_ids
     else:
-      ret._added_ids = set(id(s) for s in symbols if self.IsAdded(s))
-      ret._removed_ids = set(id(s) for s in symbols if self.IsRemoved(s))
+      old_added_ids = self._added_ids
+      old_removed_ids = self._removed_ids
+
+      def get_status(sym):
+        obj_id = id(sym)
+        if obj_id in old_added_ids:
+          return 0
+        if obj_id in old_removed_ids:
+          return 1
+        if sym.IsGroup():
+          first_status = get_status(sym[0])
+          if all(get_status(s) == first_status for s in sym[1:]):
+            return first_status
+        return 2
+
+      new_added_ids = set()
+      new_removed_ids = set()
+      for sym in symbols:
+        status = get_status(sym)
+        if status == 0:
+          new_added_ids.add(id(sym))
+        elif status == 1:
+          new_removed_ids.add(id(sym))
+
+    ret = SymbolDiff.__new__(SymbolDiff)
+    ret._added_ids = new_added_ids
+    ret._removed_ids = new_removed_ids
     super(SymbolDiff, ret).__init__(
         symbols, filtered_symbols=filtered_symbols, name=name,
-        section_name=section_name, is_sorted=is_sorted)
+        full_name=full_name, section_name=section_name, is_sorted=is_sorted)
     return ret
 
   @property
@@ -615,95 +695,6 @@
     return self.Filter(lambda s: not self.IsSimilar(s) or s.size)
 
 
-def Diff(before, after):
-  """Diffs two SizeInfo or SymbolGroup objects.
-
-  When diffing SizeInfos, a SizeInfoDiff is returned.
-  When diffing SymbolGroups, a SymbolDiff is returned.
-
-  Returns:
-    Returns a SizeInfo when args are of type SizeInfo.
-    Returns a SymbolDiff when args are of type SymbolGroup.
-  """
-  if isinstance(after, SizeInfo):
-    assert isinstance(before, SizeInfo)
-    section_sizes = {k: after.section_sizes[k] - v
-                     for k, v in before.section_sizes.iteritems()}
-    symbol_diff = _DiffSymbols(before.symbols, after.symbols)
-    return SizeInfoDiff(section_sizes, symbol_diff, before.metadata,
-                        after.metadata)
-
-  assert isinstance(after, SymbolGroup) and isinstance(before, SymbolGroup)
-  return _DiffSymbols(before, after)
-
-
-def _NegateAll(symbols):
-  ret = []
-  for symbol in symbols:
-    if symbol.IsGroup():
-      duped = SymbolDiff([], _NegateAll(symbol), [], name=symbol.name,
-                         full_name=symbol.full_name,
-                         section_name=symbol.section_name)
-    else:
-      duped = copy.copy(symbol)
-      duped.size = -duped.size
-      duped.padding = -duped.padding
-    ret.append(duped)
-  return ret
-
-
-def _DiffSymbols(before, after):
-  symbols_by_key = collections.defaultdict(list)
-  for s in before:
-    symbols_by_key[s._Key()].append(s)
-
-  added = []
-  similar = []
-  # For similar symbols, padding is zeroed out. In order to not lose the
-  # information entirely, store it in aggregate.
-  padding_by_section_name = collections.defaultdict(int)
-  for after_sym in after:
-    matching_syms = symbols_by_key.get(after_sym._Key())
-    if matching_syms:
-      before_sym = matching_syms.pop(0)
-      if before_sym.IsGroup() and after_sym.IsGroup():
-        merged_sym = _DiffSymbols(before_sym, after_sym)
-      else:
-        size_diff = (after_sym.size_without_padding -
-                     before_sym.size_without_padding)
-        merged_sym = Symbol(after_sym.section_name, size_diff,
-                            address=after_sym.address, name=after_sym.name,
-                            source_path=after_sym.source_path,
-                            object_path=after_sym.object_path,
-                            full_name=after_sym.full_name,
-                            flags=after_sym.flags)
-
-        # Diffs are more stable when comparing size without padding, except when
-        # the symbol is a padding-only symbol.
-        if after_sym.size_without_padding == 0 and size_diff == 0:
-          merged_sym.padding = after_sym.padding - before_sym.padding
-        else:
-          padding_by_section_name[after_sym.section_name] += (
-              after_sym.padding - before_sym.padding)
-
-      similar.append(merged_sym)
-    else:
-      added.append(after_sym)
-
-  removed = []
-  for remaining_syms in symbols_by_key.itervalues():
-    if remaining_syms:
-      removed.extend(_NegateAll(remaining_syms))
-
-  for section_name, padding in padding_by_section_name.iteritems():
-    if padding != 0:
-      similar.append(Symbol(section_name, padding,
-                            name="** aggregate padding of diff'ed symbols"))
-  return SymbolDiff(added, removed, similar, name=after.name,
-                    full_name=after.full_name,
-                    section_name=after.section_name)
-
-
 def _ExtractPrefixBeforeSeparator(string, separator, count=1):
   idx = -len(separator)
   prev_idx = None
diff --git a/src/tools/binary_size/libsupersize/ninja_parser.py b/src/tools/binary_size/libsupersize/ninja_parser.py
index 22d5519..b8a2784 100644
--- a/src/tools/binary_size/libsupersize/ninja_parser.py
+++ b/src/tools/binary_size/libsupersize/ninja_parser.py
@@ -11,7 +11,8 @@
 # E.g.:
 # build obj/.../foo.o: cxx gen/.../foo.cc || obj/.../foo.inputdeps.stamp
 # build obj/.../libfoo.a: alink obj/.../a.o obj/.../b.o |
-_REGEX = re.compile(r'build ([^:]+?\.[ao]): \w+ (.*?)(?: \||\n|$)')
+# build ./libchrome.so ./lib.unstripped/libchrome.so: solink a.o b.o ...
+_REGEX = re.compile(r'build ([^:]+): \w+ (.*?)(?: \||\n|$)')
 
 
 class _SourceMapper(object):
@@ -55,37 +56,62 @@
     return len(self._unmatched_paths)
 
 
-def _ParseOneFile(lines, dep_map):
+def _ParseNinjaPathList(path_list):
+  ret = path_list.replace('\\ ', '\b')
+  return [s.replace('\b', ' ') for s in ret.split(' ')]
+
+
+def _ParseOneFile(lines, dep_map, elf_path):
   sub_ninjas = []
+  elf_inputs = None
   for line in lines:
     if line.startswith('subninja '):
       sub_ninjas.append(line[9:-1])
       continue
     m = _REGEX.match(line)
     if m:
-      output, srcs = m.groups()
-      output = output.replace('\\ ', ' ')
-      assert output not in dep_map, 'Duplicate output: ' + output
-      if output[-1] == 'o':
-        dep_map[output] = srcs.replace('\\ ', ' ')
-      else:
-        srcs = srcs.replace('\\ ', '\b')
-        obj_paths = (s.replace('\b', ' ') for s in srcs.split(' '))
-        dep_map[output] = {os.path.basename(p): p for p in obj_paths}
-  return sub_ninjas
+      outputs, srcs = m.groups()
+      if len(outputs) > 2 and outputs[-2] == '.' and outputs[-1] in 'ao':
+        output = outputs.replace('\\ ', ' ')
+        assert output not in dep_map, 'Duplicate output: ' + output
+        if output[-1] == 'o':
+          dep_map[output] = srcs.replace('\\ ', ' ')
+        else:
+          obj_paths = _ParseNinjaPathList(srcs)
+          dep_map[output] = {os.path.basename(p): p for p in obj_paths}
+      elif elf_path and elf_path in outputs:
+        properly_parsed = [
+            os.path.normpath(p) for p in _ParseNinjaPathList(outputs)]
+        if elf_path in properly_parsed:
+          elf_inputs = _ParseNinjaPathList(srcs)
+  return sub_ninjas, elf_inputs
 
 
-def Parse(output_directory):
+def Parse(output_directory, elf_path):
+  """Parses build.ninja and subninjas.
+
+  Args:
+    output_directory: Where to find the root build.ninja.
+    elf_path: Path to elf file to find inputs for.
+
+  Returns: A tuple of (source_mapper, elf_inputs).
+  """
+  if elf_path:
+    elf_path = os.path.relpath(elf_path, output_directory)
   to_parse = ['build.ninja']
   seen_paths = set(to_parse)
   dep_map = {}
+  elf_inputs = None
   while to_parse:
     path = os.path.join(output_directory, to_parse.pop())
     with open(path) as obj:
-      sub_ninjas = _ParseOneFile(obj, dep_map)
+      sub_ninjas, found_elf_inputs = _ParseOneFile(obj, dep_map, elf_path)
+      if found_elf_inputs:
+        assert not elf_inputs, 'Found multiple inputs for elf_path ' + elf_path
+        elf_inputs = found_elf_inputs
     for subpath in sub_ninjas:
       assert subpath not in seen_paths, 'Double include of ' + subpath
       seen_paths.add(subpath)
     to_parse.extend(sub_ninjas)
 
-  return _SourceMapper(dep_map, len(seen_paths))
+  return _SourceMapper(dep_map, len(seen_paths)), elf_inputs
diff --git a/src/tools/binary_size/libsupersize/nm.py b/src/tools/binary_size/libsupersize/nm.py
new file mode 100644
index 0000000..a312b2c
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/nm.py
@@ -0,0 +1,258 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Functions that rely on parsing output of "nm" tool."""
+
+import atexit
+import collections
+import errno
+import logging
+import os
+import subprocess
+import sys
+
+import concurrent
+
+_active_subprocesses = None
+
+
+def CollectAliasesByAddress(elf_path, tool_prefix):
+  """Runs nm on |elf_path| and returns a dict of address->[names]"""
+  names_by_address = collections.defaultdict(list)
+
+  # About 60mb of output, but piping takes ~30s, and loading it into RAM
+  # directly takes 3s.
+  args = [tool_prefix + 'nm', '--no-sort', '--defined-only', '--demangle',
+          elf_path]
+  output = subprocess.check_output(args)
+  for line in output.splitlines():
+    address_str, section, name = line.split(' ', 2)
+    # To verify that rodata does not have aliases:
+    #   nm --no-sort --defined-only libchrome.so > nm.out
+    #   grep -v '\$' nm.out | grep ' r ' | sort | cut -d' ' -f1 > addrs
+    #   wc -l < addrs; uniq < addrs | wc -l
+    if section not in 'tT' or not name or name[0] == '$':
+      continue
+
+    address = int(address_str, 16)
+    if not address:
+      continue
+    # Constructors often show up twice.
+    name_list = names_by_address[address]
+    if name not in name_list:
+      name_list.append(name)
+
+  # Since this is run in a separate process, minimize data passing by returning
+  # only aliased symbols.
+  names_by_address = {k: v for k, v in names_by_address.iteritems()
+                      if len(v) > 1}
+
+  return names_by_address
+
+
+def _CollectAliasesByAddressAsyncHelper(elf_path, tool_prefix):
+  result = CollectAliasesByAddress(elf_path, tool_prefix)
+  return concurrent.EncodeDictOfLists(result, key_transform=str)
+
+
+def CollectAliasesByAddressAsync(elf_path, tool_prefix):
+  """Calls CollectAliasesByAddress in a helper process. Returns a Result."""
+  def decode(encoded):
+    return concurrent.DecodeDictOfLists(
+        encoded[0], encoded[1], key_transform=int)
+  return concurrent.ForkAndCall(
+      _CollectAliasesByAddressAsyncHelper, (elf_path, tool_prefix),
+      decode_func=decode)
+
+
+def _ParseOneObjectFileOutput(lines):
+  ret = []
+  for line in lines:
+    if not line:
+      break
+    sep = line.find(' ')  # Skip over address.
+    sep = line.find(' ', sep + 1)  # Skip over symbol type.
+    name = line[sep + 1:]
+    # Skip lines like:
+    # 00000000 t $t
+    # 00000000 r $d
+    # 0000041b r .L.str.38
+    if name[0] not in '$.':
+      ret.append(name)
+  return ret
+
+
+def _BatchCollectNames(target, tool_prefix, output_directory):
+  is_archive = isinstance(target, basestring)
+  # Ensure tool_prefix is absolute so that CWD does not affect it
+  if os.path.sep in tool_prefix:
+    # Use abspath() on the dirname to avoid it stripping a trailing /.
+    dirname = os.path.dirname(tool_prefix)
+    tool_prefix = os.path.abspath(dirname) + tool_prefix[len(dirname):]
+
+  args = [tool_prefix + 'nm', '--no-sort', '--defined-only', '--demangle']
+  if is_archive:
+    args.append(target)
+  else:
+    args.extend(target)
+  output = subprocess.check_output(args, cwd=output_directory)
+  lines = output.splitlines()
+  if not lines:
+    return '', ''
+  is_multi_file = not lines[0]
+  lines = iter(lines)
+  if is_multi_file:
+    next(lines)
+    path = next(lines)[:-1]  # Path ends with a colon.
+  else:
+    assert not is_archive
+    path = target[0]
+
+  ret = {}
+  while True:
+    if is_archive:
+      # E.g. foo/bar.a(baz.o)
+      path = '%s(%s)' % (target, path)
+    # The multiprocess API uses pickle, which is ridiculously slow. More than 2x
+    # faster to use join & split.
+    ret[path] = _ParseOneObjectFileOutput(lines)
+    path = next(lines, ':')[:-1]
+    if not path:
+      return concurrent.EncodeDictOfLists(ret)
+
+
+class _BulkObjectFileAnalyzerWorker(object):
+  """Runs nm on all given paths and returns a dict of name->[paths]"""
+
+  def __init__(self, tool_prefix, output_directory):
+    self._tool_prefix = tool_prefix
+    self._output_directory = output_directory
+    self._batches = []
+    self._result = None
+
+  def AnalyzePaths(self, paths):
+    def iter_job_params():
+      object_paths = []
+      for path in paths:
+        if path.endswith('.a'):
+          yield path, self._tool_prefix, self._output_directory
+        else:
+          object_paths.append(path)
+
+      BATCH_SIZE = 50  # Chosen arbitrarily.
+      for i in xrange(0, len(object_paths), BATCH_SIZE):
+        batch = object_paths[i:i + BATCH_SIZE]
+        yield batch, self._tool_prefix, self._output_directory
+
+    paths_by_name = collections.defaultdict(list)
+    params = list(iter_job_params())
+    for encoded_ret in concurrent.BulkForkAndCall(_BatchCollectNames, params):
+      names_by_path = concurrent.DecodeDictOfLists(*encoded_ret)
+      for path, names in names_by_path.iteritems():
+        for name in names:
+          paths_by_name[name].append(path)
+    self._batches.append(paths_by_name)
+
+  def Close(self):
+    assert self._result is None
+    assert self._batches
+    paths_by_name = self._batches[0]
+    for batch in self._batches[1:]:
+      for name, path_list in batch.iteritems():
+        paths_by_name.setdefault(name, []).extend(path_list)
+
+    # It would speed up mashalling of the values by removing all entries
+    # that have only 1 path. However, these entries are needed to give
+    # path information to symbol aliases.
+    self._result = paths_by_name
+
+  def Get(self):
+    assert self._result is not None
+    return self._result
+
+
+def _TerminateSubprocesses():
+  for proc in _active_subprocesses:
+    proc.kill()
+
+
+class _BulkObjectFileAnalyzerMaster(object):
+  """Runs BulkObjectFileAnalyzer in a subprocess."""
+
+  def __init__(self, tool_prefix, output_directory):
+    self._process = None
+    self._tool_prefix = tool_prefix
+    self._output_directory = output_directory
+
+  def _Spawn(self):
+    global _active_subprocesses
+    log_level = str(logging.getLogger().getEffectiveLevel())
+    args = [sys.executable, __file__, log_level, self._tool_prefix,
+            self._output_directory]
+    self._process = subprocess.Popen(
+        args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+    if _active_subprocesses is None:
+      _active_subprocesses = []
+      atexit.register(_TerminateSubprocesses)
+    _active_subprocesses.append(self._process)
+
+  def AnalyzePaths(self, paths):
+    if self._process is None:
+      self._Spawn()
+
+    logging.debug('Sending batch of %d paths to subprocess', len(paths))
+    payload = '\x01'.join(paths)
+    self._process.stdin.write('{:08x}'.format(len(payload)))
+    self._process.stdin.write(payload)
+
+  def Close(self):
+    assert not self._process.stdin.closed
+    self._process.stdin.close()
+    _active_subprocesses.remove(self._process)
+
+  def Get(self):
+    assert self._process.stdin.closed
+    logging.debug('Decoding nm results from forked process')
+
+    encoded_keys_len = int(self._process.stdout.read(8), 16)
+    encoded_keys = self._process.stdout.read(encoded_keys_len)
+    encoded_values = self._process.stdout.read()
+    return concurrent.DecodeDictOfLists(encoded_keys, encoded_values)
+
+
+BulkObjectFileAnalyzer = _BulkObjectFileAnalyzerMaster
+if concurrent.DISABLE_ASYNC:
+  BulkObjectFileAnalyzer = _BulkObjectFileAnalyzerWorker
+
+
+def _SubMain(log_level, tool_prefix, output_directory):
+  logging.basicConfig(
+      level=int(log_level),
+      format='nm: %(levelname).1s %(relativeCreated)6d %(message)s')
+  bulk_analyzer = _BulkObjectFileAnalyzerWorker(tool_prefix, output_directory)
+  while True:
+    payload_len = int(sys.stdin.read(8) or '0', 16)
+    if not payload_len:
+      logging.debug('nm bulk subprocess received eof.')
+      break
+    paths = sys.stdin.read(payload_len).split('\x01')
+    bulk_analyzer.AnalyzePaths(paths)
+
+  bulk_analyzer.Close()
+  paths_by_name = bulk_analyzer.Get()
+  encoded_keys, encoded_values = concurrent.EncodeDictOfLists(paths_by_name)
+  try:
+    sys.stdout.write('%08x' % len(encoded_keys))
+    sys.stdout.write(encoded_keys)
+    sys.stdout.write(encoded_values)
+  except IOError, e:
+    # Parent process exited.
+    if e.errno == errno.EPIPE:
+      sys.exit(1)
+
+  logging.debug('nm bulk subprocess finished.')
+
+
+if __name__ == '__main__':
+  _SubMain(*sys.argv[1:])
diff --git a/src/tools/binary_size/libsupersize/template/D3SymbolTreeMap.js b/src/tools/binary_size/libsupersize/template/D3SymbolTreeMap.js
index 2c3bab6..654a503 100644
--- a/src/tools/binary_size/libsupersize/template/D3SymbolTreeMap.js
+++ b/src/tools/binary_size/libsupersize/template/D3SymbolTreeMap.js
@@ -34,6 +34,7 @@
  * Make a number pretty, with comma separators.
  */
 D3SymbolTreeMap._pretty = function(num) {
+  num = Math.round(num)
   var asString = String(num);
   var result = '';
   var counter = 0;
diff --git a/src/tools/binary_size/libsupersize/testdata/Archive.golden b/src/tools/binary_size/libsupersize/testdata/Archive.golden
index 5f08ca2..e3c0e7b 100644
--- a/src/tools/binary_size/libsupersize/testdata/Archive.golden
+++ b/src/tools/binary_size/libsupersize/testdata/Archive.golden
@@ -1,46 +1,61 @@
-Section r has 44.6% of 2641540 bytes accounted for from 7 symbols. 3286112 bytes are unaccounted for. Padding accounts for 366 bytes
-+ Without 2 merge sections and 0 anonymous entries (accounting for 2641394 bytes):
-+ Section r has 0.0% of 146 bytes accounted for from 5 symbols. 5927506 bytes are unaccounted for. Padding accounts for 14 bytes
-Section b has 0.0% of 0 bytes accounted for from 6 symbols. 1300456 bytes are unaccounted for. Padding accounts for 196 bytes
-Section d has 0.0% of 388 bytes accounted for from 13 symbols. 1956628 bytes are unaccounted for. Padding accounts for 0 bytes
-Section t has 0.0% of 10578 bytes accounted for from 14 symbols. 35890134 bytes are unaccounted for. Padding accounts for 9774 bytes
-+ Without 2 merge sections and 0 anonymous entries (accounting for 9758 bytes):
-+ Section t has 0.0% of 820 bytes accounted for from 12 symbols. 35899892 bytes are unaccounted for. Padding accounts for 16 bytes
-.bss@0(size_without_padding=262144,padding=0,name=ff_cos_131072,path=third_party/fft_float.cc,flags={})
-.bss@0(size_without_padding=131072,padding=0,name=ff_cos_131072_fixed,path=third_party/fft_fixed.cc,flags={})
-.bss@0(size_without_padding=131072,padding=0,name=ff_cos_65536,path=third_party/fft_float.cc,flags={})
-.bss@2dffda0(size_without_padding=28,padding=0,name=g_chrome_content_browser_client,path=third_party/icu/ucnv_ext.c,flags={})
-.bss@2dffe80(size_without_padding=4,padding=196,name=SaveHistogram::atomic_histogram_pointer,path=third_party/icu/ucnv_ext.c,flags={})
-.bss@2dffe84(size_without_padding=4,padding=0,name=g_AnimationFrameTimeHistogram_clazz,path=third_party/icu/ucnv_ext.c,flags={anon})
-.data@2de7000(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelCmpxchg,path=base/page_allocator.cc,flags={})
-.data@2de7004(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelMemoryBarrier,path=third_party/container.c,flags={})
-.data@2de7008(size_without_padding=152,padding=0,name=base::android::kBaseRegisteredMethods,path=third_party/container.c,flags={rel})
-.data@2de70a0(size_without_padding=4,padding=0,name=base::android::g_renderer_histogram_code,path=third_party/container.c,flags={anon})
-.data@2de70a4(size_without_padding=4,padding=0,name=base::android::g_library_version_number,path=third_party/container.c,flags={anon,rel.loc})
-.data.rel.ro@2cd8500(size_without_padding=56,padding=0,name=ChromeMainDelegateAndroid [vtable],path=third_party/paint.cc,flags={})
-.data.rel.ro@2cd8538(size_without_padding=24,padding=0,name=mojo::MessageReceiver [vtable],path=base/page_allocator.cc,flags={})
-.data.rel.ro@2cd8550(size_without_padding=12,padding=0,name=kMethodsAnimationFrameTimeHistogram,path=base/page_allocator.cc,flags={})
-.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,name=ChromeMainDelegate [vtable],path=third_party/icu/ucnv_ext.c,flags={})
-.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorderRequestValidator [vtable],path=third_party/icu/ucnv_ext.c,flags={})
-.data.rel.ro.local@2c17740(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorderProxy [vtable],path=third_party/container.c,flags={})
-.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=0,name=.Lswitch.table.45,path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,flags={})
-.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,name=kSystemClassPrefixes,path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,flags={anon})
-Group(name=** merge strings,count=2,size=2641394)
-.rodata@284e364(size_without_padding=8,padding=3,name=,path=base/page_allocator.cc,flags={})
-.rodata@284e370(size_without_padding=40,padding=4,name=Name,path=base/page_allocator.cc,flags={})
-.rodata@284e398(size_without_padding=32,padding=0,name=chrome::mojom::FilePatcher::Name_,path=third_party/container.c,flags={})
-.rodata@28f3450(size_without_padding=48,padding=7,name=kAnimationFrameTimeHistogramClassPath,path=third_party/paint.cc,flags={anon})
-.rodata@28f3480(size_without_padding=4,padding=0,name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list,path=third_party/paint.cc,flags={anon})
-.text@28d900(size_without_padding=16,padding=0,name=_GLOBAL__sub_I_page_allocator.cc,path=base/page_allocator.cc,flags={startup})
-.text@28d910(size_without_padding=56,padding=0,name=_GLOBAL__sub_I_bbr_sender.cc,path=base/page_allocator.cc,flags={startup})
-.text@28d948(size_without_padding=28,padding=0,name=_GLOBAL__sub_I_pacing_sender.cc,path=base/page_allocator.cc,flags={startup})
-.text@28d964(size_without_padding=38,padding=0,name=extFromUUseMapping,path=base/page_allocator.cc,flags={})
-.text@28d98a(size_without_padding=32,padding=0,name=extFromUUseMapping,path=base/page_allocator.cc,flags={})
-Group(name=** symbol gaps,count=2,size=9758)
-.text@28f000(size_without_padding=448,padding=0,name=ucnv_extMatchFromU,path=third_party/icu/ucnv_ext.c,flags={})
-.text@28f1c8(size_without_padding=20,padding=8,name=_GLOBAL__sub_I_SkDeviceProfile.cpp,path=third_party/icu/ucnv_ext.c,flags={startup})
-.text@28f1e0(size_without_padding=20,padding=4,name=foo_bar,path=third_party/icu/ucnv_ext.c,flags={unlikely})
-.text@2a0000(size_without_padding=16,padding=0,name=blink::ContiguousContainerBase::shrinkToFit,path=third_party/paint.cc,flags={})
-.text@2a0010(size_without_padding=12,padding=0,name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2],path=third_party/paint.cc,flags={})
-.text@2a0020(size_without_padding=24,padding=4,name=blink::ContiguousContainerBase::ContiguousContainerBase,path=third_party/container.c,flags={})
-.text@2a1000(size_without_padding=94,padding=0,name=blink::PaintChunker::releasePaintChunks [clone .part.1],path=third_party/container.c,flags={anon})
+Section r: has 100.0% of 5927652 bytes accounted for from 9 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 11 bytes (0.0%)
+* 4 placeholders (symbols that start with **) account for 5927509.0 bytes (100.0%)
+* 0 symbols have shared ownership
+Section b: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 bytes are unaccounted for.
+* Padding accounts for 196 bytes (0.0%)
+* 0 symbols have shared ownership
+Section d: has 100.0% of 1957016 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 16 bytes (0.0%)
+* 2 placeholders (symbols that start with **) account for 1166732.0 bytes (59.6%)
+* 0 symbols have shared ownership
+Section t: has 100.0% of 35900712 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 48 bytes (0.0%)
+* 3 placeholders (symbols that start with **) account for 35830760.0 bytes (99.8%)
+* Contains 0 aliases
+* 0 symbols have shared ownership
+.bss@0(size_without_padding=262144,padding=0,name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=,flags={})
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=,flags={})
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=,flags={})
+.bss@2dffda0(size_without_padding=28,padding=0,name=g_chrome_content_browser_client,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={})
+.bss@2dffe80(size_without_padding=4,padding=196,name=SaveHistogram::atomic_histogram_pointer,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={})
+.bss@2dffe84(size_without_padding=4,padding=0,name=g_AnimationFrameTimeHistogram_clazz,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={anon})
+.data@2de7000(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=,flags={})
+.data@2de7004(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={})
+.data@2de7008(size_without_padding=152,padding=0,name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={rel})
+.data@2de70a0(size_without_padding=4,padding=0,name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={anon})
+.data@2de70a4(size_without_padding=4,padding=0,name=base::android::g_library_version_number,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={anon,rel.loc})
+.data@2dffd88(size_without_padding=0,padding=101600,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.data.rel.ro@2cd8500(size_without_padding=56,padding=0,name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={})
+.data.rel.ro@2cd8538(size_without_padding=24,padding=0,name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=,flags={})
+.data.rel.ro@2cd8550(size_without_padding=12,padding=0,name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=,flags={})
+.data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={})
+.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={})
+.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={})
+.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={})
+.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon})
+.rodata@266e600(size_without_padding=1965409,padding=0,name=** merge strings,object_path=,source_path=,flags={})
+.rodata@284e364(size_without_padding=0,padding=3,name=** symbol gap 2,object_path=base/base/page_allocator.o,source_path=,flags={})
+.rodata@284e364(size_without_padding=8,padding=0,name=,object_path=base/base/page_allocator.o,source_path=,flags={})
+.rodata@284e370(size_without_padding=40,padding=4,name=Name,object_path=base/base/page_allocator.o,source_path=,flags={})
+.rodata@284e398(size_without_padding=32,padding=0,name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={})
+.rodata@284e518(size_without_padding=675633,padding=352,name=** merge strings,object_path=,source_path=,flags={})
+.rodata@28f3450(size_without_padding=48,padding=7,name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={anon})
+.rodata@28f3480(size_without_padding=4,padding=0,name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list,object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={anon})
+.rodata@2c158e4(size_without_padding=0,padding=3286112,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.text@28d900(size_without_padding=16,padding=0,name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup})
+.text@28d910(size_without_padding=56,padding=0,name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup})
+.text@28d948(size_without_padding=28,padding=0,name=_GLOBAL__sub_I_pacing_sender.cc,object_path=base/base/page_allocator.o,source_path=,flags={startup})
+.text@28d964(size_without_padding=38,padding=0,name=extFromUUseMapping,object_path=base/base/page_allocator.o,source_path=,flags={})
+.text@28d98a(size_without_padding=32,padding=0,name=extFromUUseMapping,object_path=base/base/page_allocator.o,source_path=,flags={})
+.text@28f000(size_without_padding=0,padding=5718,name=** symbol gap 0,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={})
+.text@28f000(size_without_padding=448,padding=0,name=ucnv_extMatchFromU,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={})
+.text@28f1c8(size_without_padding=20,padding=8,name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={startup})
+.text@28f1e0(size_without_padding=69120,padding=4,name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=,flags={unlikely})
+.text@2a0000(size_without_padding=16,padding=32,name=blink::ContiguousContainerBase::shrinkToFit,object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={})
+.text@2a0010(size_without_padding=12,padding=0,name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2],object_path=third_party/WebKit.a/PaintChunker.o,source_path=,flags={})
+.text@2a0020(size_without_padding=24,padding=4,name=blink::ContiguousContainerBase::ContiguousContainerBase,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={})
+.text@2a1000(size_without_padding=0,padding=4040,name=** symbol gap 1,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={})
+.text@2a1000(size_without_padding=94,padding=0,name=blink::PaintChunker::releasePaintChunks [clone .part.1],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=,flags={anon})
+.text@24ca628(size_without_padding=0,padding=35821002,name=** symbol gap 2 (end of section),object_path=,source_path=,flags={})
diff --git a/src/tools/binary_size/libsupersize/testdata/Archive_Elf.golden b/src/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
new file mode 100644
index 0000000..e5e35ce
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/Archive_Elf.golden
@@ -0,0 +1,71 @@
+elf_arch=ARM
+elf_build_id=WhatAnAmazingBuildId
+elf_file_name=elf
+elf_mtime={redacted}
+git_revision=abc123
+gn_args=var1=true var2="foo"
+map_file_name=../test.map
+Section r: has 100.0% of 5927652 bytes accounted for from 9 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 11 bytes (0.0%)
+* 4 placeholders (symbols that start with **) account for 5927509.0 bytes (100.0%)
+* 0 symbols have shared ownership
+Section b: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 bytes are unaccounted for.
+* Padding accounts for 196 bytes (0.0%)
+* 0 symbols have shared ownership
+Section d: has 100.0% of 1957016 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 16 bytes (0.0%)
+* 2 placeholders (symbols that start with **) account for 1166732.0 bytes (59.6%)
+* 0 symbols have shared ownership
+Section t: has 100.0% of 35900712 bytes accounted for from 18 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 48 bytes (0.0%)
+* 3 placeholders (symbols that start with **) account for 35830760.0 bytes (99.8%)
+* Contains 5 aliases, mapped to 2 unique addresses (60 bytes)
+* 1 symbols have shared ownership (12 bytes)
+.bss@0(size_without_padding=262144,padding=0,name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={})
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={})
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={})
+.bss@2dffda0(size_without_padding=28,padding=0,name=g_chrome_content_browser_client,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.bss@2dffe80(size_without_padding=4,padding=196,name=SaveHistogram::atomic_histogram_pointer,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.bss@2dffe84(size_without_padding=4,padding=0,name=g_AnimationFrameTimeHistogram_clazz,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={anon})
+.data@2de7000(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.data@2de7004(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.data@2de7008(size_without_padding=152,padding=0,name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={rel})
+.data@2de70a0(size_without_padding=4,padding=0,name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon})
+.data@2de70a4(size_without_padding=4,padding=0,name=base::android::g_library_version_number,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,rel.loc})
+.data@2dffd88(size_without_padding=0,padding=101600,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.data.rel.ro@2cd8500(size_without_padding=56,padding=0,name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={})
+.data.rel.ro@2cd8538(size_without_padding=24,padding=0,name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.data.rel.ro@2cd8550(size_without_padding=12,padding=0,name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={})
+.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon})
+.rodata@266e600(size_without_padding=1965409,padding=0,name=** merge strings,object_path=,source_path=,flags={})
+.rodata@284e364(size_without_padding=0,padding=3,name=** symbol gap 2,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.rodata@284e364(size_without_padding=8,padding=0,name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.rodata@284e370(size_without_padding=40,padding=4,name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.rodata@284e398(size_without_padding=32,padding=0,name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.rodata@284e518(size_without_padding=675633,padding=352,name=** merge strings,object_path=,source_path=,flags={})
+.rodata@28f3450(size_without_padding=48,padding=7,name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon})
+.rodata@28f3480(size_without_padding=4,padding=0,name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon})
+.rodata@2c158e4(size_without_padding=0,padding=3286112,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.text@28d900(size_without_padding=16,padding=0,name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup})
+.text@28d910(size_without_padding=56,padding=0,name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup})
+.text@28d948(size_without_padding=28,padding=0,name=_GLOBAL__sub_I_pacing_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup})
+.text@28d964(size_without_padding=38,padding=0,name=extFromUUseMapping,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.text@28d98a(size_without_padding=32,padding=0,name=extFromUUseMapping,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.text@28f000(size_without_padding=0,padding=5718,name=** symbol gap 0,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.text@28f000(size_without_padding=448,padding=0,name=ucnv_extMatchFromU,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.text@28f1c8(size_without_padding=20,padding=8,name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={startup})
+.text@28f1e0(size_without_padding=69120,padding=4,name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={unlikely})
+.text@2a0000(size_without_padding=16,padding=32,name=blink::ContiguousContainerBase::shrinkToFit,object_path=,source_path=,flags={2 aliases})
+.text@2a0000(size_without_padding=16,padding=32,name=BazAlias,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={2 aliases})
+.text@2a0010(size_without_padding=12,padding=0,name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2],object_path=third_party/{shared}/2,source_path=third_party/{shared}/2,flags={3 aliases})
+.text@2a0010(size_without_padding=12,padding=0,name=FooAlias,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={3 aliases})
+.text@2a0010(size_without_padding=12,padding=0,name=BarAlias,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={3 aliases})
+.text@2a0020(size_without_padding=24,padding=4,name=blink::ContiguousContainerBase::ContiguousContainerBase,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.text@2a1000(size_without_padding=0,padding=4040,name=** symbol gap 1,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.text@2a1000(size_without_padding=94,padding=0,name=blink::PaintChunker::releasePaintChunks [clone .part.1],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon})
+.text@24ca628(size_without_padding=0,padding=35821002,name=** symbol gap 2 (end of section),object_path=,source_path=,flags={})
diff --git a/src/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden b/src/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
new file mode 100644
index 0000000..4dee295
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/Archive_OutputDirectory.golden
@@ -0,0 +1,61 @@
+Section r: has 100.0% of 5927652 bytes accounted for from 9 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 11 bytes (0.0%)
+* 4 placeholders (symbols that start with **) account for 5927509.0 bytes (100.0%)
+* 0 symbols have shared ownership
+Section b: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 bytes are unaccounted for.
+* Padding accounts for 196 bytes (0.0%)
+* 0 symbols have shared ownership
+Section d: has 100.0% of 1957016 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 16 bytes (0.0%)
+* 2 placeholders (symbols that start with **) account for 1166732.0 bytes (59.6%)
+* 0 symbols have shared ownership
+Section t: has 100.0% of 35900712 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 48 bytes (0.0%)
+* 3 placeholders (symbols that start with **) account for 35830760.0 bytes (99.8%)
+* Contains 0 aliases
+* 0 symbols have shared ownership
+.bss@0(size_without_padding=262144,padding=0,name=ff_cos_131072,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={})
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_131072_fixed,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o,source_path=third_party/fft_fixed.cc,flags={})
+.bss@0(size_without_padding=131072,padding=0,name=ff_cos_65536,object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o,source_path=third_party/fft_float.cc,flags={})
+.bss@2dffda0(size_without_padding=28,padding=0,name=g_chrome_content_browser_client,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.bss@2dffe80(size_without_padding=4,padding=196,name=SaveHistogram::atomic_histogram_pointer,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.bss@2dffe84(size_without_padding=4,padding=0,name=g_AnimationFrameTimeHistogram_clazz,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={anon})
+.data@2de7000(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelCmpxchg,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.data@2de7004(size_without_padding=4,padding=0,name=google::protobuf::internal::pLinuxKernelMemoryBarrier,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.data@2de7008(size_without_padding=152,padding=0,name=base::android::kBaseRegisteredMethods,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={rel})
+.data@2de70a0(size_without_padding=4,padding=0,name=base::android::g_renderer_histogram_code,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon})
+.data@2de70a4(size_without_padding=4,padding=0,name=base::android::g_library_version_number,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon,rel.loc})
+.data@2dffd88(size_without_padding=0,padding=101600,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.data.rel.ro@2cd8500(size_without_padding=56,padding=0,name=ChromeMainDelegateAndroid [vtable],object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={})
+.data.rel.ro@2cd8538(size_without_padding=24,padding=0,name=mojo::MessageReceiver [vtable],object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.data.rel.ro@2cd8550(size_without_padding=12,padding=0,name=kMethodsAnimationFrameTimeHistogram,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.data.rel.ro@2ddc608(size_without_padding=0,padding=1065132,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.data.rel.ro.local@2c176f0(size_without_padding=56,padding=0,name=ChromeMainDelegate [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.data.rel.ro.local@2c17728(size_without_padding=24,padding=0,name=chrome::mojom::FieldTrialRecorder [vtable],object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.data.rel.ro.local@2c17740(size_without_padding=789904,padding=0,name=chrome::mojom::FieldTrialRecorderProxy [vtable],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.data.rel.ro.local@2cd84e0(size_without_padding=16,padding=16,name=.Lswitch.table.45,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o,source_path=,flags={})
+.data.rel.ro.local@2cd84f0(size_without_padding=8,padding=0,name=kSystemClassPrefixes,object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o,source_path=,flags={anon})
+.rodata@266e600(size_without_padding=1965409,padding=0,name=** merge strings,object_path=,source_path=,flags={})
+.rodata@284e364(size_without_padding=0,padding=3,name=** symbol gap 2,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.rodata@284e364(size_without_padding=8,padding=0,name=,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.rodata@284e370(size_without_padding=40,padding=4,name=Name,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.rodata@284e398(size_without_padding=32,padding=0,name=chrome::mojom::FilePatcher::Name_,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.rodata@284e518(size_without_padding=675633,padding=352,name=** merge strings,object_path=,source_path=,flags={})
+.rodata@28f3450(size_without_padding=48,padding=7,name=kAnimationFrameTimeHistogramClassPath,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon})
+.rodata@28f3480(size_without_padding=4,padding=0,name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={anon})
+.rodata@2c158e4(size_without_padding=0,padding=3286112,name=** symbol gap 3 (end of section),object_path=,source_path=,flags={})
+.text@28d900(size_without_padding=16,padding=0,name=_GLOBAL__sub_I_page_allocator.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup})
+.text@28d910(size_without_padding=56,padding=0,name=_GLOBAL__sub_I_bbr_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup})
+.text@28d948(size_without_padding=28,padding=0,name=_GLOBAL__sub_I_pacing_sender.cc,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={startup})
+.text@28d964(size_without_padding=38,padding=0,name=extFromUUseMapping,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.text@28d98a(size_without_padding=32,padding=0,name=extFromUUseMapping,object_path=base/base/page_allocator.o,source_path=base/page_allocator.cc,flags={})
+.text@28f000(size_without_padding=0,padding=5718,name=** symbol gap 0,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.text@28f000(size_without_padding=448,padding=0,name=ucnv_extMatchFromU,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={})
+.text@28f1c8(size_without_padding=20,padding=8,name=_GLOBAL__sub_I_SkDeviceProfile.cpp,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={startup})
+.text@28f1e0(size_without_padding=69120,padding=4,name=foo_bar,object_path=third_party/icu/icuuc/ucnv_ext.o,source_path=third_party/icu/ucnv_ext.c,flags={unlikely})
+.text@2a0000(size_without_padding=16,padding=32,name=blink::ContiguousContainerBase::shrinkToFit,object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={})
+.text@2a0010(size_without_padding=12,padding=0,name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2],object_path=third_party/WebKit.a/PaintChunker.o,source_path=third_party/paint.cc,flags={})
+.text@2a0020(size_without_padding=24,padding=4,name=blink::ContiguousContainerBase::ContiguousContainerBase,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.text@2a1000(size_without_padding=0,padding=4040,name=** symbol gap 1,object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={})
+.text@2a1000(size_without_padding=94,padding=0,name=blink::PaintChunker::releasePaintChunks [clone .part.1],object_path=third_party/WebKit.a/ContiguousContainer.o,source_path=third_party/container.c,flags={anon})
+.text@24ca628(size_without_padding=0,padding=35821002,name=** symbol gap 2 (end of section),object_path=,source_path=,flags={})
diff --git a/src/tools/binary_size/libsupersize/testdata/Console.golden b/src/tools/binary_size/libsupersize/testdata/Console.golden
index e5965c9..5385925 100644
--- a/src/tools/binary_size/libsupersize/testdata/Console.golden
+++ b/src/tools/binary_size/libsupersize/testdata/Console.golden
@@ -25,6 +25,13 @@
 Print(Diff(size_info1, size_info2), to_file="output.txt")
 
 Metadata:
+    elf_arch=ARM
+    elf_build_id=WhatAnAmazingBuildId
+    elf_file_name=elf
+    elf_mtime={redacted}
+    git_revision=abc123
+    gn_args=var1=true var2="foo"
+    map_file_name=../test.map
 
 Section Sizes (Total=43,785,380 bytes):
     .bss: 1,300,456 bytes (not included in totals)
@@ -34,83 +41,103 @@
     .rodata: 5,927,652 bytes (13.5%)
     .text: 35,900,712 bytes (82.0%)
 
-Showing 38 symbols with total size: 2652506 bytes
-.text=10.3kb     .rodata=2.52mb     other=388 bytes  total=2.53mb
+Showing 48 symbols (45 unique) with total pss: 44309900 bytes
+.text=34.2mb     .rodata=5.65mb     other=2.37mb     total=42.3mb
 Number of object files: 10
 
-First columns are: running total, type, size
- 2641394 r@Group      2641394 {no path}
-             ** merge strings (count=2)
- 2651152 t@Group      9758    {no path}
-             ** symbol gaps (count=2)
- 2651600 t@0x28f000   448     third_party/icu/ucnv_ext.c
-             ucnv_extMatchFromU
- 2651752 d@0x2de7008  152     third_party/container.c
-             base::android::kBaseRegisteredMethods
- 2651846 t@0x2a1000   94      third_party/container.c
-             blink::PaintChunker::releasePaintChunks [clone .part.1]
- 2651902 d@0x2c176f0  56      third_party/icu/ucnv_ext.c
-             ChromeMainDelegate [vtable]
- 2651958 d@0x2cd8500  56      third_party/paint.cc
-             ChromeMainDelegateAndroid [vtable]
- 2652014 t@0x28d910   56      base/page_allocator.cc
-             _GLOBAL__sub_I_bbr_sender.cc
- 2652069 r@0x28f3450  55      third_party/paint.cc
-             kAnimationFrameTimeHistogramClassPath
- 2652113 r@0x284e370  44      base/page_allocator.cc
-             Name
- 2652151 t@0x28d964   38      base/page_allocator.cc
-             extFromUUseMapping
- 2652183 r@0x284e398  32      third_party/container.c
-             chrome::mojom::FilePatcher::Name_
- 2652215 t@0x28d98a   32      base/page_allocator.cc
-             extFromUUseMapping
- 2652243 t@0x28f1c8   28      third_party/icu/ucnv_ext.c
-             _GLOBAL__sub_I_SkDeviceProfile.cpp
- 2652271 t@0x28d948   28      base/page_allocator.cc
-             _GLOBAL__sub_I_pacing_sender.cc
- 2652299 t@0x2a0020   28      third_party/container.c
-             blink::ContiguousContainerBase::ContiguousContainerBase
- 2652323 d@0x2c17740  24      third_party/container.c
+First columns are: running total, address, pss
+35821002 t@0x24ca628  35821002 {no path}
+             ** symbol gap 2 (end of section)
+39107114 r@0x2c158e4  3286112 {no path}
+             ** symbol gap 3 (end of section)
+41072523 r@0x266e600  1965409 {no path}
+             ** merge strings
+42137655 d@0x2ddc608  1065132 {no path}
+             ** symbol gap 3 (end of section)
+42927559 d@0x2c17740  789904  third_party/container.c
              chrome::mojom::FieldTrialRecorderProxy [vtable]
- 2652347 d@0x2c17728  24      third_party/icu/ucnv_ext.c
-             chrome::mojom::FieldTrialRecorderRequestValidator [vtable]
- 2652371 t@0x28f1e0   24      third_party/icu/ucnv_ext.c
+43603544 r@0x284e518  675985  {no path}
+             ** merge strings
+43705144 d@0x2dffd88  101600  {no path}
+             ** symbol gap 3 (end of section)
+43774268 t@0x28f1e0   69124   third_party/icu/ucnv_ext.c
              foo_bar
- 2652395 d@0x2cd8538  24      base/page_allocator.cc
-             mojo::MessageReceiver [vtable]
- 2652411 d@0x2cd84e0  16      third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
-             .Lswitch.table.45
- 2652427 t@0x28d900   16      base/page_allocator.cc
-             _GLOBAL__sub_I_page_allocator.cc
- 2652443 t@0x2a0000   16      third_party/paint.cc
+43779986 t@0x28f000   5718    third_party/icu/ucnv_ext.c
+             ** symbol gap 0
+43784026 t@0x2a1000   4040    third_party/container.c
+             ** symbol gap 1
+43784474 t@0x28f000   448     third_party/icu/ucnv_ext.c
+             ucnv_extMatchFromU
+43784626 d@0x2de7008  152     third_party/container.c
+             base::android::kBaseRegisteredMethods
+43784720 t@0x2a1000   94      third_party/container.c
+             blink::PaintChunker::releasePaintChunks [clone .part.1]
+43784776 d@0x2c176f0  56      third_party/icu/ucnv_ext.c
+             ChromeMainDelegate [vtable]
+43784832 d@0x2cd8500  56      third_party/paint.cc
+             ChromeMainDelegateAndroid [vtable]
+43784888 t@0x28d910   56      base/page_allocator.cc
+             _GLOBAL__sub_I_bbr_sender.cc
+43784943 r@0x28f3450  55      third_party/paint.cc
+             kAnimationFrameTimeHistogramClassPath
+43784967 t@0x2a0000   24      third_party/icu/ucnv_ext.c
+             BazAlias
+43784991 t@0x2a0000   24      {no path}
              blink::ContiguousContainerBase::shrinkToFit
- 2652455 t@0x2a0010   12      third_party/paint.cc
+43785035 r@0x284e370  44      base/page_allocator.cc
+             Name
+43785073 t@0x28d964   38      base/page_allocator.cc
+             extFromUUseMapping
+43785105 d@0x2cd84e0  32      third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
+             .Lswitch.table.45
+43785137 r@0x284e398  32      third_party/container.c
+             chrome::mojom::FilePatcher::Name_
+43785169 t@0x28d98a   32      base/page_allocator.cc
+             extFromUUseMapping
+43785197 t@0x28f1c8   28      third_party/icu/ucnv_ext.c
+             _GLOBAL__sub_I_SkDeviceProfile.cpp
+43785225 t@0x28d948   28      base/page_allocator.cc
+             _GLOBAL__sub_I_pacing_sender.cc
+43785253 t@0x2a0020   28      third_party/container.c
+             blink::ContiguousContainerBase::ContiguousContainerBase
+43785277 d@0x2c17728  24      third_party/icu/ucnv_ext.c
+             chrome::mojom::FieldTrialRecorder [vtable]
+43785301 d@0x2cd8538  24      base/page_allocator.cc
+             mojo::MessageReceiver [vtable]
+43785317 t@0x28d900   16      base/page_allocator.cc
+             _GLOBAL__sub_I_page_allocator.cc
+43785321 t@0x2a0010   4       third_party/fft_float.cc
+             BarAlias
+43785325 t@0x2a0010   4       third_party/fft_float.cc
+             FooAlias
+43785329 t@0x2a0010   4       third_party/{shared}/2
              blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2]
- 2652467 d@0x2cd8550  12      base/page_allocator.cc
+43785341 d@0x2cd8550  12      base/page_allocator.cc
              kMethodsAnimationFrameTimeHistogram
- 2652478 r@0x284e364  11      base/page_allocator.cc
- 2652486 d@0x2cd84f0  8       third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
+43785349 r@0x284e364  8       base/page_allocator.cc
+43785357 d@0x2cd84f0  8       third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
              kSystemClassPrefixes
- 2652490 d@0x2de70a4  4       third_party/container.c
+43785361 d@0x2de70a4  4       third_party/container.c
              base::android::g_library_version_number
- 2652494 d@0x2de70a0  4       third_party/container.c
+43785365 d@0x2de70a0  4       third_party/container.c
              base::android::g_renderer_histogram_code
- 2652498 r@0x28f3480  4       third_party/paint.cc
+43785369 r@0x28f3480  4       third_party/paint.cc
              blink::CSSValueKeywordsHash::findValueImpl::value_word_list
- 2652502 d@0x2de7000  4       base/page_allocator.cc
+43785373 d@0x2de7000  4       base/page_allocator.cc
              google::protobuf::internal::pLinuxKernelCmpxchg
- 2652506 d@0x2de7004  4       third_party/container.c
+43785377 d@0x2de7004  4       third_party/container.c
              google::protobuf::internal::pLinuxKernelMemoryBarrier
- 2652506 b@0x0        262144  third_party/fft_float.cc
+43785380 r@0x284e364  3       base/page_allocator.cc
+             ** symbol gap 2
+43785380 b@0x0        262144  third_party/fft_float.cc
              ff_cos_131072
- 2652506 b@0x0        131072  third_party/fft_fixed.cc
+43785380 b@0x0        131072  third_party/fft_fixed.cc
              ff_cos_131072_fixed
- 2652506 b@0x0        131072  third_party/fft_float.cc
+43785380 b@0x0        131072  third_party/fft_float.cc
              ff_cos_65536
- 2652506 b@0x2dffe80  200     third_party/icu/ucnv_ext.c
+43785380 b@0x2dffe80  200     third_party/icu/ucnv_ext.c
              SaveHistogram::atomic_histogram_pointer
- 2652506 b@0x2dffda0  28      third_party/icu/ucnv_ext.c
+43785380 b@0x2dffda0  28      third_party/icu/ucnv_ext.c
              g_chrome_content_browser_client
- 2652506 b@0x2dffe84  4       third_party/icu/ucnv_ext.c
+43785380 b@0x2dffe84  4       third_party/icu/ucnv_ext.c
              g_AnimationFrameTimeHistogram_clazz
diff --git a/src/tools/binary_size/libsupersize/testdata/ActualDiff.golden b/src/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
similarity index 70%
rename from src/tools/binary_size/libsupersize/testdata/ActualDiff.golden
rename to src/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
index c3c0d6a..0b4af48 100644
--- a/src/tools/binary_size/libsupersize/testdata/ActualDiff.golden
+++ b/src/tools/binary_size/libsupersize/testdata/Diff_Basic.golden
@@ -18,17 +18,6 @@
     .ARM.attributes: 0 bytes
     .ARM.exidx: 0 bytes
     .ARM.extab: 0 bytes
-    .comment: 0 bytes
-    .debug_abbrev: 0 bytes
-    .debug_aranges: 0 bytes
-    .debug_frame: 0 bytes
-    .debug_info: 0 bytes
-    .debug_line: 0 bytes
-    .debug_loc: 0 bytes
-    .debug_pubnames: 0 bytes
-    .debug_pubtypes: 0 bytes
-    .debug_ranges: 0 bytes
-    .debug_str: 0 bytes
     .dynamic: 0 bytes
     .dynstr: 0 bytes
     .dynsym: 0 bytes
@@ -49,135 +38,142 @@
     .strtab: 0 bytes
     .symtab: 0 bytes
 
-2 symbols added (+), 1 changed (~), 3 removed (-), 32 unchanged (=)
-1 object files added, 0 removed
-Added files:
-  third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o
+2 symbols added (+), 1 changed (~), 3 removed (-), 35 unchanged (=)
+0 object files added, 0 removed
 
-Showing 38 symbols with total size: 10 bytes
-.text=10 bytes   .rodata=0 bytes    other=0 bytes    total=10 bytes
-Number of object files: 10
+Showing 41 symbols (41 unique) with total pss: 46 bytes
+.text=82 bytes   .rodata=0 bytes    other=-36 bytes  total=46 bytes
+Number of object files: 9
 
-First columns are: running total, type, size
-~       10 t@0x28d900   size=10  padding=0  size_without_padding=10
-               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
-               flags={startup}  name=_GLOBAL__sub_I_page_allocator.cc
-=       10 r@0x284e364  size=0  padding=0  size_without_padding=0
-               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
-=       10 r@Group      size=0  padding=0  size_without_padding=0  count=2
-               source_path= 	object_path=
-               flags={}  name=** merge strings
-=       10 t@Group      size=0  padding=0  size_without_padding=0  count=2
-               source_path=None 	object_path=None
-               flags={}  name=** symbol gaps
-=       10 d@0x2cd84e0  size=0  padding=0  size_without_padding=0
-               source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
-               flags={}  name=.Lswitch.table.45
-=       10 d@0x2c176f0  size=0  padding=0  size_without_padding=0
-               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
-               flags={}  name=ChromeMainDelegate [vtable]
-=       10 d@0x2cd8500  size=0  padding=0  size_without_padding=0
-               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
-               flags={}  name=ChromeMainDelegateAndroid [vtable]
-=       10 r@0x284e370  size=0  padding=0  size_without_padding=0
-               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
-               flags={}  name=Name
-=       10 t@0x28f1c8   size=0  padding=0  size_without_padding=0
-               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
-               flags={startup}  name=_GLOBAL__sub_I_SkDeviceProfile.cpp
-=       10 t@0x28d910   size=0  padding=0  size_without_padding=0
+First columns are: running total, address, pss
++       56 t@0x28d910   pss=56  padding=0  size_without_padding=56
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
                flags={startup}  name=_GLOBAL__sub_I_bbr_sender.cc
-=       10 t@0x28d948   size=0  padding=0  size_without_padding=0
++       72 t@0x28d900   pss=16  padding=0  size_without_padding=16
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
-               flags={startup}  name=_GLOBAL__sub_I_pacing_sender.cc
-=       10 d@0x2de70a4  size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={anon,rel.loc}  name=base::android::g_library_version_number
-=       10 d@0x2de70a0  size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={anon}  name=base::android::g_renderer_histogram_code
-=       10 d@0x2de7008  size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={rel}  name=base::android::kBaseRegisteredMethods
-=       10 r@0x28f3480  size=0  padding=0  size_without_padding=0
-               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
-               flags={anon}  name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list
-                          full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list
-=       10 t@0x2a0020   size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={}  name=blink::ContiguousContainerBase::ContiguousContainerBase
-                          full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&)
-=       10 t@0x2a0000   size=0  padding=0  size_without_padding=0
-               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
-               flags={}  name=blink::ContiguousContainerBase::shrinkToFit
-                          full_name=blink::ContiguousContainerBase::shrinkToFit()
-=       10 t@0x2a0010   size=0  padding=0  size_without_padding=0
-               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
-               flags={}  name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2]
-                          full_name=blink::ContiguousContainerBase::shrinkToFit() [clone .part.1234] [clone .isra.2]
-=       10 t@0x2a1000   size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={anon}  name=blink::PaintChunker::releasePaintChunks [clone .part.1]
-                          full_name=blink::PaintChunker::releasePaintChunks() [clone .part.1]
-=       10 d@0x2c17740  size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={}  name=chrome::mojom::FieldTrialRecorderProxy [vtable]
-=       10 d@0x2c17728  size=0  padding=0  size_without_padding=0
-               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
-               flags={}  name=chrome::mojom::FieldTrialRecorderRequestValidator [vtable]
-=       10 r@0x284e398  size=0  padding=0  size_without_padding=0
-               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
-               flags={}  name=chrome::mojom::FilePatcher::Name_
-=       10 t@0x28d964   size=0  padding=0  size_without_padding=0
+               flags={startup}  name=_GLOBAL__sub_I_page_allocator.cc
+~       82 t@0x28d964   pss=10  padding=0  size_without_padding=10
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
                flags={}  name=extFromUUseMapping
                           full_name=extFromUUseMapping(signed char, unsigned int, int)
-=       10 t@0x28d98a   size=0  padding=0  size_without_padding=0
+=       82 r@0x284e364  pss=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+=       82 r@Group      pss=0  padding=0  size_without_padding=0  count=2
+               source_path= 	object_path=
+               flags={}  name=** merge strings
+=       82 d@0x2ddc608  pss=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               flags={}  name=** symbol gap 3 (end of section)
+=       82 d@0x2dffd88  pss=0  padding=0  size_without_padding=0
+               source_path= 	object_path=
+               flags={}  name=** symbol gap 3 (end of section)
+=       82 t@Group      pss=0  padding=0  size_without_padding=0  count=3
+               source_path= 	object_path=
+               flags={}  name=** symbol gaps
+=       82 r@Group      pss=0  padding=0  size_without_padding=0  count=2
+               source_path= 	object_path=
+               flags={}  name=** symbol gaps
+=       82 d@0x2cd84e0  pss=0  padding=0  size_without_padding=0
+               source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
+               flags={}  name=.Lswitch.table.45
+=       82 d@0x2c176f0  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               flags={}  name=ChromeMainDelegate [vtable]
+=       82 d@0x2cd8500  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               flags={}  name=ChromeMainDelegateAndroid [vtable]
+=       82 r@0x284e370  pss=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               flags={}  name=Name
+=       82 t@0x28f1c8   pss=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               flags={startup}  name=_GLOBAL__sub_I_SkDeviceProfile.cpp
+=       82 t@0x28d948   pss=0  padding=0  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               flags={startup}  name=_GLOBAL__sub_I_pacing_sender.cc
+=       82 d@0x2de70a4  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={anon,rel.loc}  name=base::android::g_library_version_number
+=       82 d@0x2de70a0  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={anon}  name=base::android::g_renderer_histogram_code
+=       82 d@0x2de7008  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={rel}  name=base::android::kBaseRegisteredMethods
+=       82 r@0x28f3480  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               flags={anon}  name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list
+                          full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list
+=       82 t@0x2a0020   pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={}  name=blink::ContiguousContainerBase::ContiguousContainerBase
+                          full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&)
+=       82 t@0x2a0000   pss=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               flags={}  name=blink::ContiguousContainerBase::shrinkToFit
+                          full_name=blink::ContiguousContainerBase::shrinkToFit()
+=       82 t@0x2a0010   pss=0  padding=0  size_without_padding=0
+               source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+               flags={}  name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2]
+                          full_name=blink::ContiguousContainerBase::shrinkToFit() [clone .part.1234] [clone .isra.2]
+=       82 t@0x2a1000   pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={anon}  name=blink::PaintChunker::releasePaintChunks [clone .part.1]
+                          full_name=blink::PaintChunker::releasePaintChunks() [clone .part.1]
+=       82 d@0x2c17728  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               flags={}  name=chrome::mojom::FieldTrialRecorder [vtable]
+=       82 d@0x2c17740  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={}  name=chrome::mojom::FieldTrialRecorderProxy [vtable]
+=       82 r@0x284e398  pss=0  padding=0  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={}  name=chrome::mojom::FilePatcher::Name_
+=       82 t@0x28d98a   pss=0  padding=0  size_without_padding=0
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
                flags={}  name=extFromUUseMapping
                           full_name=extFromUUseMapping(aj, int)
-=       10 t@0x28f1e0   size=0  padding=0  size_without_padding=0
+=       82 t@0x28f1e0   pss=0  padding=0  size_without_padding=0
                source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
                flags={unlikely}  name=foo_bar
-=       10 d@0x2de7000  size=0  padding=0  size_without_padding=0
+=       82 d@0x2de7000  pss=0  padding=0  size_without_padding=0
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
                flags={}  name=google::protobuf::internal::pLinuxKernelCmpxchg
-=       10 d@0x2de7004  size=0  padding=0  size_without_padding=0
+=       82 d@0x2de7004  pss=0  padding=0  size_without_padding=0
                source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
                flags={}  name=google::protobuf::internal::pLinuxKernelMemoryBarrier
-=       10 r@0x28f3450  size=0  padding=0  size_without_padding=0
+=       82 r@0x28f3450  pss=0  padding=0  size_without_padding=0
                source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
                flags={anon}  name=kAnimationFrameTimeHistogramClassPath
-=       10 d@0x2cd8550  size=0  padding=0  size_without_padding=0
+=       82 d@0x2cd8550  pss=0  padding=0  size_without_padding=0
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
                flags={}  name=kMethodsAnimationFrameTimeHistogram
-=       10 d@0x2cd84f0  size=0  padding=0  size_without_padding=0
+=       82 d@0x2cd84f0  pss=0  padding=0  size_without_padding=0
                source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
                flags={anon}  name=kSystemClassPrefixes
-=       10 d@0x2cd8538  size=0  padding=0  size_without_padding=0
+=       82 d@0x2cd8538  pss=0  padding=0  size_without_padding=0
                source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
                flags={}  name=mojo::MessageReceiver [vtable]
-=       10 t@0x28f000   size=0  padding=0  size_without_padding=0
+=       82 t@0x28f000   pss=0  padding=0  size_without_padding=0
                source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
                flags={}  name=ucnv_extMatchFromU
                           full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char)
-+       10 b@0x0        size=262144  padding=0  size_without_padding=262144
-               source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
-               flags={}  name=ff_cos_131072
-+       10 b@0x0        size=131072  padding=0  size_without_padding=131072
-               source_path=third_party/fft_fixed.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o
-               flags={}  name=ff_cos_131072_fixed
--       10 b@0x2dffe80  size=-200  padding=-196  size_without_padding=-4
+-       82 b@0x2dffda0  pss=-28  padding=0  size_without_padding=-28
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               flags={}  name=g_chrome_content_browser_client
+-       82 b@0x2dffe80  pss=-4  padding=-196  size_without_padding=192
                source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
                flags={}  name=SaveHistogram::atomic_histogram_pointer
                           full_name=SaveHistogram(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jlongArray*> const&, int)::atomic_histogram_pointer
--       10 b@0x2dffda0  size=-28  padding=0  size_without_padding=-28
-               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
-               flags={}  name=g_chrome_content_browser_client
--       10 b@0x2dffe84  size=-4  padding=0  size_without_padding=-4
+-       82 b@0x2dffe84  pss=-4  padding=0  size_without_padding=-4
                source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
                flags={anon}  name=g_AnimationFrameTimeHistogram_clazz
-=       10 b@0x0        size=0  padding=0  size_without_padding=0
+=       82 b@0x0        pss=0  padding=0  size_without_padding=0
+               source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+               flags={}  name=ff_cos_131072
+=       82 b@0x0        pss=0  padding=0  size_without_padding=0
+               source_path=third_party/fft_fixed.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o
+               flags={}  name=ff_cos_131072_fixed
+=       82 b@0x0        pss=0  padding=0  size_without_padding=0
                source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
                flags={}  name=ff_cos_65536
diff --git a/src/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden b/src/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
index 4e42042..2eb8bf1 100644
--- a/src/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
+++ b/src/tools/binary_size/libsupersize/testdata/Diff_NullDiff.golden
@@ -1,4 +1,11 @@
 Common Metadata:
+    elf_arch=ARM
+    elf_build_id=WhatAnAmazingBuildId
+    elf_file_name=elf
+    elf_mtime={redacted}
+    git_revision=abc123
+    gn_args=var1=true var2="foo"
+    map_file_name=../test.map
 Old Metadata:
 New Metadata:
 
@@ -10,11 +17,11 @@
     .rodata: 0 bytes (0.0%)
     .text: 0 bytes (0.0%)
 
-0 symbols added (+), 0 changed (~), 0 removed (-), 38 unchanged (not shown)
+0 symbols added (+), 0 changed (~), 0 removed (-), 44 unchanged (not shown)
 0 object files added, 0 removed
 
-Showing 0 symbols with total size: 0 bytes
+Showing 0 symbols (0 unique) with total pss: 0 bytes
 .text=0 bytes    .rodata=0 bytes    other=0 bytes    total=0 bytes
 Number of object files: 0
 
-First columns are: running total, type, size
+First columns are: running total, address, pss
diff --git a/src/tools/binary_size/libsupersize/testdata/FullDescription.golden b/src/tools/binary_size/libsupersize/testdata/FullDescription.golden
index b2f2cbc..33ae963 100644
--- a/src/tools/binary_size/libsupersize/testdata/FullDescription.golden
+++ b/src/tools/binary_size/libsupersize/testdata/FullDescription.golden
@@ -1,4 +1,11 @@
 Metadata:
+    elf_arch=ARM
+    elf_build_id=WhatAnAmazingBuildId
+    elf_file_name=elf
+    elf_mtime={redacted}
+    git_revision=abc123
+    gn_args=var1=true var2="foo"
+    map_file_name=../test.map
 
 Section Sizes (Total=43,785,380 bytes):
     .bss: 1,300,456 bytes (not included in totals)
@@ -8,83 +15,213 @@
     .rodata: 5,927,652 bytes (13.5%)
     .text: 35,900,712 bytes (82.0%)
 
-Showing 38 symbols with total size: 2652506 bytes
-.text=10.3kb     .rodata=2.52mb     other=388 bytes  total=2.53mb
+Other section sizes:
+    .ARM.attributes: 60 bytes
+    .ARM.exidx: 1,536,456 bytes
+    .ARM.extab: 183,632 bytes
+    .dynamic: 304 bytes
+    .dynstr: 4,025 bytes
+    .dynsym: 6,496 bytes
+    .fini_array: 8 bytes
+    .gnu.version: 812 bytes
+    .gnu.version_d: 28 bytes
+    .gnu.version_r: 96 bytes
+    .got: 42,956 bytes
+    .hash: 2,684 bytes
+    .init_array: 8 bytes
+    .interp: 19 bytes
+    .note.gnu.build-id: 36 bytes
+    .note.gnu.gold-version: 28 bytes
+    .plt: 4,244 bytes
+    .rel.dyn: 2,655,384 bytes
+    .rel.plt: 2,816 bytes
+    .shstrtab: 436 bytes
+    .strtab: 34,841,854 bytes
+    .symtab: 17,166,112 bytes
+
+Section r: has 100.0% of 5927652 bytes accounted for from 7 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 11 bytes (0.0%)
+* 2 placeholders (symbols that start with **) account for 5927509.0 bytes (100.0%)
+* 0 symbols have shared ownership
+Section b: has 40.3% of 524520 bytes accounted for from 6 symbols. 775936 bytes are unaccounted for.
+* Padding accounts for 196 bytes (0.0%)
+* 0 symbols have shared ownership
+Section d: has 100.0% of 1957016 bytes accounted for from 15 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 16 bytes (0.0%)
+* 2 placeholders (symbols that start with **) account for 1166732.0 bytes (59.6%)
+* 0 symbols have shared ownership
+Section t: has 100.0% of 35900712 bytes accounted for from 16 symbols. 0 bytes are unaccounted for.
+* Padding accounts for 48 bytes (0.0%)
+* 1 placeholders (symbols that start with **) account for 35830760.0 bytes (99.8%)
+* Contains 5 aliases, mapped to 2 unique addresses (60 bytes)
+* 1 symbols have shared ownership (12 bytes)
+
+Showing 44 symbols (41 unique) with total pss: 44309900 bytes
+.text=34.2mb     .rodata=5.65mb     other=2.37mb     total=42.3mb
 Number of object files: 10
 
-First columns are: running total, type, size
- 2641394 r@Group      2641394 {no path}
-             ** merge strings (count=2)
- 2651152 t@Group      9758    {no path}
-             ** symbol gaps (count=2)
- 2651600 t@0x28f000   448     third_party/icu/ucnv_ext.c
-             ucnv_extMatchFromU
- 2651752 d@0x2de7008  152     third_party/container.c
-             base::android::kBaseRegisteredMethods
- 2651846 t@0x2a1000   94      third_party/container.c
-             blink::PaintChunker::releasePaintChunks [clone .part.1]
- 2651902 d@0x2c176f0  56      third_party/icu/ucnv_ext.c
-             ChromeMainDelegate [vtable]
- 2651958 d@0x2cd8500  56      third_party/paint.cc
-             ChromeMainDelegateAndroid [vtable]
- 2652014 t@0x28d910   56      base/page_allocator.cc
-             _GLOBAL__sub_I_bbr_sender.cc
- 2652069 r@0x28f3450  55      third_party/paint.cc
-             kAnimationFrameTimeHistogramClassPath
- 2652113 r@0x284e370  44      base/page_allocator.cc
-             Name
- 2652151 t@0x28d964   38      base/page_allocator.cc
-             extFromUUseMapping
- 2652183 r@0x284e398  32      third_party/container.c
-             chrome::mojom::FilePatcher::Name_
- 2652215 t@0x28d98a   32      base/page_allocator.cc
-             extFromUUseMapping
- 2652243 t@0x28f1c8   28      third_party/icu/ucnv_ext.c
-             _GLOBAL__sub_I_SkDeviceProfile.cpp
- 2652271 t@0x28d948   28      base/page_allocator.cc
-             _GLOBAL__sub_I_pacing_sender.cc
- 2652299 t@0x2a0020   28      third_party/container.c
-             blink::ContiguousContainerBase::ContiguousContainerBase
- 2652323 d@0x2c17740  24      third_party/container.c
-             chrome::mojom::FieldTrialRecorderProxy [vtable]
- 2652347 d@0x2c17728  24      third_party/icu/ucnv_ext.c
-             chrome::mojom::FieldTrialRecorderRequestValidator [vtable]
- 2652371 t@0x28f1e0   24      third_party/icu/ucnv_ext.c
-             foo_bar
- 2652395 d@0x2cd8538  24      base/page_allocator.cc
-             mojo::MessageReceiver [vtable]
- 2652411 d@0x2cd84e0  16      third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
-             .Lswitch.table.45
- 2652427 t@0x28d900   16      base/page_allocator.cc
-             _GLOBAL__sub_I_page_allocator.cc
- 2652443 t@0x2a0000   16      third_party/paint.cc
-             blink::ContiguousContainerBase::shrinkToFit
- 2652455 t@0x2a0010   12      third_party/paint.cc
-             blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2]
- 2652467 d@0x2cd8550  12      base/page_allocator.cc
-             kMethodsAnimationFrameTimeHistogram
- 2652478 r@0x284e364  11      base/page_allocator.cc
- 2652486 d@0x2cd84f0  8       third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
-             kSystemClassPrefixes
- 2652490 d@0x2de70a4  4       third_party/container.c
-             base::android::g_library_version_number
- 2652494 d@0x2de70a0  4       third_party/container.c
-             base::android::g_renderer_histogram_code
- 2652498 r@0x28f3480  4       third_party/paint.cc
-             blink::CSSValueKeywordsHash::findValueImpl::value_word_list
- 2652502 d@0x2de7000  4       base/page_allocator.cc
-             google::protobuf::internal::pLinuxKernelCmpxchg
- 2652506 d@0x2de7004  4       third_party/container.c
-             google::protobuf::internal::pLinuxKernelMemoryBarrier
- 2652506 b@0x0        262144  third_party/fft_float.cc
-             ff_cos_131072
- 2652506 b@0x0        131072  third_party/fft_fixed.cc
-             ff_cos_131072_fixed
- 2652506 b@0x0        131072  third_party/fft_float.cc
-             ff_cos_65536
- 2652506 b@0x2dffe80  200     third_party/icu/ucnv_ext.c
-             SaveHistogram::atomic_histogram_pointer
- 2652506 b@0x2dffda0  28      third_party/icu/ucnv_ext.c
-             g_chrome_content_browser_client
- 2652506 b@0x2dffe84  4       third_party/icu/ucnv_ext.c
-             g_AnimationFrameTimeHistogram_clazz
+First columns are: running total, address, pss
+35830760 t@Group      pss=35830760  padding=35830760  size_without_padding=0  count=3
+             source_path= 	object_path=
+             flags={}  name=** symbol gaps
+> 35821002 t@0x24ca628  pss=35821002  padding=35821002  size_without_padding=0
+               source_path= 	object_path=
+               flags={}  name=** symbol gap 2 (end of section)
+> 35826720 t@0x28f000   pss=5718  padding=5718  size_without_padding=0
+               source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+               flags={}  name=** symbol gap 0
+> 35830760 t@0x2a1000   pss=4040  padding=4040  size_without_padding=0
+               source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+               flags={}  name=** symbol gap 1
+39116875 r@Group      pss=3286115  padding=3286115  size_without_padding=0  count=2
+             source_path= 	object_path=
+             flags={}  name=** symbol gaps
+>  3286112 r@0x2c158e4  pss=3286112  padding=3286112  size_without_padding=0
+               source_path= 	object_path=
+               flags={}  name=** symbol gap 3 (end of section)
+>  3286115 r@0x284e364  pss=3  padding=3  size_without_padding=0
+               source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+               flags={}  name=** symbol gap 2
+41758269 r@Group      pss=2641394  padding=352  size_without_padding=2641042  count=2
+             source_path= 	object_path=
+             flags={}  name=** merge strings
+>  1965409 r@0x266e600  pss=1965409  padding=0  size_without_padding=1965409
+               source_path= 	object_path=
+               flags={}  name=** merge strings
+>  2641394 r@0x284e518  pss=675985  padding=352  size_without_padding=675633
+               source_path= 	object_path=
+               flags={}  name=** merge strings
+42823401 d@0x2ddc608  pss=1065132  padding=1065132  size_without_padding=0
+             source_path= 	object_path=
+             flags={}  name=** symbol gap 3 (end of section)
+43613305 d@0x2c17740  pss=789904  padding=0  size_without_padding=789904
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={}  name=chrome::mojom::FieldTrialRecorderProxy [vtable]
+43714905 d@0x2dffd88  pss=101600  padding=101600  size_without_padding=0
+             source_path= 	object_path=
+             flags={}  name=** symbol gap 3 (end of section)
+43784029 t@0x28f1e0   pss=69124  padding=4  size_without_padding=69120
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={unlikely}  name=foo_bar
+43784477 t@0x28f000   pss=448  padding=0  size_without_padding=448
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={}  name=ucnv_extMatchFromU
+                        full_name=ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsigned short const*, int, unsigned int*, signed char, signed char)
+43784629 d@0x2de7008  pss=152  padding=0  size_without_padding=152
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={rel}  name=base::android::kBaseRegisteredMethods
+43784723 t@0x2a1000   pss=94  padding=0  size_without_padding=94
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={anon}  name=blink::PaintChunker::releasePaintChunks [clone .part.1]
+                        full_name=blink::PaintChunker::releasePaintChunks() [clone .part.1]
+43784779 d@0x2c176f0  pss=56  padding=0  size_without_padding=56
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={}  name=ChromeMainDelegate [vtable]
+43784835 d@0x2cd8500  pss=56  padding=0  size_without_padding=56
+             source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+             flags={}  name=ChromeMainDelegateAndroid [vtable]
+43784891 t@0x28d910   pss=56  padding=0  size_without_padding=56
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={startup}  name=_GLOBAL__sub_I_bbr_sender.cc
+43784946 r@0x28f3450  pss=55  padding=7  size_without_padding=48
+             source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+             flags={anon}  name=kAnimationFrameTimeHistogramClassPath
+43784970 t@0x2a0000   pss=24  padding=32  size_without_padding=16
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={2 aliases}  name=BazAlias
+                        full_name=BazAlias(bool)
+43784994 t@0x2a0000   pss=24  padding=32  size_without_padding=16
+             source_path= 	object_path=
+             flags={2 aliases}  name=blink::ContiguousContainerBase::shrinkToFit
+                        full_name=blink::ContiguousContainerBase::shrinkToFit()
+43785038 r@0x284e370  pss=44  padding=4  size_without_padding=40
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={}  name=Name
+43785076 t@0x28d964   pss=38  padding=0  size_without_padding=38
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={}  name=extFromUUseMapping
+                        full_name=extFromUUseMapping(signed char, unsigned int, int)
+43785108 d@0x2cd84e0  pss=32  padding=16  size_without_padding=16
+             source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libcontroller_api_impl.a_controller_api_impl.o
+             flags={}  name=.Lswitch.table.45
+43785140 r@0x284e398  pss=32  padding=0  size_without_padding=32
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={}  name=chrome::mojom::FilePatcher::Name_
+43785172 t@0x28d98a   pss=32  padding=0  size_without_padding=32
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={}  name=extFromUUseMapping
+                        full_name=extFromUUseMapping(aj, int)
+43785200 t@0x28f1c8   pss=28  padding=8  size_without_padding=20
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={startup}  name=_GLOBAL__sub_I_SkDeviceProfile.cpp
+43785228 t@0x28d948   pss=28  padding=0  size_without_padding=28
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={startup}  name=_GLOBAL__sub_I_pacing_sender.cc
+43785256 t@0x2a0020   pss=28  padding=4  size_without_padding=24
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={}  name=blink::ContiguousContainerBase::ContiguousContainerBase
+                        full_name=blink::ContiguousContainerBase::ContiguousContainerBase(blink::ContiguousContainerBase&&)
+43785280 d@0x2c17728  pss=24  padding=0  size_without_padding=24
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={}  name=chrome::mojom::FieldTrialRecorder [vtable]
+43785304 d@0x2cd8538  pss=24  padding=0  size_without_padding=24
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={}  name=mojo::MessageReceiver [vtable]
+43785320 t@0x28d900   pss=16  padding=0  size_without_padding=16
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={startup}  name=_GLOBAL__sub_I_page_allocator.cc
+43785324 t@0x2a0010   pss=4  padding=0  size_without_padding=12
+             source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+             flags={3 aliases}  name=BarAlias
+                        full_name=BarAlias()
+43785328 t@0x2a0010   pss=4  padding=0  size_without_padding=12
+             source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+             flags={3 aliases}  name=FooAlias
+                        full_name=FooAlias()
+43785332 t@0x2a0010   pss=4  padding=0  size_without_padding=12
+             source_path=third_party/{shared}/2 	object_path=third_party/{shared}/2
+             flags={3 aliases}  name=blink::ContiguousContainerBase::shrinkToFit [clone .part.1234] [clone .isra.2]
+                        full_name=blink::ContiguousContainerBase::shrinkToFit() [clone .part.1234] [clone .isra.2]
+43785344 d@0x2cd8550  pss=12  padding=0  size_without_padding=12
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={}  name=kMethodsAnimationFrameTimeHistogram
+43785352 r@0x284e364  pss=8  padding=0  size_without_padding=8
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+43785360 d@0x2cd84f0  pss=8  padding=0  size_without_padding=8
+             source_path= 	object_path=third_party/gvr-android-sdk/libgvr_shim_static_arm.a/libport_android_jni.a_jni_utils.o
+             flags={anon}  name=kSystemClassPrefixes
+43785364 d@0x2de70a4  pss=4  padding=0  size_without_padding=4
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={anon,rel.loc}  name=base::android::g_library_version_number
+43785368 d@0x2de70a0  pss=4  padding=0  size_without_padding=4
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={anon}  name=base::android::g_renderer_histogram_code
+43785372 r@0x28f3480  pss=4  padding=0  size_without_padding=4
+             source_path=third_party/paint.cc 	object_path=third_party/WebKit.a/PaintChunker.o
+             flags={anon}  name=blink::CSSValueKeywordsHash::findValueImpl::value_word_list
+                        full_name=blink::CSSValueKeywordsHash::findValueImpl(char const*, unsigned int)::value_word_list
+43785376 d@0x2de7000  pss=4  padding=0  size_without_padding=4
+             source_path=base/page_allocator.cc 	object_path=base/base/page_allocator.o
+             flags={}  name=google::protobuf::internal::pLinuxKernelCmpxchg
+43785380 d@0x2de7004  pss=4  padding=0  size_without_padding=4
+             source_path=third_party/container.c 	object_path=third_party/WebKit.a/ContiguousContainer.o
+             flags={}  name=google::protobuf::internal::pLinuxKernelMemoryBarrier
+43785380 b@0x0        pss=262144  padding=0  size_without_padding=262144
+             source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+             flags={}  name=ff_cos_131072
+43785380 b@0x0        pss=131072  padding=0  size_without_padding=131072
+             source_path=third_party/fft_fixed.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_fixed.o
+             flags={}  name=ff_cos_131072_fixed
+43785380 b@0x0        pss=131072  padding=0  size_without_padding=131072
+             source_path=third_party/fft_float.cc 	object_path=third_party/ffmpeg/libffmpeg_internal.a/fft_float.o
+             flags={}  name=ff_cos_65536
+43785380 b@0x2dffe80  pss=200  padding=196  size_without_padding=4
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={}  name=SaveHistogram::atomic_histogram_pointer
+                        full_name=SaveHistogram(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&, base::android::JavaParamRef<_jstring*> const&, base::android::JavaParamRef<_jlongArray*> const&, int)::atomic_histogram_pointer
+43785380 b@0x2dffda0  pss=28  padding=0  size_without_padding=28
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={}  name=g_chrome_content_browser_client
+43785380 b@0x2dffe84  pss=4  padding=0  size_without_padding=4
+             source_path=third_party/icu/ucnv_ext.c 	object_path=third_party/icu/icuuc/ucnv_ext.o
+             flags={anon}  name=g_AnimationFrameTimeHistogram_clazz
diff --git a/src/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden b/src/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden
index c9df6ac..2fd8ab7 100644
--- a/src/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden
+++ b/src/tools/binary_size/libsupersize/testdata/SymbolGroupMethods.golden
@@ -1,85 +1,85 @@
 GroupByNamespace()
-Showing 10 symbols with total size: 2652506 bytes
-.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Showing 10 symbols (10 unique) with total pss: 44309900 bytes
+.text=0 bytes    .rodata=0 bytes    other=42.3mb     total=42.3mb
 Number of object files: 5
 
-First columns are: running total, type, size
- 2652080 *@Group      2652080 {no path}
-             {global} (count=23)
- 2652240 *@Group      160     third_party/container.c
-             base::android (count=3)
- 2652334 *@Group      94      third_party/container.c
-             blink::PaintChunker (count=1)
- 2652390 *@Group      56      {no path}
-             blink::ContiguousContainerBase (count=3)
- 2652438 *@Group      48      {no path}
+First columns are: running total, address, pss
+43519394 *@Group      43519394 {no path}
+             {global} (count=33)
+44309322 *@Group      789928  {no path}
              chrome::mojom (count=2)
- 2652470 *@Group      32      third_party/container.c
+44309522 *@Group      200     third_party/icu/ucnv_ext.c
+             SaveHistogram (count=1)
+44309682 *@Group      160     third_party/container.c
+             base::android (count=3)
+44309776 *@Group      94      third_party/container.c
+             blink::PaintChunker (count=1)
+44309832 *@Group      56      {no path}
+             blink::ContiguousContainerBase (count=3)
+44309864 *@Group      32      third_party/container.c
              chrome::mojom::FilePatcher (count=1)
- 2652494 *@Group      24      base/page_allocator.cc
+44309888 *@Group      24      base/page_allocator.cc
              mojo (count=1)
- 2652502 *@Group      8       {no path}
+44309896 *@Group      8       {no path}
              google::protobuf::internal (count=2)
- 2652506 *@Group      4       third_party/paint.cc
+44309900 *@Group      4       third_party/paint.cc
              blink::CSSValueKeywordsHash::findValueImpl (count=1)
- 2652506 *@Group      0       third_party/icu/ucnv_ext.c
-             SaveHistogram (count=1)
 GroupByNamespace(depth=1)
-Showing 7 symbols with total size: 2652506 bytes
-.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Showing 7 symbols (7 unique) with total pss: 44309900 bytes
+.text=0 bytes    .rodata=0 bytes    other=42.3mb     total=42.3mb
 Number of object files: 4
 
-First columns are: running total, type, size
- 2652080 *@Group      2652080 {no path}
-             {global} (count=23)
- 2652240 *@Group      160     third_party/container.c
-             base (count=3)
- 2652394 *@Group      154     {no path}
-             blink (count=5)
- 2652474 *@Group      80      {no path}
+First columns are: running total, address, pss
+43519394 *@Group      43519394 {no path}
+             {global} (count=33)
+44309354 *@Group      789960  {no path}
              chrome (count=3)
- 2652498 *@Group      24      base/page_allocator.cc
-             mojo (count=1)
- 2652506 *@Group      8       {no path}
-             google (count=2)
- 2652506 *@Group      0       third_party/icu/ucnv_ext.c
+44309554 *@Group      200     third_party/icu/ucnv_ext.c
              SaveHistogram (count=1)
+44309708 *@Group      154     {no path}
+             blink (count=5)
+44309868 *@Group      160     third_party/container.c
+             base (count=3)
+44309892 *@Group      24      base/page_allocator.cc
+             mojo (count=1)
+44309900 *@Group      8       {no path}
+             google (count=2)
 GroupByNamespace(depth=1, fallback=None)
-Showing 7 symbols with total size: 2652506 bytes
-.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Showing 7 symbols (7 unique) with total pss: 44309900 bytes
+.text=0 bytes    .rodata=0 bytes    other=42.3mb     total=42.3mb
 Number of object files: 4
 
-First columns are: running total, type, size
- 2652080 *@Group      2652080 {no path}
- 2652240 *@Group      160     third_party/container.c
-             base (count=3)
- 2652394 *@Group      154     {no path}
-             blink (count=5)
- 2652474 *@Group      80      {no path}
+First columns are: running total, address, pss
+43519394 *@Group      43519394 {no path}
+44309354 *@Group      789960  {no path}
              chrome (count=3)
- 2652498 *@Group      24      base/page_allocator.cc
-             mojo (count=1)
- 2652506 *@Group      8       {no path}
-             google (count=2)
- 2652506 *@Group      0       third_party/icu/ucnv_ext.c
+44309554 *@Group      200     third_party/icu/ucnv_ext.c
              SaveHistogram (count=1)
+44309708 *@Group      154     {no path}
+             blink (count=5)
+44309868 *@Group      160     third_party/container.c
+             base (count=3)
+44309892 *@Group      24      base/page_allocator.cc
+             mojo (count=1)
+44309900 *@Group      8       {no path}
+             google (count=2)
 GroupByNamespace(depth=1, min_count=2)
-Showing 7 symbols with total size: 2652506 bytes
-.text=0 bytes    .rodata=0 bytes    other=2.53mb     total=2.53mb
+Showing 7 symbols (7 unique) with total pss: 44309900 bytes
+.text=0 bytes    .rodata=0 bytes    other=42.3mb     total=42.3mb
 Number of object files: 4
 
-First columns are: running total, type, size
- 2652080 *@Group      2652080 {no path}
-             {global} (count=23)
- 2652240 *@Group      160     third_party/container.c
-             base (count=3)
- 2652394 *@Group      154     {no path}
-             blink (count=5)
- 2652474 *@Group      80      {no path}
+First columns are: running total, address, pss
+43519394 *@Group      43519394 {no path}
+             {global} (count=33)
+44309354 *@Group      789960  {no path}
              chrome (count=3)
- 2652498 d@0x2cd8538  24      base/page_allocator.cc
+44309508 *@Group      154     {no path}
+             blink (count=5)
+44309668 *@Group      160     third_party/container.c
+             base (count=3)
+44309692 d@0x2cd8538  24      base/page_allocator.cc
              mojo::MessageReceiver [vtable]
- 2652506 *@Group      8       {no path}
+44309700 *@Group      8       {no path}
              google (count=2)
- 2652506 b@0x2dffe80  200     third_party/icu/ucnv_ext.c
+44309700 b@0x2dffe80  200     third_party/icu/ucnv_ext.c
              SaveHistogram::atomic_histogram_pointer
diff --git a/src/tools/binary_size/libsupersize/testdata/create-test-size.sh b/src/tools/binary_size/libsupersize/testdata/create-test-size.sh
new file mode 100755
index 0000000..5856dc5
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/create-test-size.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+base_dir=$(dirname "$0")
+abs_base_dir=$(python -c "import os; print os.path.abspath('$base_dir')")
+toolchain_dir=$abs_base_dir/mock_toolchain
+export PATH="$toolchain_dir:$PATH"
+echo "Added to PATH: $toolchain_dir"
+set -x
+exec $base_dir/../main.py archive test.size \
+    --map-file $base_dir/test.map \
+    --elf-file $base_dir/mock_output_directory/elf
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_output_directory/args.gn b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/args.gn
new file mode 100644
index 0000000..b852677
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/args.gn
@@ -0,0 +1,2 @@
+var1 = true
+var2 = "foo"
diff --git a/src/tools/binary_size/libsupersize/testdata/build.ninja b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/build.ninja
similarity index 100%
rename from src/tools/binary_size/libsupersize/testdata/build.ninja
rename to src/tools/binary_size/libsupersize/testdata/mock_output_directory/build.ninja
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_output_directory/elf b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/elf
new file mode 100644
index 0000000..cd45dd7
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/elf
@@ -0,0 +1,3 @@
+Placeholder for an ELF file.
+Its mtime is queried, and its output-relative path is used.
+But what you read here is completely superfluous.
diff --git a/src/tools/binary_size/libsupersize/testdata/sub.ninja b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/sub.ninja
similarity index 70%
rename from src/tools/binary_size/libsupersize/testdata/sub.ninja
rename to src/tools/binary_size/libsupersize/testdata/mock_output_directory/sub.ninja
index ea672e5..be2a057 100644
--- a/src/tools/binary_size/libsupersize/testdata/sub.ninja
+++ b/src/tools/binary_size/libsupersize/testdata/mock_output_directory/sub.ninja
@@ -1,2 +1,3 @@
 build obj/third_party/ffmpeg/libffmpeg_internal.a: alink obj/third_party/sub/fft_fixed.o obj/third_party/sub/fft_float.o | bar
 build obj/third_party/WebKit.a: alink obj/third_party/sub/PaintChunker.o obj/third_party/sub/ContiguousContainer.o
+build a b c d elf: link obj/base/base/page_allocator.o obj/third_party/WebKit.a || dum dee doo dee
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/c++filt b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/c++filt
new file mode 100755
index 0000000..043955d
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/c++filt
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+base_dir=$(dirname "$0")
+exec python "$base_dir/mock_cppfilt.py" "$@"
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/git b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/git
new file mode 100755
index 0000000..955ad52
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/git
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+base_dir=$(dirname "$0")
+exec python "$base_dir/mock_git.py" "$@"
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_cppfilt.py b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_cppfilt.py
new file mode 100644
index 0000000..e7448a9
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_cppfilt.py
@@ -0,0 +1,44 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+
+_MAPPINGS = {
+    '_ZL18extFromUUseMappingaji': (
+        'extFromUUseMapping(signed char, unsigned int, int)'),
+    '_ZL18extFromUUseMapping2aji': 'extFromUUseMapping(aj, int)',
+    '_ZL18ucnv_extMatchFromUPKiiPKtiS2_iPjaa': (
+        'ucnv_extMatchFromU(int const*, int, unsigned short const*, int, unsign'
+        'ed short const*, int, unsigned int*, signed char, signed char)'),
+    '_ZN12_GLOBAL__N_1L37kAnimationFrameTimeHistogramClassPathE': (
+        '(anonymous namespace)::kAnimationFrameTimeHistogramClassPath'),
+    '_ZN12_GLOBAL__N_1L20kSystemClassPrefixesE': (
+        '(anonymous namespace)::kSystemClassPrefixes'),
+    '_ZL35kMethodsAnimationFrameTimeHistogram': (
+        'kMethodsAnimationFrameTimeHistogram'),
+    '_ZN4base7androidL22kBaseRegisteredMethodsE': (
+        'base::android::kBaseRegisteredMethods'),
+    '_ZN4base7android12_GLOBAL__N_125g_renderer_histogram_codeE': (
+        'base::android::(anonymous namespace)::g_renderer_histogram_code'),
+    '_ZN4base7android12_GLOBAL__N_124g_library_version_numberE': (
+        'base::android::(anonymous namespace)::g_library_version_number'),
+    ('_ZZL13SaveHistogramP7_JNIEnvRKN4base7android12JavaParamRefIP8_jobjectEERK'
+     'NS3_IP8_jstringEERKNS3_IP11_jlongArrayEEiE24atomic_histogram_pointer'): (
+         'SaveHistogram(_JNIEnv*, base::android::JavaParamRef<_jobject*> const&'
+         ', base::android::JavaParamRef<_jstring*> const&, base::android::JavaP'
+         'aramRef<_jlongArray*> const&, int)::atomic_histogram_pointer'),
+    '_ZN12_GLOBAL__N_135g_AnimationFrameTimeHistogram_clazzE': (
+        '(anonymous namespace)::g_AnimationFrameTimeHistogram_clazz'),
+}
+
+
+def main():
+  for line in sys.stdin:
+    sys.stdout.write(_MAPPINGS[line.rstrip()])
+    sys.stdout.write('\n')
+
+
+if __name__ == '__main__':
+  main()
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_git.py b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_git.py
new file mode 100644
index 0000000..a1c1e0b
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_git.py
@@ -0,0 +1,14 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+
+def main():
+  assert sys.argv[-2:] == ['rev-parse', 'HEAD']
+  sys.stdout.write('abc123\n')
+
+
+if __name__ == '__main__':
+  main()
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_nm.py b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_nm.py
new file mode 100644
index 0000000..85edc80
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_nm.py
@@ -0,0 +1,121 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import sys
+
+
+_SHRINK_TO_FIT_CLONE = ('blink::ContiguousContainerBase::shrinkToFit() '
+                        '[clone .part.1234] [clone .isra.2]')
+_ELF_OUTPUT = """002b6e20 t $t
+00000010 N $d
+002b6bb8 t $t
+002a0010 t {}
+0028d900 t startup._GLOBAL__sub_I_page_allocator.cc
+002a0010 t FooAlias()
+002b6bb8 t $t
+002a0010 t BarAlias()
+002a0000 t blink::ContiguousContainerBase::shrinkToFit()
+002a0000 t BazAlias(bool)
+002b6bb8 t $t
+""".format(_SHRINK_TO_FIT_CLONE)
+
+_SHRINK_TO_FIT = ('blink::ContiguousContainerBase::shrinkToFit() '
+                  '[clone .part.1234] [clone .isra.2]')
+_OBJECT_OUTPUTS = {
+    'obj/third_party/icu/icuuc/ucnv_ext.o': [
+        '01010101 t ' + _SHRINK_TO_FIT,
+        '01010101 t _GLOBAL__sub_I_SkDeviceProfile.cpp',
+        '01010101 t foo_bar',
+        '002a0000 t BazAlias(bool)',
+        '01010101 r vtable for ChromeMainDelegate',
+        '01010101 r vtable for chrome::mojom::FieldTrialRecorder',
+        ('01010101 t ucnv_extMatchFromU(int const*, int, unsigned short const*,'
+         ' int, unsigned short const*, int, unsigned int*, signed char, signed '
+         'char)'),
+    ],
+    'obj/third_party/WebKit.a': [
+        '',
+        'PaintChunker.o:',
+        '01010101 t ' + _SHRINK_TO_FIT,
+        '010101 t (anonymous namespace)::kAnimationFrameTimeHistogramClassPath',
+        '010101 r vtable for ChromeMainDelegateAndroid',
+        ('01010101 r blink::(anonymous namespace)::CSSValueKeywordsHash::findVa'
+         'lueImpl(char const*, unsigned int)::value_word_list'),
+        '',
+        'ContiguousContainer.o:',
+        '01010101 d chrome::mojom::FilePatcher::Name_',
+        '01010101 r vtable for chrome::mojom::FieldTrialRecorderProxy',
+        '01010101 r google::protobuf::internal::pLinuxKernelMemoryBarrier',
+        '01010101 r base::android::kBaseRegisteredMethods',
+        ('01010101 r base::android::(anonymous namespace)::g_renderer_histogram'
+         '_code'),
+        ('01010101 r base::android::(anonymous namespace)::g_library_version_nu'
+         'mber'),
+        ('01010101 t blink::ContiguousContainerBase::ContiguousContainerBase(bl'
+         'ink::ContiguousContainerBase&&)'),
+        ('01010101 t (anonymous namespace)::blink::PaintChunker::releasePaintCh'
+         'unks() [clone .part.1]'),
+    ],
+    'obj/base/base/page_allocator.o': [
+        '01010101 t _GLOBAL__sub_I_page_allocator.cc',
+        '01010101 t _GLOBAL__sub_I_bbr_sender.cc',
+        '01010101 t _GLOBAL__sub_I_pacing_sender.cc',
+        '01010101 t _GLOBAL__sub_I_bbr_sender.cc',
+        '01010101 t extFromUUseMapping(aj, int)',
+        '01010101 t extFromUUseMapping(signed char, unsigned int, int)',
+        '01010101 t Name',
+        '01010101 v vtable for mojo::MessageReceiver',
+        '01010101 r kMethodsAnimationFrameTimeHistogram',
+        '01010101 r google::protobuf::internal::pLinuxKernelCmpxchg',
+    ],
+    'obj/third_party/ffmpeg/libffmpeg_internal.a': [
+        '',
+        'fft_float.o:',
+        '01010101 b ff_cos_65536',
+        '01010101 b ff_cos_131072',
+        '002a0010 t FooAlias()',
+        '002b6bb8 t $t',
+        '002a0010 t BarAlias()',
+        ''
+        'fft_fixed.o:'
+        '01010101 b ff_cos_131072_fixed',
+    ],
+    '../../third_party/gvr-android-sdk/libgvr_shim_static_arm.a': [
+        '',
+        'libcontroller_api_impl.a_controller_api_impl.o:'
+        '01010101 d .Lswitch.table.45',
+        '',
+        'libport_android_jni.a_jni_utils.o:',
+        '(anonymous namespace)::kSystemClassPrefixes',
+    ],
+}
+
+def _PrintHeader(path):
+  sys.stdout.write('\n')
+  sys.stdout.write(path + ':\n')
+
+
+def _PrintOutput(path):
+  if path.endswith(os.path.join('mock_output_directory', 'elf')):
+    sys.stdout.write(_ELF_OUTPUT)
+  else:
+    lines = _OBJECT_OUTPUTS.get(path)
+    assert lines, 'No mock_nm.py entry for: ' + path
+    sys.stdout.write('\n'.join(lines))
+    sys.stdout.write('\n')
+
+
+def main():
+  paths = [p for p in sys.argv[1:] if not p.startswith('-')]
+  if len(paths) == 1:
+    _PrintOutput(paths[0])
+  else:
+    for path in paths:
+      _PrintHeader(path)
+      _PrintOutput(path)
+
+
+if __name__ == '__main__':
+  main()
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_readelf.py b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_readelf.py
new file mode 100644
index 0000000..ccfa532
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/mock_readelf.py
@@ -0,0 +1,93 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import sys
+
+
+_HEADERS = """ELF Header:
+  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+  Class:                             ELF32
+  Data:                              2's complement, little endian
+  Version:                           1 (current)
+  OS/ABI:                            UNIX - System V
+  ABI Version:                       0
+  Type:                              DYN (Shared object file)
+  Machine:                           ARM
+  Version:                           0x1
+  Entry point address:               0x0
+  Start of program headers:          52 (bytes into file)
+  Start of section headers:          628588000 (bytes into file)
+  Flags:                             0x5000200, Version5 EABI, soft-float ABI
+  Size of this header:               52 (bytes)
+  Size of program headers:           32 (bytes)
+  Number of program headers:         9
+  Size of section headers:           40 (bytes)
+  Number of section headers:         40
+  Section header string table index: 39
+"""
+
+_SECTIONS = """There are 40 section headers, starting at offset 0x25777de0:
+
+Section Headers:
+  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
+  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
+  [ 1] .interp           PROGBITS        00000154 000154 000013 00   A  0   0  1
+  [ 2] .note.gnu.build-id NOTE           00000168 000168 000024 00   A  0   0  4
+  [ 3] .dynsym           DYNSYM          0000018c 00018c 001960 10   A  4   1  4
+  [ 4] .dynstr           STRTAB          00001b0c 001b0c 000fb9 00   A  0   0  1
+  [ 5] .hash             HASH            00002ad4 002ad4 000a7c 04   A  3   0  4
+  [ 6] .gnu.version      VERSYM          00003558 003558 00032c 02   A  3   0  2
+  [ 7] .gnu.version_d    VERDEF          00003888 003888 00001c 00   A  4   1  4
+  [ 8] .gnu.version_r    VERNEED         000038a4 0038a4 000060 00   A  4   3  4
+  [ 9] .rel.dyn          REL             00003904 003904 288498 08   A  3   0  4
+  [10] .rel.plt          REL             0029fbec 29fbec 000b00 08   A  3   0  4
+  [11] .plt              PROGBITS        002a06ec 2a06ec 001094 00  AX  0   0  4
+  [12] .text             PROGBITS       002a1780 2a1780 223cd28 00  AX  0   0 64
+  [13] .rodata           PROGBITS      02605000 2605000 5a72e4 00   A  0   0 256
+  [14] .ARM.exidx        ARM_EXIDX      02bd3d10 2bd3d10 1771c8 08  AL 12   0  4
+  [15] .ARM.extab        PROGBITS       02bd5858 2bd5858 02cd50 00   A  0   0  4
+  [16] .data.rel.ro.local PROGBITS      02bdac40 2bd9c40 0c0e08 00  WA  0   0 16
+  [17] .data.rel.ro      PROGBITS       02c9d420 2c9c420 104108 00  WA  0   0 16
+  [18] .init_array       INIT_ARRAY     02da4680 2da3680 000008 00  WA  0   0  4
+  [19] .fini_array       FINI_ARRAY     02da4774 2da3774 000008 00  WA  0   0  4
+  [20] .dynamic          DYNAMIC        02da477c 2da377c 000130 08  WA  4   0  4
+  [21] .got              PROGBITS       02da48b4 2da38b4 00a7cc 00  WA  0   0  4
+  [22] .data             PROGBITS       02db0000 2daf000 018d88 00  WA  0   0 32
+  [23] .bss              NOBITS         02dc8220 2dc7220 13d7e8 00  WA  0   0 32
+  [35] .note.gnu.gold-version NOTE     00000000 226c41e8 00001c 00      0   0  4
+  [36] .ARM.attributes  ARM_ATTRIBUTES 00000000 226c4204 00003c 00      0   0  1
+  [37] .symtab           SYMTAB    00000000 226c4240 105ef20 10     38 901679  4
+  [38] .strtab           STRTAB       00000000 23487ea0 213a4fe 00      0   0  1
+  [39] .shstrtab         STRTAB        00000000 25777c2a 0001b4 00      0   0  1
+Key to Flags:
+  W (write), A (alloc), X (execute), M (merge), S (strings)
+  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
+  O (extra OS processing required) o (OS specific), p (processor specific)
+"""
+
+_NOTES = """
+Displaying notes found at file offset 0x00000168 with length 0x00000024:
+  Owner                 Data size\tDescription
+  GNU                   0x00000014\tNT_GNU_BUILD_ID (unique build ID bitstring)
+    Build ID: WhatAnAmazingBuildId
+
+Displaying notes found at file offset 0x226c41e8 with length 0x0000001c:
+  Owner                 Data size\tDescription
+  GNU                   0x00000009\tNT_GNU_GOLD_VERSION (gold version)
+"""
+
+
+def main():
+  if sys.argv[1] == '-h':
+    sys.stdout.write(_HEADERS)
+  elif sys.argv[1] == '-S':
+    sys.stdout.write(_SECTIONS)
+  elif sys.argv[1] == '-n':
+    sys.stdout.write(_NOTES)
+  else:
+    assert False, 'Invalid args: %s' % sys.argv
+
+
+if __name__ == '__main__':
+  main()
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/nm b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/nm
new file mode 100755
index 0000000..5a2533c
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/nm
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+base_dir=$(dirname "$0")
+exec python "$base_dir/mock_nm.py" "$@"
diff --git a/src/tools/binary_size/libsupersize/testdata/mock_toolchain/readelf b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/readelf
new file mode 100755
index 0000000..9463cd6
--- /dev/null
+++ b/src/tools/binary_size/libsupersize/testdata/mock_toolchain/readelf
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+base_dir=$(dirname "$0")
+exec python "$base_dir/mock_readelf.py" "$@"
diff --git a/src/tools/binary_size/libsupersize/testdata/test.map b/src/tools/binary_size/libsupersize/testdata/test.map
index ee25738..adebd5c 100644
--- a/src/tools/binary_size/libsupersize/testdata/test.map
+++ b/src/tools/binary_size/libsupersize/testdata/test.map
@@ -88,7 +88,7 @@
  .text.startup._GLOBAL__sub_I_SkDeviceProfile.cpp
                 0x0028f1c8       0x14 obj/third_party/icu/icuuc/ucnv_ext.o
  .text.unlikely.foo_bar
-                0x0028f1e0       0x14 obj/third_party/icu/icuuc/ucnv_ext.o
+                0x0028f1e0       0x10e00 obj/third_party/icu/icuuc/ucnv_ext.o
  .text._ZN5blink23ContiguousContainerBase11shrinkToFitEv
                 0x002a0000       0x10 obj/third_party/WebKit.a(PaintChunker.o)
                 0x002a0001                blink::ContiguousContainerBase::shrinkToFit()
@@ -136,9 +136,9 @@
                 0x02c176f0                vtable for ChromeMainDelegate
  .data.rel.ro.local._ZTVN6chrome5mojom34FieldTrialRecorderRequestValidatorE
                 0x02c17728       0x18 obj/third_party/icu/icuuc/ucnv_ext.o
-                0x02c17728                vtable for chrome::mojom::FieldTrialRecorderRequestValidator
+                0x02c17728                vtable for chrome::mojom::FieldTrialRecorder
  .data.rel.ro.local._ZTVN6chrome5mojom23FieldTrialRecorderProxyE
-                0x02c17740       0x18 obj/third_party/WebKit.a(ContiguousContainer.o)
+                0x02c17740       0xc0d90 obj/third_party/WebKit.a(ContiguousContainer.o)
                 0x02c17740                vtable for chrome::mojom::FieldTrialRecorderProxy
  .data.rel.ro.local..Lswitch.table.45
                 0x02cd84e0       0x10 ../../third_party/gvr-android-sdk/libgvr_shim_static_arm.a(libcontroller_api_impl.a_controller_api_impl.o)
@@ -196,46 +196,6 @@
                 0x02dffe84        0x4 obj/third_party/icu/icuuc/ucnv_ext.o
  ** common      0x02e2fca0   0x10d8e8
 
-.debug_info     0x00000000  0x81aee3a
- .debug_info    0x00000000       0x41 obj/chrome/android/chrome/chrome_main_delegate_android_initializer.o
-
-.debug_abbrev   0x00000000   0xa79307
- .debug_abbrev  0x00000000       0x2f obj/chrome/android/chrome/chrome_main_delegate_android_initializer.o
-
-.debug_aranges  0x00000000   0x4a2a18
- .debug_aranges
-                0x00000000       0x20 obj/chrome/android/chrome/chrome_main_delegate_android_initializer.o
-
-.debug_ranges   0x00000000  0x1dd3880
- .debug_ranges  0x00000000       0x10 obj/chrome/android/chrome/chrome_main_delegate_android_initializer.o
-
-.debug_line     0x00000000  0x37976e9
- .debug_line    0x00000000       0x7b obj/chrome/android/chrome/chrome_main_delegate_android_initializer.o
-
-.debug_str      0x00000000  0xf73136b
- ** merge strings
-                0x00000000  0xf73136b
-
-.debug_frame    0x00000000   0xfa0610
- .debug_frame   0x00000000       0x28 obj/chrome/android/chrome/chrome_main_delegate_android_initializer.o
-
-.comment        0x00000000       0x7f
- ** merge strings
-                0x00000000       0x7f
-
-.debug_loc      0x00000000    0x4fdb6
- .debug_loc     0x00000000       0x85 ../../third_party/android_tools/ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a(chrono.o)
-
-.debug_pubnames
-                0x00000000    0x4165f
- .debug_pubnames
-                0x00000000      0xc42 ../../third_party/android_tools/ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a(chrono.o)
-
-.debug_pubtypes
-                0x00000000    0x184f4
- .debug_pubtypes
-                0x00000000      0xc74 ../../third_party/android_tools/ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a/libc++_static.a(chrono.o)
-
 .note.gnu.gold-version
                 0x00000000       0x1c
  ** note header
diff --git a/src/tools/blink_rename_merge_helper/data/idl_blocklist.txt b/src/tools/blink_rename_merge_helper/data/idl_blocklist.txt
index 613ddfd..af7d04e 100644
--- a/src/tools/blink_rename_merge_helper/data/idl_blocklist.txt
+++ b/src/tools/blink_rename_merge_helper/data/idl_blocklist.txt
@@ -990,7 +990,6 @@
 DeviceAcceleration:::x:::1
 DeviceAcceleration:::y:::1
 DeviceAcceleration:::z:::1
-DeviceLightEvent:::value:::0
 DeviceMotionEvent:::acceleration:::0
 DeviceMotionEvent:::accelerationIncludingGravity:::0
 DeviceMotionEvent:::interval:::0
@@ -1590,8 +1589,6 @@
 DOMWindowCSS:::supports:::2
 DOMWindow:::customElements:::1
 DOMWindow:::defaultStatus:::0
-DOMWindowDeviceLight:::ondevicelight:::1
-DOMWindowDeviceLight:::setOndevicelight:::2
 DOMWindowDeviceMotion:::ondevicemotion:::1
 DOMWindowDeviceMotion:::setOndevicemotion:::2
 DOMWindowDeviceOrientation:::ondeviceorientation:::1
@@ -3422,7 +3419,6 @@
 LocalDOMWindow:::onanimationend:::0
 LocalDOMWindow:::onanimationiteration:::0
 LocalDOMWindow:::onanimationstart:::0
-LocalDOMWindow:::ondevicelight:::1
 LocalDOMWindow:::ondevicemotion:::1
 LocalDOMWindow:::ondeviceorientation:::1
 LocalDOMWindow:::ondeviceorientationabsolute:::1
@@ -3486,7 +3482,6 @@
 LocalDOMWindow:::setOnanimationend:::1
 LocalDOMWindow:::setOnanimationiteration:::1
 LocalDOMWindow:::setOnanimationstart:::1
-LocalDOMWindow:::setOndevicelight:::2
 LocalDOMWindow:::setOndevicemotion:::2
 LocalDOMWindow:::setOndeviceorientation:::2
 LocalDOMWindow:::setOndeviceorientationabsolute:::2
diff --git a/src/tools/boilerplate.py b/src/tools/boilerplate.py
index 8d63438..03e71f5 100755
--- a/src/tools/boilerplate.py
+++ b/src/tools/boilerplate.py
@@ -39,7 +39,7 @@
 
 def _CppHeader(filename):
   guard = filename.upper() + '_'
-  for char in '/.+':
+  for char in '/\\.+':
     guard = guard.replace(char, '_')
   return '\n'.join([
     '',
@@ -69,8 +69,13 @@
   return False
 
 
+def _FilePathSlashesToCpp(filename):
+  return filename.replace('\\', '/')
+
+
 def _CppImplementation(filename):
-  return '\n#include "' + _RemoveTestSuffix(filename) + '.h"\n'
+  return '\n#include "' + _FilePathSlashesToCpp(_RemoveTestSuffix(filename)) \
+    + '.h"\n'
 
 
 def _ObjCppImplementation(filename):
@@ -94,7 +99,7 @@
   elif filename.endswith('.mm'):
     contents += _ObjCppImplementation(filename)
 
-  fd = open(filename, 'w')
+  fd = open(filename, 'wb')
   fd.write(contents)
   fd.close()
 
diff --git a/src/tools/chrome_proxy/webdriver/common.py b/src/tools/chrome_proxy/webdriver/common.py
index f17ab3b..2143f6e 100644
--- a/src/tools/chrome_proxy/webdriver/common.py
+++ b/src/tools/chrome_proxy/webdriver/common.py
@@ -166,7 +166,8 @@
       # Override flags given in code with any command line arguments.
       for override_arg in shlex.split(self._flags.browser_args):
         arg_key = GetDictKey(override_arg)
-        if arg_key in original_args:
+        if (arg_key in original_args
+            and original_args[arg_key] in self._chrome_args):
           self._chrome_args.remove(original_args[arg_key])
           self._logger.info('Removed Chrome flag. %s', original_args[arg_key])
         self._chrome_args.add(override_arg)
@@ -414,7 +415,8 @@
 
     return bool(histogram)
 
-  def GetHTTPResponses(self, include_favicon=False, skip_domainless_pages=True):
+  def GetHTTPResponses(self, include_favicon=False, skip_domainless_pages=True,
+      override_has_logs=False):
     """Parses the Performance Logs and returns a list of HTTPResponse objects.
 
     Use caution when calling this function  multiple times. Only responses
@@ -426,10 +428,14 @@
       include_favicon: A bool that if True will include responses for favicons.
       skip_domainless_pages: If True, only responses with a net_loc as in RFC
         1808 will be included. Pages such as about:blank will be skipped.
+      override_has_logs: Allows the _has_logs property to be set if there was
+        not a page load but an XHR was expected instead.
     Returns:
       A list of HTTPResponse objects, each representing a single completed HTTP
       transaction by Chrome.
     """
+    if override_has_logs:
+      self._has_logs = True
     def MakeHTTPResponse(log_dict):
       params = log_dict['params']
       response_dict = params['response']
@@ -586,10 +592,11 @@
 
   def checkLoFiResponse(self, http_response, expected_lo_fi):
     """Asserts that if expected the response headers contain the Lo-Fi directive
-    then the request headers do too. Also checks that the content size is less
-    than 100 if |expected_lo_fi|. Otherwise, checks that the response and
-    request headers don't contain the Lo-Fi directive and the content size is
-    greater than 100.
+    then the request headers do too. If the CPAT header contains if-heavy, the
+    request should not be LoFi. If-heavy will be deprecated in the future. Also
+    checks that the content size is less than 100 if |expected_lo_fi|.
+    Otherwise, checks that the response and request headers don't contain the
+    Lo-Fi directive and the content size is greater than 100.
 
     Args:
       http_response: The HTTPResponse object to check.
@@ -612,8 +619,11 @@
         return True;
       return False;
     else:
-      self.assertNotIn('chrome-proxy-accept-transform',
-        http_response.request_headers)
+      if ('chrome-proxy-accept-transform' in http_response.request_headers):
+        cpat_request = http_response.request_headers[
+                       'chrome-proxy-accept-transform']
+        if ('empty-image' in cpat_request):
+          self.assertIn('if-heavy', cpat_request)
       self.assertNotIn('chrome-proxy-content-transform',
         http_response.response_headers)
       content_length = http_response.response_headers['content-length']
diff --git a/src/tools/chrome_proxy/webdriver/lite_page.py b/src/tools/chrome_proxy/webdriver/lite_page.py
index d7fe48a..b8304d1 100644
--- a/src/tools/chrome_proxy/webdriver/lite_page.py
+++ b/src/tools/chrome_proxy/webdriver/lite_page.py
@@ -6,6 +6,7 @@
 from common import TestDriver
 from common import IntegrationTest
 
+import time
 
 class LitePage(IntegrationTest):
 
@@ -39,6 +40,54 @@
       # Verify that a Lite Page response for the main frame was seen.
       self.assertEqual(1, lite_page_responses)
 
+  # Checks that a Lite Page does not have an error when scrolling to the bottom
+  # of the page and is able to load all resources.
+  def testLitePageBTF(self):
+    # If it was attempted to run with another experiment, skip this test.
+    if common.ParseFlags().browser_args and ('--data-reduction-proxy-experiment'
+        in common.ParseFlags().browser_args):
+      self.skipTest('This test cannot be run with other experiments.')
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+      test_driver.AddChromeArg('--data-reduction-proxy-lo-fi=always-on')
+      test_driver.AddChromeArg('--enable-data-reduction-proxy-lite-page')
+
+      # This page is long and has many media resources.
+      test_driver.LoadURL('http://check.googlezip.net/metrics/index.html')
+
+      # Verify that a Lite Page response for the main frame was seen.
+      lite_page_responses = 0
+      for response in test_driver.GetHTTPResponses():
+        # Skip CSI requests when validating Lite Page headers. CSI requests
+        # aren't expected to have LoFi headers.
+        if '/csi?' in response.url:
+          continue
+        if response.url.startswith('data:'):
+          continue
+        self.assertIn('exp=ignore_preview_blacklist',
+          response.request_headers['chrome-proxy'])
+        if (self.checkLitePageResponse(response)):
+          lite_page_responses = lite_page_responses + 1
+      self.assertEqual(1, lite_page_responses)
+
+      # Scroll to the bottom of the window and ensure scrollHeight increases.
+      original_scroll_height = test_driver.ExecuteJavascriptStatement(
+        'document.body.scrollHeight')
+      test_driver.ExecuteJavascriptStatement(
+        'window.scrollTo(0,Math.max(document.body.scrollHeight));')
+      # Give some time for loading after scrolling.
+      time.sleep(2)
+      new_scroll_height = test_driver.ExecuteJavascriptStatement(
+        'document.body.scrollHeight')
+      self.assertGreater(new_scroll_height, original_scroll_height)
+
+      # Make sure there were more requests that were proxied.
+      responses = test_driver.GetHTTPResponses(override_has_logs=True)
+      self.assertNotEqual(0, len(responses))
+      for response in responses:
+        self.assertHasChromeProxyViaHeader(response)
+        self.assertIn(response.status, [200, 204])
+
   # Checks that Lo-Fi images are used when the user is in the
   # DataCompressionProxyLitePageFallback field trial and a Lite Page is not
   # served.
diff --git a/src/tools/chrome_proxy/webdriver/lofi.py b/src/tools/chrome_proxy/webdriver/lofi.py
index 18935a0..08a5cff 100644
--- a/src/tools/chrome_proxy/webdriver/lofi.py
+++ b/src/tools/chrome_proxy/webdriver/lofi.py
@@ -34,6 +34,74 @@
       # Verify that Lo-Fi responses were seen.
       self.assertNotEqual(0, lofi_responses)
 
+  # Checks that LoFi images are served when LoFi slow connections are used and
+  # the network quality estimator returns Slow2G.
+  def testLoFiSlowConnection(self):
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+      test_driver.AddChromeArg('--data-reduction-proxy-lo-fi=slow-connections-'
+                               'only')
+      # Disable server experiments such as tamper detection.
+      test_driver.AddChromeArg('--data-reduction-proxy-server-experiments-'
+                               'disabled')
+
+      test_driver.AddChromeArg('--force-fieldtrial-params='
+                               'NetworkQualityEstimator.Enabled:'
+                               'force_effective_connection_type/Slow2G')
+      test_driver.AddChromeArg('--force-fieldtrials=NetworkQualityEstimator/'
+                               'Enabled')
+
+      test_driver.LoadURL('http://check.googlezip.net/static/index.html')
+
+      lofi_responses = 0
+      for response in test_driver.GetHTTPResponses():
+        if not response.url.endswith('png'):
+          continue
+        if not response.request_headers:
+          continue
+        if (self.checkLoFiResponse(response, True)):
+          lofi_responses = lofi_responses + 1
+
+      # Verify that Lo-Fi responses were seen.
+      self.assertNotEqual(0, lofi_responses)
+
+  # Checks that LoFi images are not served, but the if-heavy CPAT header is
+  # added when LoFi slow connections are used and the network quality estimator
+  # returns 4G.
+  def testLoFiIfHeavyFastConnection(self):
+    with TestDriver() as test_driver:
+      test_driver.AddChromeArg('--enable-spdy-proxy-auth')
+      test_driver.AddChromeArg('--data-reduction-proxy-lo-fi=slow-connections-'
+                               'only')
+      # Disable server experiments.
+      test_driver.AddChromeArg('--data-reduction-proxy-server-experiments-'
+                               'disabled')
+
+      test_driver.AddChromeArg('--force-fieldtrial-params='
+                               'NetworkQualityEstimator.Enabled:'
+                               'force_effective_connection_type/4G')
+      test_driver.AddChromeArg('--force-fieldtrials=NetworkQualityEstimator/'
+                               'Enabled')
+
+      test_driver.LoadURL('http://check.googlezip.net/static/index.html')
+
+      non_lofi_responses = 0
+      for response in test_driver.GetHTTPResponses():
+        if not response.url.endswith('png'):
+          continue
+        if not response.request_headers:
+          continue
+        self.assertIn('chrome-proxy-accept-transform', response.request_headers)
+        actual_cpat_headers = \
+          response.request_headers['chrome-proxy-accept-transform'].split(';')
+        self.assertIn('empty-image', actual_cpat_headers)
+        self.assertIn('if-heavy', actual_cpat_headers)
+        if (not self.checkLoFiResponse(response, False)):
+          non_lofi_responses = non_lofi_responses + 1
+
+      # Verify that non Lo-Fi image responses were seen.
+      self.assertNotEqual(0, non_lofi_responses)
+
   # Checks that Lo-Fi placeholder images are not loaded from cache on page
   # reloads when Lo-Fi mode is disabled or data reduction proxy is disabled.
   # First a test page is opened with Lo-Fi and chrome proxy enabled. This allows
diff --git a/src/tools/chrome_proxy/webdriver/smoke.py b/src/tools/chrome_proxy/webdriver/smoke.py
index ad799d6..ff99fdf 100644
--- a/src/tools/chrome_proxy/webdriver/smoke.py
+++ b/src/tools/chrome_proxy/webdriver/smoke.py
@@ -65,6 +65,33 @@
         self.assertHasChromeProxyViaHeader(response)
         self.assertEqual(200, response.status)
 
+  # Verify unique page IDs are sent in the Chrome-Proxy header.
+  def testPageID(self):
+    with TestDriver() as t:
+      t.AddChromeArg('--enable-spdy-proxy-auth')
+      page_identifiers = []
+      page_loads = 5
+
+      for i in range (0, page_loads):
+        t.LoadURL('http://check.googlezip.net/test.html')
+        responses = t.GetHTTPResponses()
+        self.assertEqual(2, len(responses))
+        pid_in_page_count = 0
+        page_id = ''
+        for response in responses:
+          self.assertHasChromeProxyViaHeader(response)
+          self.assertEqual(200, response.status)
+          chrome_proxy_header = response.request_headers['chrome-proxy']
+          chrome_proxy_directives = chrome_proxy_header.split(',')
+          for directive in chrome_proxy_directives:
+            if 'pid=' in directive:
+              pid_in_page_count = pid_in_page_count+1
+              page_id = directive.split('=')[1]
+              self.assertNotEqual('', page_id)
+              self.assertNotIn(page_id, page_identifiers)
+        page_identifiers.append(page_id)
+        self.assertEqual(1, pid_in_page_count)
+
   # Ensure that block causes resources to load from the origin directly.
   def testCheckBlockIsWorking(self):
     with TestDriver() as t:
diff --git a/src/tools/chrome_proxy/webdriver/variations_combinations.py b/src/tools/chrome_proxy/webdriver/variations_combinations.py
new file mode 100644
index 0000000..3471a41
--- /dev/null
+++ b/src/tools/chrome_proxy/webdriver/variations_combinations.py
@@ -0,0 +1,101 @@
+# Copyright 2017 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import os
+import re
+import sys
+import time
+import unittest
+
+import common
+
+
+combinations = [
+  # One object for each set of tests to run with the given variations.
+  {
+    'label': 'dummy example',
+    'tests': [
+      # Of the form <file_name>.<class_name>.<method_name>
+      # Also accepts wildcard (*) as matching anything.
+      "lite_page.LitePage.testLitePage",
+      "lite_page.LitePage.testLitePageFallback",
+      "quic*"
+    ],
+    'variations': [
+      "DataReductionProxyUseQuic/Enabled",
+      "DataCompressionProxyLoFi/Enabled_Preview",
+      "DataCompressionProxyLitePageFallback/Enabled"
+    ],
+    'variations-params': [
+      "DataCompressionProxyLoFi.Enabled_Preview:effective_connection_type/4G"
+    ]
+  }
+]
+
+
+def GetAllTestsFromRegexList(test_list, test_suite_iter):
+  """A helper function to make a test suite from tests matching the given list.
+
+  Args:
+    test_list: a string list of all tests to run, allowing for simple regex
+    test_suite_iter: An iterator of all test suites to search
+  Returns:
+    a test suite with all the tests specified by the test_list
+  """
+  id_to_test_map = {}
+  for test_suite in test_suite_iter:
+    for test_case in test_suite:
+      for test_method in test_case:
+        id_to_test_map[test_method.id()] = test_method
+  my_test_suite = unittest.TestSuite()
+  for test_spec in test_list:
+    regex = re.compile('^' + test_spec.replace('.', '\\.').replace('*', '.*')
+      + '$')
+    for test_id in sorted(id_to_test_map):
+      if regex.match(test_id):
+        my_test_suite.addTest(id_to_test_map[test_id])
+  return my_test_suite
+
+def ParseFlagsWithExtraBrowserArgs(extra_args):
+  """Generates a function to override common.ParseFlags.
+
+  The returned function will honor everything in the original ParseFlags(), but
+  adds on additional browser_args.
+
+  Args:
+    extra_args: The extra browser agruments to add.
+  Returns:
+    A function to override common.ParseFlags with additional browser_args.
+  """
+  original_flags = common.ParseFlags()
+  def AddExtraBrowserArgs():
+    original_flags.browser_args = ((original_flags.browser_args if
+      original_flags.browser_args else '') + ' ' + extra_args)
+    return original_flags
+  return AddExtraBrowserArgs
+
+def main():
+  """Runs each set of tests against its set of variations.
+
+  For each test combination, the above variation specifications will be used to
+  setup the browser arguments for each test given above that will be run.
+  """
+  flags = common.ParseFlags()
+  for variation_test in combinations:
+    # Set browser arguments to use the given variations.
+    extra_args = '--force-fieldtrials=' + '/'.join(variation_test['variations'])
+    extra_args += ' --force-fieldtrial-params=' + ','.join(
+      variation_test['variations-params'])
+    common.ParseFlags = ParseFlagsWithExtraBrowserArgs(extra_args)
+    # Run the given tests.
+    loader = unittest.TestLoader()
+    test_suite_iter = loader.discover(os.path.dirname(__file__), pattern='*.py')
+    my_test_suite = GetAllTestsFromRegexList(variation_test['tests'],
+      test_suite_iter)
+    testRunner = unittest.runner.TextTestRunner(verbosity=2,
+      failfast=flags.failfast, buffer=(not flags.disable_buffer))
+    testRunner.run(my_test_suite)
+
+if __name__ == '__main__':
+  main()
diff --git a/src/tools/gn/docs/reference.md b/src/tools/gn/docs/reference.md
index 4b88f55..735e5f9 100644
--- a/src/tools/gn/docs/reference.md
+++ b/src/tools/gn/docs/reference.md
@@ -4941,7 +4941,7 @@
   via the "check" command (see "gn help check").
 
   If no public files are declared, other targets (assuming they have visibility
-  to depend on this target can include any file in the sources list. If this
+  to depend on this target) can include any file in the sources list. If this
   variable is defined on a target, dependent targets may only include files on
   this whitelist.
 
diff --git a/src/tools/gn/variables.cc b/src/tools/gn/variables.cc
index 66460e9..d304bc5 100644
--- a/src/tools/gn/variables.cc
+++ b/src/tools/gn/variables.cc
@@ -1552,7 +1552,7 @@
   via the "check" command (see "gn help check").
 
   If no public files are declared, other targets (assuming they have visibility
-  to depend on this target can include any file in the sources list. If this
+  to depend on this target) can include any file in the sources list. If this
   variable is defined on a target, dependent targets may only include files on
   this whitelist.
 
diff --git a/src/tools/licenses.py b/src/tools/licenses.py
index b47ea4e..868f41f 100755
--- a/src/tools/licenses.py
+++ b/src/tools/licenses.py
@@ -605,7 +605,8 @@
     # Sort by size in order to improve gzip compression ratio (puts similar
     # licenses near each other). The licenses are re-sorted by the JavaScript
     # when loaded.
-    entries.sort(key=lambda entry: len(entry['content']))
+    entries.sort(key=lambda entry: (len(entry['content']),
+                                    entry['name'], entry['content']))
 
     entries_contents = '\n'.join([entry['content'] for entry in entries])
     file_template = open(file_template_file).read()
diff --git a/src/tools/mb/mb_config.pyl b/src/tools/mb/mb_config.pyl
index f59f6d4..1aed228 100644
--- a/src/tools/mb/mb_config.pyl
+++ b/src/tools/mb/mb_config.pyl
@@ -200,6 +200,7 @@
       'Mac deterministic': 'release_bot_mac_strip',
       'Mac deterministic (dbg)': 'debug_bot',
       'Mojo ChromiumOS': 'chromeos_with_codecs_ozone_release_trybot',
+      'Mojo Linux': 'release_bot',
       'Mojo Windows': 'release_bot_x86',
       'Ozone Linux': 'release_bot_ozone_linux',
       'Site Isolation Android': 'android_release_bot_minimal_symbols_arm64',
@@ -423,30 +424,8 @@
       'Windows Dev': 'debug_bot',
     },
 
-    'official.desktop': {
-      'linux64': 'official',
-      'mac64': 'official',
-      'mac64-recipes': 'official',
-
-      # Currently the official bots set mini_installer_official_deps=1
-      # but it's not clear if that's actually used anywhere.
-      'win': 'official_x86',
-      'win-asan': 'official_syzyasan_x86',
-      'win-clang': 'official_clang_x86',
-      'win-pgo': {
-        '1': 'official_chrome_pgo_phase_1_x86',
-        '2': 'official_chrome_pgo_phase_2_x86',
-      },
-      'win64': 'official',
-      'win64-clang': 'official_clang',
-      'win64-pgo': {
-        '1': 'official_chrome_pgo_phase_1',
-        '2': 'official_chrome_pgo_phase_2',
-      },
-      # TODO(mmoss): Remove this once all official Windows recipes are working.
-      'win-recipes': 'official',
-    },
-
+    # TODO(mmoss): Move these to mb_configs_official.pyl in the release repo
+    # once the continuous builders are migrated to use recipes from that repo.
     'official.desktop.continuous': {
       'mac beta': 'official',
       'mac stable': 'official',
@@ -579,6 +558,8 @@
       # builds (and we only store baselines for release builds).
       'linux_layout_tests_layout_ng': 'release_bot',
 
+      'linux_mojo': 'release_trybot',
+      'linux_mojo_chromeos': 'release_trybot',
       'linux_nacl_sdk_build': 'release_bot',
       'linux_nacl_sdk': 'release_bot',
       'linux_optional_gpu_tests_rel': 'gpu_fyi_tests_release_trybot',
@@ -625,6 +606,7 @@
       'linux_perf_bisect': 'official_goma',
       'linux_perf_bisect_builder': 'official_goma',
       'linux_perf_cq': 'official_goma',
+      'Mac Builder': 'official_goma',
       'mac_10_10_perf_bisect': 'official_goma',
       'mac_10_11_perf_bisect': 'official_goma',
       'mac_fyi_perf_bisect': 'official_goma',
@@ -663,6 +645,7 @@
       'win_clang_rel': 'clang_official_release_trybot_x86',
       'win_clang_x64_dbg': 'win_clang_debug_bot',
       'win_clang_x64_rel': 'clang_official_release_trybot',
+      'win_mojo': 'release_trybot_x86',
       'win_nacl_sdk': 'release_bot_x86',
       'win_nacl_sdk_build': 'release_bot_x86',
       'win_optional_gpu_tests_rel': 'gpu_tests_deqp_gles_release_trybot_x86',
@@ -722,7 +705,7 @@
     ],
 
     'android_cronet_data_reduction_proxy_release_bot_minimal_symbols_arm_no_neon': [
-      'android', 'cronet', 'data_reduction_proxy', 'release_bot', 'minimal_symbols', 'arm_no_neon',
+      'android', 'cronet', 'release_bot', 'minimal_symbols', 'arm_no_neon',
     ],
 
     'android_cronet_debug_static_bot_arm64': [
@@ -738,7 +721,7 @@
     ],
 
     'android_cronet_data_reduction_proxy_release_bot_minimal_symbols_arm_no_neon': [
-      'android', 'cronet', 'data_reduction_proxy', 'release_bot', 'minimal_symbols', 'arm_no_neon',
+      'android', 'cronet', 'release_bot', 'minimal_symbols', 'arm_no_neon',
     ],
 
     'android_cronet_debug_static_bot_arm64': [
@@ -1314,34 +1297,10 @@
       'official',
     ],
 
-    'official_chrome_pgo_phase_1': [
-      'official', 'chrome_pgo_phase_1',
-    ],
-
-    'official_chrome_pgo_phase_1_x86': [
-      'official', 'chrome_pgo_phase_1', 'x86',
-    ],
-
-    'official_chrome_pgo_phase_2': [
-      'official', 'chrome_pgo_phase_2',
-    ],
-
-    'official_chrome_pgo_phase_2_x86': [
-      'official', 'chrome_pgo_phase_2', 'x86',
-    ],
-
-    'official_clang': [
-      'clang', 'official',
-    ],
-
     'official_goma_minimal_symbols_clang': [
       'official', 'goma', 'minimal_symbols', 'clang',
     ],
 
-    'official_clang_x86': [
-      'clang', 'official', 'x86',
-    ],
-
     'official_goma': [
       'official', 'goma',
     ],
@@ -1386,14 +1345,6 @@
       'official', 'six_concurrent_links',
     ],
 
-    'official_syzyasan_x86': [
-      'official', 'syzyasan', 'x86',
-    ],
-
-    'official_x86': [
-      'official', 'x86',
-    ],
-
     'release_bot_ozone_linux': [
       'release_bot', 'ozone', 'ozone_linux',
     ],
@@ -1654,10 +1605,6 @@
       'cros_passthrough': True,
     },
 
-    'data_reduction_proxy': {
-      'gn_args': 'cronet_enable_data_reduction_proxy_support=true',
-    },
-
     'dcheck_always_on': {
       'gn_args': 'dcheck_always_on=true',
     },
@@ -1687,7 +1634,7 @@
     },
 
     'edge': {
-      'gn_args': 'sanitizer_coverage_flags="edge"',
+      'gn_args': 'sanitizer_coverage_flags="trace-pc-guard"',
     },
 
     # This mixin is used to force configs that use it to fail. It
@@ -1729,10 +1676,7 @@
     'goma': {
       # The MB code will properly escape goma_dir if necessary in the GYP
       # code path; the GN code path needs no escaping.
-      # We also set strip_absolute_paths to ensure that we can get deterministic
-      # builds. This isn't just on by default when goma is on so that devs
-      # can do goma builds but still be able to debug by default.
-      'gn_args': 'use_goma=true strip_absolute_paths_from_debug_symbols=true',
+      'gn_args': 'use_goma=true',
     },
 
     'gpu_fyi_tests': {
@@ -1783,7 +1727,7 @@
     },
 
     'minimal_symbols': {
-      'gn_args': 'symbol_level=1',
+      'gn_args': 'symbol_level=1 strip_absolute_paths_from_debug_symbols=true',
     },
 
     'mipsel': {
diff --git a/src/tools/metrics/actions/actions.xml b/src/tools/metrics/actions/actions.xml
index cb16b84..96d85a9 100644
--- a/src/tools/metrics/actions/actions.xml
+++ b/src/tools/metrics/actions/actions.xml
@@ -1085,12 +1085,12 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
-<action name="ActiveBrowserChanged">
+<action name="ActiveBrowserChanged" not_user_triggered="true">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
-<action name="ActiveTabChanged">
+<action name="ActiveTabChanged" not_user_triggered="true">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
@@ -8783,7 +8783,7 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
-<action name="Launcher_ButtonPressed_Mouse">
+<action name="Launcher_ButtonPressed_Mouse" not_user_triggered="true">
   <owner>bruthig@google.com</owner>
   <owner>tdanderson@google.com</owner>
   <description>
@@ -8791,7 +8791,7 @@
   </description>
 </action>
 
-<action name="Launcher_ButtonPressed_Touch">
+<action name="Launcher_ButtonPressed_Touch" not_user_triggered="true">
   <owner>bruthig@google.com</owner>
   <owner>tdanderson@google.com</owner>
   <description>
@@ -8809,6 +8809,11 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="Launcher_Dismiss">
+  <owner>vadimt@chromium.org</owner>
+  <description>Launcher got dismissed.</description>
+</action>
+
 <action name="Launcher_LaunchTask">
   <owner>bruthig@google.com</owner>
   <owner>tdanderson@google.com</owner>
@@ -14356,6 +14361,21 @@
   </description>
 </action>
 
+<action name="SearchAnswer_OpenedUrl">
+  <owner>vadimt@chromium.org</owner>
+  <description>User opens URL from an answer card.</description>
+</action>
+
+<action name="SearchAnswer_StoppedLoading">
+  <owner>vadimt@chromium.org</owner>
+  <description>Answer card successfully loads.</description>
+</action>
+
+<action name="SearchAnswer_UserInteraction">
+  <owner>vadimt@chromium.org</owner>
+  <description>User interacts with an answer card.</description>
+</action>
+
 <action name="SearchEngine_ManualChange">
   <owner>ianwen@chromium.org</owner>
   <description>
@@ -16243,7 +16263,7 @@
   <description>Logged on an ET_SCROLL_FLING_START gesture event.</description>
 </action>
 
-<action name="Touchscreen_Down">
+<action name="Touchscreen_Down" not_user_triggered="true">
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
diff --git a/src/tools/metrics/histograms/histograms.before.pretty-print.xml b/src/tools/metrics/histograms/histograms.before.pretty-print.xml
new file mode 100644
index 0000000..86653f2
--- /dev/null
+++ b/src/tools/metrics/histograms/histograms.before.pretty-print.xml
@@ -0,0 +1,113444 @@
+<!--
+Copyright 2013 The Chromium Authors. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the LICENSE file.
+-->
+
+<!--
+This file is used to generate a comprehensive list of Chrome histograms along
+with a detailed description for each histogram.
+
+For best practices on writing histogram descriptions, see
+https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md
+For details on how to modify this file to add your description, keep reading.
+
+Please pretty-print and validate your edits by running the pretty_print.py
+and validate_format.py scripts in the same directory as this file before
+uploading your change for review.
+
+Take a moment to page through the contents of this file. You will find
+three sections:
+
+* The histograms section describes base histograms, giving their name,
+  and optionally their units or enum type, a short one-line summary,
+  and optionally a more detailed description.
+* The enums section defines and documents the enumerated types referred to by
+  the histograms.
+* The histogram_suffixes section provides a compact way of defining histograms
+  by applying affixes to existing histograms. This could be done recursively
+  and the max recursion depth is 5. See the example below for details on how it
+  works.
+
+Each histogram_suffixes tag lists the histograms that it affects. The complete
+list of histograms is computed by appending (or prepending - see below) the
+histogram_suffixes suffix names to each of the affected histograms. For example,
+define the following:
+
+  <histogram name="FileLoadLatency"/>
+
+  <histogram_suffixes name="SuperHttpExperiment">
+    <suffix name="SuperHttpEnabled"/>
+    <suffix name="SuperHttpDisabled"/>
+    <affected-histogram name="FileLoadLatency"/>
+  </histogram_suffixes>
+
+The complete list of histograms will be:
+
+  FileLoadLatency
+  FileLoadLatency_SuperHttpEnabled
+  FileLoadLatency_SuperHttpDisabled
+
+histogram_suffixes can also be used to insert affix in the middle. Example:
+
+  <histogram name="Prerender.Events"/>
+
+  <histogram_suffixes name="SuperHttpExperiment" ordering="prefix">
+    <suffix name="HoverStats50"/>
+    <affected-histogram name="Prerender.Events"/>
+  </histogram_suffixes>
+
+The complete list of histograms will be:
+
+  Prerender.Events
+  Prerender.HoverStats50_Events
+
+When 'ordering="prefix"' is present in the histogram_suffixes tag, the suffix
+will be inserted after the first dot separator of the affected-histogram name.
+Therefore, the affected-histogram name has to have at least one dot in it.
+
+Googlers: There are also a small number of private internal histograms found at
+http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
+-->
+
+<histogram-configuration>
+
+<!-- Histogram definitions -->
+
+<histograms>
+
+<histogram name="Accessibility.CrosAlwaysShowA11yMenu" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the Chrome OS Accessibility Menu is set to be shown regardless of
+    the state of a11y features.(checked once 45 secs after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosAutoclick" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>tengs@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS Autoclick feature is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosAutoclickDelay" units="ms">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>tengs@chromium.org</owner>
+  <summary>
+    If the user has enabled Autoclick, this is the delay set by the user for
+    autoclicks to occur, in milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosCaretHighlight" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS caret highlighting is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosChromeVoxNext" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <summary>
+    Set when a Chrome OS user has spoken feedback enabled, recorded once each
+    time ChromeVox starts up. True if the user has enabled &quot;ChromeVox
+    Next&quot;, a new ChromeVox experience that became the default in Chrome 56
+    (but can be toggled on or off by the user), false otherwise.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosCursorHighlight" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS cursor highlighting is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosFocusHighlight" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS focus highlighting is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosHighContrast" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the Chrome OS High Contrast mode feature is on (checked once 45 secs
+    after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosLargeCursor" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the Chrome OS Large Cursor feature is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosScreenMagnifier" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the Chrome OS Screen Magnifier feature is on (checked once 45 secs
+    after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosSelectToSpeak" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS select-to-speak is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosSpokenFeedback" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the Chrome OS Spoken Feedback feature is on (checked once 45 secs
+    after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosStickyKeys" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>tengs@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS Sticky Keys feature is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosSwitchAccess" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <summary>
+    Whether the Chrome OS switch access is on (checked once 45 secs after
+    startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.CrosVirtualKeyboard" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the Chrome OS Virtual Keyboard feature is on (checked once 45 secs
+    after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.InvertedColors" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether Windows system settings show that high-contrast mode is enabled and
+    the user has selected a light-on-dark color scheme (checked once 45 secs
+    after startup). This causes Chrome to prompt the user with a bubble to
+    optionally install a High Contrast extension and theme.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.Mac.DifferentiateWithoutColor"
+    enum="BooleanEnabled">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Whether the &quot;differentiate without color&quot; Mac system setting is
+    enabled. This is checked once, 45 seconds after startup.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.Mac.FullKeyboardAccessEnabled"
+    enum="BooleanEnabled">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Whether the &quot;full keyboard access&quot; Mac system setting is enabled.
+    This is checked once, 45 seconds after startup.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.Mac.IncreaseContrast" enum="BooleanEnabled">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Whether the &quot;increase contrast&quot; Mac system setting is enabled.
+    This is checked once, 45 seconds after startup.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.Mac.ReduceTransparency" enum="BooleanEnabled">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Whether the &quot;reduce transparency&quot; Mac system setting is enabled.
+    This is checked once, 45 seconds after startup.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.ManuallyEnabled" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether Chrome has enabled accessibility support because the user passed the
+    --force-renderer-accessibility flag on the command-line (checked once 45
+    secs after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.State" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether Chrome has enabled accessibility support because it detects
+    supported assistive technology running, or due to being manually enabled via
+    a command-line flag (checked once 45 secs after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinAPIs" enum="AccessibilityWinAPIEnum">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>nektar@chromium.org</owner>
+  <summary>Tracks usage of all public Windows accessibility APIs.</summary>
+</histogram>
+
+<histogram name="Accessibility.WinAudioDescription" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether Windows system settings show that audio descriptions are enabled
+    (checked once 45 secs after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinJAWS" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the third-party JAWS screen reader is running (checked once 45 secs
+    after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinNVDA" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the third-party NVDA screen reader is running (checked once 45 secs
+    after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinSAToGo" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the third-party System Access To Go screen reader is running
+    (checked once 45 secs after startup).
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinScreenReader" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether Windows system settings show that a screen reader is running
+    (checked once 45 secs after startup). Note that this does not necessarily
+    mean that Chrome has detected a supported screen reader and has enabled its
+    accessibility mode.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinStickyKeys" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether Windows system settings show that Sticky Keys are enabled.
+  </summary>
+</histogram>
+
+<histogram name="Accessibility.WinZoomText" enum="BooleanEnabled">
+  <owner>dmazzoni@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Whether the third-party ZoomText screen magnifier is running.
+  </summary>
+</histogram>
+
+<histogram name="ActivityTracker.Collect.InitStatus"
+    enum="ActivityTrackerCollectInitStatus">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Status of the initialization to collect stability debug files. Logged once,
+    during the initialization of the stability debug file collection.
+  </summary>
+</histogram>
+
+<histogram name="ActivityTracker.Collect.Status"
+    enum="ActivityTrackerCollectStatus">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Status for the collection of a stability debug file. Logged each time a
+    debug file collection attempt is made.
+  </summary>
+</histogram>
+
+<histogram name="ActivityTracker.Collect.TotalTime" units="ms">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Time spent collecting stability debug information. Logged each time a
+    collection is performed.
+  </summary>
+</histogram>
+
+<histogram name="ActivityTracker.Record.InitStatus"
+    enum="ActivityTrackerRecordInitStatus">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Status of internal activity tracking initialization. Logged once, during the
+    activity tracking initialization.
+  </summary>
+</histogram>
+
+<histogram name="ActivityTracker.ThreadTrackers.Count" units="count">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The number of threads being tracked for activities such as waiting for a
+    lock/event, a thread to join, or a task to run. Analysis of this data can
+    reveal why a thread will not exit. This value is updated every time a new
+    thread gets an activity tracked for the first time so will show one count
+    for every permanent thread but multiple counts for a thread than exits and
+    is replaced.
+  </summary>
+</histogram>
+
+<histogram name="ActivityTracker.ThreadTrackers.MemLimitTrackerCount"
+    units="count">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The limit on the number of thread trackers that could be allocated from the
+    persistent memory segment. Trackers beyond this number were allocated from
+    the heap and thus were not available for analysis. This value is updated on
+    every &quot;memory full&quot; failure.
+  </summary>
+</histogram>
+
+<histogram name="Android.Activity.ChromeTabbedActivity.StopReason"
+    enum="AndroidActivityStopReason">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    What caused ChromeTabbedActivity#onStop() to be called, which indicates that
+    Chrome is sent to the background.
+  </summary>
+</histogram>
+
+<histogram name="Android.Activity.ChromeTabbedActivity.SystemBackAction"
+    enum="AndroidActivitySystemBackAction">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    What happened when the user hit the system back button in
+    ChromeTabbedActivity.
+  </summary>
+</histogram>
+
+<histogram name="Android.ArmFpu" enum="AndroidArmFpu">
+  <owner>fdegans@chromium.org</owner>
+  <summary>
+    Reports the FPU capabilities of the Android ARM device. This is recorded
+    once per browser session during startup.
+  </summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.Filter"
+    enum="AndroidDownloadFilterType">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Recorded when the user selects a filter from the Chrome download manager
+    navigation drawer.
+  </summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.InitialCount">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    The number of non-incognito download items displayed when the download UI is
+    initialized.
+  </summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.Item.OpenFailed"
+    enum="AndroidDownloadFilterType">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>Recorded when a download fails to open.</summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.Item.OpenSucceeded"
+    enum="AndroidDownloadFilterType">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>Recorded when a download is opened.</summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.Share.Count">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>The number of downloads shared at the same time.</summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.Share.FileTypes"
+    enum="AndroidDownloadFilterType">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Recorded when downloads are shared through the download manager. A recorded
+    value of &quot;All&quot; indicates that multiple types of downloads were
+    shared.
+  </summary>
+</histogram>
+
+<histogram name="Android.DownloadManager.SpaceUsed" units="%">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>The percentage of total storage downloads consume.</summary>
+</histogram>
+
+<histogram name="Android.IsLastSharedAppInfoRetrieved"
+    enum="BooleanIsLastSharedAppInfoRetrieved">
+  <owner>jaekyun@chromium.org</owner>
+  <summary>
+    Signifies whether the last shared app information is retrieved successfully
+    or not. This is logged when configuring the direct sharing menu item.
+  </summary>
+</histogram>
+
+<histogram name="Android.KernelVersion" enum="AndroidKernelVersion">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    Reports the kernel major and minor version from the utsname.release field.
+    The low 16 bits of each version are combined into a 32-bit integer. The
+    range is from [0x00020006,0x0004000a] to track kernel versions 2.6 through
+    4.10.
+  </summary>
+</histogram>
+
+<histogram name="Android.ManageSpace.ActionTaken"
+    enum="AndroidManageSpaceButton">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when the user presses a button in the 'Manage Space' screen for
+    Chrome. Note: the 'Clear App Data' option is likely incorrect, as the result
+    of that button disables UMA recording (as we factory reset the app).
+  </summary>
+</histogram>
+
+<histogram name="Android.ModerateBindingCount" units="bindings">
+  <owner>jaekyun@chromium.org</owner>
+  <summary>
+    The number of moderate bindings which were kept while Chrome process is in
+    the foreground. This is logged right before Chrome process goes into the
+    background.
+  </summary>
+</histogram>
+
+<histogram name="Android.MultiInstanceMigration.FailedToRenameMetadataFile"
+    enum="Boolean">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Renaming the old tab metadata file failed during multi-instance migration.
+    Only true is recorded.
+  </summary>
+</histogram>
+
+<histogram name="Android.MultiInstanceMigration.NewMetadataFileExists"
+    enum="Boolean">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The new tab metadata file already existed when multi-instance migration was
+    attempted. Only true is recorded.
+  </summary>
+</histogram>
+
+<histogram name="Android.MultiWindowMode.Active" enum="BooleanEnabled">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Records on every metrics upload whether the activity is running in Android N
+    multi-window mode or not.
+  </summary>
+</histogram>
+
+<histogram name="Android.MultiWindowMode.IsTabletScreenWidthBelow600"
+    enum="Boolean">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Records whether the screen width is below 600dp when the activity is in
+    Android N multi-window mode. True if the screen width is less than 600dp and
+    false if is greater than or equal to 600dp.
+  </summary>
+</histogram>
+
+<histogram name="Android.MultiWindowMode.TabletScreenWidth" units="dp">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Records the screen width in dp when the activity is in Android N
+    multi-window mode and the width is below 600dp.
+  </summary>
+</histogram>
+
+<histogram name="Android.NativeLibraryPreloader.Result.Browser"
+    enum="NativeLibraryPreloaderResult">
+  <owner>michaelbai@chromium.org</owner>
+  <summary>
+    The return value of NativeLibraryPreloader.loadLibrary() in browser process,
+    is recorded once per browser process start.
+  </summary>
+</histogram>
+
+<histogram name="Android.NativeLibraryPreloader.Result.Renderer"
+    enum="NativeLibraryPreloaderResult">
+  <owner>michaelbai@chromium.org</owner>
+  <summary>
+    The return value of NativeLibraryPreloader.loadLibrary() in renderer
+    process, is recorded once per renderer process start.
+  </summary>
+</histogram>
+
+<histogram name="Android.NTP.Impression" enum="NTPImpressionType">
+  <owner>finkm@chromium.org</owner>
+  <summary>
+    Counts impressions of the NTP on Android. It also counts potential
+    impressions. A potential impression is a place where it would make sense to
+    open the NTP instead of the current view. E.g. the no-tab view is counted as
+    a potential impression since this view could be replaced with the NTP. For
+    better comparison regular impressions are also counted. The no-tab view
+    counting happens right after the user closed the last tab and the regular
+    impression counting happens at construction time of the NTP (=whenever a new
+    tab is opened).
+  </summary>
+</histogram>
+
+<histogram name="Android.SeccompStatus.Prctl" enum="AndroidSeccompStatus">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    Reports the level of kernel support for the seccomp-bpf sandbox using
+    prctl(PR_SET_SECCOMP).
+  </summary>
+</histogram>
+
+<histogram name="Android.SeccompStatus.RendererSandbox"
+    enum="AndroidSeccompSandboxStatus">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    Reports the status of the seccomp-bpf sandbox in renderer processes.
+    Anything other than &quot;Sandbox Engaged&quot; indicates the sandbox is not
+    turned on. See https://crbug.com/477049.
+  </summary>
+</histogram>
+
+<histogram name="Android.SeccompStatus.Syscall" enum="AndroidSeccompStatus">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    Reports the level of kernel support for the seccomp-bpf sandbox using the
+    seccomp system call.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.CheckGooglePlayServicesTime" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from checking for
+    whether play services is available.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.CheckGoogleSignedTime" units="ms">
+  <owner>estevenson@chromium.org</owner>
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from checking for
+    whether a package is Google signed.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.DocumentModeSharedPrefs" units="ms">
+  <obsolete>
+    Deprecated 05/2016 in Issue 582539 with the removal of document mode.
+  </obsolete>
+  <owner>hartmanng@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from fetching the
+    DocumentMode shared preferences file.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.DocumentTabStateLoad" units="ms">
+  <obsolete>
+    Deprecated 05/2016 in Issue 582539 with the removal of document mode.
+  </obsolete>
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from document mode
+    loading its prioritized tab's state.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.DownloadsDir" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from fetching and
+    possibly creating the downloads directory.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.NotificationUIBuildTime" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from custom
+    notification builder through date formatting.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms">
+  <owner>yfriedman@chromium.org</owner>
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from calling out
+    to Android activity manager.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.SnippetUIBuildTime" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>peconn@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from snippet UI
+    through date formatting.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.TabPersistentStore" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures time spent during StrictMode-whitelisted code in
+    TabPersistentStore.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.ThumbnailCacheDir" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from fetching for
+    the thumbnail cache directory.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.WebappAuthenticatorMac" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from looking up a
+    webapp's MAC on startup.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.WebappDir" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from fetching for
+    creating the webapp directory.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.WebappSaveState" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from reading and
+    saving webapp state.
+  </summary>
+</histogram>
+
+<histogram name="Android.StrictMode.WebappSharedPrefs" units="ms">
+  <owner>hartmanng@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Measures the amount of time due to a StrictMode violation from fetching the
+    Webapp shared preferences file.
+  </summary>
+</histogram>
+
+<histogram name="Android.TabNavigationInterceptResult"
+    enum="NavigationInterceptResult">
+  <owner>mariakhomenko@chromium.org</owner>
+  <summary>
+    The distribution of results when running ExternalNavigationHandler, this
+    shows how often we send intents to be handled by other applications.
+  </summary>
+</histogram>
+
+<histogram name="Android.TabPersistentStore.MergeStateMetadataFileSize"
+    units="bytes">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of bytes read for the other tab state's metadata file when
+    merging tab states in Android N+.
+  </summary>
+</histogram>
+
+<histogram name="Android.TabPersistentStore.MergeStateTabCount" units="tabs">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of normal and incognito tabs merged (for Android N+
+    multi-instance). This will be logged for both cold-start and non-cold-start
+    merging assuming that the native library is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Android.TabPersistentStore.MergeStateTimePerTab" units="ms">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Measures the amount of time it takes to restore state for each merged tab
+    (for Android N+ multi-instance). This will only be logged for non-cold-start
+    merging, because restoring merged tabs is not distingushed from restoring
+    regular tabs on cold start.
+  </summary>
+</histogram>
+
+<histogram name="Android.TabPersistentStore.MetadataFileSize">
+  <owner>wnwen@chromium.org</owner>
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>The number of bytes written for the tab metadata file.</summary>
+</histogram>
+
+<histogram name="AndroidTabCloseUndo.Toast"
+    enum="AndroidTabCloseUndoToastEvent">
+  <owner>dtrainor@chromium.org</owner>
+  <summary>
+    When a user closes a tab an undo toast will popup on certain devices giving
+    the user the chance to undo closing that tab.  This stat tracks how the user
+    interacts with that UI and what actions they take.  A cold start means that
+    the undo bar wasn't showing when it was triggered to show again.  A warm
+    start means that it was.  Warm starts can happen when the user closes
+    multiple tabs close together.  When the undo bar is dismissed, all closes
+    that were queued up to be undone are committed.  This can happen either by a
+    timeout or by an action by the user to move to another part of the UI.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.BeforeInstallEvent"
+    enum="AppBannersBeforeInstallEvent">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat tracks
+    usage of the BeforeInstallPromptEvent, which allows developers to control
+    when an app banner appears. The events in this histogram are not mutually
+    exclusive - for example, preventDefault() must be called if prompt() is
+    called.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.DismissEvent" enum="AppBannersDismissEvent">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat tracks
+    the different ways that an app banner left the screen, e.g. through an
+    automatic dismissal after navigation or an explicit user action.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.DisplayEvent" enum="AppBannersDisplayEvent">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat tracks
+    when an app banner was requested and how the request was handled, e.g. the
+    user blocked its appearance or the banner was ultimately created.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.InstallableStatusCode"
+    enum="AppBannersInstallableStatusCode">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat tracks
+    the status code logged by the app banner system as it processes a site's
+    eligibility for an app banner. Every request for a banner will be logged in
+    a bucket of this histogram.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.InstallEvent" enum="AppBannersInstallEvent">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat tracks
+    when a user triggers an install dialog for the app promoted by the banner,
+    as well as whether or not the user ultimately decided to install the app.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.MinutesFromFirstVisitToBannerShown" units="minutes">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat tracks
+    the number of minutes between the first recorded visit to an origin and the
+    time when the banner is actually shown.
+  </summary>
+</histogram>
+
+<histogram name="AppBanners.UserResponse" enum="AppBannersUserResponse">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    App banners promote an application related to the current website, and are
+    requested specifically through the current page's HTML.  This stat
+    specifically tracks a user's response to a displayed banner.
+  </summary>
+</histogram>
+
+<histogram name="appcache.CheckResponseResult"
+    enum="AppCacheCheckResponseResult">
+  <owner>michaeln@chromium.org</owner>
+  <summary>AppCache check response result code.</summary>
+</histogram>
+
+<histogram name="appcache.CompletionQueueTime" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time elapsed between a completion task being queued and run.
+  </summary>
+</histogram>
+
+<histogram name="appcache.CompletionRunTime" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    The amount of time taken to run a completion task on the IO thread.
+  </summary>
+</histogram>
+
+<histogram name="appcache.CorruptionDetected">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Tracks the number of times corruption is detected in the sql database.
+  </summary>
+</histogram>
+
+<histogram name="appcache.InitResult" enum="AppCacheInitResult">
+  <owner>michaeln@chromium.org</owner>
+  <summary>AppCache initialization result code.</summary>
+</histogram>
+
+<histogram name="appcache.JobStartDelay.AppCache" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    How long URLRequests to be retrieved from the appcache are delayed.
+  </summary>
+</histogram>
+
+<histogram name="appcache.JobStartDelay.Error" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    How long URLRequests that result in a synthesized error are delayed.
+  </summary>
+</histogram>
+
+<histogram name="appcache.JobStartDelay.Network" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    How long URLRequests to be retrieved over the network are delayed.
+  </summary>
+</histogram>
+
+<histogram name="appcache.MainPageLoad" enum="BooleanSecure">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Counts the number of appcached page loads for secure vs insecure origins.
+  </summary>
+</histogram>
+
+<histogram name="appcache.MainResourceResponseRetrieval" enum="BooleanSuccess">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Tracks the success rate of retrieving a main resource from the appcache.
+  </summary>
+</histogram>
+
+<histogram name="appcache.MissingManifestDetectedAtCallsite"
+    enum="AppCacheErrorSite">
+  <owner>michaeln@chromium.org</owner>
+  <summary>Identifies where a missing manifest was detected occured.</summary>
+</histogram>
+
+<histogram name="appcache.MissingManifestEntry" enum="BooleanSuccess">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Logged on each occurrence of there being no record for the manifest file in
+    the entries table.
+  </summary>
+</histogram>
+
+<histogram name="appcache.ReinitAttempt">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Tracks the number of times the appcache reinit process occurs. The boolean
+    value indicates whether it was a repeated attempt to reinitialize during a
+    browsing session.
+  </summary>
+</histogram>
+
+<histogram name="appcache.SubResourceResponseRetrieval" enum="BooleanSuccess">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Tracks the success rate of retrieving a sub resource from the appcache.
+  </summary>
+</histogram>
+
+<histogram name="appcache.TaskQueueTime" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time elapsed between a background task being queued and run.
+  </summary>
+</histogram>
+
+<histogram name="appcache.TaskRunTime" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>The amount of time taken to run a background task.</summary>
+</histogram>
+
+<histogram name="appcache.UpdateJobResult" enum="AppCacheUpdateJobResult">
+  <owner>michaeln@chromium.org</owner>
+  <summary>AppCache update job result code.</summary>
+</histogram>
+
+<histogram name="appcache.UpdateProgressAtPointOfFaliure" units="%">
+  <owner>michaeln@chromium.org</owner>
+  <summary>Percent completion at point of failure of an update job.</summary>
+</histogram>
+
+<histogram name="appcache.UpdateWasOffOriginAtPointOfFailure" enum="Boolean">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Whether the resource causing the failure was from a different origin.
+  </summary>
+</histogram>
+
+<histogram name="appcache.UpdateWasStalledAtPointOfFailure" enum="Boolean">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Whether any progresss had been made in the 5 minutes preceeding failure.
+  </summary>
+</histogram>
+
+<histogram name="AppleScript.CommandEvent" enum="AppleScriptCommandEvents">
+  <owner>spqchan@chromium.org</owner>
+  <summary>The number of times an AppleScript event gets called.</summary>
+</histogram>
+
+<histogram name="Apps.AppInfoDialog.Launches" enum="AppInfoDialogLaunchOrigin">
+  <owner>sashab@chromium.org</owner>
+  <summary>
+    The number of times the app info dialog is launched. This is gathered each
+    time the app info dialog is opened, from each of the places the dialog can
+    be opened from.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppInfoDialog.OpenedForLocation" enum="AppLocation">
+  <owner>sashab@chromium.org</owner>
+  <summary>
+    The location of the app that the dialog was opened for. This is gathered
+    each time the app info dialog is opened.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppInfoDialog.OpenedForType" enum="ExtensionType">
+  <owner>sashab@chromium.org</owner>
+  <summary>
+    The type of the app that the dialog was opened for. This is gathered each
+    time the app info dialog is opened.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppLaunch" enum="AppLaunch">
+  <owner>tapted@chromium.org</owner>
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    The number of times v2 packaged apps are launched grouped by
+    extension_misc::AppLaunchBuckets. See also Extensions.AppLaunch.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppLauncherPromo" enum="AppLauncherPromo">
+  <owner>mad@chromium.org</owner>
+  <summary>Interactions with the App Launcher promo dialog.</summary>
+</histogram>
+
+<histogram name="Apps.AppListCreationTime" units="ms">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The amount of time it takes to build the app list UI. This is logged each
+    time the app list is built from scratch.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListDoodleAction" enum="AppListDoodleAction">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The number of user interactions with the app list doodle. This is logged
+    once per action.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListHowEnabled" enum="AppListEnableSource">
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The trigger that caused the app list to be enabled. Recorded when the user
+    first shows the app list. If not shown after one hour, will be recorded
+    then. If Chrome was not running at the one-hour mark, will be recorded
+    during the next Chrome startup.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListPageOpened" enum="AppListPage">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The page that the app list goes to. This is gathered every time the user
+    initiates a transition to another page in the launcher.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListSearchCommenced" units="searches">
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The number of searches that are started in the app list. This is gathered
+    each time the app list search box transitions from empty to non-empty.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListSearchQueryLength" units="characters">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The length of the app list search query when a result is opened. This is
+    gathered per click of a search result.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListSearchResultDistanceFromOrigin" units="keystrokes">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The minimum number of arrow keys a user would need to press to navigate to
+    the opened search result. This is gathered per click of a search result.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListSearchResultOpenDisplayType"
+    enum="AppListSearchResultDisplayType">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The display type of the app list search result that was opened by the user.
+    This is gathered per click of a search result.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListSearchResultOpenType" enum="AppListSearchResult">
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The type of app list search result that was opened by the user. This is
+    gathered per click of a search result.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListTimeToDiscover" units="ms">
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    Time between enabling the app list, and a user explicitly choosing to show
+    it. If the app list is not shown after one hour, an entry in the last bucket
+    is recorded. If the user installs a second packaged app within one hour, or
+    if the app list was not enabled by installing a packaged app from the Web
+    Store, no time value is recorded - only Apps.AppListHowEnabled.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppListWarmupDuration" units="ms">
+  <obsolete>
+    Deprecated 07/2016 in Issue 600915 with the removal of the app list on
+    Windows.
+  </obsolete>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The amount of time spent in warmup (in WarmupForProfile call). This will
+    tell us how long warmup blocks the UI.
+  </summary>
+</histogram>
+
+<histogram name="Apps.AppShimErrorVersion">
+  <owner>jackhou@chromium.org</owner>
+  <summary>
+    Counts which major milestone versions of app_mode_loader are sending
+    --app-shim-error. --app-shim-error is sent as a command line argument to
+    Chrome when app_mode_loader was unable to dyload the Chrome Framework and
+    call ChromeAppModeMain. For example, when Chrome updates from 32-bit to
+    64-bit, an older shim will find the new framework version but fail to dyload
+    it.
+  </summary>
+</histogram>
+
+<histogram name="Arc.AndroidBootTime" units="ms">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>The time elapsed for booting up the ARC instance.</summary>
+</histogram>
+
+<histogram name="Arc.AppCount">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    The number of ARC apps open at any given time. Collected every 5 minutes.
+    This indicates both how many users are engaging with apps and, when they do
+    engage, how many apps they are engaging with at a time.
+  </summary>
+</histogram>
+
+<histogram name="Arc.AppsInstalledAtStartup" units="App Count">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    Total number of ARC apps installed on a device measured at startup. Note:
+    This includes launchable apps that are installed by default, such as Play
+    Store and Settings, as well as any vendor specific apps.
+  </summary>
+</histogram>
+
+<histogram name="Arc.boot_progress" units="ms">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    The relative time of a boot progress event since the ARC starts.
+  </summary>
+</histogram>
+
+<histogram name="Arc.CumulativeUseTime" units="seconds">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    ARC use time. The use time is incremented in regular intervals while android
+    container is active. Reported at most once a day, at which point accumulated
+    time is reset (which means that sum of reported times for a OS version would
+    give an estimate of ARC usage time per OS version).
+  </summary>
+</histogram>
+
+<histogram name="Arc.IntentHandlerAction" enum="ArcIntentHandlerAction">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>ARC intent handler action taken by user.</summary>
+</histogram>
+
+<histogram name="Arc.IntentHandlerDestinationPlatform"
+    enum="ArcIntentHandlerDestinationPlatform">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    ARC intent handler destination platform. The destination may be specified
+    due to the user explicit selection or a previously stored preference.
+  </summary>
+</histogram>
+
+<histogram name="Arc.LowMemoryKiller.Count">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>Cumulative count of low memory kills in one user session.</summary>
+</histogram>
+
+<histogram name="Arc.LowMemoryKiller.FreedSize" units="KB">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>The memory size freed by each low memory kill event.</summary>
+</histogram>
+
+<histogram name="Arc.LowMemoryKiller.TimeDelta" units="ms">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>The elapsed time to last low memory kill event.</summary>
+</histogram>
+
+<histogram name="Arc.OOMKills.Count" units="kills">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>Cumulative count of OOM kills in one user session.</summary>
+</histogram>
+
+<histogram name="Arc.OOMKills.Score" units="badness score">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    The oom_badness score of a OOM killed process as reported by kernel.
+  </summary>
+</histogram>
+
+<histogram name="Arc.OOMKills.TimeDelta" units="ms">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>The elapsed time since last OOM kill event.</summary>
+</histogram>
+
+<histogram name="Arc.OptInAction" enum="ArcOptInAction">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>Arc OptIn action taken by user.</summary>
+</histogram>
+
+<histogram name="Arc.OptInCancel" enum="ArcOptInCancel">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>Arc OptIn cancelation reason.</summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.Result" enum="ArcProvisioningResult">
+  <obsolete>
+    Deprecated on 2016-09-15 and replaced by Arc.Provisioning.Result.Managed and
+    Arc.Provisioning.Result.Unmanaged.
+  </obsolete>
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    The result (success or the type of failure) of ARC provisioning.
+  </summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.Result.Managed" enum="ArcProvisioningResult">
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    The result (success or the type of failure) of ARC provisioning on managed
+    devices.
+  </summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.Result.Unmanaged"
+    enum="ArcProvisioningResult">
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    The result (success or the type of failure) of ARC provisioning on unmanaged
+    devices.
+  </summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.TimeDelta.Failure.Managed" units="ms">
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    Elapsed time from click on &quot;Sign in&quot; to call to onSignInFailed for
+    managed users.
+  </summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.TimeDelta.Failure.Unmanaged" units="ms">
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    Elapsed time from click on &quot;Sign in&quot; to call to onSignInFailed for
+    unmanaged users.
+  </summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.TimeDelta.Success.Managed" units="ms">
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    Elapsed time from click on &quot;Sign in&quot; to successful call to
+    onSignInComplete for managed users.
+  </summary>
+</histogram>
+
+<histogram name="Arc.Provisioning.TimeDelta.Success.Unmanaged" units="ms">
+  <owner>alexchau@google.com</owner>
+  <owner>phweiss@google.com</owner>
+  <summary>
+    Elapsed time from click on &quot;Sign in&quot; to successful call to
+    onSignInComplete for unmanaged users.
+  </summary>
+</histogram>
+
+<histogram name="Arc.ShutdownTime" units="ms">
+  <owner>elijahtaylor@google.com</owner>
+  <summary>
+    The time it takes for ARC to shut down. This value is recorded on ARC
+    shutdown as the time is takes for the init process to exit after setting
+    'sys.powerctl shutdown'. It is reported on the next ARC startup to avoid
+    sending data during shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Arc.State" enum="BooleanEnabled">
+  <owner>elijahtaylor@google.com</owner>
+  <owner>mitsuji@google.com</owner>
+  <summary>
+    Whether ARC is enabled or not.  Before M56 this was collected only on login
+    and when ARC was enabled or disabled.  From M56 forward this is collected
+    during every metrics recording interval, so it is in every record uploaded
+    to the server.  This is required because this value is used to categorize
+    all other data in the dashboard as collected with ARC enabled or not.
+  </summary>
+</histogram>
+
+<histogram name="ArcRuntime.LowMemoryKiller.FreedSize" units="KB">
+  <obsolete>
+    Renamed to Arc.LowMemoryKiller.FreedSize on 2016/03/24.
+  </obsolete>
+  <owner>elijahtaylor@google.com</owner>
+  <summary>The memory size freed by each low memory kill event.</summary>
+</histogram>
+
+<histogram name="ArcRuntime.LowMemoryKiller.TimeDelta" units="ms">
+  <obsolete>
+    Renamed to Arc.LowMemoryKiller.TimeDelta on 2016/03/24.
+  </obsolete>
+  <owner>elijahtaylor@google.com</owner>
+  <summary>The elapsed time to last low memory kill event.</summary>
+</histogram>
+
+<histogram name="Ash.Accelerators.Deprecated.LockScreen"
+    enum="DeprecatedAcceleratorUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The lock screen action has two accelerators:   - Ctrl+Shift+L which is
+    deprecated.   - Search+L which is new. This histogram shows the number of
+    times each accelerator (deprecated and new) is used.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Accelerators.Deprecated.NextIME"
+    enum="DeprecatedAcceleratorUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The switch to the next IME action has two accelerators:   - Shift+Alt which
+    is deprecated.   - Ctrl+Shift+Space which is new. This histogram shows the
+    number of times each accelerator (deprecated and new) is used.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Accelerators.Deprecated.ShowTaskManager"
+    enum="DeprecatedAcceleratorUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    Opening the task manager has two accelerators:   - Shift+Esc which is
+    deprecated.   - Search+Esc which is new. This histogram shows the number of
+    times each accelerator (deprecated and new) is used.
+  </summary>
+</histogram>
+
+<histogram name="Ash.ActiveTouchPoints">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Number of active touch-points when a new touch-point is added.
+  </summary>
+</histogram>
+
+<histogram name="Ash.ActiveWindowShowTypeOverTime" enum="ActiveWindowShowType">
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The show type of the active window tracked over time by logging on a regular
+    basis (30 minutes).
+  </summary>
+</histogram>
+
+<histogram name="Ash.AppList.TimeBetweenTaskSwitches" units="seconds">
+  <obsolete>
+    Deprecated 10/2016 for Issue 616581.
+  </obsolete>
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The amount of time between selecting an item from the Ash app list. Not
+    recorded on the first time an item is selected from the app list after
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Desktop.TimeBetweenNavigateToTaskSwitches" units="seconds">
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of seconds between task window activations triggered by users
+    clicking or tapping on a window, as recorded by the Desktop_SwitchTask user
+    action. Recorded on ChromeOS only. Task switches from other sources are
+    ignored and do not affect this metric. In other words, if a user performs
+    the following steps (1) click on task window 'A' (2) Alt+Tab to task 'Z'(3)
+    click on task window 'B', then this will result in a sample recorded for the
+    time delta between activating task window 'A'and 'B'.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.Action" enum="DockedAction">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    User-initiated action taken that affects docked windows such as docking,
+    undocking, minimizing, restoring, closing or just dragging a docked window.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.ActionSource" enum="DockedActionSource">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Source (mouse, touch, keyboard or unknown) of the user-initiated action for
+    docked windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.ItemsAll">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Number of all docked windows or panels including hidden or minimized.
+    Recorded on every user action that interacts with docked windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.ItemsLarge">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Number of large (wider than dock maximum width) windows that had to be
+    shrunk to get docked among the visible docked windows. Recorded on every
+    user action that interacts with docked windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.ItemsPanels">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Number of docked visible panels. Recorded on every user action that
+    interacts with docked windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.ItemsVisible">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Number of visible docked windows or panels. Recorded on every user action
+    that interacts with docked windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.TimeBetweenUse" units="seconds">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Time elapsed between instances of docking, undocking or any other action
+    affecting docked state of a window.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Dock.Width" units="pixels">
+  <owner>kuscher@google.com</owner>
+  <owner>varkha@chromium.org</owner>
+  <summary>
+    Width of the docked area in pixels. Recorded every time it changes after a
+    user window resize operation is completed.
+  </summary>
+</histogram>
+
+<histogram name="Ash.GestureCreated" enum="UIEventType">
+  <obsolete>
+    Deprecated 08/2014 in Issue 352654, and replaced by Event.GestureCreated.
+  </obsolete>
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The gesture-events recognized and dispatched by the browser gesture
+    recognizer.
+  </summary>
+</histogram>
+
+<histogram name="Ash.GestureTarget" enum="GestureActionType">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The gesture-events recognized and dispatched by the browser gesture
+    recognizer for various UI components.
+  </summary>
+</histogram>
+
+<histogram name="Ash.ImmersiveFullscreen.WindowType" enum="WindowType">
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The type of the window which is put into immersive fullscreen. Immersive
+    fullscreen is entered via the F4 key.
+  </summary>
+</histogram>
+
+<histogram name="Ash.NumberOfVisibleWindowsInPrimaryDisplay" units="Windows">
+  <owner>tdanderson@google.com</owner>
+  <owner>bruthig@google.com</owner>
+  <summary>
+    An upper bound on the number of windows visible to the user on the primary
+    display. Determined by processing the windows in increasing z-order and
+    counting all non-minimized windows until a maximized or fullscreen window is
+    processed. This metric is logged periodically every 30 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Menu.NumItemsEnabledUponSelection" units="Count">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    Tracks the number of menu items that are enabled in a shelf item's secondary
+    menu. This metric is only recorded when a menu item is selected.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Menu.SelectedMenuItemIndex" units="Index">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    Tracks the index of the selected menu item in a shelf item's secondary menu.
+    This metric is only recorded when a menu item is selected.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.NumberOfItems" units="Icons">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    The number of icons in the shelf, not including the App Launcher icon. This
+    metric is recorded every 30 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.NumberOfPinnedItems" units="Icons">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    The number of pinned icons in the shelf, not including the App Launcher
+    icon. This metric is recorded every 30 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.NumberOfUnpinnedItems" units="Icons">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    The number of unpinned icons in the shelf. This metric is recorded every 30
+    minutes.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Palette.InLaserPointerMode" units="ms">
+  <owner>xiaoyinh@chromium.org</owner>
+  <summary>
+    Tracks the amount of time spend in Palette laser point mode.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Palette.InMagnifyMode" units="ms">
+  <owner>xiaoyinh@chromium.org</owner>
+  <summary>Tracks the amount of time spend in Palette Magnify mode.</summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Palette.ModeCancellation"
+    enum="PaletteModeCancelType">
+  <owner>xiaoyinh@chromium.org</owner>
+  <summary>
+    Tracks the number of times a palette mode is explicitly cancelled or
+    switched out of.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Palette.Usage" enum="PaletteTrayOptions">
+  <owner>xiaoyinh@chromium.org</owner>
+  <summary>
+    Tracks the usage of each pen palette option when palette is not
+    automatically opened by a stylus eject event.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.Palette.Usage.AutoOpened" enum="PaletteTrayOptions">
+  <owner>xiaoyinh@chromium.org</owner>
+  <summary>
+    Tracks the usage of each pen palette option when palette is automatically
+    opened by a stylus eject event.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.TimeBetweenNavigateToTaskSwitches" units="seconds">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    The number of seconds between contiguous task switch user actions triggered
+    by the Shelf buttons where the user activates a different user-predictable
+    task. Task switches from other sources are ignored and do not affect this
+    metric. In other words, if a user performs the following steps (1) launch
+    task 'A' from the Shelf (2) Alt+Tab to task 'Z' (3) launch task 'B' from the
+    Shelf, then this will result in a sample recorded for the time delta between
+    launching tasks 'A' and 'B'.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Shelf.TimeBetweenWindowMinimizedAndActivatedActions"
+    units="ms">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    Tracks the amount of time between a window being minimized by the shelf and
+    subsequently activated. In other words this metric is only recorded if a
+    shelf button pressed action causes a window to be minimized and the very
+    next shelf button pressed action causes the same window to be activated.
+  </summary>
+</histogram>
+
+<histogram name="Ash.ShelfAlignmentOverTime" enum="ShelfAlignmentValue">
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The current state of the shelf (alignment) tracked over time by logging on a
+    regular basis (30 minutes), this is used instead of log in or shelf usage to
+    track users that do not lock/unlock or log in frequently and use a small
+    number of browser instances or otherwise infrequently interact with the
+    shelf launcher.
+  </summary>
+</histogram>
+
+<histogram name="Ash.ShelfAlignmentUsage" enum="ShelfAlignmentValue">
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The current state of the shelf (alignment) when the shelf launcher is used
+    to launch an app/window/etc, this is used instead of log in to give data on
+    users that do not lock/unlock or log in frequently.
+  </summary>
+</histogram>
+
+<histogram name="Ash.StationaryTouchDuration" units="seconds">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The duration of mostly stationary long-duration touches.</summary>
+</histogram>
+
+<histogram name="Ash.SystemMenu.DefaultView.VisibleRows"
+    enum="SystemMenuDefaultViewRows">
+  <owner>bruthig@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    The visible rows displayed in the system menu's default view. Recorded each
+    time the menu is opened.
+  </summary>
+</histogram>
+
+<histogram name="Ash.SystemMenu.PercentageOfWorkAreaHeightCoveredByMenu"
+    units="%">
+  <owner>tdanderson@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    The height of the system menu divided by the height of the Ash desktop work
+    area; a value over 100% indicates that a portion of the system menu is not
+    visible to the user. Recorded each time the menu is opened.
+  </summary>
+</histogram>
+
+<histogram name="Ash.SystemMenu.Rows" units="rows">
+  <owner>tdanderson@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    The number of user-visible rows in the system menu's default view. Recorded
+    each time the menu is opened.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Tab.TimeBetweenSwitchToExistingTabUserActions"
+    units="seconds">
+  <obsolete>
+    Deprecated 10/2016 for Issue 616581.
+  </obsolete>
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of seconds between tab switches triggered by a user gesture (e.g.
+    Ctrl+T, Ctrl+1, tapping or clicking the tab strip, etc).
+  </summary>
+</histogram>
+
+<histogram name="Ash.TimeBetweenTaskSwitches" units="seconds">
+  <owner>bruthig@google.com</owner>
+  <owner>tdanderson@google.com</owner>
+  <summary>
+    The number of seconds between contiguous task switch user actions triggered
+    by any of the other task switch actions that are tracked. (e.g.,
+    Ash.Shelf.TimeBetweenNavigateToTaskSwitches,
+    Ash.Tab.TimeBetweenSwitchToExistingTabUserActions,
+    Ash.WindowCycleController.TimeBetweenTaskSwitches,
+    Ash.AppList.TimeBetweenTaskSwitches,
+    Ash.WindowSelector.TimeBetweenActiveWindowChanges, etc). Note the
+    Ash.AppList.TimeBetweenTaskSwitches and
+    Ash.Tab.TimeBetweenSwitchToExistingTabUserActions histograms were deprecated
+    and removed in 10/2016.
+  </summary>
+</histogram>
+
+<histogram name="Ash.TouchDuration" units="ms">
+  <obsolete>
+    Deprecated 12/2013 in r239809, and replaced by Ash.TouchDuration2.
+  </obsolete>
+  <owner>kuscher@google.com</owner>
+  <summary>The duration of a touch-sequence.</summary>
+</histogram>
+
+<histogram name="Ash.TouchDuration2" units="ms">
+  <obsolete>
+    Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchDuration.
+  </obsolete>
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The duration of a touch-sequence.</summary>
+</histogram>
+
+<histogram name="Ash.TouchMaxDistance" units="pixels">
+  <obsolete>
+    Deprecated 08/2014 in Issue 352654, and replaced by Event.TouchMaxDistance.
+  </obsolete>
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The maximum euclidean distance in dips which a touch point has travelled
+    away from its starting point. Only measured for single finger gestures.
+  </summary>
+</histogram>
+
+<histogram name="Ash.TouchMoveInterval" units="ms">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The interval between touch-move events.</summary>
+</histogram>
+
+<histogram name="Ash.TouchMoveSteps" units="pixels">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The distance between touch-move events.</summary>
+</histogram>
+
+<histogram name="Ash.TouchPositionX" units="pixels">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The position of the touch-events along the X axis.</summary>
+</histogram>
+
+<histogram name="Ash.TouchPositionY" units="pixels">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The position of the touch-events along the Y axis.</summary>
+</histogram>
+
+<histogram name="Ash.TouchRadius" units="pixels">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>The radius of a touch event.</summary>
+</histogram>
+
+<histogram name="Ash.TouchStartAfterEnd" units="ms">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The interval between the end of a touch-sequence and the start of the next
+    touch-sequence.
+  </summary>
+</histogram>
+
+<histogram name="Ash.TouchStartBurst">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The number of rapid touch-starts that happened within a short interval.
+    Logged once for each such burst group.
+  </summary>
+</histogram>
+
+<histogram name="Ash.TouchView.TouchViewActive" units="ms">
+  <owner>girard@chromium.org</owner>
+  <summary>
+    The length of time that TouchView is active, for each activation.
+  </summary>
+</histogram>
+
+<histogram name="Ash.TouchView.TouchViewActivePercentage" units="%">
+  <owner>girard@chromium.org</owner>
+  <summary>The proportion of time spent in TouchView during a session.</summary>
+</histogram>
+
+<histogram name="Ash.TouchView.TouchViewActiveTotal" units="seconds">
+  <owner>girard@chromium.org</owner>
+  <summary>The total time that TouchView is active during a session.</summary>
+</histogram>
+
+<histogram name="Ash.TouchView.TouchViewInactive" units="ms">
+  <owner>girard@chromium.org</owner>
+  <summary>The length of time between TouchView activations.</summary>
+</histogram>
+
+<histogram name="Ash.TouchView.TouchViewInactiveTotal" units="seconds">
+  <owner>girard@chromium.org</owner>
+  <summary>
+    The total time that TouchView is not active during a session.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Wallpaper.CustomLayout" enum="WallpaperLayout">
+  <owner>xdai@chromium.org</owner>
+  <summary>
+    The custom wallpaper layout type. Recorded when the user sets a new custom
+    wallpaper or changes the existing custom wallpaper's layout.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Wallpaper.DefaultIndex">
+  <obsolete>
+    Deprecated as of 11/2012. Use of indices has been removed.
+  </obsolete>
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The wallpaper index if one of the default wallpapers has been selected.
+    Recorded at user login. Currently only for the old wallpaper picker UI.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Wallpaper.Source" enum="WallpaperType">
+  <owner>xdai@chromium.org</owner>
+  <summary>
+    Recorded when a new wallpaper is set, either by the built-in Wallpaper
+    Picker App, or by a third party App. Note the wallpaper change triggered by
+    Sync file system event doesn't count.
+  </summary>
+</histogram>
+
+<histogram name="Ash.Wallpaper.Type" enum="WallpaperType">
+  <owner>kuscher@google.com</owner>
+  <summary>The wallpaper type. Recorded at user login.</summary>
+</histogram>
+
+<histogram name="Ash.WindowCycleController.CycleTime" units="ms">
+  <owner>varkha@chromium.org</owner>
+  <owner>tbuckley@google.com</owner>
+  <summary>
+    The amount of time the Alt key is held after pressing Alt+Tab to begin
+    cycling through windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowCycleController.Items" units="items">
+  <owner>varkha@chromium.org</owner>
+  <owner>tbuckley@google.com</owner>
+  <summary>
+    The number of windows in the Alt+Tab selector. Only recorded once when
+    cycling starts, not every time when Tab is pressed without releasing Alt.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowCycleController.SelectionDepth" units="items">
+  <owner>varkha@chromium.org</owner>
+  <owner>tbuckley@google.com</owner>
+  <summary>
+    When a window is selected after pressing Alt+Tab, records that window's
+    position in the global MRU ordering. 1 represents the most-recently used
+    window, 2 represents the next most-recently used window, and so on. Recorded
+    when Alt+Tab cycling stops, i.e., when Alt key is released.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowCycleController.TimeBetweenTaskSwitches"
+    units="seconds">
+  <owner>varkha@chromium.org</owner>
+  <owner>tbuckley@google.com</owner>
+  <summary>
+    The number of seconds between task switches triggered by the next window and
+    previous window accelerator keys (ie Alt+Tab, Alt+Shift+Tab).
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowManager.Lock.Success" units="ms">
+  <owner>jdufault@chromium.org</owner>
+  <summary>
+    How long it took for the screen lock process to complete. This does not
+    include timeouts.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowManager.Lock.Timeout" units="ms">
+  <owner>jdufault@chromium.org</owner>
+  <summary>
+    How long it took for the screen lock process to complete, for timeouts only.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.ArrowKeyPresses">
+  <owner>flackr@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of times the arrow keys are pressed in overview mode per session,
+    i.e. between bringing up overview mode and ending it. This is only measured
+    for the sessions that end by selecting a window with the enter key.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.CycleTime" units="ms">
+  <obsolete>
+    Deprecated as of 06/2014. No longer relevant since alt-tab switching was
+    separated from WindowSelector.
+  </obsolete>
+  <owner>flackr@chromium.org</owner>
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The amount of time the Alt key is held after pressing Alt+Tab to begin
+    cycling through windows.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.Items">
+  <owner>flackr@chromium.org</owner>
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The number of items (single windows or groups of windows such as panels) in
+    the overview mode, present at the start of each session.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.ItemsWhenTextFilteringUsed" units="items">
+  <owner>tdanderson@chromium.org</owner>
+  <owner>flackr@chromium.org</owner>
+  <summary>
+    The number of items showing in overview mode at the moment when an item is
+    selected or when selection is canceled. Only recorded if the text filtering
+    textfield contains a non-empty string.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.KeyPressesOverItemsRatio" units="%">
+  <owner>flackr@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The ratio between the arrow key presses and the number of overview items,
+    expressed as a percentage for a single session.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.OverviewClosedItems">
+  <owner>flackr@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of items closed from the window overview for a single session.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.SelectionDepth" units="items">
+  <owner>varkha@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    When a window is selected in overview mode, records that window's position
+    in the global MRU ordering. 1 represents the most-recently used window, 2
+    represents the next most-recently used window, and so on.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.TextFilteringStringLength"
+    units="characters">
+  <owner>tdanderson@chromium.org</owner>
+  <owner>flackr@chromium.org</owner>
+  <summary>
+    The length of the string entered into the text filtering textfield at the
+    moment when an item is selected or when selection is canceled.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.TextFilteringTextfieldCleared">
+  <owner>tdanderson@chromium.org</owner>
+  <owner>flackr@chromium.org</owner>
+  <summary>
+    The number of times the text filtering textfield has had all of its text
+    removed within a single overview mode session. Measured from the time
+    overview mode is invoked to when an item is selected or when selection is
+    canceled.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.TimeBetweenActiveWindowChanges"
+    units="seconds">
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The amount of time between endings of overview mode sessions which were
+    caused by the user selecting a window which was not previously active. Only
+    recorded on the second and later times after startup that the user selected
+    a window which was not previously active.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.TimeBetweenUse" units="ms">
+  <owner>flackr@chromium.org</owner>
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The amount of time between uses of overview mode, recorded when overview
+    mode is entered. Only recorded on the second and later times after startup
+    that the user entered overview mode.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.TimeInOverview" units="ms">
+  <owner>flackr@chromium.org</owner>
+  <owner>kuscher@google.com</owner>
+  <summary>
+    The amount of time spent in overview mode. Overview mode is engaged by
+    pressing the overview button. The time is measured from the moment the
+    windows begin animating to a thumbnail size preview to when a window is
+    selected or selection is canceled.
+  </summary>
+</histogram>
+
+<histogram name="Ash.WindowSelector.TimeInOverviewWithTextFiltering" units="ms">
+  <owner>tdanderson@chromium.org</owner>
+  <owner>flackr@chromium.org</owner>
+  <summary>
+    The amount of time spent in overview mode when text filtering is used. The
+    time is measured from the moment the windows begin animating to a thumbnail
+    size preview to when a window is selected or selection is canceled. Only
+    recorded if the text filtering textfield contains a non-empty string.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.AttemptCountFail">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of DnsAttempts before DnsTransaction completes with failure.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.AttemptCountSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of DnsAttempts before DnsTransaction completes successfully.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ConfigChange" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether DnsConfigService::OnConfigChange actually corresponded to a change
+    in DnsConfig.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ConfigNotifyInterval" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time between calls to DnsConfigService::InvalidateConfig.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ConfigParseDuration" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Duration of time spent parsing DnsConfig.</summary>
+</histogram>
+
+<histogram name="AsyncDNS.ConfigParsePosix" enum="AsyncDNSConfigParsePosix">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of results of parsing DnsConfig in DnsConfigServicePosix.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ConfigParseResult" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Whether DnsConfig was parsed successfully.</summary>
+</histogram>
+
+<histogram name="AsyncDNS.ConfigParseWin" enum="AsyncDNSConfigParseWin">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of results of parsing DnsConfig in DnsConfigServiceWin.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.DNSChangerDetected" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether the first valid DnsConfig included a rogue nameserver.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.DnsClientDisabledReason" enum="NetErrorCodes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
+    succeeded, at the end of a streak of failures after which the DnsClient was
+    disabled.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.DnsClientEnabled" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    TRUE counts the events when a valid DnsConfig is received and used to enable
+    DnsClient, while FALSE counts the events when DnsClient is disabled after a
+    series of successful fallbacks from DnsTask to ProcTask.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.FallbackFail" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time spent by ProcTask in failing fallback resolutions.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.FallbackSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time spent by ProcTask in successful fallback resolutions.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.HaveDnsConfig" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether there was a valid DNS configuration at the start of a job which
+    eventually completed successfully.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.HostParseResult" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Whether DnsHosts were parsed successfully.</summary>
+</histogram>
+
+<histogram name="AsyncDNS.HostsChange" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether DnsConfigService::OnHostsChange actually corresponded to a change in
+    DnsHosts.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.HostsNotifyInterval" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time between calls to DnsConfigService::InvalidateHosts.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.HostsParseDuration" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Duration of time spent parsing DnsHosts.</summary>
+</histogram>
+
+<histogram name="AsyncDNS.HostsParseWin" enum="AsyncDNSHostsParseWin">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of results of parsing DnsHosts in DnsConfigServiceWin.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.HostsSize" units="bytes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The size of the HOSTS file observed before each attempt to parse it.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTime" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (using DnsClient).
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTime_HIGHEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (using DnsClient). Includes only Jobs which had
+    priority HIGHEST when started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTime_IDLE" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (using DnsClient). Includes only Jobs which had
+    priority IDLE when started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTime_LOW" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (using DnsClient). Includes only Jobs which had
+    priority LOW when started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTime_LOWEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (using DnsClient). Includes only Jobs which had
+    priority LOWEST when started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTime_MEDIUM" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (using DnsClient). Includes only Jobs which had
+    priority MEDIUM when started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTimeAfterChange" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (using DnsClient).
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTimeAfterChange_HIGHEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (using DnsClient). Includes only Jobs which had priority HIGHEST
+    when started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTimeAfterChange_IDLE" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (using DnsClient). Includes only Jobs which had priority IDLE when
+    started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOW" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (using DnsClient). Includes only Jobs which had priority LOW when
+    started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTimeAfterChange_LOWEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (using DnsClient). Includes only Jobs which had priority LOWEST when
+    started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.JobQueueTimeAfterChange_MEDIUM" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (using DnsClient). Includes only Jobs which had priority MEDIUM when
+    started.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.NameServersType" enum="AsyncDNSNameServersType">
+  <obsolete>
+    Deprecated as of 4/2016.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Type of nameservers in the DNS config, recorded each time the config is read
+    by the DNSConfigService.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ParseToAddressList" enum="AsyncDNSParseResult">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of results of parsing addresses out of DNS responses in successful
+    DnsTransactions.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.PrefDefaultSource" enum="AsyncDNSPrefDefaultSource">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The source of the async DNS preference's default. Logged at startup, when
+    the IO thread is created.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.PrefSource" enum="AsyncDNSPrefSource">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The source of the async DNS preference's value. Logged at startup, when the
+    IO thread is created.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveError" enum="NetErrorCodes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of specific error codes returned by DnsTask if a subsequent ProcTask
+    succeeded.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveFail" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken by DnsTask in resolutions that failed. Excludes time
+    spent in the subsequent fallback.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveStatus" enum="AsyncDNSResolveStatus">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of the overall results of using asynchronous DNS in HostResolverImpl.
+    This only includes jobs started with valid DNS configuration and excludes
+    synchronous resolutions (as IP literals, from cache, and from HOSTS).
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken by DnsTask in resolutions that succeeded.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV4" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as AsyncDNS.ResolveSuccess, but limited to pure IPv4 lookups.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveSuccess_FAMILY_IPV6" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as AsyncDNS.ResolveSuccess, but limited to pure IPv6 lookups.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ResolveSuccess_FAMILY_UNSPEC" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as AsyncDNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerCount">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of servers in DnsConfig. Recorded on every new DnsSession, which is
+    created on DNS change.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerFailureIndex">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Index in DnsConfig of the failing server, recorded at the time of failure.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerFailuresAfterNetworkChange">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of server failures after network change before first success in the
+    DnsSession. Recorded at the time of first success.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerFailuresAfterSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of server failures after success until the end of the session. Server
+    has reported success at some point during the session. Recorded at the end
+    of the DnsSession.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerFailuresBeforeSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of server failures before success. This is NOT the first success in
+    the DnsSession. Recorded at the time of success.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerFailuresWithoutSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of server failures without success until the end of the session.
+    Server has never reported success during the DnsSession. Recorded at the end
+    of the DnsSession.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.ServerIsGood" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The current server is &quot;good&quot; and does not have to be skipped.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.SortFailure" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in failing calls to AddressSorter in dual-stack
+    resolutions using DnsTask.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.SortSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in successful calls to AddressSorter in dual-stack
+    resolutions using DnsTask.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.SuffixSearchDone">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The number of names from the search name list consumed during a successful
+    transaction (QTYPE A only).
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.SuffixSearchRemain">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The number of names left on the search name list at the end of a successful
+    transaction (QTYPE A only).
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.SuffixSearchStart">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The number of names on the search name list at the start of a transaction
+    (QTYPE A only).
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TCPAttemptFail" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken by DnsTCPAttempt in failed attempts. Excludes
+    timeouts.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TCPAttemptSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken by DnsTCPAttempt in successful attempts.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TimeoutErrorHistogram" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Difference between RTT and timeout calculated using Histogram algorithm.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TimeoutErrorHistogramUnder" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Difference between timeout calculated using Histogram algorithm and RTT.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TimeoutErrorJacobson" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Difference between RTT and timeout calculated using Jacobson algorithm.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TimeoutErrorJacobsonUnder" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Difference between timeout calculated using Jacobson algorithm and RTT.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TimeoutSpentHistogram" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time that would be spent waiting for lost request using
+    Histogram algorithm.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TimeoutSpentJacobson" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time that would be spent waiting for lost request using Jacobson
+    algorithm.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TotalTime" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time since a HostResolverImpl::Resolve request to the time a
+    result is posted. Excludes canceled, evicted, and aborted requests. Includes
+    cache hits (recorded as 0). Excludes speculative requests.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TotalTime_speculative" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time since a HostResolverImpl::Resolve request to the time a
+    result is posted. Excludes canceled, evicted, and aborted requests. Includes
+    cache hits (recorded as 0). Speculative requests only.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TransactionFailure" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in failing DnsTransactions. This includes server
+    failures, timeouts and NXDOMAIN results.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TransactionSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in successful DnsTransactions. This includes all
+    NOERROR answers, even if they indicate the name has no addresses or they
+    cannot be parsed.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TransactionSuccess_A" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as AsyncDNS.TransactionSuccess but limited to A query type.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TransactionSuccess_AAAA" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as AsyncDNS.TransactionSuccess but limited to AAAA query type.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.TTL" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    TTL of the resolved addresses, as in the response received from the server.
+    For results served from local cache, the TTL is from the original response.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.UDPAttemptFail" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken by DnsUDPAttempt in failed attempts. Excludes
+    timeouts.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.UDPAttemptSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken by DnsUDPAttempt in successful attempts. Includes
+    responses arriving after timeout, if multiple attempts are allowed.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.UnchangedConfigInterval" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time since the last empty config result to the time a non-change
+    OnConfigChange is received.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.UnchangedHostsInterval" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time since the last empty config result to the time a non-change
+    OnHostsChange is received.
+  </summary>
+</histogram>
+
+<histogram name="AsyncDNS.WatchStatus" enum="AsyncDNSWatchStatus">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The result of DnsConfigService watch. Counts STARTED on every initialization
+    and FAILED_* on any failure.
+  </summary>
+</histogram>
+
+<histogram name="Aura.CreatedGpuBrowserCompositor" enum="CompositorType">
+  <owner>jbauman@chromium.org</owner>
+  <summary>
+    Whether the browser compositor uses GPU or the software renderer.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.Bubble" enum="AutocheckoutBubble">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the frequency of user interactions with the Autocheckout bubble,
+    which prompts users to invoke Autocheckout on supported websites.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.BuyFlow" enum="AutocheckoutBuyFlow">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the frequency of final states reached in Autocheckout buy flow.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.DismissalState"
+    enum="AutofillDialogDismissalState">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The state of the Autocheckout dialog when it was dismissed.</summary>
+</histogram>
+
+<histogram name="Autocheckout.FlowDuration" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user submitted the Autocheckout
+    dialog and when the Autocheckout flow, or filling process, concluded.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.FlowDuration.Failed" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user submitted the Autocheckout
+    dialog and when the Autocheckout flow concluded, in cases where the flow
+    failed.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.FlowDuration.Succeeded" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user submitted the Autocheckout
+    dialog and when the Autocheckout flow concluded, in cases where the flow
+    succeeded.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.InitialUserState"
+    enum="AutofillDialogInitialUserState">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The initial state of a user that's interacting with a freshly shown
+    Autocheckout dialog.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.PopupInDialog" enum="AutofillDialogPopupEvent">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    User interactions with the Autofill popup shown while filling an
+    Autocheckout dialog.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.Security" enum="AutofillDialogSecurity">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the frequency of security warnings and errors in the Autocheckout
+    dialog.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.UiDuration" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the duration for which an Autocheckout dialog was shown.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.UiDuration.Cancel" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the duration for which an Autocheckout dialog was shown, in cases
+    where the user ended up canceling out of the dialog.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.UiDuration.Submit" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the duration for which an Autocheckout dialog was shown, in cases
+    where the user ended up accepting the dialog.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.UiEvents" enum="AutofillDialogUiEvents">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures how users are interacting with the Autocheckout dialog UI.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.UiLatencyToShow" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the duration of time it takes for the Autocheckout UI to be
+    actionable by the user after it is shown.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.WalletErrors" enum="WalletErrors">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the frequency of errors in communicating with the Google Online
+    Wallet server.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.WalletRequiredActions"
+    enum="WalletRequiredActions">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the frequency of required user actions returned by the Google
+    Online Wallet server.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.WhitelistDownloadDuration" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures time taken to download the Autocheckout whitelist file.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.WhitelistDownloadDuration.Failed" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures time taken to download the Autocheckout whitelist file in case the
+    download was failed.
+  </summary>
+</histogram>
+
+<histogram name="Autocheckout.WhitelistDownloadDuration.Succeeded" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures time taken to download the Autocheckout whitelist file in case the
+    download was succeeded.
+  </summary>
+</histogram>
+
+<histogram name="AutodetectEncoding.Attempted" enum="BooleanAttempted">
+  <obsolete>
+    Deprecated as of 2/2016.
+  </obsolete>
+  <owner>jinsukkim@chromium.org</owner>
+  <summary>
+    Whether the text encoding auto detection logic was attempted for a web page.
+    The logic is triggered when the parser fails to find the encoding method
+    from other signals such as http header, meta tag, BOM, etc.
+
+    If the logic successfully detects a new encoding method which is different
+    from the default one, the result is reported through
+    AutodetectEncoding.Detected with the encoding method (see below). Otherwise
+    - i.e. detection logic somehow fails to work for the page or the detected
+    one is same as the default - no result is reported.
+  </summary>
+</histogram>
+
+<histogram name="AutodetectEncoding.Detected" enum="EncodingMethod"
+    units="pages">
+  <obsolete>
+    Deprecated as of 2/2016.
+  </obsolete>
+  <owner>jinsukkim@chromium.org</owner>
+  <summary>
+    The number of web pages whose encoding method is found by the auto detection
+    logic. Grouped by the encoding methods defined in EncodingMethod.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.AddressBook.AccessSkipped" enum="BooleanSkipped">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    Whether an attempt to access the Mac AddressBook was skipped because doing
+    so would incorrectly cause the appearance of the permissions dialog. This
+    happens when Chrome auto-update changes the binary on disk before the first
+    AddressBook access attempt.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.AddressBookAvailable" enum="BooleanAvailable">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Whether the Mac AddressBook was available on an attempt to read data from
+    it.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.AddressBookAvailableOnFirstAttempt"
+    enum="BooleanAvailable">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Whether the Mac AddressBook was available on the *first* attempt to read
+    data from it.  This is only recorded once per Chrome profile.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.AddressSuggestionsCount">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The number of address suggestions shown in the Autofill popup.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.AutomaticProfileCreation" enum="BooleanCreated">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Autofill.ProfileActionOnFormSubmitted.
+  </obsolete>
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    Whether a new Autofill profile was created automatically. In the
+    &quot;false&quot; case, an existing profile was used (and possibly updated).
+  </summary>
+</histogram>
+
+<histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision">
+  <obsolete>
+    Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionExpanded.
+  </obsolete>
+  <owner>jdonnelly@chromium.org</owner>
+  <summary>
+    Whether upload was offered upon detecting a form submission with credit card
+    data and a reason if it wasn't.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.CardUploadDecisionExpanded"
+    enum="AutofillCardUploadDecisionExpanded">
+  <owner>jdonnelly@chromium.org</owner>
+  <summary>
+    Whether upload was offered upon detecting a form submission with credit card
+    data and a detailed reason if it wasn't.
+  </summary>
+</histogram>
+
+<histogram name="AutoFill.CCInfoBarAccepted">
+  <obsolete>
+    Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The Autofill credit card info bar was accepted.</summary>
+</histogram>
+
+<histogram name="AutoFill.CCInfoBarDenied">
+  <obsolete>
+    Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The Autofill credit card info bar was denied.</summary>
+</histogram>
+
+<histogram name="Autofill.CreditCardFillingInfoBar"
+    enum="AutofillCreditCardInfoBar">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The relative frequency with which users accept, deny, or ignore the Autofill
+    credit card assisted filling infobar prompt.
+  </summary>
+</histogram>
+
+<histogram base="true" name="Autofill.CreditCardInfoBar"
+    enum="AutofillCreditCardInfoBar">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The relative frequency with which users accept, deny, or ignore the Autofill
+    credit card info bar prompt.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.DaysSinceLastUse.CreditCard" units="days">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    Logs the number of days that have passed since the credit card was last
+    used.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.DaysSinceLastUse.Profile" units="days">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    Logs the number of days that have passed since the profile was last used.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.DeveloperEngagement"
+    enum="AutofillDeveloperEngagement">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Measures the adoption of the HTML autocomplete type hint specification (see
+    http://is.gd/whatwg_autocomplete for more details).  For each fillable form
+    detected, logs whether that form includes author-specified type hints.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.FillDuration.FromInteraction.WithAutofill">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Time elapsed between the user's first interaction with a form and the form's
+    submission, for an autofilled form.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.FillDuration.FromInteraction.WithoutAutofill">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Time elapsed between the user's first interaction with a form and the form's
+    submission, for a non-autofilled form.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.FillDuration.FromLoad.WithAutofill">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Time elapsed between form load and form submission, for an autofilled form.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.FillDuration.FromLoad.WithoutAutofill">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Time elapsed between form load and form submission, for a non-autofilled
+    form.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.FormEvents.Address" enum="AutofillFormEvent">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Autofill form events for address forms. These are recorded when the user
+    interacts with a form requesting an address.
+  </summary>
+  <details>
+    Important caveat about submission metrics: - Submission using autofill data
+    is determined by simply evaluating if there was a fill operation in this
+    page. So, if the user filled with local data, completed erased or modified
+    the data after and then submitted, we would only emit one &quot;Submitted
+    with server suggestion filled (once)&quot;; - The submission segmentation
+    works by checking what kind of data was last filled for this type of form in
+    the page load. So, if I user initially filled with local data and after that
+    filled with server, we will only emit &quot;Submitted with server suggestion
+    filled (once)&quot;.
+  </details>
+</histogram>
+
+<histogram name="Autofill.FormEvents.CreditCard" enum="AutofillFormEvent">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Autofill form events for credit card forms. These are recorded when the user
+    interacts with a form requesting a credit card.
+  </summary>
+  <details>
+    Important caveat about submission metrics: - Submission using autofill data
+    is determined by simply evaluating if there was a fill operation in this
+    page. So, if the user filled with local data, completed erased or modified
+    the data after and then submitted, we would only emit one &quot;Submitted
+    with server suggestion filled (once)&quot;; - The submission segmentation
+    works by checking what kind of data was last filled for this type of form in
+    the page load. So, if I user initially filled with local data and after that
+    filled with server, we will only emit &quot;Submitted with server suggestion
+    filled (once)&quot;.
+  </details>
+</histogram>
+
+<histogram name="Autofill.FormSubmittedState" enum="AutofillFormSubmittedState">
+  <owner>sebsg@chromium.org</owner>
+  <summary>The autofill state related to a submitted form.</summary>
+</histogram>
+
+<histogram name="Autofill.IcuCollatorCreationSuccess" enum="BooleanSuccess">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    Tracks whether Autofill was able to create the ICU collator successfully.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.IsEnabled.PageLoad" enum="BooleanEnabled">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Tracks whether Autofill is enabled on page load for a page containing forms.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.IsEnabled.Startup" enum="BooleanEnabled">
+  <owner>isherman@chromium.org</owner>
+  <summary>Tracks whether Autofill is enabled when Chrome launches.</summary>
+</histogram>
+
+<histogram name="Autofill.KeyboardAccessoryButtonsIOS"
+    enum="AutofillKeyboardAccessoryButtonsIOS">
+  <owner>bondd@chromium.org</owner>
+  <summary>
+    [iOS] Measures the frequency of button presses on the iOS Autofill keyboard
+    accessory.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook" enum="AutofillMacAddressBook">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    When Chrome tries to access the user's Address Book, OSX presents a blocking
+    dialog which disrupts the user experience. A new Chrome feature has been
+    introduced wherein Chrome only shows this blocking dialog if the user
+    explicitly asked Chrome to access the user's Address Book. If a form's field
+    looks like it might support Autofill suggestions from the user's Address
+    Book and there are no other suggestions, Chrome shows an Autofill entry that
+    prompts the user to give Chrome access to the user's Address Book. This
+    histogram tracks the frequency that this Autofill entry is presented, and
+    the frequency that this Autofill entry is selected.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.AcceptedSuggestionIsFromAddressBook"
+    enum="BooleanFromAddressBook">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This metric is emitted each time the user accepts an Autofill suggestion. It
+    records whether the result is from the Address Book.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.AccessTime" units="ms">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time spent accessing the OSX Address Book the first time after
+    Chrome was launched. If this time is larger than ~100ms, this it is likely
+    that the user was shown a blocking, modal dialog.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.ContainedMeCard"
+    enum="BooleanContainedMeCard">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    After a Chrome is given access to the Mac Address Book, whether the Address
+    Book contained a Me card.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.MeCard.HadAddress"
+    enum="BooleanHadAddress">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    When Chrome is given access to the Me Card of the Address Book, whether the
+    card has an address that contained a street number and either a city or zip
+    code.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.MeCard.HadEmail"
+    enum="BooleanHadEmail">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    When Chrome is given access to the Me Card of the Address Book, whether the
+    card has an email.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.MeCard.HadName" enum="BooleanHadName">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    When Chrome is given access to the Me Card of the Address Book, whether the
+    card has a name.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.MeCard.HadPhoneNumber"
+    enum="BooleanHadPhoneNumber">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    When Chrome is given access to the Me Card of the Address Book, whether the
+    card has a phone number.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.MacAddressBook.NumShowsBeforeSelected">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The number of times that the access Address Book prompt has been shown when
+    the user selects the prompt.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission"
+    units="fields">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The number of autofilled fields that were subsequently edited prior to the
+    form being submitted.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.NumberOfProfilesConsideredForDedupe" units="profiles">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The number of Autofill profiles that have been considered for deduplication.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.NumberOfProfilesRemovedDuringDedupe" units="profiles">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The number of Autofill profiles that have been removed during deduplication.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.PasswordFormQueryVolume"
+    enum="PasswordFormQueryVolume">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>dvadym@chromium.org</owner>
+  <owner>gcasto@chromium.org</owner>
+  <summary>
+    Tracks the increased load on the Autofill server if the restriction on
+    querying for password forms with fewer than 3 fields were omitted.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.PayloadCompressionRatio" units="%">
+  <obsolete>
+    Deprecated as of 1/2016, autofill payload compression was removed.
+  </obsolete>
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    Compression ratio of the query and upload payload that are sent to the
+    Autofill server. The payload is compressed using gzip.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.ProfileActionOnFormSubmitted"
+    enum="AutofillProfileAction">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    The profile action that took place when a form was submitted.
+  </summary>
+</histogram>
+
+<histogram name="AutoFill.ProfileCount">
+  <obsolete>
+    Deprecated as of 3/2011, replaced by Autofill.StoredProfileCount.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The number of Autofill address profiles a user has.</summary>
+</histogram>
+
+<histogram name="AutoFill.Quality" enum="AutofillQuality">
+  <obsolete>
+    Deprecated as of 3/2011, replaced by Autofill.Quality.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The quality of the AutoFill implementation.</summary>
+</histogram>
+
+<histogram name="Autofill.Quality" enum="AutofillQuality">
+  <obsolete>
+    Deprecated as of 2/2014 (M35), replaced by Autofill.UserHappiness.
+  </obsolete>
+  <owner>isherman@chromium.org</owner>
+  <summary>The quality of the Autofill implementation.</summary>
+</histogram>
+
+<histogram name="Autofill.Quality.HeuristicType" enum="AutofillTypeQuality">
+  <owner>isherman@chromium.org</owner>
+  <summary>The quality of Autofill's heuristic field type detection.</summary>
+</histogram>
+
+<histogram name="Autofill.Quality.HeuristicType.ByFieldType"
+    enum="AutofillTypeQualityByFieldType">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The quality of Autofill's heuristic field type detection, broken down by the
+    specific field type.  Fields with multiple possible types (based on the
+    stored Autofill data) are logged as having ambiguous type.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.Quality.PredictedType" enum="AutofillTypeQuality">
+  <owner>isherman@chromium.org</owner>
+  <summary>The overall quality of the Autofill field type predictions.</summary>
+</histogram>
+
+<histogram name="Autofill.Quality.PredictedType.ByFieldType"
+    enum="AutofillTypeQualityByFieldType">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The overall quality of the Autofill field type predictions, broken down by
+    the specific field type.  Fields with multiple possible types (based on the
+    stored Autofill data) are logged as having ambiguous type.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.Quality.ServerType" enum="AutofillTypeQuality">
+  <owner>isherman@chromium.org</owner>
+  <summary>The quality of the Autofill server's field type detection.</summary>
+</histogram>
+
+<histogram name="Autofill.Quality.ServerType.ByFieldType"
+    enum="AutofillTypeQualityByFieldType">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The quality of the Autofill server's field type detection, broken down by
+    the specific field type.  Fields with multiple possible types (based on the
+    stored Autofill data) are logged as having ambiguous type.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.QueriedCreditCardFormIsSecure" enum="BooleanSecure">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    For credit card forms that are queried for Autofill, a ratio of how many are
+    within secure contexts (which includes mixed passive content).
+  </summary>
+</histogram>
+
+<histogram name="Autofill.SaveCreditCardPrompt"
+    enum="AutofillSaveCreditCardPrompt">
+  <owner>jdonnelly@chromium.org</owner>
+  <summary>
+    The relative frequency with which users accept or deny the Autofill save
+    credit card prompt.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.ScanCreditCard.Completed" enum="BooleanCompleted">
+  <owner>rouslan@chromium.org</owner>
+  <summary>Whether a credit card scan was completed or cancelled.</summary>
+</histogram>
+
+<histogram name="Autofill.ScanCreditCard.Duration" units="ms">
+  <owner>rouslan@chromium.org</owner>
+  <summary>How long a credit card took to scan.</summary>
+</histogram>
+
+<histogram name="Autofill.ScanCreditCardPrompt"
+    enum="AutofillScanCreditCardPrompt">
+  <owner>estade@chromium.org</owner>
+  <summary>Usage of the &quot;Scan card&quot; control item.</summary>
+</histogram>
+
+<histogram name="Autofill.ServerExperimentId" enum="AutofillExperimentId">
+  <obsolete>
+    Deprecated as of 6/2011, replaced by Autofill.ServerExperimentId.Query.
+  </obsolete>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The experiment ID received in response to an Autofill server query.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.ServerExperimentId.Query" enum="AutofillExperimentId">
+  <obsolete>
+    Deprecated as of 2/2014 (M35).
+  </obsolete>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The experiment ID received in response to an Autofill server query.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.ServerExperimentId.Upload"
+    enum="AutofillExperimentId">
+  <obsolete>
+    Deprecated as of 2/2014 (M35).
+  </obsolete>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The experiment ID received at the time of an Autofill upload.
+  </summary>
+</histogram>
+
+<histogram name="AutoFill.ServerQueryResponse" enum="AutofillQueryResult">
+  <obsolete>
+    Deprecated as of 3/2011, replaced by Autofill.ServerQueryResponse.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The usefulness of AutoFill server information.</summary>
+</histogram>
+
+<histogram name="Autofill.ServerQueryResponse" enum="AutofillQueryResult">
+  <owner>isherman@chromium.org</owner>
+  <summary>The usefulness of Autofill server information.</summary>
+</histogram>
+
+<histogram name="Autofill.ServerResponseHasDataForForm"
+    enum="BooleanHadPredictions">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    Tracks whether Autofill server had at least some prediction data for a given
+    form at query response time.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.StoredLocalCreditCardCount" units="cards">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The number of local credit cards a user has stored, measured at Chrome
+    profile launch time.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.StoredProfileCount">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    The number of Autofill addresses a user has stored, measured at launch time.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.StoredProfileCountAtAutofillableFormSubmission">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The number of Autofill addresses a user has stored, measured when an
+    autofillable form is submitted.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.StoredServerCreditCardCount" units="cards">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The number of server credit cards a user has stored, measured at Chrome
+    profile launch time.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.SuggestionAcceptedIndex" units="position">
+  <owner>mathp@chromium.org</owner>
+  <summary>The index of the accepted Autofill suggestion in the popup.</summary>
+</histogram>
+
+<histogram name="Autofill.SuggestionAcceptedIndex.Autocomplete"
+    units="position">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The index of the accepted Autocomplete suggestion in the popup.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.Timing.DetermineHeuristicTypes" units="ms">
+  <owner>kenjitoyama@chromium.org</owner>
+  <summary>
+    Number of milliseconds passed between the start and end of
+    FormStructure::DetermineHeuristicTypes().
+  </summary>
+</histogram>
+
+<histogram name="Autofill.Timing.ParseForm" units="ms">
+  <owner>kenjitoyama@chromium.org</owner>
+  <summary>
+    Number of milliseconds passed between the start and end of parsing a single
+    form.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UnmaskPrompt.Duration" units="ms">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Duration of the interaction with the UnmaskPrompt since it was shown until
+    it was closed. This prompt is triggered when a user selects a masked card in
+    an autofill dropdown.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UnmaskPrompt.Events" enum="AutofillUnmaskPromptEvent">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Events tracking the usage of the unmasking prompt. This prompt is triggered
+    when a user selects a masked card in a autofill dropdown.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UnmaskPrompt.GetRealPanDuration" units="ms">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Duration of the GetRealPan API call. This API call is triggered by the
+    unmasking prompt when the user types information to verify their ownership
+    of the card being fetched.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UnmaskPrompt.GetRealPanResult"
+    enum="AutofillGetRealPanResult">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Tracks the result of the GetRealPan API call. This API call is triggered by
+    the unmasking prompt when the user types information to verify their
+    ownership of the card being fetched.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UnmaskPrompt.TimeBeforeAbandonUnmasking" units="ms">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Time the user waited before abandoning an unmasking operation. In such a
+    scenario, the user is cancelling a pending unmasking operation (possibly
+    because it is taking too long).  The time measured here corresponds to the
+    time between the user clicking the &quot;Verify&quot; button and then
+    clicking &quot;Cancel&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UnmaskPrompt.UnmaskingDuration" units="ms">
+  <owner>waltercacau@chromium.org</owner>
+  <summary>
+    Duration between the user clicking the Verify button within the unmasking
+    prompt until we get a response back from the server. This prompt is
+    triggered when a user selects a masked card in an autofill dropdown.
+  </summary>
+</histogram>
+
+<histogram name="Autofill.UserHappiness" enum="AutofillUserHappiness">
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Measures the frequency of various events in the Autofill user interaction
+    flow.  By comparing frequencies, we can compute several interesting
+    &quot;user happiness&quot; metrics.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundMode.BackgroundApplicationsCount">
+  <owner>atwilson@chromium.org</owner>
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    The number of background applications (extensions) for a profile that were
+    loaded after the profile was registered with the BackgroundModeManager.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundMode.BackgroundModeEnabledPrefChanged"
+    enum="BooleanEnabled">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    Logged if BackgroundModeManager is running and listening for pref changes,
+    and the pref does indeed change. The new value is logged.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundMode.MenuItemClick" enum="BackgroundModeMenuItem">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    Logged when an item in the system tray icon menu is clicked.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundMode.OnStartup.AutoLaunchState"
+    enum="AutoLaunchState">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged during BackgroundModeManager's initialization. Indicates the
+    AutoLaunchState the current browser process was launched in.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundMode.OnStartup.IsBackgroundModePrefEnabled"
+    enum="BooleanEnabled">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged during BackgroundModeManager's initialization. Indicates the state of
+    the kBackgroundModeEnabled pref on startup.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundMode.TimeBeforeOptimizedRestart" units="ms">
+  <owner>dgn@chromium.org</owner>
+  <summary>
+    The duration of a session before the browser got restarted in the background
+    by the BackgroundOptimizer to purge the memory.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Event.BatchSize">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the number of sync events which were fired in a batch. A batch is
+    defined as the set of sync events dispatched at the same time by the
+    BackgroundSyncManager. One-shots usually run individually (a batch of one),
+    unless the device was offline and multiple are waiting for the device to go
+    back online.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Event.OneShotResult" enum="BooleanSuccess">
+  <obsolete>
+    As of 10/2015 this has been replaced by
+    BackgroundSync.Event.OneShotResultPattern.
+  </obsolete>
+  <owner>iclelland@chromium.org</owner>
+  <summary>Records whether a one-shot sync event succeeded or failed.</summary>
+</histogram>
+
+<histogram name="BackgroundSync.Event.OneShotResultPattern"
+    enum="BackgroundSyncResultPattern">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Records whether a periodic sync event succeeded or failed and whether the
+    sync event finished in the foreground or background.
+  </summary>
+  <details>
+    A sync event finished in the foreground if the associated Service Worker
+    Registration has a client at the time that the event finished.
+  </details>
+</histogram>
+
+<histogram name="BackgroundSync.Event.OneShotStartedInForeground"
+    enum="BooleanInForeground">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Records whether a one-shot sync started firing in the foreground or
+    background. Called shortly before the event is fired.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Event.PeriodicResult" enum="BooleanSuccess">
+  <obsolete>
+    As of 10/2015 this has been replaced by
+    BackgroundSync.Event.PeriodicResultPattern.
+  </obsolete>
+  <owner>iclelland@chromium.org</owner>
+  <summary>Records whether a periodic sync event succeeded or failed.</summary>
+</histogram>
+
+<histogram name="BackgroundSync.Event.PeriodicResultPattern"
+    enum="BackgroundSyncResultPattern">
+  <obsolete>
+    Stopped recording as of 1/2016.
+  </obsolete>
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Records whether a one-shot sync event succeeded or failed and whether the
+    sync event finished in the foreground or background.
+  </summary>
+  <details>
+    A sync event finished in the foreground if the associated Service Worker
+    Registration has a client at the time that the event finished.
+  </details>
+</histogram>
+
+<histogram name="BackgroundSync.Event.PeriodicStartedInForeground"
+    enum="BooleanInForeground">
+  <obsolete>
+    Stopped recording as of 1/2016.
+  </obsolete>
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Records whether a periodic sync event started firing in the foreground or
+    background. Called shortly before the event is fired.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Event.Time" units="ms">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Time taken to execute a batch of sync events. A batch is defined as the set
+    of sync events dispatched at the same time by the BackgroundSyncManager.
+    Periodic syncs often run in a batch. One-shots usually run individually (a
+    batch of one), unless the device was offline and multiple are waiting for
+    the device to go back online.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.LaunchTask.CancelSuccess" enum="BooleanSuccess">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to cancel a future browser launch using the
+    GCM Network Manager on Android.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.LaunchTask.PlayServicesAvailable"
+    enum="Boolean">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records whether Google Play Services is available to the Background Sync
+    system on Android, for scheduling future sync events when the browser is not
+    running. This will be logged at most once per run.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.LaunchTask.ScheduleSuccess"
+    enum="BooleanSuccess">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to schedule a future browser launch using
+    the GCM Network Manager on Android.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.NetworkObserver.HasPermission" enum="Boolean">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records whether the browser has sufficient permissions to create a
+    BackgroundSyncNetworkObserver object on Android, at the point when it tries
+    to create it. This should never be false, but is being tracked in order to
+    help resolve crbug.com/545473.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Registration.OneShot"
+    enum="BackgroundSyncStatus">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to register a one-shot sync.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Registration.OneShot.CouldFire"
+    enum="BooleanCouldFireImmediately">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to register a one-shot sync in a situation
+    where the sync could fire immediately.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Registration.OneShot.IsDuplicate"
+    enum="BooleanRegistrationIsDuplicate">
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records whether a one-shot sync registration exactly duplicates an existing
+    registered sync.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Registration.Periodic"
+    enum="BackgroundSyncStatus">
+  <obsolete>
+    Stopped recording as of 1/2016.
+  </obsolete>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to register a periodic sync.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Registration.Periodic.IsDuplicate"
+    enum="BooleanRegistrationIsDuplicate">
+  <obsolete>
+    Stopped recording as of 1/2016.
+  </obsolete>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records whether a periodic sync registration exactly duplicates an existing
+    registered sync.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Unregistration.OneShot"
+    enum="BackgroundSyncStatus">
+  <obsolete>
+    Stopped recording as of 2/2016.
+  </obsolete>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to unregister a one-shot sync.
+  </summary>
+</histogram>
+
+<histogram name="BackgroundSync.Unregistration.Periodic"
+    enum="BackgroundSyncStatus">
+  <obsolete>
+    Stopped recording as of 1/2016.
+  </obsolete>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Records the result of attempting to unregister a periodic sync.
+  </summary>
+</histogram>
+
+<histogram name="BatteryStatus.NumberBatteriesLinux"
+    enum="BatteryStatusNumberBatteries">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Number of batteries reported by the UPower service on Linux at the start of
+    the Battery Status API.
+  </summary>
+</histogram>
+
+<histogram name="BatteryStatus.NumberBatteriesMac"
+    enum="BatteryStatusNumberBatteries">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Number of internal batteries reported by MacOS at the start of the Battery
+    Status API.
+  </summary>
+</histogram>
+
+<histogram name="BatteryStatus.NumberBatteriesWin"
+    enum="BatteryStatusNumberBatteriesWin">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Number of batteries reported by Windows at the start of the Battery Status
+    API.
+  </summary>
+</histogram>
+
+<histogram name="BatteryStatus.StartAndroid" enum="BooleanSuccess">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the Battery Status API was successfully started up on Android.
+  </summary>
+</histogram>
+
+<histogram name="Blacklist.Blocked" enum="DllHash">
+  <owner>csharp@chromium.org</owner>
+  <summary>
+    Records the name hashes of all the dlls that are blocked from the browser
+    process.
+  </summary>
+</histogram>
+
+<histogram name="Blacklist.PatchedInRenderer" enum="BooleanHit">
+  <obsolete>
+    Removed at 2015 July.
+  </obsolete>
+  <owner>csharp@chromium.org</owner>
+  <summary>
+    Counts the number of times a renderer process is started with the browser
+    blacklist patch. This should never be hit.
+  </summary>
+</histogram>
+
+<histogram name="Blacklist.RetryAttempts.Success">
+  <owner>csharp@chromium.org</owner>
+  <owner>krstnmnlsn@chromium.org</owner>
+  <summary>
+    Records the number of attempts needed before the blacklist is properly set
+    up. This is logged immediately after a successful setup.
+  </summary>
+</histogram>
+
+<histogram name="Blacklist.Setup" enum="BlacklistSetup">
+  <owner>csharp@chromium.org</owner>
+  <summary>
+    Records the successes and failures when running the browser blacklist setup
+    code. Used to determine if the blacklist is working as intended during
+    startup (since the blacklist runs before crash reporting is set up). This
+    only occurs on Windows.
+  </summary>
+</histogram>
+
+<histogram name="Blimp.Compositor.CommitSizeKb" units="KB">
+  <owner>shaktisahu@chromium.org</owner>
+  <summary>
+    Records the size of the uncompressed commit messages received by Blimp
+    compositor.
+  </summary>
+</histogram>
+
+<histogram name="Blimp.Connected" enum="BooleanConnected">
+  <owner>shaktisahu@chromium.org</owner>
+  <summary>
+    Records whether connection attempt to the Blimp engine was successful.
+  </summary>
+</histogram>
+
+<histogram name="Blimp.Supported" enum="BooleanSupported">
+  <owner>shaktisahu@chromium.org</owner>
+  <summary>Records whether Blimp is supported.</summary>
+</histogram>
+
+<histogram name="Blimp.Tab.Visible" enum="BooleanVisible">
+  <owner>shaktisahu@chromium.org</owner>
+  <summary>Records whenever a Blimp tab toggles visibility.</summary>
+</histogram>
+
+<histogram name="Blink.Binding.InitializeMainWindowProxy" units="microseconds">
+  <owner>peria@chromium.org</owner>
+  <summary>
+    Time spent initializing WindowProxy during a page loading in main windows.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Binding.InitializeNonMainWindowProxy"
+    units="microseconds">
+  <owner>peria@chromium.org</owner>
+  <summary>
+    Time spent initializing WindowProxy during a page loading in non-main
+    windows, e.g. iframe.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Binding.InitializeWindowProxy" units="microseconds">
+  <obsolete>
+    Deprecated as of 10/2016.  This metric was split into two metrics depending
+    if it figures time for main windows.
+  </obsolete>
+  <owner>peria@chromium.org</owner>
+  <summary>Time spent initializing WindowProxy during a page loading.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.DrawImage" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <summary>Time spent on 2D canvas drawImage API call.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.GetImageData" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <summary>Time spent on 2D canvas getImageData API call.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.OffscreenCommitTimer" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <owner>xidachen@chromium.org</owner>
+  <summary>Wall clock durations of OffscreenCanvas.commit() calls.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.PutImageData" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <summary>Time spent on 2D canvas putImageData API call.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <owner>xlai@chromium.org</owner>
+  <summary>
+    This metric measures the total time spent on encoding all the rows of an
+    image (jpeg or png), as part of a canvas.toBlob API call. Encoding occurs
+    during one or more idle periods on the main thread.
+
+    This metric is useful in helping us adjust the IdleTaskCompleteTimeoutDelay
+    in canvas.toBlob. When the encoding idle task is delayed for longer than
+    IdleTaskCompleteTimeoutDelay, the browser will switch to a non-idle task to
+    force encoding to happen on the main thread.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ToBlob.IdleTaskStatus" enum="IdleTaskStatus">
+  <owner>junov@chromium.org</owner>
+  <owner>xlai@chromium.org</owner>
+  <summary>
+    Records the status of the idle task when finishing a toBlob call.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"
+    units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <owner>xlai@chromium.org</owner>
+  <summary>
+    This metric measures the time spent from initiating image encoding (jpeg or
+    png) on idle task to the actual execution time of initiation, as part of a
+    canvas.toBlob API call.
+
+    This metric is useful in helping us adjust the IdleTaskStartTimeoutDelay in
+    canvas.toBlob. When the initialization idle task is delayed for longer than
+    IdleTaskStartTimeoutDelay, the browser will switch to a non-idle task to
+    force initialization and encoding to occur on the main thread.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ToBlobDuration" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <owner>xlai@chromium.org</owner>
+  <summary>Time spent on 2D canvas toBlob API call.</summary>
+</histogram>
+
+<histogram name="Blink.Canvas.ToDataURL" units="microseconds">
+  <owner>junov@chromium.org</owner>
+  <summary>Time spent on 2D canvas toDataURL API call.</summary>
+</histogram>
+
+<histogram name="Blink.ColorSpace.Destination" enum="Gamma">
+  <owner>msarett@chromium.org</owner>
+  <summary>Gamma properties of destination color space.</summary>
+</histogram>
+
+<histogram name="Blink.ColorSpace.Source" enum="Gamma">
+  <owner>ccameron@chromium.org</owner>
+  <summary>Gamma properties of image color space.</summary>
+</histogram>
+
+<histogram name="Blink.Compositing.UpdateTime" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating compositing in the Blink document lifecyce.
+  </summary>
+</histogram>
+
+<histogram name="Blink.DecodedImage.CanvasExpanded"
+    enum="BooleanCanvasExpanded">
+  <owner>ryansturm@chromium.org</owner>
+  <owner>bengr@google.com</owner>
+  <summary>
+    The original canvas dimensions were sufficient to determine image size. This
+    is logged once per image header decode, which happens typically twice per
+    image on the page.
+  </summary>
+</histogram>
+
+<histogram name="Blink.DecodedImage.EffectiveDimensionsLocation" units="bytes">
+  <owner>ryansturm@chromium.org</owner>
+  <owner>bengr@google.com</owner>
+  <summary>
+    How many bytes of the file were read before an image width and height were
+    determined. This is logged once per image header decode, which happens
+    typically twice per image on the page.
+  </summary>
+</histogram>
+
+<histogram name="Blink.DecodedImage.Orientation" enum="DecodedImageOrientation">
+  <owner>rob.buis@samsung.org</owner>
+  <summary>Image orientation inferred during decode.</summary>
+</histogram>
+
+<histogram name="Blink.DecodedImage.XCanvasExpansion" units="pixels">
+  <owner>ryansturm@chromium.org</owner>
+  <owner>bengr@google.com</owner>
+  <summary>
+    How much the canvas width needed to be expanded as a result of the first
+    frame's width and x-offset being larger than the initial canvas width. This
+    is logged once per image header decode, which happens typically twice per
+    image on the page.
+  </summary>
+</histogram>
+
+<histogram name="Blink.DecodedImage.YCanvasExpansion" units="pixels">
+  <owner>ryansturm@chromium.org</owner>
+  <owner>bengr@google.com</owner>
+  <summary>
+    How much the canvas height needed to be expanded as a result of the first
+    frame's height and y-offset being larger than the initial canvas height.
+    This is logged once per image header decode, which happens typically twice
+    per image on the page.
+  </summary>
+</histogram>
+
+<histogram name="Blink.DecodedImageType" enum="DecodedImageType">
+  <owner>urvang@chromium.org</owner>
+  <summary>Image codec inferred during decode.</summary>
+</histogram>
+
+<histogram name="Blink.Fetch.RequestResourceTime" units="us">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The total microseconds spent in ResourceFetcher::requestResource.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Fonts.HarfBuzzFaceZeroCopyAccess" enum="BooleanSuccess">
+  <owner>drott@chromium.org</owner>
+  <summary>
+    Counts success or failure of attempting to access font tables using the zero
+    copy instantiation method in the HarfBuzz integration layer. This value is
+    only recorded on non-Mac platforms. Reported each time a HarfBuzz face
+    object is created.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Fonts.ShapeCache">
+  <owner>eae@chromium.org</owner>
+  <summary>
+    Total number of entries in all Blink ShapeCache instances. The value is
+    reported each time the FontCache::purge() method is called.
+  </summary>
+</histogram>
+
+<histogram name="Blink.Gesture.Merged" enum="GestureMergeState">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>domenic@google.com</owner>
+  <summary>
+    How many times two user gesture tokens were merged by UserGestureIndicator,
+    and whether each token had an active gesture. One of the new token's
+    gestures, if any, is moved to the old token.
+  </summary>
+</histogram>
+
+<histogram name="Blink.MediaDocument.DownloadButton"
+    enum="MediaDocumentDownloadButtonType">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Records how the download button on the MediaDocument is used.
+  </summary>
+</histogram>
+
+<histogram name="Blink.MediaElement.Autoplay" enum="MediaElementAutoPlay">
+  <owner>oysteine@chromium.org</owner>
+  <summary>
+    Records user observation and interaction with Media HTML elements that
+    feature autoplay, either script-controlled or through the attribute.
+  </summary>
+</histogram>
+
+<histogram name="Blink.MemoryCache.RevalidationPolicy"
+    enum="RevalidationPolicy">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    RevalidationPolicy used for non-preloading requests for each resource type.
+    https://crbug.com/579496
+  </summary>
+</histogram>
+
+<histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"
+    enum="RevalidationPolicy">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    RevalidationPolicy used for requests that hit Resource only referenced from
+    MemoryCache for each resource type. https://crbug.com/579496 Requests
+    counted by this are also counted by Blink.MemoryCache.RevalidationPolicy or
+    Blink.MemoryCache.RevalidationPolicy.Preload.
+  </summary>
+</histogram>
+
+<histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"
+    enum="RevalidationPolicy">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    RevalidationPolicy used for preloading requests for each resource type.
+    https://crbug.com/579496
+  </summary>
+</histogram>
+
+<histogram name="Blink.Paint.UpdateTime" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>Time spent updating paint in the Blink document lifecycle.</summary>
+</histogram>
+
+<histogram name="Blink.PaintInvalidation.UpdateTime" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating paint invalidation in the Blink document lifecycle.
+  </summary>
+</histogram>
+
+<histogram name="Blink.RestoredCachedStyleSheet"
+    enum="RestoredCachedStyleSheet">
+  <obsolete>
+    Deprecated 01/2016 and replaced by Blink.RestoredCachedStyleSheet2
+  </obsolete>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    On each link stylesheet tag resolve, record whether a Blink MemoryCached
+    StyleSheetContents was reused.
+  </summary>
+</histogram>
+
+<histogram name="Blink.RestoredCachedStyleSheet2" enum="StyleSheetCacheStatus">
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    On each link stylesheet tag resolve, record which cache Blink hit.
+  </summary>
+</histogram>
+
+<histogram name="Blink.ScanPendingActivityDuration" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    Duration of time taken to scan pending activities of all V8 wrappers in a
+    worker thread.
+  </summary>
+</histogram>
+
+<histogram name="Blink.ScriptValueSerializer.DOMWrapperCount" units="objects">
+  <obsolete>
+    Used to justify distribution of serialized data in the wild, but unlikely to
+    be useful to track long-term.
+  </obsolete>
+  <owner>platform-architecture-dev@chromium.org</owner>
+  <summary>
+    Number of DOM wrappers serialized as part of an object passed to
+    postMessage, IndexedDB, or another API that serializes script values.
+  </summary>
+</histogram>
+
+<histogram name="Blink.ScriptValueSerializer.JSObjectCount" units="objects">
+  <obsolete>
+    Used to justify distribution of serialized data in the wild, but unlikely to
+    be useful to track long-term.
+  </obsolete>
+  <owner>platform-architecture-dev@chromium.org</owner>
+  <summary>
+    Number of JavaScript objects (other than DOM wrappers) serialized as part of
+    an object passed to postMessage, IndexedDB, or another API that serializes
+    script values.
+  </summary>
+</histogram>
+
+<histogram name="Blink.ScriptValueSerializer.PrimitiveCount" units="values">
+  <obsolete>
+    Used to justify distribution of serialized data in the wild, but unlikely to
+    be useful to track long-term.
+  </obsolete>
+  <owner>platform-architecture-dev@chromium.org</owner>
+  <summary>
+    Number of primitive values (numbers, strings, etc.) serialized as part of an
+    object passed to postMessage, IndexedDB, or another API that serializes
+    script values.
+  </summary>
+</histogram>
+
+<histogram name="Blink.SharedBuffer.FailedLock" enum="ResourceType">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    Number of failed SharedBuffer::lock() calls for each resource type.
+    https://crbug.com/603791
+  </summary>
+</histogram>
+
+<histogram name="Blink.SharedBuffer.SuccessfulLock" enum="ResourceType">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    Number of successful SharedBuffer::lock() calls for each resource type.
+    https://crbug.com/603791
+  </summary>
+</histogram>
+
+<histogram name="Blink.SharedBuffer.Unlock" enum="ResourceType">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    Number of SharedBuffer::unlock() calls for each resource type.
+    https://crbug.com/603791
+  </summary>
+</histogram>
+
+<histogram name="Blink.StyleAndLayout.UpdateTime" units="microseconds">
+  <owner>layout-dev@chromium.org</owner>
+  <summary>
+    Time spent updating style and layout in the Blink document lifecycle.
+  </summary>
+</histogram>
+
+<histogram name="Blink.XHR.setRequestHeader.HeaderValueCategoryInRFC7230"
+    enum="XMLHttpRequestHeaderValueCategoryInRFC7230">
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    The count of XMLHttpRequest.setRequestHeader() calls where header values are
+    invalid/valid but affected by normalization/valid in RFC 7230.
+    https://crbug.com/455099.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.CollectGarbage" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>Duration of time taken to run Heap::collectGarbage().</summary>
+</histogram>
+
+<histogram name="BlinkGC.CollectionRate" units="%">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The percentage of objects that have been collected by a Blink GC. 0 is
+    passed if there were no objects when a Blink GC started.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.CommittedSize" units="MB">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The committed memory size in Blink GC. The value is reported when we see the
+    highest memory usage we've ever seen in the renderer process.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.CompleteSweep" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>Duration of time taken to run ThreadState::completeSweep().</summary>
+</histogram>
+
+<histogram name="BlinkGC.GCReason" enum="GCReason">
+  <owner>haraken@chromium.org</owner>
+  <summary>A type of Blink GC.</summary>
+</histogram>
+
+<histogram name="BlinkGC.ObjectSizeAfterGC" units="KB">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The size of allocated objects just after Blink GC is triggered.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.ObjectSizeBeforeGC" units="KB">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The size of allocated objects just before Blink GC is triggered.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.PerformPendingSweep" units="ms">
+  <obsolete>
+    Removed at 2014 Jan.
+  </obsolete>
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    Duration of time taken to run ThreadState::performPendingSweep().
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.TimeForGlobalWeakProcessing" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    Duration of time taken to run global weak processing of Blink GC.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.TimeForInvokingPreFinalizers" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    Duration of time taken to run ThreadState::invokePreFinalizers().
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.TimeForStoppingThreads" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    Duration of time taken to stop all Blink threads before starting a GC.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.TimeForSweepingAllObjects" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>Accumulated time taken to sweep all objects.</summary>
+</histogram>
+
+<histogram name="BlinkGC.TimeForThreadLocalWeakProcessing" units="ms">
+  <owner>haraken@chromium.org</owner>
+  <summary>Duration of time taken to run thread-local weak processing.</summary>
+</histogram>
+
+<histogram name="BlinkGC.TotalAllocatedSpace" units="KB">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The total size of allocated space in OS when a Blink GC is triggered.
+  </summary>
+</histogram>
+
+<histogram name="BlinkGC.TotalObjectSpace" units="KB">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The total size of object space in all threads when a Blink GC is triggered.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Android.GATTConnection.Disconnected.Result"
+    enum="AndroidGATTConnectionErrorCodes">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Disconnected GATT connection status codes. Used to better understand errors
+    seen in Android.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Android.GATTConnection.Failure.Result"
+    enum="AndroidGATTConnectionErrorCodes">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Failed GATT connection error codes. Used to better understand errors seen in
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Android.GATTConnection.Success.Result"
+    enum="AndroidGATTConnectionErrorCodes">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Successful GATT connection result codes. Used to better understand Android
+    results.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.ConnectedDeviceCount" units="devices">
+  <owner>keybuk@chromium.org</owner>
+  <summary>
+    Counts the number of simulataneously connected Bluetooth devices. Used to
+    direct testing efforts, and by our UI team to determine appropriate UI
+    sizes.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.DiscoverySession.Start.Outcome"
+    enum="BluetoothDiscoveryOutcomes">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of calls to BluetoothAdapter::StartDiscoverySession.
+    Used to prioritize efforts to fix failures of this function.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.DiscoverySession.Stop.Outcome"
+    enum="BluetoothDiscoveryOutcomes">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of calls to BluetoothDiscoverySession::Stop. Used to
+    prioritize efforts to fix failures of this function.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.GATTErrors" enum="BluetoothGATTErrors">
+  <obsolete>
+    As of 08/2015 this has been replaced by
+    Bluetooth.Web.Characteristic.ReadValue and
+    Bluetooth.Web.Characteristic.WriteValue.
+  </obsolete>
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how many times each GATT Error has occured. The results will be used
+    to determine how common this errors are and if we need to provide better
+    error messages to the users.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.PairingMethod" enum="BluetoothPairingMethod">
+  <owner>keybuk@chromium.org</owner>
+  <summary>
+    Records the method used to pair each Bluetooth Device. Used to direct our
+    testing efforts.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.PairingResult" enum="BluetoothPairingResult">
+  <owner>keybuk@chromium.org</owner>
+  <summary>
+    Records the result of pairing each Bluetooth Device. Used to understand
+    whether we are having significant problems with Bluetooth pairing and seeing
+    errors more commonly than we should.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.RequestDevice.Outcome"
+    enum="WebBluetoothRequestDeviceOutcome">
+  <obsolete>
+    Deprecated 08/2015 and replaced by Bluetooth.Web.RequestDevice.Outcome.
+  </obsolete>
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of a navigator.bluetooth.requestDevice() call. Used to
+    understand what errors developers are getting so we can target efforts
+    toward the most common ones. Multiple outcomes may result for a given
+    RequestDevice, such as rescan multiple times and then select a device.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.Android" enum="AndroidGATTStatusResult">
+<!-- Name completed by histogram_suffixes name="AndroidGATTEvents" -->
+
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>'status' values returned by Android GATT event.</summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.Blacklist.ParsedNonEmptyString"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated as of 11/2016, replaced by
+    Bluetooth.Web.Blocklist.ParsedNonEmptyString.
+  </obsolete>
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of BluetoothBlacklist::Add parsing a non-empty string.
+    These strings will be updated dynamically by a server, and this histogram
+    provides feedback that parsing is functioning correctly on clients.
+
+    False values are BAD, a blacklist is failing to be applied correctly.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.Blocklist.ParsedNonEmptyString"
+    enum="BooleanSuccess">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of BluetoothBlocklist::Add parsing a non-empty string.
+    These strings will be updated dynamically by a server, and this histogram
+    provides feedback that parsing is functioning correctly on clients.
+
+    False values are BAD, a blocklist is failing to be applied correctly.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.Characteristic.ReadValue.Outcome"
+    enum="WebBluetoothGATTOperationOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of a call to characteristic.readValue(). Used to know
+    what types of errors users are seeing. The results will be used to determine
+    how common these errors are and if we need to provide better error messages
+    to the users.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.Characteristic.StartNotifications.Outcome"
+    enum="WebBluetoothGATTOperationOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of a call to characteristic.startNofications(). Used to
+    know what types of errors users are seeing. The results will be used to
+    determine how common these errors are and if we need to provide better error
+    messages to the users.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.Characteristic.WriteValue.Outcome"
+    enum="WebBluetoothGATTOperationOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of a call to characteristic.writeValue(). Used to know
+    what types of errors users are seeing. The results will be used to determine
+    how common these errors are and if we need to provide better error messages
+    to the users.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.ChooserInteraction" enum="BooleanInvalid">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Counts how many times users interact with a regular chooser vs. an invalid
+    chooser. (A chooser is invalid when it's event handler becomes null.)
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.ConnectGATT.Outcome"
+    enum="WebBluetoothConnectGATTOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of a device.gatt.connect() call. Used to understand what
+    errors developers are getting so we can target efforts toward the most
+    common ones.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.ConnectGATT.TimeFailed" units="ms">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how long it takes for a connection attempt to fail. Use to let
+    developers know how to better wait for and handle connection errors.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.ConnectGATT.TimeSuccess" units="ms">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how long it takes for a device to successfully connect. Use to let
+    developers know how long it should take to connect to a BLE device.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.FunctionCall.Count" enum="WebBluetoothFunction">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Counts the number of times each call to a WebBluetooth function is done.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetCharacteristic.Characteristic"
+    enum="GATTCharacteristicHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the UUIDs used when getting a characteristic. The recorded value is
+    a 31-bit hash of the UUID. Used to know what types of characteristics to
+    target when building libraries that use the Web Bluetooth API.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetCharacteristic.Outcome"
+    enum="WebBluetoothGetCharacteristicOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of a call to getCharacteristic(). Used to understand
+    what errors developers are getting so we can target efforts toward the most
+    common ones.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetCharacteristics.Characteristic"
+    enum="GATTCharacteristicHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the UUIDs used when getting characteristics. The recorded value is a
+    31-bit hash of the UUID. Used to know what types of characteristics to
+    target when building libraries that use the Web Bluetooth API.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetCharacteristics.Outcome"
+    enum="WebBluetoothGetCharacteristicOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the outcome of a call to getCharacteristics(). Used to understand
+    what errors developers are getting so we can target efforts toward the most
+    common ones.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetPrimaryService.Outcome"
+    enum="WebBluetoothGetPrimaryServiceOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of a GATTServer.getPrimaryService() call. Used to
+    understand what errors developers are getting so we can target efforts
+    toward the most common ones.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetPrimaryService.Services"
+    enum="GATTServiceHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records what GATT Services are used when connected. The record value is a
+    31-bit hash of the Service UUID. This will help us know if we should build
+    an API for specific services rather than a general Bluetooth API.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetPrimaryServices.Outcome"
+    enum="WebBluetoothGetPrimaryServiceOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of a GATTServer.getPrimaryServices() call. Used to
+    understand what errors developers are getting so we can target efforts
+    toward the most common ones.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.GetPrimaryServices.Services"
+    enum="GATTServiceHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records what GATT Services are used when connected. The record value is a
+    31-bit hash of the Service UUID. This will help us know if we should build
+    an API for specific services rather than a general Bluetooth API.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.Filters.Count" units="filters">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how many filters are used when scanning. These results will help us
+    better understand the uses of the API and make changes according to
+    developers' behavior.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.Filters.Services"
+    enum="GATTServiceHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records a 31-bit hash of the GATT Service UUIDs used when scanning. This
+    will help us know if we should build an API for specific services rather
+    than a general Bluetooth API.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.FilterSize" units="services">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how many services are used in a filter. These results will help us
+    better understand the uses of the API and make changes according to
+    developers' behavior.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.OptionalServices.Count"
+    units="filters">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how many optional services are used when scanning. These results
+    will help us better understand the uses of the API and make changes
+    according to developers' behavior.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.OptionalServices.Services"
+    enum="GATTServiceHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records what optional services are used. The recorded value is a 31-bit hash
+    of the Service UUID. These results will help us better understand the uses
+    of the API and make changes according to developers' behavior.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.Outcome"
+    enum="WebBluetoothRequestDeviceOutcome">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records the result of a navigator.bluetooth.requestDevice() call. Used to
+    understand what errors developers are getting so we can target efforts
+    toward the most common ones.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.RSSISignalStrength" units="dBm">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Raw RSSI values provided to chooser, before processing them for display in
+    the Web Bluetooth chooser.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.RSSISignalStrengthLevel"
+    enum="WebBluetoothRSSISignalStrengthLevel">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Displayed RSSI levels, after processing and as displayed to users in the Web
+    Bluetooth chooser.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.ScanningDuration" units="ms">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Records the duration scanning for devices is run, terminated by events such
+    as the chooser being closed with a selected device, cancelled, or the scan
+    duration timing out.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Count"
+    units="services">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records how many services are used when scanning. This results will help us
+    better understand the uses of the API and make changes according to
+    developers' behavior.
+  </summary>
+</histogram>
+
+<histogram name="Bluetooth.Web.RequestDevice.UnionOfServices.Services"
+    enum="GATTServiceHash">
+  <owner>jyasskin@chromium.org</owner>
+  <owner>ortuno@chromium.org</owner>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Records what services are used from either required or optional sets. The
+    recorded value is a 31-bit hash of the Service UUID. These results will help
+    us better understand the uses of the API and make changes according to
+    developers' behavior.
+  </summary>
+</histogram>
+
+<histogram name="Bookmarks.BookmarksInFolder" units="bookmarks">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    Logs the number of bookmark items inside a folder every time a folder is
+    opened inside the bookmark manager.
+  </summary>
+</histogram>
+
+<histogram name="Bookmarks.EntryPoint" enum="BookmarksEntryPoint">
+  <owner>ianwen@chromium.org</owner>
+  <summary>How users add a new bookmark.</summary>
+</histogram>
+
+<histogram name="Bookmarks.LaunchDepth">
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Logs the depth of the bookmark in the bookmark tree hierarchy every time a
+    bookmark is launched. Depth indicates how many levels below a permanent
+    bookmark folder the bookmark was found in (e.g. a bookmark immediately in
+    the bookmark bar has depth 1).
+  </summary>
+</histogram>
+
+<histogram name="Bookmarks.LaunchLocation" enum="BookmarkLaunchLocation">
+  <owner>ianwen@chromium.org</owner>
+  <summary>Logs a UI location from which a bookmark is launched.</summary>
+</histogram>
+
+<histogram name="Bookmarks.OnFaviconsChangedIconURL" enum="BooleanHit">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Logs how frequently BookmarkModel::OnFaviconsChanged() is called with a
+    non-empty |icon_url| to determine whether BookmarkNodes should be cached
+    based on their favicon URLs (e.g. http://www.google.com/favicon.ico) in
+    addition to their page URLs (e.g. http://www.google.com). OnFaviconChanged()
+    is expected to be called less than 10 times per user per day with a
+    non-empty |icon_url|.
+  </summary>
+</histogram>
+
+<histogram name="Bookmarks.OpenAction" enum="BookmarksOpenAction">
+  <obsolete>
+    Deprecated as of 1/2016.
+  </obsolete>
+  <owner>kkimlabs@chromium.org</owner>
+  <summary>
+    Logs how user is opening a bookmark on Android. For example, user can long
+    press and select &quot;Open in a new tab&quot; or &quot;Open in incognito
+    tab&quot;.
+  </summary>
+</histogram>
+
+<histogram name="BrotliFilter.CompressionPercent" units="%">
+  <owner>eustas@chromium.org</owner>
+  <summary>Compressed/Decompressed size ratio.</summary>
+</histogram>
+
+<histogram name="BrotliFilter.ErrorCode" enum="BrotliFilterErrorCode">
+  <owner>eustas@chromium.org</owner>
+  <summary>More detailed failure reason.</summary>
+</histogram>
+
+<histogram name="BrotliFilter.GzipHeaderDetected" enum="BooleanPresent">
+  <owner>eustas@chromium.org</owner>
+  <summary>Indicates whether the gzip-like header was detected.</summary>
+</histogram>
+
+<histogram name="BrotliFilter.Status" enum="BrotliFilterDecodingStatus">
+  <owner>eustas@chromium.org</owner>
+  <summary>The final state of BrotliFilter.</summary>
+</histogram>
+
+<histogram name="BrotliFilter.UsedMemoryKB" units="KiB">
+  <owner>eustas@chromium.org</owner>
+  <summary>Maximal amount of memory allocated by decoder.</summary>
+</histogram>
+
+<histogram name="BrowserDialogs.ExternalProtocol.RememberCheckbox"
+    enum="BooleanChecked">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Whether or not the user checked the option in the external protocol dialog
+    to remember their choice of opening or not opening the specified app.
+    Recorded each time the user interacts with the External Protocol Dialog
+    (either accepting or cancelling/dismissing).
+  </summary>
+</histogram>
+
+<histogram name="BrowserRenderProcessHost.ChildCrashes" enum="RendererType">
+  <owner>wfh@chromium.org</owner>
+  <summary>Count of renderer process crashes grouped by type.</summary>
+</histogram>
+
+<histogram name="BrowserRenderProcessHost.ChildKills" enum="RendererType">
+  <owner>wfh@chromium.org</owner>
+  <summary>Count of renderer process kills grouped by type.</summary>
+</histogram>
+
+<histogram name="BrowserRenderProcessHost.ChildKills.OOM" enum="RendererType">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    Out of BrowserRenderProcessHost.ChildKills, numer of kills due to SIGKILL,
+    which is a strong signal of out of memory on ChromeOS, grouped by renderer
+    type.
+  </summary>
+</histogram>
+
+<histogram name="BrowserRenderProcessHost.ChildLaunchFailureCodes"
+    enum="LaunchErrorCodes">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    The launch error codes for failed renderer process launches.
+  </summary>
+</histogram>
+
+<histogram name="BrowserRenderProcessHost.ChildLaunchFailures"
+    enum="RendererType">
+  <owner>wfh@chromium.org</owner>
+  <summary>Count of renderer process launch failures grouped by type.</summary>
+</histogram>
+
+<histogram name="BrowserRenderProcessHost.DisconnectedAlive"
+    enum="RendererType">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Count of renderer process crashes that we miscounted because we took the
+    exit code too early. Grouped by type.
+  </summary>
+</histogram>
+
+<histogram name="Bubbles.Close.Accepted" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>An open bubble was closed because the user accepted it.</summary>
+</histogram>
+
+<histogram name="Bubbles.Close.Canceled" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>
+    An open bubble was closed because the user didn't accept it.
+  </summary>
+</histogram>
+
+<histogram name="Bubbles.Close.FocusLost" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>An open bubble was closed because of a focus change.</summary>
+</histogram>
+
+<histogram name="Bubbles.Close.Forced" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>An open bubble was forced to close.</summary>
+</histogram>
+
+<histogram name="Bubbles.Close.FrameDestroyed" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>An open bubble was dismissed because a frame was destroyed.</summary>
+</histogram>
+
+<histogram name="Bubbles.Close.FullscreenToggled" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>
+    An open bubble was dismissed because fullscreen was toggled.
+  </summary>
+</histogram>
+
+<histogram name="Bubbles.Close.Navigated" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>
+    An open bubble was dismissed because the page was navigated.
+  </summary>
+</histogram>
+
+<histogram name="Bubbles.Close.TabDetached" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>An open bubble was closed because a tab was detached.</summary>
+</histogram>
+
+<histogram name="Bubbles.Close.TabSwitched" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>An open bubble was closed because a tab was switched.</summary>
+</histogram>
+
+<histogram name="Bubbles.Close.UserDismissed" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>
+    An open bubble was dismissed by the user without making a decission.
+  </summary>
+</histogram>
+
+<histogram name="Bubbles.DisplayTime.All" units="ms">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>
+    Log the amount of time any bubble was visible. Only bubbles that are shown
+    will have a visible time.
+  </summary>
+</histogram>
+
+<histogram name="Bubbles.NeverShown" enum="BubbleType">
+  <owner>hcarmona@chromium.org</owner>
+  <summary>A bubble was given to the bubble manager but not shown.</summary>
+</histogram>
+
+<histogram name="Canvas.ContextType" enum="CanvasContextType">
+  <owner>junov@chromium.org</owner>
+  <owner>kbr@chromium.org</owner>
+  <summary>
+    Records the context type names used to create canvas rendering contexts.
+  </summary>
+</histogram>
+
+<histogram name="Canvas.DisplayListFallbackReason"
+    enum="CanvasDisplayListFallbackReason">
+  <owner>junov@chromium.org</owner>
+  <summary>
+    The reasons why a canvas initially set to display list mode had to fall back
+    to direct rasterization mode.
+  </summary>
+</histogram>
+
+<histogram name="Canvas.GPUAccelerated2DCanvasDisableDeferralReason"
+    enum="CanvasGPUAccelerated2DCanvasDisableDeferralReason">
+  <owner>junov@chromium.org</owner>
+  <summary>
+    The reasons why a GPU accelerated canvas stopped deferring its rendering
+    operations.
+  </summary>
+</histogram>
+
+<histogram name="Canvas.HibernationEvents" enum="CanvasHibernationEvent">
+  <owner>junov@chromium.org</owner>
+  <summary>
+    Records the occurrence of events related to 2D canvas GPU resource
+    hibernation.
+  </summary>
+</histogram>
+
+<histogram name="Canvas.Offscreen.CommitType" enum="OffscreenCanvasCommitType">
+  <owner>xidachen@chromium.org</owner>
+  <owner>junov@chromium.org</owner>
+  <summary>
+    The type of code path that OffscreenCanvas's commit API goes through.
+  </summary>
+</histogram>
+
+<histogram name="Canvas.RequestedImageMimeTypes" enum="RequestedImageMimeType">
+  <owner>xlai@chromium.org</owner>
+  <summary>
+    Records the occurence of image file formats passed into toDataURL and toBlob
+    functions in canvas.
+  </summary>
+</histogram>
+
+<histogram name="CAPSUpdater.Step" enum="CAPSUpdaterStep">
+  <obsolete>
+    Deprecated 08/2016 with removal of Chrome Crash Service component.
+  </obsolete>
+  <owner>scottmg@chromium.org</owner>
+  <summary>
+    Tracks the component updater steps for the Chrome Crash Service.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.DetectResult" enum="CaptivePortalDetectResult">
+  <owner>meacer@chromium.org</owner>
+  <summary>Records the result of a captive portal probe.</summary>
+</histogram>
+
+<histogram name="CaptivePortal.Notification.Status"
+    enum="CaptivePortalNotificationStatus">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Count of displayed and not displayed due to errors notifications about
+    captive portal.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.Notification.UserAction"
+    enum="CaptivePortalNotificationUserAction">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Count of clicked, closed and ignored captive portal notifications.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.OOBE.DetectionDuration" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Duration of the captive portal detection process for a particular network at
+    OOBE. Detection duration is recorded each time portal detection is completed
+    for an active network.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.OOBE.DetectionResult" enum="CaptivePortalStatus">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The result of captive portal detection attempts performed at OOBE. Detection
+    result is recorded when portal detection is completed for an active network
+    and when it differs from the previous result for the same network.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.OOBE.DiscrepancyWithShill"
+    enum="CaptivePortalStatus">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The result of captive portal detection attempts at OOBE if it diverges from
+    network manager results. Detection result is recorded each time portal
+    detection is completed for an active network.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.OOBE.PortalToOnlineTransition" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Number of milliseconds passed between consecutive reports for the same
+    network about portal and online states.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.RedirectTime" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Number of milliseconds between start of request to gstatic.com/generate_204
+    and receipt of response with redirect to captive portal login page.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.Session.DetectionDuration" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Duration of the captive portal detection process for a particular network in
+    user session. Detection duration is recorded each time portal detection is
+    completed for an active network.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.Session.DetectionResult"
+    enum="CaptivePortalStatus">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The result of captive portal detection attempts performed in user session.
+    Detection result is recorded when portal detection is completed for an
+    active network and when it differs from the previous result for the same
+    network.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.Session.DiscrepancyWithShill"
+    enum="CaptivePortalStatus">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The result of captive portal detection attempts in session if it diverges
+    from network manager results. Detection result is recorded each time portal
+    detection is completed for an active network.
+  </summary>
+</histogram>
+
+<histogram name="CaptivePortal.Session.PortalToOnlineTransition" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Number of milliseconds passed between consecutive reports for the same
+    network about portal and online states.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Channel.Certificate" enum="CastCertificateStatus">
+  <owner>ryanchung@google.com</owner>
+  <summary>
+    Records the result of the Cast certificate verification on the Cast sender.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Network.Down.Duration.In.Seconds" units="seconds">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Records the time the network has been down on a Cast device.  Recorded when
+    network goes up.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Network.Up.Duration.In.Minutes" units="minutes">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Records the time the network has been up on a Cast device.  Recorded when
+    network goes down.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.CastButtonShown" enum="BooleanEnabled">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Records the number of times the cast button was shown to the user. The value
+    will be true if the button is enabled, and false if the button is disabled.
+    Note that depending on the current UX, it's possible that we hide the button
+    entirely if it's disabled, so it's possible for the false values to be 0.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.CastButtonShownInitialFullscreen"
+    enum="BooleanEnabled">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Records the number of times the cast button was shown to the user when the
+    video is fullscreened. The value will only be recorded on entering
+    fullscreen. The value will be true if the button is enabled, and false if
+    the button is disabled. Note that depending on the current UX,it's possible
+    that we hide the button entirely if it's disabled, so it's possible for the
+    false values to be 0.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.CastMediaType" enum="MediaContainers">
+  <owner>miguelg@chromium.org</owner>
+  <summary>Records the media type of every video being cast.</summary>
+</histogram>
+
+<histogram name="Cast.Sender.CastPlayerResult" enum="CastPlayBackState">
+  <owner>maybelle@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Records the result of a request to play remotely on a per player app basis
+    within Chrome for Android.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.CastPlaySuccess" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2014, and replaced by Cast.Sender.CastPlayerResult.
+  </obsolete>
+  <owner>maybelle@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Records the result of a request to play remotely. The value will be true if
+    the playback succeeded, and false if there was an error.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.CastTimeRemainingPercentage" units="%">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Records the percentage of the video left at the time the remote playback is
+    stopped. This will be recorded when the playback is stopped by the user, or
+    when it's stopped by the cast device.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.DeviceType" enum="RemotePlaybackDeviceType">
+  <owner>avayvod@google.com</owner>
+  <summary>
+    Records the type of the remote playback device selected by the user. This
+    will be recorded when the user has chosen the device from the media route
+    chooser dialog.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.FullscreenControlsActionWithMediaElement"
+    enum="MediaCommand">
+  <owner>aberent@chromium.org</owner>
+  <owner>avayvod@chromium.org</owner>
+  <summary>
+    Record each interaction with the fullscreen remote playback controls in
+    cases when the corresponding media element on the page was present.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.FullscreenControlsActionWithoutMediaElement"
+    enum="MediaCommand">
+  <owner>aberent@chromium.org</owner>
+  <owner>avayvod@chromium.org</owner>
+  <summary>
+    Record each interaction with the fullscreen remote playback controls in
+    cases when the corresponding media element on the page was not present.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.MediaElementPresentWhenShowFullscreenControls"
+    enum="BooleanPresent">
+  <owner>aberent@chromium.org</owner>
+  <owner>avayvod@chromium.org</owner>
+  <summary>
+    Indicates whether the corresponding media element on the page was present
+    when the fullscreen remote playback controls were shown.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.Overlay" enum="CastOverlayEvents">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records events and user interactions related to the Cast overlay shown on
+    video elements.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.SessionTimeWithoutMediaElementPercentage"
+    units="%">
+  <owner>aberent@chromium.org</owner>
+  <owner>avayvod@chromium.org</owner>
+  <summary>
+    Records the ratio of the time the media element was detached from the remote
+    playback session to the total duration of the session (as from when the
+    element has been attached till when the session stopped or disconnected), in
+    percents.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.UrlResolveResult"
+    enum="RemotePlaybackUrlResolveResult">
+  <owner>aberent@google.com</owner>
+  <summary>
+    Records the result of resolving the video URL for cast, including checking
+    its CORS header.
+  </summary>
+</histogram>
+
+<histogram name="Cast.Sender.VideoEncodeAcceleratorInitializeSuccess"
+    enum="BooleanSuccess">
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Indicates whether initialization of a video encode accelerator for Cast
+    sender was successful.
+  </summary>
+</histogram>
+
+<histogram name="CastV2.Transport.Connect.Latency.Unknown" units="ms">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    The latency between when a Cast V2 connection is established and the first
+    message is received on that connection. &quot;Unknown&quot; is the peer
+    type, which is not known at this point in the CastV2 connection
+    establishment.  Naming conforms to the CastV2 sender-side histogram naming
+    convention &quot;CastV2.[action].[name].[peer_type]&quot;.
+  </summary>
+</histogram>
+
+<histogram name="CastV2.Transport.SslHandshake.Error.Unknown"
+    enum="NetErrorCodes">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    On accepting a Cast V2 transport socket connection, if an error is
+    encountered, the error code is logged here. &quot;Unknown&quot; is the peer
+    type, which is not known at this point in the CastV2 connection
+    establishment.  &quot;SslHandshake.Error&quot; is the name of the action.
+    Naming conforms to the CastV2 sender-side histogram naming convention
+    &quot;CastV2.[action].[name].[peer_type]&quot;.
+  </summary>
+</histogram>
+
+<histogram name="CastV2.Transport.SslHandshake.Unknown" units="ms">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    The time taken to do the handshake during Cast V2 transport socket creation.
+    &quot;Unknown&quot; is the peer type, which is not known at this point in
+    the CastV2 connection establishment.  Naming conforms to the CastV2
+    sender-side histogram naming convention
+    &quot;CastV2.[action].[name].[peer_type]&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Cellular.ActivationFailure">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of cellular device activation failures (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Cellular.ActivationTry">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The count of cellular device activation tries (Chrome OS).</summary>
+</histogram>
+
+<histogram name="Cellular.ConnectionFailed">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of cellular reconnect failures during activation (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Cellular.ConnectionRetry">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of cellular device reconnect tries during activation (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Cellular.MobileSetupFailed">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of successful cellular plan established (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Cellular.MobileSetupStart">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of initiated cellular device setup starts (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Cellular.MobileSetupSucceeded">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The count of failed cellular plan setup tries (Chrome OS).</summary>
+</histogram>
+
+<histogram name="Cellular.PaymentFailed">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The count of failed cellular plan purchases (Chrome OS).</summary>
+</histogram>
+
+<histogram name="Cellular.PaymentReceived">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of successfully completed cellular plan purchases (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="CertificateType">
+  <obsolete>
+    Deprecated as of 8/2013. This histogram only considered the leaf certificate
+    expiry date as a proxy for whether a certificate was in-scope for the BRs,
+    but did not consider the issuance date. As some CAs have issued long-lived
+    certs prior to the BRs, this disproportionately reported those certs as
+    being subject to the BRs, but non-compliant, when in reality they're not
+    subject.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Information about the certificate algorithms and sizes in use on the web, to
+    examine compliance with the CA/Browser Forum requirements and security best
+    practice.
+  </summary>
+</histogram>
+
+<histogram name="CertificateType2">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Information about the certificate algorithms and sizes in use on the web, to
+    examine compliance with the CA/Browser Forum requirements and security best
+    practice. This histogram considers the notBefore as the issuance date, for
+    purposes of what requirements apply.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.BadMessgeTerminated" enum="ProcessType2">
+  <owner>jam@chromium.org</owner>
+  <summary>
+    Count of child processes killed because they sent an IPC that couldn't be
+    deserialized.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.Crashed" enum="ProcessType">
+  <obsolete>
+    Deprecated 3/2013. Renamed to ChildProcess.Crashed2.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Count of child process crashes grouped by process type.</summary>
+</histogram>
+
+<histogram name="ChildProcess.Crashed2" enum="ProcessType2">
+  <owner>wfh@chromium.org</owner>
+  <summary>Count of child process crashes grouped by process type.</summary>
+</histogram>
+
+<histogram name="ChildProcess.CrashedWasAlive" enum="ProcessType">
+  <obsolete>
+    Deprecated as of 10/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process crashes that we miscounted because we took the exit
+    code too early. Grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.Crashes" enum="ProcessType">
+  <obsolete>
+    Deprecated 10/2011. Renamed to ChildProcess.Crashed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Count of child process crashes grouped by process type.</summary>
+</histogram>
+
+<histogram name="ChildProcess.CrashesWasAlive" enum="ProcessType">
+  <obsolete>
+    Deprecated 10/2011. Renamed to ChildProcess.CrashedWasAlive.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process crashes that we miscounted because we took the exit
+    code too early. Grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.DefaultCase" enum="ProcessType">
+  <obsolete>
+    Deprecated as of 10/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process crashes for which we were not able to understand the
+    exit code, grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.Disconnected" enum="ProcessType">
+  <obsolete>
+    Deprecated 3/2013. Renamed to ChildProcess.Disconnected2.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process abnormal channel disconnects grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.Disconnected2" enum="ProcessType2">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Count of child process abnormal channel disconnects grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.DisconnectedAlive" enum="ProcessType">
+  <obsolete>
+    Deprecated 3/2013. Renamed to ChildProcess.DisconnectedAlive2.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process abnormal channel disconnects that are not classified
+    and reported because we took the exit code too early. Grouped by process
+    type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.DisconnectedAlive2" enum="ProcessType2">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Count of child process abnormal channel disconnects that are not classified
+    and reported because we took the exit code too early. Grouped by process
+    type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.HangRendererType" enum="RendererUnresponsiveType">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    What the browser was waiting for from the renderer when it was reported as
+    hung.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.InvalidSandboxStateCrash.NoStartupWindow"
+    enum="BooleanPresent">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Whether the browser command line had the switch --no-startup-window when a
+    child process crashed due to invalid sandbox state. Recorded when a child
+    process crashes if the exit code from the child process is
+    RESULT_CODE_INVALID_SANDBOX_STATE.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.Killed" enum="ProcessType">
+  <obsolete>
+    Deprecated 3/2013. Renamed to ChildProcess.Killed2.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Count of child process kills grouped by process type.</summary>
+</histogram>
+
+<histogram name="ChildProcess.Killed2" enum="ProcessType2">
+  <owner>wfh@chromium.org</owner>
+  <summary>Count of child process kills grouped by process type.</summary>
+</histogram>
+
+<histogram name="ChildProcess.Killed2.OOM" enum="ProcessType2">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    Out of ChildProcess.Killled, number of kills due to SIGKILL, which is a
+    strong signal of out of memory on ChromeOS, grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.KilledByExtensionAPI">
+  <owner>nasko@chromium.org</owner>
+  <summary>
+    Count of child processes killed by the extension API (processes.terminate).
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.KilledWasAlive" enum="ProcessType">
+  <obsolete>
+    Deprecated as of 10/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process kills that we miscounted because we took the exit
+    code too early. Grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="ChildProcess.Kills" enum="ProcessType">
+  <obsolete>
+    Deprecated 10/2011. Renamed to ChildProcess.Killed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Count of child process kills grouped by process type.</summary>
+</histogram>
+
+<histogram name="ChildProcess.KillsWasAlive" enum="ProcessType">
+  <obsolete>
+    Deprecated 10/2011. Renamed to ChildProcess.KilledWasAlive.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of child process kills that we miscounted because we took the exit
+    code too early. Grouped by process type.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.Android.Activity.CrashCounts" enum="AndroidActivityId">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicates how many times each particular type of Activity was in the
+    foreground when a UMA session was terminated abnormally. UMA sessions last
+    as long as Chrome remains in the foreground.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.Android.Activity.LaunchCounts" enum="AndroidActivityId">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicates how many times each particular type of Activity was brought to the
+    foreground when a UMA session was active (i.e. launched at some point). UMA
+    sessions last as long as Chrome remains in the foreground.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.Browser.CrashedExecutionPhase" enum="ExecutionPhase">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Indicates the execution phase the browser was in when the browser crashed.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.Browser.ExecutionPhase" enum="ExecutionPhase">
+  <obsolete>
+    Deprecated as of 11/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicates the execution phase the browser was in when browser didn't exit
+    cleanly.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.BrowserCrashDumpAttempts">
+  <obsolete>
+    Deprecated as of 04/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total number of times the browser process has attempted to generate a
+    crash dump. This should be the sum of Chrome.BrowserDumpsWithCrash and
+    Chrome.BrowserDumpsWithNoCrash.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.BrowserDumpsWithCrash">
+  <obsolete>
+    Deprecated as of 04/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times the browser process has attempted to generate a crash
+    dump because of an actual browser crash.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.BrowserDumpsWithNoCrash">
+  <obsolete>
+    Deprecated as of 04/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times the browser process has attempted to generate a crash
+    dump in a non-crashing (i.e., reporting only) context.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.MessageLoopProblem" enum="MessageLoopProblems">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Track set of Windows errors inside the meessage loop/pump system, where
+    system calls fail, and we try to gracefully recover.  These errors should
+    really never happen, so we should be sure to look closer if they do.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.ProcessSingleton.NotifyResult" enum="NotifyResult">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The result of every rendez-vous reported once per browser process launch.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.ProcessSingleton.TimeToCreate" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time it takes to grab the process singleton. Reported once per successful
+    attempt at obtaining the singleton.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.ProcessSingleton.TimeToFailure" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time it takes to return an error from the process singleton algorithm (nor
+    succeeding in obtaining it, nor in generating a rendez-vous). This does not
+    include time spent in the fast notification path (chrome_exe_main_win.cc).
+  </summary>
+</histogram>
+
+<histogram name="Chrome.ProcessSingleton.TimeToNotify" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time it takes to find the process singleton owner and notify it. Reported
+    once per successful rendez-vous. This does not include time spent in the
+    fast notification path (chrome_exe_main_win.cc).
+  </summary>
+</histogram>
+
+<histogram name="Chrome.SearchSelectExempt" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The default search engine selected by a user not in the search engine dialog
+    experiment.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.SearchSelectExperiment" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The default search engine selected by a user in the search engine dialog
+    experiment.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.SearchSelectExperimentSlot1" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The default search engine selected by a user in slot 1 of a randomized
+    search engine dialog.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.SearchSelectExperimentSlot2" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The default search engine selected by a user in slot 2 of a randomized
+    search engine dialog.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.SearchSelectExperimentSlot3" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The default search engine selected by a user in slot 3 of a randomized
+    search engine dialog.
+  </summary>
+</histogram>
+
+<histogram name="Chrome.SearchSelectExperimentSlot4" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The default search engine selected by a user in slot 4 of a randomized
+    search engine dialog.
+  </summary>
+</histogram>
+
+<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime"
+    units="ms">
+  <obsolete>
+    Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
+  </obsolete>
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Time between the intent arrival in a Chrome generated CCT and the first
+    navigation commit, if the navigation is successful. Similar in principle to
+    Startup.FirstCommitNavigationTime.
+  </summary>
+</histogram>
+
+<histogram name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"
+    units="ms">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    In &quot;Herb&quot; mode shows the time between the intent arrival in a
+    Chrome generated CCT and the first navigation commit, if the navigation is
+    successful. Similar in principle to Startup.FirstCommitNavigationTime.
+  </summary>
+</histogram>
+
+<histogram name="ChromeGeneratedCustomTab.IntentToPageLoadedTime" units="ms">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    In &quot;Herb&quot; mode shows time between the intent arrival in a Chrome
+    generated CCT and the first &quot;page loaded&quot; event, if the navigation
+    is successful.
+  </summary>
+</histogram>
+
+<histogram name="ChromeNotifierService.Actions"
+    enum="ChromeNotifierServiceActionType">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The actions to enable or disable services sending synced notifications.
+    Synced Notification Sending services can be individually disabled by the
+    user in the Chrome Notification center settings dialog.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.Display.ColorProfile" enum="ChromeOSColorProfile">
+  <owner>xiaowenx@chromium.org</owner>
+  <owner>mukai@chromium.org</owner>
+  <summary>
+    The name of the current color calibration of the display on ChromeOS. This
+    value is sent when the color calibration is changed by the user.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.GAIA.WebViewFlow" enum="BooleanGAIAWebViewFlow">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Whether a user signed in using the new WebView-based GAIA flow. This value
+    is sent after the GAIA screen has completed user authentication.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.MachineIdRegen.AgeSeconds" units="seconds">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of seconds of uptime since the last time the ChromeOS machine-id
+    was regenerated. This is reported every time the machine-id is regenerated
+    except for the first time since reboot.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.MachineIdRegen.Reason" enum="ChromeOSMachineIdReason">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The reason why the ChromeOS machine-id was regenerated. This is reported
+    when the machine-id is re-generated.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.MemoryPressureLevel" enum="MemoryPressureLevel">
+  <owner>xdai@chromium.org</owner>
+  <summary>
+    The memory pressure level in ChromeOS, which is recorded periodically (once
+    per second). This is used to show the relative frequency of the system being
+    in a critical vs relaxed memory pressure state.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.PlatformVerification.Available"
+    enum="BooleanAvailable">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    Whether platform verification subsystem features are available at the time a
+    platform verification request is made for content protection on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.PlatformVerification.ExpiryStatus"
+    enum="ChromeOSPlatformVerificationExpiryStatus">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The result of a certificate expiry check during a platform verification
+    attempt for content protection on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.PlatformVerification.Result"
+    enum="ChromeOSPlatformVerificationResult">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The result of a platform verification attempt for content protection on
+    Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.SAML.APIUsed" enum="BooleanUsage">
+  <owner>bartfab@chromium.org</owner>
+  <summary>
+    Whether a Chrome OS login via SAML used the principals API. This is recorded
+    during login on Chrome OS if SAML is being used for authentication.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.SAML.Scraping.PasswordCount">
+  <owner>bartfab@chromium.org</owner>
+  <summary>
+    The number of passwords that were scraped during a Chrome OS login via SAML.
+    This is set only when the principals API is not used.
+  </summary>
+</histogram>
+
+<histogram name="ChromeOS.SAML.Scraping.VerificationResult"
+    enum="BooleanSuccess">
+  <owner>bartfab@chromium.org</owner>
+  <summary>
+    Whether one of the scraped passwords was successfully verified as the user's
+    password. This is set only when the principals API is not used.
+  </summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.BrowserLoadTime" units="ms">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    The amount of time it took to load the native libraries in the browser
+    process.
+  </summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.BrowserStates"
+    enum="ChromiumAndroidLinkerBrowserState">
+  <owner>simonb@chromium.org</owner>
+  <summary>
+    Whether relro sharing was attempted for the browser process, and if
+    attempted, whether it succeeded.
+  </summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.IsLowMemoryDevice" enum="Boolean">
+  <obsolete>
+    Deprecated 10/2014 in Issue 419010, and replaced by
+    ChromiumAndroidLinker.BrowserStates.
+  </obsolete>
+  <owner>simonb@chromium.org</owner>
+  <summary>Is low memory device.</summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.LibraryLoadFromApkStatus"
+    enum="LibraryLoadFromApkStatus">
+  <owner>petrcermak@chromium.org</owner>
+  <summary>
+    Whether the device supports loading a library directly from the APK file.
+    The functionality is checked and reported during every Chromium browser
+    process start up.
+  </summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.LoadedAtFixedAddressFailed"
+    enum="Boolean">
+  <obsolete>
+    Deprecated 10/2014 in Issue 419010, and replaced by
+    ChromiumAndroidLinker.RendererStates.
+  </obsolete>
+  <owner>simonb@chromium.org</owner>
+  <summary>Load at fixed address failed.</summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.RendererLoadTime" units="ms">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    The amount of time it took to load the native libraries in the renderer
+    process.
+  </summary>
+</histogram>
+
+<histogram name="ChromiumAndroidLinker.RendererStates"
+    enum="ChromiumAndroidLinkerRendererState">
+  <owner>simonb@chromium.org</owner>
+  <summary>
+    Whether relro sharing was attempted for a renderer process, and if
+    attempted, whether it succeeded.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Connections" enum="State">
+  <owner>anandc@chromium.com</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    Recorded every time a Chromoting connection enters a new state.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Connections.Durations.Closed" units="minutes">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The duration of sessions that were closed, normally by a user-initiated
+    action.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Connections.Durations.Failed" units="minutes">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>The duration of sessions that failed to connect.</summary>
+</histogram>
+
+<histogram name="Chromoting.Connections.Times.ToAuthenticate" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The time taken to authenticate as part of a Chromoting connection request.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Connections.Times.ToConnect" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The time taken to connect to a remote-host, after a request has been
+    authenticated.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Input.EventLatency" units="microseconds">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    Input event delivery latency from the browser to the plugin.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.Bandwidth" units="Bytes/second">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The bandwidth of non-empty packets in Chromoting remote sessions, updated
+    every time a video packet is processed and logged every 1s.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.CaptureLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The time to capture a video frame on the host, returned as part of a video
+    packet.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.CaptureOverhead" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    Amount of time wasted on IPC and threading overhead when capturing a video
+    frame.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.CapturePendingLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The time from when an input event is received to when the next frame is
+    captured.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.DecodeLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>The time to decode a video packet on the client.</summary>
+</histogram>
+
+<histogram name="Chromoting.Video.EncodeLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The time to encode a video packet on the host, returned as part of a video
+    packet.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.EncodePendingLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    Delay before a newly captured frame is passed to the encoder.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.FrameRate" units="fps">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The frame-rate of non-empty packets in Chromoting remote sessions, updated
+    every time a video packet is processed and logged every 1s.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.NetworkLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    Estimated network roundtrip latency calculated by subtracting total
+    processing time on host and client from the total roundtrip time.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.PacketRate" units="packets/second">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The packets/sec, including empty packets, in Chromoting remote sessions,
+    updated every time a video packet is processed and logged every 1s.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.PaintLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>The time to paint a decoded video packet on the client.</summary>
+</histogram>
+
+<histogram name="Chromoting.Video.RoundTripLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    The time from an input being sent from the client to a response being
+    received by the client after it is processed by the host.
+  </summary>
+</histogram>
+
+<histogram name="Chromoting.Video.SendPendingLatency" units="ms">
+  <owner>anandc@chromium.org</owner>
+  <owner>sergeyu@chromium.org</owner>
+  <summary>
+    Delay before an encoded video packet is written to the send buffer.
+  </summary>
+</histogram>
+
+<histogram name="clickjacking.discard_download" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The length of time between a dangerous download appearing on the downloads
+    shelf, and the &quot;Discard&quot; button being clicked.
+  </summary>
+</histogram>
+
+<histogram name="clickjacking.dismiss_download" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The length of time between a dangerous download appearing on the downloads
+    shelf, and the &quot;Dismiss&quot; button being clicked. Deprecated since
+    M54.
+  </summary>
+</histogram>
+
+<histogram name="clickjacking.launch_url" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The length of time between the external protocol dialog being shown and the
+    &quot;Launch Application&quot; button being clicked.
+  </summary>
+</histogram>
+
+<histogram name="clickjacking.open_download" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The length of time between a download appearing on the download shelf, and
+    the user opening it by clicking the item or pressing return.
+  </summary>
+</histogram>
+
+<histogram name="clickjacking.report_and_discard_download" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time between &quot;Report and Discard&quot; button being shown and it being
+    clicked.
+  </summary>
+</histogram>
+
+<histogram name="clickjacking.save_download" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The length of time between a dangerous download appearing on the download
+    shelf, and the &quot;Keep&quot; button being clicked.
+  </summary>
+</histogram>
+
+<histogram name="Clipboard.IncognitoUseCase" enum="ClipboardAction">
+  <obsolete>
+    Deprecated as of 4/2013, experiment confirmed correctness of our patch.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Counts how often the user writes or reads from the clipboard and whether the
+    write was from an incognito window or not.
+  </summary>
+</histogram>
+
+<histogram name="Clipboard.X11StoreCopyPasteDuration" units="ms">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    The length of time that it takes to transfer ownership of Chrome's CLIPBOARD
+    selection to the clipboard manager when Chrome exits.
+  </summary>
+</histogram>
+
+<histogram name="CloudPrint.AuthEvent" enum="CloudPrintAuthEventType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Event counts in CloudPrintAuth.</summary>
+</histogram>
+
+<histogram name="CloudPrint.AvailablePrinters">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of printers availible for registration.</summary>
+</histogram>
+
+<histogram name="CloudPrint.AvailablePrintersList">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The number of printers availible for registration in Windows Service.
+  </summary>
+</histogram>
+
+<histogram name="CloudPrint.JobHandlerEvent"
+    enum="CloudPrintJobHandlerEventType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Event counts in PrinterJobHandler.</summary>
+</histogram>
+
+<histogram name="CloudPrint.JobsDonePerInterval">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of jobs successfully completed per hour.</summary>
+</histogram>
+
+<histogram name="CloudPrint.JobsStartedPerInterval">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of jobs started per hour.</summary>
+</histogram>
+
+<histogram name="CloudPrint.JobStatus" enum="CloudPrintJobStatusType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Then number of job completion statuses.</summary>
+</histogram>
+
+<histogram name="CloudPrint.NativeJobStatus"
+    enum="CloudPrintNativeJobStatusType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Event counts in PrintSystem.</summary>
+</histogram>
+
+<histogram name="CloudPrint.PrepareTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time needed to prepare job for spooling.</summary>
+</histogram>
+
+<histogram name="CloudPrint.PrinterBlacklistSize">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of printers user has blacklisted.</summary>
+</histogram>
+
+<histogram name="CloudPrint.PrinterWhitelistSize">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of printers user has whitelisted.</summary>
+</histogram>
+
+<histogram name="CloudPrint.PrintingTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time needed to finish print job.</summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceEvents" enum="ServiceProcessEventType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Event counts in ServiceProcessControl.</summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceProcessSocketLength">
+  <obsolete>
+    Deprecated as of 12/2015. Confirm assumption about socket name size.
+    http://crbug.com/466644
+  </obsolete>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Temporarily histogram with size of IPC sockets in default location.
+  </summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceUtilityCapsFailTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The amount of time used to fail to collect printer capabilities.
+  </summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceUtilityCapsTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time used to collect printer capabilities.</summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceUtilityDisconnectTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The amount of time the utility process runs before disconnect.
+  </summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceUtilityMetafileFailTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time used to fail to generate metafile.</summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceUtilityMetafileTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time used to generate metafile.</summary>
+</histogram>
+
+<histogram name="CloudPrint.ServiceUtilityProcessHostEvent"
+    enum="ServiceUtilityProcessHostEventType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Event counts in ServiceUtilityProcessHost.</summary>
+</histogram>
+
+<histogram name="CloudPrint.SpoolingTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time needed to spool print job.</summary>
+</histogram>
+
+<histogram name="CloudPrint.UnregisterPrinters">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of printers to unregister.</summary>
+</histogram>
+
+<histogram name="CloudPrint.UrlFetcherDownloadSize" units="KB">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of data downloaded on cloud print request.</summary>
+</histogram>
+
+<histogram name="CloudPrint.UrlFetcherRequestTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of time needed for cloud print request.</summary>
+</histogram>
+
+<histogram name="CloudPrint.UrlFetcherRequestType"
+    enum="CloudPrintUrlFetcherRequestType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Request counts to cloud print service.</summary>
+</histogram>
+
+<histogram name="CloudPrint.UrlFetcherRetries">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The number of retries used to complete cloud print request.</summary>
+</histogram>
+
+<histogram name="CloudPrint.UrlFetcherUploadSize" units="KB">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>The amount of data uploaded with cloud print request.</summary>
+</histogram>
+
+<histogram name="CloudPrint.XmppPingTry">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Number of tries before successful ping. 99 means giving up.</summary>
+</histogram>
+
+<histogram name="ComponentUpdater.Calls" enum="ComponentUpdaterCalls">
+  <owner>sorin@chromium.org</owner>
+  <summary>
+    The number of times the component updater called UpdateClient::Install or
+    UpdateClient::Update. These correspond to the number of manual component
+    update checks performed as a result of a user action, and the number of
+    automated component update checks.
+  </summary>
+</histogram>
+
+<histogram name="ComponentUpdater.UpdateCompleteResult" enum="BooleanError">
+  <owner>sorin@chromium.org</owner>
+  <summary>The result of an install or an update check.</summary>
+</histogram>
+
+<histogram name="ComponentUpdater.UpdateCompleteTime" units="ms">
+  <owner>sorin@chromium.org</owner>
+  <summary>
+    Time to complete an Install or an Update component update call.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.Browser.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
+    units="pixels/ms">
+  <obsolete>
+    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
+    metric.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Area of invalidated content, in pixels, divided by update (i.e. record), in
+    milliseconds. Recorded when display list recording source is updated (in a
+    browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.DisplayListRecordingSource.UpdateUs"
+    units="microseconds">
+  <obsolete>
+    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
+    metric.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating (i.e. recording) a display list, in microseconds.
+    Recorded when display list is updated (in a browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.LayerTreeImpl.CalculateDrawPropertiesUs"
+    units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating layer draw properties, in microseconds. Recorded when a
+    LayerTreeImpl's draw properties are updated (in a browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.NumActiveLayers" units="layers">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    The number of layers in the active tree for each compositor frame. This is
+    logged once per frame, before the frame is drawn (in a browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.NumRenderSurfaces" units="surfaces">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    The number of render surfaces in the render surface layer list. Recorded
+    each time the render surface layer list is constructed (in a browser
+    process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.PictureMemoryUsageKb" units="KB">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
+    Recorded once per frame, before the frame is drawn (in a browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.PicturePile.UpdateInvalidatedAreaPerMs"
+    units="pixels/ms">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Area of invalidated content, in pixels, divided by update (i.e. record), in
+    milliseconds. Recorded when picture pile is updated (in a browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.PicturePile.UpdateUs" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating (i.e. recording) a picture pile, in microseconds.
+    Recorded when picture pile is updated (in a browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs"
+    units="pixels/ms">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
+    of a compositor rasterization task. Recorded after the task finishes (in a
+    browser process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Browser.RasterTask.RasterUs" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent completing a compositor rasterization task, in microseconds.
+    Recorded after the task finishes (in a browser process).
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.Browser.RenderPass.AppendQuadData.NumMissingTilesNoImageContent">
+  <obsolete>
+    Deprecated 02/2016. We'd learned as much as we could from this metric and it
+    made no sense to keep it around.
+  </obsolete>
+  <owner>vollick@chromium.org</owner>
+  <summary>
+    Tracks the number of missing tiles that had some image content in the
+    browser process.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.Browser.RenderPass.AppendQuadData.NumMissingTilesSomeImageContent">
+  <obsolete>
+    Deprecated 02/2016. We'd learned as much as we could from this metric and it
+    made no sense to keep it around.
+  </obsolete>
+  <owner>vollick@chromium.org</owner>
+  <summary>
+    Tracks the number of missing tiles that did not have any image content in
+    the browser process.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.CopyFromSurfaceTime" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The turn around time taken for the async readback of pixels is measured
+    here.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.CopyFromSurfaceTimeSynchronous" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time taken for the sync readback of pixels is measured here.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
+    units="pixels/ms">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Area of invalidated content, in pixels, divided by update (i.e. record), in
+    milliseconds. Recorded when display list recording source is updated.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.DisplayListRecordingSource.UpdateUs"
+    units="microseconds">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating (i.e. recording) a display list, in microseconds.
+    Recorded when display list is updated.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.NumActiveLayers">
+  <obsolete>
+    Deprecated 04/2016, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>dneto@chromium.org</owner>
+  <summary>
+    The number of layers in the active tree for each compositor frame. This is
+    logged once per frame, before the frame is drawn.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.PictureMemoryUsageKb" units="KB">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
+    Recorded once per frame, before the frame is drawn.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.PicturePile.UpdateInvalidatedAreaPerMs"
+    units="pixels/ms">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Area of invalidated content, in pixels, divided by update (i.e. record), in
+    milliseconds. Recorded when picture pile is updated.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.PicturePile.UpdateUs" units="microseconds">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating (i.e. recording) a picture pile, in microseconds.
+    Recorded when picture pile is updated.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.RasterTask.RasterPixelsPerMs" units="pixels/ms">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
+    of a compositor rasterization task. Recorded after the task finishes.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.RasterTask.RasterUs" units="microseconds">
+  <obsolete>
+    Deprecated 09/2015, replaced by similar metrics under Compositing.Renderer
+    and Compositing.Browser, depending on which process it occurs in.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent completing a compositor rasterization task, in microseconds.
+    Recorded after the task finishes.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.CALayerResult" enum="CALayerResult">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    The outcome of attempting to replace all renderer tiles with CALayers.
+    Either success, or the first reason why a DrawQuad couldn't be replaced by a
+    CALayer.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.Renderer.DisplayListRecordingSource.UpdateInvalidatedAreaPerMs"
+    units="pixels/ms">
+  <obsolete>
+    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
+    metric.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Area of invalidated content, in pixels, divided by update (i.e. record), in
+    milliseconds. Recorded when display list recording source is updated (in a
+    renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.DisplayListRecordingSource.UpdateUs"
+    units="microseconds">
+  <obsolete>
+    Deprecated 05/2016. See Blink.Paint.UpdateTime as a related alternate
+    metric.
+  </obsolete>
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating (i.e. recording) a display list, in microseconds.
+    Recorded when display list is updated (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.LayerTreeImpl.CalculateDrawPropertiesUs"
+    units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating layer draw properties, in microseconds. Recorded when a
+    LayerTreeImpl's draw properties are updated (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.NumActiveLayers" units="layers">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    The number of layers in the active tree for each compositor frame. This is
+    logged once per frame, before the frame is drawn (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.NumRenderSurfaces" units="surfaces">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    The number of render surfaces in the render surface layer list. Recorded
+    each time the render surface layer list is constructed (in a renderer
+    process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.PictureMemoryUsageKb" units="KB">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Total estimated memory used by SkPictures in the layer tree, in kilobytes.
+    Recorded once per frame, before the frame is drawn (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.PicturePile.UpdateInvalidatedAreaPerMs"
+    units="pixels/ms">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Area of invalidated content, in pixels, divided by update (i.e. record), in
+    milliseconds. Recorded when picture pile is updated (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.PicturePile.UpdateUs"
+    units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent updating (i.e. recording) a picture pile, in microseconds.
+    Recorded when picture pile is updated (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs"
+    units="pixels/ms">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Rasterized area, in pixels, divided by rasterization time, in milliseconds,
+    of a compositor rasterization task. Recorded after the task finishes (in a
+    renderer process).
+  </summary>
+</histogram>
+
+<histogram name="Compositing.Renderer.RasterTask.RasterUs" units="microseconds">
+  <owner>paint-dev@chromium.org</owner>
+  <summary>
+    Time spent completing a compositor rasterization task, in microseconds.
+    Recorded after the task finishes (in a renderer process).
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.Renderer.RenderPass.AppendQuadData.NumMissingTilesNoImageContent">
+  <obsolete>
+    Deprecated 02/2016. We'd learned as much as we could from this metric and it
+    made no sense to keep it around.
+  </obsolete>
+  <owner>vollick@chromium.org</owner>
+  <summary>
+    Tracks the number of missing tiles that had some image content in the
+    renderer process.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.Renderer.RenderPass.AppendQuadData.NumMissingTilesSomeImageContent">
+  <obsolete>
+    Deprecated 02/2016. We'd learned as much as we could from this metric and it
+    made no sense to keep it around.
+  </obsolete>
+  <owner>vollick@chromium.org</owner>
+  <summary>
+    Tracks the number of missing tiles that did not have any image content in
+    the renderer process.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.RenderPass.AppendQuadData.CheckerboardedNeedRasterContentArea"
+    units="pixels/frame">
+  <owner>weiliangc@chromium.org</owner>
+  <summary>
+    Checkerboarded area, in number of pixels, that has recording but does not
+    have time to finish rastering yet. A sample is recorded everytime a frame is
+    drawn while a scroll is in progress. Tracking bug 535732.
+  </summary>
+</histogram>
+
+<histogram
+    name="Compositing.RenderPass.AppendQuadData.CheckerboardedNoRecordingContentArea"
+    units="pixels/frame">
+  <owner>weiliangc@chromium.org</owner>
+  <summary>
+    Checkerboarded area, in number of pixels, that has no recording to raster
+    from. A sample is recorded everytime a frame is drawn while a scroll is in
+    progress. Tracking bug 535732.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.RenderPass.AppendQuadData.NumIncompleteTiles">
+  <owner>weiliangc@chromium.org</owner>
+  <summary>
+    Keeps track of number of incomplete tiles in a drawn compositor frame while
+    scrolling. This is a rough measurement of ugliness during user interaction.
+    Incomplete tiles are non ideal scaled. A sample is recorded everytime a
+    frame is drawn while a scroll is in progress. Tracking bug 381695.
+  </summary>
+</histogram>
+
+<histogram name="Compositing.RenderPass.AppendQuadData.NumMissingTiles">
+  <owner>weiliangc@chromium.org</owner>
+  <summary>
+    Keeps track of number of missing tiles in a drawn compositor frame while
+    scrolling. This is a rough measurement of ugliness during user interaction.
+    Incomplete tiles are checkerboard or solid color. A sample is recorded
+    everytime a frame is drawn while a scroll is in progress. Tracking bug
+    381695.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.ConfirmedBadModules" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The number of confirmed bad modules found during module enumeration.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.EnumerateLoadedModules" units="ms">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The length of time it takes to enumerate the loaded modules in the browser
+    process.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.EnumerateShellExtensions" units="ms">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The length of time it takes to enumerate the shell extensions.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.EnumerateWinsockModules" units="ms">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The length of time it takes to enumerate the Winsock LSP modules.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.EnumerationInspectionTime" units="ms">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The cumulative length of time it takes to inspect all modules on disk,
+    extracting their certificates and version information. This work is actually
+    spread out over a much longer period of time so as not to impact the user.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.EnumerationTotalTime" units="ms">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The cumulative length of time it takes to enumerate and inspect all modules.
+    This work is actually spread out over a much longer period of time so as not
+    to impact the user.
+  </summary>
+</histogram>
+
+<histogram name="Conflicts.SuspectedBadModules" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The number of suspected bad modules found during module enumeration.
+  </summary>
+</histogram>
+
+<histogram name="ConnectivityDiagnostics.ChromeOsSignalStrength" units="%">
+  <owner>ebeach@google.com</owner>
+  <summary>
+    Connectivity Diagnostics App: WiFi signal strength recorded during
+    NIC_SIGNAL_STRENGTH test.
+  </summary>
+  <details>
+    The &quot;Strength&quot; property of a WiFi signal is a partially-reversible
+    function that linearly maps the RSSI range -120dBm to -20dBm to Strength
+    values from 0 to 100.
+  </details>
+</histogram>
+
+<histogram name="ConnectivityDiagnostics.HTTP_LATENCY" units="ms">
+  <owner>ebeach@google.com</owner>
+  <summary>HTTP latency seen by the Connectivity Diagnostics.</summary>
+  <details>
+    HTTP latency is computed using the chrome.socket API to make an HTTP GET
+    request to the /generate_204 page of three randomly generated Google
+    hostnames (*-ccd-testing-v4.metric.gstatic.com). The time taken from issuing
+    the HTTP request to receiving a response is clocked in JavaScript and the
+    arithmetic mean of the three times is used as the HTTP latency.
+  </details>
+</histogram>
+
+<histogram name="ConnectivityDiagnostics.RESOLVER_LATENCY" units="ms">
+  <owner>ebeach@google.com</owner>
+  <summary>Resolution latency seen by the Connectivity Diagnostics.</summary>
+  <details>
+    Resolver latency is computed by using the chrome.dns API to query three
+    randomly generated Google hostnames (*-ccd-testing-v4.metric.gstatic.com).
+    The random hostnames guarantees that there will be no caching of DNS
+    hostnames. The time taken from issuing the DNS request to receiving a
+    response is clocked in JavaScript and the arithmetic mean of the three times
+    is used as the resolver latency.
+  </details>
+</histogram>
+
+<histogram name="ConnectivityDiagnostics.TestVerdict"
+    enum="ConnectivityDiagnosticsTestVerdict">
+  <owner>ebeach@google.com</owner>
+  <summary>
+    Connectivity Diagnostics App: Outcome of the connectivity tests.
+  </summary>
+</histogram>
+
+<histogram name="ConnectivityDiagnostics.TimeTaken" units="ms">
+  <owner>ebeach@google.com</owner>
+  <summary>
+    Connectivity Diagnostics App: Amount of time taken to run each of the
+    connectivity tests.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultAutoplaySetting" enum="ContentSetting">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>The default autoplay setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultCookiesSetting" enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default cookies setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultHandlersSetting" enum="ContentSetting">
+  <obsolete>
+    Deprecated 07/2014 since it is not referenced anywhere in the code.
+  </obsolete>
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default handler setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultImagesSetting" enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default image setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultJavaScriptSetting"
+    enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default JavaScript setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultKeygenSetting" enum="ContentSetting">
+  <owner>svaldez@chromium.org</owner>
+  <summary>
+    The default setting for using key generation in forms at profile open.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultLocationSetting" enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default location setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultMediaStreamCameraSetting"
+    enum="ContentSetting">
+  <owner>msramek@chromium.org</owner>
+  <summary>The default camera setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultMediaStreamMicSetting"
+    enum="ContentSetting">
+  <owner>msramek@chromium.org</owner>
+  <summary>The default microphone setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultMediaStreamSetting"
+    enum="ContentSetting">
+  <obsolete>
+    This setting was deprecated in r322364 and replaced with separate settings
+    for camera and microphone. See
+    ContentSettings.DefaultMediaStreamCameraSetting and
+    ContentSettings.DefaultMediaStreamMicSetting.
+  </obsolete>
+  <owner>toyoshim@chromium.org</owner>
+  <owner>msramek@chromium.org</owner>
+  <summary>The default MediaStream setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultMIDISysExSetting" enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>
+    The default MIDI permission setting on sysex (system exclusive) messages at
+    profile open.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultMouseCursorSetting"
+    enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default mouse cursor setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultNotificationsSetting"
+    enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default notification setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultPluginsSetting" enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default plugins setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultPopupsSetting" enum="ContentSetting">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The default popups setting at profile open.</summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultPushMessagingSetting"
+    enum="ContentSetting">
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    The default permission setting for push messages at profile open.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.DefaultWebBluetoothGuardSetting"
+    enum="ContentSetting">
+  <owner>jyasskin@chromium.org</owner>
+  <summary>
+    The default permission setting for Web Bluetooth at profile open.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.Exceptions">
+  <owner>lshang@chromium.org</owner>
+  <summary>
+    The number of user defined content setting exceptions at browser start.
+    Suffixed with the name of content setting types.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.ExceptionScheme" enum="ContentSettingScheme">
+  <owner>lshang@chromium.org</owner>
+  <summary>
+    Records the schemes of content setting exceptions at browser start. Each
+    exception provides one sample.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.ExceptionSchemeFile.HasPath"
+    enum="BooleanHasPath">
+  <owner>alexmos@chromium.org</owner>
+  <summary>
+    Records how often a content settings exception for the file: scheme has a
+    non-empty path. Recorded once per exception at browser start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithoutPath"
+    enum="ContentType">
+  <owner>alexmos@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type has a content settings exception
+    defined for a file: scheme with no path (i.e., wildcard path). Recorded once
+    per exception at browser start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.ExceptionSchemeFile.Type.WithPath"
+    enum="ContentType">
+  <owner>alexmos@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type has a content settings exception
+    defined for a file: scheme with a valid, non-empty path. Recorded once per
+    exception at browser start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.LastSettingParsed" enum="LastSettingParsed">
+  <obsolete>
+    Deprecated 2015-10-05 in Issue 433475. Histogram was used temorarily for
+    diagnosing crash causes.
+  </obsolete>
+  <owner>scheib@chromium.org</owner>
+  <summary>
+    Numer of results of parsing WebsiteSettingsHandler::last_setting_ success or
+    failure in WebsiteSettingsHandler methods.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.MixedScript"
+    enum="ContentSettingMixedScriptAction">
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks whether the mixed content shield was shown, and how the user
+    interacted with it.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.NumberOfAllowCookiesExceptions">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    The number of user defined cookies setting exceptions for allowing cookies
+    at browser start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.NumberOfBlockCookiesExceptions">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    The number of user defined cookies setting exceptions for blocking cookies
+    at browser start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.NumberOfExceptions">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    The number of user defined hostname patterns for content settings at browser
+    start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.NumberOfSessionOnlyCookiesExceptions">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    The number of user defined cookies setting exceptions for 'clearing cookies
+    on browser exit' at browser start.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.PermissionActions" enum="PermissionAction">
+  <obsolete>
+    Removed 11/2015 in favor of Permissions.Action.*
+  </obsolete>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Tracks whether a permission was granted, rejected, etc. The suffix of the
+    histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.PermissionActionsInsecureOrigin"
+    enum="PermissionAction">
+  <obsolete>
+    Removed 11/2015 in favor of Permissions.Action.InsecureOrigin.*
+  </obsolete>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Tracks whether a permission was granted, rejected, etc on an insecure
+    origin. The suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.PermissionActionsSecureOrigin"
+    enum="PermissionAction">
+  <obsolete>
+    Removed 11/2015 in favor of Permissions.Action.SecureOrigin.*
+  </obsolete>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Tracks whether a permission was granted, rejected, etc on a secure origin.
+    The suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.PermissionRequested" enum="PermissionType">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Number of times a given permission was requested by a website and the user
+    has the permission set to prompt (i.e. not blocked or allowed).
+
+    Note this is probably not the metric you want - it does not correspond to
+    the total number of times websites request a permission. Also, because
+    specific permissions have code that can automatically block or grant
+    permissions based on things like incognito, installed extensions etc., this
+    does also not correspond to the number of times users are prompted to allow
+    permissions.
+
+    For a better metric to track how often users are prompted, either use
+    ContentSettings.PermissionsActions*, or Permissions.Prompt.*.
+
+    See https://crbug.com/638076 for more details.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.PermissionRequested_InsecureOrigin"
+    enum="PermissionType">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Number of times a given permission was requested by an insecure origin and
+    the user has the permission set to prompt (i.e. not blocked or allowed).
+
+    Note this is probably not the metric you want - it does not correspond to
+    the total number of times websites request a permission. Also, because
+    specific permissions have code that can automatically block or grant
+    permissions based on things like incognito, installed extensions etc., this
+    does also not correspond to the number of times users are prompted to allow
+    permissions.
+
+    For a better metric to track how often users are prompted, use
+    ContentSettings.PermissionsActions*.
+
+    See https://crbug.com/638076 for more details.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.PermissionRequested_SecureOrigin"
+    enum="PermissionType">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Number of times a given permission was requested by a secure origin and the
+    user has the permission set to prompt (i.e. not blocked or allowed).
+
+    Note this is probably not the metric you want - it does not correspond to
+    the total number of times websites request a permission. Also, because
+    specific permissions have code that can automatically block or grant
+    permissions based on things like incognito, installed extensions etc., this
+    does also not correspond to the number of times users are prompted to allow
+    permissions.
+
+    For a better metric to track how often users are prompted, use
+    ContentSettings.PermissionsActions*.
+
+    See https://crbug.com/638076 for more details.
+  </summary>
+</histogram>
+
+<histogram name="ContentSettings.Plugins" enum="ContentSettingPluginsAction">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Tracks whether the plugin content blocked puzzle piece was shown in the
+    Omnibox, and how the user interacted with it.
+  </summary>
+</histogram>
+
+<histogram name="ContextMenu.SaveLinkType" enum="ContextMenuSaveLinkType">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Type of the url when user saves the content through the save link context
+    menu.
+  </summary>
+</histogram>
+
+<histogram name="ContextMenu.SelectedOption" enum="ContextMenuOption">
+  <owner>newt@chromium.org</owner>
+  <summary>The option that the user selected from a context menu.</summary>
+</histogram>
+
+<histogram name="ContextMenu.Shown" enum="BooleanPresent">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Recorded when a context menu is shown, sliced by whether a web contents was
+    present.  (It generally should be; indeed, this code path should not be
+    followed when it is absent.  For instance, invoking a context menu from the
+    new tab page or from the sad tab page will not cause an emission to this
+    histogram.)  Note that this refers to link context menus, not the
+    cut-copy-paste context menus that can appear during long presses on text on
+    a web page or long presses in the omnibox.  The value of this histogram for
+    &quot;present&quot; could be usefully compared with the total count of
+    ContextMenu.SelectedOption to determine the clickthrough rate for context
+    menus.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.BackingStoreUpdateResults" enum="BackingStoreResults">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether or not updates to the backing store succeeded or failed, recorded
+    every update.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.BetweenAccessIntervalMinutes" units="minutes">
+  <obsolete>
+    Deprecated 2015-08-17 as part of cookie histogram cleanup
+    (https://crbug.com/521135).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Intervals between access time updates for each cookie.</summary>
+</histogram>
+
+<histogram name="Cookie.CookieDeleteEquivalent" enum="CookieDeleteEquivalent">
+  <owner>jww@chromium.org</owner>
+  <summary>
+    Record when at attempt is made to delete an equivalent cookie on a set
+    cookie operation and when such a cookie is found and deleted. Also measure
+    when strict secure cookie rules affect this outcome and prevent a cookie
+    from being deleted.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CookieLineCookieValueValidity" enum="BooleanValid">
+  <owner>ricea@chromium.org</owner>
+  <summary>
+    Indicates whether a cookie initialised from a Set-Cookie header value was
+    valid or not. This is only logged after cookies containing control
+    characters have already been rejected, so &quot;Invalid&quot; here means
+    that the cookie contains quotes, commas, backslashes or top-bit-set
+    characters.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CookiePrefix" enum="CookiePrefix">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Number of times a cookie was set with a name prefixed by
+    &quot;__Secure-&quot; or &quot;__Host-&quot; (prefixes reserved by
+    https://tools.ietf.org/html/draft-west-cookie-prefixes).
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CookiePrefixBlocked" enum="CookiePrefix">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Number of times a cookie was set with a name prefixed by
+    &quot;__Secure-&quot; or &quot;__Host-&quot; that violate cookie prefix
+    rules. That is, a __Secure- cookie must be set over a secure connection with
+    the Secure attribute, and a __Host- cookie must be set over a secure
+    connection, with the Secure attribute, with no Domain attribute, and with a
+    Path attribute of &quot;/&quot;. (As defined in
+    https://tools.ietf.org/html/draft-west-cookie-prefixes.)
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CookieSourceScheme" enum="CookieSourceScheme">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    For each cookie added to the store, record whether its source URL has a
+    cryptographic scheme, broken down by Secure and not Secure.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CorruptMetaTable">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Records the detection of a corrupted meta table. See http://crbug.com/111376
+    .
+  </summary>
+</histogram>
+
+<histogram name="Cookie.CorruptMetaTableRecoveryFailed">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records a failure to recover a corrupted meta table. See
+    http://crbug.com/111376 .
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Count">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    Number of cookies in the store (recorded every 10 minutes of active browsing
+    time)
+  </summary>
+</histogram>
+
+<histogram name="Cookie.DBSizeInKB" units="KB">
+  <owner>dmikurube@chromium.org</owner>
+  <summary>
+    The size, on disk, of the cookie database as it is being loaded.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.DeletionCause" enum="CookieDeletionCause">
+  <owner>rdsmith@chromium.org</owner>
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    For each cookie removed from the store, the reason it was removed.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.DomainCount">
+  <obsolete>
+    Deprecated 2015-08-17 as part of cookie histogram cleanup
+    (https://crbug.com/521135).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For each domain, number of cookies in that domain (recorded every 10 minutes
+    of active browsing time).
+  </summary>
+</histogram>
+
+<histogram name="Cookie.DomainPerEtldp1Count">
+  <obsolete>
+    Deprecated 2015-08-17 as part of cookie histogram cleanup
+    (https://crbug.com/521135).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For every top level domain, number of subdomains in that top level domain
+    (recorded every 10 minutes of active browsing time).
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Etldp1Count">
+  <obsolete>
+    Deprecated 2015-08-17 as part of cookie histogram cleanup
+    (https://crbug.com/521135).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For every top level domain, number of cookies in that domain (recorded every
+    10 minutes of active browsing time).
+  </summary>
+</histogram>
+
+<histogram name="Cookie.EvictedLastAccessMinutes" units="minutes">
+  <owner>rdsmith@chromium.org</owner>
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    For each evicted (not expired) cookie, the amount of time since it was last
+    used
+  </summary>
+</histogram>
+
+<histogram name="Cookie.ExpirationDurationMinutes" units="minutes">
+  <owner>battre@chromium.org</owner>
+  <summary>Number of minutes until cookie expires when set.</summary>
+</histogram>
+
+<histogram name="Cookie.KillDatabaseResult" enum="BooleanSuccess">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether killing the database because it was corrupted beyond repair
+    succeeded.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.NumberOfLoadedCookies">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This histogram records the total number of cookies loaded from disk,
+    including any cookies that are discarded during loading (for whatever
+    reason).
+  </summary>
+</histogram>
+
+<histogram name="Cookie.ParsedCookieStatus" enum="ParsedCookieStatus">
+  <obsolete>
+    Deprecated as of 9/2013. Experiment to measure control characters in cookies
+    is finished.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When parsing a cookie, indicates if control characters were present in any
+    of the cookie values and if any of the cookie values were invalid.
+    Specifically, checks that all of the parsed values are valid according to
+    the valid token definition in Section 2.2 of RFC2616 which specifies a token
+    must have no separators (i.e. no characters from the following string,
+    ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
+    \t') and no control characters.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.PriorityBlockingTime" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    This histogram records the total duration of time during which at least one
+    web request was blocked waiting for the cookie store to load. If no requests
+    were affected, the value is 0. If two requests are simultaneously blocked
+    for 1 second, the value is 1 second. If two requests are consecutively
+    blocked for 1 second each, the value is two seconds.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.PriorityLoadCount">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The number of distinct Effective Top-Level Domains Plus One (ETLD+1, i.e.,
+    google.com, bbc.co.uk) for which a priority cookie load occurred.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.ReinstatedCookies" units="seconds">
+  <obsolete>
+    Deprecated as of 8/2015.
+  </obsolete>
+  <owner>huangs@chromium.org</owner>
+  <summary>
+    The duration in seconds between a cookie getting evicted (due to the number
+    of cookies exceeding a domain limit), and subsequently reinstated.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.SetAttributePairCharsValidity" enum="BooleanValid">
+  <obsolete>
+    Deprecated as of 9/2013. Experiment to measure control characters in cookies
+    is finished.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicates whether a cookie attribute pair was set with both a valid key and
+    a valid attribute value or not. For the key, this implies that it was a
+    valid token as defined in Section 2.2 of RFC2616 which specifies a token
+    must have no separators (i.e. no characters from the following string,
+    ignoring the starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={}
+    \t') and no control characters. For the value, this implies that it
+    contained no control characters and no semicolon.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.SetNameValidity" enum="BooleanValid">
+  <obsolete>
+    Deprecated as of 9/2013. Experiment to measure control characters in cookies
+    is finished.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicates whether a cookie name was set with a valid token. A valid token is
+    defined in Section 2.2 of RFC2616 which specifies a token must have no
+    separators (i.e. no characters from the following string, ignoring the
+    starting and ending single quote: '()&lt;&gt;@,;:\&quot;/[]?={} \t') and no
+    control characters.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.SetValueCookieValueValidity" enum="BooleanValid">
+  <obsolete>
+    Deprecated as of 9/2013. Experiment to measure control characters in cookies
+    is finished.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicates whether a cookie value was valid or invalid when there was an
+    attempt to set it, where a valid value is defined in RFC 6265 as ASCII
+    characters excluding controls, whitspace, comma, semicolon, and backslash.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Shutdown.NumberOfCookiesDeleted">
+  <obsolete>
+    Deprecated as of 9/2015. The associated experiment was flawed.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The number of session cookies deleted on shutdown. This metric is emitted
+    even if no cookies are deleted.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Shutdown.TimeSpentDeletingCookies" units="ms">
+  <obsolete>
+    Deprecated as of 9/2015. The associated experiment was flawed.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time required to delete session cookies on shutdown. This
+    metric is emitted even if no cookies are deleted.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Startup.NumberOfCookiesDeleted">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The number of session cookies deleted on startup. This metric is emitted
+    even if no cookies are deleted. This metric is not emitted if session
+    cookies are restored, rather than deleted on startup.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Startup.TimeSpentDeletingCookies" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time required to delete session cookies on startup. This
+    metric is emitted even if no cookies are deleted. This metric is not emitted
+    if session cookies are restored, rather than deleted on startup.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeBlockedOnLoad" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The amount of time (ms) between the cookie store load starting and
+    completing.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeDatabaseMigrationToV5" units="ms">
+  <obsolete>
+    Deprecated as of 04/2015. The migration has finished for most users.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>The amount of time (ms) to migrate a v4 database to v5.</summary>
+</histogram>
+
+<histogram name="Cookie.TimeDatabaseMigrationToV6" units="ms">
+  <obsolete>
+    Deprecated as of 04/2015. The migration has finished for most users.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>The amount of time (ms) to migrate a v5 database to v6.</summary>
+</histogram>
+
+<histogram name="Cookie.TimeDatabaseMigrationToV7" units="ms">
+  <obsolete>
+    Deprecated as of 04/2015. The migration has finished for most users.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>The amount of time (ms) to migrate a v6 database to v7.</summary>
+</histogram>
+
+<histogram name="Cookie.TimeDatabaseMigrationToV8" units="ms">
+  <obsolete>
+    Deprecated as of 04/2015. The migration has finished for most users.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>The amount of time (ms) to migrate a v7 database to v8.</summary>
+</histogram>
+
+<histogram name="Cookie.TimeDatabaseMigrationToV9" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>The amount of time (ms) to migrate a v8 database to v9.</summary>
+</histogram>
+
+<histogram name="Cookie.TimeGet" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time (ms) to get cookies for each URL request.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeInitializeDB" units="ms">
+  <owner>nyquist@chromium.org</owner>
+  <summary>The amount of time (ms) to initialize the cookies database.</summary>
+</histogram>
+
+<histogram name="Cookie.TimeInitializeDomainMap" units="ms">
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    The amount of time (ms) to read and parse the domain map from the cookies
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeKeyLoadDBQueueWait" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    This histogram records the wall-clock delay between a priority load task
+    being posted to the DB-thread and its execution.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeKeyLoadTotalWait" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This histogram records the the total amount of time spent fetching the
+    cookies associated with an eTLD+1 from disk, including time spent waiting in
+    task queues.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeLoad" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    This histogram records the sum of the durations of all initial tasks loading
+    cookies from the database.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeLoadDBQueueWait" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This histogram records the wall-clock delay between the Load task being
+    posted to the DB-thread and its execution.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeLoadDomains" units="ms">
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    The amount of time (ms) to read the domain map from the cookies database.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.TimeParseDomains" units="ms">
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    The amount of time (ms) to parse the domains already loaded from the cookies
+    database and put them in the domain map.
+  </summary>
+</histogram>
+
+<histogram name="Cookie.Type" enum="CookieType">
+  <owner>mkwst@chromium.org</owner>
+  <summary>For each cookie added to the store, record it's type(s).</summary>
+</histogram>
+
+<histogram name="Cras.StreamTimeoutMilliSeconds" units="ms">
+  <owner>hychao@chromium.org</owner>
+  <summary>
+    The longest additional time CRAS(Chrome OS audio server) ever waits for a
+    stream exceeding the timeout threshold. This value is recorded per stream
+    when it gets removed and used to investigate the audio glitch/skip problem
+    on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="CrashExitCodes.Extension" enum="CrashExitCodes">
+  <owner>wfh@chromium.org</owner>
+  <summary>The exit codes for crashed extension processes.</summary>
+</histogram>
+
+<histogram name="CrashExitCodes.Renderer" enum="CrashExitCodes">
+  <owner>wfh@chromium.org</owner>
+  <summary>The exit codes for crashed renderer processes.</summary>
+</histogram>
+
+<histogram name="Crashpad.CrashReportPending" enum="CrashpadReportPending">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>
+    The reason that a crash report entered the upload pending state.
+  </summary>
+</histogram>
+
+<histogram name="Crashpad.CrashReportSize" units="bytes">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>The size of a crash report minidump on disk when captured.</summary>
+</histogram>
+
+<histogram name="Crashpad.CrashUpload.AttemptSuccessful"
+    enum="CrashpadUploadAttemptStatus">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>Logs whether a crash uploaded succeeded or failed.</summary>
+</histogram>
+
+<histogram name="Crashpad.CrashUpload.Skipped"
+    enum="CrashpadUploadSkippedReason">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>The reason that a crash report upload was skipped.</summary>
+</histogram>
+
+<histogram name="Crashpad.ExceptionCaptureResult"
+    enum="CrashpadExceptionCaptureResult">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>The outcome of execution of the Crashpad exception handler.</summary>
+</histogram>
+
+<histogram name="Crashpad.ExceptionCode.Mac" enum="CrashpadMacExceptionCodes">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>The exception code encountered in a crash on Mac OS X.</summary>
+</histogram>
+
+<histogram name="Crashpad.ExceptionCode.Win" enum="CrashExitCodes">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>The exception code encountered in a crash on Windows.</summary>
+</histogram>
+
+<histogram name="Crashpad.ExceptionEncountered"
+    enum="CrashpadExceptionProcessingState">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>
+    A count of the number of exceptions handled by Crashpad with two buckets for
+    starting and finishing.
+  </summary>
+</histogram>
+
+<histogram name="Crashpad.HandlerCrash.ExceptionCode.Mac"
+    enum="CrashpadMacExceptionCodes">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>
+    The exception code encountered for a crash of the crash handler process on
+    Mac OS X.
+  </summary>
+</histogram>
+
+<histogram name="Crashpad.HandlerCrash.ExceptionCode.Win" enum="CrashExitCodes">
+  <owner>crashpad-dev@chromium.org</owner>
+  <summary>
+    The exception code encountered for a crash of the crash handler process on
+    Windows.
+  </summary>
+</histogram>
+
+<histogram name="CrashReport.BreakpadCrashDumpOutcome" enum="DumpOutcome">
+  <obsolete>
+    Deprecated as of 04/2016 as CrashPad does not implement this.
+  </obsolete>
+  <owner>siggi@chromium.org</owner>
+  <summary>
+    Reports the result of an attempt to report a crash dump via Breakpad.
+    Success indicates only that the out-of-process crash reporter succesfully
+    generated a dump. The success or failure of the eventual upload is not
+    measured. This stability metric is logged from the first Chrome launch
+    post-dump.
+  </summary>
+</histogram>
+
+<histogram name="CrashReport.BreakpadDumpWithoutCrashOutcome"
+    enum="DumpOutcome">
+  <obsolete>
+    Deprecated as of 04/2016 as CrashPad does not implement this.
+  </obsolete>
+  <owner>siggi@chromium.org</owner>
+  <summary>
+    Reports the result of an attempt to report a dump via Breakpad without
+    crashing. Success indicates only that the out-of-process crash reporter
+    succesfully generated a dump. The success or failure of the eventual upload
+    is not measured. This stability metric is logged from the first Chrome
+    launch post-dump.
+  </summary>
+</histogram>
+
+<histogram name="CrashReport.CrashBackgroundUploadDelay" units="ms">
+  <owner>olivierrobin@chromium.org</owner>
+  <owner>pkl@chromium.org</owner>
+  <summary>
+    Time delta between when the crash took place and when the crash was uploaded
+    by the app as a background task. Only logged on iOS.
+  </summary>
+</histogram>
+
+<histogram name="CrashReport.PendingReportsOnBackgroundWakeUp">
+  <owner>olivierrobin@chromium.org</owner>
+  <owner>pkl@chromium.org</owner>
+  <summary>
+    The number of crash reports present when the app wakes up as a background
+    task to upload crash reports. Only logged on iOS.
+  </summary>
+</histogram>
+
+<histogram name="CrashReport.PermanentUploadFailure" enum="BooleanHit">
+  <owner>siggi@chromium.org</owner>
+  <summary>
+    Counts crash reports that the Kasko crash reporter fails to upload and hands
+    off to Chrome. Kasko stores the failed reports in a location specified by
+    Chrome. Chrome records this metric when it detects new minidump files in
+    that location. Currently the reports are discarded, but they could
+    eventually be uploaded via the Chrome network stack.
+  </summary>
+</histogram>
+
+<histogram name="Cros.ClickOnShelf" enum="CrosShelfClickTarget">
+  <obsolete>
+    Deprecated as of 12/2013. Default pinned apps trial is finished.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Chrome OS shelf clicks.</summary>
+</histogram>
+
+<histogram name="CrosDisks.ArchiveType" enum="CrosDisksArchiveType">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The type of archive file that Chrome OS cros-disks daemon is requested to
+    mount.
+  </summary>
+</histogram>
+
+<histogram name="CrosDisks.DeviceMediaType" enum="CrosDisksDeviceMediaType">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The media type of removable device that Chrome OS cros-disks daemon is
+    requested to mount.
+  </summary>
+</histogram>
+
+<histogram name="CrosDisks.FilesystemType" enum="CrosDisksFilesystemType">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The type of file system that Chrome OS cros-disks daemon is requested to
+    mount.
+  </summary>
+</histogram>
+
+<histogram name="CrosFirstRun.DialogShown">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Records the number of times when first-run dialog was shown.
+  </summary>
+</histogram>
+
+<histogram name="CrosFirstRun.FurthestStep">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Index of furthest step that was reached during tutorial. Since order of
+    steps could change eventially and new steps could apear we use index here
+    instead of step name.
+  </summary>
+</histogram>
+
+<histogram name="CrosFirstRun.TimeSpent" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>The total time that user spent on first-run tutorial.</summary>
+</histogram>
+
+<histogram name="CrosFirstRun.TimeSpentOnStep" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>The time that user spent on some step of tutorial.</summary>
+</histogram>
+
+<histogram name="CrosFirstRun.TutorialCompletion"
+    enum="CrosFirstRunTutorialCompletionType">
+  <owner>alemate@chromium.org</owner>
+  <summary>Tracks the way how user left tutorial.</summary>
+</histogram>
+
+<histogram name="CrosFirstRun.TutorialLaunched">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Records the number of times when first-run tutorial has been launched.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.ChecksumStatus" enum="CryptohomeChecksumStatus">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    Checksum status of critical persistent data used by Cryptohome. This status
+    is recorded every time the cryptohomed daemon reads a file.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.Errors" enum="CryptohomeError">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>Cryptohome errors.</summary>
+</histogram>
+
+<histogram name="Cryptohome.FreedGCacheDiskSpaceInMb" units="MB">
+  <owner>oka@chromium.org</owner>
+  <summary>
+    The amount of drive cache (MB) which was evicted by cryptohome due to
+    shortage of remaining disk space.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.MigrationToGaiaId"
+    enum="CryptohomeMigrationToGaiaId">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    This is the status of cryptohome migration to GaiaId. Every time user logs
+    in current migration status is recorded.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TimeToInitPkcs11" units="ms">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The amount of time (ms) for Chrome OS cryptohome daemon to initialize the
+    PKCS#11. Initializations under 1 second represent checks on a previously
+    initialized PKCS#11, and should be discarded for analysis.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TimeToMountAsync" units="ms">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted home
+    directory asynchronously.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TimeToMountGuestAsync" units="ms">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted
+    guest home directory asynchronously.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TimeToMountGuestSync" units="ms">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted
+    guest home directory synchronously.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TimeToMountSync" units="ms">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The amount of time (ms) for Chrome OS cryptohome to mount the encrypted home
+    directory synchronously.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TimeToTakeTpmOwnership" units="ms">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    The amount of time (ms) for Chrome OS cryptohome daemon to take ownership of
+    the TPM.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.TpmResults" enum="CryptohomeTpmResults">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The errors resulting from interacting with the Trusted Platform Module (TPM)
+    device.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.ClientAppId" enum="ClientAppId">
+  <owner>yusufo@chromium.org</owner>
+  <summary>
+    Android: AppId declared by the launching application in EXTRA_APPLICATION_ID
+    in a custom tab. This histogram is used as a means to count the total
+    instances of custom tabs created meanwhile binning them across launching
+    apps that have identified themselves.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.IntentToFirstCommitNavigationTime" units="ms">
+  <obsolete>
+    Deprecated 10/2016 in favor of .IntentToFirstCommitNavigationTime2.*.
+  </obsolete>
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Time between the intent arrival in Chrome and the first navigation commit,
+    if the navigation is successful. Similar in principle to
+    Startup.FirstCommitNavigationTime.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.IntentToFirstCommitNavigationTime2" units="ms">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Time between the intent arrival to a Custom Tab and the first navigation
+    commit, if the navigation is successful. Similar in principle to
+    Startup.FirstCommitNavigationTime. Non-&quot;Herb&quot; mode.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.IntentToPageLoadedTime" units="ms">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Time between the intent arrival in Chrome and the first &quot;page
+    loaded&quot; event, if the navigation is successful. Non-&quot;Herb&quot;
+    mode.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.NonDefaultSessionPrerenderMatched"
+    enum="BooleanMatched">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Android: When there is a prerender for a session with non-default
+    parameters, whether the prerender was matched when navigating.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.PredictionStatus" enum="PredictionStatus">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    For Custom Tabs, records whether mayLaunchUrl() has been called, and if so,
+    whether the call was later matched by a URL launch.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.PredictionToLaunch" units="ms">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    When a URL prediction succeeds, time in ms between the prediction and the
+    actual launch.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.PrerenderSessionUsesDefaultParameters"
+    enum="BooleanDefault">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Android: When prerendering a URL for Custom Tabs, whether the client session
+    uses the default parameters.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.Visible" enum="VisibleTab">
+  <owner>yusufo@chromium.org</owner>
+  <summary>
+    Recorded only for Android. Records on every metrics upload whether the
+    currently visible tab is a custom tab. The custom tab is launched by a
+    client app with customized UI. Some metrics like page load time will behave
+    differently for these tabs since it will be possible to warm up the browser
+    process and prepare resources for specific urls ahead of time via a service
+    connection. This histogram can be used to cluster these metric differently.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.WarmupStateOnLaunch" enum="WarmupStateOnLaunch">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Recorded only on Android. Reports whether warmup() has been called when a
+    Custom Tabs Intent is received from an application, and if so, whether the
+    call could be matched with a session.
+  </summary>
+</histogram>
+
+<histogram name="CustomTabs.WebContentsStateOnLaunch" enum="WebContentsState">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Android: When a CustomTabActivity creates its Tab, whether we use a
+    prerendered WebContents, a spare renderer or create a new WebContents.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.AutoLoFiAccuracy"
+    enum="DataReductionProxyAutoLoFiAccuracy">
+  <obsolete>
+    Replaced by DataReductionProxy.LoFi.Accuracy.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Counts the accuracy of estimated network quality when using Lo-Fi. Counters
+    are incremented when a main frame URL request is handled by Data Reduction
+    Proxy and session was in Auto Lo-Fi enabled field trial.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.AutoLoFiRequestHeaderState"
+    enum="DataReductionProxyAutoLoFiRequestHeaderState">
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Counts the changes in the state of Lo-Fi request header (q=low) being added
+    to the Chrome proxy request header. Counters are incremented when a main
+    frame URL request is handled by Data Reduction Proxy and session was in Auto
+    Lo-Fi enabled field trial.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BlockTypeFallback"
+    enum="DataReductionProxyBypassType">
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts various events that trigger Chrome to block the fallback
+    configuration of the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BlockTypePrimary"
+    enum="DataReductionProxyBypassType">
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts various events that trigger Chrome to block the primary configuration
+    of the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassedBytes" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts the response bytes that did not go through the data reduction proxy
+    as the result of a bypass event.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassedBytes.NotBypassed" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts the response bytes that went through the data reduction proxy and
+    were not bypassed.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassInfoFallback"
+    enum="DataReductionProxyBypassEventType_Deprecated">
+  <obsolete>
+    Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypeFallback.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    Counts various events that trigger Chrome to bypass the fallback
+    configuration of the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassInfoPrimary"
+    enum="DataReductionProxyBypassEventType_Deprecated">
+  <obsolete>
+    Deprecated as of 6/2014, replaced by DataReductionProxy.BypassTypePrimary.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    Counts various events that trigger Chrome to bypass the primary
+    configuration of the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassOnNetworkErrorFallback"
+    enum="NetErrorCodes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Positive net error code that caused the fallback data reduction proxy to be
+    bypassed and put on the proxy retry list. Called after a failure to connect
+    or resolve a host name.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassOnNetworkErrorPrimary"
+    enum="NetErrorCodes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Positive net error code that caused the primary data reduction proxy to be
+    bypassed and put on the proxy retry list. Called after a failure to connect
+    or resolve a host name.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassTypeFallback"
+    enum="DataReductionProxyBypassType">
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts various events that trigger Chrome to bypass the fallback
+    configuration of the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.BypassTypePrimary"
+    enum="DataReductionProxyBypassType">
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts various events that trigger Chrome to bypass the primary
+    configuration of the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigFetchLostBytesCL">
+  <obsolete>
+    Removed in Feb. 2016
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size of the response body. This is the actual number of bytes received,
+    which usually agrees with but is not necessarily the same as the size
+    specified by the Content-Length header. Only recorded if the request is sent
+    while a simulated Data Reduction Proxy configuration fetch is taking place.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigFetchLostBytesDiff">
+  <obsolete>
+    Removed in Feb. 2016
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The difference between the size specified in the X-Original-Content-Length
+    header and the size of the response body. Only recorded if the request is
+    sent while a simulated Data Reduction Proxy configuration fetch is taking
+    place. Only positive values are logged, so if X-Original-Content-Length is
+    not specified or if it equals or exceeds the content length, it is not
+    logged.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigFetchLostBytesOCL">
+  <obsolete>
+    Removed in Feb. 2016
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size specified in the X-Original-Content-Length header. If this header is
+    not present in the response, the size of the response body is used. Only
+    recorded if the request is sent while a simulated Data Reduction Proxy
+    configuration fetch is taking place.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigService.AuthExpired"
+    enum="BooleanExpired">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Total number of authentication required responses received from the Data
+    Reduction Proxy.
+
+    An &quot;Unexpired&quot; value is recorded every time a new client config is
+    fetched and parsed successfully. An &quot;Expired&quot; value is recorded
+    every time Chrome receives an authentication failure from the data saver
+    proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigService.AuthExpiredSessionKey"
+    enum="DataReductionProxyConfigServiceAuthExpiredSessionKey">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    On receiving an authentication failure from the data reduction proxy,
+    records whether the session key used in the request matches the current
+    session key.
+
+    Recorded every time Chrome receives an authentication failure from the data
+    saver proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigService.AuthFailure.LatencyPenalty"
+    units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Time from when the request starts to the time when the auth failure is
+    received from the data saver proxy.
+
+    Recorded every time an auth failure is received from the data saver proxy.
+  </summary>
+</histogram>
+
+<histogram
+    name="DataReductionProxy.ConfigService.FetchFailedAttemptsBeforeSuccess">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The number of failed attempts when retrieving the configuration from the
+    Data Reduction Proxy API before a successful attempt took place.
+
+    Recorded every time a new client config is fetched and parsed successfully.
+    If the device has a valid connection type but no Internet connectivity, this
+    count will keep increasing.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigService.FetchLatency" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Time from when the Data Reduction Proxy configuration request starts until
+    it completes.
+
+    Recorded every time a new client config is fetched and parsed successfully.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigService.FetchResponseCode"
+    enum="HttpResponseCode">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Count per HttpResponseCode when attempting to retrieve the Data Reduction
+    Proxy configuration from the Data Reduction Proxy API.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ConfigService.HTTPRequests"
+    enum="DataReductionProxyConfigServiceHTTPRequests">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Upper bound on the count of HTTP requests that did or did not go through the
+    data saver proxy.
+
+    An HTTP request may not go through data saver proxy if the config was
+    unavailable, due to local bypass rules, or due to server side bypasses. If
+    data saver is turned on, this metric is recorded every time proxy is
+    resolved for an HTTP request.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.DaysSinceEnabled" units="days">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the number of days since data reduction proxy was last enabled by
+    the user. Recorded only if the data reduction proxy was last enabled since
+    this metric was added to Chromium (M-56). Recorded at Chrome startup if data
+    reduction proxy is already enabled, and when the user enables the data
+    reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.EnabledState"
+    enum="DataReductionProxyEnabledState">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the Data Saver settings menu across all
+    platforms (android, IOS, desktop extension). Data is collected whenever user
+    toggles the ON/OFF switch in the settings menu for reducing data usage.
+
+    For desktop, Off-to-On/On-to-Off histogram count will increment when the
+    data saver extension is installed/uninstalled respectively as well.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HeaderTamperDetectionHTTP">
+  <owner>xingx@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    For each carrier, the total number of HTTP responses that have been checked
+    for tampering. This assumes the data reduction proxy injected fingerprints
+    have not been tampered with. Only the data reduction proxy responses with
+    200 OK response code are checked.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS">
+  <owner>xingx@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    For each carrier, the total number of HTTPS responses that have been checked
+    for tampering. This assumes the data reduction proxy injected fingerprints
+    have not been tampered with. Only the data reduction proxy responses with
+    200 OK response code are checked.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP">
+  <owner>xingx@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    For each carrier, the total number of HTTP responses that passed the tamper
+    detection. This assumes the data reduction proxy injected fingerprints have
+    not been tampered with. Only the data reduction proxy responses with 200 OK
+    response code are checked.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS">
+  <owner>xingx@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    For each carrier, the total number of HTTPs responses that passed the tamper
+    detection. This assumes the data reduction proxy injected fingerprints have
+    not been tampered with. Only the data reduction proxy responses with 200 OK
+    response code are checked.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HeaderTamperedHTTP">
+  <owner>xingx@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total number of HTTP responses that some part (specified by suffix name)
+    have been tampered with. This assumes the data reduction proxy injected
+    fingerprints have not been tampered with. Only the data reduction proxy
+    responses with 200 OK response code are checked.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HeaderTamperedHTTPS">
+  <owner>xingx@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total number of HTTPS responses that some part (specified by suffix
+    name) have been tampered with. This assumes the data reduction proxy
+    injected fingerprints have not been tampered with. Only the data reduction
+    proxy responses with 200 OK response code are checked.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.HistoricalDataUsageLoadTime" units="ms">
+  <owner>kundaji@chromium.org</owner>
+  <summary>
+    Time taken to load historical data usage from Level DB into memory. This UMA
+    is reported each time the method to load historical data usage is called,
+    which happens when user views data usage history.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LevelDBOpenStatus"
+    enum="DataReductionProxyStoreStatus">
+  <owner>kundaji@chromium.org</owner>
+  <summary>Status of calling Open() on Data Reduction Proxy LevelDB.</summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LevelDBSize" units="KB">
+  <owner>kundaji@chromium.org</owner>
+  <summary>Size of Data Reduction Proxy LevelDB measured at startup.</summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LoFi.Accuracy"
+    enum="DataReductionProxyAutoLoFiAccuracy">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Records the accuracy of estimated network quality when using Lo-Fi. Network
+    quality predicted at the time of navigation start is compared with the
+    network quality observed during the specified time interval following the
+    start of the navigation. This metric is recorded only when the session is in
+    Lo-Fi enabled field trial.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction"
+    enum="DataReductionProxyLoFiImplicitOptOutAction">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts of Lo-Fi implicit opt out actions. If the user chooses to &quot;Load
+    image&quot; for k pages in a session, LoFi is disabled for the remainder of
+    that session. If Lo-Fi is disabled for j consecutive sessions, Lo-Fi is
+    disabled for that user until the next implicit opt out epoch, which may be
+    in a later session, or never. k and j default to 3 and are assigned via the
+    DataReductionProxyLoFi field trial.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LoFi.SessionState"
+    enum="DataReductionProxyLoFiSessionState">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Tracks Lo-Fi usage at the granularity of browser sessions. Counts for each
+    session if Lo-Fi was used or not. In the case where Lo-Fi was not used,
+    records if it was because the network quality was always good or because the
+    user had implicitly opted out. The session where a user permanently opts out
+    is counted in the Lo-Fi used bucket.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LoFi.TransformationType"
+    enum="DataReductionProxyLoFiTransformationType">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts of pageloads that received or requested, but did not receive, various
+    Lo-Fi lite page transformations. Recorded when a lite page is requested or
+    received through Data compression proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.LoFi.UIAction"
+    enum="DataReductionProxyLoFiUIAction">
+  <obsolete>
+    Deprecated as of 9/2016, replaced by Previews.ContextMenuAction.LoFi.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the Lo-Fi snackbar and context menu
+    option. These samples include:
+
+    Displays and clicks on the &quot;Load images&quot; snackbar. Displays and
+    clicks on the &quot;Load image&quot; and &quot;Load images&quot;context menu
+    options. Count of pages where the user has clicked &quot;Load image&quot; at
+    least once.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.MissingViaHeader.Bytes" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <owner>sclittle@chromium.org</owner>
+  <summary>
+    Counts the response bytes of responses that Chrome expected to come through
+    a data reduction proxy and have the data reduction proxy via header, but
+    where the data reduction proxy via header was missing. Note that this does
+    not include responses that were bypassed.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.MissingViaHeader.ResponseCode">
+  <owner>bengr@chromium.org</owner>
+  <owner>sclittle@chromium.org</owner>
+  <summary>
+    Counts the different HTTP response codes of responses that Chrome expected
+    to come through a data reduction proxy and have the data reduction proxy via
+    header, but where the data reduction proxy via header was missing.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.NetworkChangeEvents"
+    enum="DataReductionProxyNetworkChangeEvent">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Counts the number of times various events occur when the data reduction
+    proxy is enabled and the IP address of the client changes.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.Pingback.Attempted" enum="BooleanAttempted">
+  <owner>bengr@chromium.org</owner>
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    Counts the number of times that pageload metrics were queued to be attempted
+    or not queued based on the reporting fraction. Recorded once per pageload.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.Pingback.Succeeded" enum="BooleanSuccess">
+  <owner>bengr@chromium.org</owner>
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    Counts the number of times that a batched pingback request succeeded or
+    failed at being sent to the server. Recorded everytime a pingback request is
+    attempted.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ProbeURL"
+    enum="DataReductionProxyProbeURLFetchResult">
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    Counts various outcomes of requesting the data reduction proxy's probe URL.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ProbeURLNetError" enum="NetErrorCodes">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Reports the type of network error when the data reduction proxy probe fails
+    due to a network error.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.PromoAction"
+    enum="DataReductionProxyPromoAction">
+  <obsolete>
+    Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    Samples which method was used by the user to dismiss the proxy promo. This
+    is sampled when the promo leaves view, with the sampled value depending on
+    which of four possible controls the user used.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ProxyPrefMigrationResult"
+    enum="DataReductionProxyProxyPrefMigrationResult">
+  <owner>sclittle@chromium.org</owner>
+  <summary>
+    Records the result of migrating the Data Reduction Proxy away from being
+    configured via a proxy preference, including cases when no migration action
+    was taken.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ProxySchemeUsed"
+    enum="DataReductionProxyProxySchemeUsed">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the scheme of the data reduction proxy server. Recorded for every
+    request that is fetched successfully through a data reduction proxy server.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.Quic.DefaultAlternativeProxy"
+    enum="DataReductionProxyQuicDefaultAlternativeProxy">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Status of the availability of valid alternative data reduction proxy
+    servers. This metric is recorded only when data reduction proxy delegate is
+    queried for the value of the supported alternative proxy server.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.Quic.OnAlternativeProxyBroken"
+    units="count">
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Number of times an alternative QUIC proxy was marked as broken.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.Quic.ProxyStatus"
+    enum="DataReductionProxyQuicProxyStatus">
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Records the result of the attempt to use a data reduction proxy that
+    supports QUIC. The metric is logged for every request for which the resolved
+    proxy is a data reduction HTTPS proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.RequestCompletionErrorCodes"
+    enum="NetErrorCodes">
+  <obsolete>
+    Deprecated in 2/2016, since it didn't get recorded for many kinds of error
+    codes when it should have been recorded, and
+    Net.HttpRequestCompletionErrorCodes is a good enough replacement when
+    filtering for clients with the Data Reduction Proxy enabled.
+  </obsolete>
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Reports the different network errors that requests that try to use the data
+    reduction proxy are completing with, including OK and ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"
+    enum="NetErrorCodes">
+  <obsolete>
+    Deprecated in 2/2016, since it didn't get recorded for many kinds of error
+    codes when it should have been recorded, and
+    Net.HttpRequestCompletionErrorCodes is a good enough replacement when
+    filtering for clients with the Data Reduction Proxy enabled.
+  </obsolete>
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Reports the different network errors that main frame resource requests that
+    try to use the data reduction proxy are completing with, including OK and
+    ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.ResponseProxyServerStatus"
+    enum="DataReductionProxyResponseProxyServerStatus">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Reports the state of the proxy server field in the response seen by the Data
+    Reduction Proxy bypass logic.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.SecureProxyCheck.Latency" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Time from when the Data Reduction Proxy secure proxy check starts until it
+    completes.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.SettingsConversion"
+    enum="DataReductionProxySettingsConversion">
+  <obsolete>
+    Deprecated as of 3/2015, replaced by DataReductionProxy.UIAction.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the ON/OFF switch in the settings menu for
+    reducing data usage. Only the setting changes between entering the reducing
+    data usage setting menu and leaving the menu will be sampled. So if a user
+    enters the menu with OFF and leaves it with OFF, it is counted as one OFF to
+    OFF conversion regardless of how many times they toggle the ON/OFF switch.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.SnackbarPromo.DataSavings" units="MB">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Logs the data savings in MB of the data reduction proxy snackbar promo that
+    was shown. The snackbar promo shows the user the amount of data Chrome has
+    saved them using Data Saver.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.StartupState"
+    enum="DataReductionProxyStartupState">
+  <owner>bengr@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    Samples of the state of the data reduction proxy on Chrome startup. The
+    proxy will either be unavailable (the feature hasn't been rolled out to this
+    user yet), not enabled (the feature is available but the user doesn't have
+    it turned on), or enabled (the feature is enabled and turned on).
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.SuccessfulRequestCompletionCounts"
+    units="count">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Count of the number of requests that were successfully fetched via data
+    reduction proxy. The bucket represents the index of the data reduction proxy
+    in the data reduction proxy list.
+  </summary>
+</histogram>
+
+<histogram
+    name="DataReductionProxy.SuccessfulRequestCompletionCounts.MainFrame"
+    units="count">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Count of the number of main frame requests that were successfully fetched
+    via data reduction proxy. The bucket represents the index of the data
+    reduction proxy in the data reduction proxy list.
+  </summary>
+</histogram>
+
+<histogram name="DataReductionProxy.UIAction" enum="DataReductionProxyUIAction">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the Data Reduction Proxy promos, First Run
+    Experience, and settings menu. All samples are mutually exclusive. These
+    samples include:
+
+    The user interactions with the second run promo. On Android, there are three
+    actions that dismiss this promo (enable, dismiss, and learn more) and on iOS
+    there is a toggle to enable the proxy. This is sampled when the promo leaves
+    view. If the user clicks the link to the settings menu, the state of the
+    ON/OFF switch in the menu is sampled when the view is exited.
+
+    Any other user interaction with the the ON/OFF switch in the settings menu
+    for reducing data usage. Only the setting changes between entering the
+    reducing data usage setting menu and leaving the menu will be sampled
+    regardless of how many times they toggle the ON/OFF switch. Other samples
+    that report ON/OFF settings menu changes are not also reported here.
+
+    The user interactions with the First Run Experience. On Android when the
+    user sees the FRE card, the Data Reduction Proxy defaults to ON. The user
+    can disable the proxy via a switch on the card. The state of the proxy is
+    sampled when the First Run Experience is completed and only reported if the
+    Data Reduction Proxy card was shown.
+
+    The user interactions with the Infobar promo. On Android, there are two
+    actions that dismiss the promo (enable, dismiss). This is sampled when the
+    promo leaves view.
+
+    The user interactions with the Snackbar promo. The user can either ignore
+    the promo or click the action to the Settings menu. From the settings menu,
+    the user may enable or disable the proxy.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.MatchingRulesCount.Invalid" units="count">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The number of invalid matching rules fetched from the platform external data
+    use observer. A sample is recorded everytime fetch done callback is called.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.MatchingRulesCount.Valid" units="count">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The number of valid matching rules fetched from the platform external data
+    use observer. A sample is recorded everytime fetch done callback is called.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.Perf.MatchingRuleFirstFetchDuration" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The time taken in milliseconds to fetch the matching rules for the first
+    time from the platform external data use observer. This measures the
+    duration from the start time of Chromium to the time the rules are returned
+    asynchronously. A sample is recorded when the first fetch done callback is
+    called.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.Perf.ReportSubmissionDuration" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The time taken in milliseconds to submit the data use reports to the
+    platform external data use observer. This measures the duration from the
+    time of report submission to the time report submission done asynchronous
+    callback is received. A sample is recorded everytime report submission done
+    callback is received.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.Perf.URLRegexMatchDuration" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The time taken in milliseconds for a regular expression to parse an URL. A
+    sample is recorded evertime regular expression parsing is done for an URL.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.ReportSubmission.Bytes" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Count of bytes in the data use reports that were intended to be submitted to
+    the platform external data use observer.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.ReportSubmissionResult"
+    enum="DataUsageReportSubmissionResult">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>Result of data usage report submission.</summary>
+</histogram>
+
+<histogram name="DataUsage.TabModel.ExpiredActiveTabEntryRemovalDuration"
+    units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The duration from the start time of a tab entry's latest data usage tracking
+    session, till when the entry is expired and removed from the tab model. This
+    is for tab entries that are still actively tracking data usage for a
+    Chromium tab.
+
+    Tab model maintains the tab entries, each pertaining to tracking sessions of
+    a single Chromium tab. These entries are considered expired after some
+    duration and can be removed from the tab model after that. The sample is
+    taken when an expired tab entry still tracking data usage is removed from
+    the tab model.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.TabModel.ExpiredInactiveTabEntryRemovalDuration"
+    units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The duration from the end time of a tab entry's latest data usage tracking
+    session, till when the entry is expired and removed from the tab model. This
+    is for tab entries that are not actively tracking data usage for a Chromium
+    tab.
+
+    Tab model maintains the tab entries, each pertaining to tracking sessions of
+    a single Chromium tab. These entries are considered expired after some
+    duration and can be removed from the tab model after that. The sample is
+    taken when an expired inactive tab entry is removed from the tab model.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.TabModel.OldInactiveSessionRemovalDuration"
+    units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The duration from the end time of a data usage tracking session, till when
+    the tracking session is removed from the tab model. This is for old tracking
+    sessions that are not actively tracking data usage.
+
+    Tab model maintains a limited number of tracking sessions per Chromium tab.
+    When this limit is reached oldest inactive tracking sessions are removed.
+    The sample is taken when an old inactive tracking session of a tab is
+    removed from the tab model.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.TabModel.TrackingSessionLifetime" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The lifetime of a data usage tracking session of a Chromium tab, maintained
+    by the tab model. This is the duration between the time tracking started due
+    to an entry event and ended with an exit event. The sample is taken when the
+    data usage tracking session ends.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.TabModel.UnexpiredTabEntryRemovalDuration"
+    units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The duration from the end time (start time, if still active) of a tab
+    entry's latest data usage tracking session, till when the entry is removed
+    from the tab model. This is for tab entries that are not expired yet, and
+    removed from the tab model.
+
+    Tab model maintains a limited number of entries, each pertaining to tracking
+    sessions of a single Chromium tab. When this limit is reached even after
+    removing expired tab entries, then oldest unexpired tab entries are removed.
+    The sample is taken when an unexpired tab entry is removed from the tab
+    model.
+  </summary>
+</histogram>
+
+<histogram name="DataUsage.UIAction" enum="DataUsageUIAction">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the Data Use snackbar and dialog. These
+    samples include:
+
+    Displays of the snackbar that indicates the start of data use tracking and
+    clicks on its &quot;More&quot; button. Displays of snackbar that indicates
+    the end of data use tracking and clicks on its &quot;More&quot; button.
+    Displays of the dialog that indicates the end of data use tracking and the
+    user interactions with it, which include: clicking &quot;Continue&quot;,
+    clicking &quot;Cancel&quot;, clicking &quot;Learn more&quot;, and opting out
+    of seeing the dialog. If the user opts out of seeing the dialog, they will
+    see the snackbar that indicates the end of data use tracking from then on.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.BackgroundToDataRecievedPerByte" units="ms">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The time since Chrome is in background when background data use happens.
+    Recorded for each byte of background data use. The source of traffic whether
+    from user browsing or chrome services is added as suffix to this histogram.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.BackgroundToFirstDownstream" units="ms">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The time since Chrome is in background when first background data use
+    happens. Recorded when first background downstream data use after Chrome is
+    in background. The source of traffic whether from user browsing or chrome
+    services is added as suffix to this histogram.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.BytesReceived" units="bytes">
+  <owner>tbansal@chromium.org</owner>
+  <summary>Count of total bytes received by the Chrome on the network.</summary>
+</histogram>
+
+<histogram name="DataUse.BytesSent" units="bytes">
+  <owner>tbansal@chromium.org</owner>
+  <summary>Count of total bytes sent by the Chrome on the network.</summary>
+</histogram>
+
+<histogram name="DataUse.MessageSize" units="bytes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The request and reponse size of the messages exchanged by a service. It is
+    logged when the URLReqeust of a service is completed. The service name is
+    added as a suffix to this histogram name.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.MessageSize.AllServices" enum="DataUseServices">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The request and reponse size of the messages exchanged by all the services.
+    Whenever a URLRequest of a service is completed, the number of exchanged
+    bytes is logged in this histogram. The buckets in this histogram are
+    services, so it makes it possible to compare the use of different services
+    in different conditions. Different conditions are added as suffixes to this
+    histogram. If the OS is not Android all the requests are considered
+    foreground.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.Sync.Download.Bytes" enum="SyncModelTypes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of downloaded bytes of different data types in Sync service for
+    received updates. It is updated when an update message is received from sync
+    server.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.Sync.Download.Count" enum="SyncModelTypes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of downloaded entities of different data types in Sync service for
+    received updates. It is updated when an update message is received from sync
+    server.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.Sync.ProgressMarker.Bytes" enum="SyncModelTypes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of downloaded bytes of ProgressMarker of different data types in Sync
+    service for received updates. It is updated when an update message is
+    received from sync server.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.Sync.Upload.Bytes" enum="SyncModelTypes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of uploaded bytes of different data types in Sync service for sent
+    commits. Updated when a commit message is sent to sync server.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.Sync.Upload.Count" enum="SyncModelTypes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of uploaded entities of different data types in Sync service for sent
+    commits. Updated when a commit message is sent to sync server.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.TrafficSize.System" units="bytes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total data use of Chrome's services. There is no ResourceRequestInfo
+    attached to these requests. If the OS is not Android all the requests are
+    considered foreground.
+  </summary>
+</histogram>
+
+<histogram name="DataUse.TrafficSize.User" units="bytes">
+  <owner>amohammadkhan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total amount of data use of Chrome for user traffic. This traffic has
+    content::ResourceRequestInfo attached to its request. If the OS is not
+    Android all the requests are considered foreground.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.ActivateSettings.ErrorHresult" enum="Hresult">
+  <owner>pmonette@chromium.org</owner>
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The HRESULT from ActivateApplication when opening the Win10+ settings page
+    fails.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.AsyncSetAsDefault.Duration" units="ms">
+  <obsolete>
+    Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultAsyncDuration.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    How long it took to set Chrome as the default browser asynchronously in
+    Windows 10+. The duration is recorded only on Success, Failure, Abandoned
+    and Retry result codes.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.AsyncSetAsDefault.Result"
+    enum="DefaultBrowserAsyncAttemptResult">
+  <obsolete>
+    Deprecated 2015/11. Renamed to DefaultBrowser.SetDefaultResult.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The count of how many times users were successfully able to set Chrome as
+    the default browser asynchronously in Windows 10+.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.InfoBar.UserInteraction"
+    enum="DefaultBrowserInfoBarUserInteraction">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    Possible user interactions with the default browser info bar.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.InteractionResult"
+    enum="MakeChromeDefaultResult">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Results of interaction with set-as-default dialog in Win8+ first run flow.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.SetDefaultAsyncDuration" units="ms">
+  <obsolete>
+    Deprecated 2016/03. The async set-as-default experiments are finished.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    How long it took to set Chrome as the default browser asynchronously in
+    Windows 10+. The duration is recorded only on Success, Failure, Abandoned,
+    Retry and NoErrorsNotDefault result codes.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.SetDefaultResult"
+    enum="SetDefaultAttemptResult">
+  <obsolete>
+    Deprecated 2016/03.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The outcome of an attempt to set Chrome as the user's default browser.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.SetDefaultResult2" enum="DefaultWebClientState">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The outcome of an attempt to set Chrome as the user's default browser.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.SettingsInteraction.ConcludeReason"
+    enum="SettingsInteractionConcludeReason">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The reason why the default browser settings interaction concluded on Windows
+    10.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.SettingsInteraction.RegistryWatcherDuration"
+    units="ms">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The registry keys for the default browser protocols (http/https) are
+    monitored to know when the user finished interacting with the system
+    settings. This is how long it took for the last registry watcher to get
+    signaled.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowser.State" enum="DefaultBrowserState">
+  <owner>gab@chromium.org</owner>
+  <summary>Whether Chrome was the default browser when it started up.</summary>
+</histogram>
+
+<histogram name="DefaultBrowserWarning.DontSetAsDefault" enum="BooleanHit">
+  <obsolete>
+    Deprecated 2015/11. The same information is available as the value Failure
+    in DefaultBrowser.SetDefaultResult.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    In the make-default infobar, the user explicitly declined to set Chrome as
+    default. Or, on OSes requiring the SetAsDefaultUI, the user explicitly chose
+    another browser as default from the interactive UI. TODO(gab): Split the
+    interactive signal into a separate histogram.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowserWarning.Ignored" enum="BooleanHit">
+  <obsolete>
+    Deprecated 2015/11. Renamed to DefaultBrowser.InfoBar.UserInteraction.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The user ignored the make-default infobar (it was eventually dismissed along
+    with its associated web content without the user interacting with it).
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowserWarning.SetAsDefault" enum="BooleanHit">
+  <obsolete>
+    Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There
+    is no longer a distinction between interactive or not.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    In the make-default infobar, the user clicked a button making Chrome the
+    default.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowserWarning.SetAsDefaultUI" enum="BooleanHit">
+  <obsolete>
+    Deprecated 2015/11. Renamed to DefaultBrowser.Infobar.UserInteraction. There
+    is no longer a distinction between interactive or not.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Same as SetAsDefault, but in Win8+ (resulting in interactive UI instead of
+    automatic takeover). Successes == these reports minus reports for
+    DefaultBrowserWarning.SetAsDefaultUIFailed and some
+    DefaultBrowserWarning.DontSetAsDefault. TODO(gab): Improve reporting here.
+  </summary>
+</histogram>
+
+<histogram name="DefaultBrowserWarning.SetAsDefaultUIFailed" enum="BooleanHit">
+  <obsolete>
+    Deprecated 2015/11. The same information is available as the value Failure
+    in DefaultBrowser.SetDefaultResult.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The user dismissed the interactive SetAsDefaultUI without making an explicit
+    choice (or the UI failed to come up for another reason).
+  </summary>
+</histogram>
+
+<histogram name="DefaultProtocolClient.SetDefaultResult"
+    enum="SetDefaultAttemptResult">
+  <obsolete>
+    Deprecated 2016/03.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The outcome of an attempt to set Chrome as the user's default client for a
+    protocol.
+  </summary>
+</histogram>
+
+<histogram name="DefaultProtocolClient.SetDefaultResult2"
+    enum="DefaultWebClientState">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The outcome of an attempt to set Chrome as the user's default client for a
+    protocol.
+  </summary>
+</histogram>
+
+<histogram name="DevTools.ActionTaken" enum="DevToolsAction">
+  <owner>sergeyv@chromium.org</owner>
+  <owner>vsevik@chromium.org</owner>
+  <owner>pfeldman@chromium.org</owner>
+  <summary>Specified DevTools action has been taken.</summary>
+</histogram>
+
+<histogram name="DevTools.InspectElement" units="ms">
+  <owner>sergeyv@chromium.org</owner>
+  <owner>vsevik@chromium.org</owner>
+  <owner>pfeldman@chromium.org</owner>
+  <summary>
+    Time to load Developer Tools when user clicks Inspect Element in the context
+    menu.
+  </summary>
+</histogram>
+
+<histogram name="DevTools.PanelShown" enum="DevToolsPanel">
+  <owner>sergeyv@chromium.org</owner>
+  <owner>vsevik@chromium.org</owner>
+  <owner>pfeldman@chromium.org</owner>
+  <summary>Specified DevTools panel was shown.</summary>
+</histogram>
+
+<histogram name="DevTools.SettingChanged" enum="DevToolsSetting">
+  <owner>sergeyv@chromium.org</owner>
+  <owner>vsevik@chromium.org</owner>
+  <owner>pfeldman@chromium.org</owner>
+  <summary>Specified DevTools setting was changed.</summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.ConflictingDlls" enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.DiskSpace" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the DiskSpace recovery step that runs
+    on recovery startups.  The recovery step attempts to guarantee the DiskSpace
+    test, which checks that the disk space in the volume where the user data
+    directory normally lives is not dangerously low, would pass on the next
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.InstallType" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.JSONBookmarks" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the JSONBookmarks recovery step that
+    runs on recovery startups. The recovery step attempts to guarantee the
+    JSONBookmarks test, which makes sure that the JSON-encoded Bookmarks file is
+    properly formed, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.JSONLocalState" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the JSONLocalState recovery step that
+    runs on recovery startups. The recovery step attempts to guarantee the
+    JSONLocalState test, which makes sure that the JSON-encoded Local State file
+    is properly formed, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.JSONPreferences" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the JSONPreferences recovery step
+    that runs on recovery startups. The recovery step attempts to guarantee the
+    JSONPreferences test, which makes sure that the JSON-encoded Preferences
+    file is properly formed, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.OperatingSystem" enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.PathDictionaries"
+    enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the PathDictionaries recovery step
+    that runs on recovery startups. The recovery step attempts to guarantee the
+    PathDictionaries test, which makes sure that the path to the Dictionaries
+    directory exists and has the right permissions, would pass on the next
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.PathLocalState" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the PathLocalState recovery step that
+    runs on recovery startups. The recovery step attempts to guarantee the
+    PathLocalState test, which makes sure that the path to the Local State file
+    exists and has the right permissions, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.PathResources" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the PathResources recovery step that
+    runs on recovery startups. The recovery step attempts to guarantee the
+    PathResources test, which makes sure that the path to the Resources
+    directory exists and has the right permissions, would pass on the next
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.PathUserData" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the PathUserData recovery step that
+    runs on recovery startups. The recovery step attempts to guarantee the
+    PathUserData test, which makes sure that the path to the User Data directory
+    exists and has the right permissions, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityAppCache"
+    enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityAppCache recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityAppCache test, which checks the integrity of
+    the App Cache database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityArchivedHistory"
+    enum="DiagnosticsResult">
+  <obsolete>
+    Removed as of Jun 2014: we no longer have an archived database.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
+    recovery step that runs on recovery startups. The recovery step attempts to
+    guarantee the SQLiteIntegrityArchivedHistory test, which checks the
+    integrity of the Archived History database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityCookie"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityCookie recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityCookie test, which checks the integrity of the
+    Cookie database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityDatabaseTracker"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
+    recovery step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityDatabaseTracker test, which checks the
+    integrity of the Database Tracker database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityFavicons"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityFavicons recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityFavicons test, which checks the integrity of
+    the Favicons database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityHistory"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityHistory recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityHistory test, which checks the integrity of the
+    History database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSCert"
+    enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityNSSCert recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityNSSCert test, which checks the integrity of the
+    NSS Certificate database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityNSSKey"
+    enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityNSSKey recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityNSSKey test, which checks the integrity of the
+    NSS Key database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityThumbnails"
+    enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 05/2016 in Issue 617226; has not been valid for many years.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityThumbnails
+    recovery step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityThumbnails test, which checks the integrity of
+    the Thumbnails database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityTopSites"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityTopSites recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityTopSites test, which checks the integrity of
+    the TopSites database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.SQLiteIntegrityWebData"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityWebData recovery
+    step that runs on recovery startups.  The recovery step attempts to
+    guarantee the SQLiteIntegrityWebData test, which checks the integrity of the
+    Web Data database, would pass on the next startup.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Recovery.Version" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.RecoveryRun" enum="DiagnosticsRecoveryRun">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of the number of times diagnostics recovery is invoked or not, and how
+    it was invoked.  A sample is added to this histogram once for each startup
+    of Chrome.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.ConflictingDlls" enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.DiskSpace" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the DiskSpace test
+    that runs on recovery startups.  The DiskSpace test checks that the disk
+    space in the volume where the user data directory normally lives is not
+    dangerously low.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.InstallType" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.JSONBookmarks" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the JSONBookmarks
+    test that runs on recovery startups.  The JSONBookmarks test checks to make
+    sure that the JSON encoded bookmarks file is properly formed.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.JSONLocalState" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the JSONLocalState
+    test that runs on recovery startups.  The JSONLocalState test checks to make
+    sure that the JSON encoded Local State file is properly formed.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.JSONPreferences" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the JSONPreferences
+    test that runs on recovery startups.  The JSONPreferences test checks to
+    make sure that the Preferences file is properly formed.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.OperatingSystem" enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.PathDictionaries" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the PathDictionaries
+    test that runs on recovery startups.  The PathDictionaries test checks makes
+    sure that the path to the Dictionaries folder exists and has the right
+    permissions.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.PathLocalState" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the PathLocalState
+    test that runs on recovery startups.   The PathLocalState test checks makes
+    sure that the path to the Local State folder exists and has the right
+    permissions.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.PathResources" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the PathResources
+    test that runs on recovery startups.  The PathResources test checks makes
+    sure that the path to the Resources folder exists and has the right
+    permissions.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.PathUserData" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of diagnostics for the PathUserData test
+    that runs on recovery startups. The PathUserData test checks makes sure that
+    the path to the User Data folder exists and has the right permissions.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityAppCache"
+    enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityAppCache test that
+    runs on recovery startups.  The test checks the integrity of the App Cache
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityArchivedHistory"
+    enum="DiagnosticsResult">
+  <obsolete>
+    Removed as of Jun 2014: we no longer have an archived database.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityArchivedHistory
+    test that runs on recovery startups.  The test checks the integrity of the
+    Archived History database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityCookie"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityCookie test that
+    runs on recovery startups.  The test checks the integrity of the Cookie
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityDatabaseTracker"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityDatabaseTracker
+    test that runs on recovery startups.  The test checks the integrity of the
+    Database Tracker database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityFavicons"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityFavicons test that
+    runs on recovery startups.  The test checks the integrity of the Favicons
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityHistory"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityHistory test that
+    runs on recovery startups.  The test checks the integrity of the History
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityNSSCert"
+    enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityNSSCert test that
+    runs on recovery startups.  The test checks the integrity of the NSS
+    Certificate database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityNSSKey"
+    enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityNSSKey test that
+    runs on recovery startups.  The test checks the integrity of the NSS Key
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityThumbnails"
+    enum="DiagnosticsResult">
+  <obsolete>
+    Deprecated 05/2016 in Issue 617226; has not been valid for many years.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityThumbnails test
+    that runs on recovery startups.  The test checks the integrity of the
+    Thumbnails database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityTopSites"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityTopSites test that
+    runs on recovery startups.  The test checks the integrity of the TopSites
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.SQLiteIntegrityWebData"
+    enum="DiagnosticsResult">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Shows the success and failure rates of the SQLiteIntegrityWebData test that
+    runs on recovery startups.  The test checks the integrity of the Web Data
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.Test.Version" enum="DiagnosticsResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    TBD - Not run automatically yet, so this is just a placeholder for future
+    metrics collection.  Any samples collected here represent users running
+    diagnostics manually.
+  </summary>
+</histogram>
+
+<histogram name="Diagnostics.TestFailures" enum="DiagnosticsTestName">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Histogram comparing the various types of diagnostic test failures when
+    diagnostic tests are run.  Note that some types of test failures cause the
+    rest of the tests to be skipped.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.BuildCache.File.Size" units="KB">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Reports size of font cache file. This is reported every time we rebuild font
+    cache.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.BuildCache.Ignored">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Reports the total number of fonts that will be ignored while building static
+    font cache due to size limitation. During cache building phase if our logic
+    suggests that we need to put more than 70% of font file contents into cache
+    file then we don't cache that particular font file. These ignored font files
+    are directly picked up from system fonts folder during Direct Write cache
+    building process. Our end goal is to minimize costly open and close
+    operations on font files in system folder.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Ignored">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Reports the total number of fonts that will be ignored while loading a
+    custom font collection. With current criteria fonts that are not in
+    system-font location will be ignored.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Loaded">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Reports the total number of fonts to be loaded through a custom font
+    collection. This actually reports total font entries from registry excluding
+    font entries that point to non-system location.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.LoadTime" units="ms">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Measures the total time spent in loading a custom font collection in
+    non-cache-file mode. We load system fonts as a custom font collection to
+    avoid any interaction with windows font cache service from sandboxed
+    renderer process. Please note that windows font cache services is different
+    from our cache file approach (later referred here as cache-file mode).
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.LoadTime.Cached" units="ms">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Measures the total time spent in loading a custom font collection in
+    cache-file mode. We load system fonts as a custom font collection to avoid
+    any interaction with windows font cache service from sandboxed renderer
+    process. Please note that windows font cache services is different from our
+    cache file approach (later referred here as cache-file mode)
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.CreateFontFaceResult" units="HRESULT">
+  <owner>kulshin@chromium.org</owner>
+  <summary>Records the error returned from CreateFontFace.</summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.Fallback.CacheSize" units="Count">
+  <owner>kulshin@chromium.org</owner>
+  <summary>Records how many font families are in the fallback cache.</summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.FallbackResult"
+    enum="DirectWriteFontFallbackResult">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    Measures the effectiveness of the font fallback proxy. This tracks if we
+    were able to find a suitable font to render the character, and whether an
+    IPC was necessary.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.FamilyCount" units="families">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The number of font families as seen by the font proxy in the renderer.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.FontProxyError"
+    enum="DirectWriteFontProxyError">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The errors encountered by the DirectWrite font proxy while loading fonts.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.GetSystemFontCollectionResult"
+    units="HRESULT">
+  <owner>kulshin@chromium.org</owner>
+  <summary>Records the error returned from GetSystemFontCollection.</summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.LastResortFontCount" units="fonts">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The number of last resort fallback fonts found on the system as seen by the
+    browser.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.LastResortFontFileCount" units="files">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The number of font files found for a last resort fallback font.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.LoaderType"
+    enum="DirectWriteFontLoaderType">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The codepath that was used to load a font family. This is logged in the
+    browser every time a renderer attempts to load a font family, once per font
+    file.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.LoadFamilyResult"
+    enum="DirectWriteLoadFamilyResult">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The outcome of attempting to load a font family in the renderer (success vs
+    failure and number of families). This is logged in the renderer once per
+    family that is loaded.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.LoadFamilyTime" units="ms">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    The time taken to load a font family, excluding glyph data. This is logged
+    in the renderer once per family that is loaded.
+  </summary>
+</histogram>
+
+<histogram name="DirectWrite.Fonts.Proxy.MessageFilterError"
+    enum="DirectWriteMessageFilterError">
+  <owner>kulshin@chromium.org</owner>
+  <summary>
+    Errors, if any, encountered by the DirectWrite font proxy message filter.
+  </summary>
+</histogram>
+
+<histogram name="DisabledExtension.ExtensionWipedStatus" enum="BooleanWiped">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Whether an extension has been wiped out.</summary>
+</histogram>
+
+<histogram name="DisabledExtension.SideloadWipeoutCount">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    How many external extensions get wiped out as a result of the Sideload
+    Wipeout one-time initiative.
+  </summary>
+</histogram>
+
+<histogram name="DisabledExtension.SideloadWipeoutNeeded" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether any extension got wiped out as a result of the Sideload Wipeout
+    one-time initiative.
+  </summary>
+</histogram>
+
+<histogram name="DisabledExtension.UserSelection" enum="SideloadWipeoutBubble">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The user selection in the Sideload Wipeout bubble, grouped by the
+    UmaWipeoutHistogramOptions enum.
+  </summary>
+</histogram>
+
+<histogram name="DiskBasedCertCache.CertIo" enum="CertificateChainPosition">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <owner>brandonsalmon@chromium.org</owner>
+  <summary>
+    Records information about DiskBasedCertCache operations with respect to
+    certificate chain positions. Zero indicates that a certificate is root, one
+    indicates that it is the first intermediate certificate, etc.
+  </summary>
+</histogram>
+
+<histogram name="DiskBasedCertCache.CertIoCacheResult" enum="CacheResult">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <owner>brandonsalmon@chromium.org</owner>
+  <summary>
+    Records the outcome of requests to retrieve certificates from the disk
+    cache.
+  </summary>
+</histogram>
+
+<histogram name="DiskBasedCertCache.CertIoReadSuccessLeaf"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <owner>brandonsalmon@chromium.org</owner>
+  <summary>
+    Whether or not the leaf certificate of a certificate chain was successfuly
+    read from the disk cache.
+  </summary>
+</histogram>
+
+<histogram name="DiskBasedCertCache.CertIoWriteSuccessLeaf"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <owner>brandonsalmon@chromium.org</owner>
+  <summary>
+    Whether or not the leaf certificate of a certificate chain was successfully
+    written to the disk cache.
+  </summary>
+</histogram>
+
+<histogram name="DiskBasedCertCache.ChainReadTime" units="ms">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <owner>brandonsalmon@chromium.org</owner>
+  <summary>
+    Measures the wall clock time spent reading a certificate chain. The starting
+    time is when the read command is issued, and the ending time is when all of
+    the  certificates in the chain have been read into memory.
+  </summary>
+</histogram>
+
+<histogram name="DiskBasedCertCache.ChainWriteTime" units="ms">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <owner>brandonsalmon@chromium.org</owner>
+  <summary>
+    Measures the wall clock time spent writing a certificate chain to disk. The
+    starting time is when the write command is issued, and the ending time is
+    when all the certificates in the chain have been written to disk.
+  </summary>
+</histogram>
+
+<histogram name="DiskCache.0.FilesAge" units="hours">
+  <owner>rvargas@chromium.org</owner>
+  <summary>The age of the cache's files (wall time).</summary>
+</histogram>
+
+<histogram name="DiskCache.2.FilesAge" units="hours">
+  <owner>rvargas@chromium.org</owner>
+  <summary>
+    The age of the cache's files (wall time). Media-specific cache.
+  </summary>
+</histogram>
+
+<histogram name="DiskCache.3.FilesAge" units="hours">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The age of the cache's files (wall time). AppCache.</summary>
+</histogram>
+
+<histogram name="DiskCache.4.FilesAge" units="hours">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The age of the cache's files (wall time). ShaderCache.</summary>
+</histogram>
+
+<histogram name="DiskCache.SizeStats2" units="KB">
+  <owner>rvargas@chromium.org</owner>
+  <summary>The size distribution of data stored in the HTTP cache.</summary>
+</histogram>
+
+<histogram name="DiskCache.TotalIOTime" units="ms">
+  <obsolete>
+    Deprecated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time it takes to perform a payload IO operation, for the regular
+    disk cache.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptCancelled">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The attempt which completed after the job was already cancelled.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptDiscarded">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The attempt which completed after the job was already cancelled OR the
+    attempt that has finished after host resolution was already completed by an
+    earlier attempt.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptFailDuration" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in OS resolutions for actual navigations. These
+    attempts which completed after the job was already canceled OR after the job
+    was already completed by an earlier attempt. Note that cached resolutions
+    may provide low (0ms?) resolution times.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptFailure">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>The attempt that has not resolved the host successfully.</summary>
+</histogram>
+
+<histogram name="DNS.AttemptFirstFailure">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The attempt that resolved the host first and the resolution was not
+    successful.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptFirstSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The attempt that resolved the host first and the resolution was successful.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>The attempt that has resolved the host successfully.</summary>
+</histogram>
+
+<histogram name="DNS.AttemptSuccessDuration" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in OS resolutions that succeeded and were requested
+    for actual navigations. These attempts which completed after the job was
+    already canceled OR after the job was already completed by an earlier
+    attempt. Note that cached resolutions may provide low (0ms?) resolution
+    times.
+  </summary>
+</histogram>
+
+<histogram name="DNS.AttemptTimeSavedByRetry" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    This histogram shows the time saved by having spawned an extra attempt, when
+    the first attempt didn't finish before retry attempt.
+  </summary>
+</histogram>
+
+<histogram name="DNS.CacheEvicted" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time left to expiration of an entry when it is removed while compacting
+    the HostCache.
+  </summary>
+</histogram>
+
+<histogram name="DNS.CacheExpired" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time since expiration of an entry when it is removed while compacting
+    the HostCache.
+  </summary>
+</histogram>
+
+<histogram name="DNS.CacheExpiredOnGet" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time since expiration of an entry when it is removed on lookup.
+  </summary>
+</histogram>
+
+<histogram name="DNS.EmptyAddressListAndNoError"
+    enum="DNSEmptyAddressListAndNoError">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Error status when an empty address list was found in OnLookupComplete().
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.Erase" enum="DNS.HostCache.EraseReason">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>The reason for erasing a DNS entry from the host cache.</summary>
+</histogram>
+
+<histogram name="DNS.HostCache.EraseStale.ExpiredBy" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When erasing a stale (expired or old-network) DNS entry from the host cache,
+    how long past the expiration time it is.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.EraseStale.NetworkChanges" units="changes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When erasing a stale (expired or old-network) DNS entry from the host cache
+    how many network changes happened between setting and erasing it.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.EraseStale.StaleHits" units="hits">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When erasing a stale (expired or old-network) DNS entry from the host cache
+    how many hits it received while stale.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.EraseValid.ValidFor" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When erasing a valid DNS entry from the host cache, for how much longer it
+    would have remained valid.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.Lookup" enum="DNS.HostCache.LookupOutcome">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>The outcome of looking up a DNS entry in the host cache.</summary>
+</histogram>
+
+<histogram name="DNS.HostCache.LookupStale.ExpiredBy" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When looking up a stale DNS entry in the host cache, how long past the
+    expiration time it is.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.LookupStale.NetworkChanges" units="changes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When looking up a stale DNS entry in the host cache, how many network
+    changes happened between setting it and looking it up.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.Set" enum="DNS.HostCache.SetOutcome">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>The outcome of setting a DNS entry in the host cache.</summary>
+</histogram>
+
+<histogram name="DNS.HostCache.UpdateStale.AddressListDelta"
+    enum="DNS.AddressListDeltaType">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When updating a stale (expired or old-network) DNS entry in the host cache,
+    and both results are successful, how the address list differs between the
+    old and new entries.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.UpdateStale.ExpiredBy" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When updating a stale (expired or old-network) DNS entry in the host cache,
+    how long past the expiration time the old entry was.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.UpdateStale.NetworkChanges" units="changes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When updating a stale (expired or old-nework) DNS entry in the host cache,
+    how many network changes happened between setting the old entry and setting
+    the new entry.
+  </summary>
+</histogram>
+
+<histogram name="DNS.HostCache.UpdateStale.StaleHits" units="hits">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The number of hits received to an updated stale DNS entry in the host cache
+    while it was stale.
+  </summary>
+</histogram>
+
+<histogram name="DNS.IndependentFailedNavigation" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When either a pre-resolution was not done recently enough to provide
+    benefit, or the corresponding pre-resolution is still pending, this
+    histogram shows the duration of time used to resolve a hostname as not
+    existing during a failed attempt to navigate to (GET) a URL.  In newer
+    versions, if the hostname has never been found as a link during a page scan,
+    and it has a referring URL, then it is added to referrer list data structure
+    (hoping we'll do better next time).
+  </summary>
+</histogram>
+
+<histogram name="DNS.IndependentNavigation" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When either a pre-resolution was not done recently enough to provide
+    benefit, or the corresponding pre-resolution is still pending, this
+    histogram shows the duration of the duration of time used to resolve a
+    hostname to navigate to (GET) a URL.  In newer versions, if the hostname has
+    never been found as a link during a page scan, and it has a referring URL,
+    then it is added to referrer list data structure (hoping we'll do better
+    next time).
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTime" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (a getaddrinfo call was dispatched to the thread
+    pool).
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTime_HIGHEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (a getaddrinfo call was dispatched to the thread
+    pool). Includes only Jobs which had priority HIGHEST when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTime_IDLE" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (a getaddrinfo call was dispatched to the thread
+    pool). Includes only Jobs which had priority IDLE when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTime_LOW" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (a getaddrinfo call was dispatched to the thread
+    pool). Includes only Jobs which had priority LOW when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTime_LOWEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (a getaddrinfo call was dispatched to the thread
+    pool). Includes only Jobs which had priority LOWEST when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTime_MEDIUM" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the time the HostResolverImpl::Job was created and the
+    time the Job was started (a getaddrinfo call was dispatched to the thread
+    pool). Includes only Jobs which had priority MEDIUM when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTimeAfterChange" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (a getaddrinfo call was dispatched to the thread pool).
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTimeAfterChange_HIGHEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (a getaddrinfo call was dispatched to the thread pool). Includes
+    only Jobs which had priority HIGHEST when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTimeAfterChange_IDLE" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (a getaddrinfo call was dispatched to the thread pool). Includes
+    only Jobs which had priority IDLE when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTimeAfterChange_LOW" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (a getaddrinfo call was dispatched to the thread pool). Includes
+    only Jobs which had priority LOW when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTimeAfterChange_LOWEST" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (a getaddrinfo call was dispatched to the thread pool). Includes
+    only Jobs which had priority LOWEST when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.JobQueueTimeAfterChange_MEDIUM" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time elapsed between the last time the priority of a HostResolverImpl::Job
+    changed (when a Request was attached or detached) and the time the Job was
+    started (a getaddrinfo call was dispatched to the thread pool). Includes
+    only Jobs which had priority MEDIUM when started.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchCacheEviction" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time used (most recently) to pre-resolve a hostname, when
+    the prefetched resolution was apparently evicted from the cache.  The
+    included samples only list pre-resolution times when the later
+    navigations/fetches took in excess of 15ms.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchCacheEvictionL" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time used (most recently) to pre-resolve a hostname, when
+    the prefetched resolution was apparently evicted from the cache.  The
+    included samples only list pre-resolution times when the later
+    navigations/fetches took in excess of 15ms.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchFoundName">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Replaced by DNS.PrefetchFoundNameL.</summary>
+</histogram>
+
+<histogram name="DNS.PrefetchFoundNameL" units="ms">
+  <obsolete>
+    Deprecated 2/2010, and replaced by DNS.PrefetchResolution
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time used by the DNS pre-resolving threads to resolve a host
+    name via the network.  Any resolutions that are faster than 15ms are
+    considered to be local cache hits, not requiring network access, and are not
+    included in this histogram. This histogram is most useful for estimating the
+    typical cost of a name resolution, but it also estimates the total number of
+    network-based resolutions induced by this feature.  Not all these
+    resolutions prove helpful (i.e., the user does not always actually visit the
+    resolved hostnames).
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchNegativeHit">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Replaced by DNS.PrefetchNegativeHitL.</summary>
+</histogram>
+
+<histogram name="DNS.PrefetchNegativeHitL" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time saved due to DNS pre-resolving in the &quot;name not
+    found&quot; case.  Time &quot;savings&quot; shown in the histogram are
+    defined to be the difference between the DNS pre-resolution duration, and
+    the DNS resolution duration seen during a navigation.  These cache hits only
+    list events where the DNS pre-resolve duration for a host was in excess of
+    15ms (i.e., the network was consulted), and the actual DNS resolution (when
+    a user attempted to navigate to a link with the same host name) took less
+    than 15ms (i.e., the network was not consulted), which means the gain was a
+    result of a &quot;cache hit&quot; in the OS cache.  For some users with
+    LANs, all negative results (even when the DNS cache might otherwise help)
+    take about 2.5 seconds (due to timeouts for netbios broadcasts), and hence
+    no savings are possible (or shown) for such users in this category.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchPositiveHit">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Replaced by DNS.PrefetchPositiveHitL.</summary>
+</histogram>
+
+<histogram name="DNS.PrefetchPositiveHitL" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time saved due to DNS pre-resolving in the &quot;name was
+    found&quot; case, and induced by either a page scan for a link or an omnibox
+    entry by the user. Time &quot;savings&quot; shown in the histogram are
+    defined to be the difference between the DNS pre-resolution duration, and
+    the DNS resolution duration seen during a navigation.  These cache hits only
+    list events where the DNS pre-resolve duration for a host was in excess of
+    15ms (i.e., the network was consulted), and the actual DNS resolution (when
+    a user attempted to navigate to a link with the same host name) took less
+    than 15ms (i.e., the network was not consulted), which means the gain was a
+    result of a &quot;cache hit&quot; in the OS cache.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchQueue" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time spent by a proposed resolution waiting in the queue to
+    be resolved.  This number is in addition to any DNS resolution time that may
+    come later.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchReferredPositiveHit" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time saved due to DNS pre-resolving in the &quot;name was
+    found&quot; case, and induced by predicting (using referrer lists) that a
+    resolution was needed. Time &quot;savings&quot; shown in the histogram are
+    defined to be the difference between the DNS pre-resolution duration, and
+    the DNS resolution duration seen during a navigation.  These cache hits only
+    list events where the DNS pre-resolve duration for a host was in excess of
+    15ms (i.e., the network was consulted), and the actual DNS resolution (when
+    a user attempted to navigate to a link with the same host name) took less
+    than 15ms (i.e., the network was not consulted), which means the gain was a
+    result of a &quot;cache hit&quot; in the OS cache.
+  </summary>
+</histogram>
+
+<histogram name="DNS.PrefetchResolution" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The duration of time used by the DNS pre-resolving threads to resolve a host
+    name via the network.  Any resolutions that are faster than 15ms are
+    considered to be local cache hits, not requiring network access, and are not
+    included in this histogram. This histogram is most useful for estimating the
+    typical cost of a name resolution, but it also estimates the total number of
+    network-based resolutions induced by this feature.  Not all these
+    resolutions prove helpful (i.e., the user does not always actually visit the
+    resolved hostnames).
+  </summary>
+</histogram>
+
+<histogram name="DNS.QueueRecycledDeltaOver2">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When, due to congestion avoidance, a queued pre-resolution is abandoned
+    (recycled) without actually being resolved, this histograms records the age
+    in the queue of that entry.  Only times over 2 seconds are recorded in this
+    histogram.
+  </summary>
+</histogram>
+
+<histogram name="DNS.QueueRecycledUnder2">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When, due to congestion avoidance, a queued pre-resolution is abandoned
+    (recycled) without actually being resolved, this histograms records the age
+    in the queue of that entry.  Only times less than or equal to 2 seconds are
+    recorded in this histogram.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveCategory" enum="ResolutionCategory">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of successes and failures of OS resolutions in various categories.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveFail" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in OS resolutions for actual navigations.  Note that
+    cached OS resolutions may provide low (0ms?) resolution times.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveFail_FAMILY_IPV4" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Same as DNS.ResolveFail, but limited to pure IPv4 lookups.</summary>
+</histogram>
+
+<histogram name="DNS.ResolveFail_FAMILY_IPV6" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Same as DNS.ResolveFail, but limited to pure IPv6 lookups.</summary>
+</histogram>
+
+<histogram name="DNS.ResolveFail_FAMILY_UNSPEC" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Same as DNS.ResolveFail, but limited to IPv4/IPv6 lookups.</summary>
+</histogram>
+
+<histogram name="DNS.ResolveSpeculativeFail" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in speculative OS resolutions.  Note that cached OS
+    resolutions may provide low (0ms?) resolution times.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveSpeculativeSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in speculative OS resolution that succeeded.  Note
+    that cached resolutions may provide low (0ms?) resolution times.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveSuccess" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time taken in OS resolutions that succeeded and were requested
+    for actual navigations.  Note that cached resolutions may provide low (0ms?)
+    resolution times.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveSuccess_FAMILY_IPV4" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as DNS.ResolveSuccess, but limited to pure IPv4 lookups.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveSuccess_FAMILY_IPV6" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as DNS.ResolveSuccess, but limited to pure IPv6 lookups.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveSuccess_FAMILY_UNSPEC" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Same as DNS.ResolveSuccess, but limited to IPv4/IPv6 lookups.
+  </summary>
+</histogram>
+
+<histogram name="DNS.ResolveUnspecWaste" enum="ResolutionUnspecWasteCategory">
+  <obsolete>
+    Deprecated as of 5/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Counts of hits and misses in the DNS cache and DNS jobs pool of wasted
+    HostResolverImpl::Jobs that could be avoided by always resolving using
+    AF_UNSPEC.
+  </summary>
+</histogram>
+
+<histogram name="DNS.StaleHostResolver.NetworkEarly" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When a DNS request made through StaleHostResolver returns, a stale cached
+    result was available, and the network responded before or exactly at the
+    stale delay, how much earlier it responded.
+  </summary>
+</histogram>
+
+<histogram name="DNS.StaleHostResolver.NetworkLate" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When a DNS request made through StaleHostResolver returns, a stale cached
+    result was available, and the network responded after the stale delay, how
+    much later it responded.
+  </summary>
+</histogram>
+
+<histogram name="DNS.StaleHostResolver.RequestOutcome"
+    enum="DNS.StaleHostResolverRequestOutcome">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When a DNS request made through StaleHostResolver returns or is canceled,
+    the outcome of the request.
+  </summary>
+</histogram>
+
+<histogram name="DNS.StaleHostResolver.StaleAddressListDelta"
+    enum="DNS.AddressListDeltaType">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When a DNS request made through StaleHostResolver had a stale cached result
+    and both the stale and network results were successful, the difference
+    between the old and new address lists.
+  </summary>
+</histogram>
+
+<histogram name="DNS.TotalTime" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time since a HostResolverImpl::Resolve request to the time a
+    result is posted. Excludes canceled, evicted, and aborted requests. Includes
+    cache hits (recorded as 0). Excludes speculative requests.
+  </summary>
+</histogram>
+
+<histogram name="DNS.TotalTime_speculative" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Duration of time since a HostResolverImpl::Resolve request to the time a
+    result is posted. Excludes canceled, evicted, and aborted requests. Includes
+    cache hits (recorded as 0). Speculative requests only.
+  </summary>
+</histogram>
+
+<histogram name="DNS.UnexpectedResolution">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    In some cases, such as when content arrives with embedded references to
+    other servers, the prefetch system can't (or doesn't) attempt to pre-resolve
+    the hostnames.  As an example, a visit to www.cnn.com will fetch content
+    with references to about 12 additional hostnames, none of which are
+    currently anticipated.  Such resolutions are termed &quot;Unexpected
+    Resolutions,&quot; and the durations associated with those DNS resolutions
+    are shown below.  Future features may attempt to learn (from prior
+    experience locally, or from server provided hints), what secondary hostname
+    resolutions should be done when a primary resolution (or navigation) takes
+    place.  This histogram shows what the potential savings are that
+    &quot;remain on the table&quot; until we employ some of these more advanced
+    features.
+  </summary>
+</histogram>
+
+<histogram name="DNS.UnexpectedResolutionL">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    In some cases, such as when content arrives with embedded references to
+    other servers, or when a page (such as one in SSL) preclude scanning and
+    prefetching, the prefetch system can't (or doesn't) attempt to pre-resolve
+    the hostnames.  As an example, a visit to www.cnn.com will fetch content
+    with references to about 12 additional hostnames, none of which might be
+    anticipated.  Similarly, clicking on a link in an SSL page won't be
+    anticipated (since scanning in not allowed by default). Such resolutions are
+    termed &quot;Unexpected Resolutions,&quot; and the durations associated with
+    those navigation induced DNS resolutions are shown below.  If a referring
+    URL is available for the navigation, the relationship to the referring URL
+    was recorded, and future navigations to the referring hostname would have
+    induced a pre-resolution of hostname that caused an entry below.  Such any
+    entry may facilitate future listing in the ReferredPositiveHit histogram.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.ErrorPageUpdateStatus" enum="DnsProbe.ProbeStatus">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Status of DNS probe updates sent to a DNS error page.</summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.Elapsed" units="ms">
+  <obsolete>
+    Renamed 7/2013 to DnsProbe.ProbeDuration.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Time between starting and finishing DNS probe.</summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.NcnOffline.Elapsed" units="ms">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time between starting and finishing DNS probe when NCN says we're offline.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.NcnOffline.Result"
+    enum="DnsProbe.ObsoleteProbeResult">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Result of DNS probes sent by the probe service when NCN says we're offline.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.NcnOnline.Elapsed" units="ms">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Time between starting and finishing DNS probe when NCN says we're online.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.NcnOnline.Result"
+    enum="DnsProbe.ObsoleteProbeResult">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Result of DNS probes sent by the probe service when NCN says we're online.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.Result" enum="DnsProbe.ObsoleteProbeResult">
+  <obsolete>
+    Renamed 7/2013 to DnsProbe.ProbeResult.  (Also switched to the full
+    DnsProbe.ProbeStatus enum.)
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Result of DNS probes sent by the probe service.</summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultBadConfig.Elapsed" units="ms">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Elapsed time of DNS probes that return PROBE_BAD_CONFIG.</summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultBadConfig.SystemIsLocalhost"
+    enum="DnsProbe.SystemIsLocalhost">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether the only nameserver in the system DNS config was 127.0.0.1 when the
+    probe result was BAD_CONFIG.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultBadConfig.SystemJobResult"
+    enum="DnsProbe.JobResult">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The result of the system probe job when the overall probe result was
+    BAD_CONFIG.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultBadConfig.SystemNameserverCount">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The number of nameservers in the system DNS config when the probe result was
+    BAD_CONFIG.
+  </summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultNoInternet.Elapsed" units="ms">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Elapsed time of DNS probes that return PROBE_NO_INTERNET.</summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultNxdomain.Elapsed" units="ms">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Elapsed time of DNS probes that return PROBE_NXDOMAIN.</summary>
+</histogram>
+
+<histogram name="DnsProbe.Probe.ResultUnknown.Elapsed" units="ms">
+  <obsolete>
+    Removed 7/2013.
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Elapsed time of DNS probes that return PROBE_UNKNOWN.</summary>
+</histogram>
+
+<histogram name="DnsProbe.ProbeDuration" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Time between starting and finishing DNS probe.</summary>
+</histogram>
+
+<histogram name="DnsProbe.ProbeResult" enum="DnsProbe.ProbeStatus">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Result of DNS probes sent by the probe service.</summary>
+</histogram>
+
+<histogram name="DocumentActivity.Enabled" enum="RunningMode">
+  <obsolete>
+    Removed 9/2016.
+  </obsolete>
+  <owner>mariakhomenko@chromium.org</owner>
+  <summary>
+    Recorded only for Android. Records on every metrics upload whether document
+    mode is enabled.
+  </summary>
+</histogram>
+
+<histogram name="DocumentScan.ConverterResult" enum="BooleanSuccess">
+  <owner>pstew@chromium.org</owner>
+  <summary>
+    Chrome OS document scan metric that tracks whether a document scan call to
+    the image conversion process suceeded.
+  </summary>
+</histogram>
+
+<histogram name="DocumentScan.ScanResult" enum="BooleanSuccess">
+  <owner>pstew@chromium.org</owner>
+  <summary>
+    Chrome OS document scan metric that tracks whether a document scan call to
+    the sane backend process suceeded.
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.DBLoadedCount">
+  <owner>mattm@chromium.org</owner>
+  <summary>Number of certs loaded from domain bound cert database.</summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.DBLoadTime" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>Time spent loading domain bound cert database.</summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.DBSizeInKB" units="KB">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    The size, on disk, of the domain bound cert database as it is being loaded.
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.GenerateCertTime" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>Time spent generating a domain bound cert.</summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.GetCertTime" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Combined time for GetDomainBoundCert retrieval (both synchronous and
+    asynchronous).
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.GetCertTimeAsync" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Time for asynchronous retrieval (from the GetDomainBoundCert call until
+    completion callback is called).
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.GetCertTimeSync" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>Time for synchronous GetDomainBoundCert cert retrieval.</summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.GetDomainBoundCertResult"
+    enum="DomainBoundCerts.GetCertResult">
+  <owner>mattm@chromium.org</owner>
+  <summary>Result of GetDomainBoundCert function.</summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.KillDatabaseResult" enum="BooleanSuccess">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Whether the domain-bound certs sqlite database was killed succesfully when
+    an unrecoverable error was detected.
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.Support" enum="DomainBoundCerts.Support">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Counts of SSL client sockets broken down by support for Domain Bound
+    Certificates TLS extension.  Counts only connections with full handshakes,
+    resumed sessions are not counted.
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.TaskMaxWaitTime" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Longest time spent by requests waiting for load of domain bound cert
+    database.
+  </summary>
+</histogram>
+
+<histogram name="DomainBoundCerts.TaskWaitCount">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Number of requests that waited for load of domain bound cert database.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.BeaconInterval" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time between successive Domain Reliability beacons being queued in the
+    same context. (Can be arbitrarily long if no beacons are queued in a while.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.BeaconIntervalGlobal" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time between successive Domain Reliability beacons being queued across
+    all contexts. (Can be arbitrarily long if no beacons are queued in a while.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.BeaconReported" enum="BooleanReported">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether a beacon added to a Domain Reliability context was saved to be
+    uploaded to the collector.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.OnBeaconDidEvict" enum="BooleanDidEvict">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether adding a beacon to a Domain Reliability context caused it to evict
+    an older beacon to stay within memory limits.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.ReportedBeaconError" enum="NetErrorCodes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The Chrome error code included in a beacon saved to be uploaded to the
+    collector.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.ReportedBeaconError_HasServerIP"
+    enum="NetErrorCodes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The Chrome error code included in a beacon with a non-empty server_ip field
+    saved to be uploaded to the collector.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.ReportedBeaconUploadDepth" units="levels">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The upload depth included in a beacon saved to be uploaded to the collector.
+    (Zero means the beacon was not about a report upload; n+1 means the beacon
+    was about a report with upload depth n.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.SetConfigRecreatedContext"
+    enum="BooleanCreated">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When Domain Reliability receives a valid NEL configuration header for an
+    origin with Domain Reliability active, whether or not it needed to recreate
+    the origin's context to apply a changed config.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadCollectorIndex">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The index of the collector that a Domain Reliability upload was sent to.
+    (Later collectors are only used when earlier collectors have failed.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadCollectorRetryDelay" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    After an upload to a collector finishes (successfully or not), the delay
+    before the scheduler can send another upload to that collector. (If recent
+    uploads were successful, this will be 0; if not, it will be based on the
+    BackoffEntry and any Retry-After header received.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadDuration" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The elapsed time between starting and finishing a Domain Reliability upload.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadFailover"
+    enum="DomainReliability.BooleanFailover">
+  <obsolete>
+    Deprecated 11/2014; see UploadCollectorIndex
+  </obsolete>
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether a Domain Reliability upload was sent to a collector other than the
+    first one listed in the config. (This only happens when an upload to the
+    first collector fails.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadInterval" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time between successive Domain Reliability uploads being started in the
+    same context. (Can be arbitrarily long if no beacons are reported in a
+    while.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadIntervalGlobal" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time between successive Domain Reliability uploads being started across
+    all contexts. (Can be arbitrarily long if no beacons are reported in a
+    while.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadLatency" units="ms">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The time from the first beacon in a Domain Reliability upload being recorded
+    and that upload completing successfully. (Note that if some beacons are
+    never uploaded successfully, they will not feature in this histogram at
+    all.)
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadNetError" enum="NetErrorCodes">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The network error code (or OK if none) returned by the URLFetcher when a
+    Domain Reliability report is uploaded.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadResponseCode" enum="HttpResponseCode">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    The HTTP response code returned by the Domain Reliability collector when a
+    report is uploaded.
+  </summary>
+</histogram>
+
+<histogram name="DomainReliability.UploadSuccess" enum="BooleanSuccess">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>Whether a Domain Reliability upload succeeded.</summary>
+</histogram>
+
+<histogram name="DomDistiller.BarCloseButtonUsage" enum="BooleanPanelWasOpen">
+  <owner>mdjones@chromium.org</owner>
+  <summary>
+    Records if the close button was used before or after opening and viewing
+    Reader Mode content.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.DistillabilityRejection" enum="DistillRejection">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    The reason to reject distillability at PageDistillableAfterParsing time.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.DistillabilityScoreNMF.Negative" units="score">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Score of distillability from AdaBoost model, non-mobile-friendly only. The
+    score shown here is multiplied by 100.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.DistillabilityScoreNMF.Positive" units="score">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Score of distillability from AdaBoost model, non-mobile-friendly only. The
+    score shown here is multiplied by 100.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.DistillationQuality" enum="BooleanSuccess">
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    Whether the perceived quality of the distillation of a web page was good.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.LongArticleScoreNMF.Negative" units="score">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Score of long article from AdaBoost model, distillable and
+    non-mobile-friendly only. The score shown here is multiplied by 100.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.LongArticleScoreNMF.Positive" units="score">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Score of long article from AdaBoost model, distillable and
+    non-mobile-friendly only. The score shown here is multiplied by 100.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.PageDistillable" enum="DistillableType">
+  <obsolete>
+    PageDistillableAfterLoading and PageDistillableAfterParsing provide more
+    details since 02/2016.
+  </obsolete>
+  <owner>cjhopman@chromium.org</owner>
+  <summary>
+    Records the &quot;Distillable Type&quot; (not distillable, mobile-friendly
+    distillable, non-mobile-friendly distillable, etc) for each analyzed page.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.PageDistillableAfterLoading"
+    enum="DistillableType2">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Records the &quot;Distillable Type&quot; (mobile-friendly not distillable,
+    mobile-friendly distillable, non-mobile-friendly not distillable,
+    non-mobile-friendly distillable) for each analyzed page after loading.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.PageDistillableAfterParsing"
+    enum="DistillableType2">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Records the &quot;Distillable Type&quot; (mobile-friendly not distillable,
+    mobile-friendly distillable, non-mobile-friendly not distillable,
+    non-mobile-friendly distillable) for each analyzed page after parsing.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.PageDistilledType" enum="DistillableType">
+  <obsolete>
+    Not collected anymore.
+  </obsolete>
+  <owner>cjhopman@chromium.org</owner>
+  <summary>
+    Records the &quot;Distillable Type&quot; (not distillable, mobile-friendly
+    distillable, non-mobile-friendly distillable, etc) for each distilled page.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.PageHasDistilledData"
+    enum="BooleanHasDistilledData">
+  <owner>kuan@chromium.org</owner>
+  <summary>Records whether a page has distilled data.</summary>
+</histogram>
+
+<histogram name="DomDistiller.ReaderShownForPageLoad" enum="Boolean">
+  <owner>mdjones@chromium.org</owner>
+  <summary>
+    Records if the panel became visible at any point after a page was navigated.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Statistics.FirstPageWordCount" units="words">
+  <owner>mdjones@chromium.org</owner>
+  <summary>
+    Records the number of words in a distilled page. This only records the first
+    page of a multi-page article.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Statistics.WordCount" units="words">
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    Records the number of words in a distilled page. For articles with multiple
+    pages, each page is counted separately.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.ArticleProcessing" units="ms">
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Time spent in DomDistiller's identification of text content.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.DistillationTotal" units="ms">
+  <owner>yfriedman@chromium.org</owner>
+  <summary>Complete time spent in DomDistiller's processing of a page.</summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.DistillPage" units="ms">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Time spent in DistillPageImpl(), mostly ExecuteJavaScript(), including
+    compilation and execution.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.DocumentConstruction" units="ms">
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Time spent in creating DomDistiller's internal representation of the HTML
+    document.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.Formatting" units="ms">
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Time spent in DomDistiller's final processing of article content/formatting.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.MarkupParsing" units="ms">
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Time spent in DomDistiller's processing of article metadata.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.RunJavaScript" units="ms">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Time spent in ExecuteJavaScript() in DomDistiller. It includes JavaScript
+    code transmission through IPC, parsing, compilation, execution, and
+    returning the JSON back through IPC.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.SwipeToPaint" units="ms">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Records the time from a swipe-up gesture on ReaderModePanel to the first
+    paint of the empty template.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.ViewerLoading" units="ms">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    Records the time from the Reader Mode panel opening to the viewer loaded.
+  </summary>
+</histogram>
+
+<histogram name="DomDistiller.Time.ViewingReaderModePanel" units="ms">
+  <owner>mdjones@chromium.org</owner>
+  <summary>
+    Records the amount of time between the Reader Mode panel opening and it
+    closing or returning to the peeking state.
+  </summary>
+</histogram>
+
+<histogram name="DOMStorage.clear" units="ms">
+  <obsolete>
+    Deprecated 2012.
+  </obsolete>
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Duration to execute localStorage.clear() or sessionStorage.clear().
+  </summary>
+</histogram>
+
+<histogram name="DOMStorage.getItem" units="ms">
+  <obsolete>
+    Deprecated 2012.
+  </obsolete>
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Duration to execute localStorage.getItem() or sessionStorage.getItem().
+  </summary>
+</histogram>
+
+<histogram name="DOMStorage.key" units="ms">
+  <obsolete>
+    Deprecated 2012.
+  </obsolete>
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Duration to execute localStorage.key() or sessionStorage.key().
+  </summary>
+</histogram>
+
+<histogram name="DOMStorage.length" units="ms">
+  <obsolete>
+    Deprecated 2012.
+  </obsolete>
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Duration to execute localStorage.length() or sessionStorage.length().
+  </summary>
+</histogram>
+
+<histogram name="DOMStorage.removeItem" units="ms">
+  <obsolete>
+    Deprecated 2012.
+  </obsolete>
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Duration to execute localStorage.removeItem() or
+    sessionStorage.removeItem().
+  </summary>
+</histogram>
+
+<histogram name="DOMStorage.setItem" units="ms">
+  <obsolete>
+    Deprecated 2012.
+  </obsolete>
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Duration to execute localStorage.setItem() or sessionStorage.setItem().
+  </summary>
+</histogram>
+
+<histogram name="Download.AcceptRangesBytes.KBytes" units="KB">
+  <owner>asanka@chromium.org</owner>
+  <summary>The length of downloads for serves that accept byte ranges.</summary>
+</histogram>
+
+<histogram name="Download.AcceptRangesMissingOrInvalid.KBytes" units="KB">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The length of downloads for serves that do not specify whether the accept
+    ranges, or have invalid ranges specified.
+  </summary>
+</histogram>
+
+<histogram name="Download.AcceptRangesNone.KBytes" units="KB">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The length of downloads for serves that do not accept ranges.
+  </summary>
+</histogram>
+
+<histogram name="Download.ActualBandwidth" units="Bytes/second">
+  <owner>asanka@chromium.org</owner>
+  <summary>The actual bandwidth (per read) of a download.</summary>
+</histogram>
+
+<histogram name="Download.ApiFunctions" enum="DownloadFunctions">
+  <owner>asanka@chromium.org</owner>
+  <summary>Downloads extension API function calls.</summary>
+</histogram>
+
+<histogram name="Download.AttachmentServices.Duration" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Time taken to invoke IAttachmentExecute::Save() excluding the time taken to
+    instantiate CLSID_AttachmentServices.
+  </summary>
+</histogram>
+
+<histogram name="Download.AttachmentServices.Result"
+    enum="AttachmentServicesResult">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Result of invoking (or attempting to invoke) Windows Attachment Services API
+    via IAttachmentExecute::Save().
+  </summary>
+</histogram>
+
+<histogram name="Download.BandwidthDiskBytesPerSecond">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Disk bandwidth (defined as total bytes divided by the amount of time blocked
+    on write or close on the file descriptor) seen for a single download.
+  </summary>
+</histogram>
+
+<histogram name="Download.BandwidthOverallBytesPerSecond">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Overall bandwidth seen for the download.  Note that this is measured at the
+    point at which the file is written, and so will not take into account the
+    time costs of activities that occur after file write is completed (e.g. safe
+    browsing scanning).
+  </summary>
+</histogram>
+
+<histogram name="Download.BandwidthUsed" units="%">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The percentage of the potential bandwidth actually used (per read) of a
+    download.  An entry of 100% implies that Chrome was the limiting factor in
+    download speed.
+  </summary>
+</histogram>
+
+<histogram name="Download.ClearAllSize">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of downloads in history at the time it is cleared.
+  </summary>
+</histogram>
+
+<histogram name="Download.ContentDisposition" enum="DownloadContentDisposition">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Content-Disposition header features. The presence of a Content-Disposition
+    header, use of 'filename' and 'filename*' parameters, and string encoding
+    schemes are counted for each unthrottled download. The total number
+    downloads is Download.Counts[5] (Initiated and Unthrottled).
+  </summary>
+</histogram>
+
+<histogram name="Download.ContentImageType" enum="DownloadImageType">
+  <owner>asanka@chromium.org</owner>
+  <summary>Types of images that are downloaded.</summary>
+</histogram>
+
+<histogram name="Download.ContentType" enum="DownloadContentType">
+  <owner>asanka@chromium.org</owner>
+  <summary>Content types that are downloaded.</summary>
+</histogram>
+
+<histogram name="Download.Counts" enum="DownloadCountType">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Various individual counts in the download system; see DownloadCountType for
+    details.
+  </summary>
+</histogram>
+
+<histogram name="Download.CountsChrome" enum="ChromeDownloadCountType">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Various individual counts in the download system, for example the number of
+    downloads blocked by throttling from the DownloadRequestLimiter.
+  </summary>
+</histogram>
+
+<histogram name="Download.DangerousDownloadValidated"
+    enum="DownloadItem.DangerType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User chose to save a download which was marked dangerous. Grouped by the
+    type of danger.
+  </summary>
+</histogram>
+
+<histogram name="Download.DangerousFile.DangerousDownloadValidated"
+    enum="DownloadItem.DangerousFileType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User chose to save a download which was marked DANGEROUS_FILE. Grouped by
+    the type of file.
+  </summary>
+</histogram>
+
+<histogram name="Download.DangerousFile.Discard"
+    enum="DownloadItem.DangerousFileType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    A download which was marked DANGEROUS_FILE was discarded without the user
+    directly choosing, because the browser was closed.  Grouped by the file
+    extension.
+  </summary>
+</histogram>
+
+<histogram name="Download.DangerousFile.Reason" enum="DangerousFile.Reason">
+  <owner>jialiul@chromium.org</owner>
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Indicates why a download is marked as DANGEROUS_FILE. Grouped by reason,
+    such as Safe Browsing (SB) service is not available, and SB returns UNKOWN
+    or SAFE verdict. The sum of all reasons should roughly equal to the
+    DANGEROUS_FILE bucket count in Download.DownloadWarningShown.
+  </summary>
+</histogram>
+
+<histogram name="Download.DangerousFile.UserDiscard"
+    enum="DownloadItem.DangerousFileType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User chose to discard a download which was marked DANGEROUS_FILE. Grouped by
+    the file extension.
+  </summary>
+</histogram>
+
+<histogram name="Download.Database.CreateDownloadDuration" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>Time taken to create a single download in the history DB.</summary>
+</histogram>
+
+<histogram name="Download.Database.QueryDownloadDuration" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>Time taken to query all downloads from history DB.</summary>
+</histogram>
+
+<histogram name="Download.Database.UpdateDownloadDuration" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>Time taken to update a single download in the history DB.</summary>
+</histogram>
+
+<histogram name="Download.DatabaseRecordDropped"
+    enum="DownloadDatabaseRecordDroppedType">
+  <owner>asanka@chromium.org</owner>
+  <summary>Reason for dropping a record read in from the DB.</summary>
+</histogram>
+
+<histogram name="Download.DatabaseRemoveDownloadsCount">
+  <owner>asanka@chromium.org</owner>
+  <summary>Number of downloads removed from the history at once.</summary>
+</histogram>
+
+<histogram name="Download.DatabaseRemoveDownloadsTime" units="microseconds">
+  <owner>asanka@chromium.org</owner>
+  <summary>How long it took to delete some downloads from history.</summary>
+</histogram>
+
+<histogram name="Download.DatabaseRemoveDownloadsTimePerRecord"
+    units="nanoseconds/record">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    How long it took to delete some downloads from history, per download.
+  </summary>
+</histogram>
+
+<histogram name="Download.Discard" enum="DownloadItem.DangerType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    A download which was marked dangerous was discarded without the user
+    directly choosing, because the browser was closed.  Grouped by the type of
+    danger.
+  </summary>
+</histogram>
+
+<histogram name="Download.DiskBandwidthUsedPercentage" units="%">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The percentage of the available disk bandwidth that was used by the
+    download.  100% indicates that the disk bandwidth was the limiting factor
+    for the download.
+  </summary>
+</histogram>
+
+<histogram name="Download.DOMEvent" enum="DownloadDOMEvent">
+  <owner>asanka@chromium.org</owner>
+  <summary>User actions in chrome://downloads</summary>
+</histogram>
+
+<histogram name="Download.DownloadDangerPrompt"
+    enum="SBClientDownloadExtensions">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    Records when user is shown the download danger prompt while attempting to
+    recover a blocked download from chrome://downloads, grouped by the type of
+    file.
+  </summary>
+</histogram>
+
+<histogram name="Download.DownloadSize" units="KB">
+  <owner>asanka@chromium.org</owner>
+  <summary>The size of successfully completed downloads.</summary>
+</histogram>
+
+<histogram name="Download.DownloadWarningShown" enum="DownloadItem.DangerType">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    A download warning was shown in the shelf. Note that some downloads may not
+    be shown on the shelf, e.g., if chrome://downloads is already open when the
+    download completes, or if an extension is using the downloads API. Grouped
+    by the type of danger.
+  </summary>
+</histogram>
+
+<histogram name="Download.FeedbackDialogEnabled" enum="BooleanEnabled">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Whether the user enables dangerous download feedback reporting after viewing
+    the opt-in dialog.
+  </summary>
+</histogram>
+
+<histogram name="Download.FilePickerResult" enum="DownloadFilePickerResult">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    How the user interacts with the file chooser when doing a &quot;Save
+    As&quot; for non-full-page saves.
+  </summary>
+</histogram>
+
+<histogram name="Download.FileThreadBlockedTime">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The amount of time in milliseconds the file thread blocks for each set of
+    buffers drained from the incoming pipe (ms).
+  </summary>
+</histogram>
+
+<histogram name="Download.FileThreadReceiveBuffers">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of buffers in a call to DownloadManager::UpdateDownload.
+  </summary>
+</histogram>
+
+<histogram name="Download.FirstOpenTime" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The time between a download completing and the file being opened for the
+    first time.
+  </summary>
+</histogram>
+
+<histogram name="Download.HistorySize">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of items in the History database, at the time a new download is
+    recorded.
+  </summary>
+</histogram>
+
+<histogram name="Download.HistorySize2">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of items in the History database, at the time a new download is
+    recorded. Higher maximum, more buckets than Download.HistorySize.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedAtEndError" enum="NetErrorCodes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Positive net error code that caused a download to be interrupted at the
+    *end* of a download (when the number of bytes is known). This is only
+    triggered when the total content size is known before any bytes are
+    transferred, such as when a Content-Length header is supplied.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedAtEndReason" enum="InterruptReason">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The reason that a download was interrupted at the *end* of a download (when
+    the number of bytes is known). This is only triggered when the total content
+    size is known before any bytes are transferred, such as when a
+    Content-Length header is supplied.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedError" enum="NetErrorCodes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Positive net error code that caused a download to be interrupted.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedOverrunBytes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The excessive number of bytes which have been received at the time that a
+    download is interrupted. This is only triggered when the total content size
+    is known before any bytes are transferred, such as when a Content-Length
+    header is supplied.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedReason" enum="InterruptReason">
+  <owner>asanka@chromium.org</owner>
+  <summary>The reason that a download was interrupted.</summary>
+</histogram>
+
+<histogram name="Download.InterruptedReceivedSizeK" units="KB">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of kilobytes received for a download at the time it is
+    interrupted.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedTotalSizeK" units="KB">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The reported total size in kilobytes for a download at the time it is
+    interrupted. This is essentially the size reported by the Content-Length
+    header. If no size is specified up-front, it is not recorded in the
+    histogram. For example, a download transferred with chunked encoding will
+    not be recorded.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedUnderrunBytes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The total number of bytes minus the received number of bytes at the time
+    that a download is interrupted. This is only triggered when the total
+    content size is known before any bytes are transferred, such as when a
+    Content-Length header is supplied.
+  </summary>
+</histogram>
+
+<histogram name="Download.InterruptedUnknownSize"
+    enum="DownloadInterruptedUnknownSizeType">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    True if the size of an interrupted download is unknown, false if it is
+    known.
+  </summary>
+</histogram>
+
+<histogram name="Download.IOSDownloadPassKitResult"
+    enum="DownloadPassKitResult">
+  <owner>gchatz@chromium.org</owner>
+  <summary>
+    Result when a user attempts to download a PassKit file on iOS with
+    WKWebView.
+  </summary>
+</histogram>
+
+<histogram name="Download.MaliciousDownloadClassified"
+    enum="DownloadItem.DangerType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    A download has been marked as malicious. Grouped by the type of danger. Each
+    download can only be recorded once; it will be labeled with the first type
+    of danger spotted.
+  </summary>
+</histogram>
+
+<histogram name="Download.MapErrorNetworkFailed" enum="NetErrorCodes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Network error that produced a DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED
+    result in DownloadResourceHandler::OnResponseCompleted().
+  </summary>
+</histogram>
+
+<histogram name="Download.MapWinShErrorAccessDenied"
+    enum="SpecialShFileOperationCodes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_ACCESS_DENIED result
+    in MapShFileOperationCodes().
+  </summary>
+</histogram>
+
+<histogram name="Download.MapWinShErrorFileFailed"
+    enum="SpecialShFileOperationCodes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_FAILED result
+    in MapShFileOperationCodes().
+  </summary>
+</histogram>
+
+<histogram name="Download.MapWinShErrorTransientError"
+    enum="SpecialShFileOperationCodes">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Windows error that produced a DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR
+    result in MapShFileOperationCodes().
+  </summary>
+</histogram>
+
+<histogram name="Download.OnChanged">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Percentage of DownloadItem::Observer::OnDownloadUpdated events that
+    signified a change in the extension API representation of the download.
+  </summary>
+</histogram>
+
+<histogram name="Download.OpenMethod" enum="DownloadOpenMethod">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Invocation count for methods of opening a download. For some file types,
+    Chrome defaults to opening the file in the browser instead of invoking the
+    system handler. The user has the option of overriding this behavior.
+  </summary>
+</histogram>
+
+<histogram name="Download.OpensOutstanding">
+  <owner>asanka@chromium.org</owner>
+  <summary>The number of unopened downloads, when one is opened.</summary>
+</histogram>
+
+<histogram name="Download.OpenTime" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The time between a download completing and the file being opened.
+  </summary>
+</histogram>
+
+<histogram name="Download.OriginStateOnFullResumption"
+    enum="DownloadOriginStateOnResumption">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Changes observed when a response is received for a full download resumption
+    request.
+  </summary>
+</histogram>
+
+<histogram name="Download.OriginStateOnPartialResumption"
+    enum="DownloadOriginStateOnResumption">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Changes observed when a response is received for a partial (byte-range)
+    download resumption request.
+  </summary>
+</histogram>
+
+<histogram name="Download.PotentialBandwidth" units="Bytes/second">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The maximum bandwidth (per read) that Chrome could have provided for the
+    download.  If the actual bandwidth equals the potential bandwidth, that
+    means that Chrome was the limiting factor for download bandwidth.
+  </summary>
+</histogram>
+
+<histogram name="Download.ResourceHandlerBlockedPercentage" units="%">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The percentage of the lifetime of the DownloadResourceHandler for which it
+    was blocked by downstream flow control.  0% indicates that the network
+    bandwidth was the limiting factor for the download.
+  </summary>
+</histogram>
+
+<histogram name="Download.SavePackage" enum="DownloadSavePackageEvent">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Events (e.g. Started, Cancelled, Finished, Write to Completed file, Write to
+    Failed file) occuring within the state machine of a SavePackage operation.
+  </summary>
+</histogram>
+
+<histogram name="Download.ShelfInProgressSizeOnAutoClose">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of download items in progress on the shelf when it closes
+    automatically.
+  </summary>
+</histogram>
+
+<histogram name="Download.ShelfInProgressSizeOnUserClose">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of download items in progress on the shelf when the user closes
+    it.
+  </summary>
+</histogram>
+
+<histogram name="Download.ShelfSizeOnAutoClose">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of download items on the shelf when it closes automatically.
+  </summary>
+</histogram>
+
+<histogram name="Download.ShelfSizeOnUserClose">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of download items on the shelf when the user closes it.
+  </summary>
+</histogram>
+
+<histogram name="Download.ShowDangerousDownloadConfirmationPrompt"
+    enum="DownloadItem.DangerType">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    User saw the confirm prompt to save a download which was marked dangerous.
+    Grouped by the type of danger.
+  </summary>
+</histogram>
+
+<histogram name="Download.Sources" enum="DownloadSource">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The initiation source (if initiated within the content layer of chrome) for
+    a download.
+  </summary>
+</histogram>
+
+<histogram name="Download.SourcesChrome" enum="ChromeDownloadSource">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The initiation source (if initiated within the above-content layer of
+    chrome) for a download.
+  </summary>
+</histogram>
+
+<histogram name="Download.TargetConnectionSecurity"
+    enum="DownloadConnectionSecurity">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    The connection security state of a download, indicating whether its final
+    resolved url and the redirects before final url are secure.
+  </summary>
+</histogram>
+
+<histogram name="Download.Time" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>Time between the start of a download and its completion.</summary>
+</histogram>
+
+<histogram name="Download.TimeToRenameFailureAfterInitialFailure" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Time elapsed until a retried download file rename operation failed for the
+    last time after the initial rename failed.
+  </summary>
+</histogram>
+
+<histogram name="Download.TimeToRenameSuccessAfterInitialFailure" units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Time elapsed until a retried download file rename operation succeeded after
+    the initial rename failed.
+  </summary>
+</histogram>
+
+<histogram name="Download.UserDiscard" enum="DownloadItem.DangerType">
+  <owner>asanka@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User chose to discard a download which was marked dangerous.  Grouped by the
+    type of danger.
+  </summary>
+</histogram>
+
+<histogram name="Download.WriteLoopCount">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    The number of iterations for the write loop in BaseFile::AppendDataTofile().
+  </summary>
+</histogram>
+
+<histogram name="Download.WriteSize" units="Bytes">
+  <owner>asanka@chromium.org</owner>
+  <summary>The write size for calls to BaseFile::AppendDataTofile().</summary>
+</histogram>
+
+<histogram name="Drive.BatchUploadResponseCode" enum="HttpResponseCode">
+  <owner>hirono@chromium.org</owner>
+  <summary>Respose code of batch upload request.</summary>
+</histogram>
+
+<histogram name="Drive.CacheDBOpenStatus" enum="DriveCacheDBOpenStatus">
+  <obsolete>
+    Deprecated 8/2013.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <summary>Status of drive cache metadata database open.</summary>
+</histogram>
+
+<histogram name="Drive.DirectoryFeedLoadTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Time spent to load the list of files in a single directory from Google Drive
+    server.
+  </summary>
+</histogram>
+
+<histogram name="Drive.DownloadFromDriveFileSize" units="KB">
+  <owner>mtomasz@chromium.org</owner>
+  <summary>
+    Sizes of files being downloaded from Drive. Temporary histogram for
+    gathering data for http://crbug.com/229650.
+  </summary>
+</histogram>
+
+<histogram name="Drive.EntireFeedLoadTime" units="microseconds">
+  <obsolete>
+    Deprecated 12/2013 due to the UMA stat bucket layout change. We'll use
+    Drive.FullFeedLoadTime instead.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Time spent to load the entire file system information from the server
+  </summary>
+</histogram>
+
+<histogram name="Drive.EntryKind" enum="DriveEntryKind">
+  <obsolete>
+    Deprecated 10/2012.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Provides breakdown of specific formats for hosted documents. Recorded when
+    feed is loaded from the server.
+  </summary>
+</histogram>
+
+<histogram name="Drive.FileFormat" enum="DriveFileFormat">
+  <obsolete>
+    Deprecated 10/2012.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Provides breakdown of specific file formats for regular files. Recorded when
+    feed is loaded from the server.
+  </summary>
+</histogram>
+
+<histogram name="Drive.FilesListRequestRunner.ApiErrorCode"
+    enum="DriveApiErrorCode">
+  <owner>mtomasz@chromium.org</owner>
+  <summary>
+    Error codes returned by the Drive API for files list requests executed via
+    the FilesListRequestRunner class.
+  </summary>
+</histogram>
+
+<histogram name="Drive.FilesListRequestRunner.MaxResults">
+  <owner>mtomasz@chromium.org</owner>
+  <summary>
+    Maximum number of results for each files list request using the Drive API.
+  </summary>
+</histogram>
+
+<histogram name="Drive.FullFeedLoadTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Time spent to load the entire file system information from the server
+  </summary>
+</histogram>
+
+<histogram name="Drive.InitialFeedLoadTime" units="microseconds">
+  <obsolete>
+    Deperecated 12/2013 since it did not record meaningful information.
+    Drive.DirectoryFeedLoadTime should be checked for measuring the time until
+    the user sees the first response of file lists.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Time spent to load the initial part of the file system information from the
+    server
+  </summary>
+</histogram>
+
+<histogram name="Drive.MetadataDBInitResult" enum="DriveMetadataDBInitStatus">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Result of drive resource metadata database initialization.</summary>
+</histogram>
+
+<histogram name="Drive.MetadataDBOpenExistingResult"
+    enum="DriveMetadataDBInitStatus">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Result of attempt to open existing drive resource metadata database.
+  </summary>
+</histogram>
+
+<histogram name="Drive.MetadataDBValidityCheckFailureReason"
+    enum="DriveMetadataDBValidityCheckFailureReason">
+  <owner>bengold@chromium.org</owner>
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Reason of drive resource metadata database validity check failure. Recorded
+    when the validity check fails during Drive metadata initialization triggered
+    by profile initialization.
+  </summary>
+</histogram>
+
+<histogram name="Drive.MetadataDBVersionBeforeUpgradeCheck">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Version number of drive resource metadata DB found on the disk before
+    checking whether it should be upgraded. Recorded during Drive metadata
+    initialization triggered by profile initialization.
+  </summary>
+</histogram>
+
+<histogram name="Drive.NumberOfCacheFilesRecoveredAfterDBCorruption">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Number of files recovered from Drive cache directory. Recorded when file
+    recovery takes place after metadata DB corruption is found during metadata
+    DB initialization.
+  </summary>
+</histogram>
+
+<histogram name="Drive.NumberOfHostedDocuments">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
+    is first accessed.
+  </summary>
+</histogram>
+
+<histogram name="Drive.NumberOfRegularFiles">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Number of regualr files on Drive.  Logged when Drive is first accessed.
+  </summary>
+</histogram>
+
+<histogram name="Drive.NumberOfTotalFiles">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Number of total files (regualr files + hosted documents) on Drive.  Logged
+    when Drive is first accessed.
+  </summary>
+</histogram>
+
+<histogram name="Drive.PushNotificationInitiallyEnabled" enum="BooleanEnabled">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Tracks whether the push notification is initially enabled for Drive.
+    Recorded when the first notification is processed. Notification is emulated
+    by polling if the push notication is disabled.
+  </summary>
+</histogram>
+
+<histogram name="Drive.PushNotificationRegistered" enum="BooleanRegistered">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Tracks whether the push notification request is registered correctly for
+    Drive. Recorded when the push notification manager is initialized.
+  </summary>
+</histogram>
+
+<histogram name="Drive.SearchMetadataTime" units="microseconds">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Time spent to perform an incremental search for auto completion of files on
+    Drive. This time is collected for every partial query the user types for
+    auto completion.  For instance, if the user types &quot;faq&quot;,
+    incremental searches are performed for &quot;f&quot;, &quot;fa&quot;, and
+    &quot;faq&quot; respectively.
+  </summary>
+</histogram>
+
+<histogram name="Drive.TotalFileCountInBatchUpload">
+  <owner>hirono@chromium.org</owner>
+  <summary>Total file count contained in a drive batch upload request.</summary>
+</histogram>
+
+<histogram name="Drive.TotalFileSizeInBatchUpload" units="KB">
+  <owner>hirono@chromium.org</owner>
+  <summary>Total file size contained in a drive batch upload request.</summary>
+</histogram>
+
+<histogram name="Drive.TransferBlockedOnJobs" units="jobs">
+  <owner>mtomasz@chromium.org</owner>
+  <summary>
+    Number of jobs which have to be completed before a newly added download or
+    download from or to Drive is requested. Temporary histogram for gathering
+    data for http://crbug.com/229650.
+  </summary>
+</histogram>
+
+<histogram name="Drive.UploadProtocol" enum="DriveUploadProtocol">
+  <owner>hirono@chromium.org</owner>
+  <summary>
+    Upload protocol for each file. e.g. Batch upload including 5 files triggers
+    the metric 5 times.
+  </summary>
+</histogram>
+
+<histogram name="Drive.UploadToDriveFileSize" units="KB">
+  <owner>mtomasz@chromium.org</owner>
+  <summary>
+    Sizes of files being uploaded to Drive. Temporary histogram for gathering
+    data for http://crbug.com/229650.
+  </summary>
+</histogram>
+
+<histogram name="DriveOffline.CrosAutoEnableOutcome"
+    enum="CrosEnableDriveOfflineOutcome">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Outcome of enabling Google Drive offline mode automatically when a user
+    first logs into a Chrome OS device. This process involves opening a hidden
+    web page in the context of the Google Drive hosted app to perform the
+    initialization of offline mode.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthenticationSuccess" enum="BooleanSuccess">
+  <owner>joshwoodward@google.com</owner>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    When Easy Unlock attempts to authenticate the secure connection between a
+    Chromebook (or other Chrome device) and an Android phone, whether the
+    authentication succeeded.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthEvent.DidUserManuallyUnlockPhone"
+    enum="EasyUnlockDidUserManuallyUnlockPhone">
+  <owner>isherman@google.com</owner>
+  <owner>xiaowenx@google.com</owner>
+  <owner>xiyuan@google.com</owner>
+  <summary>
+    Upon a successful Smart Lock unlock or signin, records whether the user's
+    phone was locked during any point while the lock screen was up. This can be
+    used to get a sense for whether users are using Smart Lock for Chromebook
+    without something like Smart Lock for Android to keep their phones unlocked.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthEvent.SignIn" enum="EasyUnlockAuthEvent">
+  <owner>isherman@google.com</owner>
+  <owner>xiaowenx@google.com</owner>
+  <owner>xiyuan@google.com</owner>
+  <summary>
+    Measures the use of Smart Lock on the sign-in screen: records whether a
+    Smart Lock login succeeded or failed; or if a password fallback was used,
+    the reason why. Recorded upon a login attempt for users who have the Smart
+    Lock feature enabled.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthEvent.SignIn.Duration" units="ms">
+  <owner>isherman@google.com</owner>
+  <owner>tengs@google.com</owner>
+  <owner>xiaowenx@google.com</owner>
+  <summary>
+    Measures the time elapsed between the user focusing their user pod and
+    signing in using Smart Lock.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthEvent.Unlock" enum="EasyUnlockAuthEvent">
+  <owner>isherman@google.com</owner>
+  <owner>xiaowenx@google.com</owner>
+  <owner>xiyuan@google.com</owner>
+  <summary>
+    Measures the use of Smart Lock on the lock screen: records whether a Smart
+    Lock unlock attempt succeeded or failed; or if a password fallback was used,
+    the reason why. Recorded upon an unlock attempt for users who have the Smart
+    Lock feature enabled.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthEvent.Unlock.Duration" units="ms">
+  <owner>isherman@google.com</owner>
+  <owner>tengs@google.com</owner>
+  <owner>xiaowenx@google.com</owner>
+  <summary>
+    Measures the time elapsed between the lock screen being shown and the user
+    unlocking the device using Smart Lock. The lock screen is typically shown
+    when the user opens their Chromebook's lid (or otherwise wakes the
+    computer), but can also be shown when the user manually locks the device.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.AuthProximity.RemoteDeviceModelHash"
+    enum="EasyUnlockDeviceModelHash">
+  <owner>tengs@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    The hash of the phone model used to successfully sign in or unlock using
+    Smart Lock.
+  </summary>
+  <details>
+    This hash is calculated by taking the first 4 bytes of the MD5 hash of the
+    device model.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.AuthProximity.RollingRssi" units="dBm">
+  <owner>tengs@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Measures the exponentially weighted rolling average of the received signal
+    strength indicator (RSSI) of the phone when the user successfully unlocks or
+    signs in using Smart Lock.
+  </summary>
+  <details>
+    The exponentially weighted averaging formula is:
+
+      rollingRssi = (1 - weight) * rollingRssi + weight * currentRssi;
+
+    RSSI readings are inherently noisy, so this averaging gives a smoothed RSSI
+    value to work with as a heuristic for proximity.
+
+    If no RSSI was read, then a sentinel value of 127 will be recorded.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.AuthProximity.TimeSinceLastZeroRssi" units="ms">
+  <owner>tengs@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Measures the time delta in milliseconds since the last zero RSSI value was
+    read to when the user successfully unlocks or signs in using Smart Lock.
+  </summary>
+  <details>
+    A zero RSSI value is special because both Bluetooth devices in a connection
+    attempt to maintain by adjusting their transmit power levels. This time
+    delta can be used as a possible heuristic to determine that the phone is
+    close to the local device.
+
+    If no RSSI was read, then an overflow value will be recorded.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.AuthProximity.TransmitPowerDelta" units="dBm">
+  <owner>tengs@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Measures the difference between the current transmit power and the maximum
+    transmit power of the local device when the user successfully unlocks or
+    signs in using Smart Lock.
+  </summary>
+  <details>
+    Devices connected using classic Bluetooth adjust their transmit power
+    dynamically to optimize power and signal strength. The difference between
+    the current transmit power and maximum transmit power can be used as a
+    heurstic to determine if the phone is close to the local device.
+
+    According to the Bluetooth specs, there are three classes of devices, with a
+    maximum transmit power of 20, 4, and 0 dBm respectively.
+
+    If no transmit power was read, then a sentinel value of 127 will be
+    recorded.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.BluetoothAvailability"
+    enum="EasyUnlockBluetoothType">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Reports the type of Bluetooth adapter present in the device.
+  </summary>
+  <details>
+    Statistics about what Bluetooth capabilities are available will determine
+    how the EasyUnlock feature gets developed and deployed across platforms.
+
+    This value is logged only once during the lifetime of the Chrome process,
+    shortly after it starts up.  If a Bluetooth USB adapter is inserted after
+    that point, the change will not be registered until Chrome restarts.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.ClickedButton" enum="EasyUnlockButton">
+  <owner>joshwoodward@google.com</owner>
+  <owner>tbarzic@chromium.org</owner>
+  <summary>Button clicked in EasyUnlock app during setup process.</summary>
+</histogram>
+
+<histogram name="EasyUnlock.NotificationEvent"
+    enum="EasyUnlockNotificationEvent">
+  <obsolete>
+    Deprecated 02/2015. Replaced by EasyUnlock.Setup.PromoNotificationEvent.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <owner>tbarzic@chromium.org</owner>
+  <summary>
+    Tracks events related to notifications used by EasyUnlock feature. For
+    example a specific EasyUnlock notification being shown or clicked.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.RemoteLockScreenState"
+    enum="EasyUnlockRemoteLockScreenState">
+  <owner>joshwoodward@google.com</owner>
+  <owner>tengs@chromium.org</owner>
+  <owner>isherman@chromium.org</owner>
+  <summary>
+    Whether a lock screen and a trust agent are enabled on the remote device
+    (Android phone) for Easy Unlock. Recorded once per status update message
+    from the remote device. A status update message is expected to be sent once
+    when the secure channel between the local and the remote device is
+    established, and also each time the user-presence status changes on the
+    remote side.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.Setup.Devices.Count.Eligible">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    The number of eligible devices that the CryptAuth server returns during the
+    Smart Lock setup flow.
+  </summary>
+  <details>
+    Note that a single user might report multiple values, for example if they
+    try to complete the setup flow with a device in airplane mode, and then try
+    again taking the device out of airplane mode.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.Setup.Devices.Count.Ineligible">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    The number of ineligible devices that the CryptAuth server returns during
+    the Smart Lock setup flow.
+  </summary>
+  <details>
+    Note that a single user might report multiple values, for example if they
+    try to complete the setup flow with a device in airplane mode, and then try
+    again taking the device out of airplane mode.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.Setup.Devices.HasSecureScreenLock"
+    enum="EasyUnlockHasSecureScreenLock">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Whether the user's phone has a secure screen lock installed. Recorded during
+    Smart Lock setup, when the user's phone first connects to the Chromebook.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.Setup.Devices.HasTrustAgentEnabled"
+    enum="EasyUnlockHasTrustAgentEnabled">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Whether the user's phone has a trust agent -- e.g. Smart Lock for Android --
+    enabled. Recorded during Smart Lock (for Chrome) setup, when the user's
+    phone first connects to the Chromebook.
+  </summary>
+  <details>
+    Note that this histogram tracks whether the setting under Settings ~&gt;
+    Security ~&gt; Trust agents ~&gt; Smart Lock (Google) (or any other trust
+    agent) is enabled. The Smart Lock trust agent is enabled by default for
+    users who have ascure lock screen. This metric does _not_ measure whether
+    users have any Smart Lock trustlets enabled.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.Setup.Devices.IneligibilityReason"
+    enum="EasyUnlockDeviceIneligibilityReason">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Records the most actionable reason why none of a user's devices were
+    eligible as unlock keys for Smart Lock. This is recorded during the Smart
+    Lock setup flow, only if the CryptAuth server returns no eligible devices
+    for the user.
+  </summary>
+  <details>
+    To be precise, this metric tracks the _least_ actionable _reason_ why the
+    _most_ actionable _device_ is not eligible as an unlock key. For example,
+    suppose that the user has 10 ineligible devices returned. This metric tries
+    to identify the most likely candidate device for use as a Smart Lock key,
+    and then records the most confounding reason why that device is still not
+    eligible to be used as an unlock key.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.Setup.PromoNotificationEvent"
+    enum="EasyUnlockPromoNotificationEvent">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Measures user interactions with the Smart Lock promo notification.
+  </summary>
+  <details>
+    Due to technical limitations of the implementation, it is hard to track
+    precisely which users opened the setup app as a result of interacting with
+    the promo notification. This metric measures setup app interactions from all
+    users who click on the promo notification, and subsequently launch the setup
+    app.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.SetupStateOnClose" enum="EasyUnlockSetupState">
+  <owner>joshwoodward@google.com</owner>
+  <owner>tbarzic@chromium.org</owner>
+  <summary>
+    The state of EasyUnlock setup when the app window was closed by user.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.SignIn.LoginEvent" enum="EasyUnlockAuthEvent">
+  <obsolete>
+    Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.SignIn.
+  </obsolete>
+  <owner>xiaowenx@google.com</owner>
+  <owner>xiyuan@google.com</owner>
+  <summary>
+    Measures the use of Easy sign-in: records whether an Easy sign-in login
+    succeeded or failed; or if a password fallback was used, the reason why.
+    Recorded upon a login attempt for users who have the Easy sign-in feature
+    enabled.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.StartupTimeFromSuspend" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <owner>tengs@chromium.org</owner>
+  <summary>
+    The time it takes after resuming from a suspended state (ie. opening the
+    Chromebook lid) to when a remote device is connected and a request is made.
+    Note that it is possible for the remote device not to be present when
+    resuming from suspend, and the device may be connected at a later time.
+    Therefore, large values for this metric may not be too meaningful due to
+    meddling users.
+  </summary>
+</histogram>
+
+<histogram name="EasyUnlock.TrialRun.Events" enum="EasyUnlockTrialRunEvents">
+  <owner>isherman@chromium.org</owner>
+  <owner>xiaowenx@chromium.org</owner>
+  <summary>
+    Records when the Easy Unlock trial run is launched, and when the user
+    attempts to click on the lock icon during the trial run.
+  </summary>
+  <details>
+    If a user clicks on the lock icon more than once, then the &quot;clicked
+    lock icon&quot; event counter will be incremented more than once as well.
+    Hence, the &quot;user count&quot; data shows how many users ever clicked on
+    the lock icon during the trial run. From the raw (non-&quot;user
+    count&quot;) data, we can also see whether users click on the icon multiple
+    times.
+  </details>
+</histogram>
+
+<histogram name="EasyUnlock.UnlockEvent" enum="EasyUnlockUnlockEvent">
+  <obsolete>
+    Deprecated 02/2015; replaced by EasyUnlock.AuthEvent.Unlock.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <owner>tbarzic@chromium.org</owner>
+  <summary>Screen unlock events detected while EasyUnlock was enabled.</summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.ExistingProcessAllocation" units="ms">
+  <obsolete>
+    Deprecated 03/2016; replaced by
+    EmbeddedWorkerInstance.Start.SendStartWorker_ExistingProcess and
+    EmbeddedWorkerInstance.Start.TimeToURLJob_ExistingProcess.
+  </obsolete>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time taken to allocate a process to start the EmbeddedWorkerInstance.
+    Recorded when an existing process was used.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.NewProcessAllocation" units="ms">
+  <obsolete>
+    Deprecated 03/2016; replaced by
+    EmbeddedWorkerInstance.Start.SendStartWorker_NewProcess and
+    EmbeddedWorkerInstance.Start.TimeToURLJob_NewProcess.
+  </obsolete>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time taken to allocate a process to start the EmbeddedWorkerInstance.
+    Recorded when a new process was created.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.ProcessAllocation" units="ms">
+  <obsolete>
+    Deprecated as of 05/2015. Replaced by
+    EmbeddedWorkerInstance.NewProcessAllocation and
+    EmbeddedWorkerInstance.ExistingProcessAllocation.
+  </obsolete>
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time taken to allocate a process to start the EmbeddedWorkerInstance.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.ProcessCreated" enum="BooleanCreated">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Whether a new renderer process was created for the EmbeddedWorkerInstance or
+    existing one was used. Only recorded for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.ScriptEvaluate" units="ms">
+  <obsolete>
+    Deprecated as of 03/2016. Replaced by
+    EmbeddedWorkerInstance.Start.TimeToEvaluateScript.
+  </obsolete>
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time taken to evaluate the script to start the EmbeddedWorkerInstance.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.ScriptLoadWithNetworkAccess" units="ms">
+  <obsolete>
+    Deprecated as of 03/2016. Replaced by
+    EmbeddedWorkerInstance.Start.TimeToLoad_Network.
+  </obsolete>
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time taken to load the script file for the EmbeddedWorkerInstance with
+    network access.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.ScriptLoadWithoutNetworkAccess"
+    units="ms">
+  <obsolete>
+    Deprecated as of 03/2016. Replaced by
+    EmbeddedWorkerInstance.Start.TimeToLoad_HttpCache and
+    EmbeddedWorkerInstance.Start.TimeToLoad_InstalledScript.
+  </obsolete>
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time taken to load the script file for the EmbeddedWorkerInstance
+    without network access.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken for initial evaluation of the service worker script.
+    Specifically, the time between ACK from the renderer that the thread started
+    and ACK that the script evaluation finished. Only recorded for installed
+    workers.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken to load a new (not installed) service worker, when it came
+    from the HTTP cache.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"
+    units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>The time taken to load an installed service worker.</summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken to load a new (not installed) service worker, when it came
+    from the network.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken between deciding to start a worker and sending the start
+    worker IPC. Only recorded for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken to start the service worker thread. Specifically, the time
+    between ACK from the renderer that load finished and ACK that the thread
+    started. Does not include script evaluation time. Only recorded for
+    installed workers.
+  </summary>
+</histogram>
+
+<histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The round-trip time between asking the renderer process to start a worker
+    and receiving the corresponding resource request. Only recorded for
+    installed workers.
+  </summary>
+</histogram>
+
+<histogram name="EnhancedBookmarks.AllBookmarksCount">
+  <obsolete>
+    Removed 4/2016 after we no longer show &quot;all bookamrks&quot; in bookmark
+    manager.
+  </obsolete>
+  <owner>ianwen@chromium.org</owner>
+  <summary>Number of bookmarks the user has. Android only.</summary>
+</histogram>
+
+<histogram name="EnhancedBookmarks.SyncExperimentState"
+    enum="BookmarksExperimentState">
+  <obsolete>
+    Removed 3/2015 along with the enhanced bookmarks sync experiment.
+  </obsolete>
+  <owner>noyau@chromium.org</owner>
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Captures the state the enhanced bookmark experiment is in. Recorded on
+    startup. To be removed once the enhanced bookmark experiment is finished.
+    see crbug/323423.
+  </summary>
+</histogram>
+
+<histogram name="EnhancedBookmarks.ViewMode" enum="EnhancedBookmarkViewMode">
+  <obsolete>
+    Removed 9/2015 after list view became the only view mode.
+  </obsolete>
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Record which Enhanced Bookmark UI mode users are in. This will be recorded
+    everytime the user opens the bookmark manager UI.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.AppRestrictionLoadTime" units="ms">
+  <owner>aberent@chromium.org</owner>
+  <summary>
+    Android Only - Time to load the App Restrictions from the O.S..
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.AppRestrictionsCacheLoad" enum="BooleanSuccess">
+  <owner>aberent@chromium.org</owner>
+  <summary>
+    Android Only - Whether Chrome was able to read and decode the
+    AppRestrictions policy cache on startup.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.AttributesTPMConsistency"
+    enum="EnterpriseAttributesTPMConsistencyType">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Consistency between TPM lock state and absence/presence of install
+    attributes at boot.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.AutoEnrollmentExtraTime" units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Time since the user logged in until the auto-enrollment protocol completed.
+    0 is sampled when the protocol is done by the time the user logs in.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.AutoEnrollmentProtocolTime" units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Total duration time of the auto-enrollment protocol.</summary>
+</histogram>
+
+<histogram name="Enterprise.AutoEnrollmentRequestNetworkErrorCode"
+    enum="NetErrorCodes">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Network error code (if applicable) for auto-enrollment requests.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.AutoEnrollmentRequestStatus"
+    enum="EnterpriseDeviceManagementStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>URL fetcher status for auto-enrollment requests.</summary>
+</histogram>
+
+<histogram name="Enterprise.DevicePolicyInvalidations"
+    enum="EnterprisePolicyInvalidations">
+  <owner>bartfab@chromium.org</owner>
+  <summary>
+    Events for counting device policy invalidations received with and without
+    payloads. Invalidations indicate that a policy has been updated and should
+    be refreshed. Payloads provide context about the policy update, but may be
+    absent if dropped by the invalidation service.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.DevicePolicyRefresh" enum="EnterprisePolicyRefresh">
+  <owner>bartfab@chromium.org</owner>
+  <summary>
+    Events measuring effectiveness of refreshing device policy when
+    invalidations are received from a service. For each refresh, indicates
+    whether the policy changed, and whether the policy was invalidated at the
+    time of the refresh.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.DMServerRequestSuccess"
+    enum="EnterpriseDMServerRequestSuccess">
+  <owner>hunyadym@chromium.org</owner>
+  <summary>
+    Number of retries the client did to execute a DeviceManagementServer
+    request. It's recorded after the request has been completed, either
+    successfully after 0 or more retries, with a failure (too many retries or
+    non-retriable error) or with a server error.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.DMToken" enum="EnterpriseDMTokenType">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Events related to fetching, saving and loading DM server tokens. These are
+    used to retrieve cloud policies.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.DomainWhitelistRegexFailure"
+    enum="EnterpriseDomainRegex">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Temporary metric tracking which regex caused an icu::RegexMatcher
+    initialization failure, to help figure out the cause of
+    http://crbug.com/365351 which we can't repro locally.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.DomainWhitelistRegexFailureStatus"
+    units="icu error">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Temporary metric tracking the type of an icu::RegexMatcher initialization
+    failure, to help figure out the cause of http://crbug.com/365351 which we
+    can't repro locally.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.DomainWhitelistRegexSuccess" enum="BooleanSuccess">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Temporary metric tracking the success of icu::RegexMatcher IcuMatcher
+    initialization, to help figure out the cause of http://crbug.com/365351.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrolledPolicyHasDMToken" enum="Boolean">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Whether loading of device policy from file on an enterprise-enrolled
+    (checked against install_attributes.pb) Chrome OS device yields an
+    enterprise policy with a DM token.  Filled once during session startup,
+    after first successful device policy read.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.Enrollment" enum="EnterpriseEnrollmentType">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Events related to device enrollment on new installs of Chrome OS devices.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentForced" enum="EnterpriseEnrollmentType">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Events related to forced re-enrollment (FRE) of Chrome OS devices.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentRecovery" enum="EnterpriseEnrollmentType">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Events related to Chrome OS enterprise enrollment recovery.  Note that this
+    only covers cases in which prior to recovery, the &quot;private owner&quot;
+    of the device had UMA stats enabled.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentTime.Cancel" units="ms">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Elapsed time from *after* GAIA login until enrollment was cancelled.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentTime.Failure" units="ms">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Elapsed time from *after* GAIA login until enrollment failed.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.EnrollmentTime.Success" units="ms">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    Elapsed time from *after* GAIA login until enrollment succeeded.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.IOSPolicies">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Number of policies loaded at startup on iOS, and when a change is detected
+    at runtime.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.ONC.PolicyValidation" enum="BooleanSuccess">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Result of the OpenNetworkConfiguration policy validation.</summary>
+</histogram>
+
+<histogram name="Enterprise.Policies" enum="EnterprisePolicies">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    A set of enterprise policy rules that are in use. This is recorded every 24
+    hours and at startup, if the last recording was earlier than a day before.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.Policy" enum="EnterprisePolicyType">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Events related to fetching, saving and loading user policies, and also
+    device policies on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.PolicyHasVerifiedCachedKey"
+    enum="BooleanValidKeyExists">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Boolean tracking whether there is a valid policy signing key on disk.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.PolicyInvalidations"
+    enum="EnterprisePolicyInvalidations">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Events for counting user policy invalidations received with and without
+    payloads. Invalidations indicate that a policy has been updated and should
+    be refreshed. Payloads provide context about the policy update, but may be
+    absent if dropped by the invalidation service.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.PolicyInvalidationsStartupTime" units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Time since startup of the cloud policy code until the policy invalidation
+    service first reported its online status.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.PolicyKeyVerification"
+    enum="EnterprisePolicyKeyVerification">
+  <owner>atwilson@chromium.org</owner>
+  <summary>Tracking the results of policy key verification.</summary>
+</histogram>
+
+<histogram name="Enterprise.PolicyLoadStatus" enum="EnterprisePolicyLoadStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Load status from the policy loaders which pull policy settings from the
+    underlying platform, such as Windows Group Policy.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.PolicyRefresh" enum="EnterprisePolicyRefresh">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Events measuring effectiveness of refreshing user policy when invalidations
+    are received from a service. For each refresh, indicates whether the policy
+    changed, and whether the policy was invalidated at the time of the refresh.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.SystemLogPIILeak" enum="SystemLogPIIType">
+  <obsolete>
+    Deprecated and removed from code as of 01/2016.
+  </obsolete>
+  <owner>pbond@chromium.org</owner>
+  <summary>
+    Events for counting sensitive data occurrences in system logs to upload.
+    (Email addresses, IP addresses, SSIDs, URLs). The lines with this data will
+    be removed before upload.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.UserCloudPolicyStore.LoadStatus"
+    enum="PolicyLoadStatus">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Result of the attempted policy load during profile initialization.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.UserCloudPolicyStore.LoadValidationStatus"
+    enum="PolicyValidationStatus">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Result of validating the policy that has just been loaded from disk.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.UserCloudPolicyStore.StoreValidationStatus"
+    enum="PolicyValidationStatus">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Result of validating the policy sent down from the server, before writing to
+    disk.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.DelayInitialization" units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Initialization delay due to loading the user policy cache.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.ClientError"
+    enum="EnterpriseDeviceManagementStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Policy client error during initial policy fetch.</summary>
+</histogram>
+
+<histogram
+    name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayClientRegister"
+    units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Delay for registering the client with the policy server.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayOAuth2Token"
+    units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Delay for minting an OAuth2 acccess token.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayPolicyFetch"
+    units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Delay for fetching policy from the policy server.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.DelayTotal"
+    units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Total delay for the initial policy fetch.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2Error"
+    enum="GoogleServiceAuthError">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Service error during OAuth2 access token fetch.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyChromeOS.InitialFetch.OAuth2NetworkError"
+    enum="NetErrorCodes">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Network error during OAuth2 access token fetch.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyValidationFailure"
+    enum="ValidationFailures">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Source of policy validation errors on ChromeOS.</summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyValidationLoadStatus"
+    enum="PolicyValidationStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Validation result when loading user policy from the policy store.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.UserPolicyValidationStoreStatus"
+    enum="PolicyValidationStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Validation result when writing user policy to the policy store.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.UserSigninChoice" enum="SigninChoice">
+  <owner>atwilson@chromium.org</owner>
+  <summary>
+    Choice the user made when presented with enterprise signin dialog.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.VpdCheck">
+  <owner>igorcov@chromium.org</owner>
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    The status code (exit code or signal) from sanity check of RW_VPD read and
+    matching the contents with data from dump_vpd_log (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.VpdUpdateStatus">
+  <owner>igorcov@chromium.org</owner>
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    The status code (exit code or signal) from VPD update operation (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.WildcardLoginCheck.DelayPolicyTokenFetch"
+    units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Delay incurred by the token fetching step of the wildcard login check.
+  </summary>
+</histogram>
+
+<histogram name="Enterprise.WildcardLoginCheck.DelayTotal" units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Total delay incurred by the wildcard login check.</summary>
+</histogram>
+
+<histogram name="Enterprise.WildcardLoginCheck.DelayUserInfoFetch" units="ms">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Delay incurred by the user info fetching step of the wildcard login check.
+  </summary>
+</histogram>
+
+<histogram name="EnterpriseCheck.DeprecatedDomainBindSucceeded"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 07/2016 in Issue 621270.
+  </obsolete>
+  <owner>mnissler@chromium.org</owner>
+  <owner>pastarmovj@chromium.org</owner>
+  <summary>
+    Whether we were able to contact the AD Domain Controller. This check is
+    performed once at start-up on Windows.
+  </summary>
+</histogram>
+
+<histogram name="EnterpriseCheck.DeprecatedDomainCheckFailed"
+    enum="EnterpriseCheckError">
+  <obsolete>
+    Deprecated 07/2016 in Issue 621270.
+  </obsolete>
+  <owner>mnissler@chromium.org</owner>
+  <owner>pastarmovj@chromium.org</owner>
+  <summary>
+    Enum of possible things that can fail while checking for enterprise env.
+    This check is performed once at start-up on Windows.
+  </summary>
+</histogram>
+
+<histogram name="EnterpriseCheck.InDomain" enum="BooleanEnabled">
+  <owner>mnissler@chromium.org</owner>
+  <owner>pastarmovj@chromium.org</owner>
+  <summary>
+    Whether the machine is part of an AD domain. This check is performed once at
+    start-up on Windows.
+  </summary>
+</histogram>
+
+<histogram name="EnterpriseCheck.InvalidPolicies" enum="EnterprisePolicies">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    A set of policy rules that were ignored due to integrity violations while
+    parsing the policy data which happens on start-up and when the policy has
+    changed.
+  </summary>
+</histogram>
+
+<histogram name="EnterpriseCheck.InvalidPoliciesDetected"
+    units="disabled policies">
+  <owner>mnissler@chromium.org</owner>
+  <owner>pastarmovj@chromium.org</owner>
+  <summary>
+    The number of disabled policy entries on Windows due to integrity violations
+    while parsing the policy data which happens on start-up and when the policy
+    has changed.
+  </summary>
+</histogram>
+
+<histogram name="EnterpriseCheck.OSType" enum="OsSuite">
+  <owner>mnissler@chromium.org</owner>
+  <owner>pastarmovj@chromium.org</owner>
+  <summary>
+    The rough Windows suite we are running on. This check is performed once at
+    start-up on Windows.
+  </summary>
+</histogram>
+
+<histogram name="Event.ActionAfterDoubleTapNoDelay" enum="ActionAfterDoubleTap">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    On non-mobile sites, gesture taps are delayed to prevent double taps from
+    sending a click event. This stat tracks the user's first action within 5
+    seconds after a double tap gesture when the gesture tap delay is disabled.
+  </summary>
+</histogram>
+
+<histogram name="Event.ActionAfterDoubleTapWithDelay"
+    enum="ActionAfterDoubleTap">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    On non-mobile sites, gesture taps are delayed to prevent double taps from
+    sending a click event. This stat tracks the user's first action within 5
+    seconds after a double tap gesture when gesture tap events are delayed.
+  </summary>
+</histogram>
+
+<histogram name="Event.AggregatedLatency.Renderer2" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of any input event and the renderer receiving and
+    starting to process it.
+  </summary>
+</histogram>
+
+<histogram name="Event.CoalescedCount.Mouse">
+  <owner>rbyers@chromium.org</owner>
+  <summary>Number of Mouse events coalesced.</summary>
+</histogram>
+
+<histogram name="Event.CoalescedCount.Touch">
+  <owner>rbyers@chromium.org</owner>
+  <summary>Number of Touch events coalesced.</summary>
+</histogram>
+
+<histogram name="Event.CoalescedLatency.Mouse" units="ms">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between the first and last events in a coalesced mouse events group.
+  </summary>
+</histogram>
+
+<histogram name="Event.CoalescedLatency.Touch" units="ms">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between the first and last events in a coalesced touch events group.
+  </summary>
+</histogram>
+
+<histogram name="Event.CompositorThreadEventQueue.CoalescedCount"
+    units="events">
+  <owner>chongz@chromium.org</owner>
+  <summary>
+    Number of continuous gesture events (GestureScrollUpdate,
+    GesturePinchUpdate) coalesced inside the compositor thread event queue per
+    event. This field is recorded just before the event is processed on the
+    compositor thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.CompositorThreadEventQueue.Continuous.HeadQueueingTime"
+    units="microseconds">
+  <owner>chongz@chromium.org</owner>
+  <summary>
+    Time between the first event in a coalesced continuous gesture events group
+    (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the
+    compositor thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.CompositorThreadEventQueue.Continuous.TailQueueingTime"
+    units="microseconds">
+  <owner>chongz@chromium.org</owner>
+  <summary>
+    Time between the last event in a coalesced continuous gesture events group
+    (GestureScrollUpdate, GesturePinchUpdate) and when it was processed on the
+    compositor thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.CompositorThreadEventQueue.NonContinuous.QueueingTime"
+    units="microseconds">
+  <owner>chongz@chromium.org</owner>
+  <summary>
+    Time between when a non-continuous gesture event (GestureScrollStart/End,
+    GesturePinchStart/End) was placed into the queue and when it was processed
+    on the compositor thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.DownEventCount.PerDestination"
+    enum="DownEventDestination">
+  <owner>xiaoyinh@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    The number of down events received per destination. Every down event that is
+    targeted to each destination will be counted, including those that don't
+    have an effect. For example: Tapping on a disabled button inside the browser
+    frame will be treated as down events on browser window.
+  </summary>
+</histogram>
+
+<histogram name="Event.DownEventCount.PerFormFactor" enum="DownEventFormFactor">
+  <owner>xiaoyinh@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    Counts the number of down events generated by clamshell/touchview.
+  </summary>
+</histogram>
+
+<histogram name="Event.DownEventCount.PerInput" enum="DownEventSource">
+  <owner>xiaoyinh@chromium.org</owner>
+  <owner>tbuckley@chromium.org</owner>
+  <summary>
+    Counts the number of down events generated by Mouse/Touch/Stylus.
+  </summary>
+</histogram>
+
+<histogram name="Event.DragDrop.Cancel" enum="DragDropEventSource">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Counts the number of times the user cancelled a drag and drop operation.
+  </summary>
+</histogram>
+
+<histogram name="Event.DragDrop.Drop" enum="DragDropEventSource">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Counts the number of times the user completed a drag and drop operation.
+  </summary>
+</histogram>
+
+<histogram name="Event.DragDrop.ExternalOriginDrop">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Counts the number of times a drag and drop operation originating outside of
+    a Chrome window successfuly drops.
+  </summary>
+</histogram>
+
+<histogram name="Event.DragDrop.Start" enum="DragDropEventSource">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Counts the number of times the user started a drag and drop operation.
+  </summary>
+</histogram>
+
+<histogram name="Event.FrameEventRouting.NoGestureTarget">
+  <owner>wjmaclean@chromium.org</owner>
+  <summary>
+    Record whether we unexpectedly encounter an empty gesture queue while
+    routing gesture events to frames' renderers: true =&gt; empty queue, false
+    =&gt; non-empty queue.
+  </summary>
+</histogram>
+
+<histogram name="Event.Frequency.Renderer.FlingAnimate" units="hertz">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Emitted after a renderer process main-thread fling curve animation
+    terminates, for any reason, reporting the average animation frequency
+    (animations/second) of the fling instance over its lifetime. This is
+    computed as the number of fling animation ticks divided by the fling
+    animation duration.
+  </summary>
+</histogram>
+
+<histogram name="Event.Frequency.RendererImpl.FlingAnimate" units="hertz">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Emitted after a renderer process impl-thread fling curve animation
+    terminates, for any reason, reporting the average animation frequency
+    (animations/second) of the fling instance over its lifetime. This is
+    computed as the number of fling animation ticks divided by the fling
+    animation duration.
+  </summary>
+</histogram>
+
+<histogram name="Event.GestureCreated" enum="UIEventType">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The gesture-events recognized and dispatched by the browser gesture
+    recognizer. This replaces Ash.GestureCreated, which did not record events on
+    Android and Windows.
+  </summary>
+</histogram>
+
+<histogram name="Event.HitTest" enum="EventHitTest">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    For each hit test, records whether it was a hit or miss, and why.
+  </summary>
+</histogram>
+
+<histogram name="Event.HitTestValidity" enum="EventHitTestValidity">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    For hit tests that are validated, records whether it was correct or not, and
+    why.
+  </summary>
+</histogram>
+
+<histogram name="Event.HitTestValidityScore" enum="EventHitTestValidityScore">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    For hit tests that are invalid, records the score (a series of bits
+    indicating what was matched and what wasn't).
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.BlockingTime.TouchEndDefaultAllowed" units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer main thread receiving a touchend event and acking
+    it, for events which were not preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.BlockingTime.TouchEndDefaultPrevented"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer main thread receiving a touchend event and acking
+    it, for events which were preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.BlockingTime.TouchMoveDefaultAllowed" units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer main thread receiving a touchmove event and acking
+    it, for events which were not preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.BlockingTime.TouchMoveDefaultPrevented"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer main thread receiving a touchmove event and acking
+    it, for events which were preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.BlockingTime.TouchStartDefaultAllowed"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer main thread receiving a touchstart event and
+    acking it, for events which were not preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.BlockingTime.TouchStartDefaultPrevented"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer main thread receiving a touchstart event and
+    acking it, for events which were preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of all input events and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_DROP_TARGET_EVENT"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_BEGIN" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_DOUBLE_TAP"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_END" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_PRESS"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_LONG_TAP"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_MULTIFINGER_SWIPE"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_BEGIN"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_END"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_PINCH_UPDATE"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_BEGIN"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_END"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_SCROLL_UPDATE"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_TAP" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_CANCEL"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_TAP_DOWN"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_GESTURE_TWO_FINGER_TAP"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_KEY_PRESSED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_KEY_RELEASED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSE_CAPTURE_CHANGED"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSE_DRAGGED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSE_ENTERED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSE_EXITED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSE_MOVED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSE_RELEASED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_MOUSEWHEEL" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_SCROLL" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_CANCEL"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_SCROLL_FLING_START"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TOUCH_CANCELLED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TOUCH_MOVED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TOUCH_PRESSED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TOUCH_RELEASED" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TOUCH_STATIONARY"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_PRESS"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_TRANSLATED_KEY_RELEASE"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.ET_UNKNOWN" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of input event and browser processing.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.TouchAcked" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between touch events sent from RWH to renderer and acked by renderer.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.TouchUI" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between touch events received by Chrome and sent from RWH to renderer.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.WheelAcked" units="microseconds">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    Time between wheel events sent from RWH to renderer and acked by renderer.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Browser.WheelUI" units="microseconds">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    Time between wheel events received by Chrome and sent from RWH to renderer.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.HitTest" units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Duration of a non-resurive hitTest operation. The hit test is non-recursive
+    when the AllowChildFrameContent flag is clear. See also
+    Event.Latency.HitTestRecusrive.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.HitTestRecursive" units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Duration of a recursive hitTest operation. The hit test is recursive when
+    the AllowChildFrameContent flag is set. See also Event.Latency.HitTest.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.OS" units="microseconds">
+  <owner>sahel@chromium.org</owner>
+  <summary>Time between input event received by OS and sent to Chrome.</summary>
+</histogram>
+
+<histogram name="Event.Latency.QueueingTime.TouchEndDefaultAllowed" units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between sending a touchend event to the renderer main thread and when
+    the renderer begins to process that event, for events which were not
+    preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.QueueingTime.TouchEndDefaultPrevented"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between sending a touchend event to the renderer main thread and when
+    the renderer begins to process that event, for events which were
+    preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.QueueingTime.TouchMoveDefaultAllowed" units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between sending a touchmove event to the renderer main thread and when
+    the renderer begins to process that event, for events which were not
+    preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.QueueingTime.TouchMoveDefaultPrevented"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between sending a touchmove event to the renderer main thread and when
+    the renderer begins to process that event, for events which were
+    preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.QueueingTime.TouchStartDefaultAllowed"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between sending a touchstart event to the renderer main thread and when
+    the renderer begins to process that event, for events which were not
+    preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.QueueingTime.TouchStartDefaultPrevented"
+    units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between sending a touchstart event to the renderer main thread and when
+    the renderer begins to process that event, for events which were
+    preventDefaulted.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Renderer" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initiation of all input events and renderer processing. This is
+    soon to be replaced by Event.Latency.Renderer2.*
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Renderer2" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between input event creation and the renderer receiving and starting to
+    process the event. For touch events on Windows, we measure from when the
+    event reaches Chrome, whereas on other platforms we use the timestamp from
+    the kernel. On Windows, this metric is only reported when |IsHighResolution|
+    is true, which will introduce some sampling bias.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.RendererImpl" units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between input event creation and the renderer impl thread receiving and
+    starting to process the event. For touch events on Windows, we measure from
+    when the event reaches Chrome, whereas on other platforms we use the
+    timestamp from the kernel. On Windows, this metric is only reported when
+    |IsHighResolution| is true, which will introduce some sampling bias.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.RendererImpl.GestureScroll" units="microseconds">
+  <obsolete>
+    Deprecated 12/2013 and replaced by Event.Latency.RendererImpl.GestureScroll2
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initial creation of touch event and when the resulting
+    ScrollGesture reaches Impl thread. Maximum is 200ms.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.RendererImpl.GestureScroll2"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between touch event creation and when the resulting GestureScroll
+    reaches the Impl thread. Maximum is 1000ms. On Windows, we measure from when
+    the touch event reaches Chrome, whereas on other platforms we use the
+    timestamp from the kernel. On Windows, this metric is only reported when
+    |IsHighResolution| is true, which will introduce some sampling bias. This
+    supersedes the Event.Latency.RendererImpl.GestureScroll metric.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollBegin.Touch.BrowserNotifiedToBeforeGpuSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the browser receives the notification of the first ScrollUpdate
+    gesture event in a given scroll gesture event sequence with touch source
+    induced renderer swap and GPU starts to swap.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Touch.GpuSwap2" units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between gpu starts to swap the first ScrollUpdate gesture event in a
+    given scroll gesture event sequence with touch source induced frame and the
+    swap finishes.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Touch.HandledToRendererSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the first ScrollUpdate gesture event in a given scroll gesture
+    event sequence with touch source, is handled on main/impl thread (specified
+    by suffix) and before renderer starts to swap.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollBegin.Touch.RendererSwapToBrowserNotified2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer starts to swap a frame induced by the first
+    ScrollUpdate gesture event in a given scroll gesture event sequence with
+    touch source, and browser receives the swap notification.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Touch.TimeToHandled2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the first generated
+    ScrollUpdate gesture event in a given scroll gesture event sequence is
+    handled on main/impl thread (specified by suffix). If no swap was induced by
+    the ScrollUpdate gesture event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollBegin.Wheel.BrowserNotifiedToBeforeGpuSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the browser receives the notification of the first ScrollUpdate
+    gesture event in a given scroll gesture event sequence with wheel source
+    induced renderer swap and GPU starts to swap.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Wheel.GpuSwap2" units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between gpu starts to swap the first ScrollUpdate gesture event in a
+    given scroll gesture event sequence with wheel source induced frame and the
+    swap finishes.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Wheel.HandledToRendererSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the first ScrollUpdate gesture event in a given scroll gesture
+    event sequence with wheel source, is handled on main/impl thread (specified
+    by suffix) and before renderer starts to swap.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollBegin.Wheel.RendererSwapToBrowserNotified2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer starts to swap a frame induced by the first
+    ScrollUpdate gesture event in a given scroll gesture event sequence with
+    wheel source, and browser receives the swap notification.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToHandled2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a wheel event and the first generated
+    ScrollUpdate gesture event in a given scroll gesture event sequence is
+    handled on main/impl thread (specified by suffix). If no swap was induced by
+    the ScrollBegin gesture event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a wheel event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.BrowserNotifiedToBeforeGpuSwap"
+    units="microseconds">
+  <obsolete>
+    To be replaced by
+    Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2,
+    Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2 in M56.
+    https://crbug.com/649754
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between the browser receives the notification of a ScrollUpdate gesture
+    event induced renderer swap and GPU starts to swap.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.GpuSwap" units="microseconds">
+  <obsolete>
+    To be replaced by Event.Latency.ScrollUpdate.Touch.GpuSwap2,
+    Event.Latency.ScrollUpdate.wheel.GpuSwap2 in M56. https://crbug.com/649754
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between gpu starts to swap a ScrollUpdate gesture event induced frame
+    and the swap finishes.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap"
+    units="microseconds">
+  <obsolete>
+    To be replaced by Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2,
+    Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2 in M56.
+    https://crbug.com/649754
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between the ScrollUpdate gesture event is handled on main/impl thread
+    (specified by suffix) and before renderer starts to swap.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.RendererSwapToBrowserNotified"
+    units="microseconds">
+  <obsolete>
+    To be replaced by
+    Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2,
+    Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2 in M56.
+    https://crbug.com/649754
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between the renderer starts to swap a frame induced by ScrollUpdate
+    gesture event and browser receives the swap notification.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollUpdate.Touch.BrowserNotifiedToBeforeGpuSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the browser receives the notification of a ScrollUpdate gesture
+    event with touch source induced renderer swap and GPU starts to swap.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Touch.GpuSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between gpu starts to swap a ScrollUpdate gesture event with touch
+    source induced frame and the swap finishes.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the ScrollUpdate gesture event with touch source, is handled on
+    main/impl thread (specified by suffix) and before renderer starts to swap.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollUpdate.Touch.RendererSwapToBrowserNotified2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer starts to swap a frame induced by ScrollUpdate
+    gesture event with touch source, and browser receives the swap notification.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2"
+    units="microseconds">
+  <obsolete>
+    To be replaced by
+    Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin2 in M57.
+    https://crbug.com/616482
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the generated
+    ScrollUpdate gesture event is handled on main/impl thread (specified by
+    suffix). If no swap was induced by the ScrollUpdate gesture event, no
+    recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and start of the frame swap
+    on the GPU service caused by the generated ScrollUpdate gesture event. If no
+    swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.TouchToHandled"
+    units="microseconds">
+  <obsolete>
+    To be replaced by Event.Latency.ScrollUpdate.Touch.TimeToHandled2 in M56.
+    https://crbug.com/649754
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the generated
+    ScrollUpdate gesture event is handled on main/impl thread (specified by
+    suffix). If no swap was induced by the ScrollUpdate gesture event, no
+    recording is made.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollUpdate.Wheel.BrowserNotifiedToBeforeGpuSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the browser receives the notification of a ScrollUpdate gesture
+    event with wheel source induced renderer swap and GPU starts to swap.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Wheel.GpuSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between gpu starts to swap a ScrollUpdate gesture event with wheel
+    source induced frame and the swap finishes.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the ScrollUpdate gesture event with wheel source, is handled on
+    main/impl thread (specified by suffix) and before renderer starts to swap.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollUpdate.Wheel.RendererSwapToBrowserNotified2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between the renderer starts to swap a frame induced by ScrollUpdate
+    gesture event with wheel source, and browser receives the swap notification.
+  </summary>
+</histogram>
+
+<histogram
+    name="Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2"
+    units="microseconds">
+  <obsolete>
+    To be replaced by
+    Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin2 in M57.
+    https://crbug.com/616482
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a wheel event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a wheel event and the generated
+    ScrollUpdate gesture event is handled on main/impl thread (specified by
+    suffix). If no swap was induced by the ScrollUpdate gesture event, no
+    recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Touch.TimeToFirstScrollUpdateSwapBegin2"
+    units="microseconds">
+  <obsolete>
+    Replaced by
+    Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Touch.TimeToScrollUpdateSwapBegin2"
+    units="microseconds">
+  <obsolete>
+    Replaced by Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and start of the frame swap
+    on the GPU service caused by the generated ScrollUpdate gesture event. If no
+    swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.TouchToFirstScrollUpdateSwap"
+    units="microseconds">
+  <obsolete>
+    Replaced by Event.Latency.TouchToFirstScrollUpdateSwapBegin.
+    crbug.com/478845
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the frame swap caused by
+    by the generated ScrollUpdate gesture event if that ScrollUpdate is the
+    first such in a given scroll gesture event sequence. If no swap was induced
+    by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin"
+    units="microseconds">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+
+    To be replaced by
+    Event.Latency.ScrollUpdate.Touch.TimeToFirstScrollUpdateSwapBegin2 in M56.
+    https://crbug.com/649754
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.TouchToScrollUpdateSwap" units="microseconds">
+  <obsolete>
+    Replaced by Event.Latency.TouchToScrollUpdateSwapBegin. crbug.com/478845
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and the frame swap caused by
+    by the generated ScrollUpdate gesture event. If no swap was induced by the
+    event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.TouchToScrollUpdateSwapBegin"
+    units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a touch event and start of the frame swap
+    on the GPU service caused by the generated ScrollUpdate gesture event. If no
+    swap was induced by the event, no recording is made.
+
+    To be replaced by
+    Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin2 in M56.
+    https://crbug.com/649754
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.Wheel.TimeToFirstScrollUpdateSwapBegin2"
+    units="microseconds">
+  <obsolete>
+    Replaced by
+    Event.Latency.ScrollUpdate.Wheel.TimeToFirstScrollUpdateSwapBegin2.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between initial creation of a wheel event and the start of the frame
+    swap on the GPU service caused by the generated ScrollUpdate gesture event
+    if that ScrollUpdate is the first such event in a given scroll gesture event
+    sequence. If no swap was induced by the event, no recording is made.
+  </summary>
+</histogram>
+
+<histogram name="Event.Latency.X11EventSource.UpdateServerTime"
+    units="microseconds">
+  <obsolete>
+    Deprecated 08/2016, and replaced by Linux.X11.ServerRTT.
+  </obsolete>
+  <owner>thomasanderson@chromium.org</owner>
+  <summary>Time to request a timestamp from the X server.</summary>
+</histogram>
+
+<histogram name="Event.MainThreadEventQueue.CoalescedCount" units="events">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Number of continuous events (touchmove, mousemove, mousewheel) coalesced
+    inside the main thread event queue per event. This field is recorded just
+    before the event is processed on the main thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.MainThreadEventQueue.Continuous.FreshnessTime"
+    units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Time between when a continuous event (touchmove, mousemove, mousewheel) was
+    placed into the queue (or coalesced with another event) and when it was
+    processed on the main thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.MainThreadEventQueue.Continuous.QueueingTime"
+    units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Time between when a continuous event (touchmove, mousemove, mousewheel) was
+    placed into the queue and when it was processed on the main thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.MainThreadEventQueue.NonContinuous.QueueingTime"
+    units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Time between when a non-continuous event (not touchmove, mousemove,
+    mousewheel) was placed into the queue and when it was processed on the main
+    thread.
+  </summary>
+</histogram>
+
+<histogram name="Event.PassiveForcedEventDispatchCancelled"
+    enum="PassiveForcedListenerResultType">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Counts the number of event listener invocations that were forced to be
+    passive due to interventions and whether the invocation of the listener
+    called prevent default or not.
+  </summary>
+</histogram>
+
+<histogram name="Event.PassiveListeners" enum="EventResultType">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    The result of handling of MouseWheel, TouchStart, TouchMove, TouchEnd events
+    in the renderer.
+  </summary>
+</histogram>
+
+<histogram name="Event.PassiveListeners.ForcedNonBlockingLatency"
+    units="microseconds">
+  <obsolete>
+    Deprecated 08/2016 in Issue 595327, and replaced by
+    Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling.
+  </obsolete>
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Time between when a forced non-blocking event was generated and the event
+    processed. This histogram tracks the benefit of forcing non-blocking events
+    listeners.
+  </summary>
+</histogram>
+
+<histogram name="Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling"
+    units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Time between when a forced non-blocking touchstart or first touchmove event
+    per scroll was generated and the event processed during fling. This
+    histogram tracks the benefit of forcing non-blocking events listeners during
+    fling.
+  </summary>
+</histogram>
+
+<histogram name="Event.PassiveListeners.Latency" units="microseconds">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Time between when a cancelable event was generated and the event processed
+    yet no action was executed for the event. This histogram tracks the
+    potential benefit of using passive events listeners.
+  </summary>
+</histogram>
+
+<histogram name="Event.RenderView.DiscardInput" enum="BooleanHit">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Whether the input IPC messages were discarded before being fully processed
+    in RenderView's IPC message handler.
+  </summary>
+</histogram>
+
+<histogram name="Event.SingleTapType" enum="TapDelayType">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    On non-mobile sites, gesture taps are delayed to prevent double taps from
+    sending a click event. This stat counts the number of taps that are delayed
+    by the double-tap delay versus those that are sent immediately on mobile
+    sites.
+  </summary>
+</histogram>
+
+<histogram name="Event.TimestampHasValidTimebase" enum="EventTimestampValidity">
+  <owner>majidvp@chromium.org</owner>
+  <owner>tdresser@chromium.org</owner>
+  <owner>caseq@chromium.org</owner>
+  <summary>
+    Whether the timestamps on input events produced by the windowing system
+    appear to be sharing the same time base as TimeTicks, modulo possible
+    roll-over.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TargetAndDispatchResult"
+    enum="TouchTargetAndDispatchResultType">
+  <obsolete>
+    Deprecated 05/2016, and replaced by Event.Touch.TargetAndDispatchResult2.
+  </obsolete>
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    An enumeration identifying 3 properties: 1) a classification of the event
+    target whether it is a root scroll listener (window, document, body) or not;
+    2) the result of the dispatch; 3) whether the document was scrollable or
+    not.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TargetAndDispatchResult2"
+    enum="TouchTargetAndDispatchResultType2">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    An enumeration identifying 4 properties: 1) a classification of the current
+    target whether it is a root scroll listener (window, document, body) or not;
+    2) the result of the dispatch or whether it was previously canceled 3)
+    whether the document was scrollable or not 4) what phase the listener was
+    encountered at. This metric is logged during the dispatch of the touch
+    events. It will only be reported for main frame events that block scrolling,
+    have only one touch point and current targets that fired an event listener
+    at that phase.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TimedOutOnDesktopSite" enum="BooleanTimedOut">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    On non-mobile-optimized (desktop) sites, whether the ack response from the
+    renderer for any event in a contiguous touch sequence exceeds the
+    desktop-specific timeout threshold.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TimedOutOnMobileSite" enum="BooleanTimedOut">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    On mobile-optimized sites, whether the ack response from the renderer for
+    any event in a contiguous touch sequence exceeds the mobile-specific timeout
+    threshold.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchDispositionsAfterPageLoad"
+    enum="TouchEventDispatchResultType">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Records the disposition (handled or not handled) of touchstart events and
+    the first touchmove events per scroll. Only recorded after the page is fully
+    loaded.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchDispositionsBeforePageLoad"
+    enum="TouchEventDispatchResultType">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Records the disposition (handled or not handled) of touchstart events and
+    the first touchmove events per scroll. Only recorded before the page is
+    fully loaded.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchDispositionsDuringFling"
+    enum="TouchEventDispatchResultType">
+  <obsolete>
+    Deprecated 08/2016 in Issue 595327, and replaced by
+    Event.Touch.TouchDispositionsDuringFling2.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Records the disposition (handled or not handled) of touchstart events. Only
+    recorded while there is an active fling animation.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchDispositionsDuringFling2"
+    enum="TouchEventDispatchResultType">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Records the disposition (handled or not handled) of touchstart and first
+    touchmove events per scroll. Only recorded while there is an active fling
+    animation.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchDispositionsOutsideFling"
+    enum="TouchEventDispatchResultType">
+  <obsolete>
+    Deprecated 08/2016 in Issue 595327, and replaced by
+    Event.Touch.TouchDispositionsOutsideFling2.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Records the disposition (handled or not handled) of touchstart events. Only
+    recorded while there is no active fling animation.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchDispositionsOutsideFling2"
+    enum="TouchEventDispatchResultType">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Records the disposition (handled or not handled) of touchstart and first
+    touchmove events per scroll events. Only recorded while there is no active
+    fling animation.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchLatencyAfterPageLoad" units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between when a touch event was generated and the event was processed.
+    Recorded only for touchstart events and the first touchmove events per
+    scroll that occur after the page is fully loaded.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchLatencyBeforePageLoad" units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between when a touch event was generated and the event was processed.
+    Recorded only for touchstart events and the first touchmove events per
+    scroll that occur before the page is fully loaded. This histogram tracks the
+    benefit of forcing passive event listeners before the page is fully loaded.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchLatencyOutsideFling" units="microseconds">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between when a touch event was generated and the event was processed.
+    Recorded only for touchstart events and the first touchmove events per
+    scroll when there was no active fling animation.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchStartLatencyDuringFling" units="microseconds">
+  <obsolete>
+    Deprecated 08/2016 in Issue 595327, and replaced by
+    Event.PassiveListeners.ForcedNonBlockingLatencyDueToFling.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between when a touchstart event was generated and the event was
+    processed. Recorded only when there was an active fling animation. This
+    histogram tracks the benefit of forcing passive event listeners during
+    fling.
+  </summary>
+</histogram>
+
+<histogram name="Event.Touch.TouchStartLatencyOutsideFling"
+    units="microseconds">
+  <obsolete>
+    Deprecated 08/2016 in Issue 595327, and replaced by
+    Event.Touch.TouchLatencyOutsideFling.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Time between when a touchstart event was generated and the event was
+    processed. Recorded only when there was no active fling animation.
+  </summary>
+</histogram>
+
+<histogram name="Event.TouchDuration" units="ms">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The duration of a touch-sequence. Only measured for single finger gestures.
+    This replaces Ash.TouchDuration2, which did not record events on Android and
+    Windows.
+  </summary>
+</histogram>
+
+<histogram name="Event.TouchMaxDistance" units="pixels">
+  <owner>kuscher@google.com</owner>
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    The maximum euclidean distance in dips (device independent pixel) which a
+    touch point has travelled away from its starting point. Only measured for
+    single finger gestures. This replaces Ash.TouchMaxDistance, which did not
+    record events on Android and Windows.
+  </summary>
+</histogram>
+
+<histogram name="Event.TouchSelection.Duration" units="ms">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Duration of touch selection sequence which finished with the user selecting
+    one of the text manipulation actions, such as copy, cut, or paste. The
+    duration is measured from the moment the text selection handles are shown,
+    and until the action is executed.
+  </summary>
+</histogram>
+
+<histogram name="Event.TouchSelection.EndedWithAction" enum="BooleanSuccess">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Whether the touch selection sequence ended with the user selecting one of
+    the text manipulation actions, such as copy, cut, or paste. after startup).
+    Sequences ending with such action are considered successful.
+  </summary>
+</histogram>
+
+<histogram name="Event.TouchSelection.WasDraggedDuration" units="ms">
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Duration of touch selection sequence which involved dragging a text
+    selection handle. The duration is measured from the moment the text
+    selection handles are shown, and until they are dismissed.
+  </summary>
+</histogram>
+
+<histogram name="ExclusiveAccess.BubbleReshowsPerSession.Fullscreen">
+  <owner>mgiuca@chromium.org</owner>
+  <summary>
+    The number of times the fullscreen bubble was re-shown due to inactivity
+    during a session of fullscreen mode (not including mouse lock). If the mouse
+    is also locked while a re-show occurs, both this and
+    BubbleReshowsPerSession.MouseLock are incremented. Includes all types of
+    fullscreen (user-triggered, extension-triggered and page-triggered). Only
+    recorded when the simplified-fullscreen-ui flag is enabled.
+  </summary>
+</histogram>
+
+<histogram name="ExclusiveAccess.BubbleReshowsPerSession.MouseLock">
+  <owner>mgiuca@chromium.org</owner>
+  <summary>
+    The number of times the mouse lock bubble was re-shown due to inactivity
+    during a session of mouse lock mode. If also in fullscreen while a re-show
+    occurs, both this and BubbleReshowsPerSession.Fullscreen are incremented.
+    Only recorded when the simplified-fullscreen-ui flag is enabled.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdInjected" units="Extension Count">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that inject at least one new ad.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdLikelyInjected" units="Extension Count">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that performed an action that
+    heuristically looks like injecting an ad, but could not be confirmed.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdLikelyReplaced" units="Extension Count">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that performed an action that
+    heuristically looks like replacing an ad, but could not be confirmed.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdRemoved" units="Extension Count">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that remove at least one ad.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.AdReplaced" units="Extension Count">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that replace at least one ad.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.ContentScript">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that inject a content script.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedDiv">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create divs to add to the
+    page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedEmbed">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create 'embed' elements to
+    add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedIframe">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create iframes to add to
+    the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedInput">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create inputs to add to the
+    page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedLink">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create links to add to the
+    page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedObject">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create 'object' elements to
+    add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.CreatedScript">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that create script tags to add
+    to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.DocumentWrite">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that use document.write.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.ContentScript">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that inject a
+    content script.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedDiv">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create divs
+    to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedEmbed">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create
+    'embed' elements to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedIframe">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create
+    iframes to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedInput">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create
+    inputs to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedLink">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create links
+    to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedObject">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create
+    'object' elements to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.CreatedScript">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that create
+    script tags to add to the page.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.DocumentWrite">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that use
+    document.write.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.InnerHtml">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that set
+    innerHTML.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.InvokedDomMethod">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that invoke DOM
+    methods.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.ModifiedDom">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that set the
+    value of DOM properties via assignments.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.Google.ReadDom">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each www.google.com pageload, the number of extensions that read from
+    the DOM.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.InnerHtml">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that set innerHTML.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.InvokedDomMethod">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that invoke DOM methods.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.ModifiedDom">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that set the value of DOM
+    properties via assignments.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionActivity.ReadDom">
+  <obsolete>
+    Deprecated with M46.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    For each pageload, the number of extensions that read from the DOM.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBlacklist.BlacklistInstalled"
+    enum="ExtensionLocation">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The number of extensions that were blacklisted when already installed,
+    grouped by Extension::Location. Logged when ExtensionService blackists and
+    unloads an installed extension.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBlacklist.BlockCRX" enum="ExtensionLocation">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The number of extensions that have been blocked from installing grouped by
+    Extension::Location. Logged when ExtensionService refuses to install a
+    blacklisted extension.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBlacklist.SilentInstall" enum="ExtensionLocation">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The number of extensions that have been silently installed in a blacklisted
+    state, grouped by Extension::Location. Logged when ExtensionService installs
+    a blacklisted extension without blocking it (ExtensionBlacklist.BlockCRX
+    would be logged otherwise). Typically this will be when a user has a
+    blacklisted extension synced.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBlacklist.UnblacklistInstalled"
+    enum="ExtensionLocation">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The number of extensions that were unblacklisted when installed, grouped by
+    Extension::Location. Logged when ExtensionService unblacklists and loads a
+    blacklisted extension.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBubble.DevModeUserSelection"
+    enum="ExtensionBubbleAction">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The action taken by the user when seeing the bubble, logged right after the
+    action is taken.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBubble.ExtensionsInDevModeCount"
+    units="Developer Mode Extensions">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The total number of extensions found to be loaded under Developer Mode,
+    logged when the devmode bubble is shown (once per startup per profile, if
+    any devmode extension is found).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBubble.ExtensionWipeoutCount" units="Extensions">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The total number of extensions found to be wiped by SideloadWipeout, logged
+    when the wipeout bubble is shown, which is once per startup per profile (as
+    long as wiped extensions were found). Not logged if no extensions of that
+    nature were found.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionBubble.WipeoutUserSelection"
+    enum="ExtensionBubbleAction">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The action taken by the user when seeing the bubble, logged right after the
+    action is taken.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionContentHashFetcher.CreateHashesTime" units="ms">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The time taken to create the computed_hashes.json file for an extension.
+    This happens once for each extension after we get signed values of the
+    expected root node of a tree hashes for each file from the webstore; we then
+    compute the individual block level hashes of the actual files and cache them
+    in computed_hashes.json (assuming we don't detect any mismatches).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionContentHashReader.InitLatency" units="ms">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The time taken to initialize the ContentHashReader for an extension resource
+    load. (The work done is to read in the verified contents and computed hashes
+    data, and compare them to make sure they agree.)
+  </summary>
+</histogram>
+
+<histogram name="ExtensionContentVerifyJob.TimeSpentUS" units="microseconds">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The time taken in computation (hashing actual bytes read and comparing
+    against expected computed hashes values) during an extension resource load.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstalledLoader.ForceDisabled"
+    enum="BooleanForceDisabled">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Counts whether we force-disabled an installed extension at startup because a
+    policy provider indicated it must remain disabled.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallSigner.InvalidCount">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    This is a count of the number of ids that we asked to be signed which the
+    server response indicated were not in the webstore.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallSigner.RequestCount">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    A count of the number of server requests since Chrome started running,
+    recorded each time we do a request. NOTE: when interpreting these values,
+    keep in mind that a user who did 5 server requests during one run of Chrome
+    will log this histogram 5 times with values 1, 2, 3, 4, and 5.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallSigner.ResultWasValid">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Whether the server result received by the extensions install signer was
+    valid or invalid.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallSigner.SecondsSinceLastRequest"
+    units="seconds">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    This records the number of seconds since the last time we've done a request
+    to the server (only during this run of the browser).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallSigner.UptimeAtTimeOfRequest" units="seconds">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Records how many seconds the browser has been running at the time a request
+    to the server is made to get a new install signature.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallVerifier.ActualStatus"
+    enum="ExtensionInstallVerifierStatus">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Logged during InstallVerifier::Init, to indicate the actual enforcement
+    status used (usually determined by the ExtensionInstallVerifier field trial
+    experiment, but possibly modified by command line flags).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallVerifier.ExperimentStatus"
+    enum="ExtensionInstallVerifierStatus">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Logged during InstallVerifier::Init to indicate the enforcement status as
+    determined by the ExtensionInstallVerifier field trial experiment.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallVerifier.GetSignatureResult"
+    enum="ExtensionInstallVerifierGetSignatureResult">
+  <owner>asargent@chromium.org</owner>
+  <summary>The result of the verifier trying to get a new signature.</summary>
+</histogram>
+
+<histogram name="ExtensionInstallVerifier.InitResult"
+    enum="ExtensionInstallVerifierInitResult">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The result of initialization for the extension install verifier.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionInstallVerifier.MustRemainDisabled"
+    enum="ExtensionInstallVerifierMustRemainDisabled">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The outcome for each call to InstallVerifier::MustRemainDisabled.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionOverrideBubble.NtpOverriddenUserSelection"
+    enum="ExtensionBubbleAction">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The action taken by the user when seeing the bubble, notifing them of an
+    extension overriding their new tab page. Logged right after the action is
+    taken.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionHomePage"
+    enum="ExtensionBubbleAction">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The action taken by the user when seeing the bubble, notifing them of an
+    extension overriding their homepage. Logged right after the action is taken.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionSearchEngine"
+    enum="ExtensionBubbleAction">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The action taken by the user when seeing the bubble, notifing them of an
+    extension overriding their search engine. Logged right after the action is
+    taken.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionOverrideBubble.SettingsApiUserSelectionStartupPage"
+    enum="ExtensionBubbleAction">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The action taken by the user when seeing the bubble, notifing them of an
+    extension overriding their startup page. Logged right after the action is
+    taken.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ActiveScriptController.DeniedExtensions"
+    units="Extension Count">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions on a page that wanted to execute a script, required
+    explicit user consent, and were denied permission.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ActiveScriptController.PermittedExtensions"
+    units="Extension Count">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions on a page that wanted to execute a script, required
+    explicit user consent, and were granted permission.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ActiveScriptController.PreventableAdInjectors"
+    units="Extension Count">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions per page that injected an ad and could have been
+    stopped if the user had declined script injection. This is related to the
+    ActivityLog metrics, ExtensionActivity.Ad*. Recorded upon page close or
+    navigation. Only recorded if there was at least one ad injection detected.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ActiveScriptController.ShownActiveScriptsOnPage"
+    units="Number of Actions">
+  <obsolete>
+    Deprecated 2/2014.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions which would display an Active Script Running
+    indiciation to the user. Recorded at page close.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ActiveScriptController.UnpreventableAdInjectors"
+    units="Extension Count">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions per page that injected an ad and that could not
+    have been stopped through script injection permission. This is related to
+    the ActivityLog metrics, ExtensionActivity.Ad*. Recorded upon page close or
+    navigation. Only recorded if there was at least one ad injection detected.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AdInjection.AdType" enum="InjectedAdType">
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The type of ad that was injected.</summary>
+</histogram>
+
+<histogram name="Extensions.AdInjection.InstallLocation"
+    enum="ExtensionLocation">
+  <owner>felt@chromium.org</owner>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The install location of an ad-injecting extension. Recorded upon page close
+    for any extension that injected ads on that page.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ApiBindingGenerationTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time it takes to generate the JavaScript API bindings for a
+    particular extension API. This includes the time from when a JavaScript
+    context tries to access the API, triggering the lazy initializion, to the
+    time when the API object is returned. This is only recorded if the binding
+    is successfully generated. See also Extensions.DidCreateScriptContext_*.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ApiBindingObjectGenerationTime"
+    units="microseconds">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time it takes to create the JavaScript binding object using
+    the binding.js module. This is a strict subset of
+    Extensions.ApiBindingGenerationTime, which includes this work and more.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.APIUse_RelativeURL" enum="UrlResolutionResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Captures the results of URL resolution when relative urls are used in the
+    tabs/windows api.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppLaunch" enum="AppLaunch">
+  <owner>benwells@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The number of times v1 apps are launched grouped by
+    extension_misc::AppLaunchBuckets. See also Apps.AppLaunch for v2 apps.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppLaunchContainer" enum="AppLaunchContainer">
+  <obsolete>
+    Deprecated as of 12/2014, replaced by Apps.HostedAppLaunchContainer.
+  </obsolete>
+  <owner>benwells@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The number of times apps are launched grouped by
+    extensions::LaunchContainer.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppLaunchSource" enum="AppLaunchSource">
+  <owner>benwells@chromium.org</owner>
+  <owner>cylee@chromium.org</owner>
+  <summary>
+    The number of times times apps are launched grouped by
+    extensions::AppLaunchSource.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppLoadedInTab" enum="AppLoadedInTabSource">
+  <owner>lazyboy@chromium.org</owner>
+  <summary>
+    A platform app ended up in a regular tab either by the app page or its
+    background page. Note that this happens unexpectedly right now and we wish
+    to track its usage before removing the supporting code.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppLocation" enum="ExtensionLocation">
+  <owner>benwells@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The number of apps loaded at startup time grouped by Extension::Location.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppsPromo" enum="AppPromoAction">
+  <owner>benwells@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The actions taken in the NTP apps promo grouped by
+    extension_misc::AppsPromoBuckets.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.AppTabLaunchType" enum="ExtensionLaunchType">
+  <owner>benwells@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    The number of apps launched grouped by extensions::LaunchType.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.BackgroundContentsServiceStartupTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to load BackgroundContents for apps at startup when the extension
+    system notifies that it is ready.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.BackgroundPageLoadTime" units="ms">
+  <obsolete>
+    Replaced by Extensions.BackgroundPageLoadTime2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The time for an extension's background page to load.</summary>
+</histogram>
+
+<histogram name="Extensions.BackgroundPageLoadTime2" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The time taken for an extension's persistent background page to load its
+    initial URL.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.BackgroundPageType"
+    units="ExtensionBackgroundPageType">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The type (if any) of background page the extension has. Recorded for
+    installed extensions on startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.BadMessageFunctionName" enum="ExtensionFunctions">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of times each Extension function call sends a bad message,
+    killing the renderer. This may indicate a bug in that API's implementation
+    on the renderer. Note a similar, aggregate metric is BadMessageTerminate_EFD
+    which counts the number of bad messages that are sent overall.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.BadSyncDataReason" enum="BadSyncDataReason">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The reason a valid ExtensionSyncData could not be parsed from a SyncData
+    received from sync.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.BookmarkAppLaunchContainer"
+    enum="AppLaunchContainer">
+  <owner>benwells@chromium.org</owner>
+  <summary>Records the container used for a bookmark app launch.</summary>
+</histogram>
+
+<histogram name="Extensions.CheckForExternalUpdatesTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during
+    ExtensionService::CheckForExternalUpdates.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptExtensionBecameDisabled">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Fired each time an extension was detected to be corrupted (contents not
+    matching an expected content hash from the webstore) and was disabled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptExtensionDisabledReason"
+    enum="CorruptExtensionDisabledReason">
+  <owner>rockot@chromium.org</owner>
+  <summary>
+    The reason why an extension was detected to be corrupted. Recorded each time
+    an extension is disabled due to corruption detection.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptExtensionTotalDisables">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Logged once at startup, this is the value of a counter that is incremented
+    anytime we disable a corrupted extension because its content didn't match an
+    expected content hash.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptExtensionWouldBeDisabled">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Simiar to Extensions.CorruptExtensionBecameDisabled, but fires when we're in
+    a bootstrapping mode and would have disabled an extension.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptPolicyExtensionDetected" enum="BooleanHit">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Fires when we detect corruption in an enterprise policy forced install
+    extension and begin the process of reinstalling it. Compare to
+    CorruptPolicyExtensionResolved to judge success rate.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptPolicyExtensionResolved" units="ms">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Fires when we've successfully resinstalled a corrupt enterprise policy
+    force-installed extension, with a value indicating how long it took
+    end-to-end to complete the reinstall (including download time).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CorruptPolicyExtensionWouldBeDisabled"
+    enum="BooleanHit">
+  <obsolete>
+    Deprecated 9/2016 by fix for Issue 447040.
+  </obsolete>
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Fires when we detect corruption in an enterprise policy forced install
+    extension. See http://crbug.com/447040 for more background on why we don't
+    yet disable these. A useful comparison can be made between this value and
+    the number of policy forced extensions loaded at startup, which is logged in
+    the EXTERNAL_POLICY_DOWNLOAD bucket of the Extensions.ExtensionLocation
+    histogram.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CrxFetchError" enum="NetErrorCodes">
+  <owner>asargent@chromium.org</owner>
+  <summary>Net error results from URLFetcher.</summary>
+</histogram>
+
+<histogram name="Extensions.CrxFetchFailureRetryCountGoogleUrl">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Number of times chrome retried to download an extension with a url on a
+    google.com domain, before eventually giving up.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CrxFetchFailureRetryCountOtherUrl">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Number of times chrome retried to download an extension with a url on a non
+    google.com domain, before eventually giving up.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CrxFetchSuccessRetryCountGoogleUrl">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Number of times chrome retried to download an extension with a url on a
+    google.com domain, before eventually succeeding.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CrxFetchSuccessRetryCountOtherUrl">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Number of times chrome retried to download an extension with a url on a non
+    google.com domain, before eventually succeeding.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.CrxInstallDirPathLength">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Length of the path to the directory under which an extension is installed.
+    This directory is in the user's profile.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Database.Database.Restore"
+    enum="LevelDBDatabaseCorruptionRestoreValue">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The result of an attempt to recover from an attempt to open a database that
+    failed as a result of corruption.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Database.Open" enum="LevelDBStatus">
+  <owner>cmumford@chromium.org</owner>
+  <summary>The result of an open attempt to an Extensions database.</summary>
+</histogram>
+
+<histogram name="Extensions.Database.Restore"
+    enum="LevelDBDatabaseCorruptionRestoreValue">
+  <obsolete>
+    Shipped only in M48. Superceded by Extensions.Database.Database.Restore and
+    Extensions.Database.Value.Restore.
+  </obsolete>
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The result of an attempt to recover from an attempt to open a database that
+    failed as a result of corruption.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Database.Value.Restore"
+    enum="LevelDBValueCorruptionDeleteValue">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The result of an attempt to delete a corrupted value from a database.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DeclarativeRulesStorageInitialization" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time spent until rules storage delegate gets ready.</summary>
+</histogram>
+
+<histogram name="Extensions.DepricatedExternalJsonCount">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of extensions referenced in the depricated external extensions source
+    at path chrome::DIR_DEPRICATED_EXTERNAL_EXTENSIONS.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DialogLoadTime" units="ms">
+  <obsolete>
+    There is no such thing as an extension dialog.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time for a dialog-hosted extension to load.</summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_Blessed" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings per blessed
+    extension context (chrome-extension://... origins within Extension
+    processes, like background pages, options pages, popups).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_BlessedWebPage" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings per blessed web page
+    context (hosted apps).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_ContentScript" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings per content script
+    context.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_Unblessed" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings per unblessed
+    extension context (chrome-extension://... origins hosted in iframes).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_Unspecified" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings in an unknown type
+    of context (this should never happen other than in bizarre circumstances).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_WebPage" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings per web page context
+    (just the chrome.app, chrome.webstore, and possibly chrome.runtime APIs).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidCreateScriptContext_WebUI" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Part of the suite of Extensions.DidCreateScriptContext_* metrics. Records
+    the time taken to install Extension JavaScript bindings per WebUI context
+    (chrome://extensions and so forth).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidInitializeServiceWorkerContextOnWorkerThread"
+    units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Records the time taken to install Extension JavaScript bindings per service
+    worker context.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DidSuppressJavaScriptException"
+    enum="ChromeChannelForHistogram">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Records the Chrome channel when JavaScript exceptions are not gracefully
+    dealt with, and suppressed by C++ instead. These are exceptions generated
+    (or simply not caught and gracefully recovered) in our own internal
+    JavaScript, not from JavaScript code written by developers (that which is
+    typically hosted in CRX files). This should be 0 for unstable channels like
+    canary and dev, because we try *not* to suppress errors and instead kill the
+    renderer and generate a crash report. However, at times we need to suppress
+    even those. Note that this histogram is intended to be tracked over time,
+    per channel, to observe crash rates. Comparisons between
+    stable/beta/dev/canary are unlikely to be meaningful.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Disabled">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions that are disabled at browser startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DisabledForPermissions">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions that are disabled at browser startup due to
+    permissions increases.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DisabledUIUserResponse"
+    enum="ExtensionDisabledUIUserResponse">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    User response to the dialog shown when an extension is disabled due to an
+    update requiring more permissions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DisabledUIUserResponseRemoteInstall"
+    enum="ExtensionDisabledUIUserResponse">
+  <owner>mek@chromium.org</owner>
+  <summary>
+    User response to the dialog shown when an extension is disabled due to it
+    having been installed remotely.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DisableReason" enum="ExtensionDisableReason">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The count of disabled extensions at startup grouped by disble reason from
+    Extension::DisableReason. When an extension is disabled, it can be for one
+    or more reasons (although typically just one), so the sum of these may be
+    greater than 'Extensions.Disabled' which is a count of the number of unique
+    extensions that are disabled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.DocsOfflineIconState" enum="ExtensionIconState">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The state of the toolbar icon for the docs offline extension (visible in the
+    toolbar, overflowed in the menu, or the extension is disabled). Recorded
+    once per startup per (non-incognito) profile.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.EnhancedBookmarksManagerNumEventListeners">
+  <obsolete>
+    Obsolete since the enhanced bookmarks manager is no longer using an event
+    page.
+  </obsolete>
+  <owner>wittman@chromium.org</owner>
+  <summary>
+    The number of event listeners the Enhanced Bookmarks Manager has, measured
+    at profile startup. A value of 0 implies that Chrome has a general bug with
+    event page management, since the bookmarks manager should always have at
+    least one event listener - but a bug with event page management that affects
+    the bookmarks manager is particularly dire.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ErrorCodeFromCrxOpen">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    If opening the CRX file for unpacking fails, this integer is the error code
+    given by the OS.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.EventlessEventPages">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions with event pages that have no registered event
+    listeners at profile startup. (This may indicate something has gone wrong;
+    such event pages will never get started.)
+  </summary>
+</histogram>
+
+<histogram name="Extensions.EventPageActiveTime" units="ms">
+  <obsolete>
+    Replaced by Extensions.EventPageActiveTime2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The time an extension's event page has spent loaded.</summary>
+</histogram>
+
+<histogram name="Extensions.EventPageActiveTime2" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The time between an extension's event page loading its first URL and the
+    event page later shutting down.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.EventPageIdleTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The time an extension's event page has spent unloaded.</summary>
+</histogram>
+
+<histogram name="Extensions.EventPageLoadTime" units="ms">
+  <obsolete>
+    Replaced by Extensions.EventPageLoadTime2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The time for an extension's event page to load.</summary>
+</histogram>
+
+<histogram name="Extensions.EventPageLoadTime2" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The time taken for an extension's event page to load its initial URL.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Events.Dispatch" enum="ExtensionEvents">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Recorded every time an event is dispatched to an extension.</summary>
+</histogram>
+
+<histogram name="Extensions.Events.DispatchToComponent" enum="ExtensionEvents">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Recorded every time an event is dispatched to a *component* extension.
+    Otherwise identical to Extensions.Events.Dispatched.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Events.DispatchToComponentWithSuspendedEventPage"
+    enum="ExtensionEvents">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Recorded every time an event is dispatched to a *component* extension with a
+    suspended event page.  Otherwise identical to
+    Extensions.Events.DispatchWithSuspendedEventPage.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Events.DispatchWithPersistentBackgroundPage"
+    enum="ExtensionEvents">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Recorded every time an event is dispatched to an extension with a persistent
+    background page. The event may or may not have been dispatched to the
+    background page itself, for example it may have been dispatched to its
+    popup. When this metric is recorded, Extensions.Events.Dispatch will also be
+    recorded.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Events.DispatchWithRunningEventPage"
+    enum="ExtensionEvents">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Recorded every time an event is dispatched to an extension with an event
+    page that was already running (i.e. at some point had been woken from its
+    suspended state, see Extensions.Events.DispatchWithSuspendedEventPage). The
+    event may or may not have been dispatched to the event page itself, for
+    example it may have been dispatched to its popup. When this metric is
+    recorded, Extensions.Events.Dispatch will also be recorded.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Events.DispatchWithSuspendedEventPage"
+    enum="ExtensionEvents">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Recorded every time an event is dispatched to an extension with an event
+    page that was suspended. This implies that firing this event woke up the
+    event page. The event may or may not have been dispatched to the event page
+    itself, for example it may have been dispatched to its popup, but regardless
+    it will wake the event page.  When this metric is recorded,
+    Extensions.Events.Dispatch will also be recorded.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionCacheCount">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Number of cached extensions on disk. Reported on Chrome OS during user
+    session start.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionCacheSize" units="MB">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Total size of .crx files in cache on disk. Reported on Chrome OS during user
+    session start.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionFrameMapCacheHit" units="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    True if the cache of the extension frame map was hit during access on the IO
+    thread.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionFrameMapLookupSuccessful" units="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    True if the lookup for a frame in the extension frame map succeeded after a
+    cache miss.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionHostMonitoring.MaxActiveLoading">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The maximum number of ExtensionHosts (primarily background/event pages) that
+    were actively loading at any one time, within the first minute of Chrome
+    startup. Emitted exactly one minute after startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionHostMonitoring.MaxInQueue">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The maximum number of ExtensionHosts (primarily background/event pages) in
+    the queue awaiting being loaded (via an ExtensionHostQueue), within the
+    first minute of Chrome startup. Emitted exactly one minute after startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionHostMonitoring.NumLoaded">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total number of ExtensionHosts that completed loading in the first
+    minute of Chrome startup. Emitted exactly one minute after startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionHostMonitoring.NumQueued">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total number of ExtensionHosts (primarily background/event pages) that
+    were added to a queue to start loading, within the first minute of Chrome
+    startup. These may or may not end up starting, let alone finishing,
+    depending on the queue behavior. Emitted exactly one minute after startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionInstalled">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>An extension has been installed.</summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionLocation" enum="ExtensionLocation">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions loaded at startup time grouped by
+    Extension::Location.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionManagement_RefreshTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during ExtensionManagement::Refresh.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionRendererStateCacheHit" units="Boolean">
+  <obsolete>
+    Deprecated 4/2016. ExtensionRendererState was replaced with
+    ExtensionFrameMap.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    True if the cache for the ExtensionRendererState was hit during a lookup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionRootPathLength">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Length of the Extensions dir path inside the profile directory.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionServiceInitTime">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken for the ExtensionService to initialize, including the time it
+    takes to load the extensions for the service's profile and parse their
+    manifests. This happens during startup and also any time a new profile is
+    loaded.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionServiceNotifyReadyListenersTime">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken for the ExtensionService to notify all ready listeners that the
+    extension system is now ready. This happens as part of the total
+    initialization time of ExtensionService, measured in
+    Extensions.ExtensionServiceInitTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExtensionUninstalled">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>An extension has been uninstalled.</summary>
+</histogram>
+
+<histogram name="Extensions.ExternalExtensionEvent" enum="SideloadUIEvents">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records what happens to extensions that are sideloaded, grouped by the
+    ExternalExtensionEvent enum.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExternalItemState" enum="ExternalItemState">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of sideloaded apps/extensions loaded on startup grouped by
+    enabled/disabled state.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExternalJsonCount">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of extensions referenced in the external extensions source at path
+    chrome::DIR_EXTERNAL_EXTENSIONS.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ExternalWarningUninstallationResult" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Whether or not the uninstallation of an external extension succeeded.
+    Triggered when the external install warning is shown to the user and the
+    user selects to remove the extension.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FeatureProviderStaticInitTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during extensions::FeatureProvider::Static.
+    Only measured while in the browser process.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FileAccessAllowed">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions (and friends) that could have been given access to
+    the file:// scheme, and were, for users that have at least one extension
+    that could have been given access. This excludes anything that doesn't show
+    up in chrome://extensions (platform apps, hosted apps, component
+    extensions), policy-installed extensions, and unpacked extensions. See also
+    Extensions.FileAccessNotAllowed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FileAccessNotAllowed">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions (and friends) that could have been given access to
+    the file:// scheme, but weren't, for users that have at least one extension
+    that could have been given access. This excludes anything that doesn't show
+    up in chrome://extensions (platform apps, hosted apps, component
+    extensions), policy-installed extensions, and unpacked extensions. See also
+    Extensions.FileAccessAllowed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FileInstallation" units="ms">
+  <owner>xiaohuic@chromium.org</owner>
+  <summary>
+    Record the time taken to physically move the extention files from temporary
+    location to the final installation directory. It includes the time to flush
+    the file system if ExtensionUseSafeInstallation field trial is enabled. This
+    is recorded once per extension install/update.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FontSettingsEventRouterCtorTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the FontSettingsEventRouter
+    construction.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FromWebstoreInconsistency"
+    enum="ExtensionFromWebstoreInconcistencyEnum">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of apps/extensions loaded on startup with an inconsistent &quot;from
+    webstore&quot; state. This means an item that is flagged as from_webstore,
+    but with either a non-webstore update_url or an external install location.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.FunctionCalls" enum="ExtensionFunctions">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Number of calls to extension functions.</summary>
+</histogram>
+
+<histogram name="Extensions.Functions.FailedTime" enum="ExtensionFunctions">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Recorded when an extension function call fails and finishes execution. The
+    suffix indicates the exact bucket the function is in. See also
+    Extensions.Functions.FailedTotalExecutionTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Functions.FailedTotalExecutionTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total amount of time it took to execute an extension function that
+    failed from the time the extension function is called to the time the
+    function responds. Note that since some extension functions are inherently
+    slow (anything that requires user interaction, for instance), this is not a
+    definitive source for function performance.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Functions.HandleResponseElapsedTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time it takes to handle a response for an extension API
+    request. Recorded on the renderer side once we receive the response IPC from
+    the browser and have deserialized the arguments and passed them to the JS
+    context. Only recorded if the response is successfully handled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Functions.StartRequestElapsedTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time it takes to start an extension API request. Recorded on
+    the renderer side after we perform JS pre-processing, but includes all
+    serialization and dispatching. Only recorded if the request is successfully
+    dispatched.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Functions.SucceededTime" enum="ExtensionFunctions">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Recorded when an extension function call succeeds and finishes execution.
+    The suffix indicates the exact bucket the function is in. See also
+    Extensions.Functions.SucceededTotalExecutionTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Functions.SucceededTotalExecutionTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total amount of time it took to execute an extension function that
+    succeeded from the time the extension function is called to the time the
+    function responds. Note that since some extension functions are inherently
+    slow (anything that requires user interaction, for instance), this is not a
+    definitive source for function performance.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Functions.SynchronousExecutionTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The synchronous amount of time an extension function takes. Note that many
+    extension functions run asynchronously; see also
+    Extensions.Functions.[Succeeded|Failed]TotalExecutionTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.GetUserDataTempDir" enum="GetUserDataTempDirResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    What happens when the extensions system tries to get a temp dir to unpack
+    in?
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_AutoDisable3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when it is
+    automatically disabled due to a permission increase (e.g., after an
+    extension upgrade). To find places where this histogram may be emitted, look
+    for calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument AutoDisable. For Sync users, this may be reported for each device,
+    depending on whether the Sync update or the extension auto-update happen
+    first.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_Install3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when it was
+    installed. To find places where this histogram may be emitted, look for
+    calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument Install. For Sync users, this is reported for each device.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_InstallAbort3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when installation
+    was aborted (e.g. because the parent window of the confirmation dialog went
+    away), not including installation errors and user cancels. To find places
+    where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    InstallAbort.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_InstallCancel3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when installation
+    was canceled. To find places where this histogram may be emitted, look for
+    calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument InstallCancel.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_Load3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when it was
+    loaded (which happens at profile open or extension install). To find places
+    where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_ReEnable3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when it was
+    re-enabled from a confirmation prompt. To find places where this histogram
+    may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    ReEnable.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_ReEnableAbort3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when the
+    re-enable prompt was aborted (e.g. because the parent window of the
+    confirmation dialog went away), not including installation errors and manual
+    user cancels. To find places where this histogram may be emitted, look for
+    calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument ReEnableAbort.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_ReEnableCancel3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when the
+    re-enable was canceled from the confirmation prompt. To find places where
+    this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    ReEnableCancel.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_Uninstall3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when it was
+    uninstalled. To find places where this histogram may be emitted, look for
+    calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument Uninstall. For Sync users, this is reported for each device.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_WebStoreInstall3" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when it was
+    installed through the web store. To find places where this histogram may be
+    emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    WebStoreInstall. Contrary to the more-general HasPermissions_Install3
+    histogram, this one is NOT reported for each device.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_WebStoreInstallAbort3"
+    enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when installation
+    from the web store was aborted (e.g. because the parent window of the
+    confirmation dialog went away), not including installation errors and user
+    cancels. To find places where this histogram may be emitted, look for calls
+    to ExtensionService::RecordPermissionMessagesHistogram with the argument
+    WebStoreInstallAbort.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HasPermissions_WebStoreInstallCancel3"
+    enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    Whether there were any permissions present in an extension when installation
+    from the web store was canceled. To find places where this histogram may be
+    emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    WebStoreInstallCancel.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HostedAppLaunchContainer" enum="AppLaunchContainer">
+  <owner>benwells@chromium.org</owner>
+  <summary>
+    Records the container used for a hosted app launch. The definition of
+    'launch' for the purposes of this histogram is different to that used for
+    the launch type histograms. This definition is less inclusive, for example
+    it does not include navigations to the hosted app due to normal browsing,
+    which the other definition does include. This definition could be thought of
+    more as explicit launches via a launch surface such as the app launcher,
+    chrome://apps, or a shortcut.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HostedAppUnlimitedStoragePersistentStorageUsage"
+    units="KB">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The usage (in kilobytes) of persistent storage in a hosted app with the
+    unlimitedStorage permission. This is logged each time the storage is used*,
+    so this also serves as a cap of the number of calls that would fail if the
+    app did not have the unlimited storage permission. *Capped at once per 30
+    seconds so as to not impact performance.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HostedAppUnlimitedStorageTemporaryStorageUsage"
+    units="%">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The percentage of &quot;normal&quot; (that is, not unlimited) quota that a
+    hosted app with unlimited storage is currently using. This is logged each
+    time the storage is used*, so the number of times the app would use greater
+    than 100% of the default storage can serve as a cap for the number of calls
+    that would fail if the app did not have the unlimitedStorage permission.
+    *Capped at once per 30 seconds so as to not impact performance.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.HostedAppUnlimitedStorageUsage" units="KB">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The usage (in kilobytes) of a hosted app with the unlimitedStorage api
+    permission, recorded once per run per app the first time we load storage for
+    the hosted app. This is separate from the other metrics on hosted app
+    unlimited storage usage because it is logged once per extension per run.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.IncognitoAllowed">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions (and friends) that could have been allowed in
+    incognito, and were, for users that have at least one extension that could
+    have been allowed. This excludes anything that doesn't show up in
+    chrome://extensions (platform apps, hosted apps, component extensions),
+    policy-installed extensions, and unpacked extensions. See also
+    Extensions.IncognitoNotAllowed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.IncognitoNotAllowed">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions (and friends) that could have been allowed in
+    incognito, but weren't, for users that have at least one extension that
+    could have been allowed. This excludes anything that doesn't show up in
+    chrome://extensions (platform apps, hosted apps, component extensions),
+    policy-installed extensions, and unpacked extensions. See also
+    Extensions.IncognitoAllowed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InitExtensionControlledPrefsTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during
+    ExtensionPrefs::InitExtensionControlledPrefs.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InitPrefGetExtensionsTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the GetExtensions call within
+    ExtensionPrefs::InitPrefStore.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InitPrefStoreTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during ExtensionPrefs::InitPrefStore.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectCssTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time for a CSS file to be injected into a page.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectEnd_BlockingScriptCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Number of blocking scripts injected at document end by extensions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectEnd_ScriptCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Number of scripts injected at document end by extensions.</summary>
+</histogram>
+
+<histogram name="Extensions.InjectEnd_Time" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to inject all scripts at document end by extensions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectIdle_BlockingScriptCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Number of blocking scripts injected at document idle by extensions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectIdle_ScriptCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Number of scripts injected at document idle by extensions.</summary>
+</histogram>
+
+<histogram name="Extensions.InjectIdle_Time" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to inject all scripts at document idle by extensions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectScriptTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Time taken to inject all scripts by extensions.</summary>
+</histogram>
+
+<histogram name="Extensions.InjectStart_BlockingScriptCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Number of blocking scripts injected at document start by extensions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InjectStart_CssCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Number of css files injected by extensions.</summary>
+</histogram>
+
+<histogram name="Extensions.InjectStart_ScriptCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Number of scripts injected at document start by extensions.</summary>
+</histogram>
+
+<histogram name="Extensions.InjectStart_Time" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to inject css/scripts at document start by extensions.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InstallPrompt.Accepted" enum="BooleanAccepted">
+  <owner>meacer@chromium.org</owner>
+  <summary>
+    Whether the user accepted or aborted an extension installation.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InstallPrompt.Type"
+    enum="ExtensionInstallPromptType">
+  <owner>meacer@chromium.org</owner>
+  <summary>
+    Type of the extension install prompt displayed when an extension
+    installation is triggered.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InstallPromptExperiment.ShowDetails"
+    enum="ExtensionInstallPromptExperimentLinkAction">
+  <owner>meacer@chromium.org</owner>
+  <summary>
+    Actions on the show details link grouped by action type when the install
+    prompt trial is running.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InstallPromptExperiment.ShowPermissions"
+    enum="ExtensionInstallPromptExperimentLinkAction">
+  <owner>meacer@chromium.org</owner>
+  <summary>
+    Actions on the show permissions link grouped by action type when the install
+    prompt trial is running.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.InstallSource" enum="ExtensionLocation">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Installs grouped by the location property in prefs.</summary>
+</histogram>
+
+<histogram name="Extensions.InstallType" enum="ExtensionType">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Installs grouped by Extension::HistogramType.</summary>
+</histogram>
+
+<histogram name="Extensions.LoadAll">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The number of extensions and themes loaded at profile open.</summary>
+</histogram>
+
+<histogram name="Extensions.LoadAllComponentTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to load all component extensions at profile open. This happens as
+    part of the total initialization time of ExtensionService, measured in
+    Extensions.ExtensionServiceInitTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadAllTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to load all non-component extensions at profile open. This
+    happens as part of the total initialization time of ExtensionService,
+    measured in Extensions.ExtensionServiceInitTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadAllTime2" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Time taken to load all non-component extensions at profile open and record
+    metrics. This happens as part of the total initialization time of
+    ExtensionService, measured in Extensions.ExtensionServiceInitTime.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadApp">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The number of apps loaded by each user at profile open.</summary>
+</histogram>
+
+<histogram name="Extensions.LoadAppExternal">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of externally managed apps loaded by each user at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadAppUser">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of user-installed apps loaded by each user at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadBrowserAction">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of browser action extensions loaded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadContentPack">
+  <obsolete>
+    Deprecated as of 4/2015. Replaced by ManagedUsers.Whitelist.Count.
+  </obsolete>
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The number of content-pack extensions loaded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadCreationFlags" enum="ExtensionCreationFlags">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The creation flags of all extensions loaded at profile open grouped by
+    Extension::InitFromValueFlags.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadExtension">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The number of extensions loaded at profile open.</summary>
+</histogram>
+
+<histogram name="Extensions.LoadExtensionExternal">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of externally managed extensions loaded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadExtensionUser">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of user-installed extensions loaded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadExternal">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of externally managed extensions and apps loaded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadHostedApp">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of hosted apps loaded by each user at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadNoExtensionAction">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions that had neither a page nor browser action
+    specified in their manifest. Recorded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadPackagedApp">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of legacy packaged apps loaded by each user at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadPlatformApp">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The number of platform apps loaded at profile open.</summary>
+</histogram>
+
+<histogram name="Extensions.LoadTheme">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The number of themes loaded at profile open.</summary>
+</histogram>
+
+<histogram name="Extensions.LoadType" enum="ExtensionType">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of extensions loaded at profile open grouped by
+    Extension::HistogramType.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.LoadUserScript">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of converted user scripts loaded at profile open.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestFetchFailureRetryCountGoogleUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of times chrome retried to download an extension update manifest with
+    a url on a google.com domain, before eventually giving up.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestFetchFailureRetryCountOtherUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of times chrome retried to download an extension update manifest with
+    a url on a non google.com domain, before eventually giving up.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestFetchSuccessRetryCountGoogleUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of times chrome retried to download an extension update manifest with
+    a url on a google.com domain, before eventually succeeding.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestFetchSuccessRetryCountOtherUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of times chrome retried to download an extension update manifest with
+    a url on a non google.com domain, before eventually succeeding.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestReloadNeedsRelocalization">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of extension loads on startup where it is necessary to reload the
+    mainfest because the locale has changed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestReloadNotNeeded">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of extension loads on startup where it is not necessary to reload the
+    extension's manifest.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestReloadUnpackedDir">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of extension loads on startup where it is necessary to reload the
+    manifest because the extension is unpacked.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ManifestVersion">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The manifest version of each loaded extension.</summary>
+</histogram>
+
+<histogram name="Extensions.Messaging.ExtensionPortsCreated"
+    units="number of ports">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of ports created in a given script context at a specific time.
+    Recorded once at the destruction of the script context (when no more ports
+    could be created) if and only if at least one port was created in the
+    context. Only includes ports to extension contexts (i.e., not ports created
+    to tabs or native apps).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Messaging.GetPortIdAsyncTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total amount of time between when an extension opens a new channel and
+    when it receives the global port id from the browser and can begin sending
+    messages.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Messaging.GetPortIdSyncTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of synchronous time taken for the renderer to request an
+    extension message port id from the browser when a new channel is first
+    opened by an extension.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.NetworkDelay" units="ms">
+  <owner>battre@chromium.org</owner>
+  <summary>Time that network requests were blocked due to extensions.</summary>
+</histogram>
+
+<histogram name="Extensions.NetworkDelayPercentage" units="%">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    Percentage of total lifetime a network request was blocked due to an
+    extension.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.NetworkDelayRegistryLoad" units="ms">
+  <owner>battre@chromium.org</owner>
+  <summary>
+    Time that network requests were blocked due to relevant rule registries
+    loading.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.NetworkDelayStartup" units="ms">
+  <obsolete>
+    Never used. Added to source 06/2012. Removed from source and added here
+    09/2016.
+  </obsolete>
+  <summary>
+    Delay of network requests due to waiting for extension declarativeWebRequest
+    rules to be loaded from disk at startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.NonWebstoreLocation" enum="ExtensionLocation">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of apps/extensions with a non-webstore update_url loaded at
+    startup time grouped by Extension::Location.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.NonWebStoreNewTabPageOverrides">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of non-WebStore extensions on startup that override the new tab page.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_AutoDisable" enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_AutoDisable2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it is automatically disabled
+    due to a permission increase (e.g., after an extension upgrade).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_AutoDisable2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_AutoDisable3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it is automatically disabled
+    due to a permission increase (e.g., after an extension upgrade).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_AutoDisable3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it is automatically disabled
+    due to a permission increase (e.g., after an extension upgrade). To find
+    places where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    AutoDisable. For Sync users, this may be reported for each device, depending
+    on whether the Sync update or the extension auto-update happen first.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Install" enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_Install2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was installed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Install2" enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_Install3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was installed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Install3" enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was installed. To find
+    places where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    Install. For Sync users, this is reported for each device.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_InstallAbort"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallAbort2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation was aborted, not
+    including installation errors and user cancels.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_InstallAbort2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallAbort3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation was aborted, not
+    including installation errors and user cancels.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_InstallAbort3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation was aborted (e.g.
+    because the parent window of the confirmation dialog went away), not
+    including installation errors and user cancels. To find places where this
+    histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    InstallAbort.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_InstallCancel"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_InstallCancel2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation was canceled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_InstallCancel2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_InstallCancel3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation was canceled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_InstallCancel3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation was canceled. To
+    find places where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    InstallCancel.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Load" enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_Load2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>The permissions present in an extension when it was loaded.</summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Load2" enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_Load3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>The permissions present in an extension when it was loaded.</summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Load3" enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was loaded (which happens at
+    profile open or extension install). To find places where this histogram may
+    be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument Load.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnable" enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnable2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was re-enabled from a
+    confirmation prompt.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnable2" enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnable3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was re-enabled from a
+    confirmation prompt.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnable3" enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was re-enabled from a
+    confirmation prompt. To find places where this histogram may be emitted,
+    look for calls to ExtensionService::RecordPermissionMessagesHistogram with
+    the argument ReEnable.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnableAbort"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableAbort2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when the re-enable prompt was
+    aborted, not including installation errors and manual user cancels.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnableAbort2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableAbort3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when the re-enable prompt was
+    aborted, not including installation errors and manual user cancels.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnableAbort3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when the re-enable prompt was
+    aborted (e.g. because the parent window of the confirmation dialog went
+    away), not including installation errors and manual user cancels. To find
+    places where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    ReEnableAbort.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnableCancel"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_ReEnableCancel2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when the re-enable was canceled from
+    the confirmation prompt.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnableCancel2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_ReEnableCancel3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when the re-enable was canceled from
+    the confirmation prompt.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_ReEnableCancel3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when the re-enable was canceled from
+    the confirmation prompt. To find places where this histogram may be emitted,
+    look for calls to ExtensionService::RecordPermissionMessagesHistogram with
+    the argument ReEnableCancel.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Uninstall" enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by Extensions.Permissions_Uninstall2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was uninstalled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Uninstall2" enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by Extensions.Permissions_Uninstall3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was uninstalled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_Uninstall3" enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was uninstalled. To find
+    places where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    Uninstall. For Sync users, this is reported for each device.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstall"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by
+    Extensions.Permissions_WebStoreInstall2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was installed through the
+    web store.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstall2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by
+    Extensions.Permissions_WebStoreInstall3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was installed through the
+    web store.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstall3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when it was installed through the
+    web store. To find places where this histogram may be emitted, look for
+    calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument WebStoreInstall. Contrary to the more-general Permissions_Install3
+    histogram, this one is NOT reported for each device.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstallAbort"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by
+    Extensions.Permissions_WebStoreInstallAbort2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation from the web store
+    was aborted, not including installation errors and user cancels.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstallAbort2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by
+    Extensions.Permissions_WebStoreInstallAbort3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation from the web store
+    was aborted, not including installation errors and user cancels.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstallAbort3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation from the web store
+    was aborted (e.g. because the parent window of the confirmation dialog went
+    away), not including installation errors and user cancels. To find places
+    where this histogram may be emitted, look for calls to
+    ExtensionService::RecordPermissionMessagesHistogram with the argument
+    WebStoreInstallAbort.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstallCancel"
+    enum="ExtensionPermission">
+  <obsolete>
+    Deprecated as of 5/2014, replaced by
+    Extensions.Permissions_WebStoreInstallCancel2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation from the web store
+    was canceled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstallCancel2"
+    enum="ExtensionPermission2">
+  <obsolete>
+    Deprecated as of 6/2015, replaced by
+    Extensions.Permissions_WebStoreInstallCancel3.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation from the web store
+    was canceled.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.Permissions_WebStoreInstallCancel3"
+    enum="ExtensionPermission3">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>rpaquay@chromium.org</owner>
+  <summary>
+    The permissions present in an extension when installation from the web store
+    was canceled. To find places where this histogram may be emitted, look for
+    calls to ExtensionService::RecordPermissionMessagesHistogram with the
+    argument WebStoreInstallCancel.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.PopupCreateTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The time taken between a user clicking on a button to open a popup, and the
+    popup finishing loading its initial URL. This is a good way to measure the
+    UI responsiveness of extension popups. It will be strictly larger than
+    Extensions.PopupLoadTime2, which only measures the time it takes to load -
+    there may be a delay between clicking and starting to load, for example, if
+    the popup's host got caught in a queue.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.PopupLoadTime" units="ms">
+  <obsolete>
+    Replaced by Extensions.PopupLoadTime2.
+  </obsolete>
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>The time for an Extension's popup to load.</summary>
+</histogram>
+
+<histogram name="Extensions.PopupLoadTime2" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The time taken for an extension popup to load its initial URL. This may not
+    include the time taken for an extension process to start, if the extension
+    already has a background page running. It does not necessarily correlate
+    with the amount of time since the popup was *clicked* either, since there
+    may be a delay between the user clicking and the loading started.
+    Extensions.PopupCreateTime measures this instead.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ProcessManagerStartupHostsTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The time taken to start up persistent background pages for extensions in
+    ExtensionProcessManager when the extension system notifies that it is ready.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ResetPermissionsIncrease" enum="Boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Whether the DISABLE_PERMISSIONS_INCREASE disable reason was removed from an
+    extension while checking for a permissions increase. Recorded during startup
+    and on reload and update, for each extension that has the
+    DISABLE_PERMISSIONS_INCREASE reason.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ResourceDirectoryTimestampQueryLatency" units="ms">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The initialization latency (in milliseconds) introduced to each extension
+    resource request by querying the directory timestamp.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ResourceLastModifiedDelta" units="seconds">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The difference in seconds between an extension resource's last modification
+    time and its extension base directory's creation time. Recorded on each
+    extension resource request if the difference is non-negative (i.e., the
+    resource's last modification time is more recent than the directory's
+    creation time.) For cases where the directory creation date is more recent,
+    see Extensions.ResourceLastModifiedNegativeDelta instead.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ResourceLastModifiedNegativeDelta" units="seconds">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The absolute difference in seconds between an extension resource's last
+    modification time and extension base directory's creation time. Recorded on
+    each extension resource request if the difference is negative (i.e., the
+    directory's creation time is more recent than the resource's last
+    modification time.) For cases where the resource modification time is more
+    recent, see Extensions.ResourceLastModifiedDelta instead.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackFailure">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Count the number of times a sandboxed extension unpack fails.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackFailureReason"
+    enum="ExtensionUnpackFailureReason">
+  <owner>asargent@chromium.org</owner>
+  <summary>What caused a sandboxed extension unpack to fail?</summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackFailureTime">
+  <owner>asargent@chromium.org</owner>
+  <summary>Time taken to unpack an extension, when the unpack fails.</summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackHashCheck" enum="BooleanValidHashSum">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Whether a CRX file hash sum was the same as in an updater manifest.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackInitialCrxPathLength">
+  <owner>asargent@chromium.org</owner>
+  <summary>Length of the initial path to the CRX to be unpacked.</summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackLinkFreeCrxPathLength">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Length of the normalized (link/junction free) path to the temporary copy of
+    a CRX made during unpacking.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRate">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which a CRX file is unpacked in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRate1To2mB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which CRX files 1MB to 2MB are unpacked in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRate2To5mB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which CRX files 2MB to 5MB are unpacked in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRate50kBTo1mB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which CRX files 50kB to 1MB are unpacked in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRate5To10mB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which CRX files 5MB to 10 MB are unpacked in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRateOver10mB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which CRX files larger than 10MB are unpacked in Kilobytes per
+    second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackRateUnder50kB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Rate at which CRX files under 50 KB are unpacked in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackSuccess">
+  <owner>asargent@chromium.org</owner>
+  <summary>Count the number of times a sandboxed CRX unpack succeeds.</summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackSuccessCantGetCrxSize">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Count the number of times a sandboxed CRX unpack succeeds, but we can't get
+    the file size.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackSuccessCrxSize">
+  <owner>asargent@chromium.org</owner>
+  <summary>Size of the .crx file, in KB, when the unpack succeeds.</summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackSuccessTime">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Time taken to unpack an extension, when the unpack succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackTempCrxPathLength">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Length of the path of the temporary copy of a CRX made during unpacking.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SandboxUnpackUnpackedCrxPathLength">
+  <owner>asargent@chromium.org</owner>
+  <summary>Length of the path under which a CRX is unpacked.</summary>
+</histogram>
+
+<histogram name="Extensions.SettingsQuotaExceeded.BytesPerSetting">
+  <obsolete>
+    Removed in September, 2016
+  </obsolete>
+  <summary>
+    Emitted when QuotaExceededError was called due to an extension using too
+    many bytes for a given setting.  The number has no natural numerator
+    (normalizing factor) and thus is not particularly useful.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SettingsQuotaExceeded.KeyCount">
+  <obsolete>
+    Removed in September, 2016
+  </obsolete>
+  <summary>
+    Emitted when QuotaExceededError was called due to an extension using too
+    many keys.  The number has no natural numerator (normalizing factor) and
+    thus is not particularly useful.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SettingsQuotaExceeded.TotalBytes">
+  <obsolete>
+    Removed in September, 2016
+  </obsolete>
+  <summary>
+    Emitted when QuotaExceededError was called due to an extension using too
+    many bytes.  The number has no natural numerator (normalizing factor) and
+    thus is not particularly useful.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ShouldAllowOpenURL.Failure"
+    enum="ShouldAllowOpenURLFailureReason">
+  <owner>alexmos@chromium.org</owner>
+  <summary>
+    When the web-accessible resource check in
+    ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL fails, this
+    records the reason for the failure.  This check is performed on navigations
+    that utilize the OpenURL path as well as on transfers.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.StartupDelay" units="ms">
+  <owner>asargent@chromium.org</owner>
+  <summary>The time one extension delays network requests at startup.</summary>
+</histogram>
+
+<histogram name="Extensions.StartupDelay_Total" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total time extensions delay network requests at startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.StorageFrontendInitTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during StorageFrontend::Init.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.SyncGetMessageBundle" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of synchronous time spent retrieving an extension's message
+    bundle (the collection of its i18n resources) from the browser.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ThrottledNetworkRequestDelay" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The duration by which a network request was delayed while waiting for
+    extension user script load. Recorded once per request that is delayed, at
+    the time the resource resumes loading.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ThrottledNetworkRequests" units="requests">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total number of network requests that were delayed by extension user
+    script load. Recorded once each time network requests may have been delayed
+    by user script load (i.e., once at the end of each batch of script loads).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.ToolstripLoadTime" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time taken to load a toolstrip.</summary>
+</histogram>
+
+<histogram name="Extensions.UninstallDialogAction"
+    enum="ExtensionUninstallDialogAction">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The action that was taken from an extension uninstall dialog. Recorded once
+    per dialog shown. Only recorded if all possible actions (including report
+    abuse) were available on the dialog.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UninstallSource" enum="ExtensionUninstallSource">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The source for the extension uninstall. This is only recorded if an
+    uninstall dialog is shown to the user (i.e., it is not recorded for internal
+    &quot;cleanups&quot;).
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UninstallType" enum="ExtensionType">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>Uninstalls grouped by Extension::HistogramType.</summary>
+</histogram>
+
+<histogram name="Extensions.UnpackFailureInstallCause"
+    enum="ExtensionInstallCause">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Count failing CRX installs, grouped by the way an extension can be
+    installed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UnpackFailureInstallSource"
+    enum="ExtensionLocation">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Count successful CRX installs, grouped by the location property in prefs.
+    installed.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UnpackSuccessInstallCause"
+    enum="ExtensionInstallCause">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Count successful CRX installs, grouped by the cause of the install.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UnpackSuccessInstallSource"
+    enum="ExtensionLocation">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    Count successful CRX installs, grouped by the location property in prefs.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckApp">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of legacy packaged apps and hosted apps that were checked during
+    an update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckExtension">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of extensions that were checked during an update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckGap" units="minutes">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time in minutes between update checks.</summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckGoogleUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of crx's with a Google-hosted update URL that were checked during
+    an update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckNoUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of crx's with no update URL checked during an update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckOtherUrl">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of crx's with a non-Google update URL that were checked during an
+    update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckPackagedApp">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of packaged apps that were checked during an update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateCheckTheme">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of themes that were checked during an update check.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateOnLoad">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of extensions that were updated at browser startup.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdaterWriteCrx" enum="ExtensionFileWriteResult">
+  <obsolete>
+    Deprecated 10/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    What happened when the extension updater tried to write a file?
+  </summary>
+</histogram>
+
+<histogram name="Extensions.UpdateSource" enum="ExtensionLocation">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Updates grouped by the location property in prefs.</summary>
+</histogram>
+
+<histogram name="Extensions.UpdateType" enum="ExtensionType">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Updates grouped by Extension::HistogramType.</summary>
+</histogram>
+
+<histogram name="Extensions.WebRequestEventFoundFrame" units="boolean">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    Whether or not the render frame lookup for a given webRequest event
+    succeeded.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.WebstoreDownload.FileDownload" units="ms">
+  <owner>xiaohuic@chromium.org</owner>
+  <summary>
+    The time spent to download the crx file from the webstore to local disk.
+    This is recorded once per successful download.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.WebstoreDownload.InterruptReason"
+    enum="InterruptReason">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The reason a webstore download was interrupted.</summary>
+</histogram>
+
+<histogram name="Extensions.WebstoreDownload.InterruptReceivedKBytes"
+    units="KB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of KBytes received for a webstore download before it was
+    interrupted.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.WebstoreDownload.InterruptTotalKBytes" units="KB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total expected size in KBytes of an interrupted webstore download.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.WebstoreDownload.InterruptTotalSizeUnknown"
+    enum="Boolean">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Tracks whether the total size of an interrupted webstore download was known.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time between starting the provisional load and fully loading
+    the document in the main frame of the chrome://extensions page. This
+    corresponds to the WebContentsObserver::DocumentLoadedInFrame method.
+  </summary>
+</histogram>
+
+<histogram name="Extensions.WebUi.LoadCompletedInMainFrame" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The amount of time between starting the provisional load and having
+    completed the onload handler in the main frame of the chrome://extensions
+    page. This corresponds to the
+    WebContentsObserver::DocumentOnLoadCompletedInMainFrame method.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionService.AddVerified" enum="BooleanSuccess">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records whether adding a new/updated extension to the install verifier
+    succeeded.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionService.VerifyAllSuccess"
+    enum="ExtensionServiceVerifyAllSuccess">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The outcome of a call to ExtensionService::VerifyAllExtensions, whether it
+    was called for bootstrapping or another reason (extension
+    installed/uninstalled, etc.).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionSettings.ShouldDoVerificationCheck" enum="Boolean">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When loading the chrome://extensions page, this records whether we decided
+    to do a verification check against the server (because the user had one or
+    more extensions disabled due to verification failure).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionToolbarModel.BrowserActionsCount">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The number of icons the Browser Actions Container knows about (visible or in
+    the overflow bucket). Does not count icons that have been permanently hidden
+    by the user. Measured once per startup per (non-incognito) profile.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionToolbarModel.BrowserActionsPermanentlyHidden">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The number of Browser Action icons the user has elected to permanently hide
+    (as opposed to putting them in the overflow bucket). Measured once per
+    startup per (non-incognito) profile.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionToolbarModel.BrowserActionsVisible">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The number of visible icons in the Browser Actions Container (visible as in
+    number of icons not in the overflow bucket). 0 means all icons are in the
+    overflow bucket. MAX_INT means the toolbar is always showing all icons.
+    Measured once per startup per (non-incognito) profile but only for those
+    profiles that have one or more browser actions showing in the toolbar.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.Latency" units="ms">
+  <owner>asargent@chromium.org</owner>
+  <summary>The time taken to complete an extension url request.</summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.OnReadCompleteError" enum="NetErrorCodes">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The error code for failures of incremental reads of a file stream for a
+    chrome-extension:// URL. (See also ExtensionUrlRequest.OnReadCompleteResult
+    for the success case).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.OnReadCompleteResult">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The result of an incremental read of a file stream for a chrome-extension://
+    URL, representing a byte count. Logged in success cases (see also
+    ExtensionUrlRequest.OnReadCompleteError).
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.SeekPosition">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    When fetching a chrome-extension:// URL, this indicates the first byte
+    position we read from. This will be greater than 0 in cases such as XHR's
+    with a Range header, but will normally be 0 in the typical case of reading
+    the entire file. This helps identify how frequently partial file reads are
+    taking place.
+  </summary>
+</histogram>
+
+<histogram name="ExtensionUrlRequest.TotalKbRead" units="KB">
+  <owner>asargent@chromium.org</owner>
+  <summary>
+    The total number of bytes read for a chrome-extension:// URL, logged when
+    the job is finished (either successfully or not).
+  </summary>
+</histogram>
+
+<histogram name="FaultTolerantHeap" enum="FaultTolerantHeap">
+  <owner>brucedawson@chromium.org</owner>
+  <summary>
+    Records several bits of information about whether the Windows
+    FaultTolerantHeap might be enabled. This is logged (from a delayed task)
+    when the browser process starts up.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.CloudImport.UserAction"
+    enum="CloudImportUserAction">
+  <owner>smckay@google.com</owner>
+  <summary>
+    Chrome OS File Browser - Specific actions taken by user such initiating
+    cloud import, canceling import, selecting a directory, or opting-in to
+    Drive&gt;Photos sync.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.Create" enum="FileDialogType">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Chrome OS File Browser opening mode.</summary>
+</histogram>
+
+<histogram name="FileBrowser.DirectoryScan" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: time to scan a directory. Measured on every File
+    Browser directory change.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Changed"
+    enum="BooleanEnabled">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Tracks whether download destination is set to a Google Drive folder when the
+    download destination is changed by the user in the settings page.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.DownloadDestination.IsGoogleDrive.Started"
+    enum="BooleanEnabled">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Tracks whether download destination is set to a Google Drive folder on
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.DownloadsCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: number of files and directories in the Downloads
+    directory (not including the contents of nested directories). Computed every
+    time the File Browser current directory changes to Downloads.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.FolderShortcut.Add">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: this is recorded when the user adds a folder
+    shortcut.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.FolderShortcut.Count">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: number of saved folder shorcuts. This is recorded
+    when Files.app is launched.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.FolderShortcut.Navigate">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: this is recorded when the user clicks or selects a
+    folder shortcut and is navigated to the target folder.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.FolderShortcut.Remove">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: this is recorded when the user removes a folder
+    shortcut.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.HardUnpluggedAroundSuspend.TimeSinceResume"
+    units="ms">
+  <obsolete>
+    The bug which the UMA was investigating got fixed.
+  </obsolete>
+  <owner>hirono@chromium.org</owner>
+  <summary>
+    Chrome OS File Browser: time from the SuspendDone event to the DiskRemoved
+    event. The UMA is added temporarily for crbug.com/433734.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.HardUnpluggedAroundSuspend.TimeUntilSuspend"
+    units="ms">
+  <obsolete>
+    The bug which the UMA was investigating got fixed.
+  </obsolete>
+  <owner>hirono@chromium.org</owner>
+  <summary>
+    Chrome OS File Browser: time from the DiskRemoved event to the Suspend
+    event. The UMA is added temporarily for crbug.com/433734.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.Load" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser is an built-in extension without a background page.
+    Its main.html file is loaded every time the user opens a File Browser tab or
+    a file chooser dialog. The file is fairly large and the initialization is
+    pretty expensive.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.OpeningFileType" enum="FileType">
+  <obsolete>
+    Deprecated 4/2013, and replaced by FileBrowser.ViewingFileType.
+  </obsolete>
+  <owner>joshwoodward@google.com</owner>
+  <summary>File types that were tried to be opened through browser.</summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.DisplayTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Editor: time to display an image. Measured from the moment
+    the user selected the image till the moment it is displayed (not counting
+    the low resolution preview).
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.FileType" enum="PhotoEditorFileType">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Chrome OS Photo Editor: the type of the file opened.</summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.LoadMode" enum="PhotoEditorLoadMode">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Chrome OS Photo Editor: the way the image has been loaded.</summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.LoadTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Chrome OS Photo Editor: time to load an image from a file.</summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.SaveResult"
+    enum="PhotoEditorSaveResult">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Editor: the result of a file save operation.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.SaveTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Chrome OS Photo Editor: time to save an image to a file.</summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.Size.MB" units="MBytes">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Editor: size of an image file in megabytes. Measured on
+    every image load.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.Size.MPix" units="MPixels">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Editor: size of an image in megapixels. Measured on every
+    image load.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoEditor.Tool" enum="PhotoEditorToolType">
+  <owner>joshwoodward@google.com</owner>
+  <summary>Chrome OS Photo Editor: the button which the user clicked.</summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoImport.Action" enum="ExternalDeviceAction">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Import flow: action chosen in the Action Choice dialog for
+    the external device.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoImport.ImportCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Import flow: the number of photos imported. Measured on
+    every successfull import operation.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoImport.ImportPercentage" units="%">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Import flow: the percent of photos imported among all the
+    photos on the device. Measured on every successfull import operation.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoImport.Load" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Import flow: time to load the action dialog. Measured
+    between the moment window appears and the moment user see all available
+    actions for the device.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.PhotoImport.Scan" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS Photo Import flow: time to scan the external device.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.QuickView.FileType" enum="ViewFileType">
+  <owner>oka@google.com</owner>
+  <summary>File types that were tried to be opened with quick view.</summary>
+</histogram>
+
+<histogram name="FileBrowser.QuickView.FileTypeOnLaunch" enum="ViewFileType">
+  <owner>oka@google.com</owner>
+  <summary>File types that were selected when quick view is launched.</summary>
+</histogram>
+
+<histogram name="FileBrowser.QuickView.VolumeType" enum="FileManagerVolumeType">
+  <owner>oka@google.com</owner>
+  <summary>The volume type where quick view is opened.</summary>
+</histogram>
+
+<histogram name="FileBrowser.SuggestApps.Close"
+    enum="SuggestAppsDialogCloseReason">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: the reason why the suggest apps dialog was closed.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.SuggestApps.Install"
+    enum="SuggestAppsDialogInstall">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: whether the Webstore item user selected was
+    successfully installed or not.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.SuggestApps.Load" enum="SuggestAppsDialogLoad">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: whether the initialization of the dialog succeeded
+    or not.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.SuggestApps.LoadTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Chrome OS File Browser: time to load the suggest apps dialog. Measured
+    between the moment window appears and the moment all the contents in the
+    dialog including the Chrome Webstore widget are ready.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.ViewingFileType" enum="ViewFileType">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    File types that were tried to be viewed through browser. This is recorded
+    when the user tries to view a file from Files.app.
+  </summary>
+</histogram>
+
+<histogram name="FileBrowser.VolumeType" enum="FileManagerVolumeType">
+  <owner>kinaba@chromium.org</owner>
+  <summary>
+    Chrome OS File Browser: counts the number of times volumes are mounted for
+    each volume type.
+  </summary>
+</histogram>
+
+<histogram name="FileSystem.DirectoryDatabaseInit"
+    enum="FileSystemDatabaseInitResult">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of FileSystemDirectoryDatabase initialization.</summary>
+</histogram>
+
+<histogram name="FileSystem.DirectoryDatabaseRepair"
+    enum="DirectoryDatabaseRepairResult">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of FileSystemDirectoryDatabase repair.</summary>
+</histogram>
+
+<histogram name="FileSystem.OpenFileSystem" enum="OpenFileSystemResult">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    The success or the cause of failure for each call to OpenFileSystem().
+  </summary>
+</histogram>
+
+<histogram name="FileSystem.OpenFileSystemDetail" enum="FileSystemErrors">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of opening a filesystem.</summary>
+</histogram>
+
+<histogram name="FileSystem.OpenFileSystemDetailNonthrottled"
+    enum="FileSystemErrors">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of opening a non-throttled filesystem.</summary>
+</histogram>
+
+<histogram name="FileSystem.OriginDatabaseInit"
+    enum="FileSystemDatabaseInitResult">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of FileSystemOriginDatabase initialization.</summary>
+</histogram>
+
+<histogram name="FileSystem.OriginFailedCanCommitURL" enum="BooleanHit">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    Logged when we fail the permission validation of the filesystem URL origin,
+    from ChildProcessSecurityPolicy::HasPermissionsForFileSystemFile. This is
+    not expected to happen in normal operation.
+  </summary>
+</histogram>
+
+<histogram name="FileSystem.PersistentOriginsCount">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Number of origins that have persistent filesystem. Measured when the Quota
+    system queries the filesystem subsystem about its entire usage, which
+    usually happens when one of the storage subsystem methods is called for the
+    first time.
+  </summary>
+</histogram>
+
+<histogram name="FileSystem.TemporaryOriginsCount">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Number of origins that have temporary filesystem. Measured when the Quota
+    system queries the filesystem subsystem about its entire usage, which
+    usually happens when one of the storage subsystem methods is called for the
+    first time.
+  </summary>
+</histogram>
+
+<histogram name="GCM.AndroidGcmReceiverError" enum="GcmReceiverStatus">
+  <obsolete>
+    Deprecated as of 01/2016. The error has been fixed by GCM. (crbug/580367)
+  </obsolete>
+  <owner>khushalsagar@chromium.org</owner>
+  <summary>Result of a message received by the GcmReceiver on Android.</summary>
+</histogram>
+
+<histogram name="GCM.APICallUnregister">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of times when gcm.unregister API is called.</summary>
+</histogram>
+
+<histogram name="GCM.CheckinCompleteTime" units="ms">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time taken to complete a GCM checkin request successfully. If the
+    checkin is retried multiple times, the length of time is counted for the
+    last successful retry.
+  </summary>
+</histogram>
+
+<histogram name="GCM.CheckinRequestStatus" enum="GCMCheckinRequestStatus">
+  <owner>juyik@chromium.org</owner>
+  <summary>Status code of the outcome of a GCM checkin request.</summary>
+</histogram>
+
+<histogram name="GCM.CheckinRetryCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of retries before a GCM checkin succeeds.</summary>
+</histogram>
+
+<histogram name="GCM.ConnectedViaProxy" enum="Boolean">
+  <owner>zea@chromium.org</owner>
+  <summary>Whether the GCM connection was made via a proxy or not.</summary>
+</histogram>
+
+<histogram name="GCM.ConnectionDisconnectErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>zea@chromium.org</owner>
+  <summary>URL response and error codes from GCM disconnect events.</summary>
+</histogram>
+
+<histogram name="GCM.ConnectionEndpoint" enum="GCMEndpoints">
+  <owner>zea@chromium.org</owner>
+  <summary>Number of connections made to each specific MCS endpoint.</summary>
+</histogram>
+
+<histogram name="GCM.ConnectionFailureErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>zea@chromium.org</owner>
+  <summary>URL response and error codes from GCM connection attempts.</summary>
+</histogram>
+
+<histogram name="GCM.ConnectionLatency" units="ms">
+  <owner>juyik@chromium.org</owner>
+  <summary>
+    The time between the initiation of a connection and the successful
+    completion of it.
+  </summary>
+</histogram>
+
+<histogram name="GCM.ConnectionResetReason" enum="GCMConnectionResetReason">
+  <owner>zea@chromium.org</owner>
+  <summary>Reasons for GCM connection resets.</summary>
+</histogram>
+
+<histogram name="GCM.ConnectionSuccessRate" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    GCM connection success rate. Does not take into account login success. See
+    GCM.ConnectionFailureErrorCode for a breakdown of connection failure
+    reasons.
+  </summary>
+</histogram>
+
+<histogram name="GCM.ConnectionUpTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time (from login until reset) that a GCM connection was active.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Crypto.CreateKeySuccessRate" enum="BooleanSuccess">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Success rate of writing new keying material to the GCM key store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Crypto.DecryptMessageResult" enum="GCMDecryptionResult">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Result of decryption on a received GCM message, which includes unencrypted
+    messages, successfully decrypted messages and decryption failures.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Crypto.GetKeySuccessRate" enum="BooleanSuccess">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Success rate of reading keying material from the GCM key store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Crypto.InitKeyStoreSuccessRate" enum="BooleanSuccess">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Success rate of initializing the LevelDB back-end of the GCM key store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Crypto.LoadKeyStoreSuccessRate" enum="BooleanSuccess">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Success rate of loading existing keying material in the GCM key store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Crypto.RemoveKeySuccessRate" enum="BooleanSuccess">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Success rate of removing keying material from the GCM key store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.Database.Open" enum="LevelDBStatus">
+  <owner>cmumford@chromium.org</owner>
+  <summary>The result of a database open attempt by the GCM store.</summary>
+</histogram>
+
+<histogram name="GCM.DataMessageBurstReceivedInterval" units="ms">
+  <owner>juyik@chromium.org</owner>
+  <summary>
+    Interval between two successive received data message bursts.
+  </summary>
+</histogram>
+
+<histogram name="GCM.DataMessageReceived" units="messages">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Number of DATA_MESSAGE messages for registered application IDs and
+    DELETED_MESSAGES messages for any registration ID received from Google Cloud
+    Messaging. Recorded when processing the received message.
+  </summary>
+</histogram>
+
+<histogram name="GCM.DataMessageReceivedHasRegisteredApp"
+    enum="BooleanRegistered">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records whether a corresponding registration was found for each received
+    DATA_MESSAGE or DELETED_MESSAGES message from Google Cloud Messaging.
+    Recorded while processing the received message.
+  </summary>
+</histogram>
+
+<histogram name="GCM.FirstReceivedDataMessageLatencyAfterConnection" units="ms">
+  <owner>juyik@chromium.org</owner>
+  <summary>
+    The time between the successful completion of the connection and the arrival
+    of the first data message.
+  </summary>
+</histogram>
+
+<histogram name="GCM.HeartbeatMissedDelta" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    If a heartbeat was missed, the time delta by which it was missed (in system
+    time, not ticks).
+  </summary>
+</histogram>
+
+<histogram name="GCM.IncomingSendErrors" units="messages">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Number of SEND_ERROR messages received from Google Cloud Messaging. Recorded
+    when processing the received message.
+  </summary>
+</histogram>
+
+<histogram name="GCM.LoadStatus" enum="GCMLoadStatus">
+  <owner>jianli@chromium.org</owner>
+  <summary>Status code of loading from the persistent GCM store.</summary>
+</histogram>
+
+<histogram name="GCM.LoadSucceeded" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated as of 2/2015.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Success indicates successfully loading an initialized persistent GCM store
+    at startup time. Failure indicates a failure loading the store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.NumThrottledApps">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of applications hitting GCM per-app outstanding message limits at
+    startup time.
+  </summary>
+</histogram>
+
+<histogram name="GCM.NumUsers">
+  <obsolete>
+    Deprecated as of 3/2014.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of GCM users associated with this client at startup time.
+  </summary>
+</histogram>
+
+<histogram name="GCM.OutgoingMessageTTL" enum="GCMOutgoingMessageTTLCategory">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Category of TTL specified in the outgoing message: 0, less than or equal to
+    1 minute, less than or equal to 1 hour and etc.
+  </summary>
+</histogram>
+
+<histogram name="GCM.ReceivedDataMessageBurstSize" units="messages">
+  <owner>juyik@chromium.org</owner>
+  <summary>Number of messages in a received GCM data message burst.</summary>
+</histogram>
+
+<histogram name="GCM.ReceivedDataMessageIntervalWithinBurst" units="ms">
+  <owner>juyik@chromium.org</owner>
+  <summary>
+    Interval between messages within a received GCM data message burst.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RegistrationCompleteTime" units="ms">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time taken to complete a GCM registration request successfully. If
+    the registration is retried multiple times, the length of time is counted
+    for the last successful retry.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RegistrationRequest" units="requests">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Number of registration requests sent to Google Cloud Messaging. Recorded
+    immediately after the request has started.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RegistrationRequestStatus"
+    enum="GCMRegistrationRequestStatus">
+  <owner>juyik@chromium.org</owner>
+  <summary>
+    Status code of the outcome of a GCM registration request. The Unknown error
+    case was split up in M56 (merged mid-beta to M55) to separate out the
+    Response parsing failed, Internal server error, Quota exceeded, and Device
+    has too many registrations cases.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RegistrationRetryCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of retries before a GCM registration succeeds.</summary>
+</histogram>
+
+<histogram name="GCM.RegistrationSenderIdCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of sender IDs specified in a registration request.</summary>
+</histogram>
+
+<histogram name="GCM.ResetStore" enum="GCMResetStoreError">
+  <obsolete>
+    Deprecated in M56 in favor of GCM.ResetStoreError
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Reports the problem encountered when resetting the GCM store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.ResetStoreError" enum="GCMResetStoreError">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Reports the problem encountered when resetting the GCM store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RestoredIncomingMessages">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of unacknowledged incoming messages restored from the persistent
+    store at startup.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RestoredOutgoingMessages">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of pending outgoing messages restored from the persistent store at
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="GCM.RestoredRegistrations">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of registrations restored from the persistent store at startup.
+  </summary>
+</histogram>
+
+<histogram name="GCM.SendMessageStatus" enum="GCMSendMessageStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Result of sending an upstream message through Google Cloud Messaging.
+    Recorded when the message has either been queued, sent, or has been dropped
+    because it expired or an error happened.
+  </summary>
+</histogram>
+
+<histogram name="GCM.StoreDestroySucceeded" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Success indicates successfully destroying the GCM persistent store. Failure
+    indicates a failure destroying the persistence store. GCM store will be
+    destroyed when the profile has been signed out.
+  </summary>
+</histogram>
+
+<histogram name="GCM.StoreSizeKB" units="KB">
+  <owner>zea@chromium.org</owner>
+  <summary>Size of the GCM persistent store in kilobytes at startup.</summary>
+</histogram>
+
+<histogram name="GCM.StoreUpdateSucceeded" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Success indicates successfully updating the GCM persistent store on message
+    update. Failure indicates a failure updating the persistence store.
+  </summary>
+</histogram>
+
+<histogram name="GCM.SuspendTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time elapsed from machine suspend until resume.</summary>
+</histogram>
+
+<histogram name="GCM.UnregistrationCompleteTime" units="ms">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time taken to complete a GCM unregistration request successfully.
+    If the unregistration is retried multiple times, the length of time is
+    counted for the last successful retry.
+  </summary>
+</histogram>
+
+<histogram name="GCM.UnregistrationRequest" units="requests">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Number of unregistration requests sent to Google Cloud Messaging. Recorded
+    immediately after the request has started.
+  </summary>
+</histogram>
+
+<histogram name="GCM.UnregistrationRequestStatus"
+    enum="GCMUnregistrationRequestStatus">
+  <owner>juyik@chromium.org</owner>
+  <summary>Status code of the outcome of a GCM unregistration request.</summary>
+</histogram>
+
+<histogram name="GCM.UnregistrationRetryCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of retries before a GCM unregistration succeeds.</summary>
+</histogram>
+
+<histogram name="GCM.UserSignedIn" enum="Boolean">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Indicates whether the user was signed in when GCM started up.
+  </summary>
+</histogram>
+
+<histogram name="GCMInvalidations.IncomingMessageStatus"
+    enum="GCMInvalidationsIncomingMessageStatus">
+  <owner>pavely@chromium.org</owner>
+  <summary>
+    Status of parsing incoming invalidations message from GCM channel.
+  </summary>
+</histogram>
+
+<histogram name="GCMInvalidations.OutgoingMessageStatus"
+    enum="GCMInvalidationsOutgoingMessageStatus">
+  <owner>pavely@chromium.org</owner>
+  <summary>
+    Status of sending outgoing invalidations message through GCM.
+  </summary>
+</histogram>
+
+<histogram name="GData.AuthSuccess" enum="GDataAuthResult">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Result of the authentication for Drive.</summary>
+</histogram>
+
+<histogram name="GData.EntireFeedLoadTime" units="microseconds">
+  <obsolete>
+    Deprecated 9/2012, and replaced by Drive.EntireFeedLoadTime
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time spent to load the entire file system information from the server
+  </summary>
+</histogram>
+
+<histogram name="GData.EntryKind" enum="GDataEntryKind">
+  <obsolete>
+    Deprecated 9/2012, and replaced by Drive.EntryKind
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Provides breakdown of specific formats for hosted documents. Recorded when
+    feed is loaded from the server.
+  </summary>
+</histogram>
+
+<histogram name="GData.InitialFeedLoadTime" units="microseconds">
+  <obsolete>
+    Deprecated 9/2012, and replaced by Drive.InitialFeedLoadTime
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time spent to load the initial part of the file system information from the
+    server
+  </summary>
+</histogram>
+
+<histogram name="GData.NumberOfHostedDocuments">
+  <obsolete>
+    Deprecated 9/2012, and replaced by Drive.NumberOfHostedDocuments
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of hosted documents (spreadsheets etc.) on Drive. Logged when Drive
+    is first accessed.
+  </summary>
+</histogram>
+
+<histogram name="GData.NumberOfRegularFiles">
+  <obsolete>
+    Deprecated 9/2012, and replaced by Drive.NumberOfRegularFiles
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of regualr files on Drive.  Logged when Drive is first accessed.
+  </summary>
+</histogram>
+
+<histogram name="GData.NumberOfTotalFiles">
+  <obsolete>
+    Deprecated 9/2012, and replaced by Drive.NumberOfTotalFiles
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of total files (regualr files + hosted documents) on Drive.  Logged
+    when Drive is first accessed.
+  </summary>
+</histogram>
+
+<histogram name="Geolocation.GeolocationDispatcherHostImpl.EnableHighAccuracy"
+    enum="BooleanEnabled">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    Whether high accuracy geolocation information was requested.
+  </summary>
+</histogram>
+
+<histogram name="Geolocation.InfoBarDelegate.Event"
+    enum="GeolocationInfoBarDelegateEvent">
+  <obsolete>
+    Deprecated 9/2014, and replaced by
+    ContentSettings.PermissionActions_Geolocation.
+  </obsolete>
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>Events in GeolocationInfoBarDelegate.</summary>
+</histogram>
+
+<histogram name="Geolocation.InfoBarDelegateAndroid.Event"
+    enum="GeolocationInfoBarDelegateAndroidEvent">
+  <obsolete>
+    Deprecated 9/2014, and replaced by
+    ContentSettings.PermissionActions_Geolocation.
+  </obsolete>
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>Events in GeolocationInfoBarDelegateAndroid.</summary>
+</histogram>
+
+<histogram name="Geolocation.LocationUpdate.ErrorCode"
+    enum="GeopositionErrorCode">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>Error code for the geoposition sent to the renderers.</summary>
+</histogram>
+
+<histogram name="Geolocation.NetworkLocationRequest.AccessPoints">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    The number of WiFi access points used to determine geolocation.
+  </summary>
+</histogram>
+
+<histogram name="Geolocation.NetworkLocationRequest.Event"
+    enum="NetworkLocationRequestEvent">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>Events in NetworkLocationRequest.</summary>
+</histogram>
+
+<histogram name="Geolocation.NetworkLocationRequest.ResponseCode"
+    units="HTTP response code">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>Http response codes in NetworkLocationRequest.</summary>
+</histogram>
+
+<histogram name="Geolocation.Timeout">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    Counts Geolocation request timeout values, bucketing by timeout duration.
+    This is recorded for all requests upon creation, see
+    Geolocation.TimeoutExpired for timeouts that actually expired.
+  </summary>
+</histogram>
+
+<histogram name="Geolocation.TimeoutExpired">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    Counts Geolocation request timeout expirations, bucketing by timeout
+    duration. This means no position was received within the allowed time from
+    the browser process due to e.g. a slow network or an unresponsive system
+    location provider.
+  </summary>
+</histogram>
+
+<histogram name="GoogleNow.Card.Button.Clicked0" enum="GoogleNowCardTypeId">
+  <owner>robliao@chromium.org</owner>
+  <owner>skare@chromium.org</owner>
+  <summary>Types of cards which received an index 0 button click.</summary>
+</histogram>
+
+<histogram name="GoogleNow.Card.Button.Clicked1" enum="GoogleNowCardTypeId">
+  <owner>robliao@chromium.org</owner>
+  <owner>skare@chromium.org</owner>
+  <summary>Types of cards which received an index 1 button click.</summary>
+</histogram>
+
+<histogram name="GoogleNow.Card.Clicked" enum="GoogleNowCardTypeId">
+  <owner>robliao@chromium.org</owner>
+  <owner>skare@chromium.org</owner>
+  <summary>Types of cards which received a notification click.</summary>
+</histogram>
+
+<histogram name="GoogleNow.Event" enum="GoogleNowEvent">
+  <owner>robliao@chromium.org</owner>
+  <owner>skare@chromium.org</owner>
+  <summary>Events in Google Now component extension.</summary>
+</histogram>
+
+<histogram name="GoogleNow.MessageCenter.Displayed.NotificationsVisible"
+    units="count">
+  <owner>robliao@chromium.org</owner>
+  <owner>skare@chromium.org</owner>
+  <summary>
+    Count of the number of Google Now notifications visible when the message
+    center/notification center is shown.
+  </summary>
+</histogram>
+
+<histogram name="GooglePlayServices.ConnectionResult"
+    enum="GooglePlayServicesConnectionResult">
+  <owner>andrewhayden@chromium.org</owner>
+  <owner>dgn@chromium.org</owner>
+  <summary>
+    ConnectionResult error codes resulting from attempts to check whether or not
+    Google Play Services is available. Most of these checks are done lazily,
+    when a user accesses a feature that uses Google Play Services. Added for
+    http://crbug.com/490710.
+  </summary>
+</histogram>
+
+<histogram name="GooglePlayServices.ErrorHandlerAction"
+    enum="GooglePlayServicesErrorHandlerAction">
+  <owner>andrewhayden@chromium.org</owner>
+  <summary>
+    Types of action taken in response to Google Play Services user-recoverable
+    errors. Added for http://crbug.com/490710.
+  </summary>
+</histogram>
+
+<histogram name="GoogleSearch.AccessPoint" enum="SearchAccessPoint">
+  <obsolete>
+    Deprecated 2015/08.
+  </obsolete>
+  <owner>kmadhusu@chromium.org</owner>
+  <summary>
+    Counts number of Google searches from various access points in the browser.
+    WARNING: Do not use this histogram as it currently fails to classify a large
+    percentage of Omnibox searches correctly - http://crbug.com/421631.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.EffectivePolicy" enum="UpdatePolicy">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The effective update policy for Chrome on Windows. Recorded once per startup
+    (following a 45 seconds delay).
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.ErrorHresult" enum="Hresult">
+  <owner>grt@chromium.org</owner>
+  <summary>The HRESULT for a failed on-demand update check.</summary>
+</histogram>
+
+<histogram name="GoogleUpdate.InfoBar.ActionTaken"
+    enum="GoogleUpdateInfoBarActions">
+  <obsolete>
+    Deprecated 12/2015 in Issue 566085.
+  </obsolete>
+  <owner>yfriedman@chromium.org</owner>
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    (Android-only) Records what action the user took (if any) on the InfoBar
+    indicating that a new version of Chrome is available.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.InfoBar.InternalStorageSizeAvailable" units="MB">
+  <owner>yfriedman@chromium.org</owner>
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>khushalsagar@chromium.org</owner>
+  <summary>
+    (Android-only) The amount of internal memory storage available on the user's
+    device when the InfoBar or update menu item is shown.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.InfoBar.TimeShown" units="ms">
+  <obsolete>
+    Deprecated 12/2015 in Issue 566085.
+  </obsolete>
+  <owner>yfriedman@chromium.org</owner>
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    (Android-only) The amount of time which the InfoBar indicating a new version
+    is available is visible.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.InstallerExitCode" enum="InstallStatus">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The exit code from Chrome's installer following a failed on-demand update
+    check. All values reported for this histogram fall in the
+    GOOGLE_UPDATE_ERROR_UPDATING bucket of the GoogleUpdate.UpdateErrorCode
+    histogram and the GOOPDATEINSTALL_E_INSTALLER_FAILED bucket of the
+    GoogleUpdate.ErrorHresult histogram.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.MenuItem.ActionTakenAfterItemClicked"
+    enum="GoogleUpdateAfterItemClickedActions">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    (Android-only) Records whether Chrome was updated after the update menu item
+    was clicked.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.MenuItem.ActionTakenOnMenuOpen"
+    enum="GoogleUpdateMenuItemActions">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    (Android-only) Records whether the update menu item was clicked when the app
+    menu was opened.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.UnexpectedState">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    An unrecognized CurrentState value received from Google Update while polling
+    for the status of an on-demand update check.
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.UpdateErrorCode" enum="GoogleUpdateErrorCode">
+  <owner>grt@chromium.org</owner>
+  <summary>The error code for a failed on-demand update check.</summary>
+</histogram>
+
+<histogram name="GoogleUpdate.UpdatePolicyIsOverridden" enum="Boolean">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    True if the effective update policy for Chrome on Windows is the result of
+    an app-specific override; false if it is the default for all apps. Recorded
+    once per startup (following a 45 seconds delay).
+  </summary>
+</histogram>
+
+<histogram name="GoogleUpdate.UpgradeResult" enum="GoogleUpdateUpgradeStatus">
+  <owner>grt@chromium.org</owner>
+  <summary>The result of an on-demand update check.</summary>
+</histogram>
+
+<histogram name="GPU.AcceleratedSurfaceRefreshRate" units="hz">
+  <owner>vmiura@chromium.org</owner>
+  <summary>
+    Refresh rate of the display in Hz.  This is recorded every time we present a
+    frame.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.Buffer11CPUMemoryMB" units="MB">
+  <owner>cwallez@chromium.org</owner>
+  <summary>
+     The sum of the size of the CPU-side memory allocations of Buffer11's copies
+    (vs. GPU memory allocations). These allocations are used when modifying the
+    buffer data on the CPU or when transfering to GPU memory via DMA.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3D11CreateDeviceError" enum="D3DHresult">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    An extended Windows error code returned from D3D11CreateDevice on error. Can
+    be almost any valid HRESULT or DXGI error code, which are listed at
+    https://msdn.microsoft.com/en-us/library/windows/desktop/bb509553.aspx.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3D11CreateDeviceMS" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The time that elapses for the initial call to D3D11CreateDevice on D3D11
+    ANGLE. A pure system call, with no ANGLE or Chromium code, called once every
+    GPU process startup.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3D11FeatureLevel" enum="D3DFeatureLevel">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The maxmium supported (or currently requested) Direct3D feature level in
+    D3D11 ANGLE. We support as low as 9.3, and as high as 11.1, though Chrome
+    should only use 10.0+ for D3D11. Gives an indication of how new a user's
+    video card is, what features it supports, and it's general speed tier.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3D11InitializeResult" enum="D3D11InitializeResult">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The result from initializing a D3D11 device in ANGLE. Can be success, or one
+    of several error codes which indicate different reasons for failing.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3D9InitializeResult" enum="D3D9InitializeResult">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The result from initializing a D3D9 device in ANGLE. Can be success, or one
+    of several error codes which indicate different reasons for failing.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.D3DCompileMS" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The time ANGLE spends calling the D3D shader compiler. Tracks total time we
+    spend compiling shaders on startup and during Chrome's lifetime.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.DisplayInitializeMS" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    Time ANGLE spends in eglInitialize, where it spins up a Renderer. This can
+    gives us insight into how much time we're spending initializing the GPU.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.Renderer11InitializeDeviceMS" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    Time ANGLE spends initializing various shaders and internal classes. This is
+    time that isn't purely loading system DLLs and calling OS methods. It might
+    be work we can optimize or defer until later.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.Renderer11InitializeDLLsMS" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    Time ANGLE spends loading system DLLs, such as the D3D compiler DLL, and the
+    D3D11 and DXGI DLLs. Probably unavoidable startup costs, though very useful
+    to keep track of.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ANGLE.SupportsDXGI1_2" enum="BooleanSupported">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    Windows computers running Windows 8+, or running Windows 7 with a platform
+    update, support the newer version of DXGI. This update also indicates the
+    computer is capable of running Direct3D 11.1 if the hardware supports it.
+  </summary>
+</histogram>
+
+<histogram name="GPU.CollectContextGraphicsInfo" units="microseconds">
+  <owner>vmiura@chromium.org</owner>
+  <summary>
+    The time that the GPU process spends collecting driver information during
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ContextLost" enum="ContextLostReason">
+  <owner>sievers@chromium.org</owner>
+  <summary>
+    The reason a GPU command buffer context of a given type was lost.
+  </summary>
+</histogram>
+
+<histogram name="GPU.CreateBrowserCompositor" units="microseconds">
+  <owner>vmiura@chromium.org</owner>
+  <summary>
+    The time that the browser process takes to create the compositor from its
+    point of view. One of these is created for each top-level window (browser
+    frame, menus, etc.).
+  </summary>
+</histogram>
+
+<histogram name="GPU.D3DShaderModel" enum="ShaderModel">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    ANGLE's currently active D3D shader model version. Logged once every startup
+    of the GPU process, on Windows only. Note that Shader Models 2 and 3 map to
+    D3D9 with ANGLE, and 4+ map to D3D11 ANGLE.
+  </summary>
+</histogram>
+
+<histogram name="GPU.DestroyProgramManagerPrograms.Elapsed" units="ms">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The amount of time spent destroying programs during ProgramManager::Destroy.
+  </summary>
+</histogram>
+
+<histogram name="GPU.DestroyProgramManagerPrograms.Programs" units="programs">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The number of progams destroyed during ProgramManager::Destroy.
+  </summary>
+</histogram>
+
+<histogram name="GPU.DestroyProgramManagerPrograms.ProgramsPerMs"
+    units="programs per ms">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The number of programs destroyed per millisecond during
+    ProgramManager::Destroy. Only logged if both the number of programs and the
+    elapsed time are greater than zero.
+  </summary>
+</histogram>
+
+<histogram name="GPU.DoLinkProgramTime" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The time we spend in GLES2DecoderImpl::DoLinkProgram. Related to how much
+    time we spend compiling shaders during startup.
+  </summary>
+</histogram>
+
+<histogram name="GPU.EGLDisplayType" enum="EGLDisplayType">
+  <owner>jbauman@chromium.org</owner>
+  <summary>The display type used to ask for an EGLDisplay.</summary>
+</histogram>
+
+<histogram name="GPU.Error" enum="GLError">
+  <owner>junov@chromium.org</owner>
+  <owner>piman@chromium.org</owner>
+  <summary>The error states generated by OpenGL calls.</summary>
+</histogram>
+
+<histogram name="GPU.FenceSupport" enum="BooleanAvailable">
+  <owner>reveman@chromium.org</owner>
+  <summary>
+    Whether GLFence support is available. Recorded each time a new context group
+    is initialized and extensions are detected.
+  </summary>
+</histogram>
+
+<histogram name="GPU.GPUProcessDetailedExitStatus"
+    enum="ProcessDetailedExitStatus">
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Breakdown of exit status for gpu processes. Only recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="GPU.GPUProcessLaunchCause" enum="GPUProcessLaunchCauses">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>piman@chromium.org</owner>
+  <summary>
+    Counts enumerating the initial cause for the GPU Process to be launched.
+  </summary>
+</histogram>
+
+<histogram name="GPU.GPUProcessLaunchTime" units="ms">
+  <owner>piman@chromium.org</owner>
+  <summary>
+    Startup time of the GPU process as measured by the GPU process host.
+  </summary>
+</histogram>
+
+<histogram name="GPU.InitializeOneOffMediumTime" units="ms">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    The time that the GPU process spends in initializing the GL surface, and
+    collecting graphics information. Records times up to three minutes.
+  </summary>
+</histogram>
+
+<histogram name="GPU.InitializeOneOffTime" units="microseconds">
+  <obsolete>
+    Deprecated 4/2015.
+  </obsolete>
+  <owner>vmiura@chromium.org</owner>
+  <summary>
+    The time that the GPU process spends in initializing the GL surface, and
+    collecting graphics information.
+  </summary>
+</histogram>
+
+<histogram name="GPU.IOSurface.CATransactionTime" units="ms">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    The time that it took to update the CALayer tree and commit the transaction.
+    This is often affected by IOSurface paging.
+  </summary>
+</histogram>
+
+<histogram name="GPU.IOSurface.CreateTime" units="ms">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    The time that it took for a call to IOSurfaceCreate to complete.
+  </summary>
+</histogram>
+
+<histogram name="GPU.IOSurface.GLFlushTime" units="ms">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    The time that it took for a call to glFlush to complete. This is often
+    affected by IOSurface paging.
+  </summary>
+</histogram>
+
+<histogram name="GPU.IOSurface.TexImageTime" units="ms">
+  <owner>ccameron@chromium.org</owner>
+  <summary>
+    The time that it took for a call to CGLTexImageIOSurface2D to complete.
+  </summary>
+</histogram>
+
+<histogram name="GPU.MaxMSAASampleCount" units="samples">
+  <owner>senorblanco@chromium.org</owner>
+  <summary>
+    The maximum number of multisampled anti-aliasing (MSAA) samples per pixel
+    that the user's GPU can render.
+  </summary>
+</histogram>
+
+<histogram name="GPU.ProgramCache.CacheHit" enum="BooleanSuccess">
+  <owner>jmadill@chromium.org</owner>
+  <summary>
+    If a successfully linked program was found in the GPU program cache during a
+    program link call.
+  </summary>
+</histogram>
+
+<histogram name="GPU.TextureRG" enum="BooleanAvailable">
+  <owner>reveman@chromium.org</owner>
+  <summary>
+    Whether RG texture support is available. Recorded each time a new context
+    group is initialized and extensions are detected.
+  </summary>
+</histogram>
+
+<histogram name="Hardware.Display.Count.OnChange">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The number of displays present right after the user has attached or detached
+    a new display. Excludes mirrored displays, but includes sleeping displays.
+  </summary>
+</histogram>
+
+<histogram name="Hardware.Display.Count.OnStartup">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The number of displays present at start up. Excludes mirrored displays, but
+    includes sleeping displays.
+  </summary>
+</histogram>
+
+<histogram name="Hardware.Drive.HasSeekPenalty" enum="BooleanHasSeekPenalty">
+  <owner>dbeam@chromium.org</owner>
+  <summary>
+    Whether a drive has a seek penalty (i.e. is a spinning disk). Emitted 0-2
+    times shortly after startup when constructing the initial UMA log.
+  </summary>
+</histogram>
+
+<histogram name="Hardware.Drive.HasSeekPenalty_Success" enum="BooleanSuccess">
+  <owner>dbeam@chromium.org</owner>
+  <summary>
+    Whether it was possible to determine if a drive has a seek penalty. This can
+    fail for various reasons (device drivers don't offer this information, the
+    drive is still mounting, lack of access, etc.). Emitted twice shortly after
+    startup when constructing the initial UMA log.
+
+    Seek penalty detection is disabled on XP/Vista as of 9/24/2015 because it
+    crashes too much. http://crbug.com/514822
+  </summary>
+</histogram>
+
+<histogram name="Hardware.Drive.HasSeekPenalty_Time" units="ms">
+  <owner>dbeam@chromium.org</owner>
+  <summary>
+    The amount of time it takes to determine whether a drive has a seek penalty.
+    Emitted twice shortly after startup when constructing the initial UMA log.
+  </summary>
+</histogram>
+
+<histogram name="Hardware.Serial.NewMinusOldDeviceListSize">
+  <owner>charliea@chromium.org</owner>
+  <summary>
+    On Windows and Mac, we're implementing new methods to enumerate serial
+    devices that provide us more information about the actual devices. This
+    metric measures the difference between the number of devices that the new
+    and old enumeration methods find. Once this metric gives us confidence that
+    the new and old methods are at parity, we can cut out the old method
+    altogether.
+  </summary>
+</histogram>
+
+<histogram name="HIDDetection.OOBEDevicesDetectedOnContinuePressed"
+    enum="HIDContinueScenarioType">
+  <owner>merkulova@chromium.org</owner>
+  <summary>
+    Which HID were detected when user pressed Continue on OOBE dialog. This
+    metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="HIDDetection.OOBEDialogShown">
+  <owner>merkulova@chromium.org</owner>
+  <summary>
+    Whether HID detection dialog was shown on OOBE. Logged on screen show or on
+    screen skip respectively. This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="HIDDetection.TimesDialogShownPerOOBECompleted">
+  <owner>merkulova@chromium.org</owner>
+  <summary>
+    Records number of times the dialog was shown by the time OOBE is completed.
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistenciesBrowser" enum="Inconsistencies">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of inconsistency events found when examining a single histogram's
+    data in a browser for transmission via UMA.  Inconsistent data is NOT
+    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
+    found in one histogram examination are added together to summarize the
+    inconsistent event.  Note that the same inconsistency MAY appear time and
+    again as the same corrupt histogram is examined for each potenital UMA
+    upload.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistenciesBrowserUnique" enum="Inconsistencies">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of inconsistency events found when examining a single histogram's
+    data in a browser for transmission via UMA.  Inconsistent data is NOT
+    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
+    found in one histogram examination are added together to summarize the
+    inconsistent event.  Note that the same inconsistency will only appear at
+    most one time for each histogram in a single process (i.e., duplicate
+    corruption in a single histogram is not noted in this chart.)
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistenciesChildProcess" enum="Inconsistencies">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of inconsistency events found when examining a single histogram's
+    data in a child process for transmission via UMA.  Inconsistent data is NOT
+    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
+    found in one histogram examination are added together to summarize the
+    inconsistent event.  Note that the same inconsistency MAY appear time and
+    again as the same corrupt histogram is examined for each potenital UMA
+    upload.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistenciesChildProcessUnique"
+    enum="Inconsistencies">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of inconsistency events found when examining a single histogram's
+    data in a child process for transmission via UMA.  Inconsistent data is NOT
+    transmitted via UMA.  Each type of inconsistency is a bit, and all bits
+    found in one histogram examination are added together to summarize the
+    inconsistent event.  Note that the same inconsistency will only appear at
+    most one time for each histogram in a single process (i.e., duplicate
+    corruption in a single histogram is not noted in this chart.)
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistenciesRenderer" enum="Inconsistencies">
+  <obsolete>
+    Deprecated 7/2012.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of inconsistency events found when examining a single histogram's
+    data in a renderer for transmission to the browser.  Inconsistent data is
+    NOT transmitted to the browser.  Each type of inconsistency is a bit, and
+    all bits found in one histogram examination are added together to summarize
+    the inconsistent event.  Note that the same inconsistency MAY appear time
+    and again as the same corrupt histogram is examined for each potenital UMA
+    upload.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistenciesRendererUnique"
+    enum="Inconsistencies">
+  <obsolete>
+    Deprecated 7/2012.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of inconsistency events found when examining a single histogram's
+    data in a renderer for transmission to the browser.  Inconsistent data is
+    NOT transmitted to the browser.  Each type of inconsistency is a bit, and
+    all bits found in one histogram examination are added together to summarize
+    the inconsistent event.  Note that the same inconsistency will only appear
+    at most one time for each histogram in a single renderer process (i.e.,
+    duplicate corruption in a single histogram is not noted in this chart.)
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistentCountHigh">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of extra samples counted in the redundant_count in a histogram
+    that were not found by summing the samples in the buckets.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistentCountLow">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of missing samples in the redundant_count in a histogram that
+    were found by summing the samples in the buckets.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistentSnapshotBrowser">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The amount of discrepancy found when examining a single histogram's data in
+    the browser process for transmission via UMA.  Inconsistent data is NOT
+    transmitted via UMA.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistentSnapshotChildProcess">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The amount of discrepancy found when examining a single histogram's data in
+    a child process for transmission via UMA.  Inconsistent data is NOT
+    transmitted via UMA.
+  </summary>
+</histogram>
+
+<histogram name="Histogram.InconsistentSnapshotRenderer">
+  <obsolete>
+    Deprecated 7/2012.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The amount of discrepancy found when examining a single histogram's data in
+    a renderer process for transmission via UMA. Inconsistent data is NOT
+    transmitted via UMA.
+  </summary>
+</histogram>
+
+<histogram
+    name="History.ClearBrowsingData.HistoryNoticeShownInFooterWhenUpdated"
+    enum="BooleanShown">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Whether a notice about other forms of browsing history was shown in the
+    footer of the Clear Browsing Data dialog. This is recorded every time the
+    dialog is opened.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.ImportantDeselectedNum">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when the user presses the 'clear' button when presented with the
+    list of important sites they might want to exclude from clearing browsing
+    data. We record the number of sites the user deselected, or protected, from
+    clearing. The default has all sites selected.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.ImportantDeselectedPercent"
+    units="%/5">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when the user presses the 'clear' button when presented with the
+    list of important sites they might want to exclude from clearing browsing
+    data. We record the percent of sites the user deselected, or protected, from
+    clearing. The default has all sites selected, which is 0%. Note: To reduce
+    the number of empty buckets, the percent is divided by 5.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.ImportantDialogShown"
+    enum="BooleanShown">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when the user presses the 'clear' button in the clear browsing
+    dialog. We record 'true' if the important sites dialog is shown.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.NumImportant">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when we successfuly fetched important sites in the clear browsing
+    data screen. This is the number of sites that we think are important to the
+    user.
+  </summary>
+</histogram>
+
+<histogram
+    name="History.ClearBrowsingData.PasswordsDeletion.AdditionalDatatypesCount">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Recorded when the user deletes their passwords in the ClearBrowsingData
+    dialog. Counts how many other data types were selected for deletion.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.ShownHistoryNoticeAfterClearing"
+    enum="BooleanShown">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Whether a dialog with a notice about other forms of browsing history was
+    shown after the user deleted data from the Clear Browsing Data dialog.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCache"
+    enum="CookieOrCacheDeletion">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Recorded when the user deletes their browsing data. Shows whether cookies
+    and/or cache were among the selected data types.
+  </summary>
+</histogram>
+
+<histogram name="History.ClearBrowsingData.UserDeletedCookieOrCacheFromDialog"
+    enum="CookieOrCacheDeletion">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Recorded when the user deletes their browsing data manually from the
+    ClearBrowsingData dialog. Shows whether cookies and/or cache were among the
+    selected data types.
+  </summary>
+</histogram>
+
+<histogram name="History.DatabaseAdvancedMetricsTime" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Time spent on advanced History DB metrics calculation (weekly and monthly
+    URL, host, and category counts). Advanced metrics are logged on
+    initialization of the History DB on 0.3% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.DatabaseBasicMetricsTime" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Time spent on basic History DB metrics calculation (file size and table
+    counts). Basic metrics are logged on initialization of the History DB on 1%
+    of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.DatabaseFileMB" units="MB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Size of History DB file. Duplicate of Profile.HistorySize and
+    Sqlite.SizeKB.History. Logged on initialization of the History DB on 1% of
+    starts.
+  </summary>
+</histogram>
+
+<histogram name="History.DeleteFTSIndexDatabases">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of &quot;History Index *&quot; databases deleted.  These databases
+    stored the full-text-search data for history, which was removed at r213442,
+    this histogram tracks cleanup.
+  </summary>
+</histogram>
+
+<histogram name="History.FaviconDatabaseAdvancedMetricsTime" units="ticks">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    The wall-clock time taken to gather favicon database metrics. Metrics are
+    logged on initialization of the Favicon DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.FaviconDatabaseSizeMB" units="MB">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    Size of the Favicons database in MB. This is calculated as the number of
+    pages consumed by the database multiplied by the page size. Logged on
+    initialization of the Favicon DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.FaviconsRecoveredPercentage" units="%">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Size of the recovered Favicons database relative to the original corrupt
+    database.  Recovery is VACUUM-like, so the resulting database should always
+    be smaller.  Substantial 100% results would indicate empty databases being
+    recovered, substantial low% results would indicate very little data being
+    recovered.
+  </summary>
+</histogram>
+
+<histogram name="History.FaviconsRecoveredRowsFaviconBitmaps">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Rows recovered from [favicon_bitmaps] table in Favicons recovery.
+  </summary>
+</histogram>
+
+<histogram name="History.FaviconsRecoveredRowsFavicons">
+  <owner>rpop@google.com</owner>
+  <summary>Rows recovered from [favicons] table in Favicons recovery.</summary>
+</histogram>
+
+<histogram name="History.FaviconsRecoveredRowsIconMapping">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Rows recovered from [icon_mapping] table in Favicons recovery.
+  </summary>
+</histogram>
+
+<histogram name="History.FaviconsRecovery" enum="HistoryFaviconsRecoveryEnum">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Track results of SQLite database recovery code in thumbnail_database.cc.
+  </summary>
+</histogram>
+
+<histogram name="History.FirstSetTopSitesDeltaSize">
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>
+    The count of differences between cached top sites and up-to-date top sites
+    when function TopSitesImpl::SetTopSites is firstly called at startup.
+  </summary>
+</histogram>
+
+<histogram name="History.FirstUpdateTime" units="ms">
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>
+    The amount of time for function
+    history::TopSitesBackend::UpdateTopSitesOnDBThread to execute when this
+    function is called during startup. Excludes the case where local
+    TopSitesDatabase db_ is unavailable, i.e. where the update doesn't really
+    happen.
+  </summary>
+</histogram>
+
+<histogram name="History.HistoryPageView" enum="HistoryPageView">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The page of the MD History page shown to the user. Logged each time the user
+    loads the MD History page or switches pages.
+  </summary>
+</histogram>
+
+<histogram name="History.HistoryServiceInitTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during HistoryService::Init.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryDBItemCount">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The number of typed URLs in the history database that are read into the
+    &quot;in memory&quot; history database. This in memory copy of the typed
+    URLs is used for synchronous inline autocomplete on the UI thread, while the
+    larger slower service is run off of disk on a background thread. Recorded on
+    profile open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryDBKeywordTermsCount">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Number of items in in-memory keyword_search_terms table. Recorded on profile
+    open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryDBKeywordTermsPopulate" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time to load in-memory keyword_search_terms table from disk. Recorded on
+    profile open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryDBKeywordURLItemCount">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Number of items in in-memory urls table. Recorded on profile open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryDBKeywordURLPopulate" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time to load in-memory urls table from disk urls table. Recorded on profile
+    open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryDBPopulate">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The time it takes to read the typed URLs from the main history database into
+    the &quot;in memory&quot; history database. This in memory copy of the typed
+    URLs is used for synchronous inline autocomplete on the UI thread, while the
+    larger slower service is run off of disk on a background thread. Recorded on
+    profile open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryTypedUrlVisitCount">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The sum of the visit_count fields for all URLs in the &quot;in memory&quot;
+    history database. This corresponds to the number of times the user has
+    visited the typed URLs in the last 30 days (excluding page reloads, since
+    the history database does not increment the visit_count in that case).
+    Recorded on profile open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLCacheSize" units="bytes">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Size of on-disk cache for in-memory url index. Recorded on profile open when
+    restoring from a cache file.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLChars">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Number of items in the in-memory url index char_word_map_. Recorded on
+    profile open when restoring from a cache file and again shortly after
+    profile open when rebuilding the in-memory url index from history.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLHistoryItems">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Number of history items in the in-memory url index. Recorded on profile open
+    when restoring from a cache file and again shortly after profile open when
+    rebuilding the in-memory url index from history.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLIndexingTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time to rebuild in-memory url index from main history database. Recorded
+    once shortly after profile open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLIndexRestoreCacheTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time to restore the in-memory url index from disk cache. Recorded on profile
+    open.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLIndexSaveCacheTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time to write in-memory url index to disk cache. Recorded once shortly after
+    profile open (after rebuilding the in-memory url index from history) and
+    again upon (clean) shutdown.
+  </summary>
+</histogram>
+
+<histogram name="History.InMemoryURLWords">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Number of items in in-memory url index word_map_. Recorded on profile open
+    when restoring from a cache file and again shortly after profile open when
+    rebuilding the in-memory url index from history.
+  </summary>
+</histogram>
+
+<histogram name="History.MonthlyHostCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Unique hostnames in History database urls table with last-visit times in the
+    last 30 days. Metrics are logged on initialization of the History DB on 0.3%
+    of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.MonthlyURLCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Unique URLs in History database urls table with last-visit times in the last
+    30 days. Metrics are logged on initialization of the History DB on 0.3% of
+    starts.
+  </summary>
+</histogram>
+
+<histogram name="History.MonthlyVisitCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Number of rows in History visits table with visit times in the last 30 days.
+    Metrics are logged on initialization of the History DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.NumFaviconBitmapsInDB">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    The total number of favicon bitmaps (of all sizes) cached in a user's
+    Favicon database. A given favicon URL may be associated with multiple
+    bitmaps (of different sizes). Logged on initialization of the Favicon DB on
+    1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.NumFaviconMappingsInDB">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    The number of page URL (e.g., http://www.google.com) to favicon URL (e.g.,
+    http://www.google.com/favicon.ico) mappings stored in a user's Favicon
+    database. Logged on initialization of the Favicon DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.NumFaviconsInDB">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    The total number of favicon URLs (e.g. http://www.google.com/favicon.ico)
+    tracked in a user's Favicon database. This metric tracks knowledge of a
+    favicon URL not whether there are cached bitmaps for that favicon URL. See
+    History.NumFaviconBitmapsInDB for that. Logged on initialization of the
+    Favicon DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.NumLargeFaviconBitmapsInDB">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    The total number of large (&gt;= 64 pixels wide) favicons being tracked in a
+    user's Favicon database. This is a subset of History.NumFaviconBitmapsInDB,
+    which includes all sizes in its count. Logged on initialization of the
+    Favicon DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.NumTouchIconsInDB">
+  <owner>rogerm@chromium.org</owner>
+  <summary>
+    The total number of touch icons being tracked in a user's Favicon database.
+    This is a subset of History.NumFaviconsInDB, which includes all icon types
+    in its count. Logged on initialization of the Favicon DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.ResultsRenderedTime" units="ms">
+  <owner>tsergeant@chromium.org</owner>
+  <summary>
+    Records the time taken to load the history Web UI and render (at least) a
+    screen full of items. This is roughly equivalent to 'time to first
+    meaningful paint' for the history page.
+  </summary>
+</histogram>
+
+<histogram name="History.ShownHeaderAboutOtherFormsOfBrowsingHistory"
+    enum="BooleanShown">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Whether the notice about other forms of browsing history was shown in the
+    header of the History page when the header was displayed. The header is
+    refreshed with every history query.
+  </summary>
+</histogram>
+
+<histogram name="History.TopHostsVisitsByRank" units="rank">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Page visits to each of a user's top 50 hosts. The bucket is the 1-based rank
+    of the host. Visits to all other hosts go into the 51st bucket.
+    Android-only. Only counts the last URL in a redirect chain. The list of top
+    hosts is computed approximately nightly. This means that a given day will
+    likely include a recalculation of top hosts, and therefore a given bucket
+    may represent two different hosts at different times of day.
+  </summary>
+</histogram>
+
+<histogram name="History.TopSitesRecoveredPercentage" units="%">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Size of the recovered TopSites database relative to the original corrupt
+    database.  Recovery is VACUUM-like, so the resulting database should always
+    be smaller.  Substantial 100% results would indicate empty databases being
+    recovered, substantial low% results would indicate very little data being
+    recovered.
+  </summary>
+</histogram>
+
+<histogram name="History.TopSitesRecoveredRowsThumbnails">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Rows recovered from [thumbnails] table in TopSites recovery.
+  </summary>
+</histogram>
+
+<histogram name="History.TopSitesRecovery" enum="HistoryTopSitesRecoveryEnum">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The TopSites recovery code is written conservatively, with successful
+    recovery committed and any failure leading to rollback. This tracks the
+    outcomes to determine which cases are high-frequency enough to warrant
+    adding additional code to handle them (versus simply deleting the data).
+  </summary>
+</histogram>
+
+<histogram name="History.TopSitesVisitsByRank" units="rank">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page visits to each of a user's top 50 sites. Visits to all other sites go
+    into the 51st bucket. Only count the page visit if it came from user
+    browsing and only count it once when cycling through a redirect chain.
+  </summary>
+</histogram>
+
+<histogram name="History.UpdateTopSitesOnDBThreadTime" units="ms">
+  <obsolete>
+    Deprecated because only the execution time at startup is of interest. See
+    histogram History.UpdateTopSitesOnDBThread_Startup_Time.
+  </obsolete>
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>
+    The amount of time for function
+    history::TopSitesBackend::UpdateTopSitesOnDBThread to execute. Excludes the
+    case where local TopSitesDatabase db_ is unavailable, i.e. where the update
+    doesn't really happen.
+  </summary>
+</histogram>
+
+<histogram name="History.URLTableCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Number of rows in urls table in History DB. Metrics are logged on
+    initialization of the History DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.VisitTableCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Number of rows in visits table in History DB. Metrics are logged on
+    initialization of the History DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.WeeklyHostCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Unique hostnames in History database urls table with last-visit times in the
+    last 7 days. Metrics are logged on initialization of the History DB on 0.3%
+    of starts.
+  </summary>
+</histogram>
+
+<histogram name="History.WeeklyURLCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Unique URLs in History database urls table with last-visit times in the last
+    7 days. Metrics are logged on initialization of the History DB on 0.3% of
+    starts.
+  </summary>
+</histogram>
+
+<histogram name="History.WeeklyVisitCount">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Number of rows in History visits table with visit times in the last 7 days.
+    Metrics are logged on initialization of the History DB on 1% of starts.
+  </summary>
+</histogram>
+
+<histogram name="HistoryPage.ClickPosition">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Number of entries that the clicked entry is older than in History page. Last
+    bucket is any entry of that value or higher.
+  </summary>
+</histogram>
+
+<histogram name="HistoryPage.ClickPositionSubset">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Subset of the Click Position histogram. Contains only the first smaller
+    subset of entries on the page. Number of entries that the clicked entry is
+    older than in History page. Last bucket is entries of that value or higher.
+  </summary>
+</histogram>
+
+<histogram name="HistoryPage.OtherDevicesMenu" enum="OtherSessionsActions">
+  <owner>mad@chromium.org</owner>
+  <owner>rpop@google.com</owner>
+  <summary>
+    Histogram for usage of the section in the history page that allows the user
+    to access tabs from other devices.
+  </summary>
+</histogram>
+
+<histogram name="HistoryPage.RemoveEntryPosition">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Number of entries that the deleted entry is older than in History page. Last
+    bucket is any entry of that value or higher. Confirmed removal is not
+    guaranteed, just an initiation of 'Remove selected items'.
+  </summary>
+</histogram>
+
+<histogram name="HistoryPage.RemoveEntryPositionSubset">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Subset of Remove Entry Position histogram. Contains only the first smaller
+    subset of entries on the page. Number of entries that the deleted entry is
+    older than in History page. Last bucket is any entry of that value or
+    higher. Confirmed removal is not guaranteed, just an initiation of 'Remove
+    selected items'.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.AudioLoggingEnabled" enum="BooleanEnabled">
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    The state of the hotword audio logging preference. This value is emitted
+    each time the hotword availability is requested by the extension if the user
+    is also opted in to hotword voice search. This check typically happens each
+    time a hotword search is initiated.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.Enabled" enum="HotwordPrefState">
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    The state of the hotword preference. This value is emitted during
+    HotwordService initialization which happens during Profile initialization.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.ExtensionAvailability" enum="HotwordAvailability">
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Whether the external component hotword extension exists (i.e., not pending
+    download, disabled, etc.). This value is emitted each time the hotword
+    availability is requested by the extension which typically happens each time
+    a hotword search is initiated.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.HotwordError" enum="HotwordError">
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Errors reported by the hotword service when determining if hotwording is
+    available. Non-errors are also reported so that errors can be seen as a
+    percentage of total requests.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.HotwordMediaStreamResult"
+    enum="HotwordMediaStreamResult">
+  <owner>amistry@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <owner>somast@chromium.org</owner>
+  <summary>
+    Success or error when attempting to open a MediaStream for the microphone.
+    At most one success or error will be logged for an attempt to open a stream.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.HotwordNaClMessageTimeout"
+    enum="HotwordNaClMessageTimeout">
+  <owner>amistry@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <owner>somast@chromium.org</owner>
+  <summary>
+    Timeout occured while waiting for a message from the NaCl hotword detector
+    plugin. This value is the message that was expected to be received from the
+    plugin.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.HotwordNaClPluginLoadResult"
+    enum="HotwordNaClPluginLoadResult">
+  <owner>amistry@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <owner>somast@chromium.org</owner>
+  <summary>
+    Success or error when attempting to load the NaCl hotword detector plugin.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.HotwordTriggerSource" enum="HotwordTriggerSource">
+  <owner>amistry@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <owner>somast@chromium.org</owner>
+  <summary>
+    Location of hotword trigger. Emitted every time the hotword is triggered by
+    the user saying 'Ok Google'.
+  </summary>
+</histogram>
+
+<histogram name="Hotword.SharedModuleReinstallLanguage" enum="LanguageCode">
+  <owner>amistry@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <owner>somast@chromium.org</owner>
+  <summary>
+    Language, switched to by the user, that triggered a hotword shared module
+    reinstall.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.AccessToDone" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For every http cache transaction with a pattern (see HttpCache.Pattern), the
+    time from the first access to the disk cache until the transaction was done.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.AsyncValidationDuration" units="ms">
+  <obsolete>
+    Deprecated as of 3/2015.
+  </obsolete>
+  <owner>ricea@chromium.org</owner>
+  <summary>
+    The time spent performing an asynchronous revalidation that was triggered by
+    a Cache-Control: stale-while-revalidate directive. This is recorded when the
+    asynchronous revalidation completes, either after the response was
+    completely read or an error occurred. One entry is recorded for each
+    asynchronous revalidation that is performed.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.BeforeSend" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For http cache transactions in which a network request was sent, the time
+    elapsed between beginning the request and sending it over the network; this
+    is the time spent accessing the disk cache.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.CantConditionalizeCause"
+    enum="HttpCacheValidationCause">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    For each request that results in an unconditionalizable network request, the
+    cause for the request.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.EntryLockWait" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The time spent waiting for write lock on a disk cache entry.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.ExternallyConditionalized"
+    enum="ExternallyConditionalizedType">
+  <owner>ricea@chromium.org</owner>
+  <summary>
+    Count of the number of external (ie. from Blink) conditionalized requests,
+    and whether or not those requests could have been served from the browser
+    cache.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.OfflineStatus" enum="OfflineStatus">
+  <obsolete>
+    Deprecated 4/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Result of a main page HttpCacheTransaction if offline mode had been enabled.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.Pattern" enum="HttpCachePattern">
+  <owner>gavinp@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <summary>For each http cache transaction, the recorded pattern.</summary>
+</histogram>
+
+<histogram name="HttpCache.PercentBeforeSend" units="%">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For http cache transactions in which a network request was sent, the
+    percentage of total request time that elapsed before sending the request
+    over the network; this is the time spent accessing the disk cache.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.ReadErrorNonRestartable" enum="NetErrorCodes">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Net error results from non-restartable cache read errors.</summary>
+</histogram>
+
+<histogram name="HttpCache.ReadErrorRestartable" enum="NetErrorCodes">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Net error results from restartable cache read errors.</summary>
+</histogram>
+
+<histogram name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    For each http cache transaction for which a cache entry exists but it cannot
+    be used because the entry's age is beyond its freshness: counts how many
+    freshness periods have elapsed since the entry was last used (x1000).
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.StaleEntry.Updated.Age" units="seconds">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    For each http cache transaction for which a validation attempt is made due
+    to a stale entry and is updated (e.g., 200), records the age of the entry in
+    seconds.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.StaleEntry.Updated.AgeInFreshnessPeriods" units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    For each http cache transaction for which a validation attempt is made due
+    to a stale entry and is updated (e.g., 200), records the age of the entry as
+    percentage of freshness period.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.StaleEntry.Validated.Age" units="seconds">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    For each http cache transaction for which a validation attempt is made due
+    to a stale entry and is validated (304), records the age of the entry in
+    seconds.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.StaleEntry.Validated.AgeInFreshnessPeriods"
+    units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    For each http cache transaction for which a validation attempt is made due
+    to a stale entry and is validated (304), records the age of the entry as
+    percentage of freshness period.
+  </summary>
+</histogram>
+
+<histogram name="HttpCache.ValidationCause" enum="HttpCacheValidationCause">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>For each validation attempt, the cause for the validation.</summary>
+</histogram>
+
+<histogram name="HttpCache.Vary" enum="VaryType">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The type of Vary header for a given GET response.</summary>
+</histogram>
+
+<histogram name="Hyphenation.Open" units="ms">
+  <owner>kojii@chromium.org</owner>
+  <summary>The time it takes to open a hyphenation dictionary.</summary>
+</histogram>
+
+<histogram name="Hyphenation.Open.File" units="ms">
+  <owner>kojii@chromium.org</owner>
+  <summary>The time it takes to open a hyphenation dictionary file.</summary>
+</histogram>
+
+<histogram name="Import.ImportedHistorySize.AutoImportFromIE" units="urls">
+  <owner>gcomanici@chromium.org</owner>
+  <summary>
+    The size of the history on Auto Import from IE. This measure is only logged
+    on a succesfull Auto Import.
+  </summary>
+</histogram>
+
+<histogram name="Import.ImporterType.AutoImport" enum="ImporterType">
+  <owner>gab@chromium.org</owner>
+  <summary>The importer used on first run Auto Import.</summary>
+</histogram>
+
+<histogram name="Import.ImporterType.BookmarksAPI" enum="ImporterType">
+  <owner>gab@chromium.org</owner>
+  <summary>The importer used on import from the bookmarks file API.</summary>
+</histogram>
+
+<histogram name="Import.ImporterType.ImportDataHandler" enum="ImporterType">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The importer used on import from the chrome://settings/importData UI.
+  </summary>
+</histogram>
+
+<histogram name="Import.ShowDialog.FromBookmarkBarView" units="seconds">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time from install time to time that user opens import dialog
+    from BookmarkBarView.
+  </summary>
+</histogram>
+
+<histogram name="Import.ShowDialog.FromFloatingBookmarkBarView" units="seconds">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time from install time to time that user opens import dialog
+    from NTP floating BookmarkBarView.
+  </summary>
+</histogram>
+
+<histogram name="Import_ShowDlg.FromBookmarkBarView" units="seconds">
+  <obsolete>
+    Deprecated and replaced by Import.ShowDialog.FromBookmarkBarView
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time from install time to time that user opens import dialog
+    from BookmarkBarView.
+  </summary>
+</histogram>
+
+<histogram name="Import_ShowDlg.FromFloatingBookmarkBarView" units="seconds">
+  <obsolete>
+    Deprecated and replaced by Import.ShowDialog.FromFloatingBookmarkBarView
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time from install time to time that user opens import dialog
+    from NTP floating BookmarkBarView.
+  </summary>
+</histogram>
+
+<histogram name="ImportantFile.TempFileFailures" enum="TempFileFailure">
+  <owner>rvargas@chromium.org</owner>
+  <summary>
+    Count of various failures in ImportantFileWrite when manipulating a temp
+    file to write to before moving it into place (replacing another file).
+  </summary>
+</histogram>
+
+<histogram name="IncognitoModePrefs.WindowsParentalControlsInitThread"
+    enum="ThreadType">
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    The thread used to initialize the Windows parental controls.
+  </summary>
+</histogram>
+
+<histogram name="IncognitoModePrefs.WindowsParentalControlsInitTime" units="ms">
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during a run of
+    PlatformParentalControlsValue::IsParentalControlActivityLoggingOnImpl on
+    Windows 7 and above.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.AccelerometerAndroidAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the Sensor.TYPE_LINEAR_ACCELERATION was available at the start of
+    Device Motion.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.AccelerometerIncGravityAndroidAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the Sensor.TYPE_ACCELEROMETER was available at the start of Device
+    Motion.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.AccelerometerWindowsAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the SENSOR_TYPE_ACCELEROMETER_3D was available at the start of
+    Device Motion on the Windows platform.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.DeviceOrientationSensorAndroid"
+    enum="DeviceOrientationSensorTypeAndroid">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Provides a histogram of the base sensors (if any) that are used at the start
+    of the Device Orientation API. Currently Sensor.TYPE_GAME_ROTATION_VECTOR is
+    the default sensor for orientation, if it's not available fall-back options
+    are provided by using either Sensor.TYPE_ROTATION_VECTOR or a combination of
+    Sensor.TYPE_ACCELEROMETER and Sensor.TYPE_MAGNETIC_FIELD.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.GyrometerWindowsAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the SENSOR_TYPE_GYROMETER_3D was available at the start of Device
+    Motion on the Windows platform.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.GyroscopeAndroidAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the Sensor.TYPE_GYROSCOPE was available at the start of Device
+    Motion.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.InclinometerWindowsAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the SENSOR_TYPE_INCLINOMETER_3D was available at the start of Device
+    Orientation on the Windows platform.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.MotionDefaultAvailable" enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    This histogram counts the number of Device Motion API invocations in the
+    default implementation (Linux and CrOS). The default implementation does not
+    provide any sensors so the result is always false.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.MotionMacAvailable" enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the sudden motion sensor was available at the start of Device Motion
+    on the MacOS platform.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.OrientationDefaultAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    This histogram counts the number of Device Orientation API invocations in
+    the default implementation (Linux and CrOS). The default implementation does
+    not provide any sensors so the result is always false.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.OrientationMacAvailable"
+    enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the sudden motion sensor was available at the start of Device
+    Orientation on the MacOS platform.
+  </summary>
+</histogram>
+
+<histogram name="InertialSensor.RotationVectorAndroidAvailable"
+    enum="BooleanAvailable">
+  <obsolete>
+    Deprecated 11/2014 (crbug.com/347507). Replaced by
+    InertialSensor.DeviceOrientationSensorAndroid.
+  </obsolete>
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the Sensor.TYPE_ROTATION_VECTOR was available at the start of Device
+    Orientation.
+  </summary>
+</histogram>
+
+<histogram name="InfoBar.Shown" enum="InfoBarIdentifier">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    Records how many times a particular infobar was shown to the user. On
+    Android, the infobar may be partially hidden due to stacking.
+  </summary>
+</histogram>
+
+<histogram name="InfoBar.Shown.Hidden" enum="InfoBarIdentifier">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Records how many times a particular infobar was displayed in a hidden state
+    due to at least one other infobar existing. If there are no existing
+    infobars, but the user scrolls at the exact moment a new infobar is added,
+    the infobar may be hidden, but not recorded in this metric. Reliably
+    triggering and detecting this combination is tricky so it isn't done. Only
+    recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="InfoBar.Shown.Hiding" enum="InfoBarIdentifier">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Records how many times a particular infobar was visible and hiding a new
+    infobar behind it. Only recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="InfoBar.Shown.Visible" enum="InfoBarIdentifier">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Records how many times a particular infobar was displayed in a visible state
+    due to no other infobars existing. If there are no existing infobars, but
+    the user scrolls at the exact moment a new infobar is added, the infobar may
+    be hidden, but recorded here as visible. Reliably triggering and detecting
+    this combination is tricky so it isn't done. Only recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.ActiveCount">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The number of active input methods. Recorded when the user logs in to Chrome
+    OS or each cold start of Chrome on Android. The active input methods are
+    selected by user in the language settings page on Chrome OS and in system
+    language settings on Android.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.AutoCorrectLevel" enum="IMECorrectionLevel">
+  <owner>shuchen@chromium.org</owner>
+  <summary>The auto-correction level for suggestion engine.</summary>
+</histogram>
+
+<histogram name="InputMethod.Category" enum="InputMethodCategory">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The breakdown of input method usage by input method category. Recorded when
+    the system changes the current input method.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.Commit.Index">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The suggestion index (1-based) of the suggestion list item which user
+    chooses to commit.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.Commit.Type" enum="IMECommitType">
+  <obsolete>
+    Deprecated 03/2015, and replaced by InputMethod.Commit.Type2.
+  </obsolete>
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The suggestion accuracy type which the user chooses to commit.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.Commit.Type2" enum="IMECommitType2">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The suggestion accuracy type which the user chooses to commit.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.CommitLength">
+  <owner>shuchen@chromium.org</owner>
+  <summary>The number of characters committed with composition text.</summary>
+</histogram>
+
+<histogram name="InputMethod.ID" enum="InputMethodID">
+  <obsolete>
+    This is deprecated since M46, InputMethod.ID2 is used since then.
+  </obsolete>
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The breakdown of input method usage by input method IDs. Recorded when the
+    user presses keys on physical or on-screen keyboard.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.ID2" enum="InputMethodID2">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The breakdown of input method usage by input method IDs. Recorded when the
+    user presses keys on physical or on-screen keyboard.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.ImeMenu.ActivationChanged"
+    enum="BooleanActivation">
+  <owner>azurewei@chromium.org</owner>
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    Whether the opt-in IME menu in the shelf has been activated.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.ImeSwitch" enum="IMESwitchType">
+  <owner>shuchen@chromium.org</owner>
+  <summary>The trigger type of input method switches by user.</summary>
+</histogram>
+
+<histogram name="InputMethod.MatchesSystemLanguage" enum="BooleanMatched">
+  <owner>aurimas@chromium.org</owner>
+  <summary>
+    Whether the currently selected keyboard language matches the system
+    language. Recorded once with every cold start of Chrome for Android.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.PkCommit.Index">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The suggestion index (1-based) of the suggestion list item which user
+    chooses to commit for physical keyboard autocorrect.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.PkCommit.Type" enum="IMECommitType2">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The suggestion accuracy type which the user chooses to commit for physical
+    keyboard autocorrect.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.RegisterProxyView" enum="IMERegisterProxyView">
+  <owner>changwan@chromium.org</owner>
+  <summary>The result of registering proxy view to InputMethodManager.</summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.BackspaceCount">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The number of times the backspace key was pressed on the virtual keyboard,
+    while the virtual keyboard was alive. Recorded when the virtual keyboard is
+    closed.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.BackspaceOnLayout"
+    enum="IMEVKLayout">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The layout type of the virtual keyboard, recorded when backspace is pressed.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.BackwardsMovesPerSwipe"
+    units="moves">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    ChromeOS histogram that counts the number of times the cursor was moved to
+    the previous word by swiping backwards on the selection track. The count is
+    initialized when the user starts swiping from any side of the virtual
+    keyboard, incremented based on how far they swipe backwards on the selection
+    track, and recorded when they release their finger.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.CharactersBetweenBackspaces">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    Counts the length of text typed by the virtual keyboard between each
+    backspace. This metric provides a rough approximation of an error rate for
+    the virtual keyboard.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.CharactersCommitted">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    The total number of characters committed. Recorded when the virtual keyboard
+    is closed.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.Duration" units="seconds">
+  <owner>shuchen@chromium.org</owner>
+  <summary>How long the virtual keyboard was visible.</summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.GestureTypingEvent"
+    enum="IMEGestureTypingEvent">
+  <owner>girard@chromium.org</owner>
+  <summary>Text input events related to gesture typing.</summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.InitLatency" units="ms">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The on-screen keyboard initialization latency in milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.Layout" enum="IMEVKLayout">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The layout of the on-screen keyboard. Logged when the specific layout is
+    shown.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.LayoutSwitch">
+  <owner>shuchen@chromium.org</owner>
+  <summary>
+    The count of layout switching actions while virtual keyboard is alive.
+    Recorded when the virtual keyboard window is hidden or destroyed.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.MovesPerSwipe" units="moves">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    ChromeOS histogram that counts the number of times the cursor was moved to
+    the next word by swiping forward on the selection track. The count is
+    initialized when the user starts swiping from any side of the virtual
+    keyboard, incremented based on how far they swipe forwards on the selection
+    track, and recorded when they release their finger.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.TapCount">
+  <owner>girard@chromium.org</owner>
+  <summary>
+    The number of times the virtual keyboard was tapped while the virtual
+    keyboard was alive. Recorded when the virtual keyboard is closed.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.WordsDeletedPerSwipe"
+    units="words">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    ChromeOS histogram that tracks the total number of words that were deleted
+    by swiping forward on the deletion track. The count is initialized when the
+    user starts swiping on the backspace key, incremented based on how far they
+    swipe forwards on the deletion track, and recorded when they release their
+    finger.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.WordsPerMinute">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    The number of words typed per minute. Recorded when the virtual keyboard is
+    closed.
+  </summary>
+</histogram>
+
+<histogram name="InputMethod.VirtualKeyboard.WordsRestoredPerSwipe"
+    units="words">
+  <owner>rsadam@chromium.org</owner>
+  <summary>
+    ChromeOS histogram that tracks the total number of words that were restored
+    by swiping backwards on the deletion track. The count is initialized when
+    the user starts swiping on the backspace key, incremented based on how far
+    they swipe backwards on the deletion track, and recorded when they release
+    their finger.
+  </summary>
+</histogram>
+
+<histogram name="Installer.AttemptsCount.Total" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of update attempts until the update has been applied. This is
+    reported every time the device has completed an update.
+  </summary>
+</histogram>
+
+<histogram name="Installer.DevModeErrorCodes" enum="UpdateEngineErrorCode">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>Errors from update_engine process when running in dev mode.</summary>
+</histogram>
+
+<histogram name="Installer.DownloadOverheadPercentage" units="%">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The overhead in downloading extra bytes due to errors/interruptions.
+    Expressed as a percentage of the bytes that are actually needed to be
+    downloaded for the update to be successful.
+  </summary>
+</histogram>
+
+<histogram name="Installer.DownloadSourcesUsed"
+    enum="UpdateEngineDownloadSources">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The combinations of protocol and source server that were used to complete a
+    successful update.
+  </summary>
+</histogram>
+
+<histogram name="Installer.FullPayloadAttemptNumber" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of update attempts with a full update payload until the update
+    has been applied. This is reported on every update attempt.
+  </summary>
+</histogram>
+
+<histogram name="Installer.InstallDateProvisioningSource"
+    enum="UpdateEngineInstallDateProvisioningSource">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The source used to provision the install-date-days value sent to Omaha with
+    every request. This is reported when OOBE completes (M34 or later) or when
+    upgrading to a version with install-date-days support.
+  </summary>
+</histogram>
+
+<histogram name="Installer.NormalErrorCodes" enum="UpdateEngineErrorCode">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Errors from update_engine process when running in normal mode.
+  </summary>
+</histogram>
+
+<histogram name="Installer.OSAgeDays" units="days">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The age of the OS, defined as the age of the /etc/lsb-release file. This is
+    reported on every update check but at most once a day.
+  </summary>
+</histogram>
+
+<histogram name="Installer.PayloadAttemptNumber" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of update attempts until the update has been applied. This is
+    reported on every update attempt.
+  </summary>
+</histogram>
+
+<histogram name="Installer.PayloadFormat" enum="UpdateEnginePayloadFormat">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The type of update payload used to update the device. The difference between
+    &quot;Full&quot; and &quot;Forced Full&quot; is that in the latter, the
+    request sent to Omaha included a directive saying that a delta payload
+    wasn't accepted. A &quot;Full&quot; payload is one where a delta payload was
+    accepted but Omaha provided a full payload. This is reported every time the
+    device has completed an update.
+  </summary>
+</histogram>
+
+<histogram name="Installer.RebootToNewPartitionAttempt" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of consecutive times a device has failed to boot an update that
+    successfully applied. This metric is reported every time the firmware fails
+    to boot the slot with the update and fell back to the slot it originally
+    updated from.
+  </summary>
+</histogram>
+
+<histogram name="Installer.SuccessfulMBsDownloadedFrom" units="MB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Number of MBs downloaded from during an update that completed successfully.
+  </summary>
+</histogram>
+
+<histogram name="Installer.TimeToRebootMinutes" units="Minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Wall-clock duration between when an update has successfully completed (and
+    the user is presented with the &quot;reboot arrow&quot;) and when the system
+    has booted into the new update. This is reported every time the device is
+    rebooted after an update has been applied.
+  </summary>
+</histogram>
+
+<histogram name="Installer.TotalMBsDownloadedFrom" units="MB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Total number of MBs downloaded since the last successful update. This also
+    includes all the bytes downloaded during any prior failed attempts.
+  </summary>
+</histogram>
+
+<histogram name="Installer.UpdateDurationMinutes" units="Minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Absolute wall-clock time duration it took for the update to complete from
+    the time an update first began.  It includes not just the time the device
+    was up, but also includes the time the device spent sleeping.
+  </summary>
+</histogram>
+
+<histogram name="Installer.UpdateDurationUptimeMinutes" units="Minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Uptime duration it took for the update to complete from the time an update
+    first began.  It does not include the time the device spent sleeping, but it
+    does include the uptime spent in waiting for the hourly update checks to
+    happen.
+  </summary>
+</histogram>
+
+<histogram name="Installer.UpdateNumReboots" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Number of times the device was rebooted by the user since an update began
+    and until it completed successfully.
+  </summary>
+</histogram>
+
+<histogram name="Installer.UpdatesAbandonedCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of update attempts that didn't complete because a newer update
+    was detected during the update operation. This is reported every time the
+    device has completed an update.
+  </summary>
+</histogram>
+
+<histogram name="Installer.UpdatesAbandonedEventCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of consecutive different abandoned update payloads since the last
+    successful update. This is reported every time an update payload is
+    abandoned because a newer update payload is available.
+  </summary>
+</histogram>
+
+<histogram name="Installer.UpdateURLSwitches" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Number of times the download URLs were switched due to failures.
+  </summary>
+</histogram>
+
+<histogram name="InstallSigner.InvalidCount">
+  <obsolete>
+    Deprecated 4/2015. It appears the code at some point changed to use the
+    histogram name 'ExtensionInstallSigner.InvalidCount' and we forgot to update
+    this histogram name.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This is a count of the number of ids that we asked to be signed which the
+    server response indicated were not in the webstore.
+  </summary>
+</histogram>
+
+<histogram name="InstallSigner.InvalidSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallSigner.ResultWasValid.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extensions install signer got a well-formed result from the server but
+    the signature check on it failed.
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.CallbackInvalidSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.GetSignatureResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier tried to get a new signature and received a
+    response but it wasn't properly signed.
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.CallbackNoSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.GetSignatureResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier tried to get a new signature but was unable
+    to (network error contacting the server, response from server was malformed,
+    etc.).
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.CallbackValidSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.GetSignatureResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier got a new signature from the server that was
+    valid.
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.InitGoodSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.InitResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier found a valid signature at startup, and this
+    is a count of the number of signed ids it contained.
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.InitInvalidSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.InitResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier found a signature in the prefs at startup,
+    and it parsed properly, but it was invalid (some ids may have been
+    added/removed, could not verify it was signed with the correct private key,
+    etc.).
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.InitNoSignature">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.InitResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier did not find any signature in the prefs at
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.InitUnparseablePref">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.InitResult.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier found a signature in the prefs at startup,
+    but it wasn't parseable (missing/wrong format of required keys, etc.).
+  </summary>
+</histogram>
+
+<histogram name="InstallVerifier.SignatureFailedButNotEnforcing">
+  <obsolete>
+    Deprecated 1/2014 (crbug.com/333934). Replaced by
+    ExtensionInstallVerifier.MustRemainDisabled.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The extension install verifier would have disabled an extension but is not
+    in enforcement mode.
+  </summary>
+</histogram>
+
+<histogram name="InstanceID.DeleteToken.CompleteTime" units="ms">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time taken to complete the DeleteToken request successfully. If
+    the request is retried multiple times, the length of time is counted for the
+    last successful retry.
+  </summary>
+</histogram>
+
+<histogram name="InstanceID.DeleteToken.RequestStatus"
+    enum="GCMUnregistrationRequestStatus">
+  <owner>juyik@chromium.org</owner>
+  <summary>Status code of the outcome of DeleteToken request.</summary>
+</histogram>
+
+<histogram name="InstanceID.DeleteToken.RetryCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of retries before DeleteToken succeeds.</summary>
+</histogram>
+
+<histogram name="InstanceID.Enabled" enum="BooleanEnabled">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether the Instance ID API is enabled. Checked when a chrome.instanceID
+    function is called.
+  </summary>
+</histogram>
+
+<histogram name="InstanceID.GetToken.CompleteTime" units="ms">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time taken to complete the GetToken request successfully. If the
+    request is retried multiple times, the length of time is counted for the
+    last successful retry.
+  </summary>
+</histogram>
+
+<histogram name="InstanceID.GetToken.RequestStatus"
+    enum="GCMUnregistrationRequestStatus">
+  <owner>juyik@chromium.org</owner>
+  <summary>Status code of the outcome of GetToken request.</summary>
+</histogram>
+
+<histogram name="InstanceID.GetToken.RetryCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of retries before GetToken succeeds.</summary>
+</histogram>
+
+<histogram name="InstanceID.RestoredIDCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of Instance IDs restored from the persistent store at startup.
+  </summary>
+</histogram>
+
+<histogram name="InstanceID.RestoredTokenCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of InstanceID tokens restored from the persistent store at startup.
+  </summary>
+</histogram>
+
+<histogram name="Instant.InstantControllerEvent" enum="InstantControllerEvent">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records various events of interest in the InstantController. E.g. When URLs
+    are blacklisted.
+  </summary>
+</histogram>
+
+<histogram name="Instant.SessionsStorageNamespace"
+    enum="InstantSessionStorageNamespace">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    How often an Instant preview is committed onto a different tab than it was
+    created from.
+  </summary>
+</histogram>
+
+<histogram name="Instant.TimeToFirstShow" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time between the first Omnibox interaction and when the Instant preview
+    shows. If the instant preview was already showing when the user interacted
+    with the omnibox, this histogram is not recorded.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.CacheableNTPLoad"
+    enum="InstantExtended_CacheableNTPLoad">
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    Records a histogram for how often the Cacheable NTP fails to load.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.FallbackToLocalOverlay"
+    enum="InstantExtended_FallbackCause">
+  <obsolete>
+    Depcreated as of 10/2013. No longer relevant since the HTML overlay was
+    abandoned.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records the cause for falling back to a local overlay at the time of
+    fallback.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.InstantNavigation"
+    enum="InstantExtended_InstantNavigation">
+  <obsolete>
+    Deprecated as of 10/2013. This histogram is no longer relevant since the
+    HTML overlay went away.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records a histogram for instant extended (Local NTP and Online NTP) and
+    non-extended navigations.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.NewOptInState"
+    enum="InstantExtended_NewOptInState">
+  <obsolete>
+    Deprecated as of 11/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records, on startup, whether the user has chosen to opt-in to or opt-out of
+    InstantExtended via chrome://flags.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.OptInState" enum="InstantExtended_OptInState">
+  <obsolete>
+    Deprecated 2013-06. As of m30 use InstantExtended.NewOptInState.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records, on startup, whether the user has chosen to opt-in to or opt-out of
+    InstantExtended via chrome://flags.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchQuerytoQuery" units="%">
+  <obsolete>
+    Deprecated 2013-07. Please see
+    InstantExtended.PercentageMatchV2_QuerytoQuery instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a search query to another search query.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchQuerytoURL" units="%">
+  <obsolete>
+    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_QuerytoURL
+    instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a search query to a url. Example: Accidental search for
+    google.con, then navigation to google.com.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchURLtoQuery" units="%">
+  <obsolete>
+    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoQuery
+    instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a url to a search query.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchURLtoURL" units="%">
+  <obsolete>
+    Deprecated 2013-07. Please see InstantExtended.PercentageMatchV2_URLtoURL
+    instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a url to another url.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery" units="%">
+  <obsolete>
+    Removed in August 2016 with the removal of query in the omnibox code.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a search query to another search query.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchV2_QuerytoURL" units="%">
+  <obsolete>
+    Removed in August 2016 with the removal of query in the omnibox code.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a search query to a url. Example: Accidental search for
+    google.con, then navigation to google.com.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchV2_URLtoQuery" units="%">
+  <obsolete>
+    Removed in September 2016 because (i) this measurement was somewhat wrong,
+    (ii) it's difficult to understand the data, and (iii) there are better ways
+    to answer the same question.  The measurement is somewhat wrong because
+    reloads, link drops, and pasting URLs and pressing enter are all incorrectly
+    logged to the URLtoQuery histogram, not the URLtoURL histogram.  Futhermore,
+    this histogram is difficult to analyze because it's not broken up by input
+    length.  Short URLs can by random chance have a sizable percentage match
+    with a query.  Finally, there are better source for data like this; ask
+    mpearson for details.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a url to a search query.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PercentageMatchV2_URLtoURL" units="%">
+  <obsolete>
+    Removed in September 2016 because (i) this measurement was somewhat wrong,
+    and (ii) there are better ways to answer the same question.  The measurement
+    is somewhat wrong because reloads, link drops, and pasting URLs and pressing
+    enter are all incorrectly logged to the URLtoQuery histogram, not the
+    URLtoURL histogram.  Furthermore, there are better source for data like
+    this; ask mpearson for details.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Records the number of matching characters at the start of the user's text as
+    a percentage of average length between the old and new text when the user
+    navigates from a url to another url.
+  </summary>
+</histogram>
+
+<histogram name="InstantExtended.PrefValue" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated 2013-06. This preference has not been exposed or used for months,
+    and we do not plan to use it in the future.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records, on startup, the value of the &quot;Allow your search engine to
+    provide Instant result&quot; preference setting for the first profile
+    loaded.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.PreviewScrollState"
+    enum="InstantSearchClicks_PreviewScrollState">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    Records the scroll state on the preview page when instant search clicks
+    feature is triggered.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.ReasonForSwap"
+    enum="InstantSearchClicks_ReasonForSwap">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    Records the reason that triggered the page swap when instant search clicks
+    feature is triggered.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.TimeInPreview" units="ms">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    The time spent by the user in preview page before swapping to original or
+    navigating out of preview page.
+  </summary>
+</histogram>
+
+<histogram name="InstantSearchClicks.TimeToSwap" units="ms">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <owner>ksimbili@chromium.org</owner>
+  <summary>
+    The time it took for swap to trigger for all swaps. The is the time between
+    preview page load start to preview page swap with the original page.
+  </summary>
+</histogram>
+
+<histogram name="InterProcessTimeTicks.BrowserAhead" units="ms">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    Estimated additive skew between processes, recorded if the browser process
+    is ahead (higher TimeTicks value) than the renderer process.
+  </summary>
+</histogram>
+
+<histogram name="InterProcessTimeTicks.BrowserBehind" units="ms">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    Estimated additive skew between processes, recorded if the browser process
+    is behind (lower TimeTicks value) than the renderer process.
+  </summary>
+</histogram>
+
+<histogram name="InterProcessTimeTicks.IsSkewAdditive" enum="Boolean">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    True iff the conversion from the browser process TimeTicks to renderer
+    process TimeTicks is done by adding a constant, without scaling.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.authority_invalid_time" units="ms">
+  <obsolete>
+    Removed on 8/1/13.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between the SSL interstitial display and the user decision, which
+    may be either accept or deny.  This is only recorded for overridable SSL
+    warnings with a CERT_AUTHORITY_INVALID warning. Timing begins when user
+    first focuses on the page.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.captive_portal"
+    enum="CaptivePortalBlockingPageEvent">
+  <owner>meacer@chromium.org</owner>
+  <summary>
+    User action when the user is shown a captive portal error page.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.common_name_invalid_time" units="ms">
+  <obsolete>
+    Removed on 8/1/13.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between the SSL interstitial display and the user decision, which
+    may be either accept or deny.  This is only recorded for overridable SSL
+    warnings with a CERT_COMMON_NAME_INVALID warning. Timing begins when user
+    first focuses on the page.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.date_invalid_time" units="ms">
+  <obsolete>
+    Removed on 8/1/13.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between the SSL interstitial display and the user decision, which
+    may be either accept or deny.  This is only recorded for overridable SSL
+    warnings with a CERT_DATE_INVALID warning.  Timing begins when user first
+    focuses on the page.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.decision" enum="SecurityInterstitialDecision">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User decision when presented with a security interstitial. As of M44,
+    subresource interstitials were split into their own entries. As of M52,
+    social_engineering_ads* and social_engineering_landing* interstitial reasons
+    are split into their own entries from phishing*.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.decision.repeat_visit"
+    enum="SecurityInterstitialDecision">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User decision when presented with a security interstitial, on a site that
+    the user had previously visited.  As of M44, subresource interstitials were
+    split into their own entries. As of M52, social_engineering_ads* and
+    social_engineering_landing* interstitial reasons are split into their own
+    entries from phishing*.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.interaction"
+    enum="SecurityInterstitialInteraction">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User interactions with a security interstitial.  As of M44, subresource
+    interstitials were split into their own entries. As of M52,
+    social_engineering_ads* and social_engineering_landing* interstitial reasons
+    are split into their own entries from phishing*.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl" enum="SSLResponseTypesV2">
+  <obsolete>
+    Replaced by interstitial.ssl_overridable.* and
+    interstitial.ssl_nonoverridable.* in Jan 2015 (M42).
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    User action when the user is shown a SSL interstitial. SHOW_ALL and MORE
+    refer to the total number of SSL errors; all of the other numbers pertain to
+    the number of actions related to SSL errors that are overridable. The counts
+    do not sum to 100%; SHOW_ALL is a superset of SHOW_OVERRIDABLE, which in
+    turn will be a supserset of the PROCEED/DONT_PROCEED variables.
+    SHOW_UNDERSTAND is only being used by an experimental field trial. The
+    interstitials due to captive portals are now recorded in the
+    &quot;SSLCaptivePortal&quot;.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.captive_portal" enum="SSLCaptivePortal">
+  <owner>meacer@chromium.org</owner>
+  <summary>
+    Record possible states of captive portals. This histogram is emitted
+    (possibly multiple times to different buckets) whenever a ssl interstitial
+    page is displayed and captive portal detection is enabled. The captive
+    portal technique forces a client on a network to see a special web page
+    (usually for authentication purposes) before using the internet normally.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.cause.nonoverridable" enum="SSLErrorCauses">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Possible non-attack causes of the non-overridable SSL interstitial. Many
+    errors are not reported in this histogram and new errors may be added over
+    time, therefore one should not look at the breakdown of this histogram (one
+    bucket divided by the sum) because that will be inaccurate. Instead, one
+    should look at each bucket count divided by the count of the ssl errors of
+    that type. E.g. WWW mismatch is recorded only when the ssl error is
+    CERT_COMMON_NAME_INVALID, so one should look at the bucket count of WWW
+    mismatch divided by the bucket count of CERT_COMMON_NAME_INVALID in the
+    histogram interstitial.ssl_error_type.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.cause.overridable" enum="SSLErrorCauses">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Possible non-attack causes of the overridable SSL interstitial. Many errors
+    are not reported in this histogram and new errors may be added over time,
+    therefore one should not look at the breakdown of this histogram (one bucket
+    divided by the sum) because that will be inaccurate. Instead, one should
+    look at each bucket count divided by the count of the ssl errors of that
+    type. E.g. WWW mismatch is recorded only when the ssl error is
+    CERT_COMMON_NAME_INVALID, so one should look at the bucket count of WWW
+    mismatch divided by the bucket count of CERT_COMMON_NAME_INVALID in the
+    histogram interstitial.ssl_error_type.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.clockstate.build_time" enum="ClockStates">
+  <owner>mab@chromium.org</owner>
+  <summary>
+    State of the system clock, as inferred from the build timestamp, when an SSL
+    CERT_INVALID_DATE error is seen.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.clockstate.network" enum="ClockStates">
+  <obsolete>
+    Deprecated August 2016. Replaced with interstitial.ssl.clockstate.network2,
+    which records reasons why network time might be unavailable.
+  </obsolete>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    State of the system clock, relative to network time, when an SSL
+    CERT_INVALID_DATE error is seen.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.clockstate.network2"
+    enum="NetworkClockStates">
+  <obsolete>
+    Deprecated October 2016. Due to a bug, data in this histogram is mislabelled
+    and should be disregarded. Replaced with
+    interstitial.ssl.clockstate.network3.
+  </obsolete>
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    State of the system clock, relative to network time, when an SSL
+    CERT_INVALID_DATE error is seen.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.clockstate.network3"
+    enum="NetworkClockStates">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    State of the system clock, relative to network time, when an SSL
+    CERT_INVALID_DATE error is seen.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.connection_type"
+    enum="ResourcePrefetchPredictorNetworkType">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The histogram shows the connection types associated with SSL warnings. E.g.,
+    do more warnings occur on WiFi?
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.did_user_revoke_decisions"
+    enum="BooleanRevoked">
+  <owner>jww@chromium.org</owner>
+  <summary>
+    Specifies when a user enters the page info menu whether or not the user
+    pressed the SSL decisions revoke button. This can only by done if the user
+    is in the &quot;Remember Certificate Error Decisions&quot; experiment. This
+    is logged when the page info UI is closed.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.expiration_and_decision.nonoverridable"
+    enum="SSLIsExpiredAndDecision">
+  <owner>jww@chromium.org</owner>
+  <summary>
+    Records when a user has made a decision to proceed on a nonoverridable SSL
+    interstitial. Also records whether a prior decision had been made but the
+    decision expired.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.expiration_and_decision.overridable"
+    enum="SSLIsExpiredAndDecision">
+  <owner>jww@chromium.org</owner>
+  <summary>
+    Records when a user has made a decision to proceed on an overridable SSL
+    interstitial. Also records whether a prior decision had been made but the
+    decision expired.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.good_cert_seen" enum="SSLGoodCertSeenEvent">
+  <owner>jww@chromium.org</owner>
+  <summary>
+    Emitted when a good certificate is seen, specifying whether the user already
+    gave an exception for a bad certificate for the same host.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.severity_score.authority_invalid" units="%">
+  <obsolete>
+    Deprecated Jan 2015 (M42).
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The likelihood of a |CERT_AUTHORITY_INVALID| error being an attack.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.severity_score.common_name_invalid" units="%">
+  <obsolete>
+    Deprecated Jan 2015 (M42).
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The likelihood of a |CERT_COMMON_NAME_INVALID| error being an attack.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl.severity_score.date_invalid" units="%">
+  <obsolete>
+    Deprecated Jan 2015 (M42).
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The likelihood of a |CERT_DATE_INVALID| error being an attack.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl_accept_time" units="ms">
+  <obsolete>
+    Removed on 8/1/13.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between the SSL interstitial display and the user decision, when
+    the user accepts the SSL warning.  This is only recorded for overridable SSL
+    warnings.  Timing begins when user first focuses on the page.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl_error_handler" enum="SSLErrorHandlerEvent">
+  <owner>meacer@chromium.org</owner>
+  <summary>The type of action that the SSL error handler takes.</summary>
+</histogram>
+
+<histogram name="interstitial.ssl_error_type" enum="SSLErrorTypes">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The type of SSL error that the user encounters.  This is recorded for all
+    SSL warnings, regardless of whether they are overridable.
+  </summary>
+</histogram>
+
+<histogram name="interstitial.ssl_reject_time" units="ms">
+  <obsolete>
+    Removed on 8/1/13.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between the SSL interstitial display and the user decision, when
+    the user rejects the SSL warning.  This is only recorded for overridable SSL
+    warnings.  Timing begins when user first focuses on the page.
+  </summary>
+</histogram>
+
+<histogram name="Invalidations.GCMUpstreamRequest"
+    enum="GCMUpstreamMessageStatus">
+  <owner>nyquist@chromium.org</owner>
+  <owner>khushalsagar@chromium.org</owner>
+  <summary>
+    Status of sending outgoing invalidation message through GCM upsteam.
+  </summary>
+</histogram>
+
+<histogram name="Invalidations.NetworkChannel"
+    enum="InvalidationNetworkChannel">
+  <owner>pavely@chromium.org</owner>
+  <summary>Network channel used for invalidations.</summary>
+</histogram>
+
+<histogram name="IOS.ShareExtension.ReceivedEntriesCount" units="files">
+  <owner>olivierrobin@chromium.org</owner>
+  <summary>
+    The number of items received simultaneously in Chrome from the IOS share
+    extension.
+  </summary>
+</histogram>
+
+<histogram name="IOS.ShareExtension.ReceivedEntry"
+    enum="IOSShareExtensionReceivedEntryType">
+  <owner>olivierrobin@chromium.org</owner>
+  <summary>Type of the item received from the iOS share extension.</summary>
+</histogram>
+
+<histogram name="IOS.ShareExtension.ReceivedEntryDelay" units="ms">
+  <owner>olivierrobin@chromium.org</owner>
+  <summary>
+    The delay in milliseconds between the item creation in the extension and its
+    processing in Chrome.
+  </summary>
+</histogram>
+
+<histogram name="IOS.Spotlight.Action" enum="IOSSpotlightAction">
+  <owner>olivierrobin@chromium.org</owner>
+  <summary>The Spotlight Action pressed by the user.</summary>
+</histogram>
+
+<histogram name="IPC.AttachmentBrokerPrivileged.BrokerAttachmentError"
+    enum="IPCAttachmentBrokerPrivilegedBrokerAttachmentError">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    Errors that the privileged attachment broker encounters while trying to
+    broker attachments.
+  </summary>
+</histogram>
+
+<histogram name="IPC.AttachmentBrokerUnprivileged.BrokerAttachmentError"
+    enum="IPCAttachmentBrokerUnprivilegedBrokerAttachmentError">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    Errors that an unprivileged attachment broker encounters while trying to
+    broker attachments.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.CharacterCount" units="characters">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The count of the number of characters in JavaScript dialog messages grouped
+    by site engagement score.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.CharacterCountUserSuppressed" units="characters">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The count of the number of characters in JavaScript dialog messages that
+    were suppressed by the user. Compare with
+    JSDialogs.CountOfJSDialogMessageCharacters.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.CountOfJSDialogMessageCharacters" units="characters">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The count of the number of characters in JavaScript dialog messages.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.CountOfJSDialogMessageNewlines">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The count of the number of newlines in JavaScript dialog messages. (This
+    does not count breaks inserted by the UI toolkit in wrapping the messages.)
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageCharacters"
+    units="characters">
+  <obsolete>
+    Deprecated 2016-02.
+  </obsolete>
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The count of the number of characters in onbeforeunload messages.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.CountOfOnBeforeUnloadMessageNewlines">
+  <obsolete>
+    Deprecated 2016-02.
+  </obsolete>
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The count of the number of newlines in onbeforeunload messages. (This does
+    not count breaks inserted by the UI toolkit in wrapping the messages.)
+  </summary>
+</histogram>
+
+<histogram
+    name="JSDialogs.FineTiming.TimeBetweenDialogClosedAndNextDialogCreated"
+    units="ms">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Fine-grained (in msec) time between closing a Javascript dialog and opening
+    another, to track very frequent dialogs.
+  </summary>
+</histogram>
+
+<histogram
+    name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndNextDialogCreated"
+    units="ms">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Fine-grained (in msec) time between opening a Javascript dialog and opening
+    another, to track very frequent dialogs.
+  </summary>
+</histogram>
+
+<histogram
+    name="JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed"
+    units="ms">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Fine-grained (in msec) time between opening a Javascript dialog and closing
+    it, to track very short-lived dialogs.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.IsForemost" enum="BooleanForemost">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    For dialogs, whether or not they were spawned by a tab that was foremost.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.OnBeforeUnloadStayVsLeave" enum="StayVsLeave">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    For onbeforeunload dialogs, the user's choice between staying on the page
+    and leaving it.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.SiteEngagementOfBeforeUnload" units="%">
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The site engagement values of sites showing onbeforeunload dialogs. Logged
+    once per dialog, whether shown or suppressed.
+  </summary>
+</histogram>
+
+<histogram name="JSDialogs.SiteEngagementOfDialogs" units="%">
+  <obsolete>
+    Deprecated 2016-10. Site engagement needed to be measured in small buckets
+    anyway so it was never high-resolution enough for use.
+  </obsolete>
+  <owner>avi@chromium.org</owner>
+  <summary>
+    The site engagement values of sites showing dialogs. Logged once per dialog,
+    whether shown or suppressed.
+  </summary>
+</histogram>
+
+<histogram name="Keyboard.KeystrokeDeltas" units="ms">
+  <obsolete>
+    Deprecated 07/2016 in crbug.com/631204 with KeyboardUmaEventFilter removal.
+  </obsolete>
+  <owner>girard@chromium.org</owner>
+  <summary>
+    The time between keystrokes in Aura text fields. The only keystrokes that
+    are measured are ones that produce a printable character and are not over 5
+    seconds apart.
+  </summary>
+</histogram>
+
+<histogram name="Kiosk.LaunchType" enum="KioskLaunchType">
+  <owner>xiyuan@chromium.org</owner>
+  <owner>blumberg@chromium.org</owner>
+  <summary>
+    Records kiosk launches, whether it is an enterprise or consumer kiosk and
+    whether it is an auto launch or manual launch.
+  </summary>
+</histogram>
+
+<histogram name="LanguageUsage.AcceptLanguage" enum="LanguageCode">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Accept languages.</summary>
+</histogram>
+
+<histogram name="LanguageUsage.ApplicationLanguage" enum="LanguageCode">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Application languages used for UI.</summary>
+</histogram>
+
+<histogram name="Launch.FlagsAtStartup" enum="LoginCustomFlags">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Logs which Chrome flags from about:flags were active on start up.
+  </summary>
+</histogram>
+
+<histogram name="Launch.HomeScreen" enum="LaunchFromHomeScreen">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    Records how Chrome handled a launch from an Android Home screen shortcut.
+  </summary>
+</histogram>
+
+<histogram name="Launch.HomeScreenSource" enum="LaunchFromHomeScreenSource">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Records the source of an Android homescreen launch intent used to launch
+    Chrome.
+  </summary>
+</histogram>
+
+<histogram name="Launch.IntentFlags" enum="LaunchIntentFlags">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    Records flags (and combinations of flags) that were attached to the Intent
+    that started ChromeLauncherActivity.
+  </summary>
+</histogram>
+
+<histogram name="Launch.InvalidIntent" enum="BooleanHit">
+  <obsolete>
+    Deprecated 2016-06 -- hit rate is neglible.
+  </obsolete>
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    Records whether or not an invalid Android Intent was fired to launch Chrome.
+    (http://crbug.com/445136)
+  </summary>
+</histogram>
+
+<histogram name="Layout.MicroSecondsPerComplexText" units="microseconds">
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    For layouts that considered at least 100 nodes, at least half of which were
+    complex text fragments, the average number of microseconds spent laying out
+    each node.
+  </summary>
+</histogram>
+
+<histogram name="Layout.MicroSecondsPerFloat" units="microseconds">
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    For layouts that considered at least 100 nodes, at least half of which were
+    floats, the average number of microseconds spent laying out each node.
+  </summary>
+</histogram>
+
+<histogram name="Layout.MicroSecondsPerNode" units="microseconds">
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    For layouts that considered at least 100 nodes, the average number of
+    microseconds spent laying out each node.
+  </summary>
+</histogram>
+
+<histogram name="Layout.MicroSecondsPerPositioned" units="microseconds">
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    For layouts that considered at least 100 nodes, at least half of which were
+    fixed or absolute positioned, the average number of microseconds spent
+    laying out each node.
+  </summary>
+</histogram>
+
+<histogram name="Layout.MicroSecondsPerSimpleText" units="microseconds">
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    For layouts that considered at least 100 nodes, at least half of which were
+    simple text fragments, the average number of microseconds spent laying out
+    each node.
+  </summary>
+</histogram>
+
+<histogram name="Layout.MicroSecondsPerTD" units="microseconds">
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    For layouts that considered at least 100 nodes, at least half of which were
+    table cells, the average number of microseconds spent laying out each node.
+  </summary>
+</histogram>
+
+<histogram name="Layout.ScrollAnchor.AdjustedScrollOffset" enum="BooleanHit">
+  <owner>skobes@chromium.org</owner>
+  <summary>
+    Records the number of times ScrollAnchor adjusts the scroll offset.
+  </summary>
+</histogram>
+
+<histogram name="Layout.ScrollAnchor.SuppressedBySanaclap" enum="BooleanHit">
+  <owner>ymalik@chromium.org</owner>
+  <summary>
+    Records the number of times scroll anchoring is suppressed because of the
+    SANACLAP bit being set on an ancestor (see bit.ly/sanaclap).
+  </summary>
+</histogram>
+
+<histogram name="Layout.ScrollAnchor.TimeToFindAnchor" units="microseconds">
+  <owner>ymalik@chromium.org</owner>
+  <summary>The time it took to find a suitable anchor element.</summary>
+</histogram>
+
+<histogram name="LevelDB.Open" enum="LevelDBStatus">
+  <owner>cmumford@chromium.org</owner>
+  <summary>The result of an open attempt of a leveldb.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.All.SafeThreadAccess" units="accesses">
+  <obsolete>
+    Deprecated 2013-10. No thread-unsafety was found.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Linux and CrOS use unlocked_stdio(3). If it is used unsafely, record it
+    here. If there is no record of unsafety after chrome 29 has been in the
+    stable channel for a few weeks then revert this change.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.DeleteTableBackupFile" enum="BooleanSuccess">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    Tracks the success rate of deleting an unused leveldb table backup file.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError" enum="LevelDBIOErrorMethods">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Methods where leveldb's Chromium environment has IO errors when being used
+    by IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError." enum="PlatformFileError">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    PlatformFileErrors encountered by a single leveldb env method.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError.BFE" enum="PlatformFileError">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    Errors (base::File::Error) encountered by a single leveldb env method.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError.NewLogger" enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use LevelDBEnv.IDB.IOError.BFE.NewLogger.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in NewLogger.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError.NewSequentialFile"
+    enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use
+    LevelDBEnv.IDB.IOError.BFE.NewSequentialFile.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in NewSequentialFile.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError.RandomAccessFile"
+    enum="PlatformFileError">
+  <obsolete>
+    Deprecated 2013-04. As of m28 use
+    LevelDBEnv.IDB.IOError.NewRandomAccessFile.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>File errors in leveldb IDBEnv's NewRandomAccessFile method.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError.WritableFileAppend"
+    enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use
+    LevelDBEnv.IDB.IOError.BFE.WritableFileAppend.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in WritableFileAppend.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.IOError.WritableFileFlush"
+    enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use
+    LevelDBEnv.IDB.IOError.BFE.WritableFileFlush.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in WritableFileFlush.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.LockFileAncestorsNotFound" units="directories">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Number of directories missing when IDB LevelDBEnv tries to create a Lock
+    file.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.MaxFDs" units="files">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
+    for IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.MissingFiles" units="files">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Number of backup files found without corresponding ldb files. As measured by
+    GetChildren when used in IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.RetryRecoveredFromErrorIn"
+    enum="PlatformFileError">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    When IDB LevelDBEnv successfully retries an operation that had failed,
+    record the error from the most recent failed attempt.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.Table" enum="BooleanSuccess">
+  <obsolete>
+    As of M54 no longer creating or using table backup files.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Success indicates a successful backup or restore operation for .ldb table
+    files when used in IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.TimeTo" units="ms">
+  <obsolete>
+    Deprecated 2013-04. As of m28 use LevelDBEnv.IDB.TimeUntilSuccessFor.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Time IDB LevelDBEnv slept before successfully completing this operation. 0
+    means success on the first try.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IDB.TimeUntilSuccessFor" units="ms">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Time IDB LevelDBEnv slept before successfully completing this operation. 0
+    means success on the first try.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError" enum="LevelDBIOErrorMethods">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Methods where leveldb's Chromium environment has IO errors.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError." enum="PlatformFileError">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>PlatformFileErrors encountered by a single leveldb method.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError.BFE" enum="PlatformFileError">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    Errors (base::File::Error) encountered by a single leveldb method.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError.NewLogger" enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewLogger.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in NewLogger.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError.NewSequentialFile" enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.NewSequentialFile.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in NewSequentialFile.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError.RandomAccessFile" enum="PlatformFileError">
+  <obsolete>
+    Deprecated 2013-04. As of m28 use LevelDBEnv.IOError.NewRandomAccessFile.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    File errors in leveldb ChromiumEnv's NewRandomAccessFile method.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError.WritableFileAppend" enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileAppend.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in WritableFileAppend.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.IOError.WritableFileFlush" enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use LevelDBEnv.IOError.BFE.WritableFileFlush.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>Errno of errors encountered in WritableFileFlush.</summary>
+</histogram>
+
+<histogram name="LevelDBEnv.LockFileAncestorsNotFound" units="directories">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Number of directories missing when Non-IDB LevelDBEnv tries to create a Lock
+    file.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.MaxFDs" units="files">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
+    for clients other than IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.MissingFiles" units="files">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Number of backup files found without corresponding ldb files. As measured by
+    GetChildren when used in LevelDB clients other than IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.RetryRecoveredFromErrorIn" enum="PlatformFileError">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    When Non-IDB LevelDBEnv successfully retries an operation that had failed,
+    record the error from the most recent failed attempt.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.IOError" enum="LevelDBIOErrorMethods">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Methods where leveldb's Chromium environment has IO errors when being used
+    by ServiceWorker.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.IOError." enum="PlatformFileError">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    PlatformFileErrors encountered by a single leveldb env method.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.IOError.BFE" enum="PlatformFileError">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Errors (base::File::Error) encountered by a single leveldb env method.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.LockFileAncestorsNotFound"
+    units="directories">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Number of directories missing when ServiceWorker LevelDBEnv tries to create
+    a Lock file.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.MaxFDs" units="files">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    File descriptor limit recorded every time LevelDB calls NewRandomAccessFile
+    for ServiceWorker.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.MissingFiles" units="files">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Number of backup files found without corresponding ldb files. As measured by
+    GetChildren when used in ServiceWorker.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.RetryRecoveredFromErrorIn"
+    enum="PlatformFileError">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    When ServiceWorker LevelDBEnv successfully retries an operation that had
+    failed, record the error from the most recent failed attempt.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.Table" enum="BooleanSuccess">
+  <obsolete>
+    As of M54 no longer creating or using table backup files.
+  </obsolete>
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Success indicates a successful backup or restore operation for .ldb table
+    files when used in ServiceWorker.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.ServiceWorker.TimeUntilSuccessFor" units="ms">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Time ServiceWorker LevelDBEnv slept before successfully completing this
+    operation. 0 means success on the first try.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.Table" enum="BooleanSuccess">
+  <obsolete>
+    As of M54 no longer creating or using table backup files.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Success indicates a successful backup or restore operation for .ldb table
+    files when used by LevelDB clients other than IndexedDB.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.TimeTo" units="ms">
+  <obsolete>
+    Deprecated 2013-04. As of m28 use LevelDBEnv.TimeUntilSuccessFor.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Time Non-IDB LevelDBEnv slept before successfully completing this operation.
+    0 means success on the first try.
+  </summary>
+</histogram>
+
+<histogram name="LevelDBEnv.TimeUntilSuccessFor" units="ms">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Time Non-IDB LevelDBEnv slept before successfully completing this operation.
+    0 means success on the first try.
+  </summary>
+</histogram>
+
+<histogram name="LibraryLoader.NativeLibraryHack" enum="BooleanUsage">
+  <obsolete>
+    Deprecated as of 11/2014, removed from code.
+  </obsolete>
+  <owner>feng@chromium.org</owner>
+  <summary>
+    A boolean that indicates whether the workaround of a Sony framework bug was
+    used. The metric is Android-specific, and is logged when the browser starts.
+    See more details at http://crbug.com/311644.
+  </summary>
+</histogram>
+
+<histogram name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch"
+    units="%">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Percentage of the native library code pages resident in memory. Recorded
+    immediately before the library prefetching kicks in, only on Android.
+  </summary>
+</histogram>
+
+<histogram name="LibraryLoader.PrefetchStatus" enum="BooleanSuccess">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    Indicates whether the forking of a child process to prefetch the native
+    library succeeded. This metric is Android-specific, and is logged when the
+    browser starts.
+  </summary>
+</histogram>
+
+<histogram name="Linux.GlibcVersion" enum="LinuxGlibcVersion">
+  <owner>thestig@chromium.org</owner>
+  <summary>
+    The version of glibc used. (Linux only) Logged on each start up.
+  </summary>
+</histogram>
+
+<histogram name="Linux.SandboxStatus" enum="LinuxSandboxStatus">
+  <owner>rickyz@chromium.org</owner>
+  <summary>
+    The Linux sandbox status. This describes what sandboxing features are
+    enabled (such as the suid/namespace sandboxes, various namespaces, seccomp
+    bpf, ...). Emitted once at startup.
+  </summary>
+</histogram>
+
+<histogram name="Linux.WindowManager" enum="LinuxWindowManagerName">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    The window manager used. (Linux only) Logged on each start up.
+  </summary>
+</histogram>
+
+<histogram name="Linux.X11.ServerRTT" units="microseconds">
+  <owner>thomasanderson@chromium.org</owner>
+  <summary>
+    RTT between Chrome and the X11 server.  Tracked in X11EventSource by
+    measuring the latency to receive a property event after changing a property.
+  </summary>
+</histogram>
+
+<histogram name="LocalDiscovery.ClientRestartAttempts">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Records number of attempts to start local discovery.</summary>
+</histogram>
+
+<histogram name="LocalDiscovery.DetectorRestartTime" units="ms">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Time between detector restarts.</summary>
+</histogram>
+
+<histogram name="LocalDiscovery.DetectorTriggerTime" units="ms">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Time before detector trigger notifications.</summary>
+</histogram>
+
+<histogram name="LocalDiscovery.DevicesPage" enum="DevicesPageEvents">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Records events related to devices page.</summary>
+</histogram>
+
+<histogram name="LocalDiscovery.FirewallAccessTime" units="ms">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Windows only histogram that reports request time spend accessing firewall
+    rules. It's logged once per browser process lifetime, when local discovery
+    is used first time.
+  </summary>
+</histogram>
+
+<histogram name="LocalDiscovery.IsFirewallReady" enum="BooleanEnabled">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Windows only histogram that reports, whether a firewall is set, so we can
+    bind inbound sockets. It's logged once per browser process lifetime, when
+    local discovery is used first time.
+  </summary>
+</histogram>
+
+<histogram name="LocalDiscovery.PrivetNotificationsEvent"
+    enum="PrivetNotificationsEvent">
+  <owner>noamsml@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Records events related to local discovery notifications.</summary>
+</histogram>
+
+<histogram name="LocalStorage.BrowserLocalStorageCachePurgedInKB" units="KB">
+  <owner>ssid@chromium.org</owner>
+  <summary>
+    Total size of the HTML5 LocalStorage browser-side cache purged in KB when
+    memory pressure signal was triggered or cache size hit the limits.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.BrowserLocalStorageCacheSizeInKB" units="KB">
+  <owner>ssid@chromium.org</owner>
+  <summary>
+    Total size of the HTML5 LocalStorage databases in KB in the browser-side
+    cache recorded each time a new database is opened in memory.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.BrowserLocalStorageSizeInKB" units="KB">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Size of the HTML5 LocalStorage DB in KB in the browser-side cache.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.BrowserTimeToPrimeLocalStorage">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time to load HTML5 LocalStorage into the browser-side cache.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.CommitDelay" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Delay between a page making changes and those changes being written to the
+    DB.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.MojoSizeInKB" units="KB">
+  <owner>jam@chromium.org</owner>
+  <summary>
+    Size of the HTML5 LocalStorage DB in KB in the renderer-side cache using
+    Mojo implementation.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.MojoTimeToPrime" units="ms">
+  <owner>jam@chromium.org</owner>
+  <summary>
+    Time (in ms) to load HTML5 LocalStorage into the renderer-side cache using
+    Mojo implementation.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.MojoTimeToPrimeFor" units="ms">
+  <owner>jam@chromium.org</owner>
+  <summary>
+    Time (in ms) to load HTML5 LocalStorage into the renderer-side cache using
+    Mojo implementation, split by size.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.RendererLocalStorageSizeInKB" units="KB">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Size of the HTML5 LocalStorage DB in KB in the renderer-side cache.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.RendererTimeToPrimeLocalStorage">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time to load HTML5 LocalStorage into the renderer-side cache.
+  </summary>
+</histogram>
+
+<histogram name="LocalStorage.TimeToPrimeLocalStorage">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time to load HTML5 LocalStorage into the renderer-side cache. Note that the
+    name is not 'Renderer' prefixed for continuity with the old naming.
+  </summary>
+</histogram>
+
+<histogram name="Login.ConsumerNewUsersAllowed" enum="LoginConsumerWhitelist">
+  <owner>cmasone@chromium.org</owner>
+  <owner>sumit@chromium.org</owner>
+  <summary>
+    Chrome OS histogram tracking, per consumer sign-in, whether the device owner
+    is allowing arbitrary accounts to be used on the device, or only those on a
+    specific whitelist.
+  </summary>
+</histogram>
+
+<histogram name="Login.CustomFlags" enum="LoginCustomFlags">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    A set of chrome flags that required browser restart on Chrome OS user sign
+    in.
+  </summary>
+</histogram>
+
+<histogram name="Login.FailureReason" enum="LoginFailureReason">
+  <owner>achuith@chromium.org</owner>
+  <summary>Chrome OS login failure reason.</summary>
+</histogram>
+
+<histogram name="Login.LeastUsedAccountDays" units="days">
+  <owner>achuith@chromium.org</owner>
+  <owner>omrilio@chromium.org</owner>
+  <summary>
+    Chrome OS histogram that keeps track of the days since the least frequently
+    used account signed in. Reported on every boot and once a day after that.
+  </summary>
+</histogram>
+
+<histogram name="Login.NewUserPriorityPrefsSyncResult"
+    enum="NewUserPriorityPrefsSyncResult">
+  <owner>alemate@chromeos.org</owner>
+  <summary>Records whether a new user's priority prefs sync timed out.</summary>
+</histogram>
+
+<histogram name="Login.NewUserPriorityPrefsSyncTime" units="ms">
+  <owner>alemate@chromeos.org</owner>
+  <summary>
+    Time spent waiting for priority preferences to sync after new user sign in.
+    The operation will time out after 10s.
+  </summary>
+</histogram>
+
+<histogram name="Login.OfflineFailure.IsKnownUser" enum="LoginIsKnownUser">
+  <owner>glevin@chromium.org</owner>
+  <summary>
+    On offline login failure, records whether it is for an existing user.
+  </summary>
+</histogram>
+
+<histogram name="Login.OfflineSuccess.Attempts">
+  <owner>glevin@chromium.org</owner>
+  <summary>
+    On offline login success, records number of attempts, including success.
+  </summary>
+</histogram>
+
+<histogram name="Login.PasswordChangeFlow" enum="LoginPasswordChangeFlow">
+  <owner>xiyuan@chromium.org</owner>
+  <owner>omrilio@chromium.org</owner>
+  <summary>
+    Records the UI flow after a possible password change is detected.
+  </summary>
+</histogram>
+
+<histogram name="Login.PolicyFilesStatePerBoot" enum="LoginPolicyFilesState">
+  <owner>cmasone@chromium.org</owner>
+  <summary>The state of Chrome OS owner key and device policy files.</summary>
+</histogram>
+
+<histogram name="Login.PromptToCompleteLoginTime" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Time from first display of the login prompt until the user completes signing
+    in.
+  </summary>
+</histogram>
+
+<histogram name="Login.ReauthReason" enum="LoginReauthReasons">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Tracks the reason why a user was sent through the GAIA re-auth flow.
+  </summary>
+</histogram>
+
+<histogram name="Login.StateKeyGenerationStatus"
+    enum="LoginStateKeyGenerationStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>Result of a state key generation operation.</summary>
+</histogram>
+
+<histogram name="Login.SuccessReason" enum="LoginSuccessReason">
+  <owner>achuith@chromium.org</owner>
+  <summary>Chrome OS login success reason.</summary>
+</histogram>
+
+<histogram name="Login.TokenCheckResponseTime" units="ms">
+  <owner>glevin@chromium.org</owner>
+  <summary>
+    Time between sending a request to, and receiving a reply from, GAIA token
+    endpoint to validate TokenInfo.
+  </summary>
+</histogram>
+
+<histogram name="Login.TokenObtainResponseTime" units="ms">
+  <owner>glevin@chromium.org</owner>
+  <summary>
+    Time between sending a request to, and receiving a reply from, GAIA token
+    endpoint to obtain TokenInfo.
+  </summary>
+</histogram>
+
+<histogram name="Login.UsersActiveWeekly" units="users">
+  <owner>alemate@chromium.org</owner>
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Chrome OS histogram that keeps track of number of users who have logged in
+    in the last 7 days. Reported on every boot and once a day after that.
+  </summary>
+</histogram>
+
+<histogram name="Login.UsersActiveWeekly.Percent" units="%">
+  <owner>alemate@chromium.org</owner>
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Chrome OS histogram that keeps track of percentage of local users who have
+    logged in in the last 7 days. Reported on every boot and once a day after
+    that.
+  </summary>
+</histogram>
+
+<histogram name="Login.UserType" enum="LoginUserType">
+  <owner>cmasone@chromium.org</owner>
+  <summary>
+    Chrome OS histogram that keeps track of the way a user logs in and whether
+    Chrome OS is running normal or developer mode.
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.ChromeOS.PasswordChange"
+    enum="ManagedUserPasswordChange">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Chrome OS histogram that keeps track of supervised user password change
+    result.
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.FilteringResult"
+    enum="SupervisedUserSafetyFilterResult">
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The counts of results from supervised user URL filtering. Each entry
+    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
+    the page transition type (how the user got there, e.g. typed URL, clicked
+    link).
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.SafeSitesDelay" units="ms">
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The extra page load delays introduced by network requests due to the
+    supervised user SafeSites feature, measured once per page load.
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.SafetyFilter"
+    enum="SupervisedUserSafetyFilterResult">
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The counts of results from the supervised user safety filter. Each entry
+    includes the outcome of the filter (i.e. allowed, blocked, or unknown) and
+    the page transition type (how the user got there, e.g. typed URL, clicked
+    link). This only includes URL requests that were handled by the SafeSites
+    filter (both online and the static blacklist).
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.Whitelist.Count" units="whitelists">
+  <owner>bauerb@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The number of whitelists installed for a supervised user. Recorded at every
+    profile startup.
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.Whitelist.JsonParseDuration" units="ms">
+  <owner>bauerb@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The total amount of time taken to parse the JSON contents of a whitelist out
+    of process.
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.Whitelist.ReadDuration" units="ms">
+  <owner>bauerb@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The amount of time taken to read a whitelist file from disk.
+  </summary>
+</histogram>
+
+<histogram name="ManagedUsers.Whitelist.TotalLoadDuration" units="ms">
+  <owner>bauerb@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
+  <owner>pam@chromium.org</owner>
+  <summary>
+    The total amount of time taken to load a whitelist from disk and parse it,
+    including jumps to the blocking thread.
+  </summary>
+</histogram>
+
+<histogram name="Manifest.FetchResult" enum="ManifestFetchResultType">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Tracks whether the Manifest fetch succeed and why it failed if it failed.
+  </summary>
+</histogram>
+
+<histogram name="Manifest.HasProperty" enum="Boolean">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Tracks which properties of a Manifest were present when it was parsed. If a
+    property can't be parsed, it will be recorded as not present. These
+    histograms will only be used if the Manifest was correctly fetched and
+    parsed and the parsed manifest is not empty.
+  </summary>
+</histogram>
+
+<histogram name="Manifest.IsEmpty" enum="Boolean">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>Tracks whether the parsed Manifest is the empty Manifest.</summary>
+</histogram>
+
+<histogram name="Manifest.ParseSuccess" enum="Boolean">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Tracks the Manifest parsing result. A failure will be recorded if the
+    Manifest was incorrectly structured. This doesn't take into account parse
+    failures for each individual properties.
+  </summary>
+</histogram>
+
+<histogram name="Media.AcceleratedCompositingActive" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated as of July 21, 2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether accelerated compositing was used for HTML5 media rendering.
+  </summary>
+</histogram>
+
+<histogram name="Media.Android.BackgroundVideoTime" units="ms">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zhiqiang@chromium.org</owner>
+  <summary>
+    Android-specific metric. The time between the moment the backgrounded video
+    playback is started (meaning the user just resumed the backgrounded video
+    allowing playback) and the moment it stops being background playback by the
+    current playing video either going foreground or being paused by the user.
+    Note: on Android, videos are suspended when backgrounded.
+  </summary>
+</histogram>
+
+<histogram name="Media.Android.IsHttpLiveStreamingMedia" enum="MediaUrlType">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records whether a regular media URL is HLS (HTTP Live Streaming)
+    media or not.
+  </summary>
+</histogram>
+
+<histogram name="Media.Android.IsHttpLiveStreamingMediaPredictionResult"
+    enum="MediaTypePredictionResult">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Android: Records which HLS prediction based on the original URL was best.
+  </summary>
+</histogram>
+
+<histogram name="Media.Android.MediaPlayerSuccess" enum="MediaPlayerExitStatus">
+  <owner>timav@chromium.org</owner>
+  <summary>Android: Whether MediaPlayer exited without errors.</summary>
+</histogram>
+
+<histogram name="Media.Android.NumMediaServerCrashes">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Number of consecutive media server crashes monitored before it is
+    reset to 0. Reset happens if there are no crashes in a minute, or if user
+    hits the &quot;try again&quot; button on the media throttle info bar.
+  </summary>
+</histogram>
+
+<histogram name="Media.Android.ThrottleInfobarResponse"
+    enum="ThrottleInfobarResponse">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: The distribution of responses to the media throttle infobar prompt.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audible.ConcurrentTabsTime" units="ms">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records how long more than one tab is audible at the same time. The
+    concurrent tabs might change during this period. The time recorded starts
+    when the browser goes from one to two audbile tabs and stops when it is back
+    below two.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audible.ConcurrentTabsWhenStarting">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records how many tabs were audible when a new tab started to be audible.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audible.MaxConcurrentTabsInSession">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records how many tabs are audible at the same time during the session. It is
+    recording the maximum audible tab count everytime it increases. In other
+    words, a session with N concurrent audible tabs will record entries from 1
+    through N exactly once.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.ActualInputBufferFrameSizeMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Size (in audio frames) of native I/O buffers that is set by the audio
+    manager when calling AUAudioInputStream::Open(). I.e., it is the actual
+    buffer size and it can differ from the one that the client requested. Only
+    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.AudioUnitRenderHasWorkedMac"
+    enum="BooleanEverWorked">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Stored in combination with Media.Audio.RenderFailsWhenBufferSizeChangesMac.
+    It is set to true if calls to AudioUnitRender has ever worked, i.e., we did
+    not start to see kAudioUnitErr_CannotDoInCurrentContext error messages
+    directly from start but there has been at least on successful call to
+    AudioUnitRender.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.AutomaticGainControlMac" enum="BooleanEnabled">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if the Automatic Gain Control (AGC) is enabled or not. Only
+    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Autoplay" enum="AutoplaySource">
+  <owner>mlamouri@chromium.org</owner>
+  <owner>avayvod@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>Records the autoplay source of audios.</summary>
+</histogram>
+
+<histogram name="Media.Audio.Capture.FramesProvided" units="frames">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The number of captured audio frames that is provided by the operating system
+    in each callback. Typically, Chrome will want to use a 10 ms buffer (e.g.
+    480 frames for a sample rate of 48 kHz), but the OS may decide to capture
+    e.g. 256 frames of audio at a time. If the desired frame size is used, the
+    emitted value is special-cased to be 0. This histogram then shows how
+    frequent it is that the desired number of frames is used and if not, the
+    number of frames used in practice. The number of frames per callback is
+    normally constant or very rarely changed throughout the lifetime of the
+    audio stream. The first value that differs from the desired value is stored
+    and logged when an audio input stream is closed. Any further differences
+    during the lifetime will be ignored.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Capture.Glitches" units="glitches">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The number of glitches that were detected at the OS level while an audio
+    stream was active. A glitch is detected if the OS has to skip providing a
+    set of frames. This value is logged when an audio input stream is closed.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Capture.LargestGlitchMs" units="ms">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The length in milliseconds of the largest audio glitch that was detected at
+    the OS level. This value is logged when an audio input stream that has
+    suffered glitches is closed.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Capture.LostFramesInMs" units="ms">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The combined length in milliseconds of audio glitches that was detected at
+    the OS level. This is useful to know in particular for audio processing such
+    as echo cancellation. This value is logged when an audio input stream that
+    has suffered glitches is closed.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputBufferSizeWasChangedAudioWorkedMac"
+    enum="BooleanChanged">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if the size of the audio unit's IO buffer was changed when
+    starting an input audio stream. Sampled each time an AUAudioInputStream
+    instance is closed, i.e., we know that input audio has started as it should
+    when this value is stored. Can be compared with
+    Media.Audio.InputBufferSizeWasChangedMac which is only added when input
+    audio fails to start.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputBufferSizeWasChangedMac"
+    enum="BooleanSuccess">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if the size of the audio unit's IO buffer was changed when
+    starting an input audio stream. Only sampled when
+    Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputDevicePropertyChangedMac"
+    enum="AudioDevicePropertyResult">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Lists device properties that have been changed during an audio input stream
+    session. We update a map of different property changes during a session and
+    all these values are recorded when an AUAudioInputStream object is closed,
+    hence multiple enum values can be emitted when the histogram is stored.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputDevicePropertyChangedStartupFailedMac"
+    enum="AudioDevicePropertyResult">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Lists device properties that have been changed during an audio input stream
+    session. Only sampled when Media.Audio.InputStartupSuccessMac reports
+    'Failure' and multiple enum values can be emitted each time that happens.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputRestartAttemptsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Counts the total number of times an attempt to restart input audio has been
+    done. The value is stored once when a stream is closed and updated when it
+    has been detected that input audio callbacks are not generated as expected.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputStartupSuccessMac" enum="BooleanSuccess">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if audio capturing did start after stream startup was requested.
+    Sampled once 5 seconds after a stream has been asked to start.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputStartWasDeferredAudioWorkedMac"
+    enum="BooleanDeferred">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if audio capturing started with a small delay or not. Sampled each
+    time an AUAudioInputStream instance is closed, i.e., we know that input
+    audio has started as it should when this value is stored. Can be compared
+    with Media.Audio.InputStartWasDeferredMac which is only added when input
+    audio fails to start.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.InputStartWasDeferredMac" enum="BooleanDeferred">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if audio capturing started with a small delay or not. Only sampled
+    when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.IsOnBatteryPowerMac" enum="BooleanOnBattery">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Indicates if the Mac OSX device is on battery power or not. Only sampled
+    when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.LogicalProcessorsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    The number of logical processors/cores available on the Mac OSX device. Only
+    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.NumberOfBasicInputStreamsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Number of created default input audio streams. Only sampled when
+    Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.NumberOfLowLatencyInputStreamsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Number of created low-latency input audio streams. Only sampled when
+    Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.NumberOfOutputStreamsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Number of created output audio streams. Only sampled when
+    Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.OutputDeviceAuthorizationTime" units="ms">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Time delta between the moment output device authorization request is
+    received by the browser and the moment its processessing is finished (and
+    reply is to be sent back to the renderer if IPC is not closed yet).
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.PhysicalProcessorsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    The number of physical processors/cores available on the Mac OSX device.
+    Only sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyExact"
+    units="inputs">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Number of simultaneous inputs coming to the AudioRendererMixer which renders
+    audio with user specified latency. The value is logged each time it reaches
+    a new maximum for the mixer. It is useful for evaluating how mixing audio in
+    renderer reduces the number of output audio streams going from the renderer
+    to the browser.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyInteractive"
+    units="inputs">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Number of simultaneous inputs coming to the AudioRendererMixer which renders
+    audio with interactive latency. The value is logged each time it reaches a
+    new maximum for the mixer. It is useful for evaluating how mixing audio in
+    renderer reduces the number of output audio streams going from the renderer
+    to the browser.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyPlayback"
+    units="inputs">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Number of simultaneous inputs coming to the AudioRendererMixer which renders
+    audio with playback latency. The value is logged each time it reaches a new
+    maximum for the mixer. It is useful for evaluating how mixing audio in
+    renderer reduces the number of output audio streams going from the renderer
+    to the browser.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.AudioInputsPerMixer.LatencyRtc"
+    units="inputs">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Number of simultaneous inputs coming to the AudioRendererMixer which renders
+    audio with real time latency. The value is logged each time it reaches a new
+    maximum for the mixer. It is useful for evaluating how mixing audio in
+    renderer reduces the number of output audio streams going from the renderer
+    to the browser.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.AudioMixing.LatencyMap" units="subsets">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Subset of audio output latencies encountered by the renderer so far. Logged
+    each time an audio output with a new latency starts playing. The values are
+    bitsets where each bit represents corresponding latency according to
+    AudioLatency::LatencyType. Useful for understanding usecases for audio
+    output mixing in renderer.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.BrowserCallbackRegularity">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Reflects how regularly browser issues audio requests to renderer. Depends on
+    how well the system buffer size the browser side renders audio at and the
+    buffer size it requests from renderer are aligned.  When zero, it means
+    renderer buffer size is a multiple of system buffer size, and render calls
+    from browser to renderer are issued evenly. When -1, it means the renderer
+    buffer size is larger than system buffer size, but is not an exact multiple
+    of it; in this case browser periodically skips a call to renderer. When
+    positive, floor(value/2) reflects the number of extra consecutive render
+    requests issued by browser to renderer each time to fulfill the system audio
+    render request; if (value/2) is not integer, then plus one more extra call
+    is issued periodically.   The metric is recorded on the edge between browser
+    and renderer. On Mac the system buffer size may vary dynamically, the metric
+    does not capture that: only the buffer size mismatch introduced by audio
+    output device configuration is captured.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.FramesRequested" units="frames">
+  <owner>tommi@chromium.org</owner>
+  <summary>
+    The number of frames audio is actually rendered at if the number is
+    different from the desired number of frames.  If the desired frame size is
+    used, this value will be 0. Typically, Chrome will want to use a 10ms buffer
+    (e.g. 480 frames for a sample rate of 48kHz), but we might have to render
+    audio 256 frames at a time. This histogram gives us an indication as to how
+    frequent that is and what buffer sizes are used in practice. This value is
+    logged when an audio output stream is stopped.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.GetSourceDataTime.WebRTC"
+    units="microseconds">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The time spent to get audio data from the source. For WebRTC, it's the time
+    spent in WebRtcAudioRenderer::SourceCallback. Logged every function call,
+    which is every 10 ms.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.GetSourceDataTimeMax.WebRTC"
+    units="microseconds">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The maximum time spent to get audio data from the source during a session.
+    For WebRTC, it's the time spent in WebRtcAudioRenderer::SourceCallback. A
+    session is between Start() and Stop() of WebRtcAudioRenderer.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.Glitches" units="glitches">
+  <owner>tommi@chromium.org</owner>
+  <summary>
+    The number of glitches that were detected at the OS level while an audio
+    stream was active. A glitch is detected if the OS has to skip rendering a
+    set of frames. This value is logged when an audio output stream is stopped.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.LargestGlitchMs" units="ms">
+  <owner>tommi@chromium.org</owner>
+  <summary>
+    The length in milliseconds of the largest glitch that was detected at the OS
+    level. This value is logged when an audio output stream that has suffered
+    glitches is stopped.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.LostFramesInMs" units="ms">
+  <owner>tommi@chromium.org</owner>
+  <summary>
+    The combined length in milliseconds of audio glitches. This is useful to
+    know in particular for audio processing such as echo cancellation. This
+    value is logged when an audio output stream that has suffered glitches is
+    stopped.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.OutputDeviceAuthorizationTimedOut"
+    enum="BooleanTimedOut">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Whether audio output device timed out waiting for authorization reply from
+    the browser side.
+  </summary>
+</histogram>
+
+<histogram
+    name="Media.Audio.Render.SinkCache.GetOutputDeviceInfoCacheUtilization"
+    enum="GetOutputDeviceInfoCacheHit">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Whether a cached sink was used to get audio output device information, or a
+    new sink was created for that.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.SinkCache.InfoSinkReusedForOutput"
+    enum="BooleanReused">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    When a new sink is created to get output device information, it is cached.
+    This metric shows if such a sink is later reused for audio output (can
+    happen no more than once) or deleted unused after timeout expires. Logged
+    when one of the abovementioned events takes place.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.Render.SinkCache.UsedForSinkCreation"
+    enum="BooleanUsage">
+  <owner>olka@chromium.org</owner>
+  <summary>
+    Whether a sink was created through the sink cache or directly.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.RenderFailsWhenBufferSizeChangesMac"
+    enum="BooleanChanged">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    True if a call to AudioUnitRender failed with an error code of
+    kAudioUnitErr_CannotDoInCurrentContext (-10863) and the call was preceded
+    with a change in the native I/O buffer size. This value is logged while
+    input audio is active but it should be a very rare event.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.RequestedInputBufferFrameSizeMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Size (in audio frames) the client has asked for when creating an
+    AUAudioInputStream object. It might not be able to fulfill this request. The
+    actual size is given by Media.Audio.ActualInputBufferFrameSizeMac. Only
+    sampled when Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.ResumeEventsMac">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Counts the number of times the system has resumed from power suspension.
+    Counting is reset each time Chrome restarts. Only sampled when
+    Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.Audio.UptimeMac" units="hours">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Reports the system uptime in hours for Mac OS X devices. Only sampled when
+    Media.Audio.InputStartupSuccessMac reports 'Failure'.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioBitsPerChannel">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Bits per channel of HTML5 audio sample data.</summary>
+</histogram>
+
+<histogram name="Media.AudioCapturerAudioGlitches" enum="AudioGlitchResult">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    Whether there is input audio glitches due to dropped input audio data or
+    not. Sampled when a low-latency input audio stream is destructed.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioCapturerDroppedData" units="%">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The percentage of input audio data that was dropped at the browser/renderer
+    boundary due to for example buffer overflow in the writer side buffer or in
+    the socket. Reported at the destruction of low-latency audio input stream.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioCapturerMissedReadDeadline" units="%">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The percentage of input audio data blocks that had to be buffered because
+    there was not room in the shared memory ring buffer on the browser/renderer
+    boundary. This happens if the reading side hasn't read data in time.
+    Reported at the destruction of low-latency audio input stream.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioCapturerRepetition" units="ms">
+  <owner>minyue@chromium.org</owner>
+  <summary>
+    Captures bit-exact audio repetitions with pre-defined look back time. As
+    soon as a repetition is detected, its look back time is reported. Ideally,
+    no reports should be generated.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioChannelLayout" enum="ChannelLayout">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Audio channel layout in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.AudioCodec" enum="AudioCodec">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Audio codec used in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.AudioInputCbErrorMac" units="OSStatus">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Error codes that AudioUnitRender() returns in AUAudioInputStream on Mac.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioInputController" units="ms">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Measures the time taken for AudioInputController::</summary>
+</histogram>
+
+<histogram name="Media.AudioInputControllerCaptureStartupSuccess"
+    enum="CaptureStartupResult">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Whether capture started successfully after an input stream startup was
+    requested.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioInputControllerSessionSilenceReport"
+    enum="AudioInputSilenceReport">
+  <owner>grunell@chromium.org</owner>
+  <summary>The silence report for an audio input device session.</summary>
+</histogram>
+
+<histogram name="Media.AudioInputDeviceManager" units="ms">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Measures the time taken for AudioInputDeviceManager::</summary>
+</histogram>
+
+<histogram name="Media.AudioOutputController" units="ms">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Measures the time taken for AudioOutputController::</summary>
+</histogram>
+
+<histogram name="Media.AudioOutputControllerDataNotReady" units="ms">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Time spent waiting in AudioOutputController::WaitTillDataReady() if the data
+    was not initially available.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioOutputControllerPlaybackStartupSuccess"
+    enum="BooleanSuccess">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Whether playback started successfully after stream startup was requested.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioRendererAudioGlitches" enum="AudioGlitchResult">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Captures if render-side audio glitches are detected or not. Sampled when a
+    low-latency output audio stream is destructed.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioRendererEvents" enum="AudioRendererEvents">
+  <obsolete>
+    Deprecated Mar 2016 in favor of a new PipelineStatus code.
+  </obsolete>
+  <owner>scherkus@chromium.org</owner>
+  <summary>Captures statistics for various AudioRendererImpl events.</summary>
+</histogram>
+
+<histogram name="Media.AudioRendererIpcStreams">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The maximum number of simultaneous audio render streams over IPC created in
+    AudioRendererHost for a render process. Logged at render process shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioRendererIpcStreamsTotal">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    The maximum number of simultaneous audio render streams over IPC created in
+    AudioRendererHost for all render processes. Logged at render process
+    shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioRendererMissedDeadline" units="%">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Percentage of AudioSyncReader::Read() calls where the renderer missed its
+    realtime deadline.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioSampleFormat" enum="AudioSampleFormat">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Audio sample format in HTML5 media. Logged when Audio Decoder initializes.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioSamplesPerSecond" enum="AudioSampleRate">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Audio samples per second in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.AudioSamplesPerSecondUnexpected" units="Hz">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Audio samples per second in HTML5 media (atypical values, in Hz).
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioThreadStatus" enum="AudioThreadStatus">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    State of the audio thread. A value of &quot;started&quot; is emitted once
+    the hang monitor has been initialized. If the thread is detected as hung
+    later, a value of &quot;hung&quot; is emitted. If the hung thread later
+    recovers a value of &quot;recovered&quot; is emitted.
+  </summary>
+</histogram>
+
+<histogram name="Media.AudioTrackProcessingStates"
+    enum="AudioTrackProcessingStates">
+  <owner>grunell@chromium.org</owner>
+  <summary>
+    State of the media stream audio track processing, sampled once during the
+    life time of a MediaStreamAudioProcessor.
+  </summary>
+</histogram>
+
+<histogram name="Media.AVDA.FrameSentAsOverlay" enum="BooleanFrameAsOverlay">
+  <owner>liberato@chromium.org</owner>
+  <summary>
+    Record a count for each frame sent to the client by AVDA.  True counts
+    indicate that the frame was an overlay (SurfaceView).  False counts are for
+    SurfaceTexture frames.
+  </summary>
+</histogram>
+
+<histogram name="Media.AVDA.InputQueueTime" units="ms">
+  <obsolete>
+    Deprecated 03/2016. No longer needed.
+  </obsolete>
+  <owner>watk@chromium.org</owner>
+  <summary>
+    The time that a bitstream buffer spends in AVDA's pending bitstream buffer
+    queue before it is fed to MediaCodec.
+  </summary>
+</histogram>
+
+<histogram name="Media.AVDA.MissingFormatChanged" enum="BooleanFormatChanged">
+  <obsolete>
+    Deprecated 10/2016. No longer needed.
+  </obsolete>
+  <owner>liberato@chromium.org</owner>
+  <summary>
+    Number of times that AVDA stopped decoding because MediaCodec failed to
+    provide a FORMAT_CHANGED message before sending decoded frames back.  True
+    counts indicate instances where FORMAT_CHANGE was missed, while false
+    instances indicate any MediaCodec initialization by AVDA.
+  </summary>
+</histogram>
+
+<histogram name="Media.AVDA.NumAVDAInstances" units="AVDA instances">
+  <obsolete>
+    Deprecated 10/2016. No longer needed.
+  </obsolete>
+  <owner>watk@chromium.org</owner>
+  <summary>
+    The number of concurrently running AndroidVideoDecodeAccelerators. Logged
+    during each AVDA initialization.
+  </summary>
+</histogram>
+
+<histogram name="Media.AVDA.VirtualContext" enum="BooleanVirtualContext">
+  <obsolete>
+    Deprecated 10/2016. No longer needed.
+  </obsolete>
+  <owner>liberato@chromium.org</owner>
+  <summary>
+    Number of times that AVDA's deferred rendering encountered a virtual GL
+    context.  True counts indicate virtual, false counts indicate not.
+  </summary>
+</histogram>
+
+<histogram name="Media.AvdaCodecImage.WaitTimeForFrame" units="ms">
+  <owner>liberato@chromium.org</owner>
+  <summary>
+    Time spent waiting for a frame to become available in a SurfaceTexture after
+    requesting that MediaCodec renders it.
+  </summary>
+</histogram>
+
+<histogram name="Media.CacheUseful" enum="BooleanSuccess">
+  <owner>scherkus@chromium.org</owner>
+  <summary>
+    Whether a media response might be used to satisfy a future request.
+  </summary>
+</histogram>
+
+<histogram name="Media.ChromeCast.DelayedAndDroppedFramesPer5Sec"
+    units="frames/5s">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    The average number of delayed and dropped frames for the ChromeCast
+    application.  Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.ChromeCast.DisplayedFramesPerSecond" units="frames/s">
+  <obsolete>
+    Deprecated 07/2015 in issue 508534.
+  </obsolete>
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    The average number of displayed frames for the ChromeCast application.
+    Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.ChromeCast.TimeToBufferAv" units="ms">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Time needed to pre-buffer A/V data before the actual playback for the
+    ChromeCast application.
+  </summary>
+</histogram>
+
+<histogram name="Media.ChromeCast.TimeToBufferAvAfterAbort" units="ms">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Time needed to buffer A/V data after an abort for the ChromeCast
+    application.
+  </summary>
+</histogram>
+
+<histogram name="Media.ChromeCast.TimeToBufferAvAfterUnderrun" units="ms">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Time needed to buffer A/V data after an underrun for the ChromeCast
+    application.
+  </summary>
+</histogram>
+
+<histogram name="Media.Controls.Show" enum="MediaControlsShowReason">
+  <obsolete>
+    Deprecated May 19 2016 in favor of Media.Controls.Show.{Audio,Video}
+  </obsolete>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Record whether the default media controls were shown and why every time they
+    could be shown.
+  </summary>
+</histogram>
+
+<histogram name="Media.Controls.Show.Audio" enum="MediaControlsShowReason">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Record whether the default media controls of an audio element were shown and
+    why every time they could be shown. Note that audio elements that were not
+    insterted to the DOM and do not have a controls attribute are not taken into
+    account.
+  </summary>
+</histogram>
+
+<histogram name="Media.Controls.Show.Video" enum="MediaControlsShowReason">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Record whether the default media controls of a video element were shown and
+    why every time they could be shown.
+  </summary>
+</histogram>
+
+<histogram name="Media.CrosBeamformingDeviceState"
+    enum="CrosBeamformingDeviceState">
+  <owner>ajm@chromium.org</owner>
+  <summary>
+    The state of the user selected virtual beamforming audio device on CrOS.
+    It's logged whenever the format of the audio input stream is queried, which
+    at least happens on stream startup, but could happen at other times as well.
+  </summary>
+</histogram>
+
+<histogram name="Media.DetectedAudioCodec" enum="FFmpegCodecs">
+  <obsolete>
+    Deprecated Sep 15 2015 in favor of Media.DetectedAudioCodecHash
+  </obsolete>
+  <owner>jrummell@chromium.org</owner>
+  <summary>Audio codec used in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.DetectedAudioCodecHash" enum="FFmpegCodecHashes">
+  <owner>jrummell@chromium.org</owner>
+  <summary>
+    Audio codec used in HTML5 media. Reporting corrected in M51 to include all
+    detected audio codecs, not just those up to and including the first one
+    supported.
+  </summary>
+</histogram>
+
+<histogram name="Media.DetectedContainer" enum="MediaContainers">
+  <owner>jrummell@chromium.org</owner>
+  <summary>
+    Container used for HTML5 media. Views that include pre-M34 data will
+    categorize dash (38) and smooth streaming (39) in the &quot;Other&quot;
+    bucket.
+  </summary>
+</histogram>
+
+<histogram name="Media.DetectedTrackCount.Audio">
+  <owner>wolenetz@chromium.org</owner>
+  <summary>
+    Number of detected audio tracks in HTML5 media. Not all may be usable by the
+    player.
+  </summary>
+</histogram>
+
+<histogram name="Media.DetectedTrackCount.Text">
+  <owner>wolenetz@chromium.org</owner>
+  <summary>
+    Number of detected text tracks in HTML5 media. Not all may be usable by the
+    player.
+  </summary>
+</histogram>
+
+<histogram name="Media.DetectedTrackCount.Video">
+  <owner>wolenetz@chromium.org</owner>
+  <summary>
+    Number of detected video tracks in HTML5 media. Not all may be usable by the
+    player.
+  </summary>
+</histogram>
+
+<histogram name="Media.DetectedVideoCodec" enum="FFmpegCodecs">
+  <obsolete>
+    Deprecated Sep 15 2015 in favor of Media.DetectedVideoCodecHash
+  </obsolete>
+  <owner>jrummell@chromium.org</owner>
+  <summary>Video codec used in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.DetectedVideoCodecHash" enum="FFmpegCodecHashes">
+  <owner>jrummell@chromium.org</owner>
+  <summary>
+    Video codec used in HTML5 media. Reporting corrected in M51 to include all
+    detected video codecs, not just those up to and including the first one
+    supported.
+  </summary>
+</histogram>
+
+<histogram name="Media.DevicePermissionActions" enum="DevicePermissionActions">
+  <obsolete>
+    Removed 10/2015 in favor of Permissions.Action.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the actions taken in the media infobar, which prompts the users for
+    device permission.
+  </summary>
+</histogram>
+
+<histogram name="Media.DroppedFrameCount">
+  <owner>prabhur@chromium.org</owner>
+  <summary>
+    Count of dropped frames between pipeline start and stop. Media pipeline
+    starts/stops when an HTML5 video is loaded/unloaded respectively in the
+    browser.
+  </summary>
+</histogram>
+
+<histogram name="Media.Duration" units="ms">
+  <owner>scherkus@chromium.org</owner>
+  <summary>Duration in milliseconds of HTML5 media (when known).</summary>
+</histogram>
+
+<histogram name="Media.EME.CdmFileIO.FileSizeKBOnError" units="KB">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Size in KB of the last file successfully read by the CDM through CDM FileIO
+    before a specific error happens. This is reported only when the error
+    happens, which should be rare.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.CdmFileIO.FileSizeKBOnFirstRead" units="KB">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Size in KB of the first file successfully read by the CDM through CDM
+    FileIO. This is recorded once per CDM instance.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.CdmInterfaceVersion">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Chromium could support multiple versions of CDM interface. This metric
+    records the CDM interface version that the CDM created by Chromium uses.
+    This is recorded once per CDM instance.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey" enum="CdmPromiseResult">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Result of promises for Clear Key key systems that were handled by Chromium
+    code.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey.addKey" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>addKey result using the Clear Key key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey.cancelKeyRequest" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>cancelKeyRequest result using the Clear Key key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey.CreateCdmTime" units="ms">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    The time it takes to create the CDM instance for Clear Key key system.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey.generateKeyRequest"
+    enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>generateKeyRequest result using the Clear Key key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey.KeyAdded">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>KeyAdded event count using the Clear Key key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.ClearKey.KeyError" enum="MediaKeyError">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>KeyError event count using the Clear Key key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.KeySystemSupport.Widevine"
+    enum="MediaKeySystemSupportStatus">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Key system support query status and result. Each enum value will be reported
+    at most once per renderer process.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.NeedKey">
+  <owner>xhwang@chromium.org</owner>
+  <summary>EME NeedKey event count.</summary>
+</histogram>
+
+<histogram name="Media.EME.OutputProtection" enum="MediaOutputProtectionStatus">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Output protection query status and result. One query and one positive (no
+    unprotected external links) result (if any) are reported per CDM instance.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.RequestMediaKeySystemAccess"
+    enum="RequestMediaKeySystemAccessStatus">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Key system support query status and result, as reported by
+    RequestMediaKeySystemAccess. Each value will be reported at most once per
+    renderer process.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown" enum="CdmPromiseResult">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Result of promises for unknown key systems that were handled by Chromium
+    code.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.addKey" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>addKey result using an unknown key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.cancelKeyRequest" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>cancelKeyRequest result using an unknown key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.CreateCdmTime" units="ms">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    The time it takes to create the CDM instance for an unknown key system.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.generateKeyRequest" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>generateKeyRequest result using an unknown key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.KeyAdded">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>KeyAdded event count using an unknown key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.KeyError" enum="MediaKeyError">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>KeyError event count using an unknown key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Unknown.SystemCode" units="system code">
+  <owner>xhwang@chromium.org</owner>
+  <summary>System code count using an unknown key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine" enum="CdmPromiseResult">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Result of promises for Widevine key systems that were handled by Chromium
+    code.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.addKey" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>addKey result using the Widevine key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.cancelKeyRequest" enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>cancelKeyRequest result using the Widevine key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.CreateCdmTime" units="ms">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    The time it takes to create the CDM instance for the Widevine key system.
+  </summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.generateKeyRequest"
+    enum="MediaKeyException">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>generateKeyRequest result using the Widevine key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.KeyAdded">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>KeyAdded event count using the Widevine key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.KeyError" enum="MediaKeyError">
+  <obsolete>
+    Deprecated 02/2016 with removal of prefixed EME.
+  </obsolete>
+  <owner>xhwang@chromium.org</owner>
+  <summary>KeyError event count using the Widevine key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.SystemCode" units="system code">
+  <owner>xhwang@chromium.org</owner>
+  <summary>System code count using the Widevine key system.</summary>
+</histogram>
+
+<histogram name="Media.EME.Widevine.VideoCapability.HasEmptyRobustness"
+    enum="BooleanEmpty">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Whether the robustness level of any video capability in the supported
+    configuration passed into requestMediaKeySystemAccess() is empty. This is
+    specific to the Widevine key system.
+  </summary>
+</histogram>
+
+<histogram name="Media.FallbackHardwareAudioBitsPerChannel">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Bits per channel of the hardware audio device which failed to open in low
+    latency mode and required high latency fallback.
+  </summary>
+</histogram>
+
+<histogram name="Media.FallbackHardwareAudioChannelCount">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Channel count of the hardware audio device which failed to open in low
+    latency mode and required high latency fallback.
+  </summary>
+</histogram>
+
+<histogram name="Media.FallbackHardwareAudioChannelLayout" enum="ChannelLayout">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Channel layout of the hardware audio device which failed to open in low
+    latency mode and required high latency fallback.
+  </summary>
+</histogram>
+
+<histogram name="Media.FallbackHardwareAudioSamplesPerSecond"
+    enum="AudioSampleRate">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Samples per second of the hardware audio device which failed to open in low
+    latency mode and required high latency fallback.
+  </summary>
+</histogram>
+
+<histogram name="Media.FallbackHardwareAudioSamplesPerSecondUnexpected"
+    units="Hz">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Samples per second of the hardware audio device (atypical values, in Hz)
+    which failed to open in low latency mode and required high latency fallback.
+  </summary>
+</histogram>
+
+<histogram name="Media.FallbackToHighLatencyAudioPath" enum="BooleanSuccess">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Whether Chrome had to fallback to the high latency audio path or not.
+  </summary>
+</histogram>
+
+<histogram name="Media.Fling.DelayedAndDroppedFramesPer5Sec" units="frames/5s">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average number of delayed and dropped frames for the Fling application.
+    Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.Fling.DisplayedFramesPerSecond" units="frames/s">
+  <obsolete>
+    Deprecated 07/2015 in issue 508534.
+  </obsolete>
+  <owner>halliwell@chromium.org</owner>
+  <summary>
+    The average number of displayed frames for the Fling application.  Reported
+    every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.Fling.TimeToBufferAv" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time needed to pre-buffer A/V data before the actual playback for the Fling
+    application.
+  </summary>
+</histogram>
+
+<histogram name="Media.Fling.TimeToBufferAvAfterAbort" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time needed to buffer A/V data after an abort for the Fling application.
+  </summary>
+</histogram>
+
+<histogram name="Media.Fling.TimeToBufferAvAfterUnderrun" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time needed to buffer A/V data after an underrun for the Fling application.
+  </summary>
+</histogram>
+
+<histogram name="Media.GPU.HasEverLostContext" enum="ContextProviderPhase">
+  <owner>dcastagna@chromium.org</owner>
+  <summary>
+    Records when a context provider is acquired in media, and when it's released
+    because a context loss has been detected.
+  </summary>
+</histogram>
+
+<histogram name="Media.GpuVideoDecoderError" enum="VideoDecodeAcceleratorError">
+  <owner>sandersd@chromium.org</owner>
+  <summary>Counts of video decode errors reported to GpuVideoDecoder.</summary>
+</histogram>
+
+<histogram name="Media.GpuVideoDecoderInitializeStatus" enum="PipelineStatus">
+  <owner>posciak@chromium.org</owner>
+  <summary>Results of attempts to GpuVideoDecoder::Initialize().</summary>
+</histogram>
+
+<histogram name="Media.HardwareAudioBitsPerChannel">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Bits per channel of the hardware audio device.</summary>
+</histogram>
+
+<histogram name="Media.HardwareAudioChannelCount">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Channel count of the hardware audio device.</summary>
+</histogram>
+
+<histogram name="Media.HardwareAudioChannelLayout" enum="ChannelLayout">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Channel layout of the hardware audio device.</summary>
+</histogram>
+
+<histogram name="Media.HardwareAudioSamplesPerSecond" enum="AudioSampleRate">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>Samples per second of the hardware audio device.</summary>
+</histogram>
+
+<histogram name="Media.HardwareAudioSamplesPerSecondUnexpected" units="Hz">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Samples per second of the hardware audio device (atypical values, in Hz).
+  </summary>
+</histogram>
+
+<histogram name="Media.InfoLoadDelay" units="ms">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    The time it takes to perform redirect tracking and a CORS access check while
+    preparing to play a media file.
+  </summary>
+</histogram>
+
+<histogram name="Media.Initialize.Windows" enum="WinGetLastError">
+  <obsolete>
+    Deprecated 05/2015 in Issue 1141703002. FFmpeg is now statically linked.
+  </obsolete>
+  <owner>scherkus@chromium.org</owner>
+  <summary>
+    Errors returned by LoadLibraryEx on Windows while attempting to load
+    ffmpegsumo.dll.
+  </summary>
+</histogram>
+
+<histogram name="Media.InputErrorMac" units="OSStatus">
+  <owner>tommi@chromium.org</owner>
+  <summary>
+    Error codes that we encounter while setting up an AUAudioInputStream on Mac.
+  </summary>
+</histogram>
+
+<histogram name="Media.InputInvalidSampleRateMac" units="Hz">
+  <obsolete>
+    Deprecated and removed from code as of 02/2016.
+  </obsolete>
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Invalid input sample rate when calling AUAudioInputStream::Open on Mac.
+  </summary>
+</histogram>
+
+<histogram name="Media.InputStreamDuration" units="ms">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Duration in milliseconds of low-latency audio input streams. Sampled when
+    the stream is closed by the AudioInputController.
+  </summary>
+</histogram>
+
+<histogram name="Media.IsStreaming" enum="Boolean">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Whether the WMPI data source is streaming (does not support range requests).
+  </summary>
+</histogram>
+
+<histogram name="Media.LinuxAudioIO" enum="LinuxAudioIO">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Audio IO layer used by the Linux OS, sampled once at startup of the browser.
+  </summary>
+</histogram>
+
+<histogram name="Media.LoadType" enum="MediaLoadType">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Load type of HTML5 media, such as URL, MediaSource and MediaStream.
+  </summary>
+</histogram>
+
+<histogram name="Media.LocalRendererSinkStates" enum="LocalRendererSinkStates">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    State of the WebRtc local renderer, sampled once during the lifetime of a
+    local renderer.
+  </summary>
+</histogram>
+
+<histogram name="Media.MicrophoneMuted" enum="MicrophoneMuteResult">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Heuristically detects if the user has muted the microphone or not. Measured
+    approximately four times per minute.
+  </summary>
+</histogram>
+
+<histogram name="Media.MicrophoneVolume" units="%">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Level of the microphone volume measured in percent. This value can be larger
+    than 100% on Linux. Measured approximately four times per minute.
+  </summary>
+</histogram>
+
+<histogram name="Media.Midi.InputPorts" units="devices">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>Connected input port numbers on the initialization.</summary>
+</histogram>
+
+<histogram name="Media.Midi.OutputPorts" units="devices">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>Connected output port numbers on the initialization.</summary>
+</histogram>
+
+<histogram name="Media.Midi.ResultOnShutdown" enum="MidiResult">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>The final status of MidiManager on browser shutdown.</summary>
+</histogram>
+
+<histogram name="Media.Midi.SysExMessageSizeUpTo1MB" units="bytes">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>Reports sysex message size.</summary>
+</histogram>
+
+<histogram name="Media.Midi.Usage" enum="MidiUsage">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>MidiManager usages to understand the API use case.</summary>
+</histogram>
+
+<histogram name="Media.MSE.AudioCodec" enum="MSECodec">
+  <owner>acolwell@chromium.org</owner>
+  <summary>
+    Audio codec used in Media Source Extensions playback. Set when AddId() is
+    called during playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.DetectedTrackCount.Audio">
+  <owner>wolenetz@chromium.org</owner>
+  <summary>
+    Number of detected audio tracks in Media Source Extensions playback. Not all
+    may be usable by the player.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.DetectedTrackCount.Text">
+  <owner>wolenetz@chromium.org</owner>
+  <summary>
+    Number of detected text tracks in Media Source Extensions playback. Not all
+    may be usable by the player. This count includes only explicitly signalled
+    tracks in MSE initialization segments parsed from WebM or ISO BMFF
+    bytestreams.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.DetectedTrackCount.Video">
+  <owner>wolenetz@chromium.org</owner>
+  <summary>
+    Number of detected video tracks in Media Source Extensions playback. Not all
+    may be usable by the player.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.LateAudioFrames"
+    units="late frames per million frames">
+  <obsolete>
+    Deleted along with browser side MSE implementation.
+  </obsolete>
+  <owner>qinmin@chromium.org</owner>
+  <owner>timav@chromium.org</owner>
+  <summary>
+    Relative number of late audio frames wrt total number of audio frames in MSE
+    playback, multiplied by one million. The audio frame is considered late if
+    it might cause an underrun, i.e. comes from decoder when audio buffer is
+    already depleted.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.LateVideoFrames"
+    units="late frames per million frames">
+  <obsolete>
+    Deleted along with browser side MSE implementation.
+  </obsolete>
+  <owner>qinmin@chromium.org</owner>
+  <owner>timav@chromium.org</owner>
+  <summary>
+    Relative number of late video frames wrt total number of video frames in MSE
+    playback, multiplied by one million. The video frame is late if it missed
+    its presentation time as determined by PTS when it comes from decoder. The
+    rendering policy (i.e. render or skip) does not affect it.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.NumberOfTracks">
+  <owner>acolwell@chromium.org</owner>
+  <summary>
+    Number of tracks specified to AddId() for Media Source Extensions playback.
+    May be called multiple times per element if playback is dynamically altered.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.Playback" enum="BooleanSuccess">
+  <obsolete>
+    Renamed to Media.LoadType.
+  </obsolete>
+  <owner>acolwell@chromium.org</owner>
+  <summary>
+    Whether Media Source Extensions is specified for playback of Media elements.
+    Sampled when media pipeline starts.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.PlaybackDuration" units="ms">
+  <obsolete>
+    Deleted along with browser side MSE implementation.
+  </obsolete>
+  <owner>qinmin@chromium.org</owner>
+  <owner>timav@chromium.org</owner>
+  <summary>
+    Duration of an uninterrupted MSE playback. This is the time interval between
+    the playback starts or resumes and the moment when user stops the playback
+    by pressing pause, initiating a seek etc. Measured in media time in
+    milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.Starvations" units="starvations per million frames">
+  <obsolete>
+    Deleted along with browser side MSE implementation.
+  </obsolete>
+  <owner>qinmin@chromium.org</owner>
+  <owner>timav@chromium.org</owner>
+  <summary>
+    Relative number of starvations wrt total number of frames in MSE playback,
+    multiplied by one million. Starvation happens when the player interrupts the
+    regular playback and asks for more data, conditions are player-specific.
+  </summary>
+</histogram>
+
+<histogram name="Media.MSE.VideoCodec" enum="MSECodec">
+  <owner>acolwell@chromium.org</owner>
+  <summary>
+    Video codec used in Media Source Extensions playback. Set when AddId() is
+    called during playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.Netflix.AudioBitrate" units="kbps">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The audio bit rate as reported by the Netflix application.  May be reported
+    multiple times as network conditions change during playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.Netflix.AudioNumChannels" units="channels">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of audio channels as reported by the Netflix application. May be
+    reported multiple times as network conditions change during playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.Netflix.DelayedAndDroppedFramesPer5Sec"
+    units="frames/5s">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average number of delayed and dropped frames for the Netflix
+    application.  Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.Netflix.DisplayedFramesPerSecond" units="frames/s">
+  <obsolete>
+    Deprecated 07/2015 in issue 508534.
+  </obsolete>
+  <owner>halliwell@chromium.org</owner>
+  <summary>
+    The average number of displayed frames for the Netflix application. Reported
+    every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.Netflix.VideoBitrate" units="kbps">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Video bit rate as reported by the Netflix application.  May be reported
+    multiple times as network conditions change during playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.Netflix.VideoHeight" units="pixels">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Video height as reported by the Netflix application.  May be reported
+    multiple times as network conditions change during playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.Notification.Click" enum="MediaNotificationClickSource">
+  <owner>mlamouri@chromium.org</owner>
+  <owner>avayvod@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    The type of media notification the user clicked to go back to Chrome.
+  </summary>
+</histogram>
+
+<histogram name="Media.Pepper.PlayedSound" enum="Boolean">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Whether Pepper players have played sound through its lifetime.
+  </summary>
+</histogram>
+
+<histogram name="Media.PepperVideoDecoderError"
+    enum="VideoDecodeAcceleratorError">
+  <owner>ihf@chromium.org</owner>
+  <owner>posciak@chromium.org</owner>
+  <summary>Counts of video decode errors reported to plugin.</summary>
+</histogram>
+
+<histogram name="Media.PepperVideoDecoderPictureCount">
+  <owner>ihf@chromium.org</owner>
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Number of PictureBuffers/textures requested per hardware decoder creation.
+    This value varies by platform and video. A user visible video may trigger
+    multiple decoder creations (sometimes every 5 seconds) but would normally
+    not hold more than 2 sets of buffers at any given time in memory.
+  </summary>
+</histogram>
+
+<histogram name="Media.PepperVideoDecoderPictureHeight">
+  <owner>ihf@chromium.org</owner>
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Vertical video resolution rounded to the nearest bucket. (Corresponds
+    roughly to the number in 720p.)
+  </summary>
+</histogram>
+
+<histogram name="Media.PipelineStatus" enum="PipelineStatus">
+  <owner>prabhur@chromium.org</owner>
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Status of the media pipeline at the end of its lifecycle suffixed by stream
+    and video decoder type.
+  </summary>
+</histogram>
+
+<histogram name="Media.PipelineStatus.Start" enum="PipelineStatus">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Status of the media pipeline starting process (including demuxer and
+    renderer initialization). If the media pipeline is destroyed during the
+    starting process nothing will be reported, but this should relatively rare.
+  </summary>
+</histogram>
+
+<histogram name="Media.PlayMovies.DelayedAndDroppedFramesPer5Sec"
+    units="frames/5s">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average number of delayed and dropped frames for the PlayMovies
+    application.  Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.PlayMovies.DisplayedFramesPerSecond" units="frames/s">
+  <obsolete>
+    Deprecated 07/2015 in issue 508534.
+  </obsolete>
+  <owner>halliwell@chromium.org</owner>
+  <summary>
+    The average number of displayed frames for the PlayMovies application.
+    Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.RTCVideoDecoderError" enum="VideoDecodeAcceleratorError">
+  <owner>posciak@chromium.org</owner>
+  <summary>Counts of video decode errors reported to RTCVideoDecoder.</summary>
+</histogram>
+
+<histogram name="Media.RTCVideoDecoderInitDecodeStatus" enum="BooleanSuccess">
+  <obsolete>
+    Renamed to Media.RTCVideoDecoderInitDecodeSuccess.
+  </obsolete>
+  <owner>posciak@chromium.org</owner>
+  <summary>Results of attempts to RTCVideoDecoder::InitDecode().</summary>
+</histogram>
+
+<histogram name="Media.RTCVideoDecoderInitDecodeSuccess" enum="BooleanSuccess">
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Indicates whether we were successful in initializing hardware video decoder
+    for use in the RTC pipeline.
+  </summary>
+</histogram>
+
+<histogram name="Media.RTCVideoEncoderInitEncodeSuccess" enum="BooleanSuccess">
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Indicates whether we were successful in initializing hardware video encoder
+    for use in the RTC pipeline.
+  </summary>
+</histogram>
+
+<histogram name="Media.RTCVideoEncoderProfile" enum="VideoCodecProfile">
+  <owner>posciak@chromium.org</owner>
+  <summary>Video codec profile used in RTC video encoder.</summary>
+</histogram>
+
+<histogram name="Media.Session.ActiveTime" units="ms">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Time during which a media session has been active, in other words, the time
+    between an activation and deactivation, without counting time while it was
+    suspended. If a session is activated after being deactivated, there will be
+    two entries. For example, if a user plays a song but is interrupted by a
+    phone call, it will only account for the song playing time.
+  </summary>
+</histogram>
+
+<histogram name="Media.Session.Pause" enum="MediaSessionActionSource">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    The number of times the user paused playback of a media session using other
+    means than the pause button on the page.
+  </summary>
+</histogram>
+
+<histogram name="Media.Session.Play" enum="MediaSessionActionSource">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    The number of times the user started playback of a media session using other
+    means than the play button on the page.
+  </summary>
+</histogram>
+
+<histogram name="Media.Session.RequestAudioFocusResult" enum="BooleanSuccess">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Indicate whether the native requestAudioFocus() call was successful.
+  </summary>
+</histogram>
+
+<histogram name="Media.Session.Stop" enum="MediaSessionActionSource">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    The number of times the user stopped a media session using other means than
+    the pause button on the page.
+  </summary>
+</histogram>
+
+<histogram name="Media.Session.Suspended" enum="MediaSessionSuspendedSource">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    The number of times a media session is suspended and why it has been
+    suspended.
+  </summary>
+</histogram>
+
+<histogram name="Media.TimeToPipelineStarted" units="ms">
+  <obsolete>
+    Removed from code 2014/6/18.
+  </obsolete>
+  <owner>scherkus@chromium.org</owner>
+  <summary>
+    Time in milliseconds from HTML5 media pipeline creation to playing event.
+  </summary>
+</histogram>
+
+<histogram name="Media.TotalMBytes" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>scherkus@chromium.org</owner>
+  <summary>Size of HTML5 media (when known), in MB.</summary>
+</histogram>
+
+<histogram name="Media.UncacheableReason" enum="UncacheableReason">
+  <owner>scherkus@chromium.org</owner>
+  <summary>
+    Reasons a media response won't be used to satisfy a future request.
+  </summary>
+</histogram>
+
+<histogram name="Media.UnderflowCount">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    The number of times a src= playback has underflowed; i.e. ran out of data.
+  </summary>
+</histogram>
+
+<histogram name="Media.UnderflowDuration" units="ms">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    The amount of time taken to leave the underflow state; i.e. resume playback.
+  </summary>
+</histogram>
+
+<histogram name="Media.URLScheme" enum="URLSchemeForHistogram">
+  <owner>scherkus@chromium.org</owner>
+  <summary>
+    URL scheme used with HTML5 media. (each URL provides one sample)
+  </summary>
+</histogram>
+
+<histogram name="Media.VAJDA.DecoderFailure" enum="VAJDADecoderFailure">
+  <owner>kcwu@chromium.org</owner>
+  <summary>
+    Error codes reported by jpeg decode using VA-API hardware jpeg decoder.
+  </summary>
+</histogram>
+
+<histogram name="Media.VAVDA.DecoderFailure" enum="VAVDADecoderFailure">
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Error codes reported by video decode using VA-API hardware video decoder.
+  </summary>
+</histogram>
+
+<histogram name="Media.VAVDAH264.DecoderFailure" enum="VAVDAH264DecoderFailure">
+  <obsolete>
+    Deprecated as of 4/2015, partially replaced by Media.VAVDA.DecoderFailure.
+  </obsolete>
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Error codes reported by video decode using VA-API hardware video decoder.
+  </summary>
+</histogram>
+
+<histogram name="Media.VAVEA.EncoderFailure" enum="VAVEAEncoderFailure">
+  <owner>posciak@chromium.org</owner>
+  <summary>
+    Error codes reported by video encode using VA-API hardware video encoder.
+  </summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay" enum="AutoplaySource">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Records the autoplay source of videos. This includes
+    Media.Video.Autoplay.Muted.
+  </summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay.Muted" enum="AutoplaySource">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>Records the autoplay source of muted videos.</summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay.Muted.Attribute.OffscreenDuration"
+    units="ms">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Records the offscreen playing duration of a muted video autoplaying from
+    autoplay attribute.
+  </summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay.Muted.Blocked"
+    enum="AutoplayBlockedReason">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Records the reason why autoplay of muted videos was blocked.
+  </summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay.Muted.PlayMethod.BecomesVisible"
+    enum="Boolean">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Records muted video started playing with play() become visible at some
+    point. The UMA for false is not complete since it is recorded in a
+    destructor which is garbage-collected. Please subtract
+    Media.Video.Autoplay.Muted &quot;play() method&quot; count with the true
+    count of this histogram to obtain the real false count.
+  </summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration"
+    units="ms">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Records the offscreen playing duration of a muted video autoplaying from
+    play() method.
+  </summary>
+</histogram>
+
+<histogram name="Media.Video.Autoplay.Muted.UnmuteAction" enum="BooleanSuccess">
+  <owner>avayvod@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <owner>zqzhang@chromium.org</owner>
+  <summary>
+    Status of the unmute action on a video that autoplayed because it was muted.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.AspectRatio" units="%">
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Video Capture Device captured aspect ratio, as a rounded integer multiplied
+    by 100. The collection is made in the VideoCaptureController upon reception
+    of the first frame.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.BlacklistedDevice"
+    enum="BlacklistedVideoCaptureDeviceNames">
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Counts appearances of Blacklisted Video Capture devices during enumeration.
+    This collection happens during first enumeration in the appropriate
+    platforms' VideoCaptureDeviceFactory.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.FrameRate" units="fps">
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Video Capture Device frame rate requested by VideoCaptureManager on
+    AllocateAndStart(). The collection is made in the VideoCaptureController
+    upon reception of the first frame.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.FramesReceived" enum="BooleanReceived">
+  <obsolete>
+    Deprecated as of 10/2014 in issue 422822. Replaced by
+    Media.VideoCaptureManager.Event and the two new values 3 and 4 in the enum
+    VideoCaptureEvent.
+  </obsolete>
+  <owner>grunell@chromium.org</owner>
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Whether any frames were received during a video capture session. This metric
+    is recorded when a video source is stopped.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.Height" units="pixels">
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Video Capture Device captured frame height in pixels. The collection is made
+    in the VideoCaptureController upon reception of the first frame.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.MacBook.HardwareVersionWhenNoCamera"
+    enum="MacBookVersions">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    MacBook hardware version used when Chrome cannot enumerate a video device.
+    This is used for tracking http://crbug.com/582931.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.MacBook.NumberOfDevices" units="devices">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Number of video capture devices detected by Chrome during device
+    enumeration. Zero devices indicate a problem since all MacBooks should have
+    a built-in camera. This is used for tracking http://crbug.com/582931.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.PixelFormat" enum="CapturePixelFormat">
+  <obsolete>
+    Deprecated 10/2014 in Issue 660493002.
+  </obsolete>
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Pixel format provided by a Video Capture Device. The collection is made in
+    the VideoCaptureController upon reception of the first frame.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCapture.Width" units="pixels">
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Video Capture Device captured frame width in pixels. The collection is made
+    in the VideoCaptureController upon reception of the first frame.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCaptureApi.Mac" enum="CaptureApiMac">
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Video Capture and device enumeration/monitoring API used for Mac OS Lion or
+    later. Collection is made only once when the flags are parsed and the
+    appropriate library selected and/or loaded, successfully or not.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCaptureGpuJpegDecoder.InitDecodeSuccess"
+    enum="BooleanSuccess">
+  <owner>henryhsu@chromium.org</owner>
+  <summary>
+    Indicates whether we were successful in initializing hardware jpeg decoder
+    for attempts to VideoCaptureGpuJpegDecoder::Initialize().
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCaptureManager" units="ms">
+  <owner>mcasas@chromium.org</owner>
+  <summary>Measures the time taken for VideoCaptureManager::</summary>
+</histogram>
+
+<histogram name="Media.VideoCaptureManager.Event" enum="VideoCaptureEvent">
+  <owner>grunell@chromium.org</owner>
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    Counts video capture event, such as start and stop capture. Note that the
+    ideal case is 50% start events and 50% normal stop events.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoCodec" enum="VideoCodec">
+  <owner>scherkus@chromium.org</owner>
+  <summary>Video codec used in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.VideoCodecProfile" enum="VideoCodecProfile">
+  <owner>scherkus@chromium.org</owner>
+  <summary>Video codec profile used in HTML5 media.</summary>
+</histogram>
+
+<histogram name="Media.VideoCodedAspectRatio" units="%">
+  <obsolete>
+    Deprecated 11/2016 in issue 2506533002.
+  </obsolete>
+  <owner>scherkus@chromium.org</owner>
+  <summary>Coded aspect ratio of HTML5 video.</summary>
+</histogram>
+
+<histogram name="Media.VideoCodedWidth">
+  <obsolete>
+    Deprecated 11/2016 in issue 2506533002.
+  </obsolete>
+  <owner>scherkus@chromium.org</owner>
+  <summary>Coded width of HTML5 video.</summary>
+</histogram>
+
+<histogram name="Media.VideoColorRange" enum="FFmpegColorRanges">
+  <owner>scherkus@chromium.org</owner>
+  <summary>
+    Pixel format color range of HTML5 video. Emitted on video load.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoDecoderFallback" enum="BooleanDidFallBack">
+  <owner>watk@chromium.org</owner>
+  <summary>
+    Whether Chrome had to fall back to a secondary video decoder after the
+    primary decoder failed reinitialization.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoFormat" enum="VideoFormat">
+  <obsolete>
+    Replaced by Media.VideoFramePixelFormat 05/2015.
+  </obsolete>
+  <owner>mcasas@chromium.org</owner>
+  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
+</histogram>
+
+<histogram name="Media.VideoFrameColorSpace" enum="VideoFrameColorSpace">
+  <owner>mcasas@chromium.org</owner>
+  <owner>watk@chromium.org</owner>
+  <summary>
+    Color space or range used in HTML5 video. Emitted on video load.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoFramePixelFormat" enum="VideoFramePixelFormat">
+  <obsolete>
+    Replaced by Media.VideoPixelFormatUnion 08/2015.
+  </obsolete>
+  <owner>mcasas@chromium.org</owner>
+  <owner>watk@chromium.org</owner>
+  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
+</histogram>
+
+<histogram name="Media.VideoPixelFormat" enum="VideoPixelFormat">
+  <obsolete>
+    Replaced by Media.VideoFormat 05/2015.
+  </obsolete>
+  <owner>scherkus@chromium.org</owner>
+  <summary>Pixel format used in HTML5 video. Emitted on video load.</summary>
+</histogram>
+
+<histogram name="Media.VideoPixelFormatUnion" enum="VideoPixelFormatUnion">
+  <owner>mcasas@chromium.org</owner>
+  <owner>emircan@chromium.org</owner>
+  <summary>
+    Pixel format used in capture and HTML5 video. Emitted on video load.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoRenderer.CadenceChanges" units="changes">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Indicates how many cadence changes have occurred during playback, a zero
+    value is emitted at the beginning of playback. Subsequent values are emitted
+    during video rendering for each cadence change (up to a maximum of 10).
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoRenderer.LowDelay" enum="Boolean">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    Indicates whether video is rendering in low delay mode. It's recorded when a
+    video starts playing.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoRotation" enum="VideoRotation">
+  <owner>suderman@chromium.org</owner>
+  <summary>Metadata rotation in mp4 videos. Emitted during demuxing.</summary>
+</histogram>
+
+<histogram name="Media.VideoTrackAdapter.FramesReceived" enum="BooleanReceived">
+  <obsolete>
+    Replaced by Media.VideoCapture.FramesReceived 09/2014.
+  </obsolete>
+  <owner>grunell@chromium.org</owner>
+  <owner>mcasas@chromium.org</owner>
+  <summary>
+    If any frames were received during a video capture session. It's recorded
+    when a video source is stopped.
+  </summary>
+</histogram>
+
+<histogram name="Media.VideoVisibleAspectRatio" units="%">
+  <owner>scherkus@chromium.org</owner>
+  <summary>Visible aspect ratio of HTML5 video.</summary>
+</histogram>
+
+<histogram name="Media.VideoVisibleWidth">
+  <owner>scherkus@chromium.org</owner>
+  <summary>Visible width of HTML5 video.</summary>
+</histogram>
+
+<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoder">
+  <obsolete>
+    Deprecated 05/2016.
+  </obsolete>
+  <owner>dcastagna@chromium.org</owner>
+  <summary>Number of frame buffers used by Vpx decoder.</summary>
+</histogram>
+
+<histogram name="Media.Vpx.VideoDecoderBuffersInUseByDecoderAndVideoFrame">
+  <obsolete>
+    Deprecated 05/2016.
+  </obsolete>
+  <owner>dcastagna@chromium.org</owner>
+  <summary>
+    Number of frame buffers currently in use by both Vpx decoder and a
+    VideoFrame.
+  </summary>
+</histogram>
+
+<histogram name="Media.VTVDA.HardwareAccelerated"
+    enum="BooleanHardwareAccelerated">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Whether a VTDecompressionSession is internally using hardware accelerated
+    decoding.
+  </summary>
+</histogram>
+
+<histogram name="Media.VTVDA.InitializationFailureReason"
+    enum="VTVDAInitializationFailureType">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Count of VideoToolbox initialization failure reasons. Successful
+    initializations are counted as a special failure type. The sum of successes
+    and failures gives a lower bound on the number of attempted initializations.
+  </summary>
+</histogram>
+
+<histogram name="Media.VTVDA.SessionFailureReason"
+    enum="VTVDASessionFailureType">
+  <owner>sandersd@chromium.org</owner>
+  <summary>
+    Count of VTVDA session failure reasons. Successful initializations are
+    counted as a special failure type. Since only successfully initialized
+    session can fail, failures rates are computed as a simple ratio.
+  </summary>
+</histogram>
+
+<histogram name="Media.WatchTime" units="ms">
+  <owner>dalecurtis@chromium.org</owner>
+  <summary>
+    Watch time is defined as the amount of elapsed media time for audio+video
+    media aggregated per player instance. A minimum of 7 seconds of unmuted,
+    foreground media must be watched to start watch time monitoring. Watch time
+    is checked on a regular basis and reported to UMA upon one of the stop
+    events mentioned below or at player destruction if none occur prior.
+
+    Any one of paused, hidden, or muted is sufficient to stop watch time metric
+    reports. Each of these has a hysteresis where if the state change is undone
+    within some time, the watch time will be counted as uninterrupted.
+
+    Power events (on/off battery power) have a similar hysteresis, but unlike
+    the aforementioned properties, will not stop metric collection.
+
+    Each seek event will result in a new watch time metric being started and the
+    old metric finalized as accurately as possible.
+  </summary>
+</histogram>
+
+<histogram name="Media.WindowsCoreAudioInput" enum="BooleanSuccess">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Whether Chrome is using Windows Core Audio for audio input or not. Updated
+    on Windows only when a low-latency audio input stream is created.
+  </summary>
+</histogram>
+
+<histogram name="Media.YouTube.DelayedAndDroppedFramesPer5Sec"
+    units="frames/5s">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average number of delayed and dropped frames for the YouTube
+    application.  Reported every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.YouTube.DisplayedFramesPerSecond" units="frames/s">
+  <obsolete>
+    Deprecated 07/2015 in issue 508534.
+  </obsolete>
+  <owner>halliwell@chromium.org</owner>
+  <summary>
+    The average number of displayed frames for the YouTube application. Reported
+    every 5 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Media.YouTube.TimeToBufferAv" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time needed to pre-buffer A/V data before the actual playback for the
+    YouTube application.
+  </summary>
+</histogram>
+
+<histogram name="Media.YouTube.TimeToBufferAvAfterAbort" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time needed to buffer A/V data after an abort for the YouTube application.
+  </summary>
+</histogram>
+
+<histogram name="Media.YouTube.TimeToBufferAvAfterUnderrun" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time needed to buffer A/V data after an underrun for the YouTube
+    application.
+  </summary>
+</histogram>
+
+<histogram name="MediaGalleries.ScanCancelTime" units="ms">
+  <owner>vandebo@chromium.org</owner>
+  <summary>If a media scan was cancelled, the duration (in ms) it ran.</summary>
+</histogram>
+
+<histogram name="MediaGalleries.ScanDirectoriesFound">
+  <owner>vandebo@chromium.org</owner>
+  <summary>
+    The number of directories with media files found during a scan.
+  </summary>
+</histogram>
+
+<histogram name="MediaGalleries.ScanFinishedTime" units="ms">
+  <owner>vandebo@chromium.org</owner>
+  <summary>
+    Duration in milliseconds taken to do a media scan that ran to completion.
+  </summary>
+</histogram>
+
+<histogram name="MediaGalleries.ScanGalleriesGranted" units="%">
+  <owner>vandebo@chromium.org</owner>
+  <summary>
+    The percentage of galleries accepted (not deselected) from the scan result
+    dialog.
+  </summary>
+</histogram>
+
+<histogram name="MediaGalleries.ScanGalleriesPopulated">
+  <owner>vandebo@chromium.org</owner>
+  <summary>
+    The number of galleries added or updated in preferences after a scan.
+  </summary>
+</histogram>
+
+<histogram name="MediaGalleries.Usage" enum="MediaGalleriesUsageType">
+  <owner>vandebo@chromium.org</owner>
+  <summary>Various usage counts for media galleries.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Icon.Click.Location"
+    enum="MediaRouterDialogOpenOrigin">
+  <owner>apacible@chromium.org</owner>
+  <summary>Location the user clicked to open the Media Router dialog.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Provider.CreateRoute.Result"
+    enum="MediaRouteProviderResult">
+  <owner>imcheng@chromium.org</owner>
+  <summary>Result of a request to create a route.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Provider.JoinRoute.Result"
+    enum="MediaRouteProviderResult">
+  <owner>imcheng@chromium.org</owner>
+  <summary>Result of a request to join a route.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Provider.TerminateRoute.Result"
+    enum="MediaRouteProviderResult">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>Result of a request to terminate a route.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Provider.Version" enum="MediaRouteProviderVersion">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Records how the major version of the Media Router component extension
+    compares to the major version of the browser.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Provider.WakeReason"
+    enum="MediaRouteProviderWakeReason">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Reason that the Media Router woke the Media Route Provider event page.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Provider.Wakeup" enum="MediaRouteProviderWakeup">
+  <owner>mfoltz@chromium.org</owner>
+  <summary>
+    Records the outcome of waking the Media Router component's event page.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Route.CreationOutcome"
+    units="MediaRouterCreateRouteOutcome">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    The number of times a Media Router create route response succeeds or fails.
+    This breaks down the different failure types in to separate buckets.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Action.CloseLatency" units="ms">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    Duration in milliseconds taken from the user opening the Media Router dialog
+    to the user closing the dialog. This is only recorded if closing the dialog
+    is the first action the user takes.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Action.StartLocal.Latency" units="ms">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    Duration in milliseconds taken from the Media Router dialog showing the sink
+    list and being populated with at least one device to the user selecting a
+    device immediately after to create a new route.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Action.StartLocalPosition"
+    enum="MediaRouterSinkPositionLabel">
+  <owner>apacible@chromium.org</owner>
+  <summary>The index of the sink that was selected in the sink list.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Action.StartLocalSessionSuccessful"
+    enum="BooleanSuccess">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    The number of times a session was successfully started versus failed.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Action.StopRoute" enum="MediaRouteType">
+  <owner>apacible@chromium.org</owner>
+  <summary>The number of times a user stops different types of routes.</summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Device.Count">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    Counts the number of devices known and populated to the Media Router dialog
+    three seconds after the dialog loads. Always expected to be non-negative.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Dialog.LoadedWithData" units="ms">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    Duration in milliseconds taken from the user click to open the Media Router
+    dialog to initializing the dialog with data.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Dialog.Paint" units="ms">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    Duration in milliseconds taken from a user click to open the Media Router
+    dialog to the initial paint.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.FirstAction" units="MediaRouterUserAction">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    The first action taken by the user after opening the Media Router dialog.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.InitialState" enum="MediaRouterInitialViews">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    The view that was shown when the Media Router dialog is initially opened.
+  </summary>
+</histogram>
+
+<histogram name="MediaRouter.Ui.Navigate.SourceSelection"
+    enum="MediaRouterSourceTypes">
+  <owner>apacible@chromium.org</owner>
+  <summary>
+    The number of times the user selects a specific cast source type.
+  </summary>
+</histogram>
+
+<histogram name="Memory.BackingStore">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>TBD.</summary>
+</histogram>
+
+<histogram name="Memory.Browser" units="KB">
+  <obsolete>
+    Deprecated 06/2016 Replaced with Memory.Browser.Large2.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by the browser process.  Recorded once per UMA
+    ping.  Note the existence of Memory.Browser.Large, which doesn't have
+    overflow issues. TODO(rkaplow): This should be replaced with
+    Memory.Browser.Large2 in M54.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Browser.Committed" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The total committed memory used by the browser process.  Recorded once per
+    UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Browser.Large" units="MB">
+  <obsolete>
+    Deprecated 07/2016 as it reports wrong numbers. crbug.com/629354. Replaced
+    with Memory.Browser.Large2
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The private working set used by the browser process.  Recorded once per UMA
+    ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Browser.Large2" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by the browser process.  Recorded once per UMA
+    ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.CachedFontAndDC">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>TBD.</summary>
+</histogram>
+
+<histogram name="Memory.Chrome" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each chrome:// renderer process.  Each
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.ChromeProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of active chrome:// renderer processes.  Recorded once per UMA
+    ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.CompressibleStringCount"
+    enum="CompressibleStringCountType">
+  <obsolete>
+    Deprecated as of Aug 2016. CompressibleString has been reverted once at
+    https://crrev.com/2227933002.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <summary>
+    This records the frequency with which JavaScript source strings are
+    compressed and decompressed in foreground and background tabs.  Compressing
+    runs 10 seconds after the tab goes background and decompressing runs when
+    JavaScript source string is required (e.g. V8 starts to compile). This
+    measurement is a preparation to introduce CompressibleString class for
+    JavaScript source strings to reduce Blink memory usage.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.FreeMemoryUntilCritical" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    Available free memory until the system will be in a critical state. Critical
+    is as defined by the OS (swapping will occur, or physical memory will run
+    out, etc).
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.StateDuration" units="seconds">
+  <owner>bashi@chromium.org</owner>
+  <summary>Time elapsed between the global state changes.</summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.StateOnCriticalNotificationReceived"
+    enum="MemoryState">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The global state of memory coordinator when a critical pressure notification
+    is received.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.StateOnModerateNotificationReceived"
+    enum="MemoryState">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The global state of memory coordinator when a moderate pressure notification
+    is received.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.TotalPrivate" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The total private working set memory used by the browser and renderer
+    processes when the memory coordinator changes the global memory state.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.TrimMemoryLevel.Normal"
+    enum="TrimMemoryLevel">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    Android: Records trim memory level when the global state is NORMAL.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.TrimMemoryLevel.Suspended"
+    enum="TrimMemoryLevel">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    Android: Records trim memory level when the global state is SUSPENDED.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Coordinator.TrimMemoryLevel.Throttled"
+    enum="TrimMemoryLevel">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    Android: Records trim memory level when the global state is THROTTLED.
+  </summary>
+</histogram>
+
+<histogram name="Memory.DiscardableAllocationSize" units="KB">
+  <owner>reveman@chromium.org</owner>
+  <summary>
+    The discardable memory allocation size in KB. Recorded each time a new
+    discardable memory instance is created.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Extension" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each extension process.  Each process
+    provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.ExtensionProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of active extension processes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.GlyphPagesPerLoad">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The number of glyph pages present in the renderer when it commits a load.
+    Since this is per-sub-process, you can get the average number of glyph pages
+    in the system by multiplying this number with the average number of
+    renderers. Note that this typically won't count the glyph pages added as a
+    result of the load that just committed, since layout will happen after the
+    commit. There are 512 bytes per glyph page, but this number also very
+    closely approximates the number of glyph width map pages in the same
+    renderer. The only difference is that if you have font fallback, it will
+    make a new glyph page and no width page, but in most common cases there is
+    no fallback). Width pages are 1K each (256 floats), so you could think of
+    this value as being the number of &quot;1.5K units related to glyphs per
+    renderer per page load&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Gpu" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jamescook@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by the GPU process.  Recorded once per UMA
+    ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Graphics" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jamescook@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    System-wide graphics driver memory consumption.  Recorded on Chrome OS for
+    platforms where it is exposed by the kernel (for example, Intel i915 and
+    Exynos Mali).  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.IPCChannelReader.ReceivedMessageSize" units="bytes">
+  <obsolete>
+    Obsolete as of 11/2015
+  </obsolete>
+  <owner>dskiba@chromium.org</owner>
+  <summary>Size of messages received by IPC::ChannelReader.</summary>
+</histogram>
+
+<histogram name="Memory.NativeClient" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each Native Client loader process.  Each
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.NativeClientBroker" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each Native Client broker process.  Each
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Contents.MemAllocatedMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    System-wide memory allocation right after a renderer was killed by
+    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
+    in userspace plus graphics driver memory.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Contents.MemAvailableMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    System-wide file-backed memory plus free memory right after a renderer was
+    killed by oom-killer, which should be smaller than or close to what the
+    kernel uses to trigger low-memory notifications for tab discards. If this is
+    higher than the kernel's threshold for tab discards, renderers may be killed
+    due to reasons other than out-of-memory.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Contents.MemGraphicsMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    Graphics driver (GEM object) memory right after a renderer was killed by
+    oom-killer.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Contents.MemShmemMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    System-wide shared memory right after a renderer was killed by oom-killer.
+    Used primarily for shared buffers in the graphics system. Tracked because
+    it's a historical source of leaks on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Extensions.MemAllocatedMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    System-wide memory allocation right after a renderer was killed by
+    oom-killer, roughly equivalent to the sum of memory allocated with malloc()
+    in userspace plus graphics driver memory.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Extensions.MemAvailableMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    System-wide file-backed memory plus free memory right after a renderer was
+    killed by oom-killer, which should be smaller than or close to what the
+    kernel uses to trigger low-memory notifications for tab discards. If this is
+    higher than the kernel's threshold for tab discards, renderers may be killed
+    due to reasons other than out-of-memory.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Extensions.MemGraphicsMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    Graphics driver (GEM object) memory right after a renderer was killed by
+    oom-killer.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OOMKill.Extensions.MemShmemMB" units="MB">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    System-wide shared memory right after a renderer was killed by oom-killer.
+    Used primarily for shared buffers in the graphics system. Tracked because
+    it's a historical source of leaks on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="Memory.OtherProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of other various utility processes (nacl, gpu, sandbox, zygote,
+    utility).  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PepperFlashPlugin" units="KB">
+  <owner>thestig@chromium.org</owner>
+  <summary>
+    The private working set used by each Pepper Flash plugin process. Each
+    plugin process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PepperPlugin" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each Pepper plugin process.  Each plugin
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PepperPluginBroker" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each Pepper plugin broker process.  Each
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PepperPluginBrokerProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of Pepper plugin broker processes, recorded once per metrics
+    services (UMA) update.  See MetricsReportingScheduler for details.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PepperPluginProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of active Pepper plugin processes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Plugin" units="KB">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each plugin process.  Each plugin process
+    provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PluginProcessCount" units="processes">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of active plugin processes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PressureLevel" enum="MemoryPressureLevel">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The memory pressure level, which is recorded periodically. This shows the
+    cumulative number of seconds that systems spend in each of the memory
+    pressure states.
+  </summary>
+</histogram>
+
+<histogram name="Memory.PressureLevelChanges" enum="MemoryPressureLevelChanges">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The number of pressure level state changes for each possible pairwise state
+    change.
+  </summary>
+</histogram>
+
+<histogram name="Memory.ProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of all active processes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.ProcessLimit">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>The current process limit.  Recorded once per UMA ping.</summary>
+</histogram>
+
+<histogram name="Memory.Renderer" units="KB">
+  <obsolete>
+    Deprecated 06/2016 Replaced with Memory.Renderer.Large2.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each renderer process.  Each renderer
+    process provides one sample.  Recorded once per UMA ping. TODO(rkaplow):
+    This should be replaced with Memory.Renderer.Large2 in M54.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Renderer.Committed" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The total committed memory used by each renderer process.  Each renderer
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Renderer.EstimatedDroppableEncodedSize" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <summary>
+    The esitimated memory size which would be reduced when reusing disk cache is
+    implemented.  If it is 100% sure that the encoded data is in disk cache, the
+    same data in memory can be dropped to reduce memory usage.  This is
+    rencorded when an ImageResource is pruned.  See crbug/664437.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Renderer.Large2" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each renderer process.  Each renderer
+    process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.RendererAll" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>tasak@chromium.org</owner>
+  <summary>
+    The private working set used by each renderer process, including all
+    renderer types, i.e. this includes Chrome renderer, extensions renderer, as
+    well as regular renderer processes.  Each renderer process provides one
+    sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.RendererAll.Committed" units="MB">
+  <owner>bashi@chromium.org</owner>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>tasak@chromium.org</owner>
+  <summary>
+    The total committed memory used by each renderer process, including all
+    renderer types, i.e. this includes Chrome renderer, extensions renderer, as
+    well as regular renderer processes.  Each renderer process provides one
+    sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.RendererGrowthIn30Min" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Growth speed of the private working set used by each renderer process per 30
+    minutes.  The usage and growth speed is recorded at most every 30 minutes,
+    not every exact 30 minutes.  If the interval is longer than 30 minutes, it
+    is normalized to a speed KB per 30 minutes.  Each renderer process provides
+    one sample.  Recorded once per UMA log unless this is the first time the UMA
+    log is recorded after startup of the renderer, 30 minutes have not passed
+    from the last recording of the renderer or the usage goes down. If the usage
+    goes down, the amount of the shrink will be recorded in the
+    Memory.RendererShrinkIn30Min histogram.
+  </summary>
+</histogram>
+
+<histogram name="Memory.RendererProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of active renderer processes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.RendererShrinkIn30Min" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Shrink speed of the private working set used by each renderer process per 30
+    minutes.  The usage and shrink speed is recorded at most every 30 minutes,
+    not every exact 30 minutes.  If the interval is longer than 30 minutes, it
+    is normalized to a speed KB per 30 minutes.  Each renderer process provides
+    one sample.  Recorded once per UMA log unless this is the first time the UMA
+    log is recorded after startup of the renderer, 30 minutes have not passed
+    from the last recording of the renderer or the usage goes up. If the usage
+    goes up, the amount of the growth will be recorded in the
+    Memory.RendererGrowthIn30Min histogram.
+  </summary>
+</histogram>
+
+<histogram name="Memory.SandboxHelper" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each sandbox helper process.  Each sandbox
+    helper process provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.ShmemDir.AmountOfFreeSpace" units="MB">
+  <owner>reveman@chromium.org</owner>
+  <summary>
+    The amount of free space in temporary directory for shared memory files.
+    Recorded each time a new discardable memory manager instance is created.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.AvailPageFile" units="MB">
+  <obsolete>
+    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPageFile2.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the maximum amount of memory the current
+    process can commit. This value is equal to or smaller than the system-wide
+    available commit value.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.AvailPageFile2" units="MB">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the maximum amount of memory the current
+    process can commit. This value is equal to or smaller than the system-wide
+    available commit value.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.AvailPhys" units="MB">
+  <obsolete>
+    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailPhys2.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the amount of physical memory currently
+    available. This is the amount of physical memory that can be immediately
+    reused without having to write its contents to disk first. It is the sum of
+    the size of the standby, free, and zero lists.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.AvailPhys2" units="MB">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the amount of physical memory currently
+    available. This is the amount of physical memory that can be immediately
+    reused without having to write its contents to disk first. It is the sum of
+    the size of the standby, free, and zero lists.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.AvailVirtual" units="MB">
+  <obsolete>
+    Deprecated in 595320 and replaced with Memory.Stats.Win.AvailVirtual2.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the amount of unreserved and uncommitted
+    memory currently in the user-mode portion of the virtual address space of
+    the calling process.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.AvailVirtual2" units="MB">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the amount of unreserved and uncommitted
+    memory currently in the user-mode portion of the virtual address space of
+    the calling process.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.MemoryLoad" units="%">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the approximate percentage of physical
+    memory that was in use (0 indicates no memory use and 100 indicates full
+    memory use).
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.TotalPageFile" units="MB">
+  <obsolete>
+    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPageFile2.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the current committed memory limit for
+    the system or the current process, whichever is smaller.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.TotalPageFile2" units="MB">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the current committed memory limit for
+    the system or the current process, whichever is smaller.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.TotalPhys" units="MB">
+  <obsolete>
+    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalPhys2.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the amount of actual physical memory.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.TotalPhys2" units="MB">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the amount of actual physical memory.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.TotalVirtual" units="MB">
+  <obsolete>
+    Deprecated in 595320 and replaced with Memory.Stats.Win.TotalVirtual2.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the size of the user-mode portion of the
+    virtual address space of the calling process. This value depends on the type
+    of process, the type of processor, and the configuration of the operating
+    system. For example, this value is approximately 2 GB for most 32-bit
+    processes on an x86 processor and approximately 3 GB for 32-bit processes
+    that are large address aware running on a system with 4-gigabyte tuning
+    enabled.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Stats.Win.TotalVirtual2" units="MB">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Windows-only metric that represents the size of the user-mode portion of the
+    virtual address space of the calling process. This value depends on the type
+    of process, the type of processor, and the configuration of the operating
+    system. For example, this value is approximately 2 GB for most 32-bit
+    processes on an x86 processor and approximately 3 GB for 32-bit processes
+    that are large address aware running on a system with 4-gigabyte tuning
+    enabled.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Browser" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by the browser process.  Recorded once per UMA ping if the
+    system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Chrome" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each chrome:// renderer process.  Each process provides one
+    sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.CompressedDataSize" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The amount of memory that swap was compressed into. Recorded once per UMA
+    ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.CompressionRatio">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The ratio of swapped data original size to compressed size. Recorded once
+    per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Extension" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each extension process.  Each process provides one sample.
+    Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Gpu" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by the GPU process.  Recorded once per UMA ping if the system
+    has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.HaveSwapped" enum="BooleanSuccess">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Indicates that the system has swapped memory out at least once since boot.
+    Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.MemUsedTotal" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The amount of memory that is used by swap, including bookkeeping.  Recorded
+    once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.NativeClient" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each Native Client loader process.  Each process provides
+    one sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.NativeClientBroker" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each Native Client broker process.  Each process provides
+    one sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.NumReads">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The number of reads from swap.  Recorded once per UMA ping  if the system
+    has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.NumWrites">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The number of writes to swap.  Recorded once per UMA ping if the system has
+    swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.OriginalDataSize" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The amount of memory that was swapped out.  Recorded once per UMA ping if
+    the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.PepperPlugin" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each Pepper plugin process.  Each plugin process provides
+    one sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.PepperPluginBroker" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each Pepper plugin broker process.  Each process provides
+    one sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Plugin" units="KB">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each plugin process.  Each plugin process provides one
+    sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Renderer" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each renderer process.  Each renderer process provides one
+    sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.SandboxHelper" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each sandbox helper process.  Each sandbox helper process
+    provides one sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Total" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The sum of all processes' swap. Recorded once per UMA ping if the system has
+    swapped. See Memory.Swap.Total2 for the same metric with higher precision
+    bucketing.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Total2" units="MiB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The sum of all processes' swap. Recorded once per UMA ping if the system has
+    swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Utility" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each utility process.  Each utility process provides one
+    sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Worker" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by each worker process.  Each worker process provides one
+    sample.  Recorded once per UMA ping if the system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Swap.Zygote" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The swap used by the zygote process.  Recorded once per UMA ping if the
+    system has swapped.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Total" units="MB">
+  <obsolete>
+    Deprecated 09/2016. Replaced by Memory.Total2.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The sum of all processes. This is not aware of shared memory so it is just a
+    rough estimate. Recorded once per UMA ping. See Memory.Total2 for the same
+    metric with higher precision bucketing.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Total2" units="MiB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The sum of all processes. This is not aware of shared memory so it is just a
+    rough estimate. Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Utility" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each utility process.  Each utility process
+    provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Worker" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by each worker process.  Each worker process
+    provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.WorkerProcessCount" units="processes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The count of active worker processes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Zygote" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    The private working set used by the zygote process.  Each zygote process
+    provides one sample.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.DeviceMemoryClass">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Value of getMemoryClass() recorded once upon startup. This is an integer,
+    device-specific constant correlated with the amount of memory available on
+    Android device.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.EvictionReason" enum="AndroidEvictionReason">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Reasons behind evictions of individual tabs, recorded upon each tab
+    eviction.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.LowMemoryLoadedTabCount">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of loaded (memory-resident) tabs when LowMemory notification is
+    delivered.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.LowMemoryTimeBetween" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Time between two consecutive LowMemory notification in one foreground
+    session.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.LowRamDevice" enum="Boolean">
+  <owner>mariakhomenko@chromium.org</owner>
+  <summary>
+    Whether Chrome is running in low ram mode. This histogram is reported on
+    every upload by Android devices. A device is considered low-RAM if it has
+    512MiB of RAM or lower (see SysUtils.detectLowEndDevice()).
+
+    Note: The low-RAM determination has changed in M-49, it used to be given
+    directly by the Android OS.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.NotificationBackground"
+    enum="AndroidMemoryNotificationBackground">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Memory notifications delivered through system callbacks to Chrome while in
+    the background.
+  </summary>
+</histogram>
+
+<histogram name="MemoryAndroid.NotificationForeground"
+    enum="AndroidMemoryNotificationForeground">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@google.com</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Memory notifications delivered through system callbacks to Chrome while in
+    the foreground - we count LowMemory notification vs particular levels of
+    TrimMemory foreground notification.
+  </summary>
+</histogram>
+
+<histogram name="MemoryPurgeController.ReclaimedPartitionAllocInactiveTab"
+    units="KB">
+  <owner>bashi@chromium.org</owner>
+  <summary>The amount of reclaimed memory after a tab became inactive.</summary>
+</histogram>
+
+<histogram name="MemoryWarning.EvictedTabTimeSinceActive" units="ms">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    [iOS] When the OS sends a memory warning and the app evicts a tab, this
+    histogram records the time since the evicted tab was active.
+  </summary>
+</histogram>
+
+<histogram name="MemoryWarning.ProtectedTabTimeSinceActive" units="ms">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    [iOS] When the OS sends a memory warning and the app protects a tab, this
+    histogram records the time since the protected tab was active.
+  </summary>
+</histogram>
+
+<histogram name="Mist.SwitchResult" enum="MistSwitchResult">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The result (e.g. success or the type of failure) of a modem interface switch
+    operation performed by mist on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="MobileDownload.BytesDownloaded" units="KB">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the total data downloaded by completion status.
+  </summary>
+</histogram>
+
+<histogram name="MobileDownload.CancelReason" enum="MobileDownloadCancelReason">
+  <owner>qinmin@chromium.org</owner>
+  <summary>Android: Records the reason that a download is canceled.</summary>
+</histogram>
+
+<histogram name="MobileDownload.DownloadResumption"
+    enum="MobileDownloadResumption">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records user interaction on the download resumption button.
+  </summary>
+</histogram>
+
+<histogram name="MobileDownload.DownloadTime" units="ms">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the total time for a download by completion status.
+  </summary>
+</histogram>
+
+<histogram name="MobileDownload.InterceptFailureReason"
+    enum="MobileDownloadInterceptFailureReason">
+  <obsolete>
+    Deprecated 09/2016 in Issue 647755 with all downloads going through Chrome.
+  </obsolete>
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the reason that Chrome fails to intercept a download and
+    pass it to the Android DownloadManager.
+  </summary>
+</histogram>
+
+<histogram name="MobileDownload.InterruptionsCount">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the total interruptions for a download by completion
+    status.
+  </summary>
+</histogram>
+
+<histogram name="MobileFre.Progress" enum="MobileFreProgress">
+  <owner>gogerald@chromium.org</owner>
+  <summary>
+    Android: Records which states of the &quot;first run experience&quot; have
+    been reached. Each bucket represents a state and recorded everytime the
+    state changed.
+  </summary>
+</histogram>
+
+<histogram name="MobileFre.SignInChoice" enum="MobileFreSignInChoice">
+  <owner>aruslan@chromium.org</owner>
+  <summary>
+    Android: How the user left the sign-in part of the &quot;first run
+    experience&quot; activity (M-38+).
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.DurationAfterPotraitRotation" units="ms">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the duration that a fullscreen video is played after device
+    rotates from portrait to landscape mode for the first time, and before it
+    exits fullscreen. If there is no device rotation or if the video starts with
+    landscape mode, it is not recorded. If there are mutiple rotations between
+    portrait and landscape mode, only one record is emitted and it is equal to
+    the time period from the first rotation to the moment when the video exits
+    fullscreen.
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.LandscapeDuration" units="ms">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the duration that a fullscreen video is played in landscape
+    mode. If a video starts playing in landscape mode, and then it is switched
+    back and forth between landscape and portrait mode, only the time period
+    before the first switch is accounted. If a video starts playing in portrait
+    mode, it is not recorded.
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.LandscapeRotation" enum="BooleanEnabled">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records whether a fullscreen video is switched from landscape to
+    portrait mode at any point during playback.
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.OrientationPortrait"
+    enum="BooleanEnabled">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the device orientation when a video enters fullscreen. The
+    value is true if device orientation is portrait, or false otherwise. The
+    video doesn't necessarily needs to be in a playing state.
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.PortraitDuration" units="ms">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records the duration that a fullscreen video is played in portrait
+    mode. If a video starts playing in portrait mode, and then it is switched
+    back and forth between landscape and portrait mode, only the time period
+    before the first switch is accounted. If a video starts playing in landscape
+    mode, it is not recorded.
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.PortraitRotation" enum="BooleanEnabled">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records whether a fullscreen video is switched from portrait to
+    landscape mode at any point during playback.
+  </summary>
+</histogram>
+
+<histogram name="MobileFullscreenVideo.VideoPortrait" enum="BooleanEnabled">
+  <owner>qinmin@chromium.org</owner>
+  <summary>
+    Android: Records whether a video has a larger height than width when it
+    enters the fullscreen mode.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction">
+  <owner>mariakhomenko@chromium.org</owner>
+  <summary>
+    Android: Records the first action the user does within 10s of starting
+    Chrome. Recorded in DocumentActivity and ChromeTabbedActivity only when the
+    starting intent is of type MAIN.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.MobileMultiWindowInstances">
+  <owner>dtrainor@chromium.org</owner>
+  <summary>
+    Android: Number of instances of Chrome currently open during a MultiWindow
+    session.  Emitted every time Chrome is paused.  Only emitted on Android
+    MultiWindow devices.
+
+    A MultiWindow session is any period of time that Chrome was not used in a
+    full screen mode but together with another Activity that is visible at the
+    same time. This is only supported in a few Android models.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.MobileMultiWindowSession" units="%">
+  <owner>miguelg@chromium.org</owner>
+  <summary>
+    Android: percent of the screen available for Chrome during a multi-window
+    session. Emitted every time chrome is paused. Only emitted on Android
+    MultiWindow devices.
+
+    A multiwindow session is any period of time that Chrome was not used in full
+    screen mode but together with some other application that is visible at the
+    same time. This is only supported in a few Android models.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.NonMainIntentAction" enum="MobileStartingAction">
+  <owner>mariakhomenko@chromium.org</owner>
+  <summary>
+    Android: Records the first action the user does within 10s of starting
+    Chrome. Recorded in DocumentActivity and ChromeTabbedActivity only when the
+    starting intent is not of type MAIN, e.g. VIEW, etc.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.TimeSinceLastUse" units="minutes">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The time since last use until Chrome is launched from the home
+    screen. This is measured from the time the last tab is closed until a Main
+    intent is received. Has a minute level precision for first 10 minutes
+    increasing exponentially till 30 days.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.ToolbarFirstDrawTime" units="ms">
+  <owner>yusufo@chromium.org</owner>
+  <summary>
+    Android: The time it takes from launch to the completion of first draw for
+    Toolbar. This excludes activity creation time spent in framework.
+  </summary>
+</histogram>
+
+<histogram name="MobileStartup.ToolbarFirstFocusTime" units="ms">
+  <owner>mariakhomenko@chromium.org</owner>
+  <summary>
+    Android: The time it takes from launch to the first time the user focuses
+    the omnibox if the user does so within first 30s of the launch. This
+    excludes activity creation time spent in framework.
+  </summary>
+</histogram>
+
+<histogram name="ModuleIntegrityVerification.BytesModified" units="bytes">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Represents the amount of bytes in a module that are different on disk and in
+    memory. Logged when the ModuleIntegrityVerifier determines that a module is
+    different on disk and in memory after being triggered by an incident.
+  </summary>
+</histogram>
+
+<histogram name="ModuleIntegrityVerification.Difference" units="bytes">
+  <obsolete>
+    Deprecated and removed from code as of 05/2015.
+  </obsolete>
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Represents the difference in bytes deemed modified by the two
+    ModuleIntegrityVerifier code paths. The suffix indicates which path had a
+    higher value. Logged when the ModuleIntegrityVerifier determines that a
+    module is different on disk and in memory after being triggered by an
+    incident and the reported byte count for both methods is different.
+  </summary>
+</histogram>
+
+<histogram name="ModuleIntegrityVerification.RelocationsUnordered"
+    enum="ModuleIndex">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    Logged when the relocations in a module are not ordered causing the module
+    verification to abort.
+  </summary>
+</histogram>
+
+<histogram name="ModuleIntegrityVerification.RelocationsUnorderedModuleIndex">
+  <obsolete>
+    Deprecated 04/2015; replaced by
+    ModuleIntegrityVerification.RelocationsUnordered.
+  </obsolete>
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Logged when the relocations in a module are not ordered causing the module
+    verification to abort. The value is the index of the affected module.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.MachPortRelay.BrokerError"
+    enum="MojoMachPortRelayBrokerError">
+  <owner>amistry@chromium.org</owner>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    Errors that the broker process encounters while trying to send or receive
+    Mach ports from a child process.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.MachPortRelay.ChildError"
+    enum="MojoMachPortRelayChildError">
+  <owner>amistry@chromium.org</owner>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    Errors that a child process encounters while trying to receive Mach ports
+    from the broker process.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.Shell.ChildConnectionTime" units="ms">
+  <owner>rockot@chromium.org</owner>
+  <summary>
+    Measures the time it takes for a new child process to receive an
+    initialization request from the Mojo shell. This is precisely the duration
+    of the MojoShellConnectionImpl::BindToMessagePipe() call in ChildThreadImpl.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.System.GetParentPlatformHandleSyncTime" units="ms">
+  <owner>rockot@chromium.org</owner>
+  <summary>
+    Measures the time it takes for a child to receive its parent platform handle
+    synchronously from the broker on startup. This only applies to the subset of
+    platforms on which the sync broker is used.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.System.MessagesAcceptedPerEvent">
+  <owner>rockot@chromium.org</owner>
+  <summary>
+    Number of internal Mojo system messages processed synchronously during a
+    single execution of NodeController::AcceptIncomingMessages(). This is called
+    any time an event requires internal Mojo system messages to be pumped.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.System.Node.ConnectedPeers">
+  <owner>rockot@chromium.org</owner>
+  <summary>
+    Number of connected peer nodes tracked by a node. This is emitted any time a
+    peer is added to or dropped from a node.
+  </summary>
+</histogram>
+
+<histogram name="Mojo.System.Node.PendingChildren">
+  <owner>rockot@chromium.org</owner>
+  <summary>
+    Number of connected pending child node connections tracked by a node. This
+    is emitted any time a parent-child node connection is initiated or dropped.
+  </summary>
+</histogram>
+
+<histogram name="Mouse.PointerSensitivity.Changed" enum="PointerSensitivity">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Tracks mouse sensitivity setting changes by the user. This replaces the old
+    Mouse.Sensitivity.Changed metric.
+  </summary>
+</histogram>
+
+<histogram name="Mouse.PointerSensitivity.Started" enum="PointerSensitivity">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Tracks mouse sensitivity setting on startup. This replaces the old
+    Mouse.Sensitivity.Started metric.
+  </summary>
+</histogram>
+
+<histogram name="Mouse.Sensitivity.Changed" enum="PointerSensitivity">
+  <obsolete>
+    Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Changed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Tracks mouse sensitivity setting.</summary>
+</histogram>
+
+<histogram name="Mouse.Sensitivity.Started" enum="PointerSensitivity">
+  <obsolete>
+    Deprecated as of 6/2013, replaced by Mouse.PointerSensitivity.Started.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Tracks mouse sensitivity setting on startup.</summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.MouseDownDuration_Click" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user mousedown-ed a link and when
+    the user clicked a link.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.MouseDownFollowedByClick"
+    enum="MouseEventFollowedByClick">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For each click handled by an HTML anchor tag link, whether Blink saw a
+    mousedown event preceding it.  This is only measured for clicks handled by
+    the anchor tag's default click event handler.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.MouseDowns">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of mousedown events detected at HTML anchor-tag links' default
+    event handler.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.MouseOverDuration_Click" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user mouseover-ed a link and when
+    the user clicked a link.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.MouseOverDuration_NoClick" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user mouseover-ed a link and when
+    the user mouseout-ed a link without click.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.MouseOvers">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of mouseover events detected at HTML anchor-tag links' default
+    event handler.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.PreTapEventsFollowedByClick"
+    enum="PreTapEvents">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The tap gesture events detected before click at HTML anchor-tag links'
+    default event handler.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.TapDownDuration_Click" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time elapsed between when the user tapdown-ed a link and when
+    the user clicked a link.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.TapDowns">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of gesturetapdown events detected at HTML anchor-tag links'
+    default event handler.
+  </summary>
+</histogram>
+
+<histogram name="MouseEventPrefetch.TapUnconfirmeds">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of gesturetapunconfirmed events detected at HTML anchor-tag
+    links' default event handler.
+  </summary>
+</histogram>
+
+<histogram name="MPArch.ChildProcessLaunchFirst">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    The time it takes to spawn the first child subprocess (including sandbox
+    init).
+  </summary>
+</histogram>
+
+<histogram name="MPArch.ChildProcessLaunchSubsequent">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    The time it takes to spawn child sub processes not counting the first one.
+  </summary>
+</histogram>
+
+<histogram name="MPArch.IIR_InputEventDelta" units="ms">
+  <obsolete>
+    Deprecated 08/2016 due to lack of use (Histogram Eraser).
+  </obsolete>
+  <owner>rvargas@chromium.org</owner>
+  <summary>
+    The time spent waiting for the renderer to acknowledge an input event.
+  </summary>
+</histogram>
+
+<histogram name="MPArch.RendererLaunchFirst">
+  <obsolete>
+    Deprecated 2/2013, renamed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time it takes to spawn the first renderer subprocess (including sandbox
+    init).
+  </summary>
+</histogram>
+
+<histogram name="MPArch.RendererLaunchSubsequent">
+  <obsolete>
+    Deprecated 2/2013, renamed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time it takes to spawn renderer sub processes not counting the first
+    one.
+  </summary>
+</histogram>
+
+<histogram name="MPArch.RPHCountPerLoad">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    The number of RenderProcessHosts (i.e. renderer processes) present when each
+    load completes. This is basically the average number of sub-processes over
+    time. See also Tabs.TabCountPerLoad.
+  </summary>
+</histogram>
+
+<histogram name="MPArch.RWH_InputEventDelta" units="ms">
+  <obsolete>
+    renamed MPArch.IIR_InputEventDelta.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time spent waiting for the renderer to acknowledge an input event.
+  </summary>
+</histogram>
+
+<histogram name="MPArch.RWH_OnMsgPaintRect" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time spent inside RenderWidgetHost::OnMsgPaintRect.</summary>
+</histogram>
+
+<histogram name="MPArch.RWH_OnMsgScrollRect" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time spent inside RenderWidgetHost::OnMsgScrollRect.</summary>
+</histogram>
+
+<histogram name="MPArch.RWH_OnMsgUpdateRect">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="MPArch.RWH_RepaintDelta">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="MPArch.RWH_TabSwitchPaintDuration" units="ms">
+  <owner>jbauman@chromium.org</owner>
+  <summary>
+    Time from tab switch requested to tab appearing on screen (Aura and Mac
+    only).
+  </summary>
+</histogram>
+
+<histogram name="MPArch.RWHH_WhiteoutDuration" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time that the user sees a blank white page after switching to a
+    different tab, while the RenderWidgetHost receives data to paint from the
+    renderer process.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.DiscardedTabsPerUser">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    The relation of discarded tabs vs. the amount of simultaneous users. The
+    counts are the number of discards and the buckets are the number of users.
+    Since the count values are absolute numbers, they need to be normalized
+    before use - so divide the counts by the percentage of users per session
+    found under 'MultiProfile.UsersPerSessionIncremental'.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.SessionMode" enum="MultiProfileSessionMode">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    The session counter for different multi profile modes which gets stored once
+    per session at the beginning of the session.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.SigninUserUIPath"
+    enum="MultiProfileSigninUserAction">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    Count the number of times each UI path is taken for signing into a new
+    account in a Chrome OS multiprofile session. UI paths include the system
+    tray and the user account switcher on the browser frame.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.SwitchActiveUserUIPath"
+    enum="MultiProfileSwitchActiveUserAction">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    Count the number of times each UI path is taken for switching the active
+    account in a Chrome OS multiprofile session. UI paths include the system
+    tray and the keyboard shortcut.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.TeleportWindow"
+    enum="MultiProfileTeleportWindowAction">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    Counts the number of window teleportations when using separated desktop
+    mode.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.TeleportWindowType"
+    enum="MultiProfileTeleportWindowType">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    Counts the number of teleported windows by types in separated desktop mode.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.UsersPerSession">
+  <obsolete>
+    Deprecated 3/2014, renamed to MultiProfile.UsersPerSessionIncremental.
+  </obsolete>
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    The number of users simultaneously signed into a multiprofile session on
+    Chrome OS. This is recorded upon session end.
+  </summary>
+</histogram>
+
+<histogram name="MultiProfile.UsersPerSessionIncremental">
+  <owner>skuhne@chromium.org</owner>
+  <summary>
+    The number of users simultaneously signed into a multiprofile session on
+    Chrome OS. This is recorded whenever a user gets added to the session. To
+    get the correct count, all following counts must be subtracted. Example: If
+    100 single user, 20 two user and 5 three user sessions, there were
+    100-20-5=75 single user sessions, 100-80=20 dual user sessions and so on.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Client.Helper.InitState" enum="NaClHelperStatus">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    When the browser started, what happened with the NaCl helper process?
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Client.Helper.StateOnFork" enum="NaClHelperStatus">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    When a NaCl application process was created, what had happened with the NaCl
+    helper process when the browser was started?
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Client.OSArch" enum="NaClOSArchEnum">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The OS/Architecture of a nexe that was loaded.</summary>
+</histogram>
+
+<histogram name="NaCl.HttpStatusCodeClass.Manifest.InstalledApp"
+    enum="NaClHttpStatusCodeClass">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The status code returned when trying to load a manifest inside an installed
+    app.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.HttpStatusCodeClass.Manifest.NotInstalledApp"
+    enum="NaClHttpStatusCodeClass">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The status code returned when trying to load a manifest from a source other
+    than an installed app.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.HttpStatusCodeClass.Nexe.InstalledApp"
+    enum="NaClHttpStatusCodeClass">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The status code returned when trying to load a NaCl executable inside an
+    installed app.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.HttpStatusCodeClass.Nexe.NotInstalledApp"
+    enum="NaClHttpStatusCodeClass">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The status code returned when trying to load a NaCl executable from a source
+    other than an installed app.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.LoadStatus.Plugin" enum="NaClPluginErrorCode">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The error code returned by NaCl's Chrome plugin.</summary>
+</histogram>
+
+<histogram name="NaCl.LoadStatus.Plugin.InstalledApp"
+    enum="NaClPluginErrorCode">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The error code returned by NaCl's Chrome plugin, but only for installed
+    apps.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.LoadStatus.Plugin.NotInstalledApp"
+    enum="NaClPluginErrorCode">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The error code returned by NaCl's Chrome plugin, but excluding installed
+    apps.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.LoadStatus.SelLdr" enum="NaClSelLdrErrorCode">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The error code returned by NaCl's sel_ldr.</summary>
+</histogram>
+
+<histogram name="NaCl.LoadStatus.SelLdr.InstalledApp"
+    enum="NaClSelLdrErrorCode">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The error code returned by NaCl's sel_ldr, but only for installed apps.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.LoadStatus.SelLdr.NotInstalledApp"
+    enum="NaClSelLdrErrorCode">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The error code returned by NaCl's sel_ldr, but excluding installed apps.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Manifest.IsDataURI" enum="NaClManifestType">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    Was the manifest specified as a data URI rather than a .nmf file?
+  </summary>
+</histogram>
+
+<histogram name="NaCl.ManifestDownloadTime" units="ms">
+  <obsolete>
+    Deprecated 6/2011, renamed.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to download the manifset file for a Native Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.ModuleUptime.Crash" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The time a NaCl module ran before it crashed.</summary>
+</histogram>
+
+<histogram name="NaCl.ModuleUptime.Normal" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The time a NaCl module ran without crashing, at shutdown.</summary>
+</histogram>
+
+<histogram name="NaCl.NexeDownloadTime" units="ms">
+  <obsolete>
+    Deprecated 6/2011, renamed.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to download the main .nexe for a Native Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.NexeSize" units="KB">
+  <obsolete>
+    Deprecated 6/2011, renamed.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The size of the main .nexe file downloaded for a Native Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.NexeStartupTime" units="ms">
+  <obsolete>
+    Deprecated 6/2011, renamed.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took between the Native Client plugin initialization and when
+    proxied execution of the NaCl module begins. This is the general startup
+    overhead of running as a NaCl module vs a trusted PPAPI plugin.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.NexeStartupTimePerMB" units="milliseconds/MB">
+  <obsolete>
+    Deprecated 6/2011, renamed.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took between the Native Client plugin initialization and when
+    proxied execution of the NaCl module begins. This is the general startup
+    overhead of running as a NaCl module vs a trusted PPAPI plugin.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Options.PNaCl.OptLevel" enum="PNaClOptionsOptLevelEnum">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The optimization level set for the initial Portable Native Client
+    translation from bitcode to native code.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.OSArch" enum="NaClOSArchEnum">
+  <obsolete>
+    Deprecated 6/2011, renamed.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The OS/Architecture of a nexe that was loaded.</summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClCache.IsHit" enum="PNaClTranslationCacheEnum">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    Did the Portable Native Client translation cache find an executable
+    translated from bitcode?
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.CompileKBPerSec" units="KB/s">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The rate for compiling a Portable Native Client bitcode file to an object
+    file in Kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.CompileTime" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to compile a Portable Native Client bitcode file to an
+    object file.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.LinkTime" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to link a Portable Native Client generated object file into
+    a Native Client executable.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.LoadCompiler" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to load and validate the Portable Native Client compiler.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.LoadLinker" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to load and validate the Portable Native Client linker.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded"
+    units="%">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The percentage of a Portable Native Client application that is compiled by
+    the time the application is fully downloaded (compile and download happen in
+    parallel).
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec" units="KB/s">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The rate for completely translating a Portable Native Client bitcode file
+    into a Native Client executable and caching the result in Kilobytes per
+    second.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedTime" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The total time it took to completely translate a Portable Native Client
+    bitcode file into a Native Client executable, and cache the result.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.ShutdownTime.Total" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The time it took the NaCl module to shut down.</summary>
+</histogram>
+
+<histogram name="NaCl.Perf.Size.Manifest" units="KB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The size of the manifest file.</summary>
+</histogram>
+
+<histogram name="NaCl.Perf.Size.Nexe" units="KB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The size of the main .nexe file downloaded for a Native Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.Size.Pexe" units="KB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The size of the main .pexe bitcode file downloaded for a Portable Native
+    Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.Size.PexeNexeSizePct" units="%">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The size of the main .pexe bitcode file divided by the size of the .nexe
+    that is the result of translating the bitcode file, times 100.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.Size.PNaClTranslatedNexe" units="KB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The size of the main .nexe file that is the result of translating a Portable
+    Native Client .pexe bitcode file.  This reflects the amount of cache
+    consumed.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.LoadModule" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>The time it took to load the NaCl module into sel_ldr.</summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.LoadModulePerMB" units="milliseconds/MB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to load the NaCl module into sel_ldr.  Normalized by the
+    size of the .nexe, in megabytes.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.ManifestDownload" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to download the manifset file for a Native Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.NaClOverhead" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took between the Native Client plugin initialization and when
+    proxied execution of the NaCl module begins. This is the general startup
+    overhead of running as a NaCl module vs a trusted PPAPI plugin.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.NaClOverheadPerMB"
+    units="milliseconds/MB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took between the Native Client plugin initialization and when
+    proxied execution of the NaCl module begins. This is the general startup
+    overhead of running as a NaCl module vs a trusted PPAPI plugin.  Normalized
+    by the size of the .nexe, in megabytes.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.NexeDownload" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to download the main .nexe for a Native Client module.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.NexeDownloadPerMB"
+    units="milliseconds/MB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took to download the main .nexe for a Native Client module.
+    Normalized by the size of the .nexe, in megabytes.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.Total" units="ms">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took between the Native Client plugin initialization and when
+    the NaCl module is ready to be used.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Perf.StartupTime.TotalPerMB" units="milliseconds/MB">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The time it took between the Native Client plugin initialization and when
+    the NaCl module is ready to be used.  Normalized by the size of the .nexe,
+    in megabytes.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.Startups" enum="NaClStartupEnum">
+  <obsolete>
+    Deprecated 5/2011, data is duplicated by NaCl.NexeStartupTime, and
+    normalizing to 'tab opens' is unusual.
+  </obsolete>
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    The number of times that Native Client has been started by loading a .nexe
+    compared to the number of times that a tab has been opened.
+  </summary>
+</histogram>
+
+<histogram name="NaCl.ValidationCache.Query" enum="NaClValidationCacheEnum">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    Did a validation cache query find a previously known validation result?
+  </summary>
+</histogram>
+
+<histogram name="NaCl.ValidationCache.Set" enum="NaClValidationCacheEnum">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <summary>
+    Was the validation cache updated with a new validation result?
+  </summary>
+</histogram>
+
+<histogram name="Navigation.ClearSiteData.Duration" units="ms">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    Recorded when a navigation is deferred while clearing site data. Indicates
+    how much time the clearing took.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.ClearSiteData.Parameters"
+    enum="ClearSiteDataParameters">
+  <owner>msramek@chromium.org</owner>
+  <summary>
+    The parameters of the Clear-Site-Data header. Recorded when the header is
+    successfully parsed.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.DeferredDocumentLoading.StatesV1"
+    enum="DocumentStateForDeferredLoading">
+  <obsolete>
+    Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV2.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Why and if cross-origin documents would be loaded in a world where we defer
+    loading until they are visible.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.DeferredDocumentLoading.StatesV2"
+    enum="DocumentStateForDeferredLoadingV2">
+  <obsolete>
+    Deprecated 10/2016 in favor of Navigation.DeferredDocumentLoading.StatesV3.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Why and if cross-origin documents would be loaded if we were to defer
+    loading as long as possible.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.DeferredDocumentLoading.StatesV3"
+    enum="DocumentStateForDeferredLoadingV3">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Why and if cross-origin documents would be loaded if we were to defer
+    loading as long as possible. Difference from V2: frames positioned both
+    above and to the left of the page have their own bucket and are no longer
+    counted in the &quot;above&quot; bucket.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.EngagementTime.HTTP" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The amount of time that an HTTP page was in the foreground. Recorded on
+    every page close/transition.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.EngagementTime.HTTPS" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The amount of time that an HTTPS page was in the foreground. Recorded on
+    every page close/transition.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.EngagementTime.Ratio" units="%">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The percentage of time that HTTPS pages were in the foreground, as compared
+    to total foreground time. Recorded whenever user metrics are uploaded.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.FrameHasEmbeddedCredentials" enum="Boolean">
+  <owner>palmer@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Whether the navigation was to a URL that had embedded credentials.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.IsMobileOptimized" enum="BooleanIsMobileOptimized">
+  <owner>cjhopman@chromium.org</owner>
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    Signifies whether a succesfully finished page load for the main frame
+    content width fits within the device width and/or has a fixed page scale.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.MainFrameHasEmbeddedCredentials" enum="Boolean">
+  <owner>palmer@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Whether the main-frame navigation was to a URL that had embedded
+    credentials.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.MainFrameScheme" enum="NavigationScheme">
+  <owner>cbentzel@chromium.org</owner>
+  <owner>davidben@chromium.org</owner>
+  <summary>The scheme of the URL for each main-frame navigation.</summary>
+</histogram>
+
+<histogram name="Navigation.MainFrameSchemeDifferentPage"
+    enum="NavigationScheme">
+  <owner>cbentzel@chromium.org</owner>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The scheme of the URL for each main-frame navigation that goes to a
+    different page. Transitions like fragment change or history.pushState are
+    excluded.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.OnBeforeUnloadOverheadTime" units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Overhead time spent handling the OnBeforeUnload event from the browser
+    standpoint. More precisely, it is the total time between dispatch and
+    acknowledgment of the BeforeUnload event on the browser side, minus the
+    actual time spent executing the BeforeUnload handlers on the renderer side.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.RedirectChainSize" units="characters">
+  <owner>haitaol@chromium.org</owner>
+  <owner>donnd@chromium.org</owner>
+  <summary>
+    Total length of the redirect URL strings in navigation entry. Logged when
+    entry is committed.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.Reload.ReloadMainResourceToReloadDuration"
+    units="ms">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>
+    Reported when a user triggers reload without any other navigations after the
+    previous reload in the same page, and the previous reload variant was
+    RELOAD_MAIN_RESOURCE. Duration time between two reloads is reported.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.Reload.ReloadToReloadDuration" units="ms">
+  <owner>toyoshim@chromium.org</owner>
+  <summary>
+    Reported when a user triggers reload without any other navigations after the
+    previous reload in the same page. Duration time between two reloads is
+    reported.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.Scheduled.MaybeCausedAbort"
+    enum="ScheduledNavigationType">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    window.location and other scheduled navigation changes can cause the current
+    provisional load to be aborted. Many times these are initiated without user
+    gesture. This histogram logs counts of the various aborters.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.Scheduled.MaybeCausedAbort.Time" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    window.location and other scheduled navigation changes can cause the current
+    provisional load to be aborted. Many times these are initiated without user
+    gesture. This histogram logs the time between the aborted navigation start
+    and the scheduled navigation start, if the aborted navigation has a non-zero
+    navigationStart value.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.SchemePerUniqueOrigin" enum="NavigationScheme">
+  <owner>palmer@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The scheme of the URL for the first main-frame navigation per origin per
+    non-OffTheRecord session.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.SchemePerUniqueOriginOTR" enum="NavigationScheme">
+  <owner>palmer@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The scheme of the URL for the first main-frame navigation per origin per
+    OffTheRecord session.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.Start.RendererBrowserDifference.Negative"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The difference between Now() in the renderer and browser_navigation_start
+    for browser-initiated navigations if the difference is negative. This value
+    should ideally only reflect the IPC time between the browser process and
+    renderer process, but in practice could be skewed by inter-process timing
+    errors. If the clocks used for TimeTicks are monotonic across processes, all
+    samples should fall into the Positive bucket.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.Start.RendererBrowserDifference.Positive"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The difference between Now() in the renderer and browser_navigation_start
+    for browser-initiated navigations if the difference is positive. This value
+    should ideally only reflect the IPC time between the browser process and
+    renderer process, but in practice could be skewed by inter-process timing
+    errors. If the clocks used for TimeTicks are monotonic across processes, all
+    samples should fall into the Positive bucket.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.TimeToCommit" units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time between the start of a browser-started navigation request in and its
+    commit.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.TimeToURLJobStart" units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time between the start of a browser-started navigation request and the
+    reception of a corresponding ResourceRequest in the network stack.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.UI_OnCommitProvisionalLoad.Intent" units="ms">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Time between receiving an Android Intent and the navigation commit.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.UI_OnCommitProvisionalLoad.Link" units="ms">
+  <owner>clamy@chromium.org</owner>
+  <summary>Time between clicking on a link and the navigation commit.</summary>
+</histogram>
+
+<histogram name="Navigation.UI_OnLoadComplete.Intent" units="ms">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Time between receiving an Android intent and the document load complete
+    event for a navigation in the main frame.
+  </summary>
+</histogram>
+
+<histogram name="Navigation.UI_OnLoadComplete.Link" units="ms">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Time between clicking on a link and the document load complete event for a
+    navigation in the main frame.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CellularConnectionSubtype" enum="ConnectionSubtype">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The connection subtype of the network the client is connected to, when the
+    client is on a cellular connection. This histogram is logged once per UMA
+    record, if the user is on a cellular connection, at the time the record is
+    finalized.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOn2G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on a 2G connection,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOn3G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on a 3G connection,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOn4G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on a 4G connection,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change. This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOnBluetooth" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on a Bluetooth
+    connection, before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOnEthernet" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on an Ethernet
+    connection, before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOnNone" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen while the
+    NetworkChangeNotifier thought there was no network connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOnUnknown" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on an unknown connection
+    type, before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FastestRTTOnWifi" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time seen on a Wifi connection,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOn2G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to a 2G connection and receiving the first network
+    data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOn3G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to a 3G connection and receiving the first network
+    data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOn4G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to a 4G connection and receiving the first network
+    data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOnBluetooth" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to a Bluetooth connection and receiving the first
+    network data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOnEthernet" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to an Ethernet connection and receiving the first
+    network data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOnNone" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between disconnecting and receiving the first network data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOnUnknown" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to an unknown connection type and receiving the first
+    network data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.FirstReadOnWifi" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between switching to a Wifi connection and receiving the first network
+    data.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOn2G" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via a 2G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOn3G" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via a 3G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOn4G" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via a 4G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOnBluetooth" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via a Bluetooth connection,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOnEthernet" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via an Ethernet connection,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOnNone" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while the NetworkChangeNotifier thought there
+    was no network connection, before the NetworkChangeNotifier detected a
+    connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOnUnknown" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via an unknown connection type,
+    before the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.KBTransferedOnWifi" units="KB">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How much data was transfered while connected via a Wifi connection, before
+    the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOn2G" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on a 2G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOn3G" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on a 3G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOn4G" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on a 4G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOnBluetooth" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on a Bluetooth connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOnEthernet" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on an Ethernet connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOnNone" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen while the NetworkChangeNotifier
+    thought there was no network connection, before the NetworkChangeNotifier
+    detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOnUnknown" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on an unknown connection type, before
+    the NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.PeakKbpsOnWifi" units="Kbps">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Rough estimate of peak throughput seen on a Wifi connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOn2G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via a 2G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOn3G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via a 3G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOn4G" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via a 4G connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOnBluetooth" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via a Bluetooth connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOnEthernet" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via an Ethernet connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOnNone" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent disconnected, before the NetworkChangeNotifier detected a
+    connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOnUnknown" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via an unknown connection type, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.CM.TimeOnWifi" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long was spent connected via a Wifi connection, before the
+    NetworkChangeNotifier detected a connectivity change.
+
+    This metric is recorded when the NetworkChangeNotifier detects a
+    connectivity change.  This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NCN.ConnectionTypeChangeToIPAddressChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time from ConnectionTypeChanged message until IPAddressChanged message.
+  </summary>
+</histogram>
+
+<histogram name="NCN.DNSConfigChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>Time between DNS configuration change messages.</summary>
+</histogram>
+
+<histogram name="NCN.GetConnectionTypeTime" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    How long does each call to NetworkChangeNotifier::GetConnectionType() take.
+  </summary>
+</histogram>
+
+<histogram name="NCN.getNetInfo1stSuccess"
+    enum="BooleanAvoidedNullPointerException">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    True if the first call to ConnectivityManager.getNetworkInfo(Network) did
+    not throw NullPointerException, false if it did. Useful for investigating
+    and avoiding unexpected exceptions, see http://crbug.com/592131.
+  </summary>
+</histogram>
+
+<histogram name="NCN.getNetInfo2ndSuccess"
+    enum="BooleanAvoidedNullPointerException">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Recorded after the first call to ConnectivityManager.getNetworkInfo(Network)
+    threw a NullPointerException. True if the second call to
+    ConnectivityManager.getNetworkInfo(Network) did not throw
+    NullPointerException, false if it did. Useful for investigating and avoiding
+    unexpected exceptions, see http://crbug.com/592131.
+  </summary>
+</histogram>
+
+<histogram name="NCN.getWifiInfo1stSuccess"
+    enum="BooleanAvoidedNullPointerException">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    True if the first call to WifiManager.getConnectionInfo() did not throw
+    NullPointerException, false if it did. Useful for investigating and avoiding
+    unexpected exceptions, see http://crbug.com/592131.
+  </summary>
+</histogram>
+
+<histogram name="NCN.getWifiInfo2ndSuccess"
+    enum="BooleanAvoidedNullPointerException">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Recorded after the first call to WifiManager.getConnectionInfo() threw a
+    NullPointerException. True if the second call to
+    ConnectivityManager.getNetworkInfo(Network) did not throw
+    NullPointerException, false if it did. Useful for investigating and avoiding
+    unexpected exceptions, see http://crbug.com/592131.
+  </summary>
+</histogram>
+
+<histogram name="NCN.IPAddressChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>Time between IP address change messages.</summary>
+</histogram>
+
+<histogram name="NCN.IPAddressChangeToConnectionTypeChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time from IPAddressChanged message until ConnectionTypeChanged message.
+  </summary>
+</histogram>
+
+<histogram name="NCN.NetworkOfflineChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between going online until we go offline change messages, using new
+    filtered signal.
+  </summary>
+</histogram>
+
+<histogram name="NCN.NetworkOnlineChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between going offline until we go online change messages, using new
+    filtered signal.
+  </summary>
+</histogram>
+
+<histogram name="NCN.NetworkOperatorMCCMNC">
+  <owner>bolian@chromium.org</owner>
+  <owner>bengr@google.com</owner>
+  <owner>marq@google.com</owner>
+  <summary>
+    The MCC (mobile country code) and MNC (mobile network code) of the network
+    operator when a new metrics log is created or when the network connection is
+    changed. A value of zero means a non-mobile network or the operator code is
+    unknown.
+  </summary>
+</histogram>
+
+<histogram name="NCN.OfflineChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between going online until we go offline change messages.
+  </summary>
+</histogram>
+
+<histogram name="NCN.OfflineDataRecv" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between when we thought we went offline and when we received some
+    network data (a URLRequest read completed).
+  </summary>
+</histogram>
+
+<histogram name="NCN.OfflineDataRecvAny5sBeforeOnline">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Count of how many times we received network data (a URLRequest read
+    completed) while offline when some data was received at most five seconds
+    before going online.
+  </summary>
+</histogram>
+
+<histogram name="NCN.OfflineDataRecvUntilOnline" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between when we received the last network data (a URLRequest read
+    completed) while offline and when we thought we went online.
+  </summary>
+</histogram>
+
+<histogram name="NCN.OfflinePolls">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Count of how many times we polled the online/offline status before detecting
+    an offline to online transition.
+  </summary>
+</histogram>
+
+<histogram name="NCN.OnlineChange" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between going offline until we go online change messages.
+  </summary>
+</histogram>
+
+<histogram name="NCN.PollingOfflineDataRecv" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Time between when we thought we went offline and when we received some
+    network data (a URLRequest read completed), while polling
+    NetworkChangeNotifier::GetConnectionType() still told us we were offline.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternateProtocolBrokenLocation"
+    enum="BrokenAlternateProtocolLocation">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Breakdown of the locations when SetBrokenAlternateProtocol is called.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternateProtocolUsage" enum="AlternateProtocolUsage">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Breakdown of how requests which could potentially make use of an alternate
+    protocol use or don't use the protocol.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternateProtocolUsage.1000Truncated"
+    enum="AlternateProtocolUsage">
+  <obsolete>
+    Deprecated 10/2014.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Breakdown of how requests which could potentially make use of an alternate
+    protocol use or don't use the protocol. Loaded data for 1000 servers and we
+    have persisted 1000 MRU servers.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternateProtocolUsage.200Truncated"
+    enum="AlternateProtocolUsage">
+  <obsolete>
+    Deprecated 10/2014.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Breakdown of how requests which could potentially make use of an alternate
+    protocol use or don't use the protocol. Loaded data for 200 servers and we
+    have persisted 1000 MRU servers.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternativeServiceServers.MoreOrEqualCacheEntries">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The difference between the size of alternative service mappings in cache and
+    preferences. This tracks zero or negative values (when the difference
+    between preferences size is less than or equal to memory cache size).
+    Positive values are tracked by
+    Net.AlternativeServiceServers.MorePrefsEntries.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternativeServiceServers.MorePrefsEntries">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The difference between the size of alternative service mappings in
+    preferences and cache. This tracks positive values (when the difference
+    between preferences size is greater than memory cache size). Non positive
+    values are tracked by Net.AlternativeServiceServers.MoreOrEqualCacheEntries.
+  </summary>
+</histogram>
+
+<histogram name="Net.AlternativeServiceTypeForRequest"
+    enum="AlternativeServiceType">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    Information about the AlternativeService used for each request.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncResourceHandler_PendingDataCount">
+  <obsolete>
+    Deprecated 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of unacknowledged ResourceMsg_DataReceived messages.  This message
+    is sent once per chunk of data read from the network.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncResourceHandler_PendingDataCount_WhenFull">
+  <obsolete>
+    Deprecated 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of unacknowledged ResourceMsg_DataReceived messages at the point
+    where we pause network loading.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncResourceHandler_RedirectHopTime" units="ms">
+  <obsolete>
+    Data collection finished on 2015-03-31.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The time between the call of AsyncResourceHandler::OnRequestRedirected and
+    the FollowRedirect IPC message from ResourceHost, that is, the length of the
+    redirect browser-renderer-browser hop.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Alloc" units="bytes">
+  <obsolete>
+    Deprecated 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The size of a SharedIOBuffer allocation.</summary>
+</histogram>
+
+<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_Used" units="bytes">
+  <obsolete>
+    Deprecated 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The number of bytes copied into a SharedIOBuffer.</summary>
+</histogram>
+
+<histogram name="Net.AsyncResourceHandler_SharedIOBuffer_UsedPercentage"
+    units="%">
+  <obsolete>
+    Deprecated 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The percentage of a SharedIOBuffer allocation that is actually used.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncRevalidation.ReadError" enum="NetErrorCodes">
+  <owner>ricea@chromium.org</owner>
+  <summary>
+    Counts of error codes received while reading the body of an async
+    revalidation before getting a response. Only async revalidations that had a
+    read error are counted.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncRevalidation.ResponseError" enum="NetErrorCodes">
+  <owner>ricea@chromium.org</owner>
+  <summary>
+    Counts of error codes received while performing an async revalidation before
+    getting a response. Only async revalidations that had in a response error
+    are counted.
+  </summary>
+</histogram>
+
+<histogram name="Net.AsyncRevalidation.Result" enum="AsyncRevalidationResult">
+  <owner>ricea@chromium.org</owner>
+  <summary>
+    The result of an async revalidation resulting from application of the
+    Cache-Control: stale-while-revalidate directive. All async revalidations are
+    counted.
+  </summary>
+</histogram>
+
+<histogram name="Net.AuthGenerateToken_basic" units="ms">
+  <obsolete>
+    Deprecated 01/2011 in https://crrev.com/70740
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time to generate a Basic HTTP authentication token.</summary>
+</histogram>
+
+<histogram name="Net.AuthGenerateToken_digest" units="ms">
+  <obsolete>
+    Deprecated 01/2011 in https://crrev.com/70740
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time to generate a Digest HTTP authentication token.</summary>
+</histogram>
+
+<histogram name="Net.AuthGenerateToken_negotiate" units="ms">
+  <obsolete>
+    Deprecated 01/2011 in https://crrev.com/70740
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time to generate a Negotiate (or SPNEGO) HTTP authentication token.
+  </summary>
+</histogram>
+
+<histogram name="Net.AuthGenerateToken_ntlm" units="ms">
+  <obsolete>
+    Deprecated 01/2011 in https://crrev.com/70740
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time to generate an NTLM HTTP authentication token.</summary>
+</histogram>
+
+<histogram name="Net.AutoReload.CountAtStop">
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Number of times auto-reload has been attempted before auto-reload stopped
+    without succeeding, either because the stop button was pressed or because
+    the renderer was destroyed.
+  </summary>
+</histogram>
+
+<histogram name="Net.AutoReload.CountAtSuccess">
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Number of times auto-reload had to attempt to reload a page before
+    succeeding.
+  </summary>
+</histogram>
+
+<histogram name="Net.AutoReload.ErrorAtFirstSuccess" enum="NetErrorCodes">
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Original error code that started an auto-reload which then succeeded on the
+    first attempt.
+  </summary>
+</histogram>
+
+<histogram name="Net.AutoReload.ErrorAtStop" enum="NetErrorCodes">
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Error code, if any, when auto-reload stopped without succeeding, either
+    because the stop button was pressed or because the renderer was destroyed.
+  </summary>
+</histogram>
+
+<histogram name="Net.AutoReload.ErrorAtSuccess" enum="NetErrorCodes">
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Original error code that started an auto-reload which then eventually
+    succeeded.
+  </summary>
+</histogram>
+
+<histogram name="Net.BidirectionalStream.ReceivedBytes" units="bytes">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>Number of bytes received over this stream.</summary>
+</histogram>
+
+<histogram name="Net.BidirectionalStream.SentBytes" units="bytes">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>Number of bytes sent over this stream.</summary>
+</histogram>
+
+<histogram name="Net.BidirectionalStream.TimeToReadEnd" units="ms">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    How long it takes from starting the request to reading the end of the
+    response.
+  </summary>
+</histogram>
+
+<histogram name="Net.BidirectionalStream.TimeToReadStart" units="ms">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    How long it takes from starting the request to reading the start of the
+    response.
+  </summary>
+</histogram>
+
+<histogram name="Net.BidirectionalStream.TimeToSendEnd" units="ms">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    How long it takes from starting the request to when the last byte is sent.
+  </summary>
+</histogram>
+
+<histogram name="Net.BidirectionalStream.TimeToSendStart" units="ms">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    How long it takes from starting the request to when we can start sending
+    data.
+  </summary>
+</histogram>
+
+<histogram name="Net.CacheState.AllBytes">
+  <obsolete>
+    Part of a concluded experiment, 2016-08-02.
+  </obsolete>
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>Counts of response bytes by cache state.</summary>
+</histogram>
+
+<histogram name="Net.CacheState.AllRequests" enum="NetCacheState">
+  <obsolete>
+    Part of a concluded experiment, 2016-08-02.
+  </obsolete>
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    State of the cache for a request, delta-encoding eligible or otherwise.
+  </summary>
+</histogram>
+
+<histogram name="Net.CacheState.EncodeableBytes">
+  <obsolete>
+    Part of a concluded experiment, 2016-08-02.
+  </obsolete>
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Counts of response bytes by cache state for delta-encoding eligible
+    requests.
+  </summary>
+</histogram>
+
+<histogram name="Net.CacheState.EncodeableRequests" enum="NetCacheState">
+  <obsolete>
+    Part of a concluded experiment, 2016-08-02.
+  </obsolete>
+  <owner>ellyjones@chromium.org</owner>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>State of the cache for a delta-encoding eligible request.</summary>
+</histogram>
+
+<histogram name="Net.CertCommonNameFallback" enum="BooleanCommonNameMatch">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether the certificate common name was used for matching the hostname,
+    instead of the subjectAlternativeName.
+
+    Measures results for all CAs (internal and publicly-trusted).
+  </summary>
+</histogram>
+
+<histogram name="Net.CertCommonNameFallbackPrivateCA"
+    enum="BooleanCommonNameMatch">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether the certificate common name was used for matching the hostname,
+    instead of the subjectAlternativeName.
+
+    Measures results ony for internal (non-publicly-trusted) CAs.
+  </summary>
+</histogram>
+
+<histogram name="Net.Certificate.SHA1.MainFrame" enum="SHA1Status">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether or not SHA-1 was present in a resource fetched for the main frame,
+    and if so, what its maximum validity period was.
+  </summary>
+</histogram>
+
+<histogram name="Net.Certificate.SHA1.Subresource" enum="SHA1Status">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether or not SHA-1 was present in a subresource fetch, and if so, what its
+    maximum validity period was.
+  </summary>
+</histogram>
+
+<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRoot"
+    enum="Boolean">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    This histogram is recorded every time Chrome successfully verifies a
+    certificate that chains to a private root. A value of true indicates that
+    the certificate contains the TLS Feature Extension, and false indicates that
+    it doesn't.
+  </summary>
+</histogram>
+
+<histogram name="Net.Certificate.TLSFeatureExtensionWithPrivateRootHasOCSP"
+    enum="Boolean">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    This histogram is recorded every time Chrome successfully verifies a
+    certificate that chains to a private root and the certificate contains the
+    TLS Feature Extension. A value of true indicates that the connection had an
+    OCSP response stapled, and a value of false indicates that it did not.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificatePinSuccess" enum="BooleanSuccess">
+  <obsolete>
+    Renamed to Net.PublicKeyPinSuccess 28 Oct 2011.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    A validated certificate chain may be subject to additional
+    &quot;pinning&quot; requirements on a per-domain basis. This records the
+    fraction of successful matches between a certificate chain and a pin list.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificateTransparency.CanInclusionCheckSCT"
+    enum="SCTCanBeChecked">
+  <owner>eranm@chromium.org</owner>
+  <summary>
+    Whether an observed Signed Certificate Timestamp (SCT) can be checked for
+    inclusion. An SCT can be checked for inclusion if the client has a valid
+    Signed Tree Head (STH) and the STH currently known to the client was issued
+    24 hours after the timestamp in the SCT (24 hours being the typical Maximum
+    Merge Delay).
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificateTransparency.MainFrameValidSCTCount">
+  <owner>eranm@chromium.org</owner>
+  <summary>
+    Number of valid Signed Certificate Timestamps (SCTs) present for the
+    main-frame resource. Emitted every time a main-frame resource is fetched.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificateTransparency.PilotSTHAge" units="ms">
+  <owner>eranm@chromium.org</owner>
+  <summary>
+    Age of Pilot's Signed Tree Head, as observed by the client, in minutes.
+    Measuring the age of a particular log's Signed Tree Head will allow more
+    informed update frequency of the Component Updater component that provides
+    them. Emitted once for every STH update received by the component updater.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificateTransparency.SCTOrigin" enum="SCTOrigin">
+  <owner>eranm@chromium.org</owner>
+  <summary>
+    The origin breakdown of Signed Certificate Timestamps (SCTs). Emitted once
+    for every SCT when first validated, which means 0 or more times during every
+    SSL connection establishment.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificateTransparency.SCTsPerConnection">
+  <owner>eranm@chromium.org</owner>
+  <summary>
+    The number of Signed Certificate Timestamps (SCTs) that were available for
+    each SSL connection, including SCTs embedded in the certificate. This metric
+    measures how many SSL connections had SCTs available. Emitted during every
+    SSL connection establishment.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertificateTransparency.SCTStatus" enum="SCTVerifyStatus">
+  <owner>eranm@chromium.org</owner>
+  <summary>
+    Breakdown of Signed Certificate Timestamps (SCTs) validation status. Emitted
+    once for every SCT when first validated, which means 0 or more times during
+    every SSL connection establishment.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertVerifier_First_Job_Latency" units="ms">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The actual amount of time spent verifying a certificate using the underlying
+    cryptographic APIs. Because parallel verifications for the same certificate
+    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
+    skewed, due to later verifications taking less overall time. This records
+    the overall time spent verifying the first job to capture initialization
+    costs.
+  </summary>
+</histogram>
+
+<histogram name="Net.CertVerifier_Job_Latency" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    The actual amount of time spent verifying a certificate using the underlying
+    cryptographic APIs. Because parallel verifications for the same certificate
+    may be coalesced, histograms such as Net.SSLCertVerificationTime may be
+    skewed, due to later verifications taking less overall time. This records
+    the overall time spent verifying a single request, regardless of how many
+    parallel requests are being served by the verification.
+  </summary>
+</histogram>
+
+<histogram name="Net.CoalescePotential" enum="CoalescePotentialPackets">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times we sent N packets, but could have sent N-1 packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.ComodoDNSExperimentFailureTime" units="ms">
+  <obsolete>
+    This experiment has concluded.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time taken before we failed to  resolve the Comodo test DNS
+    record. This is an experiment, run in conjuction with Comodo, to test the
+    viability of a DNS based certificate revocation mechanism.
+  </summary>
+</histogram>
+
+<histogram name="Net.ComodoDNSExperimentSuccessTime" units="ms">
+  <obsolete>
+    This experiment has concluded.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time taken to successfully resolve the Comodo test DNS record.
+    This is an experiment, run in conjuction with Comodo, to test the viability
+    of a DNS based certificate revocation mechanism.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.NoProxy.BytesAfterCompression" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The uncompressed number of bytes received per request that was compressed.
+    Only includes requests which did not go through an explicit proxy and did
+    not go over SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.NoProxy.BytesBeforeCompression" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The compressed number of bytes received per request that was compressed.
+    Only includes requests which did not go through an explicit proxy and did
+    not go over SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.NoProxy.ShouldHaveBeenCompressed" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The uncompressed number of bytes received per request that was not
+    compressed but appears to have been compressible.  Only includes requests
+    which did not go through an explicit proxy and did not go over SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.Proxy.BytesAfterCompression" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The uncompressed number of bytes received per request that was compressed.
+    Only includes requests sent through a proxy without SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.Proxy.BytesBeforeCompression" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The compressed number of bytes received per request that was compressed.
+    Only includes requests sent through a proxy without SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.Proxy.ShouldHaveBeenCompressed" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The uncompressed number of bytes received per request that was not
+    compressed but appears to have been compressible.  Only includes requests
+    sent through a proxy without SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.SSL.BytesAfterCompression" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The uncompressed number of bytes received per request that was compressed.
+    Only includes requests sent over SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.SSL.BytesBeforeCompression" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The compressed number of bytes received per request that was compressed.
+    Only includes requests sent over SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.Compress.SSL.ShouldHaveBeenCompressed" units="bytes">
+  <obsolete>
+    Removed as of 02/2015
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The uncompressed number of bytes received per request that was not
+    compressed but appears to have been compressible.  Only includes requests
+    sent over SSL.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionTypeCount" enum="ConnectionType">
+  <obsolete>
+    The count was inaccurate (it counted transactions rather than connections)
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Each bucket is the number of connections of a particular type that the user
+    has had during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionTypeCount2" enum="ConnectionType">
+  <obsolete>
+    Renamed to match HadConnectionType.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Each bucket is the number of successful connections of a particular type
+    that the user has had during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionTypeCount3" enum="ConnectionType">
+  <obsolete>
+    Removed May 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    Each bucket is the number of successful connections of a particular type
+    that the user has had during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionTypeFailCount2" enum="ConnectionType">
+  <obsolete>
+    No longer collected.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Each bucket is the number of failed connections of a particular type that
+    the user has had during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback"
+    enum="BooleanDeprecatedCiphers">
+  <obsolete>
+    Replaced with Net.ConnectionUsedSSLDeprecatedCipherFallback2 in Chrome 44.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    True if an HTTPS connection was made using the deprecated cipher suite
+    fallback.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionUsedSSLDeprecatedCipherFallback2"
+    enum="BooleanDeprecatedCiphers">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each successful HTTPS request, whether it used the deprecated cipher
+    suite fallback.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionUsedSSLv3Fallback">
+  <obsolete>
+    Replaced by Net.ConnectionUsedSSLVersionFallback in Chrome 21.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    True if the HTTP request was to a server which requires SSLv3 fallback
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionUsedSSLVersionFallback"
+    enum="FallbackSSLVersion">
+  <obsolete>
+    Replaced with Net.ConnectionUsedSSLVersionFallback2 in Chrome 44.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Nonzero if the HTTP request was to a server which requires SSL version
+    fallback.  The value indicates the SSL version the request fell back on.
+  </summary>
+</histogram>
+
+<histogram name="Net.ConnectionUsedSSLVersionFallback2"
+    enum="FallbackSSLVersion">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each successful HTTPS request, whether it used the SSL version fallback.
+    The value indicates the SSL version the request fell back on
+  </summary>
+</histogram>
+
+<histogram name="Net.ContentDecodingFailed.FilterType" enum="NetFilterType">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    For each CONTENT_DECODING_FAILED, record the filter that failed.
+  </summary>
+</histogram>
+
+<histogram name="Net.ContentDecodingFailed2.FilterType" enum="NetFilterType2">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    For each CONTENT_DECODING_FAILED, record the filter that failed.
+  </summary>
+</histogram>
+
+<histogram name="net.CookieBackingStoreUpdateResults"
+    enum="BackingStoreResults">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether or not updates to the backing store succeeded or failed, recorded
+    every update.
+  </summary>
+</histogram>
+
+<histogram name="net.CookieBetweenAccessIntervalMinutes" units="minutes">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Intervals between access time updates for each cookie.</summary>
+</histogram>
+
+<histogram name="net.CookieCount">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of cookies in the store (recorded every 10 minutes of active browsing
+    time)
+  </summary>
+</histogram>
+
+<histogram name="net.CookieDeletionCause" enum="CookieDeletionCause">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For each cookie removed from the store, the reason it was removed.
+  </summary>
+</histogram>
+
+<histogram name="net.CookieDomainCount">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For each domain, number of cookies in that domain (recorded every 10 minutes
+    of active browsing time).
+  </summary>
+</histogram>
+
+<histogram name="net.CookieDomainPerEtldp1Count">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For every top level domain, number of subdomains in that top level domain
+    (recorded every 10 minutes of active browsing time).
+  </summary>
+</histogram>
+
+<histogram name="net.CookieEtldp1Count">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For every top level domain, number of cookies in that domain (recorded every
+    10 minutes of active browsing time).
+  </summary>
+</histogram>
+
+<histogram name="net.CookieEvictedLastAccessMinutes" units="minutes">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For each evicted (not expired) cookie, the amount of time since it was last
+    used
+  </summary>
+</histogram>
+
+<histogram name="net.CookieExpirationDurationMinutes" units="minutes">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Number of minutes until cookie expires when set.</summary>
+</histogram>
+
+<histogram name="net.CookieTimeGet">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time (ms) to get cookies for each URL request.
+  </summary>
+</histogram>
+
+<histogram name="net.CookieTimeLoad">
+  <obsolete>
+    Initial typo; only here to get results from builds before r59117.  See
+    &quot;Cookie.&quot; group.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time (ms) to load the persistent cookie store at browser
+    start.
+  </summary>
+</histogram>
+
+<histogram name="Net.CountOfAlternateProtocolServers" units="servers">
+  <owner>bnc@chromium.org</owner>
+  <owner>rch@chromium.org</owner>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The total number of servers (HostPortPairs) to which alternative protocol
+    was used. This counts the number of servers persisted to prefs file.
+  </summary>
+</histogram>
+
+<histogram name="Net.CountOfAlternateProtocolServers.Memory" units="servers">
+  <owner>bnc@chromium.org</owner>
+  <owner>rch@chromium.org</owner>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The total number of servers (HostPortPairs in memory) to which alternative
+    protocol was used.
+  </summary>
+</histogram>
+
+<histogram name="Net.CountOfPipelineCapableServers" units="servers">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total number of servers (HostPortPairs) that support HTTP pipelining.
+    This counts the number of servers persisted to prefs file.
+  </summary>
+</histogram>
+
+<histogram name="Net.CountOfSpdyServers">
+  <owner>bnc@chromium.org</owner>
+  <owner>rch@chromium.org</owner>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The total number of SPDY server names persisted to prefs file.
+  </summary>
+</histogram>
+
+<histogram name="Net.CountOfSpdySettings">
+  <obsolete>
+    Removed on 2016-10-11.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <owner>rch@chromium.org</owner>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The total number of SPDY Settings properties persisted to prefs file.
+  </summary>
+</histogram>
+
+<histogram name="Net.CRLRequestFailedTimeMs" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When validating an HTTPS certificate we may have to block to fetch one or
+    more revocation lists. This measures the amount of time that failures to get
+    CRL information take.
+  </summary>
+</histogram>
+
+<histogram name="Net.CRLRequestSuccess" enum="BooleanSuccess">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When validating an HTTPS certificate we may have to block to fetch one or
+    more revocation lists. This records the fraction of successful requests.
+  </summary>
+</histogram>
+
+<histogram name="Net.CRLRequestTimeMs" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When validating an HTTPS certificate we may have to block to fetch one or
+    more revocation lists. This measures the amount of time that each fetch
+    takes.
+  </summary>
+</histogram>
+
+<histogram name="Net.Cronet.CertVerifierCache.DeserializeTime" units="ms">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Measures time spent to deserialize and populate the
+    net::CachingCertVerifier's cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.Cronet.CertVerifierCache.SerializeTime" units="ms">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Measures time spent to serialize the net::CachingCertVerifier's cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength" units="KB">
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all HTTP/HTTPS response bodies in the
+    previous calendar day. The metric is reported when the first response in the
+    current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength_DataReductionProxyEnabled" units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all HTTP/HTTPS response bodies in the
+    previous calendar day while the data reduction proxy setting was enabled.
+    The metric is reported when the first response in the current day is
+    received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Https"
+    units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all HTTPS response bodies in the previous
+    calendar day while the data reduction proxy setting was enabled. The metric
+    is reported when the first response in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_LongBypass"
+    units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all long-bypassed HTTP response bodies in
+    the  previous calendar day while the data reduction proxy setting was
+    enabled. The metric is reported when the first response in the current day
+    is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_ShortBypass"
+    units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all short-bypassed HTTP response bodies in
+    the previous calendar day while the data reduction proxy setting was
+    enabled. The metric is reported when the first response in the current day
+    is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength_DataReductionProxyEnabled_Unknown"
+    units="KB">
+  <obsolete>
+    Deprecated. Moved to
+    Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass in M46.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all HTTP response bodies for requests that
+    were not served by the enabled data reduction proxy for unknown reasons in
+    the previous calendar day while the data reduction proxy setting was
+    enabled. The metric is reported when the first response in the current day
+    is received.
+  </summary>
+</histogram>
+
+<histogram
+    name="Net.DailyContentLength_DataReductionProxyEnabled_UnknownBypass"
+    units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all HTTP response bodies for requests that
+    were not served by the enabled data reduction proxy for unknown reasons in
+    the previous calendar day while the data reduction proxy setting was
+    enabled. The metric is reported when the first response in the current day
+    is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentLength_ViaDataReductionProxy" units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total content size in KB of all HTTP/HTTPS response bodies in the
+    previous calendar day via the data reduction proxy. The metric is reported
+    when the first response in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled" units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of total HTTP/HTTPS response body size while the data
+    reduction proxy is enabled to total HTTP/HTTPS response body size in the
+    previous calendar day. The metric is reported when the first response in the
+    current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Https"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of total HTTPS response body size while the data reduction
+    proxy is enabled to total HTTP/HTTPS response body size in the previous
+    calendar day. The metric is reported when the first response in the current
+    day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_LongBypass"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of total long-bypassed response body size while the data
+    reduction proxy is enabled to total HTTP/HTTPS response body size in the
+    previous calendar day. The metric is reported when the first response in the
+    current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_ShortBypass"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of total short-bypassed response body size while the data
+    reduction proxy is enabled to total HTTP/HTTPS response body size in the
+    previous calendar day. The metric is reported when the first response in the
+    current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentPercent_DataReductionProxyEnabled_Unknown"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of total body size of responses that were not served by the
+    data reduction proxy for unknown reason while the data reduction proxy is
+    enabled to total HTTP/HTTPS response body size in the previous calendar day.
+    The metric is reported when the first response in the current day is
+    received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentPercent_ViaDataReductionProxy" units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of total HTTP/HTTPS response body size via the data reduction
+    proxy to total HTTP/HTTPS response body size in the previous calendar day.
+    The metric is reported when the first response in the current day is
+    received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentSavingPercent" units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day. A negative
+    saving will be shown as zero. The metric is reported when the first response
+    in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day while the data
+    reduction proxy was enabled. A negative saving will be shown as zero. This
+    only counts responses while the data reduction proxy is enabled. The metric
+    is reported when the first response in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentSavingPercent_DataReductionProxyEnabled_Video"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day while the data
+    reduction proxy was enabled. A negative saving will be shown as zero. This
+    only counts responses while the data reduction proxy is enabled. The metric
+    is reported when the first response in the current day is received. If no
+    video bytes were received while the data reduction proxy was enabled, the
+    metric will not be reported.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy" units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day via the data
+    reduction proxy. A negative saving will be shown as zero. This only counts
+    responses via the data reduction proxy. The metric is reported when the
+    first response in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyContentSavingPercent_ViaDataReductionProxy_Video"
+    units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day via the data
+    reduction proxy. A negative saving will be shown as zero. This only counts
+    responses via the data reduction proxy. The metric is reported when the
+    first response in the current day is received. If no video bytes were
+    received via the data reduction proxy, the metric will not be reported.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyHttpContentLengthViaDataReductionProxy" units="KB">
+  <obsolete>
+    Deprecated- see Net.DailyContentLength_ViaDataReductionProxy.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Total size in KB of all response bodies in the previous calendar day that
+    were received through the data reduction proxy.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyHttpContentLengthWithDataReductionProxyEnabled"
+    units="KB">
+  <obsolete>
+    Deprecated- see Net.DailyContentLength_DataReductionProxyEnabled
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Total size in KB of all response bodies in the previous calendar day that
+    were received when the data reduction proxy was enabled.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyHttpContentSavings" units="%">
+  <obsolete>
+    Deprecated- see Net.DailyContentSavingPercent.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day. A negative
+    saving will be shown as zero.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyHttpContentSavings_DataReductionProxy" units="%">
+  <obsolete>
+    Deprecated- see Net.DailyContentSavingPercent_DataReductionProxyEnabled.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of data saving in the previous calendar day when the data
+    reduction proxy was enabled for at least some responses during the day. A
+    negative saving will be shown as zero.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyHttpOriginalContentLength" units="KB">
+  <obsolete>
+    Deprecated- see Net.DailyOriginalContentLength.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Total size in KB specified in the X-Original-Content-Length headers of all
+    responses in the previous calendar day. If the header is not present in a
+    response, the size of the response body is used.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyHttpReceivedContentLength" units="KB">
+  <obsolete>
+    Deprecated- see Net.DailyContentLength.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Total size in KB of all response bodies in the previous calendar day.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyOriginalContentLength" units="KB">
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total size in KB specified in the X-Original-Content-Length headers of
+    all HTTP/HTTPS response bodies in the previous calendar day. If the header
+    is not present in a response, the size of the response body is used. The
+    metric is reported when the first response in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"
+    units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total size in KB specified in the X-Original-Content-Length headers of
+    all HTTP/HTTPS response bodies in the previous calendar day while the data
+    reduction proxy is enabled. If the header is not present in a response, the
+    size of the response body is used. The metric is reported when the first
+    response in the current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyOriginalContentLength_ViaDataReductionProxy"
+    units="KB">
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The total size in KB specified in the X-Original-Content-Length headers of
+    all HTTP/HTTPS response bodies in the previous calendar day via the data
+    reduction proxy. If the header is not present in a response, the size of the
+    response body is used. The metric is reported when the first response in the
+    current day is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyReceivedContentViaDataReductionProxy" units="%">
+  <obsolete>
+    Deprecated- see Net.DailyContentPercent_ViaDataReductionProxy.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of Net.DailyHttpContentLengthViaDataReductionProxy in
+    Net.DailyHttpReceivedContentLength.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyReceivedContentWithDataReductionProxyEnabled"
+    units="%">
+  <obsolete>
+    Deprecated- see Net.DailyContentPercent_DataReductionProxyEnabled.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    The percentage of Net.DailyHttpContentLengthWithDataReductionProxyEnabled in
+    Net.DailyHttpReceivedContentLength.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyUserVisibleSavingsPercent_DataReductionProxyEnabled"
+    units="%">
+  <owner>kundaji@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The percentage of data savings in past
+    |DataReductionProxy::kNumDaysInHistorySummary| days. This number is
+    displayed to users as their data savings.
+  </summary>
+</histogram>
+
+<histogram name="Net.DailyUserVisibleSavingsSize_DataReductionProxyEnabled"
+    units="KB">
+  <owner>kundaji@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total data saved in KB in past
+    |DataReductionProxy::kNumDaysInHistorySummary| days. This number is used to
+    compute the data savings displayed to the user.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadCancelTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures time from initiating a fetch of a PAC file from DHCP WPAD to
+    cancellation of the fetch. For a given fetch, only one of the cancellation
+    or completion histograms will be added to.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadCompletionTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures time from initiating a fetch of a PAC file from DHCP WPAD to
+    completion of the fetch. For a given fetch, only one of the cancellation or
+    completion histograms will be added to.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadFetchError" enum="NetErrorCodes">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Tracks the net error codes received when the DHCP WPAD fetch fails to
+    retrieve a PAC file (including PAC_NOT_IN_DHCP, which is not really an error
+    but an indication that a PAC URL was not configured in DHCP).
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadGetAdaptersAddressesError"
+    enum="ErrorCodesGetAdaptersAddresses">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Tracks the frequency of each of the different known error codes of calling
+    the GetAdaptersAddresses Win32 API.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadGetAdaptersAddressesTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Measures the time taken to call the GetAdaptersAddresses Win32 API, to
+    validate our understanding that it should complete quickly enough to call
+    synchronously from the network thread.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadNumAdaptersAtWaitTimer">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Total number of adapters enabled for DHCP as seen when the wait timer in the
+    DHCP WPAD code hits. This timer fires after a timeout from when we get some
+    information from the first adapter to finish.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadNumPendingAdaptersAtWaitTimer">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of adapters enabled for DHCP that we have not completed retrieving
+    information for, as seen when the wait timer in the DHCP WPAD code hits.
+    This timer fires after a timeout from when we get some information from the
+    first adapter to finish.
+  </summary>
+</histogram>
+
+<histogram name="Net.DhcpWpadUnhandledDhcpError">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Counts the number of errors from the DhcpRequestParams API that we do not
+    have specific handling for, so that we can see if there is an abnormally
+    high rate.
+  </summary>
+</histogram>
+
+<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency">
+  <obsolete>
+    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+</histogram>
+
+<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency">
+  <obsolete>
+    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+</histogram>
+
+<histogram name="Net.DNS_Resolution_And_TCP_Connection_Latency2" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    The time measured before starting DNS lookup until after the connection is
+    complete.
+  </summary>
+</histogram>
+
+<histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency2">
+  <obsolete>
+    Deprecated- see Net.DNS_Resolution_And_TCP_Connection_Latency2
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+</histogram>
+
+<histogram name="Net.DoubleGetExperiment_InitialResponseMethod"
+    enum="DoubleGetExperimentMethods">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of HTTP request responses with MS Office Docs MIME types. The
+    responses are classified based on their method type and cacheability (POST,
+    cacheable GET and non-cacheable GET). The histogram is used in Double GET
+    Experiment, where successful non-cacheable GET requests are intercepted
+    after initial response and repeated in order to determine how much reissuing
+    non-cacheable GET requests influences their error rate. The histogram tracks
+    only initial requests (not the repeated ones).
+  </summary>
+</histogram>
+
+<histogram name="Net.DoubleGetExperiment_ResponseCode">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The response codes encountered for GET request repeated in Double GET
+    Experiment. In the experiment successful non-cacheable GET requests are
+    intercepted after initial response and repeated. The goal of the experiment
+    is to measure how much reissuing non-cacheable GET requests influences their
+    error rate.
+  </summary>
+</histogram>
+
+<histogram name="Net.DownloadBandwidth">
+  <obsolete>
+    Deprecated as of 03/2015.  No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Kbps on download streams exceeding 25KB.  Measures from the beginning of the
+    first byte received until the end of flowing data.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrAborted.CountPerUpload" units="aborts">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The count of the ABORTED bucket in Net.ErrorCodesForMainFrame3 at the time
+    histograms are being uploaded.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrAborted.ProportionPerUpload" units="%">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The bucket proportion of the ABORTED bucket in Net.ErrorCodesForMainFrame3
+    at the time histograms are being uploaded.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrAborted.ReceivedBytes" units="bytes">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The TotalReceivedBytes() at the time the request finishes with ERR_ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrAborted.SentBytes" units="bytes">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The TotalSentBytes() at the time the request finishes with ERR_ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 2012/5/16, replaced by
+    Net.ErrorCodesForHTTPSGoogleMainFrame2, which measures the same data but
+    includes ERR_ABORT and OK.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Errors resulting from loading pages from https://www.google.com. Note that
+    this only counts the errors in &quot;main frames&quot;, so it is a measure
+    of the error pages that users actually see (it does not for example count
+    the error codes for subresoures on a page). This is a temporary histogram,
+    added in order to debug query loss from the SSL Search launch.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForHTTPSGoogleMainFrame2" enum="NetErrorCodes">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Positive net error codes that requests for pages end with, including net::OK
+    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; for
+    https://www.google.com. Subresources or main frame navigations to other
+    origins are not included.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForImages" enum="NetErrorCodes">
+  <owner>skonig@chromium.org</owner>
+  <owner>hbengali@chromium.org</owner>
+  <summary>
+    Net error codes that requests for images end with, including net::OK and
+    net:ERR_ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForMainFrame" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 2011/5/24, replaced by Net.ErrorCodesForMainFrame2, which
+    measures the same data but uses a different bucket structure (adds guard
+    buckets).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive net error code that a page failed with. Note that this only counts
+    the errors in &quot;main frames&quot;, so it is a measure of the error pages
+    that users actually see (it does not for example count the error codes for
+    subresoures on a page).
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForMainFrame2" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForMainFrame3, which
+    measures the same data but includes ERR_ABORTED and OK.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive net error code that a page failed with. Note that this only counts
+    the errors in &quot;main frames&quot;, so it is a measure of the error pages
+    that users actually see (it does not for example count the error codes for
+    subresoures on a page).
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForMainFrame3" enum="NetErrorCodes">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Positive net error codes that requests for pages end with, including net::OK
+    and net::ERR_ABORTED.  This only counts loads in &quot;main frames&quot; (it
+    does not for example count the error codes for subresoures on a page).
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForSubresources" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 2012/5/16, replaced by Net.ErrorCodesForSubresources2,
+    which measures the same data but includes ERR_ABORT and OK.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive net error code that a page failed with. Note that this only counts
+    the errors in &quot;subresources&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorCodesForSubresources2" enum="NetErrorCodes">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Net error codes that requests for &quot;subresources&quot; end with,
+    including net::OK and net::ERR_ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorPageButtonPressedWhileInUnexpectedState"
+    enum="ErrorPageButton">
+  <obsolete>
+    Deprecated as of 2015/8/21
+  </obsolete>
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Temporary histogram to investigate http://crbug.com/500556.  Records which
+    button on the network error page was pushed when either the URL Blink
+    reports for the page is not the internal error page URL or the
+    NetErrorHelper core has no error information for the current page (or both).
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorPageButtonPressUnexpectedStates"
+    enum="ErrorPageUnexpectedStates">
+  <obsolete>
+    Deprecated as of 2015/8/21
+  </obsolete>
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Temporary histogram to investigate http://crbug.com/500556.  Records
+    whether, when the handler for a button press on the network error page runs,
+    which of the following are or are not true:  The URL Blink reports for the
+    page is not the internal error page URL or the NetErrorHelper core has no
+    error information for the current page.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorPageCounts" enum="NetErrorPageEvents">
+  <owner>rdsmith@chromium.org</owner>
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Counts of various events that can occur on the network error page. See the
+    histogram for details.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorPageCounts.NavigationCorrectionLinksShown"
+    enum="NetErrorNavigationCorrectionTypes">
+  <owner>edwardjung@chromium.org</owner>
+  <summary>
+    Counts of the type of navigation correction suggestions shown on the network
+    error page. Multiple suggestions can be shown at the same time.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorPageCounts.NavigationCorrectionLinksUsed"
+    enum="NetErrorNavigationCorrectionTypes">
+  <owner>edwardjung@chromium.org</owner>
+  <summary>
+    Usage of navigation correction suggestions shown on the network error page.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorResponseHasContentMainFrame" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 10/2016.
+  </obsolete>
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    The number of main frame 4xx/5xx responses that have content, to determine
+    if it's worth hooking up an error page for those that don't.  Intended to be
+    removed from the binary soon.
+  </summary>
+</histogram>
+
+<histogram name="Net.ErrorResponseHasContentNonMainFrame" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 10/2016.
+  </obsolete>
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    The number of non-main frame 4xx/5xx responses that have content, to
+    determine if it's worth hooking up an error page for those that don't.
+    Intended to be removed from the binary soon.
+  </summary>
+</histogram>
+
+<histogram name="Net.ExpectCTHeaderResult" enum="ExpectCTHeaderResult">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Sites can send an Expect-CT header to Chrome to indicate that they want a
+    report to be sent when the connection does not comply with Certificate
+    Transparency policy. This histogram is recorded whenever Chrome receives an
+    Expect-CT header, and it records the result of processing the header, such
+    as whether it was ignored due to a bad value.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_Flush">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file Flush failed with.  The code is OS dependent,
+    so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_GetSize">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file GetSize failed with.  The code is OS
+    dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_Open">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file Open failed with.  The code is OS dependent,
+    so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_Read">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file Read failed with.  The code is OS dependent,
+    so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_Seek">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file Seek failed with.  The code is OS dependent,
+    so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_SetEof">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file SetEof failed with.  The code is OS dependent,
+    so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileError_Write">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code that a file Write failed with.  The code is OS dependent,
+    so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_Flush">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file Flush failed with.  Any value other than
+    0 indicates that we have received errors in a range outside of the one in
+    which we recorded the specific errors in Net.FileError_Flush.  The code is
+    OS dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_GetSize">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file GetSize failed with.  Any value other
+    than 0 indicates that we have received errors in a range outside of the one
+    in which we recorded the specific errors in Net.FileError_GetSize.  The code
+    is OS dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_Open">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file Open failed with.  Any value other than
+    0 indicates that we have received errors in a range outside of the one in
+    which we recorded the specific errors in Net.FileError_Open.  The code is OS
+    dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_Read">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file Read failed with.  Any value other than
+    0 indicates that we have received errors in a range outside of the one in
+    which we recorded the specific errors in Net.FileError_Read.  The code is OS
+    dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_Seek">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file Seek failed with.  Any value other than
+    0 indicates that we have received errors in a range outside of the one in
+    which we recorded the specific errors in Net.FileError_Seek.  The code is OS
+    dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_SetEof">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file SetEof failed with.  Any value other
+    than 0 indicates that we have received errors in a range outside of the one
+    in which we recorded the specific errors in Net.FileError_SetEof.  The code
+    is OS dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.FileErrorRange_Write">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    System error code range that a file Write failed with.  Any value other than
+    0 indicates that we have received errors in a range outside of the one in
+    which we recorded the specific errors in Net.FileError_Write.  The code is
+    OS dependent, so when looking at the histogram don't mix OSes.
+  </summary>
+</histogram>
+
+<histogram name="Net.ForceAlternativeService" enum="BooleanForced">
+  <obsolete>
+    Data collection ended, corresponding feature removed.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    Track usage of alternative services forced by the force-alt-protocols
+    command line flag.  Triggered each time alternative services are queried for
+    a given origin and the command line flag would make a difference (that is,
+    there is no advertised alternative service for that origin).
+  </summary>
+</histogram>
+
+<histogram name="Net.FoundSystemTrustRootsAndroid" enum="Boolean">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether or not system installed trust anchors could be distinguished from
+    user installed trust anchors. Recorded on first certificate verification on
+    Android 4.2 and later.
+  </summary>
+</histogram>
+
+<histogram name="Net.FtpDataConnectionErrorCount" enum="FtpDataConnectionError">
+  <owner>phajdan.jr@chromium.org</owner>
+  <summary>The number of times each FTP Error was observed.</summary>
+</histogram>
+
+<histogram name="Net.FtpDataConnectionErrorHappened"
+    enum="FtpDataConnectionError">
+  <owner>phajdan.jr@chromium.org</owner>
+  <summary>
+    The number of Chrome sessions which encountered the indicates FTP Error.
+    This prevents allowing a user that retried a connection many times (getting
+    an error each time) from biasing the tallies.
+  </summary>
+</histogram>
+
+<histogram name="Net.FtpServerTypeCount" enum="FtpServerType">
+  <obsolete>
+    Replaced by Net.FtpServerTypeCount2 on 2012-11-03.
+  </obsolete>
+  <owner>phajdan.jr@chromium.org</owner>
+  <summary>
+    Each bucket is the number of times the FTP server type was encountered.
+  </summary>
+</histogram>
+
+<histogram name="Net.FtpServerTypeCount2" enum="FtpServerType2">
+  <owner>phajdan.jr@chromium.org</owner>
+  <summary>
+    Each bucket is the number of times the FTP server type was encountered.
+  </summary>
+</histogram>
+
+<histogram name="Net.GetProxyForUrl_FAIL" units="ms">
+  <obsolete>
+    Removed at some time before 2014/09/15.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time spent waiting for WinHttpGetProxyForUrl to return with error.
+  </summary>
+</histogram>
+
+<histogram name="Net.GetProxyForUrl_OK" units="ms">
+  <obsolete>
+    Removed at some time before 2014/09/15.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time spent waiting for WinHttpGetProxyForUrl to return with success.
+  </summary>
+</histogram>
+
+<histogram name="Net.GoogleConnectionInappropriateFallback"
+    enum="BooleanInappropriateFallback">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    Records a sample for each HTTPS request to a Google server that either
+    succeeded or received an inappropriate_fallback alert. This is used to
+    estimate how frequently the fallback is used to recover from a spurious
+    network failure.
+  </summary>
+</histogram>
+
+<histogram name="Net.GoogleConnectionUsedSSLVersionFallback"
+    enum="FallbackSSLVersion">
+  <obsolete>
+    Replaced with Net.GoogleConnectionUsedSSLVersionFallback2 in Chrome 44.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Nonzero if the HTTP request was to a Google server which required SSL
+    version fallback. The value indicates the SSL version the request fell back
+    on. Since Google servers support TLS 1.2, any fallback is an indication of
+    network middleware problems.
+  </summary>
+</histogram>
+
+<histogram name="Net.GoogleConnectionUsedSSLVersionFallback2"
+    enum="FallbackSSLVersion">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each successful HTTPS request to a Google server, whether it used the
+    SSL version fallback. The value indicates the SSL version the request fell
+    back on. Since Google servers support TLS 1.2 and FALLBACK_SCSV, any
+    fallback is an indication of a broken local SSL MITM proxy.
+  </summary>
+</histogram>
+
+<histogram name="Net.GzipEncodingFixupResult" enum="GzipEncodingFixupResult">
+  <obsolete>
+    Removed around 2015/03/18. The code which implemented Gzip encoding fixup
+    was removed.
+  </obsolete>
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Resources are sometimes transferred with an incorrect encoding type of gzip.
+    net::Filter::FixupEncodingTypes() attempts to correct for these situations
+    by applying a set of heuristics. This histogram counts the frequency of
+    usage of these heuristics in the wild.
+  </summary>
+</histogram>
+
+<histogram name="Net.HadConnectionType" enum="ConnectionType">
+  <obsolete>
+    The count was inaccurate (it counted transactions rather than connections).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Each bucket is a boolean (0 or 1) indicating whether the user has had a
+    connection of that type during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.HadConnectionType2" enum="ConnectionType">
+  <obsolete>
+    This statistic measures successful and failed connections, the new one only
+    measures successful ones.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Each bucket is a boolean (0 or 1) indicating whether the user has had a
+    connection of that type during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.HadConnectionType3" enum="ConnectionType">
+  <obsolete>
+    Removed May 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    Each bucket is a boolean (0 or 1) indicating whether the user has had a
+    successful connection of that type during the session.
+  </summary>
+</histogram>
+
+<histogram name="Net.HadFtpServerType" enum="FtpServerType">
+  <obsolete>
+    Replaced by Net.HadFtpServerType2 on 2012-11-13.
+  </obsolete>
+  <owner>phajdan.jr@chromium.org</owner>
+  <summary>
+    Each bucket is the number of sessions that encountered a given FTP server
+    type. Each session reports a given server type at most once.
+  </summary>
+</histogram>
+
+<histogram name="Net.HadFtpServerType2" enum="FtpServerType2">
+  <owner>phajdan.jr@chromium.org</owner>
+  <summary>
+    Each bucket is the number of sessions that encountered a given FTP server
+    type. Each session reports a given server type at most once.
+  </summary>
+</histogram>
+
+<histogram name="Net.HasBrokenNEON" enum="BooleanBroken">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    Records, on startup, for ARM devices running Android, whether the CPU is
+    known to have a broken NEON unit. See https://crbug.com/341598.
+  </summary>
+</histogram>
+
+<histogram name="Net.Http2SSLCipherSuite" enum="SSLCipherSuite">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The SSL/TLS cipher suite that was negotiated, recorded for each successful
+    HTTP/2 connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCacheAddEvicted" enum="BooleanDidEvict">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether adding an entry to the HTTP auth cache evicted another entry.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCacheAddEvictedCreation">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When an HTTP auth cache entry is evicted, the time since it was created.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCacheAddEvictedLastUse">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When an HTTP auth cache entry is evicted, the time since it was last used.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCacheAddPathEvicted" enum="BooleanDidEvict">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Whether adding a path to an entry in the HTTP auth cache evicted another
+    path.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCacheLookupByPathPosition">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When looking up an HTTP auth cache entry by path, the position (1-indexed)
+    of the entry on a hit, or 0 on a miss.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCacheLookupPosition">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    When looking up an HTTP auth cache entry by realm, the position (1-indexed)
+    of the entry on a hit, or 0 on a miss.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthCount" enum="HttpAuthCount">
+  <owner>asanka@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Per-authentication-scheme counts of authentication attempts and rejections.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthPromptType" enum="HttpAuthPromptType">
+  <owner>meacer@chromium.org</owner>
+  <summary>Type of the HTTP auth prompt displayed.</summary>
+</histogram>
+
+<histogram name="Net.HttpAuthResource" enum="HttpAuthResource">
+  <obsolete>
+    Removed in https://crrev.com/209100
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Count of authentication requests for top level pages vs. sub-resources, such
+    as images or iframes.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpAuthTarget" enum="HttpAuthTarget">
+  <owner>asanka@chromium.org</owner>
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    Per-authentication-scheme counts of authentication targets, such as secure
+    servers or proxies.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpConnectionLatency" units="ms">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time between the HttpNetworkTransaction requesting a connection and the time
+    it connected.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentFreshnessLifetime" units="seconds">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Length of time that a received resource will be cacheable.</summary>
+</histogram>
+
+<histogram name="Net.HttpContentLength" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size of the response body. This is the actual number of bytes received,
+    which usually agrees with but is not necessarily the same as the size
+    specified by the Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentLengthCacheable" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size of the response body if it is cacheable. This is the actual number of
+    bytes received, which usually agrees with but is not necessarily the same as
+    the size specified by the Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentLengthCacheable24Hours" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size of the response body if it is cacheable for at least 24 hours. This is
+    the actual number of bytes received, which usually agrees with but is not
+    necessarily the same as the size specified by the Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentLengthCacheable4Hours" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size of the response body if it is cacheable for at least 4 hours. This is
+    the actual number of bytes received, which usually agrees with but is not
+    necessarily the same as the size specified by the Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentLengthDifference" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The difference between the size specified in the X-Original-Content-Length
+    header and the size of the response body. This is zero if the
+    X-Original-Content-Length header is not present in the response.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentLengthDifferenceWithValidOCL" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The difference between the size specified in the X-Original-Content-Length
+    header and the size of the response body. Only includes resources that have
+    the X-Original-Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpContentLengthWithValidOCL" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size of the response body. Only includes resources that have the
+    X-Original-Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpHeaderParserEvent" enum="HttpHeaderParserEvent">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Records the frequency with which a number of hacky HTTP header parsing rules
+    are invoked.  This histogram should be removed after we have enough data to
+    know if we can remove the hacks.
+  </summary>
+</histogram>
+
+<histogram name="net.HttpIdentSrcURL" units="requests">
+  <owner>tsepez@chromium.org</owner>
+  <summary>
+    Count of requests which contained a basic auth username and password
+    embedded in the URL itself.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpJob.TotalTime" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time it takes to complete an HttpJob, from starting the transaction until we
+    are done reading.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpJob.TotalTimeCached" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time it takes to complete an HttpJob, from starting the transaction until we
+    are done reading, for jobs served from the cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpJob.TotalTimeCancel" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time it takes to complete an HttpJob, from starting the transaction until
+    the job is killed. Note that we didn't detect the end of the data for this
+    job.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpJob.TotalTimeNotCached" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time it takes to complete an HttpJob, from starting the transaction until we
+    are done reading, for jobs not served from the cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpJob.TotalTimeSuccess" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time it takes to complete an HttpJob, from starting the transaction until we
+    are done reading, for jobs when we read until no more data is available.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpOriginalContentLength" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size specified in the X-Original-Content-Length header. If this header is
+    not present in the response, the size of the response body is used.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpOriginalContentLengthWithValidOCL" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Size specified in the X-Original-Content-Length header. Only includes
+    resources that have the X-Original-Content-Length header.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpProxySocketRequestTime" units="ms">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>mmenke@chromium.org</owner>
+  <summary>Time it takes to request a new (unused) HTTP proxy socket.</summary>
+</histogram>
+
+<histogram name="Net.HttpRequest.ContainsInvalidHeaderValuesInRFC7230"
+    enum="Boolean">
+  <obsolete>
+    Deprecated 06/2016 because this is not continuously tracked.
+  </obsolete>
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    Whether a request contains invalid request header values in RFC 7230. This
+    is counted once for every redirect leg. https://crbug.com/455099.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpRequestCompletionErrorCodes" enum="NetErrorCodes">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The network error code that the HTTP request completes with, including OK
+    and ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpRequestCompletionErrorCodes.MainFrame"
+    enum="NetErrorCodes">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The network error code that the HTTP main frame resource request completes
+    with, including OK and ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpResponse.ContainsInvalidHeaderValuesInRFC7230"
+    enum="Boolean">
+  <obsolete>
+    Deprecated 06/2016 because this is not continuously tracked.
+  </obsolete>
+  <owner>hiroshige@chromium.org</owner>
+  <summary>
+    Whether a response contains invalid response header values in RFC 7230. This
+    is counted once for every redirect leg. https://crbug.com/455099.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpResponseCode">
+  <owner>mmenke@chromium.org</owner>
+  <summary>The count of HTTP Response codes encountered.</summary>
+</histogram>
+
+<histogram name="Net.HttpResponseCode_Nxx_MainFrame">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    The count of HTTP Response codes encountered, in response to MAIN_FRAME
+    requests only; saving only the hundreds digit, e.g. 100-&gt;1, 300-&gt;3.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpResponseInfo.ConnectionInfo" enum="ConnectionInfo">
+  <obsolete>
+    Deprecated as of 06/2016.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    Application protocol used in HTTP response.  Recorded every time a
+    URLRequest completes.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpResponseInfo.ConnectionInfo.MainFrame"
+    enum="ConnectionInfo">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Application protocol used in HTTP responses to requests for main frames.
+    Only includes requests that went over the network.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpResponseInfo.ConnectionInfo.SubResource"
+    enum="ConnectionInfo">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Application protocol used in HTTP responses to requests for resources other
+    than main frames. Does not include internal Chrome requests.  Only includes
+    requests that went over the network.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpServerProperties.UpdatePrefs"
+    enum="HttpServerPropertiesUpdatePrefsLocation">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The location in http_server_properties_manager.cc where UpdatePrefs was
+    called.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpSocketType" enum="HttpSocketType">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The counts of the type of sockets (all HTTP sockets, regardless of any proxy
+    used) used for HTTP[s].
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpStatusLineStatus" enum="HttpStatusLineStatus">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Records how often violations of RFC 7230's header parsing rules are
+    observed.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpStreamFactoryJob.StreamReadyCallbackTime" units="ms">
+  <obsolete>
+    Deprecated 08/2016. No longer tracked.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>Time it takes for OnStreamReadyCallback to be called.</summary>
+</histogram>
+
+<histogram name="Net.HttpTimeToFirstByte" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when an HTTP request is issued to when the first byte is
+    processed.
+  </summary>
+</histogram>
+
+<histogram name="Net.HttpTimeToFirstByte.LargeUpload" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when an HTTP request is issued to when the first byte is
+    processed, for requests with an upload that is &gt; 1 MiB. Excludes chunked
+    uploads.
+  </summary>
+</histogram>
+
+<histogram name="Net.IOError_SocketReuseType" enum="HttpSocketType">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of handleable socket errors (connection abort/close/reset) per
+    socket reuse type.
+  </summary>
+</histogram>
+
+<histogram name="Net.IOError_SocketReuseType_disable_late_binding"
+    enum="HttpSocketType">
+  <obsolete>
+    Late bindings are on by default now.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of handleable socket errors (connection abort/close/reset) per
+    socket reuse type.  Socket late binding is disabled.
+  </summary>
+</histogram>
+
+<histogram name="Net.IOError_SocketReuseType_enable_late_binding"
+    enum="HttpSocketType">
+  <obsolete>
+    Late bindings are on by default now.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of handleable socket errors (connection abort/close/reset) per
+    socket reuse type.  Socket late binding is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Net.IOThreadCreationToHttpRequestStart" units="ms">
+  <obsolete>
+    Deprecated 11/2014. No longer tracked.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Time from when the IOThread is created to when the first URL request is
+    started. Only requests that are created for a profile while Chrome is
+    starting up are considered.
+  </summary>
+</histogram>
+
+<histogram name="Net.IPv6ConnectDuration" units="ms">
+  <obsolete>
+    Deprecated 1/2015. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Duration of time spent during the UDP-connect IPv6 probe.</summary>
+</histogram>
+
+<histogram name="Net.IPv6ConnectFailureMatch" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 03/2015. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether the interface-enumeration IPv6 probe method failed given that the
+    UDP-connect IPV6 probe failed.
+  </summary>
+</histogram>
+
+<histogram name="Net.IPv6ConnectSuccessMatch" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 03/2015. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether the interface-enumeration IPv6 probe method was successful given
+    that the UDP-connect IPV6 probe was successful.
+  </summary>
+</histogram>
+
+<histogram name="Net.IPv6Status" enum="IPV6ProbeResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The probe results when a test for IPv6 support is done.</summary>
+</histogram>
+
+<histogram name="Net.IPv6Status_retest" enum="IPV6ProbeResult">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The probe results when a test for IPv6 support is done, after a network
+    change event.
+  </summary>
+</histogram>
+
+<histogram name="Net.LoadPrefetch.Pattern" enum="PrefetchStatus">
+  <owner>droger@chromium.org</owner>
+  <owner>mattcary@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The completion status of prefetches that have finished loading.
+  </summary>
+  <details>
+    Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
+    before that point are not registered.
+
+    This applies to requests with net::LOAD_PREFETCH, used by various
+    prefetching features such as no-state prefetch and RESOURCE_TYPE_PREFETCH.
+
+    Note that &quot;success from cache&quot; means that the
+    UrlRequest::was_cached() was true and unused_since_prefetch was false.
+    &quot;success from network&quot; means that was_cached() was false.
+    &quot;success already prefetched&quot; means that both was_cached() and
+    unused_since_prefetch were true. Validated results are considered cached,
+    even though a conditional network request is made.
+  </details>
+</histogram>
+
+<histogram name="Net.MainFrameNoStore" enum="MainFrameStorable">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The distribution of storable vs &quot;cache-control: no-store&quot;
+    main-frame resources.
+
+    Counted after response headers have completed and before the content has
+    completed. Redirects are counted. All HTTP cache transactions are counted,
+    not just those that require the network.
+  </summary>
+</histogram>
+
+<histogram name="Net.MTPR_GetProxyForUrl_Thread_Wait_Time" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time that a (non-cancelled) proxy resolution request was stalled waiting
+    for an execution thread, for MultiThreadedProxyResolver.
+  </summary>
+</histogram>
+
+<histogram name="Net.MTPR_GetProxyForUrl_Time" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time that it took for a (non-cancelled) proxy resolution request
+    to complete, for MultiThreadedProxyResolver.
+  </summary>
+</histogram>
+
+<histogram name="Net.NetInternalsUi.Feature" enum="NetInternalsUiFeature">
+  <obsolete>
+    Removed in Chrome 44.
+  </obsolete>
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    Counts the number of browser launches where chrome://net-internals and
+    chrome://net-internals/#tests are used.
+  </summary>
+</histogram>
+
+<histogram name="Net.NetworkErrorsRecovered.MainFrame" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    How often automatically retrying to download the main frame of a page in
+    response to specific HTTP network errors succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Net.NetworkErrorsRecovered.Subresource" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    How often automatically retrying to download a subresource in response to
+    specific HTTP network errors succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Net.NetworkErrorsUnrecovered.MainFrame" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    How often automatically retrying to download the main frame of a page in
+    response to specific HTTP network errors returns another network error.
+    Histogram includes only the error code that triggered the retry.
+  </summary>
+</histogram>
+
+<histogram name="Net.NetworkErrorsUnrecovered.Subresource" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    How often automatically retrying to download a subresource in response to
+    specific HTTP network errors returns another network error.  Histogram
+    includes only the error code that triggered the retry.
+  </summary>
+</histogram>
+
+<histogram name="Net.NotifyAddrChangeFailures">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    On Windows, NetworkChangeNotifierWin calls NotifyAddrChange, which can fail
+    for unknown reasons. This records the number of times it fails in a row
+    before a successful call. If it never succeeds, or takes over 100 tries, a
+    value of 100 is recorded. See http://crbug.com/69198
+  </summary>
+</histogram>
+
+<histogram name="Net.NumDuplicateCookiesInDb">
+  <obsolete>
+    Deprecated 2015-08-17 as part of cookie histogram cleanup
+    (https://crbug.com/521135).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of duplicate cookies that were present in the cookie store during
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Net.OCSPRequestFailedTimeMs" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When validating an HTTPS certificate we may have to make one or more HTTP
+    fetches to OCSP responders in order to get revocation information. This
+    measures the amount of time that failures to get OCSP information take.
+  </summary>
+</histogram>
+
+<histogram name="Net.OCSPRequestSuccess" enum="BooleanSuccess">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When validating an HTTPS certificate we may have to make one or more HTTP
+    fetches to OCSP responders in order to get revocation information. This
+    records the fraction of successful requests.
+  </summary>
+</histogram>
+
+<histogram name="Net.OCSPRequestTimeMs" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When validating an HTTPS certificate we may have to make one or more HTTP
+    fetches to OCSP responders in order to get revocation information. This
+    measures the amount of time that each of those requests takes.
+  </summary>
+</histogram>
+
+<histogram name="Net.OCSPResponseStapled" enum="BooleanSuccess">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    When connecting over HTTPS, a server may include an OCSP response as part of
+    the TLS handshake so that clients do not have to fetch it, provided the
+    client requested the server do so. This measures whether or not a server
+    included an OCSP response when it was requested.
+  </summary>
+</histogram>
+
+<histogram name="Net.OSErrorsForGetAddrinfo" enum="ErrorCodesGetaddrinfo_All">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive error code that was returned by the system library
+    &quot;getaddrinfo()&quot;. This error code is platform specific, so when
+    there is a Windows/Linux conflict, both decodings are shown.
+  </summary>
+</histogram>
+
+<histogram name="Net.OSErrorsForGetAddrinfo_Linux"
+    enum="ErrorCodesGetaddrinfo_Linux">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive error code that was returned by the system library
+    &quot;getaddrinfo()&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Net.OSErrorsForGetAddrinfo_Mac"
+    enum="ErrorCodesGetaddrinfo_Mac">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive error code that was returned by the system library
+    &quot;getaddrinfo()&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Net.OSErrorsForGetAddrinfo_Win"
+    enum="ErrorCodesGetaddrinfo_Win">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Positive error code that was returned by the system library
+    &quot;getaddrinfo()&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Net.PacResultForStrippedUrl" enum="PacResultForStrippedUrl">
+  <obsolete>
+    Deprecated 4/27/2016. No longer tracked.
+  </obsolete>
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    Proxy Auto Config (PAC) allows specifying an arbitrary javascript program to
+    pick network proxies on a per-request basis (based on the URL). This works
+    by calling the script's FindProxyForURL() function with the target URL as
+    its first argument.
+
+    Traditionally, the URL parameter passed into the script contains the exact
+    URL being loaded, except maybe for having stripped the fragment and embedded
+    identity portions of the URL.
+
+    This histogram records what happens when the URL passed into
+    FindProxyForURL() additionally has had its path component stripped. Does it
+    return the same proxy list as when calling FindProxyForURL() with the
+    original (unmodified) URL?
+
+    This comparison is done only when the URL scheme implies a secure channel
+    (i.e. https:// and wss://), in order to gather data for crbug.com/593759.
+  </summary>
+</histogram>
+
+<histogram name="Net.Ping_ResponseStartedTime" units="ms">
+  <obsolete>
+    Deprecated 4/16/2014. No longer tracked.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    How long it took for an &lt;a ping&gt; request to receive a response. Only
+    recorded if a response was received.
+  </summary>
+</histogram>
+
+<histogram name="Net.Ping_Result" enum="PingResult">
+  <obsolete>
+    Deprecated 4/16/2014. No longer tracked.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The result of an &lt;a ping&gt; request, whether it received a response or
+    timed out or failed for some other reason.
+  </summary>
+</histogram>
+
+<histogram name="Net.PreconnectedLinkNavigations" enum="PreconnectedNavigation">
+  <obsolete>
+    No longer tracked.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Indicate whether a link navigation was preceded by a recent pre-connect
+    trigger (within 10 seconds). There is a high chance that loading the page
+    used a preconnected TCP session.
+  </summary>
+</histogram>
+
+<histogram name="Net.PreconnectedNavigation" enum="PreconnectedNavigation">
+  <obsolete>
+    No longer tracked.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Indicate whether a URLRequest was preceded by a recent pre-connect trigger
+    (within 10 seconds). There is a high chance that loading the resource used a
+    preconnected TCP session.
+  </summary>
+</histogram>
+
+<histogram name="Net.PreconnectMotivation" enum="PreconnectMotivation">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    When a preconnection is made, indicate what the motivation was.
+  </summary>
+  <details>
+    Currently, the most common (only?) motivations are SELF_REFERAL,
+    LEARNED_REFERAL and OMNIBOX. The SELF_REFERAL indicates that we made sure a
+    second connection was available for a resource that either was never before
+    seen, or has historically had no subresources.  The LEARNED_REFERAL
+    indicates that we &quot;learned&quot; that a subresource was commonly
+    needed, and that motivated the TCP/IP preconnect. The OMNIBOX motivation
+    happens when a search is being suggested, and we preconnect to the search
+    provider. (WARNING: Prior to version 7.517.*, enums 7, 8, and 9 may be
+    confused, as EARLY_LOAD_MOTIVATED was inserted new 6 value.)
+  </details>
+</histogram>
+
+<histogram name="Net.PreconnectProxyStatus" enum="ProxyStatus">
+  <obsolete>
+    No longer tracked.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Indicate whether there was a proxy to preclude preconnection.
+  </summary>
+</histogram>
+
+<histogram name="Net.PreconnectSubresourceEval"
+    enum="PreconnectSubresourceEval">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    What did we decide to do about a predicted resource, based on the historical
+    expected number of connection that this subresource will require.
+  </summary>
+  <details>
+    This is basically the current thresholding of the SubresourceExpectation,
+    relative to current static thresholds, and taking into account whether
+    preconnection is enabled (i.e., if preconnection is disabled, we'll never
+    decide to preconnect).
+  </details>
+</histogram>
+
+<histogram name="Net.PreconnectSubresourceExpectation">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The expected number of connections, times 100, that we'll make to a given
+    subresource, based on learned history.
+  </summary>
+  <details>
+    By comparing this to thresholds, we decide if we will preconnect,
+    preresolve, or do nothing. This histogram can be used to select those static
+    thresholds.
+  </details>
+</histogram>
+
+<histogram name="Net.PreconnectTriggerUsed" enum="PreconnectTriggerUsed">
+  <obsolete>
+    No longer tracked.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Indicate whether if a preconnect trigger is followed by a resource request
+    (from link navigations) to the host or not. This is to measure precision of
+    link-based preconnect triggers.
+  </summary>
+</histogram>
+
+<histogram name="Net.PreconnectUtilization" enum="NetPreconnectUtilization">
+  <obsolete>
+    Sourced data corrected, and replaced by NetPreconnectUtilization2
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Indicate final utilization for each attempted socket connection.
+  </summary>
+  <details>
+    We also include stats for non-speculative sockets. Some socket connections
+    may never connect, and others may never be used (as the user may abort
+    before then).
+  </details>
+</histogram>
+
+<histogram name="Net.PreconnectUtilization2" enum="NetPreconnectUtilization">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Indicate final utilization for each attempted socket connection.
+  </summary>
+  <details>
+    We also include stats for non-speculative sockets. Some socket connections
+    may never connect, and others may never be used (as the user may abort
+    before then).
+  </details>
+</histogram>
+
+<histogram name="Net.Predictor.MRUIndex">
+  <obsolete>
+    Dev data was collected which was good enough to make a decision on the size
+    of the predictor database.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The index into the predictor's MRU on navigation. This is the size the MRU
+    had to be in order to effectively predict subresources for this navigation.
+  </summary>
+</histogram>
+
+<histogram name="Net.Predictor.Startup.DBSize" units="bytes">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The approximate size in bytes of the predictor's database on startup.
+  </summary>
+</histogram>
+
+<histogram name="Net.Prefetch.HitBytes" units="bytes">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Bytes read for requests that were served from a cache entry whose
+    unused_since_prefetch bit is true.
+  </summary>
+</histogram>
+
+<histogram name="Net.Prefetch.Pattern" enum="PrefetchStatus">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The completion status of prefetches that have finished loading.
+  </summary>
+  <details>
+    Measurement occurs at ResourceLoader::ResponseCompleted so requests canceled
+    before that point are not registered.
+
+    This applies to requests with RESOURCE_TYPE_PREFETCH.
+
+    Note that &quot;success from cache&quot; means that the
+    UrlRequest::was_cached() was true and unused_since_prefetch was false.
+    &quot;success from network&quot; means that was_cached() was false.
+    &quot;success already prefetched&quot; means that both was_cached() and
+    unused_since_prefetch were true. Validated results are considered cached,
+    even though a conditional network request is made.
+  </details>
+</histogram>
+
+<histogram name="Net.Prefetch.PrefilterBytesReadFromNetwork" units="bytes">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Number of bytes read from the network on behalf of prefetch requests.  This
+    is prefilter, so before any decompression.
+  </summary>
+  <details>
+    This applies to requests with RESOURCE_TYPE_PREFETCH.
+  </details>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeBeforeCancel" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Time spent on prefetch requests before the request was canceled.
+  </summary>
+  <details>
+    This applies to requests with RESOURCE_TYPE_PREFETCH.
+  </details>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeSpentOnPrefetchHit" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Time spent on requests that were served from a cache entry whose
+    unused_since_prefetch bit is true.
+  </summary>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeSpentPrefetchingFromCache" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>Time spent on prefetch requests when fetched from cache.</summary>
+  <details>
+    This applies to requests with RESOURCE_TYPE_PREFETCH.
+  </details>
+</histogram>
+
+<histogram name="Net.Prefetch.TimeSpentPrefetchingFromNetwork" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Time spent on prefetch requests when fetched from the network, including
+    validation time.
+  </summary>
+</histogram>
+
+<histogram name="Net.PrefProxyConfig.GooglezipProxyRemovalCount">
+  <owner>sclittle@chromium.org</owner>
+  <summary>
+    Records how many *.googlezip.net Data Reduction Proxies were removed from
+    the effective proxy configuration when a proxy reconfiguration occurs.
+  </summary>
+</histogram>
+
+<histogram name="Net.Priority_High_Latency" units="ms">
+  <obsolete>
+    Replaced by Net.Priority_High_Latency_b.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from the start of the http transaction until the first byte of the
+    response for high priority (currently frame and subframe) requests.  Only
+    times under 10 minutes are recorded.
+  </summary>
+</histogram>
+
+<histogram name="Net.Priority_High_Latency_b" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from the start of the http transaction until the first byte of the
+    response for high priority (currently frame and subframe) requests.
+  </summary>
+</histogram>
+
+<histogram name="Net.Priority_Low_Latency" units="ms">
+  <obsolete>
+    Replaced by Net.Priority_Low_Latency_b.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from the start of the http transaction until the first byte of the
+    response for low priority (non-frame/subframe) requests.   Only times under
+    10 minutes are recorded.
+  </summary>
+</histogram>
+
+<histogram name="Net.Priority_Low_Latency_b" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from the start of the http transaction until the first byte of the
+    response for low priority (non-frame/subframe) requests.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyAuthRequested.HasConnection">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    When a PROXY_AUTH_REQUESTED error code is handled in
+    net::HttpStreamFactoryImpl::Job::RunLoop, this is true if connection_ has an
+    associated value.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyPollConfigurationTime">
+  <obsolete>
+    Removed at some time before 2014/09/15.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time in milliseconds spent fetch the system proxy configuration, when
+    polling it for changes.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.AbandonedExecutionTotalTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total amount of time that was spent executing the proxy script during
+    &quot;tracing&quot; runs (executions of the script which discovered a new
+    DNS dependency and were subsequently abandoned).
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.AbandonedExecutionTotalTime"
+    units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total amount of time that was spent executing the proxy script during
+    &quot;tracing&quot; runs (executions of the script which discovered a new
+    DNS dependency and were subsequently abandoned).
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.DnsWaitTotalTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total amount of time that was spent in the non-blocking DNS bindings
+    while executing PAC scripts. This includes the times for abandoned
+    executions.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.ExecutionTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time inside of V8 that the proxy script spent executing for
+    the final pass. This includes the time spent in the javascript bindings.
+    This does not include the time spent in abandoned execution passes.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.NumAlerts">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times that alert() was called in the final execution of the
+    script.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.NumErrors">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of errors that were seen in the final execution of the script.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.NumRestarts">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times that the PAC script execution was restarted.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time that the proxy resolution took. This includes all the time
+    spent waiting for DNS, PAC script execution, and restarts.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.TotalTimeDNS" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time that proxy resolution spent waiting for DNS. This also
+    includes any queuing delays on the origin thread waiting for the DNS result
+    to be processed.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.BlockingDNSMode.UniqueDNS">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of unique DNS hostnames that the PAC script tried to resolve. The
+    *Ex() versions of the bindings count separately.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.DnsWaitTotalTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total amount of time that was spent in the non-blocking DNS bindings
+    while executing PAC scripts. This includes the times for abandoned
+    executions.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.ExecutionTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time inside of V8 that the proxy script spent executing for
+    the final pass. This includes the time spent in the javascript bindings
+    (which is probably dominated by Net.ProxyResolver.DnsWaitTotalTime). This
+    does not include the time spent in abandoned execution passes.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.NumAlerts">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times that alert() was called in the final execution of the
+    script.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.NumErrors">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of errors that were seen in the final execution of the script.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.NumRestarts">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times that the PAC script execution was restarted.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.OriginThreadLatency" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The amount of time it took upon completion to run the final task posted back
+    to the IO thread.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.TotalTime" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time that the proxy resolution took. This includes all the time
+    spent waiting for DNS, PAC script execution, and restarts.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.TotalTimeDNS" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time that proxy resolution spent waiting for DNS. This also
+    includes any queuing delays on the origin thread waiting for the DNS result
+    to be processed.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.TotalTimeWorkerThread" units="ms">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The total time that the proxy resolution took, not including the post back
+    to the origin thread. This includes all the time spent waiting for DNS, PAC
+    script execution, and restarts.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.UniqueDNS">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of unique DNS hostnames that the PAC script tried to resolve. The
+    *Ex() versions of the bindings count separately.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyResolver.URLSize">
+  <obsolete>
+    Removed in Chrome 39.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The length of the URL that was passed into the PAC script.</summary>
+</histogram>
+
+<histogram name="Net.ProxyScriptFetcher.FirstByteDuration" units="ms">
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    The time taken from requesting a PAC script to receiving the first byte, on
+    successful fetches. This does not include time spent doing proxy
+    auto-discovery, or failed attempts at retrieving PAC  scripts.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyScriptFetcher.SuccessDuration" units="ms">
+  <owner>cbentzel@chromium.org</owner>
+  <summary>
+    The time taken to successfully fetch a PAC script. This does not include
+    time spent doing proxy auto-discovery, or failed attempts at retrieving PAC
+    scripts.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyService.GetProxyUsingScriptResult"
+    enum="NetErrorCodes">
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    The network error code of resolving a URL by forwarding the request to the
+    proxy resolver and executing the PAC script.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyService.GetProxyUsingScriptTime"
+    units="100s of microseconds">
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    The time taken to resolve a URL by forwarding the request to the proxy
+    resolver and executing the PAC script. This includes PAC script execution,
+    DNS queries, and internal retries. This does not include retries initiated
+    by the user, such as by calling ProxyService::ReconsiderProxyAfterError().
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyService.ResolvedUsingScript" enum="Boolean">
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    Whether proxy resolution occured by forwarding the request to the proxy
+    resolver and executing the PAC script. This histogram records all URLs,
+    regardless of whether a proxy configuration is set. Note that in some cases,
+    the system proxy resolver is used. If so, this histogram indicates whether
+    the request was forwarded to the system resolver. However, on desktop
+    platforms, the number of users using the system resolver should be small
+    since the default is to use V8. Hence, the count of emissions to the 'True'
+    bucket on desktop caused by users of the system resolver should be small.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyService.ResolveProxyTime"
+    units="100s of microseconds">
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    The total time taken to resolve a URL. This includes PAC script execution,
+    DNS queries, and internal retries. This does not include retries initiated
+    by the user, such as by calling ProxyService::ReconsiderProxyAfterError().
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyService.ScriptTerminated" enum="BooleanTerminated">
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    Whether a proxy resolution resulted in the PAC script terminating
+    unexpectedly. This does not include terminations that occured during
+    initialization of a new proxy resolver. This only happens when the resolver
+    process crashes when using out-of-process PAC.
+  </summary>
+</histogram>
+
+<histogram name="Net.ProxyService.ScriptTerminatedOnInit"
+    enum="BooleanTerminated">
+  <owner>eroman@chromium.org</owner>
+  <summary>
+    Whether the creation of a new proxy resolver resulted in the PAC script
+    terminating unexpectedly. This only happens when the resolver process
+    crashes when using out-of-process PAC.
+  </summary>
+</histogram>
+
+<histogram name="Net.PublicKeyPinFailureDomain" enum="PublicKeyPinFailedDomain">
+  <obsolete>
+    Deprecated as of November 2016 because of disuse. Historical data is likely
+    inaccurate due to changes in the data structure that calculated domain IDs
+    for this histogram.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Second-level domains for which we have observed public key pinning failures.
+  </summary>
+</histogram>
+
+<histogram name="Net.PublicKeyPinReportSendingFailure" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 07/2016. Replaced with
+    Net.PublicKeyPinReportSendingFailure2.
+  </obsolete>
+  <owner>estark@chromium.org</owner>
+  <summary>
+    A validated certificate chain may be subject to additional pinning
+    requirements on a per-domain basis. When pinning requirements are violated,
+    Chrome attempts to send a report about the incident. This records the net
+    error code when sending a pinning violation report fails.
+  </summary>
+</histogram>
+
+<histogram name="Net.PublicKeyPinReportSendingFailure2" enum="NetErrorCodes">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    A validated certificate chain may be subject to additional pinning
+    requirements on a per-domain basis. When pinning requirements are violated,
+    Chrome attempts to send a report about the incident. This records the net
+    error code when sending a pinning violation report fails.
+  </summary>
+</histogram>
+
+<histogram name="Net.PublicKeyPinSuccess" enum="BooleanSuccess">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    A validated certificate chain may be subject to additional
+    &quot;pinning&quot; requirements on a per-domain basis. This records the
+    fraction of successful matches between a certificate chain and a pin list.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicActiveSessions">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of active QUIC sessions before we activate a new QUIC session.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicAlternativeProxy.Usage"
+    enum="QuicAlternativeProxyUsage">
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Breakdown of how requests which could potentially make use of an alternative
+    QUIC proxy server use or don't use the QUIC server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicClientHelloRejectReasons" enum="QuicRejectReasons">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The reject reasons for QUIC's CHLO (client hello) message from server
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicClientHelloServerConfig.HowExpired" units="ms">
+  <obsolete>
+    Deprecated 08/2014, and replaced by
+    Net.QuicClientHelloServerConfig.InvalidDuration.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    How expired server config is for sending inchoate ClientHello to the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicClientHelloServerConfig.InvalidDuration" units="ms">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The time since expiration of server config when we sent inchoate ClientHello
+    to the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicClientHelloServerConfigState"
+    enum="QuicServerConfigState">
+  <obsolete>
+    Deprecated as of 11/2014. Replaced by Net.QuicInchoateClientHelloReason.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The reason (the state of the server config) for sending inchoate ClientHello
+    to the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicCloseConnection.NullVisitor" enum="BooleanNullVisitor">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of times Connection's visitor is a nullptr when CloseConnection
+    is called.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicCryptoClientConfig.PopulatedFromCanonicalConfig"
+    enum="BooleanPopulated">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of times CryptoClientConfig's CachedState is populated from
+    canonical config whenever we create a new CryptoClientConfig::CachedState.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicDiskCache.APICall" enum="QuicDiskCacheAPICall">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Tracks number of times data read/parse/write API calls of QuicServerInfo to
+    and from disk cache is called.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicDiskCache.EntryState" enum="QuicDiskCacheEntryState">
+  <obsolete>
+    Deprecated as of 10/2014.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Tracks the opening and closing of disk cache entries. Recorded each time a
+    disk cache entry is either opened or closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicDiskCache.FailureReason"
+    enum="QuicDiskCacheFailureReason">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Tracks failure reasons to read/load/write of QuicServerInfo to and from disk
+    cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicEphemeralPortsSuggested">
+  <obsolete>
+    Deprecated as of 04/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The number of ports suggested per server.</summary>
+</histogram>
+
+<histogram name="Net.QuicHandshakeNotConfirmedNumPacketsReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of QUIC packets received by a QUIC connection whose handshake was
+    not confirmed when that connection is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicHandshakeState" enum="QuicHandshakeState">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The state of a QUIC connection's crypto hanshake as it progresses from
+    starting to confirmation or failure.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicHpackCompressionPercentage" units="%">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The compression percentage, logged for each sent HPACK compressed header
+    frame.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicHpackDecoder.IndexedEntryAge" units="ms">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    For each indexed representation decoded, records the time since the
+    corresponding entry was added to the dynamic table.  This data is being
+    collected to help analyze a proposed solution to HPACK induced head of line
+    blocking.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicHpackDecompressionPercentage" units="%">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The decompression percentage, logged for each received HPACK compressed
+    header frame.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicHpackEncoder.IndexedEntryAge" units="ms">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    For each indexed representation encoded, records the time since the
+    corresponding entry was added to the dynamic table.  This data is being
+    collected to help analyze a proposed solution to HPACK induced head of line
+    blocking.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicHttpStream::DoStreamRequest.IsNullSession"
+    enum="Boolean">
+  <obsolete>
+    Deprecated 2016. No longer tracked.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of times QuicHttpStream's session_ is a nullptr before
+    StartRequest() is called.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicInchoateClientHelloReason"
+    enum="QuicServerConfigState">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The reason (the state of the server config) for sending inchoate ClientHello
+    to the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicNumSentClientHellos">
+  <owner>rch@chromium.org</owner>
+  <summary>The number of client hello messages sent.</summary>
+</histogram>
+
+<histogram name="Net.QuicNumSentClientHellosCryptoHandshakeConfirmed">
+  <obsolete>
+    see Net.QuicSession.Connect*PortForHTTP*
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of client hello messages sent when the crypto handshake was
+    confirmed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicNumServerConfig.UpdateMessagesIgnored"
+    enum="BooleanIgnored">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>The number of times ServerConfigUpdateMessages ignored.</summary>
+</histogram>
+
+<histogram name="Net.QuicNumStreamFramesInPacket">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of stream frames bundled within a received packet.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicNumStreamFramesPerStreamInPacket">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of stream frames per stream ID within a received packet.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicReadAvailableData.NullStream" enum="BooleanNullStream">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of times QuicHttpStream's stream_ is a nullptr before
+    IsDoneReading() is called.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.DiskCacheLoadTime" units="ms">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>Time spent to load QUIC server information from disk cache.</summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.DiskCacheReadTime" units="ms">
+  <obsolete>
+    Deprecated as of 10/2014. Replaced by DiskCacheWaitForDataReadyTime.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>Time spent to load QUIC server information from disk cache.</summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.DiskCacheState"
+    enum="QuicServerConfigState">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The state of the QUIC server information when it's loaded from the disk
+    cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.DiskCacheWaitForDataReadyTime" units="ms">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Time spent waiting to load QUIC server information from disk cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.ExpectConfigMissingFromDiskCache"
+    enum="BooleanMissingFromDiskCache">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of times AlternateProtocolMap supports QUIC, but there is no QUIC
+    server information in the disk cache. This is recorded whenever QUIC server
+    information is loaded from the disk cache.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.WaitForDataReady.HandshakeConfirmedTime"
+    units="Milliseconds">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The elapsed time between waiting for reading of QUIC server information from
+    disk cache, and receiving crypto handshake confirmation from the server.
+    Will measure the impact of cancelling the WaitForDataReady callback. Logged
+    after crypto handshake is confirmed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicServerInfo.WaitForDataReadyToRtt" units="%">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The ratio of the time spent waiting to load QUIC server information from
+    disk cache to the min rtt. Logged when session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.21CumulativePacketsReceived"
+    units="Received in Ranges">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    This histogram summarizes information about a 21 packet sequence, indicating
+    for each of the 21 possible prefixes of this pattern, how many packets were
+    received in that prefix.  The first range uses buckets 0 and 1, and it
+    describes the 1st packet in the sequence.  It indicates if the first packet
+    was missing (bucket 0), or the first packet was present (bucket 1).  The
+    second range uses buckets 2 through 4, and describes the first 2 packets in
+    the prefix of this sequence.  It indicates if there were no packets received
+    in the first two packets (bucket 2), or there was one out of two packets
+    received (bucket 3), or if there was two out of tow received (bucket 4).
+    etc. etc.  Reading this histogram may require post-processing in a spread
+    sheet, but can indicate the potential value of using FEC packets to convey
+    data.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.6PacketsPatternsReceived"
+    units="Binay of Packets ACKed">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Each of the 64 buckets represents a different binary pattern of 6
+    consecutive packets that were received by the client.  The LSB of the bucket
+    number corresponds to the reception of the oldest packet.  A bit in the
+    bucket-number being 1 indicates the packet was received, and a 0 means the
+    packet was never received (by the client).
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.AbortedPendingStreamRequests"
+    units="stream requests">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The number of pending stream requests aborted when the session is closed.
+    Pending streams are those which could not be created immediately because
+    there were too many active streams.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.AsyncRead" enum="Boolean">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    True if the result of reading a packet from the network was ERR_IO_PENDING.
+    Recorded for each packet when Read() returns.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.BlockedFrames.Received">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of BLOCKED frames recevied by a QuicSession when the session is
+    closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.BlockedFrames.Sent">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The number of BLOCKED frames sent by a QuicSession when the session is
+    closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.CertVerifierJob.CompleteTime"
+    units="Milliseconds">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Time spent verifying a certificate when racing cert veriifcation with host
+    resolution.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ClientSideMtu" units="bytes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The final maximum packet size of the connection used by the client before
+    the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.CloseAllSessionsError" enum="NetErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The network error code which resulted in all sessions being closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ClosedDuringInitializeSession" enum="Boolean">
+  <owner>rch@chromium.org</owner>
+  <summary>
+     True if the QUIC session is closed during the call to InitializeSession,
+    logged for each session just after InitializeSession is called.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.CloseSessionOnError" enum="NetErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The network error code which resulted in the session being closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.Connect" units="RTTs">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Samples of the number of round-trips needed by a QUIC connection before a
+    request could be sent by the client.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectAfterBroken" enum="BooleanSuccess">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    True if a QUIC connection connected successfully after having been broken.
+    Only emitted after a QUIC connection attempt to a server that was previous
+    marked as broken.
+  </summary>
+</histogram>
+
+<histogram
+    name="Net.QuicSession.ConnectionClose.HandshakeFailureBlackHole.QuicError"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error which caused a QUIC connection to be closed before the
+    hanshake was confirmed, in the case where no packets were received. This
+    provides a breakdown of the entires in
+    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
+    is BLACK_HOLE.
+  </summary>
+</histogram>
+
+<histogram
+    name="Net.QuicSession.ConnectionClose.HandshakeFailureUnknown.QuicError"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error which caused a QUIC connection to be closed before the
+    hanshake was confirmed, in the case where at least 1 packet was received.
+    This provides a breakdown of the entires in
+    Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason where the value
+    is UNKNOWN.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionClose.HandshakeNotConfirmed.Reason"
+    enum="QuicHandshakeFailureReason">
+  <owner>rch@chromium.org</owner>
+  <summary>The reason a QUIC handshake failed.</summary>
+</histogram>
+
+<histogram
+    name="Net.QuicSession.ConnectionClose.NumOpenStreams.HandshakeTimedOut">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of streams open when a QUIC session crypto handshake timed out.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut">
+  <owner>rch@chromium.org</owner>
+  <summary>The number of streams open when a QUIC session timed out.</summary>
+</histogram>
+
+<histogram
+    name="Net.QuicSession.ConnectionClose.NumTotalStreams.HandshakeTimedOut">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of total streams created when a QUIC session crypto handshake
+    timed out.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionCloseErrorCode"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in the connection being closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in the connection being closed by the
+    client.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in the connection being closed by the
+    server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionFlowControlBlocked"
+    enum="BooleanBlocked">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Whether QUIC session's connection is flow control blocked when a PING
+    message is sent to server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionMigration"
+    enum="QuicConnectionMigrationStatus">
+  <owner>jri@chromium.org</owner>
+  <summary>The result of a QUIC connection migration attempt.</summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionTypeFromPeer" enum="AddressFamily">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The IP Address family of this connection, as reported by the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectionTypeFromSelf" enum="AddressFamily">
+  <owner>rch@chromium.org</owner>
+  <summary>The IP Address family of this connection, as seen locally.</summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"
+    units="RTTs">
+  <owner>jri@chromium.org</owner>
+  <summary>
+    Samples of the number of round-trips needed by a QUIC connection before a
+    request could be sent by the client, when handshake confirmation was
+    required. (The operating system randomly selected a source port for the
+    connection.)
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.CookieSentToAccountsOverChannelId"
+    enum="BooleanUsage">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Logs whether channel ID was used when a cookie is sent over QUIC to
+    https://accounts.google.com.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.CreationError" enum="QuicSessionErrorCodes">
+  <owner>jar@chromium.org</owner>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Count of errors during attempts to create a QUIC session (before even using
+    the session).
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.DuplicatePacketsReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of duplicate packets recevied by a QuicSession when the session
+    is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.FinalTcpCwnd">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The value of the TCP cubic sender's CWND when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.GoAwayReceivedForConnectionMigration"
+    enum="BooleanReceived">
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    Whether QuicGoAwayFrame is received from server for connection migration due
+    to client's port change. Logged when a QuicGoAwayFrame with error code
+    QUIC_ERROR_MIGRATING_PORT is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.HandshakeConfirmedTime" units="Milliseconds">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The elapsed time between starting the crypto handshake, and receiving
+    confirmation from the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.HandshakeRoundTrips" units="RTTs">
+  <obsolete>
+    see Net.QuicSession.Connect*PortForHTTP*
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Samples of the number of round-trips needed by a QUIC connection before a
+    request could be sent by the client.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.HeadersHOLBlockedTime" units="Milliseconds">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The elapsed time that headers are head of line blocked on others, presumably
+    due to lost headers stream packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.HeadersStream.EarlyFramesReceived">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The frames received on the headers stream which arrived early.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.HostResolution.HandshakeConfirmedTime"
+    units="Milliseconds">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The elapsed time between the end of resolving the DNS name of the server for
+    a QUIC connection, and receiving crypto handshake confirmation from the
+    server. Logged after crypto handshake is confirmed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.HostResolutionTime" units="ms">
+  <obsolete>
+    Deprecated 08/2016. No longer tracked.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Time spent resolving the DNS name of the server for a QUIC connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.IncorrectConnectionIDsReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number packets recevied by a QuicSession with an incorrect connection id
+    when the sesesion is closed.
+  </summary>
+</histogram>
+
+<histogram
+    name="Net.QuicSession.LocallyTimedOutWithOpenStreams.TimeSinceLastReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    If a QUIC connection timed out locally with open streams, this contains the
+    time since any data was read from the network until the connection was
+    closed. The suffix specifies whether there were any unacked packets pending
+    when the connection timed out.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.MaxReordering">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The maximum packet sequence number reordering observed by a QUIC connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.MaxReorderingTime" units="%">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The ratio of the maximum reordering time of a QUIC packet to the min rtt.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.MaxReorderingTimeLongRtt" units="%">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The ratio of the maximum reordering time of a QUIC packet to the min rtt,
+    only for those sessions with a min rtt larger than 100 ms.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.MinRTT" units="ms">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The minimum RTT observed during the life of a QUIC connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.MtuProbesSent">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of MTU probes sent by the client during the session.  Logged when
+    the connection is destroyed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.NumOpenStreams">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of QUIC streams opened when a new QUIC stream is created.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.NumPendingStreamRequests"
+    units="stream requests">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The number of pending stream requests when a new stream request is added to
+    the pending list.  Pending streams are those which could not be created
+    immediately because there were too many active streams.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.NumTotalStreams">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The total number of streams created by the client when the session is
+    closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.OutOfOrderGapReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of missing packets between the current received packet and the
+    previously largest received packet sequence number, when the current
+    received packet had a lower sequence number than the previously received
+    packet sequence number.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.OutOfOrderLargePacketsReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of times the current received packet had a lower sequence number
+    than the previously received packet sequence number, and the size of the
+    current packet is larger than the size of the previous packet.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.OutOfOrderPacketsReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of times the current received packet had a lower sequence number
+    than the previously received packet sequence number.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketGapReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of missing packets between the current received packet and the
+    previously largest received packet sequence number.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketGapReceivedNearPing" units="count">
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    The number of missing packets between the last received packet before a PING
+    frame sent and the first packet received after PING sent.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketGapSent">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of missing packets between the current received packet and the
+    previously largest received packet sequence number, as reported by the
+    remote end of the connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketLossRate" units="1/10th Percent">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The ratio of the number of missing packets, to the maximum packet sequence
+    number received,  for QUIC connections longer than 21 packets received via
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketReceived" units="SequenceNumber">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Each bucket corresponds to a specific packet sequence number that was sent
+    by a server to Chrome at the start of a QUIC connection. This histogram is
+    compared, bucket by bucket, with a second histogram to compute the ratio for
+    each bucket (each packet sequence number).
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketRetransmitsPerMille" units="permille">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The number of packets retransmitted per 1000.  Only sessions with
+    packets_sent &gt;= 100 are included.  Recorded in session destructor.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PacketWriteTime">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The time taken to Write() a QUIC packet to the socket. Recorded for each
+    packet when it is sent. The suffix specifies if the write completed
+    synchonously or asynchronously.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PendingStreamsWaitTime" units="ms">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The wait time of the pending stream when it is finally serviced.
+    Pending streams are those which could not be created immediately
+    because there were too many active streams.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PreferAesGcm" enum="BooleanPreferred">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    True if the QUIC session prefers to use AES GCM because of hardware support.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PublicResetAddressMismatch"
+    enum="QuicAddressMismatch">
+  <owner>wtc@chromium.org</owner>
+  <summary>
+    When a public reset packet is received, whether the client IP address and
+    port number in it differ from the client IP address and port number in the
+    ServerHello handshake message. In the comparison, the first address is the
+    one in ServerHello and the second address is the one in public reset. Note:
+    this histogram is obsolete because it failed to treat IPv4-mapped IPv6
+    addresses as IPv4 addresses.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PublicResetAddressMismatch2"
+    enum="QuicAddressMismatch">
+  <owner>wtc@chromium.org</owner>
+  <summary>
+    When a public reset packet is received, whether the client IP address and
+    port number in it differ from the client IP address and port number in the
+    ServerHello handshake message. In the comparison, the first address is the
+    one in ServerHello and the second address is the one in public reset.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.Pushed" units="count">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The number of push streams received when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PushedAndClaimed" units="count">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The number of pushed and used streams when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PushedAndUnclaimedBytes" units="count">
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    The number of bytes that is pushed but not used when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.PushedBytes" units="count">
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    The number of bytes that is pushed when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.QuicVersion">
+  <owner>rch@chromium.org</owner>
+  <summary>Version of the QUIC protocol used for this connection.</summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ReadError" enum="NetErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The network error code returned when attempting to read to a QUIC
+    connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.RejectHasProof" enum="Boolean">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    True if the QUIC REJ message received from the server contains a proof.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.RejectLength">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The length in bytes of a QUIC REJ message received from the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.RstStreamErrorCodeClient"
+    enum="QuicRstStreamErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in a stream being reset by the client.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.RstStreamErrorCodeServer"
+    enum="QuicRstStreamErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in a stream being reset by the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.SecureResourceSecureSession">
+  <owner>rch@chromium.org.</owner>
+  <summary>
+    The number of request for secure resources over QUIC sessions. True if the
+    session is secure, false if it is not.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.ServerSideMtu" units="bytes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The largest packet which the client received from the server during the
+    session.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.SmoothedRTT" units="ms">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The final smoothed RTT observed during the life of a QUIC connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamCloseErrorCodeClient.HandshakeConfirmed"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in the stream (and connection) being
+    closed by the client after the handshake was confirmed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamCloseErrorCodeServer.HandshakeConfirmed"
+    enum="QuicErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The QUIC error code which resulted in the stream (and connection) being
+    closed by the client after the handshake was confirmed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamFlowControlBlocked"
+    enum="BooleanBlocked">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Whether any of QUIC session's streams are flow control blocked when a PING
+    message is sent to server.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamFrameDuplicatedLongConnection"
+    units="1/10th Percent">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of stream frames received which were duplicates, out of every
+    1000 stream frames received. Only for QUIC sessions which received at least
+    100 packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentLongConnection">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The percentage of stream frames received which were duplicates. Only for
+    QUIC sessions which received at least 100 packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamFrameDuplicatedPercentShortConnection">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The percentage of stream frames received which were duplicates. Only for
+    QUIC sessions which received fewer than 100 packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.StreamFrameDuplicatedShortConnection"
+    units="1/10th Percent">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of stream frames received which were duplicates, out of every
+    1000 stream frames received. Only for QUIC sessions which received fewer
+    than 100 packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveRTOCount">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    If a QUIC connection timed out with open streams, this contains a count of
+    consecutive RTOs.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TimedOutWithOpenStreams.ConsecutiveTLPCount">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    If a QUIC connection timed out with open streams, this contains a count of
+    consecutive TLPs.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TimedOutWithOpenStreams.HasUnackedPackets">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    If a QUIC connection timed out with open streams, this will be true when the
+    connection has unacked packets.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TimedOutWithOpenStreams.LocalPort">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    If a QUIC connection timed out locally with open streams, this contains the
+    local port number for the connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TooManyOpenStream" enum="BooleanTooMany">
+  <obsolete>
+    Deprecated 04/2015. Tracked as Net.QuicSession.TooManyOpenStreams.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    True if more than 100 streams are open when a new stream is activated.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TooManyOpenStreams" enum="BooleanTooMany">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    True if more than 100 streams are open when a new stream is activated.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TruncatedAcksReceived">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The number of truncated ACK frames received.</summary>
+</histogram>
+
+<histogram name="Net.QuicSession.TruncatedAcksSent">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The number of truncated ACK frames sent.</summary>
+</histogram>
+
+<histogram name="Net.QuicSession.UndecryptablePacketsReceived">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The number of undecryptable packets recevied by a QuicSession when the
+    sesesion is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.UnexpectedNotGoingAway"
+    enum="QuicSessionLocations">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The location in quic_client_session.cc where a session is unexpectedly not
+    going away.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.UnexpectedObservers"
+    enum="QuicSessionLocations">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The location in quic_client_session.cc where there were unexpected
+    observers.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.UnexpectedOpenStreams"
+    enum="QuicSessionLocations">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The location in quic_client_session.cc where there were unexpected open
+    streams.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.VerifyProofTime" units="ms">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Time spent verifying the signature and certificate chain. This is logged
+    whenever QUIC verifies the certificate chain and signature during crypto
+    handshake.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicSession.WriteError" enum="NetErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The network error code returned when attempting to write to a QUIC
+    connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.BadPacketLossEvents5"
+    enum="QuicBadPacketLossEvents">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    A count of how often a user hits 1, 2, 3, 4 and 5 bad packet loss events for
+    port 443. Recorded whenever QUIC has bad packet loss (high packet loss on
+    multiple consecutive connections).
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.DisabledReasons"
+    enum="QuicDisabledReason">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    Rrecords reasons QUIC is disabled (for all ports), if sufficent recent
+    connections experience: public reset post crypto handshake, or timeouts with
+    streams open. QUIC is disabled until the next reboot of Chrome. Logged
+    during session close.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.PublicResetsPostHandshake"
+    units="resets">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    Captures the maximum number of public resets post handshake that occurred
+    within a window of recent connections (default 20). Will help inform the
+    choice of threshold to disable QUIC for clients that experience pathalogical
+    errors. Logged during session close.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.QuicIsDisabled" enum="Ports">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Recorded whenever QUIC is disabled for a port due to repeated lossy
+    connections (high packet loss on multiple consecutive connections). QUIC is
+    disabled until next reboot of Chrome.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.TimeoutsWithOpenStreams"
+    units="timeouts">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    Captures the maximum number of connection timeouts with streams open that
+    occurred within a window of recent connections (default 20). Will help
+    inform the choice of threshold to disable QUIC for clients that experience
+    pathalogical errors. Logged during session close.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicStreamFactory.TSVIPCliIsLoaded" enum="Boolean">
+  <obsolete>
+    Deprecated 06/2016. No longer tracked.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Whether TSVIPCli DLL is loaded or not on windows when the socket is
+    configured.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicTimeBetweenTwoPacketSent" units="ms">
+  <obsolete>
+    Deprecated 08/2016. No longer tracked.
+  </obsolete>
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    Time duration from last packet sent to a new packet sent in QUIC connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.QuicVerifyProofFailed.HandshakeConfirmed"
+    enum="BooleanHandshakeConfirmed">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Logged whenever proof verification fails and if the failure occurred before
+    or after the crypto handshake is confirmed.
+  </summary>
+</histogram>
+
+<histogram name="Net.RenegotiationExtensionSupported">
+  <obsolete>
+    Deprecated 03/2015. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    True if the HTTP request was sent to a server which supports the TLS
+    renegotiation extension.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime">
+  <obsolete>
+    Replaced by Net.RequestTime2 due to bug in original implementation.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    success and various different errors.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime2">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    success and various different errors.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime2.ErrAborted.HttpScheme" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    ERR_ABORTED when the request's scheme is http/s.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime2.ErrAborted.NetworkContent" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    ERR_ABORTED when the requests TotalReceivedBytes() &gt; 0.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime2.ErrAborted.NoBytesRead" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    ERR_ABORTED when the requests TotalReceivedBytes() = 0 and
+    received_response_content_length() = 0.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime2.ErrAborted.NoNetworkContent.CachedContent"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    ERR_ABORTED when the requests TotalReceivedBytes() = 0 and
+    received_response_content_length() &gt; 0.
+  </summary>
+</histogram>
+
+<histogram name="Net.RequestTime2.ErrAborted.NonHttpScheme" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The amount of time between request initiation and request completion for
+    ERR_ABORTED when the request's scheme is not http/s.
+  </summary>
+</histogram>
+
+<histogram name="Net.ResourceLoader.InliningStatus"
+    enum="ResourceLoaderInliningStatus">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Counts whether the chunk inlining is applicable or not to a resource
+    loading. Counts the reason if inapplicable.
+  </summary>
+</histogram>
+
+<histogram name="Net.ResourceLoader.ReadDeferral" units="ms">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    When starting a cross-site navigation, the time between reading the headers
+    and body of the response.
+  </summary>
+</histogram>
+
+<histogram name="Net.ResourceLoader.ResponseStartToEnd" units="microseconds">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Time from the start to the end of receiving a response body. Recorded for
+    each resource load.
+  </summary>
+</histogram>
+
+<histogram name="Net.ResponseSizeByProcess.Browser" units="KB">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
+    the browser process.
+  </summary>
+</histogram>
+
+<histogram name="Net.ResponseSizeByProcess.Renderer" units="KB">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
+    a renderer process.
+  </summary>
+</histogram>
+
+<histogram name="Net.ResponseSizeByProcess.Unknown" units="KB">
+  <owner>juliatuttle@chromium.org</owner>
+  <summary>
+    Count of (post-SSL/proxy, pre-filter) kilobytes received per request made by
+    a process not covered by one of the other ResponseSizeByProcess histograms.
+  </summary>
+</histogram>
+
+<histogram name="Net.Socket.IdleSocketFate" enum="IdleSocketFate">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    Whether an idle socket is reused, timed out, or closed to make room for new
+    sockets.
+  </summary>
+</histogram>
+
+<histogram name="Net.Socket.IdleSocketReuseTime" units="seconds">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Seconds a socket was idle before it was reused. Emitted upon reuse. Does not
+    record the times sockets were idle before first use.
+  </summary>
+</histogram>
+
+<histogram name="Net.Socket.IdleSocketTimeSaving" units="ms">
+  <owner>xunjieli@chromium.org</owner>
+  <summary>
+    Number of milliseconds an idle socket saved in connection establishment
+    because it is reused.
+  </summary>
+</histogram>
+
+<histogram name="Net.Socket.NumIdleSockets">
+  <owner>mmenke@chromium.org</owner>
+  <summary>Number of idle sockets when one of them was reused.</summary>
+</histogram>
+
+<histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time an already used socket sat idle before being used.</summary>
+</histogram>
+
+<histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an unused socket (all HTTP sockets, regardless of any proxy used)
+    sat idle before being used.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time a previously used socket sat idle before encountering a recoverable
+    socket IO error (connection abort/reset/close).
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an unused socket sat idle before encountering a recoverable socket
+    IO error (connection abort/reset/close).
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketInitErrorCodes" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Net error codes that socket initializations end with, including net::OK and
+    net::ERR_ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketReceiveBufferUnchangeable" units="Bytes">
+  <obsolete>
+    Replaced by Net.SocketUnchangeableReceiveBuffer 3/31/2014.
+  </obsolete>
+  <owner>jar@chromium.org</owner>
+  <summary>
+    The size of a socket's receive buffer when the attempt to change it via
+    setsockopt failed.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketRequestTime">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time in milliseconds from initial RequestSocket() call until successfully
+    acquiring a connected socket.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketStream.ConnectionEstablish" units="ms">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>The time from the connection start to connection establish.</summary>
+</histogram>
+
+<histogram name="Net.SocketStream.ConnectionLatency" units="ms">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>The time waiting to be ready to start connecting.</summary>
+</histogram>
+
+<histogram name="Net.SocketStream.ConnectionType"
+    enum="SocketStreamConnectionType">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Each bucket is the number of connection type of socket stream.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketStream.Duration" units="ms">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. Replaced by
+    Net.WebSocket.Duration.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>The time a socket stream was open.</summary>
+</histogram>
+
+<histogram name="Net.SocketStream.ProtocolType" enum="SocketStreamProtocolType">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Each bucket is the number of protocol type on socket stream.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketStream.ReceivedBytes" units="bytes">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>Number of bytes on a socket stream.</summary>
+</histogram>
+
+<histogram name="Net.SocketStream.ReceivedCounts">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>Number of reads on a socket stream.</summary>
+</histogram>
+
+<histogram name="Net.SocketStream.SentBytes" units="bytes">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>Number of bytes on a socket stream.</summary>
+</histogram>
+
+<histogram name="Net.SocketStream.SentCounts">
+  <obsolete>
+    Deprecated 2014-10-28. No longer generated. No direct replacement.
+  </obsolete>
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>Number of Write on a socket stream.</summary>
+</histogram>
+
+<histogram name="Net.SocketType" enum="HttpSocketType">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The counts of the type of sockets returned by the socket pools.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketUnchangeableReceiveBuffer" units="Bytes">
+  <owner>jar@chromium.org</owner>
+  <summary>
+    The size of a socket's receive buffer when the attempt to change it via
+    setsockopt failed.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocketUnchangeableSendBuffer" units="Bytes">
+  <owner>jar@chromium.org</owner>
+  <summary>
+    The size of a socket's send buffer when the attempt to change it via
+    setsockopt failed.
+  </summary>
+</histogram>
+
+<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
+  <obsolete>
+    see SocketIdleTimeBeforeNextUse_ReusedSocket_SOCK
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an already used SOCKS socket sat idle before being used.
+  </summary>
+</histogram>
+
+<histogram name="Net.SOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
+  <obsolete>
+    see SocketIdleTimeBeforeNextUse_UnusedSocket_SOCK
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time an unused SOCKS socket sat idle before being used.</summary>
+</histogram>
+
+<histogram name="Net.SOCKSSocketRequestTime" units="ms">
+  <obsolete>
+    see SocketRequestTime_SOCK
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from initial SOCKSClientSocketPool::RequestSocket() call until
+    successfully acquiring a connected SOCKS socket.
+  </summary>
+</histogram>
+
+<histogram name="Net.SocksSocketRequestTime">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time it takes to request a new (unused) SOCKS proxy socket.</summary>
+</histogram>
+
+<histogram name="Net.SOCKSSocketType" enum="HttpSocketType">
+  <obsolete>
+    see SocketType_SOCK
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The counts of the type of sockets returned by the SOCKS pool.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyConnectionLatency" units="ms">
+  <obsolete>
+    Replaced by Net.SpdyConnectionLatency_2 on 2014-10-21.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>Time from when the Connect() starts until it completes.</summary>
+</histogram>
+
+<histogram name="Net.SpdyConnectionLatency_2" units="ms">
+  <owner>bnc@chromium.org</owner>
+  <summary>Time from when the Connect() starts until it completes.</summary>
+</histogram>
+
+<histogram name="Net.SpdyFrameStreamAndSessionFlowControlState"
+    enum="SpdyFrameFlowControlState">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The counts of the flow control state of each frame (with stream and session
+    flow control on).
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyFrameStreamFlowControlState"
+    enum="SpdyFrameFlowControlState">
+  <obsolete>
+    The last protocol which would trigger this was deprecated in 2014 November.
+    This histogram is deprecated in 2016 January.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The counts of the flow control state of each frame (with stream flow control
+    on).
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyHpackDecompressionPercentage" units="%">
+  <owner>ckrasic@chromium.org</owner>
+  <summary>
+    The compression percentage in received HPACK compressed header frames.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyHpackEncodedCharacterFrequency" units="ASCII codes">
+  <obsolete>
+    Obsolete as HTTP/2 standard is finalized.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    Frequencies of characters observed in request and response headers.
+    Temporarily being collected to inform the construction of an optimized
+    Huffman code for the HTTP/2 specification. Buckets are ASCII codes offset by
+    1.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyIPPoolDomainMatch" enum="SpdyIPPoolDomainMatch"
+    units="count">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    Status of checking if a SPDY domain can handle a IP match.  If a match is
+    found, we successfully used the IP Pooling.  If a match is not found, we
+    could have used IP Pooling, except the TLS Cert didn't match the IP-pooled
+    domain.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyPing.RTT" units="ms">
+  <owner>bnc@chromium.org</owner>
+  <summary>The RTT for SPDY's PING.</summary>
+</histogram>
+
+<histogram name="Net.SpdyPriorityCount">
+  <obsolete>
+    Removed 2016-05-26.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The count of streams at each priority over Spdy sessions.</summary>
+</histogram>
+
+<histogram name="Net.SpdyRecvBytes" units="bytes">
+  <owner>bnc@chromium.org</owner>
+  <summary>The number of bytes recevied per stream.</summary>
+</histogram>
+
+<histogram name="Net.SpdySendBytes" units="bytes">
+  <owner>bnc@chromium.org</owner>
+  <summary>The number of bytes sent per stream.</summary>
+</histogram>
+
+<histogram name="Net.SpdySession.BytesRead.EOF" units="bytes">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Total number of bytes recevied per session before closing session due to
+    EOF.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySession.BytesRead.OtherErrors" units="bytes">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Total number of bytes recevied per session before closing session due to an
+    error during read.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySession.ClosedOnError" enum="NetErrorCodes">
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Net error codes when SpdySession was closed, doesn't inlcuding net::OK.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySession.CreateStreamWithSocketConnected"
+    enum="BooleanSuccess">
+  <owner>bnc@chromium.org</owner>
+  <summary>Socket connected status in SpdySession::CreateStream.</summary>
+</histogram>
+
+<histogram name="Net.SpdySession.PushedAndUnclaimedBytes" units="count">
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    The number of bytes that is pushed but not used when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySession.PushedBytes" units="count">
+  <owner>zhongyi@chromium.org</owner>
+  <summary>
+    The number of bytes that is pushed when the session is closed.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionErrorDetails" enum="SpdyProtocolErrorDetails"
+    units="count">
+  <obsolete>
+    Replaced by SpdySessionErrorDetails2 on 2013-04-19.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    WARNING: r181910 added an enum value in the middle, so don't trust the
+    counts for values 9 and above for Chrome builds after that revision.
+
+    The type of SPDY Protocol error encountered.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionErrorDetails2" enum="SpdyProtocolErrorDetails2"
+    units="count">
+  <owner>bnc@chromium.org</owner>
+  <summary>The type of SPDY Protocol error encountered.</summary>
+</histogram>
+
+<histogram name="Net.SpdySessionErrorDetails_Google"
+    enum="SpdyProtocolErrorDetails" units="count">
+  <obsolete>
+    Replaced by SpdySessionErrorDetails_Google2 on 2013-04-19.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The type of SPDY Protocol error encountered when talking to a google.com
+    server.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionErrorDetails_Google2"
+    enum="SpdyProtocolErrorDetails2" units="count">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    WARNING: r181910 added an enum value in the middle, so don't trust the
+    counts for values 9 and above for Chrome builds after that revision.
+
+    The type of SPDY Protocol error encountered when talking to a google.com
+    server.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionGet" enum="SpdySessionGet" units="count">
+  <owner>bnc@chromium.org</owner>
+  <summary>The type of SPDY Session used when looking up a session.</summary>
+</histogram>
+
+<histogram name="Net.SpdySessionGetPeerAddressNotConnected"
+    enum="BooleanSuccess">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    Whether SpdySession::Get{Peer,Local}Address was called when the connection
+    had no socket.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessions_DataReductionProxy"
+    enum="BooleanDataReductionProxy">
+  <obsolete>
+    Deprecated 7/21/2014. No longer tracked.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The count of SPDY sessions using the data reduction proxy and the count of
+    other SPDY sessions.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionSocketNotConnectedGetLocalAddress"
+    enum="BooleanSuccess">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    SpdySession::GetLocalAddress returned ERR_SOCKET_NOT_CONNECTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionSocketNotConnectedGetPeerAddress"
+    enum="BooleanSuccess">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    SpdySession::GetPeerAddress returned ERR_SOCKET_NOT_CONNECTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySessionsWithStalls">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The count of SPDY Sessions with or without stalls.</summary>
+</histogram>
+
+<histogram name="Net.SpdySettingsCwnd" units="packets">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The congestion window (in pkts) received at the end of a SpdySession.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySettingsCwndSent" units="packets">
+  <obsolete>
+    Deprecated 2016 July with removal of SPDY/3.1.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The congestion window (in pkts) sent at the beginning of a SpdySession.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySettingsReceived" enum="SpdySettingsReceived"
+    units="%">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    Percentage of sessions which received settings from the server.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySettingsRetransRate" units="%">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The Download Retransmission Rate (%) received at the end of a SpdySession.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySettingsRTT" units="ms">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The RTT received at the end of a SpdySession.</summary>
+</histogram>
+
+<histogram name="Net.SpdySettingsSent" enum="SpdySettingsSent" units="%">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>Percentage of sessions which sent settings to the server.</summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamDownloadTime" units="ms">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The time between receiving the first chunk and the last chunk of data on a
+    Spdy stream.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamsAbandonedPerSession">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The number of pushed, but abandoned streams over a single session.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamsPerSession">
+  <owner>bnc@chromium.org</owner>
+  <summary>The number of streams issued over a single session.</summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamsPushedAndClaimedPerSession">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The number of pushed, and used streams over a single session.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamsPushedPerSession">
+  <owner>bnc@chromium.org</owner>
+  <summary>The number of push streams received over a single session.</summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamStallsPerSession">
+  <obsolete>
+    Removed on 2016-10-10.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>The number of stream stalls per session.</summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamTime" units="ms">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The time of a Spdy stream.  Measured from sending the first chunk to
+    receiving the last chunk of data.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyStreamTimeToFirstByte" units="ms">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The time between sending the request and receiving the first chunk of data
+    on a Spdy stream.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdySynStreamCompressionPercentage" units="%">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The percent compression achieved when compression SYN_STREAM frames.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyVersion" enum="ProtocolVersion">
+  <obsolete>
+    Deprecated on 2014-09-11, because the uploaded values were changing as
+    protocols were removed, therefore statistics couldn't be combined across
+    different builds.  Replaced by Net.SpdyVersion2.
+  </obsolete>
+  <owner>rch@chromium.org</owner>
+  <summary>
+    The SPDY protocol version that is used to talk to SPDY servers.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyVersion2" enum="SpdyProtocolVersion">
+  <obsolete>
+    Deprecated on 2016-02-01, because the incorrect bucket count caused data
+    corruption.  Replaced by Net.SpdyVersion3.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The SPDY protocol version that is used to talk to SPDY servers.  Logged
+    every time a SPDY session is initialized.
+  </summary>
+</histogram>
+
+<histogram name="Net.SpdyVersion3" enum="SpdyProtocolVersion">
+  <obsolete>
+    Deprecated 2016 July with removal of SPDY/3.1.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    The SPDY protocol version that is used to talk to SPDY servers.  Logged
+    every time a SPDY session is initialized.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_AuthRootConsistency" enum="SSLAuthRootConsistency">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    The results of comparing the built-in list of known Windows roots against
+    the CERT_AUTH_ROOT_SHA256_HASH_PROP_ID certificate property. Recorded for
+    each certificate verification on Windows.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_CipherSuite" enum="SSLCipherSuite">
+  <owner>agl@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    The SSL/TLS cipher suite that was negotiated. Recorded for each SSL/TLS
+    connection in the socket pool where Connect() succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Error" enum="NetErrorCodes">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Counts of specific error codes returned when opening an SSL connection.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Error_FastRadioPadding"
+    enum="NetErrorCodes">
+  <obsolete>
+    Removed 7/21/2015. No longer tracked.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Counts of specific error codes returned when opening an SSL connection for
+    an endpoint which is eligible for fastradio padding.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency" units="ms">
+  <obsolete>
+    Replaced by Net.SSL_Connection_Latency_2 on 2014-10-21.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>Time from when the Connect() starts until it completes.</summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_2" units="ms">
+  <owner>agl@chromium.org</owner>
+  <summary>Time from when the Connect() starts until it completes.</summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 7/21/2014. No longer tracked.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes when using the data
+    reduction proxy. This includes certificate retrieval and verification.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Full_Handshake" units="ms">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for full handshakes.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Google" units="ms">
+  <obsolete>
+    Replaced by Net.SSL_Connection_Latency_Google2 on 2014-10-21.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for google.com and
+    any subdomain of it.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Google2" units="ms">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for google.com and
+    any subdomain of it.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Google_Full_Handshake" units="ms">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for google.com and
+    any subdomain of it for full handshakes.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Google_No_Revocation_Checking"
+    units="ms">
+  <obsolete>
+    Removed in 2011.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for google.com and
+    any subdomain of it. This only includes users in a 50% field trial that
+    disables revocation checking for certificate pinned sites.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Google_Resume_Handshake" units="ms">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for google.com and
+    any subdomain of it for resumption handshakes.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Google_Revocation_Checking"
+    units="ms">
+  <obsolete>
+    Removed in 2011.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for google.com and
+    any subdomain of it. This only includes users not in a 50% field trail that
+    disables revocation for certificate pinned sites.
+  </summary>
+</histogram>
+
+<histogram
+    name="Net.SSL_Connection_Latency_PostQuantumSupported_Full_Handshake"
+    units="ms">
+  <owner>mab@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes (full handshakes
+    only), for a set of domains that we expect to always offer the experimental
+    post-quantum (CECPQ1) ciphersuites.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_Latency_Resume_Handshake" units="ms">
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes for resumption
+    handshakes.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_Connection_PostQuantum_Negotiated"
+    enum="BooleanSupported">
+  <owner>mab@chromium.org</owner>
+  <summary>
+    For only browsers in the post-quantum (CECPQ1) ciphersuite experiment,
+    counts the full TLS handshakes where CECPQ1 was, or was not, negotiated on
+    hosts where we expect it to be negotiated.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_EVCertificateCTCompliance"
+    enum="CTRequirementCompliance">
+  <obsolete>
+    Deprecated as of 01/2016.
+  </obsolete>
+  <owner>eranm@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    The state of compliance with Certificate Transparency presence requirements
+    for each EV certificate. An EV certificate could be non-compliant (in which
+    case it loses the EV status), comply through inclusion in the EV whitelist
+    or have the required number of Signed Certificate Timestamps. This metric
+    will gauge adoption rate of Certificate Transparency and will help identify
+    when the EV whitelist is no longer needed. Emitted during every SSL
+    connection establishment, but only if the client is checking compliance with
+    Certificate Transparency requirements (currently guarded by a Finch
+    experiment).
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_EVCertificateInWhitelist" enum="Boolean">
+  <owner>eranm@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether an EV certificate is present in the Certificate Transparency
+    whitelist. Emitted once for every EV certificate encountered (during SSL
+    connection establishment), but only if the client has a valid whitelist.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_EVCTCompliance" enum="EVCTCompliance">
+  <owner>eranm@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    The state of compliance with Certificate Transparency presence requirements
+    for each EV certificate. An EV certificate could be non-compliant (in which
+    case it loses the EV status), comply through inclusion in the EV whitelist
+    or comply with the CT certificate policy. This metric will gauge adoption
+    rate of Certificate Transparency and will help identify when the EV
+    whitelist is no longer needed. Emitted during every SSL connection
+    establishment.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_EVWhitelistValidityForNonCompliantCert"
+    enum="EVWhitelistStatus">
+  <owner>eranm@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether the client holds a valid EV Certificates whitelist or not. Only
+    emitted when an EV cert that is not compliant with the Certificate
+    Transparency requirement is encountered. This histogram is intended to be
+    short-lived and help determine if EV certificates are considered
+    non-compliant because they are not whitelisted or if the client does not
+    hold a valid instance of the whitelist.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_KeyExchange.DHE">
+  <obsolete>
+    Removed September 2016.
+  </obsolete>
+  <owner>sigbjorn@opera.com</owner>
+  <owner>agl@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Bit strength of the key exchange for DHE. Recorded for each SSL/TLS
+    connection in the socket pool where Connect() succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_KeyExchange.ECDHE" enum="ECDHECurves">
+  <owner>sigbjorn@opera.com</owner>
+  <owner>agl@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    The curve used for key exchange for ECDHE. Recorded for each SSL/TLS
+    connection in the socket pool where Connect() succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSL_KeyExchange.RSA">
+  <obsolete>
+    Removed May 2016.
+  </obsolete>
+  <owner>sigbjorn@opera.com</owner>
+  <owner>agl@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Bit strength of the key exchange for RSA. Recorded for each SSL/TLS
+    connection in the socket pool where Connect() succeeds. See |SSL_SESSION|'s
+    key_exchange_info for more information.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLCertBlacklisted">
+  <obsolete>
+    Removed on 01/2016. Only ever measured blacklisted Comodo serials, not any
+    of the other blacklisted certificates and keys.
+  </obsolete>
+  <owner>agl@chromium.org</owner>
+  <summary>
+    Counts the number of times that users have hit blacklisted certificates. The
+    indexes match up to the indexes in
+    net/base/x509_certificate.cc:IsBlacklisted. The details of the certificates
+    in question is confidential.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLCertVerificationTime" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>Time to complete a certificate verification (success case).</summary>
+</histogram>
+
+<histogram name="Net.SSLCertVerificationTimeError" units="ms">
+  <owner>rsleevi@chromium.org</owner>
+  <summary>Time to complete a certificate verification (error case).</summary>
+</histogram>
+
+<histogram name="Net.SSLFallbackErrorCode" enum="NetErrorCodes">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each successful HTTPS request which used the TLS version fallback, the
+    error code of the last failed attempt.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLFallbackFailureState" enum="SSLFailureState">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each successful HTTPS request which used the TLS version fallback, the
+    type of handshake failure of the last failed attempt.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLHostInfoDNSLookup" units="ms">
+  <obsolete>
+    Removed in 2011.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time to complete a DNS lookup for a DNS CAA record.</summary>
+</histogram>
+
+<histogram name="Net.SSLHostInfoDNSLookupDelayMs" units="ms">
+  <obsolete>
+    Removed in 2011.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time that we would have wasted had we waited for a CAA lookup in order to
+    validate a certificate.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLHostInfoVerificationTimeMs" units="ms">
+  <obsolete>
+    Removed in 2012.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time to complete a speculative certificate verification.</summary>
+</histogram>
+
+<histogram name="Net.SSLNegotiatedAlpnProtocol"
+    enum="SSLNegotiatedAlpnProtocol">
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    For each TLS handshake, whether ALPN was negotiated; and if so, the
+    negotiated protocol.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLProtocolErrorCipher" enum="SSLCipherSuite">
+  <obsolete>
+    Removed in March 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The cipher suite used when the corresponding operation on an SSLClientSocket
+    fails with ERR_SSL_PROTOCOL_ERROR. This histogram will be removed when
+    https://crbug.com/593963 is resolved.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLProtocolErrorReason" enum="BoringSSLReasonCode">
+  <obsolete>
+    Removed in March 2016.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The internal, version-specific BoringSSL error reason reported when the
+    corresponding operation on an SSLClientSocket fails with
+    ERR_SSL_PROTOCOL_ERROR. This histogram will be removed when
+    https://crbug.com/593963 is resolved.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLProtocolNegotiation" enum="SSLProtocolNegotiation">
+  <obsolete>
+    Superseded by Net.SSLNegotiatedAlpnProtocol in 2016 August.
+  </obsolete>
+  <owner>bnc@chromium.org</owner>
+  <summary>
+    TLS extension used to negotiate protocol (ALPN or NPN); in case of NPN,
+    whether the protocol is indeed supported by both the client and the server
+    or is a fallback because of no overlap; and the negotiated protocol itself.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLServerKeyExchangeHash" enum="SSLHashAlgorithm">
+  <obsolete>
+    Replaced by Net.SSLSignatureAlgorithm.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each SSL connection with a full handshake using a DHE- or ECDHE-based
+    key exchange, the hash function used in the ServerKeyExchange signature.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLSessionVersionMatch" enum="BooleanMatched">
+  <obsolete>
+    Removed on 2015-11-10.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each SSL connection that resumed a session, whether the session was
+    resumed at the same version it was established at. This is only recorded in
+    BoringSSL ports.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLSignatureAlgorithm" enum="SSLSignatureAlgorithm">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    For each SSL connection with a full handshake using a DHE- or ECDHE-based
+    key exchange, the signature algorithm used to authenticate the peer. In TLS
+    1.2, this is the signature on the ServerKeyExchange message. (Note: Although
+    the ECDSA values specify a curve, the curve is only enforced in TLS 1.3.)
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLv3FallbackToRenegoPatchedServer"
+    enum="TLSRenegotiationPatched">
+  <obsolete>
+    Removed on 2014-08-20.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times that we have performed SSLv3 fallback and found a TLS
+    renegotiation patched server.
+  </summary>
+</histogram>
+
+<histogram name="Net.SSLVerificationMerged">
+  <obsolete>
+    Removed in 2012.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Was a speculative certificate verification used?</summary>
+</histogram>
+
+<histogram name="Net.SSLVerificationMergedMsSaved" units="ms">
+  <obsolete>
+    Removed in 2012.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time saved by a speculative certificate vertification.</summary>
+</histogram>
+
+<histogram name="Net.SSLVersion" enum="SSLOrQUICVersion">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The SSL/TLS version that was negotiated. Recorded for each SSL/TLS
+    connection in the socket pool where Connect() succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCP_Connection_Idle_Sockets">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Number of idle sockets when the Connect() succeeded.</summary>
+</histogram>
+
+<histogram name="Net.TCP_Connection_Latency" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes.  Only times under 10
+    minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCP_Connection_Latency_IPv4_No_Race" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes when the network
+    address only contains IPv4 addresses.  Only times under 10 minutes are
+    logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCP_Connection_Latency_IPv4_Wins_Race" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes when the IPv4
+    fallback connection won the race against IPv6.  Only times under 10 minutes
+    are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCP_Connection_Latency_IPv6_Raceable" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes when we race an IPv6
+    connection against an IPv4 connection with a 300ms delay.  Only times under
+    10 minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCP_Connection_Latency_IPv6_Solo" units="ms">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Time from when the Connect() starts until it completes when the network
+    address only contains IPv6 addresses.  Only times under 10 minutes are
+    logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.TcpFastOpenSocketConnection" enum="TcpSocketStatus">
+  <owner>jri@chromium.org</owner>
+  <summary>
+    For sockets for which a TCP Fast Open protocol might be used, the result of
+    trying to use it.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_ReusedSocket">
+  <obsolete>
+    see SocketIdleTimeBeforeNextUse_ReusedSocket_TCPforSOCKS
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an already used TCP socket sat idle before being used for a SOCKS
+    request.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCPForSOCKSSocketIdleTimeBeforeNextUse_UnusedSocket">
+  <obsolete>
+    see SocketIdleTimeBeforeNextUse_UnusedSocket_TCPforSOCKS
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an unused TCP socket sat idle before being used for a SOCKS
+    request.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCPForSOCKSSocketRequestTime" units="ms">
+  <obsolete>
+    see SocketRequestTime_TCPforSOCKS
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from initial SOCKSClientSocketPool::RequestSocket() call until
+    successfully acquiring a connected TCP socket.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCPForSOCKSSocketType" enum="HttpSocketType">
+  <obsolete>
+    see SocketType_TCPforSOCKS
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The counts of the type of sockets returned by the TCP pool used by the SOCKS
+    pool.
+  </summary>
+</histogram>
+
+<histogram name="Net.TcpRtt.AtDisconnect" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The kernel's estimated TCP round trip time. Recorded for each TCP socket, at
+    the time it is disconnected.
+  </summary>
+</histogram>
+
+<histogram name="Net.TCPSocketType" enum="HttpSocketType">
+  <obsolete>
+    Was only used for HTTP[S] connections, renamed to Net.HTTPSocketType.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The counts of the type of TCP socket returned.</summary>
+</histogram>
+
+<histogram name="Net.ThreadHopResourceThrottleTime" units="ms">
+  <obsolete>
+    Experiment complete, code removed.
+  </obsolete>
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The time it took to do an IO to UI round-trip in the
+    ThreadHopResourceThrottle. This is part of an experiment to determine the
+    feasibility to moving some high-level resource loading checks to the UI
+    thread.
+  </summary>
+</histogram>
+
+<histogram name="Net.TokenBinding.HeaderCreationTime" units="ms">
+  <owner>nharper@chromium.org</owner>
+  <summary>Time spent creating a Token-Binding header.</summary>
+</histogram>
+
+<histogram name="Net.TokenBinding.KeyMatch" enum="TokenBinding.KeyMatch">
+  <owner>nharper@chromium.org</owner>
+  <summary>
+    Logs on each request that is sent on a connection where Channel ID was sent
+    whether the key that would be used for Token Binding matches the key used
+    for Channel ID.
+  </summary>
+</histogram>
+
+<histogram name="Net.TokenBinding.StoreEphemerality"
+    enum="TokenBinding.StoreEphemerality">
+  <owner>nharper@chromium.org</owner>
+  <summary>
+    For each request to accounts.google.com on a connection where Channel ID was
+    sent, this logs whether the Cookie store and the Channel ID store were
+    ephemeral or persistent.
+  </summary>
+</histogram>
+
+<histogram name="Net.TokenBinding.Support" enum="TokenBinding.Support">
+  <owner>nharper@chromium.org</owner>
+  <summary>
+    The number of secure HTTP requests broken down by support for Token Binding,
+    indicating if Token Binding was negotiated and supported by both client and
+    server, or why it wasn't if not.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Bandwidth" units="KB/s">
+  <obsolete>
+    Discontinued as of 4/12/09
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Effective bandwidth in KByte/Second of transactions logged to
+    Transaction_Latency histogram.  Note that only samples durations greater
+    than zero ms, and less than 1 hour are tallied into this ratio.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Connected" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from the when the network transaction is requested, until the first
+    byte of the header is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Connected_New" units="ms">
+  <obsolete>
+    Replaced by Net.Transaction_Connected_New_b.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When a new connection is established, the time from the when the network
+    transaction is requested, until the first byte of the header is received.
+    Only items under 10 minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Connected_New_b" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When a new connection is established, the time from the when the network
+    transaction is requested, until the first byte of the header is received.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Connected_Under_10" units="ms">
+  <obsolete>
+    Replaced by Net.Transaction_Connected.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from the when the network transaction is requested, until the first
+    byte of the header is received.  Only items under 10 minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency" units="ms">
+  <obsolete>
+    Replaced by Net.Transaction_Latency_b.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from first byte sent until last byte received by the new network stack.
+    Only items under 1 hour are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_b" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from first byte sent until last byte received by the new network stack.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_Total" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a network transaction is requested until last byte received
+    by the new network stack.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_Total_New_Connection" units="ms">
+  <obsolete>
+    Deprecated as of 11/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When an existing TCP/IP connection is NOT reused, the time from when a
+    network transaction is requested until last byte received by the new network
+    stack.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_Total_New_Connection_Under_10"
+    units="ms">
+  <obsolete>
+    Replaced by Net.Transaction_Latency_Total_New_Connection.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When an existing TCP/IP connection is NOT reused, the time from when a
+    network transaction is requested until last byte received by the new network
+    stack.  Only items under 10 minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_Total_Under_10" units="ms">
+  <obsolete>
+    Replaced by Net.Transaction_Latency_Total.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a network transaction is requested until last byte received
+    by the new network stack.  Only items under 10 minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_Under_10" units="ms">
+  <obsolete>
+    Replaced by Net.Transaction_Latency.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from first byte sent until last byte received by the new network stack.
+    Only items under 10 minutes are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.Transaction_Latency_WinHTTP" units="ms">
+  <obsolete>
+    Deprecated a long time ago.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from first byte sent until last byte received with old WinHTTP network
+    stack.  Only items under 1 hour are logged.
+  </summary>
+</histogram>
+
+<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_ReusedSocket">
+  <obsolete/>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an already used TCP socket sat idle before being used (either for
+    direct or non-socks use).
+  </summary>
+</histogram>
+
+<histogram name="Net.TransportSocketIdleTimeBeforeNextUse_UnusedSocket">
+  <obsolete/>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time an unused TCP socket sat idle before being used (either for direct
+    or non-socks use).
+  </summary>
+</histogram>
+
+<histogram name="Net.TransportSocketRequestTime" units="ms">
+  <obsolete/>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from initial ClientSocketPool::RequestSocket() call until successfully
+    acquiring a connected socket (either for direct or non-socks use).
+  </summary>
+</histogram>
+
+<histogram name="Net.TransportSocketType" enum="HttpSocketType">
+  <obsolete/>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The counts of the type of sockets returned by the TCP pool (either for
+    direct or non-socks use).
+  </summary>
+</histogram>
+
+<histogram name="Net.UdpSocketBindErrorFromPosix" units="PosixError">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Posix error code from call to bind() UDP socket.</summary>
+</histogram>
+
+<histogram name="Net.UdpSocketBindErrorFromWinOS" units="WinError">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Windows error code from call to bind() UDP socket.</summary>
+</histogram>
+
+<histogram name="Net.UdpSocketRandomBindErrorCode" enum="NetErrorCodes">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Chromium error code from call to RandomBind() UDP socket.</summary>
+</histogram>
+
+<histogram name="Net.UDPSocketWinClose" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The time spent in closesocket call in UDPSocketWin::Close.</summary>
+</histogram>
+
+<histogram name="Net.URLRequest_SetReferrer_IsEmptyOrValid" enum="Boolean">
+  <obsolete>
+    Deprecated 6/23/2014. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>True if a URLRequest's referrer is empty or valid when set.</summary>
+</histogram>
+
+<histogram name="Net.WebSocket.DeflateMode"
+    enum="WebSocketNewPerMessageDeflateContextTakeoverMode">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Count the number of WebSockets that accepted permessage-deflate extension
+    for each context take over mode. Used by the new Chromium-based WebSocket
+    implementation.
+  </summary>
+</histogram>
+
+<histogram name="Net.WebSocket.Duration" units="ms">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    The time from a WebSocket is successfully opened until it's closed. Used to
+    study how WebSockets are used.
+  </summary>
+</histogram>
+
+<histogram name="Net.WebSocket.ErrorCodes" enum="NetErrorCodes">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Positive net error codes that WebSockets end with, including OK and ABORTED.
+  </summary>
+</histogram>
+
+<histogram name="Net.WebSocket.HandshakeResult"
+    enum="WebSocketNewHandshakeResult">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Results of WebSocket handshakes. Use this histogram as a baseline for
+    investigating feature usage counters.
+  </summary>
+</histogram>
+
+<histogram name="Net.WebSocket.ResponseCode" enum="HttpResponseCode">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>All HTTP status codes seen during WebSocket handshakes.</summary>
+</histogram>
+
+<histogram name="Net.Wifi.InterfaceCount">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>
+    The number of Wi-fi adapters on the computer. Because the histogram is
+    logged each time Chrome performs a Wi-fi scan, it's better to see results in
+    the &quot;user count&quot; view.
+  </summary>
+</histogram>
+
+<histogram name="Net.Wifi.LbsLatency" units="ms">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>The time that a request to Location Based Services takes.</summary>
+</histogram>
+
+<histogram name="Net.Wifi.ScanLatency" units="ms">
+  <owner>mvanouwerkerk@chromium.org</owner>
+  <summary>The time that a Wi-fi scan takes.</summary>
+</histogram>
+
+<histogram name="Net.WpadQuickCheckFailure" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Duration of time that a failing WPAD QuickCheck takes. WPAD QuickCheck does
+    a name lookup for &quot;wpad&quot; and times out quickly to fail fast when
+    there's no WPAD server on the network.
+  </summary>
+</histogram>
+
+<histogram name="Net.WpadQuickCheckSuccess" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Duration of time that a successful WPAD QuickCheck takes. WPAD QuickCheck
+    does a name lookup for &quot;wpad&quot; and times out quickly to fail fast
+    when there's no WPAD server on the network.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.0.NetworkError" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The network error, if any, of the first pipeline connectivity request.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.0.ResponseCode">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The HTTP response code, if any, of the first pipeline connectivity response.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.0.Status" enum="HttpPipelineStatus">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The result of the first pipeline connectivity request.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.1.NetworkError" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The network error, if any, of the second pipeline connectivity request.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.1.ResponseCode">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The HTTP response code, if any, of the second pipeline connectivity
+    response.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.1.Status" enum="HttpPipelineStatus">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The result of the second pipeline connectivity request.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.2.NetworkError" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The network error, if any, of the third pipeline connectivity request.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.2.ResponseCode">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The HTTP response code, if any, of the third pipeline connectivity response.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.2.Status" enum="HttpPipelineStatus">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The result of the third pipeline connectivity request.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.3.NetworkError" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The network error, if any, of the fourth pipeline connectivity request.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.3.ResponseCode">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The HTTP response code, if any, of the fourth pipeline connectivity
+    response.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.3.Status" enum="HttpPipelineStatus">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The result of the fourth pipeline connectivity request.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.4.NetworkError" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The network error, if any, of the fifth pipeline connectivity request.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.4.ResponseCode">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The HTTP response code, if any, of the fifth pipeline connectivity response.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.4.Status" enum="HttpPipelineStatus">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The result of the fifth pipeline connectivity request.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.5.NetworkError" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The network error, if any, of the stats pipeline connectivity request.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.5.ResponseCode">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The HTTP response code, if any, of the stats pipeline connectivity response.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.5.Status" enum="HttpPipelineStatus">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The result of the stats pipeline connectivity request.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.AllHTTP11" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    True if all requests received by the pipelining test server were HTTP/1.1.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.CanarySuccess" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    True if the non-pipelined canary request sent immediately before the
+    pipelining test requests succeeded. Note that if this fails, the rest of the
+    NetConnectivity.Pipeline.* stats are not collected.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.Depth">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The maximum depth of pipelined requests received by the test server.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Pipeline.Success" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 05/2014, related field trial already long expired.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>True if the entire pipeline connectivity trial passed.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.Sent21">
+  <obsolete>
+    Deprecated 6/25/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
+    rapidly as possible, just after successfully sending an UMA upload. Each
+    packet was numbered, as was its ACK sent back by Google. If no packets (of
+    the 21) were ever ACKed, then the port is assumed to be blocked, and no data
+    is recorded in this histogram. If the port is not blocked, then this
+    histogram shows the number of echo responses received from the first
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Sent21.AckReceivedForNthPacket">
+  <obsolete>
+    Deprecated 6/25/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
+    rapidly as possible, just after successfully sending an UMA upload. Each
+    packet was numbered, as was its ACK sent back by Google. This histogram
+    records, for each packet number, how often we received an ACK for that
+    packet.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.Sent21.GotAnAck" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 6/25/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP at port 6121 as
+    rapidly as possible, just after successfully sending an UMA upload. If no
+    packets (of the 21) were ever ACKed, then the port is assumed to be blocked.
+    The histogram shows if we ever got an ACK for a packet in our series of 21.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Fail.100B.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 100 bytes of TCP data unsuccessfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Fail.1k.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Status"
+    enum="NetConnectivityProtocolStatus">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Status for TCP protocol for echoing</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Status.100B" enum="NetConnectivityStatus">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Status for echoing 100 bytes of TCP data.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Status.1K" enum="NetConnectivityStatus">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Status for echoing 1K bytes of TCP data.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Success" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for TCP protocol for echoing</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Success.100B.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 100 bytes of TCP data successfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.TCP.Success.1K.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 1K bytes of TCP data successfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Fail.100B.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 100 bytes of UDP data unsuccessfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Fail.1k.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 1K bytes of UDP data successfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.PacketLoss">
+  <obsolete>
+    Deprecated 6/25/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome sends 4 UDP packets in a row to test to see if there is a
+    probabalistic dependency in packet loss for consecutive packets.  We record
+    a bit vector of packets received, where the least significant bit is a 1 if
+    the first packet was received, etc.  For example, if packets 1 and 3 are
+    received, but packets 2 and 4 are lost, then we'd record a sample of binary
+    0101B, or 5.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.PacketLoss6">
+  <obsolete>
+    Deprecated 6/25/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome sends 6 UDP packets in a row to test to see if there is a
+    probabalistic dependency in packet loss for consecutive packets.  We record
+    a bit vector of packets received, where the least significant bit is a 1 if
+    the first packet was received, etc.  For example, if all packets other than
+    packet 2 and 4 are responded to, then we'd have a sample (in binary) of
+    110101B, or 53.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Status"
+    enum="NetConnectivityProtocolStatus">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Status for UDP protocol for echoing</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Status.100B" enum="NetConnectivityStatus">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Status for echoing 100 bytes of UDP data.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Status.1K" enum="NetConnectivityStatus">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Status for echoing 1K bytes of UDP data.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Success" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for UDP protocol for echoing</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Success.100B.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 100 bytes of UDP data successfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity.UDP.Success.1K.RTT" units="ms">
+  <obsolete>
+    Deprecated 4/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The RTT for echoing 1k bytes of UDP data successfully.</summary>
+</histogram>
+
+<histogram name="NetConnectivity2.Send6.PacketsSent">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This histogram records how many packets (out of 6 attempted) were sent via
+    UDP as rapidly as possible, just after successfully sending an UMA upload.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity2.Send6.SeriesAcked">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome sends 6 UDP packets in a row to test to see if there is a
+    probabalistic dependency in packet loss for consecutive packets.  We record
+    a bit vector of packets received, where the least significant bit is a 1 if
+    the first packet was received, etc.  For example, if all packets other than
+    packet 2 and 4 are responded to, then we'd have a sample (in binary) of
+    110101B, or 53.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity2.Sent21">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP as rapidly as
+    possible, just after successfully sending an UMA upload. Each packet was
+    numbered, as was its ACK sent back by Google. If no packets (of the 21) were
+    ever ACKed, then the port is assumed to be blocked, and no data is recorded
+    in this histogram. If the port is not blocked, then this histogram shows the
+    number of echo responses received from the first
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP as rapidly as
+    possible, just after successfully sending an UMA upload. Each packet was
+    numbered, as was its ACK sent back by Google. This histogram records, for
+    each packet number, how often we received an ACK for that packet.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity2.Sent21.GotAnAck" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP as rapidly as
+    possible, just after successfully sending an UMA upload. If no packets (of
+    the 21) were ever ACKed, then the port is assumed to be blocked. The
+    histogram shows if we ever got an ACK for a packet in our series of 21.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity2.Sent21.PacketsSent">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This histogram records how many packets (out of 21 attempted) were sent via
+    UDP as rapidly as possible, just after successfully sending an UMA upload.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity3">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, 21 packets were sent to Google via UDP on port 443 or
+    6121.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.100B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.1200B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.443.500B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.100B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.1200B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.6121.500B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.443.100B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.443.1200B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.443.500B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.100B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.1200B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.6121.500B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent">
+  <obsolete>
+    Deprecated 9/2012. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This histogram records how many packets (out of 6 attempted) were sent via
+    UDP as rapidly as possible, just after successfully sending an UMA upload.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.443.100B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.443.1200B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.443.500B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.6121.100B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.6121.1200B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.6121.500B.PacketDelay"
+    units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="NetConnectivity4">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, a few packets were sent from Google to clients via UDP
+    on port 443 or 80 to perform net connectivity test.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity5">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    In this experiment, a few packets were sent from Google to clients via UDP
+    on port 443 or 80 to perform net connectivity test.
+  </summary>
+</histogram>
+
+<histogram name="NetConnectivity5.TestFailed.WritePending"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Next NetConnectivity5 experiment weren't started because there is an
+    outstading pending write.
+  </summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.Activation" units="ms">
+  <owner>benchan@chromium.org</owner>
+  <summary>The time the Gobi modem takes to complete activation.</summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.Connect" units="ms">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The time the Gobi modem takes to connect to the cellular network.
+  </summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.Disconnect" units="ms">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The time the Gobi modem takes to disconnect from the cellular network.
+  </summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.FirmwareDownload.Attempts">
+  <owner>benchan@chromium.org</owner>
+  <summary>Number of attempts taken to install Gobi firmware.</summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.FirmwareDownload.Time" units="ms">
+  <owner>benchan@chromium.org</owner>
+  <summary>The time it takes to install Gobi firmware.</summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.Registration" units="ms">
+  <owner>benchan@chromium.org</owner>
+  <summary>
+    The time the Gobi modem takes to register on the cellular network.
+  </summary>
+</histogram>
+
+<histogram name="Network.3G.Gobi.SetPower" enum="Network3GGobiError">
+  <owner>benchan@chromium.org</owner>
+  <summary>Errors experienced during Gobi device powerup.</summary>
+</histogram>
+
+<histogram name="Network.Cellular.TimeOnline" units="seconds">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using Cellular to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).
+  </summary>
+</histogram>
+
+<histogram name="Network.Cellular.TimeToConfig" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join a 3G/Cellular
+    network and configure Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Cellular.TimeToOnline" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that a
+    3G/Cellular network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Cellular.TimeToPortal" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that a
+    3G/Cellular network is in a captive portal after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Cellular.UsageRequestStatus"
+    enum="NetworkCellularUsageRequestStatus">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Chrome OS cellular usage API request status codes.</summary>
+</histogram>
+
+<histogram name="Network.Ethernet.TimeOnline" units="seconds">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using Ethernet to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).
+  </summary>
+</histogram>
+
+<histogram name="Network.Ethernet.TimeToConfig" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join a wired
+    Ethernet network and configure Layer 3 state (typically acquire a DHCP
+    lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Ethernet.TimeToOnline" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    Ethernet network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Ethernet.TimeToPortal" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    Ethernet network is in a captive portal after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.MigrationNssToPem"
+    enum="MigrationNssToPemNetworkTypes">
+  <obsolete>
+    Deprecated 8/2015.
+  </obsolete>
+  <owner>cschuet@chromium.org</owner>
+  <summary>
+    Chrome OS metric counting the number of network configurations that
+    contained a NSS nickname identifying a CA certificate, which triggered the
+    migration to PEM encoding. This metric doesn't consider whether the
+    migration was successful but once a migration was successful the nickname is
+    removed.
+  </summary>
+</histogram>
+
+<histogram name="Network.ServiceErrors" enum="NetworkServiceError">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Chrome OS connection manager service errors seen.</summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.3GPPRegistrationDelayedDrop"
+    enum="NetworkCellular3GPPRegistrationDelayedDrop">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of cellular network
+    flakes. A network flake occurs when the signal strength goes below detection
+    level for a short duration.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.AutoConnectTotalTime" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the total amount of time spent
+    from the start of the first auto-connect request until when the cellular
+    modem successfully connects to the network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.AutoConnectTries">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of auto-connect
+    tries that were attempted before the cellular modem successfully connected
+    to the network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.DevicePresenceStatus"
+    enum="BooleanPresent">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the presence of a Cellular device in
+    the system. A sample is emitted once every 3 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.DHCPOptionFailureDetected"
+    enum="NetworkDHCPOptionFailure">
+  <obsolete>
+    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the number of DHCP option failures
+    encountered by Shill.  This indicates that Shill is using minimal DHCP
+    options due to suspected MTU issues on the return path from the DHCP server
+    back to the client.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.Disconnect"
+    enum="NetworkDisconnectType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric that tracks whether the cellular network was
+    disconnected due to an error or was explicitly disconnected by the user.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.Drop" enum="NetworkCellularTechnology">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS cellular network metric that tracks the number of drops based on
+    the network technology.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.ExpiredLeaseLengthSeconds"
+    units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the length of a lease for a
+    cellular network at the time it expired without the DHCP client being able
+    to renew it.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.IPv6ConnectivityStatus"
+    enum="IPv6ConnectivityStatus">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the presence of complete IPv6
+    configuration at the time when cellular connection is established.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.NetworkConnectionIPType"
+    enum="NetworkConnectionIPType">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the types of IP configuration used for
+    establishing cellular connections.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.OutOfCreditsReason"
+    enum="NetworkCellularOutOfCreditsReason">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS cellular network metric that tracks the number of out-of-credits
+    detected based on the cause that triggered the out-of-credits.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.PortalAttempts">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of portal detection
+    attempts per pass for a cellular network. This includes failure, timeout and
+    successful attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.PortalAttemptsToOnline">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the total number of portal
+    detection attempts performed for a cellular network between the Connected
+    and Online state. This includes failure, timeout and successful attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.PortalResult"
+    enum="NetworkPortalResult">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the result of portal detections
+    for a cellular network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.SignalStrengthBeforeDrop">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the signal strength (0-100) of the
+    cellular modem before it dropped from the network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeOnline" units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using cellular to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToConfig" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join a cellular
+    network and configure Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToConnect" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to connect a cellular
+    modem.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToDisable" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to disable a cellular
+    modem.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToEnable" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to enable a cellular
+    modem.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToInitialize" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to initialize a
+    cellular modem.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToOnline" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that a
+    cellular network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToPortal" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that a
+    cellular network is in a captive portal after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Cellular.TimeToScan" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to scan a cellular
+    network and register a modem.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.ConnectionDiagnosticsIssue"
+    enum="ConnectionDiagnosticsIssue">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the connectivity issue diagnosed by the
+    ConnectionDiagnostics class in Shill. This metric is logged each time a
+    ConnectionDiagnostics object completes its diagnostics actions and reports
+    the results to its caller.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.CorruptedProfile" enum="NetworkCorruptedProfile">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS cellular network metric that tracks the number of corrupted
+    profiles encountered by Shill.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DarkResumeActionResult"
+    enum="ShillSuspendTerminationDarkResumeActionResult">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of dark resume
+    actions that successfully complete or fail when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DarkResumeActionsTimeTaken" units="ms">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes dark resume actions to complete when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DarkResumeActionTime" units="ms">
+  <obsolete>
+    Deprecated 01/2015. Migrated to Network.Shill.DarkResumeActionsTimeTaken.
+  </obsolete>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes dark resume actions to complete when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DarkResumeScanNumRetries">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of times a dark resume scan is
+    retried in a single dark resume.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DarkResumeScanRetryResult"
+    enum="DarkResumeScanRetryResult">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks whether dark resume scan retries led to
+    the system suspending from dark resume in a connected state. This metric is
+    only recorded in dark resumes when at least one dark resume scan retry was
+    launched.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DeviceConnectionStatus" enum="ConnectionStatus">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the connection status of
+    the device. A sample is emitted once every 3 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DeviceRemovedEvent" enum="DeviceTechnologyType">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the network device removed events for
+    each device type.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DHCPClientMTUValue" units="bytes">
+  <owner>pstew@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the MTU value proposed by the
+    DHCP server.  A sample is emitted each time the DHCP client completes
+    negotiation with a server.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DHCPClientStatus" enum="NetworkDhcpClientStatus">
+  <owner>pstew@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the current state of the DHCP
+    client.  A sample is emitted each time the DHCP client state changes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.DHCPOptionFailureDetected"
+    enum="NetworkTechnology">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the number of DHCP option failures
+    encountered by Shill for each network technology.  This indicates that Shill
+    is using minimal DHCP options due to suspected MTU issues on the return path
+    from the DHCP server back to the client.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.DevicePresenceStatus"
+    enum="BooleanPresent">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the presence of an Ethernet device in
+    the system. A sample is emitted once every 3 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.DHCPOptionFailureDetected"
+    enum="NetworkDHCPOptionFailure">
+  <obsolete>
+    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the number of DHCP option failures
+    encountered by Shill.  This indicates that Shill is using minimal DHCP
+    options due to suspected MTU issues on the return path from the DHCP server
+    back to the client.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.Disconnect"
+    enum="NetworkDisconnectType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric that tracks whether the Ethernet network was
+    disconnected due to an error or was explicitly disconnected by the user.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.ExpiredLeaseLengthSeconds"
+    units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the length of a lease for
+    an Ethernet network at the time it expired without the DHCP client being
+    able to renew it.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.LinkMonitorBroadcastErrorsAtFailure">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of LinkMonitor
+    broadcast errors that were accrued on an Ethernet network at the time that
+    the link was declaired to be failed.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.LinkMonitorFailure"
+    enum="LinkMonitorFailureType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS metric that signals the type of failure the LinkMonitor
+    encountered which caused it to stop monitoring an Ethernet network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.LinkMonitorResponseTimeSample"
+    units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of milliseconds
+    between an ARP request and a received reply on an Ethernet network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.LinkMonitorSecondsToFailure"
+    units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of seconds from
+    the start of the LinkMonitor until failure on an Ethernet network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.LinkMonitorUnicastErrorsAtFailure">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of LinkMonitor
+    unicast errors that were accrued on an Ethernet network at the time that the
+    link was declaired to be failed.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.PortalAttempts">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of portal detection
+    attempts per pass for an Ethernet network. This includes failure, timeout
+    and successful attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.PortalAttemptsToOnline">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the total number of portal
+    detection attempts performed for an Ethernet network between the Connected
+    and Online state. This includes failure, timeout and successful attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.PortalResult"
+    enum="NetworkPortalResult">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the result of portal detections
+    for an Ethernet network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.TimeOnline" units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using Ethernet to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.TimeToConfig" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join a wired
+    Ethernet network and configure Layer 3 state (typically acquire a DHCP
+    lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.TimeToInitialize" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to initialize an
+    Ethernet device.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.TimeToOnline" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    Ethernet network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Ethernet.TimeToPortal" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    Ethernet network is in a captive portal after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.PPPMTUValue" units="bytes">
+  <owner>gdk@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the MTU value provided by the
+    upstream PPP peer.  A sample is emitted each time the client successfully
+    negotiates an MTU value via PPP.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.ServiceErrors" enum="NetworkServiceError">
+  <owner>quiche@chromium.org</owner>
+  <summary>Chrome OS connection manager service errors seen.</summary>
+</histogram>
+
+<histogram name="Network.Shill.ServicesOnSameNetwork">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of services that are connected
+    to the currently connected network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.SuspendActionResult"
+    enum="ShillSuspendTerminationDarkResumeActionResult">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of suspend actions
+    that successfully complete or fail when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.SuspendActionsTimeTaken" units="ms">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes suspend actions to complete when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.SuspendActionTime" units="ms">
+  <obsolete>
+    Deprecated 01/2015. Migrated to Network.Shill.SuspendActionsTimeTaken.
+  </obsolete>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes suspend actions to complete when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionResult"
+    enum="ShillSuspendTerminationDarkResumeActionResult">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of termination
+    actions that successfully complete or fail when shill terminates. Previously
+    deprecated in 10/2012 and brought back in 10/2014.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionResult.OnSuspend"
+    enum="ShillSuspendTerminationDarkResumeActionResult">
+  <obsolete>
+    Deprecated 10/2014. Migrated to Network.Shill.SuspendActionResult.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of termination
+    actions that successfully complete or fail when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionResult.OnTerminate"
+    enum="ShillSuspendTerminationDarkResumeActionResult">
+  <obsolete>
+    Deprecated 10/2014. Migrated to Network.Shill.TerminationActionResult.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of termination
+    actions that successfully complete or fail when shill terminates.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionsTimeTaken" units="ms">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes termination actions to complete when shill terminates.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionTime" units="ms">
+  <obsolete>
+    Deprecated 01/2015. Migrated to Network.Shill.TerminationActionsTimeTaken.
+  </obsolete>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes termination actions to complete when shill terminates.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionTime.OnSuspend" units="ms">
+  <obsolete>
+    Deprecated 10/2014. Migrated to Network.Shill.SuspendActionTime.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes termination actions to complete when shill suspends.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TerminationActionTime.OnTerminate" units="ms">
+  <obsolete>
+    Deprecated 10/2014. Migrated to Network.Shill.TerminationActionTime.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the time in milliseconds it
+    takes termination actions to complete when shill terminates.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.TimeToDrop" units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network stability metric sampling the time in seconds between the
+    networking going online to going offline. Offline events due to device
+    shutdown or suspend are ignored (along with the online time before that
+    offline event).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.UserInitiatedEvents" enum="UserInitiatedEvent">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the number of user-initiated events.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Vpn.Driver" enum="VPNDriver">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric sampled on each successful VPN connection
+    that tracks the VPN connection type.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Vpn.RemoteAuthenticationType"
+    enum="VPNRemoteAuthenticationType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric sampled on each successful VPN connection
+    that tracks the remote authentication method.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Vpn.TimeOnline" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using VPN to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).  A sample is emitted
+    every time the system transitions from primary connectivity through a VPN to
+    some other type of connectivity.  The value of the sample is the time delta
+    in seconds from the instant the system transitioned to VPN connectivity.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Vpn.TimeToConfig" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to configure Layer 3
+    state on a VPN network (typically acquire a DHCP lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Vpn.TimeToOnline" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that a
+    WiMax network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Vpn.UserAuthenticationType"
+    enum="VPNUserAuthenticationType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric sampled on each successful VPN connection
+    that tracks the user authentication method.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.ApDisconnectReason" enum="WiFiReasonCode">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  Reason code reported when the AP
+    disconnects a WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.ApDisconnectType" enum="WiFiStatusType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  Broad category of reason AP disconnected a
+    WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.ApMode" enum="WiFiApMode">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  The AP mode setting for each successful
+    WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.AutoConnectableServices">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of wifi services available for
+    auto-connect when auto-connect is initiated for wifi device.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.AvailableBSSesAtConnect">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of BSSes (endpoints) available
+    for the currently connecting wifi service.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.Channel" enum="NetworkChannelType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  The channel used for each successful WiFi
+    connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.ClientDisconnectReason"
+    enum="WiFiReasonCode">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  Reason code reported when the client
+    disconnects a WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.ClientDisconnectType" enum="WiFiStatusType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  Broad category of reason client
+    disconnected a WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.DarkResumeUnmatchedScanResultsReceived"
+    enum="DarkResumeUnmatchedScanResultReceived">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks whether any unmatched scan results are
+    received during dark resume cycles. An unmatched scan result is a set of
+    scan results received by shill in response to a scan request that was not
+    sent directly by shill in the same dark resume cycle.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.DarkResumeWakeReason"
+    enum="DarkResumeWakeReason">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the wake reason for dark resume.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.DevicePresenceStatus" enum="BooleanPresent">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the presence of a WiFi device in the
+    system. A sample is emitted once every 3 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.DHCPOptionFailureDetected"
+    enum="NetworkDHCPOptionFailure">
+  <obsolete>
+    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the number of DHCP option failures
+    encountered by Shill.  This indicates that Shill is using minimal DHCP
+    options due to suspected MTU issues on the return path from the DHCP server
+    back to the client.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.Disconnect" enum="NetworkDisconnectType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric that tracks whether an 802.11 wireless
+    network was disconnected due to an error or was explicitly disconnected by
+    the user.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.EapInnerProtocol" enum="EAPInnerProtocol">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric sampled on each successful 802.1x wireless
+    connection that tracks the configured inner authentication method.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.EapOuterProtocol" enum="EAPOuterProtocol">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric sampled on each successful 802.1x wireless
+    connection that tracks the configured outer authentication method.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.ExpiredLeaseLengthSeconds" units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the length of a lease for a
+    WiFi network at the time it expired without the DHCP client being able to
+    renew it.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.FallbackDNSTestResult"
+    enum="FallbackDNSTestResult">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the result of the fallback
+    DNS test. The fallback DNS test is performed when portal detection failed
+    due to DNS failure.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.FrequenciesConnectedEver">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS metric sampling the number of different frequencies (i.e.
+    channels) on which a device has connected to a WiFi network. This value is
+    sampled every time a WiFi connection is established
+    (WPASupplicant::kInterfaceStateCompleted). Note that the word
+    &quot;Ever&quot; in the metric name is misleading. Chrome OS actually ages
+    out historical information, currently after 3 weeks.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.IPv6ConnectivityStatus"
+    enum="IPv6ConnectivityStatus">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the presence of complete IPv6
+    configuration at the time when WiFi connection is established.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.LinkMonitorBroadcastErrorsAtFailure">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of LinkMonitor
+    broadcast errors that were accrued on an 802.11 wireiless network at the
+    time that the link was declaired to be failed.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.LinkMonitorFailure"
+    enum="LinkMonitorFailureType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS metric that signals the type of failure the LinkMonitor
+    encountered which caused it to stop monitoring an 802.11 wireless network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.LinkMonitorResponseTimeSample" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of milliseconds
+    between an ARP request and a received reply on an 802.11 wireless network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.LinkMonitorSecondsToFailure"
+    units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of seconds from
+    the start of the LinkMonitor until failure on an 802.11 wireless network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.LinkMonitorUnicastErrorsAtFailure">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the number of LinkMonitor
+    unicast errors that were accrued on an 802.11 wireless network at the time
+    that the link was declaired to be failed.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.NetworkConnectionIPType"
+    enum="NetworkConnectionIPType">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the types of IP configuration used for
+    establishing WiFi connections.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.NetworkProblemDetected"
+    enum="NetworkProblemType">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the network problems
+    encountered by TrafficMonitor after WiFi connection is established.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.PhyMode" enum="NetworkPhyModeType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  The channel type used for each successful
+    WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.PortalAttempts">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of portal detection
+    attempts per pass for an 802.11 wireless network. This includes failure,
+    timeout and successful attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.PortalAttemptsToOnline">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the total number of portal
+    detection attempts performed for an 802.11 wireless network between the
+    Connected and Online state. This includes failure, timeout and successful
+    attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.PortalResult" enum="NetworkPortalResult">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the result of portal detections
+    for an 802.11 wireless network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.RememberedNetworkCount">
+  <owner>pstew@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of 802.11 wireless
+    networks known by the connection manager at the time a configuration profile
+    has been loaded.  A configuration profile is loaded at each system startup,
+    and when a user logs in.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.RememberedSystemNetworkCount">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of 802.11 wireless networks
+    configured from the system configuration profile. This metric is sampled
+    each time a user configuration profile is loaded, such as when a user logs
+    in.
+
+    It might be surprising to have a system configuration profile metric sampled
+    when a user configuration profile is loaded. But this ensures that we have
+    equal numbers of samples for system and user configuration profiles.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.RememberedUserNetworkCount">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the number of 802.11 wireless networks
+    configured from a user configuration profile. This metric is sampled each
+    time a user configuration profile is loaded, such as when a user logs in.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.ScanResult" enum="WiFiScanResult">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric describing, for a WiFi scan attempt, what
+    scan method is used and whether it ends in a connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.ScanTimeInEbusy" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric describing, for a WiFi scan attempt, how many
+    milliseconds were spent waiting to talk to the kernel/drivers.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.Security" enum="NetworkSecurityType">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric.  The security setting for each successful
+    WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.SignalAtDisconnect" units="negative dBm">
+  <owner>silberst@chromium.org</owner>
+  <summary>
+    Chrome OS network metric indicating the negative of the dBm received signal
+    strength recorded at the time of a WiFi disconnect.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.SignalStrength" units="negative dBm">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric indicating the negative of the dBm received signal
+    strength recorded at the time a successful WiFi connection started.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.StoppedTxQueueLength" units="frames">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric indicating the maximal length of any stopped
+    mac80211 transmit queue. The metric is reported when a queue-status check
+    determines that at least one transmit queue is stopped, and has more than a
+    threshold number of frames queued.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.StoppedTxQueueReason"
+    enum="NetworkQueueStopReason">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric indicating the reason that mac80211 transmit queues
+    were stopped. The metric is reported when a queue-status check determines
+    that at least one queue is stopped, and has more than a threshold number of
+    frames queued.
+
+    One measurement is reported per stop reason, per queue-status check. Reasons
+    that apply to multiple queues are reported only once per queue-status check.
+    Reasons that only apply to queues that have a below-threshold number of
+    frames are skipped.
+
+    Note that, because we may report multiple stop reasons for a single
+    queue-status check, this histogram is not suitable for determining the
+    number of times a queue-status check found that the queues were stopped. To
+    determine that number, use the count of
+    Network.Shill.WiFi.StoppedTxQueueLength reports.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.SuspendDurationWoWOffConnected"
+    units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>kirtika@chromium.org</owner>
+  <summary>
+    Time spent in suspended state, on a resume, for the case when wake on wifi
+    is  disabled (WoWOff), and after resume, the NIC is found to be already
+    connected.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.SuspendDurationWoWOffDisconnected"
+    units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>kirtika@chromium.org</owner>
+  <summary>
+    Time spent in suspended state, on a resume, for the case when wake on wifi
+    is  enabled (WoWOff), and after resume, the NIC is found to be disconnected.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.SuspendDurationWoWOnConnected"
+    units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>kirtika@chromium.org</owner>
+  <summary>
+    Time spent in suspended state, on a resume, for the case when wake on wifi
+    is  enabled (WoWOn), and after resume, the NIC is found to be already
+    connected.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.SuspendDurationWoWOnDisconnected"
+    units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>kirtika@chromium.org</owner>
+  <summary>
+    Time spent in suspended state, on a resume, for the case when wake on wifi
+    is  enabled (WoWOn), and after resume, the NIC is found to be disconnected.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeOnline" units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using WiFi to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeResumeToReady" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time from the resume event
+    to the time when an 802.11 wireless network has configured its Layer 3
+    state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToConfig" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to configure Layer 3
+    state on an 802.11 wireless network (typically acquire a DHCP lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToConnect" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to connect to a WiFi
+    Basic Service Set (which consists of the access point and associated
+    stations on a particular WiFi channel for a specific network).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToInitialize" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to initialize an
+    802.11 wireless device.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToJoin" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join (associate
+    plus authenticate) an 802.11 wireless network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToOnline" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    802.11 wireless network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToPortal" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    802.11 wireless network is in a captive portal after configuring Layer 3
+    state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToScan" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to scan WiFi until a
+    connection is found.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.TimeToScanAndConnect" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time between the beginning
+    of a WiFi scan (if the scan includes both a progressive scan and a full
+    scan, the TimeToScanAndConnect starts with the first scan of the series) and
+    the completion of a successful connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.TransmitBitrateMbps" units="Mbps">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the transmit bitrate in
+    Mbps for the wifi device when it is connected to a network. The bitrate is
+    reported once every minute after the wifi connection is established.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wifi.UnreliableLinkSignalStrength">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric sampling the signal strength (0-100) of the wifi
+    network when it becomes unreliable (experiencing multiple link failures in a
+    short period of time).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.UserInitiatedConnectionFailureReason"
+    enum="ConnectionFailureReason">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the reasons of failed
+    user-initiated WiFi connection attempts. The result of the user-initiated
+    WiFi connection attempts are being tracked by
+    Network.Shill.WiFi.UserInitiatedConnectionResult.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.UserInitiatedConnectionResult"
+    enum="ConnectionResult">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the result of
+    user-initiated WiFi connection attempts.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.VerifyWakeOnWiFiSettingsResult"
+    enum="VerifyWakeOnWiFiSettingsResult">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network diagnostic metric sampling the number of times NIC wake on
+    WiFi settings verification succeeds or fails in shill. This metric is
+    recorded every time wake on WiFi settings are requested and verified after
+    the NIC is programmed with wake on WiFi settings.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.WakeOnWiFiFeaturesEnabledState"
+    enum="WakeOnWiFiFeaturesEnabledState">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric that tracks the wake on WiFi features that
+    are enabled in shill. Recorded once every 10 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.WakeOnWiFiThrottled"
+    enum="WakeOnWiFiThrottled">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks whether wake on WiFi was disabled
+    during a period of system suspension because of too many dark resume wakes.
+    This metric is only recorded for system suspends where wake on WiFi
+    functionality has been programmed into the NIC.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.WakeReasonReceivedBeforeOnDarkResume"
+    enum="WakeReasonReceivedBeforeOnDarkResume">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks whether a wake reason was received
+    during dark resume before executing WakeOnWiFi::OnDarkResume.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.WiFi.WiFiConnectionStatusAfterWake"
+    enum="WiFiConnectionStatusAfterWake">
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    Chrome OS network usage metric that tracks the WiFi connection status after
+    waking from suspend, both when wake on WiFi is enabled and disabled.
+    Recorded 1 second after waking from suspend.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wimax.DevicePresenceStatus"
+    enum="BooleanPresent">
+  <owner>zqiu@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the presence of a WiMax device in the
+    system. A sample is emitted once every 3 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wimax.DHCPOptionFailureDetected"
+    enum="NetworkDHCPOptionFailure">
+  <obsolete>
+    Deprecated 5/2014, and replaced by Network.Shill.DHCPOptionFailureDetected.
+  </obsolete>
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network metric that tracks the number of DHCP option failures
+    encountered by Shill.  This indicates that Shill is using minimal DHCP
+    options due to suspected MTU issues on the return path from the DHCP server
+    back to the client.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wimax.ExpiredLeaseLengthSeconds" units="seconds">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric that tracks the length of a lease for a
+    WiMax network at the time it expired without the DHCP client being able to
+    renew it.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wimax.TimeToConfig" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to configure Layer 3
+    state on a WiMax network (typically acquire a DHCP lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wimax.TimeToInitialize" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to initialize a WiMax
+    device.
+  </summary>
+</histogram>
+
+<histogram name="Network.Shill.Wimax.TimeToOnline" units="ms">
+  <owner>quiche@chromium.org</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that a
+    WiMax network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.TimeToConfig.Cellular" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join a 3G/Cellular
+    network and configure Layer 3 state. Note this metric is deprecated; see
+    Network.Cellular.TimeToConfig.
+  </summary>
+</histogram>
+
+<histogram name="Network.TimeToConfig.Ethernet" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join a wired
+    Ethernet network and configure Layer 3 state (typically acquire a DHCP
+    lease). Note this metric is deprecated; see Network.Ethernet.TimeToConfig.
+  </summary>
+</histogram>
+
+<histogram name="Network.TimeToConfig.Wifi" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to configure Layer 3
+    state on an 802.11 wireless network (typically acquire a DHCP lease). Note
+    this metric is deprecated; see Network.Wifi.TimeToConfig.
+  </summary>
+</histogram>
+
+<histogram name="Network.TimeToDrop" units="seconds">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network stability metric sampling the time in seconds between the
+    networking going online to going offline. Offline events due to device
+    shutdown or suspend are ignored (along with the online time before that
+    offline event).
+  </summary>
+</histogram>
+
+<histogram name="Network.TimeToJoin.Wifi" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join (associate
+    plus authenticate) an 802.11 wireless network. Note this metric is
+    deprecated; see Network.Wifi.TimeToJoin.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.AuthMode" enum="NetworkAuthModeType">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to configure Layer 3
+    state on an 802.11 wireless network (typically acquire a DHCP lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.BitRate" units="bps">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Network metric reporting the download speed test results run at setup time.
+    Recorded at least once per day.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.Channel" enum="NetworkChannelType">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Chrome OS network usage metric.  The channel used for each successful WiFi
+    connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.PhyMode" enum="NetworkPhyModeType">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Chrome OS network usage metric.  The channel type used for each successful
+    WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.RoundTripTime" units="ms">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Network metric reporting the average round trip time to the WiFi gateway.
+    Recorded at least once per day.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.Security" enum="NetworkSecurityType">
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Chrome OS network usage metric.  The security setting for each successful
+    WiFi connection.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.TimeOnline" units="seconds">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network metric sampling the time spent using WiFi to transport
+    data.  These data are mostly useful when summed and compared to TimeOnline
+    for other network technologies (e.g. WiFi vs Cellular).
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.TimeResumeToReady" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time from the resume event
+    to the time when an 802.11 wireless network has configured its Layer 3
+    state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.TimeToConfig" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to configure Layer 3
+    state on an 802.11 wireless network (typically acquire a DHCP lease).
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.TimeToJoin" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to join (associate
+    plus authenticate) an 802.11 wireless network.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.TimeToOnline" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    802.11 wireless network is online after configuring Layer 3 state.
+  </summary>
+</histogram>
+
+<histogram name="Network.Wifi.TimeToPortal" units="ms">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS network performance metric sampling the time to determine that an
+    802.11 wireless network is in a captive portal after configuring Layer 3
+    state.
+  </summary>
+</histogram>
+
+<histogram name="Networks.RememberedShared">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    Number of shared remembered (preferred) networks on Chrome OS. Updated any
+    time the network list changes.
+  </summary>
+</histogram>
+
+<histogram name="Networks.RememberedUnshared">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    Number of private remembered (preferred) networks on Chrome OS. Updated any
+    time the network list changes.
+  </summary>
+</histogram>
+
+<histogram name="Networks.Visible">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    Number of visible (in-range) networks on Chrome OS. Updated any time the
+    network list changes.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.ClockDivergence.Negative" units="seconds">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker observes a tick clock and a wall clock to determine
+    whether a timestamp retrieved from the network in the past can be used to
+    compute a current timestamp. When the tick clock and wall clock diverge from
+    each other, the NetworkTimeTracker must discard the network timestamp
+    because it has no way to compute a reliable current timestamp. Whenever the
+    NetworkTimeTracker discards a network timestamp due to the tick and wall
+    clocks diverging, this histogram records the difference of the tick clock's
+    delta minus the wall clock's delta since the network timestamp was
+    retrieved. For cases where the the tick clock delta is bigger than the wall
+    clock delta, see NetworkTimeTracker.ClockDivergence.Positive.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.ClockDivergence.Positive" units="seconds">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker observes a tick clock and a wall clock to determine
+    whether a timestamp retrieved from the network in the past can be used to
+    compute a current timestamp. When the tick clock and wall clock diverge from
+    each other, the NetworkTimeTracker must discard the network timestamp
+    because it has no way to compute a reliable current timestamp. Whenever the
+    NetworkTimeTracker discards a network timestamp due to the tick and wall
+    clocks diverging, this histogram records the difference of the tick clock's
+    delta minus the wall clock's delta since the network timestamp was
+    retrieved. For cases where the the wall clock delta is bigger than the tick
+    clock delta, see NetworkTimeTracker.ClockDivergence.Negative.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.TimeQueryLatency" units="ms">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
+    the network. This histogram records the latency of each time query.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.UpdateTimeFetchAttempted">
+  <obsolete>
+    Deprecated 08/2016 because it does not provide additional information beyond
+    NetworkTimeTracker.UpdateTimeFetchFailed and
+    NetworkTimeTracker.UpdateTimeFetchValid.
+  </obsolete>
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
+    the network. This histogram increments whenever such a query is attempted.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.UpdateTimeFetchFailed" enum="NetErrorCodes">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
+    the network. This histogram records the request's net error code whenever a
+    secure timestamp fetch results in a network error or a non-200 HTTP status
+    code.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.UpdateTimeFetchValid" enum="BooleanValid">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker makes periodic queries to obtain a secure timestamp over
+    the network. Whenever one of these requests results in a successful 200
+    status code, this histogram records true if the response parsed and
+    validated successfully, and false otherwise.
+  </summary>
+</histogram>
+
+<histogram name="NetworkTimeTracker.WallClockRanBackwards" units="seconds">
+  <owner>estark@chromium.org</owner>
+  <owner>mab@chromium.org</owner>
+  <summary>
+    NetworkTimeTracker observes a tick clock and a wall clock to determine
+    whether a timestamp retrieved from the network in the past can be used to
+    compute a current timestamp. When the NetworkTimeTracker observes that the
+    wall clock ran backwards, the NetworkTimeTracker must discard the network
+    timestamp because it has no way to compute a reliable current timestamp.
+    Whenever the NetworkTimeTracker discards a network timestamp due to the wall
+    clock running backwards, this histogram records the magnitude of the
+    difference of the current wall clock time minus the wall clock time when the
+    network timestamp was retrieved.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ActionAndroid" enum="NewTabPageActionAndroid">
+  <owner>newt@chromium.org</owner>
+  <summary>
+    Actions taken by users from the new tab page on Android. These actions may
+    navigate away from the NTP (e.g. searching in the omnibox or opening a
+    bookmark), but can also happen without navigating away from the NTP (e.g.
+    opening a bookmark in a new tab).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.AnimatedLogoDownloadTime" units="ms">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    The amount of time it takes to download the animated logo. Android only.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.AppsPageDragSource" enum="AppsPageDragSource">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram for the source of app page drags. For any succesful drop onto an
+    apps pane of the NTP, this logs where the drag originated.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.BookmarkActionAndroid"
+    enum="NewTabPageBookmarkActionAndroid">
+  <obsolete>
+    Deprecated on M33 with the change to native NTP.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Actions taken by users on partner bookmarks (editing / renaming) on the NTP
+    on Android.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.CategoryDismissed"
+    enum="ContentSuggestionsCategory">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: A category of content suggestions that was dismissed (by swiping
+    away its empty state card).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The number of suggestion cards that were available at the time an
+    NTP was opened.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.DismissedUnvisited"
+    units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a suggestion card on the NTP that is dismissed,
+    typically by swiping it away. The suggestion had a URL that was NOT visited
+    before. We track the position the suggestion had in the list when the NTP
+    was loaded. This tracked position can be different from the position
+    observed by the user, e.g. when the user dismissed some suggestions from the
+    list before.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.DismissedVisited" units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a suggestion card on the NTP that is dismissed,
+    typically by swiping it away. The suggestion had a URL that was visited
+    before. We track the position the suggestion had in the list when the NTP
+    was loaded. This tracked position can be different from the position
+    observed by the user, e.g. when the user dismissed some suggestions from the
+    list before.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.MenuOpened" units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a suggestion card whose long-press menu was opened,
+    analogous to NewTabPage.ContentSuggestions.Opened.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.MenuOpenedAge" units="ms">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The age of a suggestion card on the NTP whose long-press menu was
+    opened, analogous to NewTabPage.ContentSuggestions.OpenedAge.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore" units="score">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The relevance score of a suggestion card on the NTP whose
+    long-press menu was opened, analogous to
+    NewTabPage.ContentSuggestions.OpenedScore.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.MoreButtonClicked" units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a &quot;More&quot; suggestion card that was clicked
+    on the NTP. A card is considered shown when at least 1/3 of its height is
+    visible on the screen. We track the position the card had in the list when
+    the NTP was loaded. This tracked position can be different from the position
+    observed by the user, e.g. when the user dismissed some suggestions from the
+    list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.MoreButtonShown" units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a &quot;More&quot; suggestion card that was shown
+    on the NTP. A card is considered shown when at least 1/3 of its height is
+    visible on the screen. For each card, at most one impression is recorded per
+    NTP instance. We track the position the card had in the list when the NTP
+    was loaded. This tracked position can be different from the position
+    observed by the user, e.g. when the user dismissed some suggestions from the
+    list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.OpenDisposition"
+    enum="WindowOpenDisposition">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: How an article linked from a suggestion card on the NTP was opened
+    (e.g. plain click, open in new tab, open in incognito).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.Opened" units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a suggestion card on the NTP that is clicked
+    through to the host website of the content. We track the position the
+    suggestion had in the list when the NTP was loaded. This tracked position
+    can be different from the position observed by the user, e.g. when the user
+    dismissed some suggestions from the list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.OpenedAge" units="ms">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The age of a suggestion card on the NTP that is clicked through to
+    the host website of the content. The age is measured from the moment the
+    content has been published.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.OpenedScore" units="score">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The score of a suggestion card on the NTP that is clicked through
+    to the host website of the content. The recorded score is from the moment
+    the suggestion was fetched, it could have changed since.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.Shown" units="index">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The position of a suggestion card that was shown on the NTP. A card
+    is considered shown when at least 1/3 of its height is visible on the
+    screen. For each card, at most one impression is recorded per NTP instance.
+    We track the position the suggestion had in the list when the NTP was
+    loaded. This tracked position can be different from the position observed by
+    the user, e.g. when the user dismissed some suggestions from the list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.ShownAge" units="ms">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The age of a suggestion card that was shown on the NTP. A card is
+    considered shown when at least 1/3 of its height is visible on the screen.
+    For each card, at most one impression is recorded per NTP instance.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.ShownScore" units="score">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The score of a suggestion card that was shown on the NTP. A card is
+    considered shown when at least 1/3 of its height is visible on the screen.
+    For each card, at most one impression is recorded per NTP instance.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.UsageTimeLocal">
+  <owner>markusheintz@chromium.org</owner>
+  <summary>
+    Android: The time of day (in the local timezone) when the user used content
+    suggestions. Recorded for example when the user scrolls to the articles
+    suggestions or opens an article suggestions.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ContentSuggestions.VisitDuration" units="ms">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: Time spent reading the page linked by an opened suggestion card.
+    Exit conditions include the tab not being in the foreground or starting a
+    new navigation.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.DefaultPageType" enum="NtpPaneType">
+  <obsolete>
+    Deprecated 2016-02.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The default pane when the NTP is first opened.</summary>
+</histogram>
+
+<histogram name="NewTabPage.HoverTimeClicked">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram of the time, in milliseconds, users have the cursor over a most
+    visited thumbnail before clicking.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.HoverTimeNotClicked">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram of the time, in milliseconds, users have the cursor over a most
+    visited thumbnail before moving it away from the thumbnail without clicking.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.IconsColor">
+  <owner>newt@chromium.org</owner>
+  <summary>
+    The number of most visited tiles on the new tab page that are displayed
+    using a fallback color (as opposed to having an icon, or simply being gray).
+    Android only.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.IconsGray">
+  <owner>newt@chromium.org</owner>
+  <summary>
+    The number of most visited tiles on the new tab page that are displayed as
+    gray (as opposed to having an icon, or a fallback color). Android only.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.IconsReal">
+  <owner>newt@chromium.org</owner>
+  <summary>
+    The number of most visited tiles on the new tab page that are displayed with
+    the site's icon (as opposed using a fallback color or just gray). Android
+    only.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Interests.ImageDownloadSuccess"
+    enum="BooleanSuccess">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: Whether an attempt to download the image for an interest was
+    successful.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Interests.InterestsFetchSuccess"
+    enum="BooleanSuccess">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: Whether an attempt to fetch the interests for a user was
+    successful.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Interests.NumInterests" units="interests">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The number of interests fetched for a user to display on the NTP.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Languages.UILanguageRatioInTwoTopLanguages"
+    units="%">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: Percentage of how much in browsing is the UI language of Chrome
+    used compared to overall use of the two top languages that are reported to
+    Chrome content suggestion server.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Layout" enum="NTPLayout">
+  <owner>peconn@chromium.org</owner>
+  <summary>
+    Android: A histogram detailing how the NewTabPageLayout is laid out on the
+    device (eg, whether it fits fully above the fold or not). This is logged
+    once per NewTabPageLayout creation (so once per NTP).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.LoadTime" units="ms">
+  <owner>fserb@chromium.org</owner>
+  <summary>
+    Histogram of the time, in milliseconds, it took for the NTP to load all of
+    its tiles since navigation start.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.LogoClick" enum="NewTabPageLogoClick">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Histogram tracking how many users click on the static logo or animated logo
+    on NTP.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.LogoDownloadOutcome"
+    enum="NewTabPageLogoDownloadOutcome">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Outcome of downloading search provider's logos. It measures whether
+    download/parsing is successful, revalidation and parsing work properly, etc.
+    Android only.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.LogoDownloadTime" units="ms">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    The amount of time it takes to download the static logo. Android only.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.LogoShown" enum="NewTabPageLogoShown">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Histogram tracking how many static logos and animated logos are shown to
+    users.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MobileIsUserOnline" enum="Boolean">
+  <owner>fserb@chromium.org</owner>
+  <owner>zmin@chromium.org</owner>
+  <summary>
+    Record the network status when a new tab page is opened. True if user is
+    online and false for offline.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MobilePromo" enum="NewTabPageMobilePromo">
+  <obsolete>
+    Deprecated on M33 with the change to native NTP.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Android: Tallies counts for how the user interacted with the NTP promo page.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MostVisited" enum="MostVisitedTileIndex">
+  <owner>beaudoin@chromium.org</owner>
+  <owner>justincohen@chromium.org</owner>
+  <owner>newt@chromium.org</owner>
+  <summary>
+    Histogram for user clicks of the most visited thumbnails. The value is equal
+    to the index of the thumbnail.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MostVisitedAction" enum="NtpFollowAction">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <owner>justincohen@chromium.org</owner>
+  <owner>newt@chromium.org</owner>
+  <summary>
+    Action taken by the user on the Most Visited NTP pane.  If the user switches
+    panes during this use of the NTP, this action is sometimes not recorded. Ask
+    mpearson@ for details.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MostVisitedScheme" enum="NtpMostVisitedScheme">
+  <obsolete>
+    Deprecated 2016-05.
+  </obsolete>
+  <owner>treib@chromium.org</owner>
+  <summary>
+    The schemes of URLs of most visited thumbnails that the user clicked on.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MostVisitedTilePlacementExperiment"
+    enum="NtpTileExperimentActions">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <owner>justincohen@chromium.org</owner>
+  <owner>newt@chromium.org</owner>
+  <summary>
+    Records anomalous events for the Most Visited Tile Placement experiment,
+    where it is unable to operate as expected. These are recorded during New Tab
+    Page load time, once for every NTP.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.MostVisitedTime" units="ms">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    The time from the New Tab page being shown until the user to clicked on a
+    most visited tile. Only recorded if the user clicked on a tile, as opposed
+    to e.g. searching via the omnibox. Only measured on Android.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NonVisibleScreenshots">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of screenshots that were cached for the non-visible but ranked
+    suggestions on the Suggested NTP pane.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NonVisibleSuggestedSiteRank">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Given that the user has typed a URL, and given that that specific URL was
+    ranked but not visible on the Suggested pane of the NTP, this is the rank
+    that the Suggested pane had for that URL.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfExternalTileFallbacks">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of tiles for which we relied on external tiles as a fallback
+    because a local screenshot was not available to be used as a thumbnail.
+    External tiles are those for which the visuals are handled by the page
+    itself, not by the iframe. Recorded before reloading the suggestions,
+    navigating to a URL, switching tabs, changing the active window, or closing
+    the tab/shutting down Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfExternalTiles">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of external tiles that are displayed on the NTP. External tiles
+    are those for which the visuals are handled by the page itself, not by the
+    iframe. Recorded before reloading the suggestions, navigating to a URL,
+    switching tabs, changing the active window or closing the tab/shutting down
+    Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfGrayTileFallbacks">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of tiles for which we displayed a gray tile with the domain name
+    as a fallback because a local screenshot was not available to be used as a
+    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
+    switching tabs, changing the active window or closing the tab/shutting down
+    Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfGrayTiles">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of tiles for which no thumbnail was specified, but a domain was
+    so we displayed a gray tile with the domain name in it. Recorded before
+    reloading the suggestions, navigating to a URL, switching tabs, changing the
+    active window or closing the tab/shutting down Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfMouseOvers">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The total number of times the user hovered the mouse over Most Visited tile
+    or title elements before changing focus away from the NTP, be it by
+    navigating to a URL, switching tabs, changing the active window or closing
+    the tab/shutting down Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfThumbnailAttempts">
+  <obsolete>
+    Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailTiles.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of tiles for which we attempted to use a local screenshot as a
+    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
+    switching tabs, changing the active window or closing the tab/shutting down
+    Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfThumbnailErrors">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of thumbnails for which a local screenshot was not available so
+    we were not able to display them on the Most Visited section of the NTP.
+    Recorded before reloading the suggestions, navigating to a URL, switching
+    tabs, changing the active window or closing the tab/shutting down Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfThumbnailTiles">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of tiles for which we attempted to use a local screenshot as a
+    thumbnail. Recorded before reloading the suggestions, navigating to a URL,
+    switching tabs, changing the active window or closing the tab/shutting down
+    Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.NumberOfTiles">
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The number of tiles that are displayed on the NTP, no matter if they are
+    thumbnails, gray tiles, or external tiles. Recorded before reloading the
+    suggestions, navigating to a URL, switching tabs, changing the active window
+    or closing the tab/shutting down Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.OfflineUrlsLoadTime" units="ms">
+  <owner>dewittj@chromium.org</owner>
+  <summary>
+    The amount of time spent waiting for the offline page model to return which
+    New Tab Page URLs are available offline.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.OtherSessionsMenu" enum="OtherSessionsActions">
+  <obsolete>
+    Deprecated 05/2015. Feature was removed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram for usage of the menu on the NTP that allows the user to access
+    tabs from other devices.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.PreviousSelectedPageType" enum="NtpPaneType">
+  <obsolete>
+    Deprecated 2016-02.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The pane that had been previously selected when the user switches panes in
+    the NTP.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Promo.Bubble" enum="NtpPromoAction">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Histogram for NTP bubble promo activity.</summary>
+</histogram>
+
+<histogram name="NewTabPage.Promo.Notification" enum="NtpPromoAction">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Histogram for NTP notification promo activity.</summary>
+</histogram>
+
+<histogram name="NewTabPage.RecentTabsPage.TimeVisibleAndroid" units="ms">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Records the amount of time that the &quot;Recent Tabs&quot; page is visible
+    and Chrome is in the foreground on Android. The metric is recorded whenever
+    the &quot;Recent Tabs&quot; page moves out of the foreground. The metric is
+    recorded when the &quot;Recent Tabs&quot; page is closed, when the user
+    switches from the &quot;Recent Tabs&quot; page to a different tab and when
+    Chrome is backgrounded.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.RequestThrottler.PerDay" units="requests">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Records how many background requests of the given type the browser tried to
+    perform each day where the type is specified by the _suffix of the
+    histogram. The histogram is emitted only after midnight of the given day
+    passes - right before the first following request (which can be several days
+    later if the user does not use Chrome in the meantime). The histogram counts
+    requests with both QUOTA_GRANTED and QUOTA_EXCEEDED status, i.e. the count
+    can easily exceed the daily quota.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.RequestThrottler.PerDayInteractive"
+    units="requests">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Records how many interactive requests of the given type the browser tried to
+    perform each day where the type is specified by the _suffix of the
+    histogram. The histogram is emitted only after midnight of the given day
+    passes - right before the first following request (which can be several days
+    later if the user does not use Chrome in the meantime). The histogram counts
+    requests with both QUOTA_GRANTED and QUOTA_EXCEEDED status, i.e. the count
+    can easily exceed the daily quota.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.RequestThrottler.RequestStatus"
+    enum="NtpRequestThrottlerStatus">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Records the status w.r.t. the quota for all requests of the given type. The
+    type of request is specified by the _suffix of the histogram.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.SearchURLs.Total">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD.</summary>
+</histogram>
+
+<histogram name="NewTabPage.SelectedPageType" enum="NtpPaneType">
+  <obsolete>
+    Deprecated 2016-02.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The pane selected when the user switches panes in the NTP.</summary>
+</histogram>
+
+<histogram name="NewTabPage.SessionRestore">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram for user clicks of the Recently Closed items. The value is the
+    recency of the entry being restored (0 is most recent).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.SingleSessionPageSwitches">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram to track how many times a user switched pages in a single NTP
+    session.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardClicked">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.Opened.
+  </obsolete>
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The position of the snippets card on the NTP, that is clicked
+    through to the host website of the content. We track the position the
+    snippet had in the list when NTP was loaded. This tracked position is thus
+    different from the position observed by the user whenever before scrolling
+    down to the given snippet, the user discards some snippets in the top of the
+    list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardClickedAge" units="ms">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.OpenedAge.
+  </obsolete>
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The age of the snippets card on the NTP, that is clicked through to
+    the host website of the content. The age is measured from the moment the
+    content has been published. In each &quot;_x_y&quot; suffix of the
+    histogram, only snippets on positions \gt;=x and \lt;=y are tracked. We
+    track the position the snippet had in the list when NTP was loaded. This
+    tracked position is thus different from the position observed by the user
+    whenever before scrolling down to the given snippet, the user discards some
+    snippets in the top of the list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardClickedScore" units="score">
+  <obsolete>
+    Deprecated as of 6/2016
+  </obsolete>
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The score of the snippets card on the NTP, that is clicked through
+    to the host website of the content. The recorded score is from the moment
+    the snippet was fetched, it could have changed since. In each &quot;_x&quot;
+    suffix  of the histogram, only snippets on positions \lt;=x are tracked. We
+    track the position the snippet had in the list when NTP was loaded. This
+    tracked position is thus different from the position observed by the user
+    whenever before scrolling down to the given snippet, the user discards some
+    snippets in the top of the list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardClickedScoreNew" units="score">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.OpenedScore.
+  </obsolete>
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The score of the snippets card on the NTP, that is clicked through
+    to the host website of the content. The recorded score is from the moment
+    the snippet was fetched, it could have changed since. In each &quot;_x&quot;
+    suffix  of the histogram, only snippets on positions \lt;=x are tracked. We
+    track the position the snippet had in the list when NTP was loaded. This
+    tracked position is thus different from the position observed by the user
+    whenever before scrolling down to the given snippet, the user discards some
+    snippets in the top of the list. In contrast to CardClickedScore, this
+    histogram has a proper maximal value of 100 000.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardExpanded">
+  <obsolete>
+    Deprecated as of 4/2016
+  </obsolete>
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The position of the snippets card on the NTP, that is expanded to
+    reveal more content.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardHidden">
+  <obsolete>
+    Deprecated as of 4/2016
+  </obsolete>
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The position of the snippets card on the NTP, for which the
+    expanded content was minimized/hidden.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardLongPressed" units="index">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.MenuOpened.
+  </obsolete>
+  <owner>peconn@chromium.org</owner>
+  <summary>
+    Android: The position of a snippet card when it is long pressed, analagous
+    to NewTabPage.Snippets.CardClicked.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardLongPressedAge" units="ms">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.MenuOpenedAge.
+  </obsolete>
+  <owner>peconn@chromium.org</owner>
+  <summary>
+    Android: The time difference between when a snippet card is long pressed and
+    when its content was published. Analagous to
+    NewTabPage.Snippets.CardClickedAge.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardLongPressedScoreNew" units="score">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.MenuOpenedScore.
+  </obsolete>
+  <owner>peconn@chromium.org</owner>
+  <summary>
+    Android: The relevance score of an interest card that is long pressed,
+    analagous to NewTabPage.Snippets.CardClickedScoreNew.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardShown">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.Shown.
+  </obsolete>
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The position of the snippets card that is shown on the NTP. Each
+    snippet (its position) is recorded whenever at least 1/3 of its height
+    becomes visible by scrolling through the NTP. Each snippet is recorded at
+    most once for a given instance of NTP and a given data set of snippets that
+    is shown. We track the position the snippet had in the list when NTP was
+    loaded. This tracked position is thus different from the position observed
+    by the user whenever before scrolling down to the given snippet, the user
+    discards some snippets in the top of the list. Previously (in the code
+    before 2016/05/27), this histogram was recorded each time a snippet became
+    visible (e.g. by scrolling up and down) at least by 1px; the first snippet
+    was thus recorded even without scrolling down.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardShownAge" units="ms">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.ShownAge.
+  </obsolete>
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The age of the snippets card that is shown on the NTP. Each snippet
+    (its age) is recorded whenever at least 1/3 of its height becomes visible by
+    scrolling through the NTP. Each snippet is recorded at most once for a given
+    instance of NTP and a given data set of snippets that is shown. The age is
+    measured from the moment the content has been published. In each
+    &quot;_x_y&quot; suffix of the histogram, only snippets on positions \gt;=x
+    and \lt;=y are tracked. By this, we mean the position the snippet had in the
+    list when NTP was loaded. This tracked position is thus different from the
+    position observed by the user whenever before scrolling down to the given
+    snippet, the user discards some snippets in the top of the list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardShownScore" units="score">
+  <obsolete>
+    Deprecated as of 6/2016
+  </obsolete>
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The score of the snippets card that is shown on the NTP. Each
+    snippet (its score) is recorded whenever at least 1/3 of its height becomes
+    visible by scrolling through the NTP. Each snippet is recorded at most once
+    for a given instance of NTP and a given data set of snippets that is shown.
+    The recorded score is from the moment the snippet was fetched, it could have
+    changed since. In each &quot;_x&quot; suffix  of the histogram, only
+    snippets on positions \lt;=x are tracked. By this, we mean the position the
+    snippet had in the list when NTP was loaded. This tracked position is thus
+    different from the position observed by the user whenever before scrolling
+    down to the given snippet, the user discards some snippets in the top of the
+    list.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.CardShownScoreNew" units="score">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.ShownScore.
+  </obsolete>
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The score of the snippets card that is shown on the NTP. Each
+    snippet (its score) is recorded whenever at least 1/3 of its height becomes
+    visible by scrolling through the NTP. Each snippet is recorded at most once
+    for a given instance of NTP and a given data set of snippets that is shown.
+    The recorded score is from the moment the snippet was fetched, it could have
+    changed since. In each &quot;_x&quot; suffix  of the histogram, only
+    snippets on positions \lt;=x are tracked. By this, we mean the position the
+    snippet had in the list when NTP was loaded. This tracked position is thus
+    different from the position observed by the user whenever before scrolling
+    down to the given snippet, the user discards some snippets in the top of the
+    list. In contrast to CardShownScore, this histogram has a proper maximal
+    value of 100 000.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.DatabaseLoadTime" units="ms">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    Android: The time it took to load the database of persisted content
+    suggestions. Recorded only when the database is loaded successfully.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.EnteredState" enum="NTPSnippetsState">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The state of the RemoteSuggestionsProvider. Recorded when the state
+    changes, typically once at startup and rarely afterwards, e.g. on database
+    errors.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.FetchHttpResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Response or error codes encountered when attempting to fetch snippets.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.FetchResult" enum="NtpSnippetsFetchResult">
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Result of attempting a fetch, logged once per issued trigger.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.FetchTime" units="ms">
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Time spent fetching snippets. Only recorded for fetch attempts that resulted
+    in an actual network request.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.FetchTimeLocal" units="minutes">
+  <owner>finkm@chromium.org</owner>
+  <summary>
+    Records the time of the day in minutes when a snippets background fetch was
+    initiated. Counts minutes since midnight UTC.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.FetchTimeUTC" units="minutes">
+  <owner>finkm@chromium.org</owner>
+  <summary>
+    Records the time of the day in minutes when a snippets background fetch was
+    initiated. Counts minutes since midnight local time.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.IncompleteSnippetsAfterFetch"
+    enum="Boolean">
+  <owner>maybelle@chromium.org</owner>
+  <summary>
+    Whether we discarded any of the snippets after fetching them due to having
+    incomplete metadata.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.Interactions" enum="SnippetsInteractions">
+  <obsolete>
+    Removed 2016-10.
+  </obsolete>
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: A histogram giving an overall summary of important events like
+    impressions, scroll events, clicks etc.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.NumArticles" units="articles">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Android: The number of snippet articles available to show on the NTP, logged
+    once every time the list is updated.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.NumArticlesFetched" units="articles">
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Android: The number of valid snippet articles fetched from the server,
+    logged every time a fetch finishes successfully.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.NumArticlesOnScrolledBelowTheFoldOnce"
+    units="articles">
+  <obsolete>
+    Removed 2016-10.
+  </obsolete>
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Android: The number of snippet articles available to the user in the UI,
+    logged when the user scrolls below the fold (at max once per NTP load).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"
+    units="articles">
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Android: The number of snippet articles discarded by the user, logged every
+    time the list is updated resulting in an empty list (all articles
+    discarded).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.NumIncompleteSnippets" units="snippets">
+  <owner>maybelle@chromium.org</owner>
+  <summary>
+    The number of snippets that we discard per fetch due to having incomplete
+    data.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.OpenMethod" enum="SnippetOpenMethod">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.OpenDisposition.
+  </obsolete>
+  <owner>peconn@chromium.org</owner>
+  <summary>
+    Android: A histogram detailing how the articles linked from snippets are
+    opened (eg, plain click, open in new tab, open in incognito).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.Snippets.VisitDuration" units="ms">
+  <obsolete>
+    Replaced by NewTabPage.ContentSuggestions.VisitDuration.
+  </obsolete>
+  <owner>mastiz@chromium.org</owner>
+  <summary>
+    Android: Time spent reading the page linked by an opened (clicked) snippet
+    card. Exit conditions include the tab not being in the foreground or
+    starting a new navigation.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.SuggestedSite">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Histogram for user clicks of the suggested site thumbnails. The value is
+    equal to the index of the thumbnail.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.SuggestedSitesAction" enum="NtpFollowAction">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Action taken by the user on the Suggested Sites NTP pane.</summary>
+</histogram>
+
+<histogram name="NewTabPage.SuggestedSitesLoadTime">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time to load the Suggested Sites NTP pane, in milliseconds.</summary>
+</histogram>
+
+<histogram name="NewTabPage.SuggestedSitesViewTime">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time spent on the Suggested Sites NTP pane, in seconds.</summary>
+</histogram>
+
+<histogram name="NewTabPage.SuggestionsImpression" enum="MostVisitedTileIndex">
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    Histogram for impressions on the various most visited tiles. The value is
+    equal to the index of the thumbnail.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.SuggestionsType" enum="NtpSuggestionsType">
+  <obsolete>
+    Deprecated 2016-07.
+  </obsolete>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    Indicate, for each impression of the New Tab Page, whether the suggestions
+    were obtained from the client or server. Recorded before changing focus away
+    from the NTP, be it by navigating to a URL, switching tabs, changing the
+    active window or closing the tab/shutting down Chrome.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ThumbnailErrorRate">
+  <obsolete>
+    Deprecated 01/2014. Replaced by NewTabPage.NumberOfThumbnailAttempts and
+    NewTabPage.NumberOfThumbnailErrors.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The percentage of errors per attempts to load image thumbnails on the New
+    Tab Page. When an error occurs, a grey tile is shown instead of a thumbnail
+    image. We measure the rate instead of the number of errors because multiple
+    attempts are made to load images at different times during the NTP's
+    lifetime. Each NTP session's error rate is logged after the user navigates
+    to a new URL from that NTP.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ThumbnailFallbackRate" units="%">
+  <obsolete>
+    Deprecated 01/2014. Replaced by NewTabPage.NumberOfGrayTileFallbacks and
+    NewTabPage.NumberOfExternalFallbacks.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The percentage of times most visited tiles use the fallback thumbnail. Only
+    requests that actually specify a fallback thumbnail are considered here. We
+    measure the rate instead of the number of errors because multiple attempts
+    are made to load thumbnails at different times during the NTP's lifetime.
+    Each NTP session's error rate is logged after the user navigates to a new
+    URL from that NTP.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.TileOfflineAvailable" enum="MostVisitedTileIndex">
+  <owner>treib@chromium.org</owner>
+  <summary>
+    The number of times a tile was available offline, per tile index - compare
+    to the NewTabPage.SuggestionsImpression.* histograms. This is recorded when
+    the NTP finishes loading. Only measured on Android.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.TileType" enum="MostVisitedTileType">
+  <owner>newt@chromium.org</owner>
+  <summary>
+    The visual type of each most visited tile displayed on the new tab page,
+    e.g. actual thumbnail or placeholder thumbnail. This is recorded for each
+    most visited item when the NTP is opened. Only measured on Android.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.TileTypeClicked" enum="MostVisitedTileType">
+  <owner>newt@chromium.org</owner>
+  <summary>
+    The visual type of the most visited item that the user clicked on, e.g.
+    actual thumbnail or placeholder thumbnail. Only measured on Android.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.TimeSpent" units="ms">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    The time spent on the new tab page as measured from when it was loaded or
+    last brought to the foreground until it was navigated away from or hidden.
+    Only measured on Android.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.URLState" enum="NewTabURLState">
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    Records the status of the New Tab page URL when an NTP is opened.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.UserClassifier.AverageHoursToOpenNTP" units="hours">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The estimated average number of hours between two successive times
+    when a new tab page is opened. Recorded after each opening of a NTP (and
+    after updating the model used for the estimate).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.UserClassifier.AverageHoursToShowSuggestions"
+    units="hours">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The estimated average number of hours between two successive times
+    when the list of content suggestions on a new tab page is shown (i.e. when
+    the user scrolls below the fold). Recorded after each time the suggestions
+    are shown (and after updating the model used for the estimate).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.UserClassifier.AverageHoursToUseSuggestions"
+    units="hours">
+  <owner>jkrcal@chromium.org</owner>
+  <summary>
+    Android: The estimated average number of hours between two successive times
+    when the user opens a content suggestion or clicks on the &quot;More&quot;
+    button. Recorded after each time a suggestion or a More button is clicked
+    (and after updating the model used for the estimate).
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.VisibleScreenshots">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of screenshots that were cached for the visible suggestions on
+    the Suggested NTP pane.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.VisibleSuggestedSiteRank">
+  <obsolete>
+    Deprecated 2016-02 (and not recorded for some time before that).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Given that the user has typed a URL, and given that that specific URL was
+    visible on the Suggested pane of the NTP, this is the rank that the
+    Suggested pane had for that URL.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Actions" enum="NotificationActionType">
+  <owner>dewittj@chromium.org</owner>
+  <summary>
+    The actions taken on notifications, recorded every time they happen.  This
+    histogram will record every single event that happens separately.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.AppNotificationStatus"
+    enum="NotificationAppStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records whether notifications are enabled for Chrome, as the Android app,
+    for each Web Notification that is being shown to the user.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.AuthorDataSize" units="bytes">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The size, in bytes, of the author-provided data associated with a Web
+    Notification. Recorded when a persistent Web Notification is being shown by
+    the developer.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.AuthorDataSizeKB" units="KB">
+  <obsolete>
+    Replaced by Notifications.AuthorDataSize in February 2016.
+  </obsolete>
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The size, in kilobytes, of the author-provided data associated with a Web
+    Notification. Recorded when a persistent Web Notification is being shown by
+    the developer.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.DeleteBeforeWriteResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of deleting notification data from the Web
+    Notification database that share their tag (replacement identifier) with a
+    notification that's about to be shown.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.DeleteResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of deleting notification data from the Web
+    Notification database.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.DeleteServiceWorkerRegistrationResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of deleting all notification data associated
+    with a Service Worker registration ID.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.DestroyResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of destroying the Web Notification database
+    altogether.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.OpenAfterCorruptionResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of opening the Web Notification database
+    after it has been destroyed in response to data corruption.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.OpenResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of opening the Web Notification database.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.ReadForServiceWorkerResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of reading data of all notifications
+    associated with a Service Worker from the Web Notification database.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.ReadResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of reading data of a single notification
+    from the Web Notification database.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Database.WriteResult"
+    enum="NotificationDatabaseStatus">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records the result status codes of writing data for a notification to the
+    Web Notification database.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.DifferentRequestingEmbeddingOrigins"
+    enum="Boolean">
+  <obsolete>
+    Deprecated July 2015. No longer tracked since M42.
+  </obsolete>
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Records if the requesting and embedding origins are different when
+    requesting permission to display Web Notifications.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Display" enum="NotifierType">
+  <owner>bmalcolm@chromium.org</owner>
+  <summary>
+    Counts the number of times a notification was shown for the various types of
+    sources. The suffix distinguishes between the window state of the app or
+    webpage that sent the notification. This will be used to determine whether a
+    legacy mode is required when we allow apps or webpages to display
+    notifications over fullscreen content in the future.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.ExtensionNotificationActionCount"
+    units="buttons">
+  <owner>dewittj@chromium.org</owner>
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The number of action buttons the developer provided for a notification
+    created using the extensions notification API. Logged when creating the
+    notification.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.ExtensionNotificationType"
+    enum="ExtensionNotificationType">
+  <owner>dewittj@chromium.org</owner>
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The type of a notification created using the extensions notification API.
+    Logged when creating the notification.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Icon.FileSize" units="bytes">
+  <owner>peter@chromium.org</owner>
+  <summary>The number of bytes loaded for a Web Notification icon.</summary>
+</histogram>
+
+<histogram name="Notifications.Icon.LoadFailTime" units="ms">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The number of milliseconds it took to fail loading an icon for a Web
+    Notification.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Icon.LoadFinishTime" units="ms">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The number of milliseconds it took to finish successfully loading an icon
+    for a Web Notification.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.Icon.ScaleDownTime" units="ms">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The number of milliseconds it took to scale down an icon for a Web
+    Notification.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.PerNotificationActions"
+    enum="NotificationActionType">
+  <owner>dewittj@chromium.org</owner>
+  <summary>
+    The actions taken on notifications, recorded once per notification, when it
+    is closed.  This differs from the Notifications.Actions histogram in that
+    multiple events of the same type on a single notification will only record a
+    single UMA event.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.PersistentNotificationActionCount"
+    units="buttons">
+  <owner>johnme@chromium.org</owner>
+  <summary>
+    The number of action buttons the developer provided for a persistent Web
+    Notification. Logged whenever showNotification is called.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.PersistentNotificationDataDeleted"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 01/2016, no longer used.
+  </obsolete>
+  <owner>peter@chromium.org</owner>
+  <owner>deepak.m1@samsung.com</owner>
+  <summary>
+    Recorded when the data associated with a persistent Web Notification gets
+    deleted. The value will be true if data deletion succeeded, and false if
+    there was an error.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.PersistentWebNotificationClickResult"
+    enum="PlatformNotificationStatus">
+  <owner>peter@chromium.org</owner>
+  <owner>deepak.m1@samsumg.com</owner>
+  <summary>
+    Recorded delivery status for persistent notification clicks to a Service
+    Worker when handling a click on a persistent WebNotification has finished.
+  </summary>
+</histogram>
+
+<histogram name="Notifications.PersistentWebNotificationCloseResult"
+    enum="PlatformNotificationStatus">
+  <owner>peter@chromium.org</owner>
+  <owner>nsatragno@chromium.org</owner>
+  <summary>
+    Records delivery status for persistent notification close events sent to a
+    Service Worker when the event has been handled.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff"
+    units="kbps">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the difference between the estimated downstream throughput (in
+    kilobits per second) and the observed downstream throughput (in kilobits per
+    second). Downstream throughput estimated by the network quality estimator at
+    the time of navigation start is compared with the downstream throughput
+    observed during the specified time interval following the start of the
+    navigation.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff"
+    units="Effective connection type">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the difference between the estimated effective connection type and
+    the observed effective connection type. Effective connection type is
+    estimated by the network quality estimator at the time of navigation start
+    is compared with the effective connection type observed during the specified
+    time interval following the start of the navigation.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff" units="ms">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the difference between the estimated HTTP RTT and the observed HTTP
+    RTT. HTTP RTT estimated by the network quality estimator at the time of
+    navigation start is compared with the HTTP RTT observed during the specified
+    time interval following the start of the navigation.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff" units="ms">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the difference between the estimated transport RTT and the observed
+    transport RTT. Transport RTT estimated by the network quality estimator at
+    the time of navigation start is compared with the transport RTT observed
+    during the specified time interval following the start of the navigation.
+  </summary>
+</histogram>
+
+<histogram name="NQE.CachedNetworkQualityAvailable" enum="BooleanAvailable">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records if the cached network quality (from memory or from a persistent
+    source) was available. Recorded right after connection change event.
+  </summary>
+</histogram>
+
+<histogram name="NQE.CellularSignalStrengthAvailable" enum="BooleanAvailable">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Whether the signal strength for the cellular network was available or not.
+    Recorded right before a connection change event. Recorded only on cellular
+    connections on Android platform.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Correlation.ResourceLoadTime.0Kb_128Kb">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records estimated network quality (estimated RTT, estimated downlink
+    bandwidth), resource load size, and the resource load time in a single UMA
+    sample. This metric is recorded randomly when a resource load finishes. Each
+    sample in this sparse histogram consists of multiple metrics (each occupying
+    few bits in the sample). The data in the histogram would be analyzed using
+    custom scripts. A sample is recorded only when the resource size is between
+    0 Kilobits (inclusive) and 128 Kilobits (exclusive).
+  </summary>
+</histogram>
+
+<histogram name="NQE.DifferenceRTTActualAndEstimated" units="ms">
+  <obsolete>
+    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Difference between the actual RTT observation and the estimated RTT. This
+    metric is recorded on every request when the actual observation is higher
+    than the estimated value.
+  </summary>
+</histogram>
+
+<histogram name="NQE.DifferenceRTTEstimatedAndActual" units="ms">
+  <obsolete>
+    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Difference between the estimated RTT and the actual RTT observation. This
+    metric is recorded on every request when the estimated value is higher than
+    the actual observation.
+  </summary>
+</histogram>
+
+<histogram name="NQE.EstimateAvailable.MainFrame" enum="Boolean">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    This histogram records whether the estimate of the network quality metric
+    was available or not. Recorded at every main frame request.
+  </summary>
+</histogram>
+
+<histogram name="NQE.ExternalEstimateProvider.DownlinkBandwidth" units="Kbps">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Records the estimate of the downlink bandwidth (in Kbps) provided by the
+    external estimate provided. Recorded every time the external estimate
+    provider provides a valid downlink bandwidth estimate to the network quality
+    estimator.
+  </summary>
+</histogram>
+
+<histogram name="NQE.ExternalEstimateProvider.RTT" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Records the estimate of the RTT provided by the external estimate provided.
+    Recorded every time the external estimate provider provides a valid RTT
+    estimate to the network quality estimator.
+  </summary>
+</histogram>
+
+<histogram
+    name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff"
+    units="ms">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Records the difference between the HTTP RTT estimated by the external
+    estimate provider and the observed HTTP RTT. The HTTP RTT estimated by the
+    external estimate provider at the time of navigation start is compared with
+    the HTTP RTT observed during the specified time interval following the start
+    of the navigation.
+  </summary>
+</histogram>
+
+<histogram name="NQE.ExternalEstimateProviderStatus"
+    enum="NQEExternalEstimateProviderStatus">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Records the interaction (availability and query count) of Network Quality
+    Estimator with external estimates provider. Logged on network change events,
+    everytime external estimate provider is queried for an updated estimate, and
+    when it proactively notifies that an updated estimate is available.
+  </summary>
+</histogram>
+
+<histogram name="NQE.FastestRTT" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of the fastest round-trip-time, before a connectivity change
+    is detected.
+
+    This metric is recorded when a connectivity change is detected. This will
+    miss data from users whose connection type never changes and will be biased
+    to users whose connection type changes frequently.
+  </summary>
+</histogram>
+
+<histogram name="NQE.MainFrame.EffectiveConnectionType"
+    enum="NQEEffectiveConnectionType">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Effective connection type estimated by network quality estimator. Suffixed
+    with the connection type reported by the operating system.
+
+    This metric is recorded on main-frame requests.
+  </summary>
+</histogram>
+
+<histogram name="NQE.MainFrame.Kbps" units="Kbps">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of the downstream peak throughput at different percentiles.
+
+    This metric is recorded on main-frame requests.
+  </summary>
+</histogram>
+
+<histogram name="NQE.MainFrame.RTT" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of the computed round trip time at the URLRequest layer at
+    different percentiles.
+
+    This metric is recorded on main-frame requests.
+  </summary>
+</histogram>
+
+<histogram name="NQE.MainFrame.TransportRTT" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of the computed round trip time at the transport layer at
+    different percentiles.
+
+    This metric is recorded on main-frame requests.
+  </summary>
+</histogram>
+
+<histogram name="NQE.NetworkIdAvailable" enum="BooleanAvailable">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Whether the NetworkID (SSID of the Wi-Fi network, or the MCC/MNC operator of
+    the cellular network) was available or not. Recorded only on Wi-Fi and
+    cellular networks. Recorded right after the connection type changes.
+  </summary>
+</histogram>
+
+<histogram name="NQE.PeakKbps" units="Kbps">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of downstream peak throughput, before a connectivity change
+    is detected.
+
+    This metric is recorded when a connectivity change is detected. This will
+    miss data from users whose connection type never changes and will be biased
+    to users whose connection type changes frequently.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Prefs.ReadCount" units="count">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of times the network quality prefs were read by the network quality
+    estimator.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Prefs.ReadSize" units="count">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Count of the number of network IDs in the prefs read by the network quality
+    estimator.
+  </summary>
+</histogram>
+
+<histogram name="NQE.Prefs.WriteCount" units="count">
+  <owner>tbansal@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Number of times the network quality prefs were written by the network
+    quality estimator.
+  </summary>
+</histogram>
+
+<histogram name="NQE.RatioEstimatedToActualRTT" units="100 times">
+  <obsolete>
+    Replaced in June 2016 by NQE.Accuracy.HttpRTT.* metrics.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Ratio of the estimated RTT to the actual RTT observation multiplied by 100.
+  </summary>
+</histogram>
+
+<histogram name="NQE.RTT" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of the computed round trip time at the URLRequest layer at
+    different percentiles.
+
+    This metric is recorded immediately after a connectivity change is detected.
+    The metric name is suffixed with the connection type before the connectivity
+    change was detected. This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="NQE.RTTObservations" units="ms">
+  <obsolete>
+    Replaced in May 2016 by NQE.MainFrame.RTT.* metrics.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    RTT observations at the URLRequest layer made by network quality estimator,
+    recorded on every request.
+  </summary>
+</histogram>
+
+<histogram name="NQE.TransportRTT" units="ms">
+  <owner>bengr@chromium.org</owner>
+  <owner>tbansal@chromium.org</owner>
+  <summary>
+    Rough estimate of the computed round trip time at the transport layer at
+    different percentiles.
+
+    This metric is recorded immediately after a connectivity change is detected.
+    The metric name is suffixed with the connection type before the connectivity
+    change was detected. This will miss data from users whose connection type
+    never changes and will be biased to users whose connection type changes
+    frequently.
+  </summary>
+</histogram>
+
+<histogram name="ntp.searchurls.total">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="NtpHandler.AttachShownPageType" enum="NtpPaneType">
+  <obsolete>
+    Deprecated 10/2011. No longer tracked, replaced with
+    NewTabPage.DefaultPageType
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The default pane when the NTP is first opened.</summary>
+</histogram>
+
+<histogram name="NtpHandler.SelectedShownPageType" enum="NtpPaneType">
+  <obsolete>
+    Deprecated 10/2011. No longer tracked, replaced with
+    NewTabPage.SelectedPageType
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The pane selected when the user switches panes in the NTP.</summary>
+</histogram>
+
+<histogram name="OAuth2Login.AccountRevoked.IsEmailId" enum="Boolean">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    This histogram records whether the account ID is actually an email if we
+    detect an account that has an account ID but not email.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.AccountRevoked.MigrationState"
+    enum="OAuth2LoginAccountRevokedMigrationState">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    This histogram records the account ID migration status from email to GAIA ID
+    if we detect an account that has an account ID but not email.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.GetOAuth2AccessTokenFailure"
+    enum="GoogleServiceAuthError">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Failure reason of final OAuth2 access token retrieval call during Chrome OS
+    login.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.GetOAuth2AccessTokenRetry"
+    enum="GoogleServiceAuthError">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Retry reason of failed OAuth2 access token retrieval call during Chrome OS
+    login.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.ListAccountsFailure" enum="GoogleServiceAuthError">
+  <obsolete>
+    Deprecated 2015-05-22. Replaced by Signin.ListAccountsFailure.
+  </obsolete>
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Failure reason of final ListAccounts call failure during Chrome OS login.
+    This data is now included in Signin.ListAccountsFailure.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.ListAccountsRetry" enum="GoogleServiceAuthError">
+  <obsolete>
+    Deprecated 2015-05-22. Replaced by Signin.ListAccountsRetry.
+  </obsolete>
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Retry reason of failed ListAccounts call during Chrome OS login. This data
+    is now included in Signin.ListAccountsRetry.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.MergeSessionFailure" enum="GoogleServiceAuthError">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Failure reason of MergeSession call during Chrome OS login, Chrome Signin or
+    account addition. On all OSes as of M44 (previously CrOS only).
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.MergeSessionRetry" enum="GoogleServiceAuthError">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Retry reason of failed MergeSession call during Chrome OS login, Chrome
+    Signin or account addition. On all OSes as of M44 (previously CrOS only).
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.OAuthLoginGaiaCredFailure"
+    enum="GoogleServiceAuthError">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Failure reason of final OAuthLogin (with SID+LSID) call during Chrome OS
+    login.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.OAuthLoginGaiaCredRetry"
+    enum="GoogleServiceAuthError">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Retry reason of failed OAuthLogin (with SID+LSID) call during Chrome OS
+    login.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.OAuthLoginUberTokenFailure"
+    enum="GoogleServiceAuthError">
+  <obsolete>
+    Deprecated 2015-05-22
+  </obsolete>
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Failure reason of final OAuthLogin (with uber token) call during Chrome OS
+    login. This data is now (M44+) included in Signin.UberTokenFailure.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.OAuthLoginUberTokenRetry"
+    enum="GoogleServiceAuthError">
+  <obsolete>
+    Deprecated 2015-05-22
+  </obsolete>
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Retry reason of failed OAuthLogin (with uber token) call during Chrome OS
+    login. This data is now (M44+) included in Signin.UberTokenRetry.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.PostMergeVerification"
+    enum="PostMergeVerificationOutcome">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Outcome of Chrome OS GAIA cookie post-merge session verification process. It
+    measures how often /MergeSession request collided with browser session
+    restore process resulting in partially authenticated primary GAIA session.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.PreMergeVerification"
+    enum="PostMergeVerificationOutcome">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    Outcome of Chrome OS GAIA cookie pre-merge session verification process. It
+    measures how often we need to perform /MergeSession request to
+    re-authenticated exisitng user with GAIA.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.SeedState" enum="OAuth2LoginSeedState">
+  <owner>knn@chromium.org</owner>
+  <summary>
+    Only applicable on M47 on Android. Measure the frequency of a suppressed
+    error state when the account is not seeded.
+  </summary>
+</histogram>
+
+<histogram name="OAuth2Login.SessionRestore" enum="GaiaSessionRestoreOutcome">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>Outcome of Chrome OS GAIA cookie session restore process.</summary>
+</histogram>
+
+<histogram name="OAuth2Login.SessionRestoreTimeToFailure" units="ms">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>How long it takes for the session restore to fail.</summary>
+</histogram>
+
+<histogram name="OAuth2Login.SessionRestoreTimeToSuccess" units="ms">
+  <owner>zelidrag@chromium.org</owner>
+  <summary>
+    How long it takes for the session restore to finish succeessfully.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.AggregatedRequestResult"
+    enum="OfflinePagesAggregatedRequestResult">
+  <obsolete>
+    Deprecated 2016-10, and replaced by OfflinePages.AggregatedRequestResult2.
+  </obsolete>
+  <owner>dimich@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>Result of servicing requests that may contain offline page.</summary>
+</histogram>
+
+<histogram name="OfflinePages.AggregatedRequestResult2"
+    enum="OfflinePagesAggregatedRequestResult">
+  <owner>dimich@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>Result of servicing requests that may contain offline page.</summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.CctApiDisableStatus"
+    enum="OfflinePagesCctApiPrerenderAllowedStatus">
+  <owner>petewil@chromium.org</owner>
+  <summary>
+    Reason for the Chrome Custom Tabs API prerender call to be ignored.
+
+    There are several causes for the Chrome Custom Tabs API calls to be ignored,
+    this tracks the potential causes so we can see how often the prerenderer
+    doesn't prerender due to these being switched off.  Since this is checked
+    elsewhere (CCTAPI), this only catches the user switching off the third party
+    cookies or navigation prediction after the CCT API has checked.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.EffectiveConnectionType.PauseRequests"
+    enum="NQEEffectiveConnectionType">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Effective connection type when pausing one or more background loads is
+    requested.
+
+    This metric is recorded for RequestCoordinator::PauseRequests API calls.
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.EffectiveConnectionType.RemoveRequests"
+    enum="NQEEffectiveConnectionType">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Effective connection type when removing one or more background loads is
+    requested.
+
+    This metric is recorded for RequestCoordinator::RemoveRequests API calls.
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.EffectiveConnectionType.ResumeRequests"
+    enum="NQEEffectiveConnectionType">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Effective connection type when resuming one or more background loads is
+    requested.
+
+    This metric is recorded for RequestCoordinator::ResumeRequests API calls.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.EffectiveConnectionType.SavePageLater"
+    enum="NQEEffectiveConnectionType">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Effective connection type when a background load is requested.
+
+    This metric is recorded for RequestCoordinator::SavePageLater API calls.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.ImmediateStart.AvailableRequestCount">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests available for processing when
+    processing starts immediately (vs. scheduled). This is for non-svelte
+    devices (where svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.ImmediateStart.AvailableRequestCount.Svelte">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests available for processing when
+    processing starts immediately (vs. scheduled). This is for svelte devices
+    (where svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.ImmediateStart.UnavailableRequestCount">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests unavailable for processing when
+    processing starts immediately (vs. scheduled). This is for non-svelte
+    devices (where svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.ImmediateStart.UnavailableRequestCount.Svelte">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests unavailable for processing when
+    processing starts immediately (vs. scheduled). This is for svelte devices
+    (where svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.ImmediateStartStatus"
+    enum="OfflinePagesBackgroundImmediateStartStatus">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Status of attempt to immediately start offlining a page in the background
+    while application is still concurrently using the foreground. This may be
+    attempted when an web page download is initially requested or resumed.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.OfflinerRequestStatus"
+    enum="OfflinePagesBackgroundOfflinerRequestStatus">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Status code of background offlining (loading and saving) requests.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.RequestFailure.StartedAttemptCount">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of started attempts by failed background load requests.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.RequestSuccess.StartedAttemptCount">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of started attempts by successful background load requests.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.ScheduledStart.AvailableRequestCount">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests available for processing when
+    background scheduled processing starts. This is for non-svelte devices
+    (where svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.ScheduledStart.AvailableRequestCount.Svelte">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests available for processing when
+    background scheduled processing starts. This is for svelte devices (where
+    svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.ScheduledStart.UnavailableRequestCount">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests unavailable for processing when
+    background scheduled processing starts. This is for non-svelte devices
+    (where svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.Background.ScheduledStart.UnavailableRequestCount.Svelte">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Number of queued background load requests unavailable for processing when
+    background scheduled processing starts. This is for svelte devices (where
+    svelte is determined by base::SysInfo::IsLowEnd()).
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.TimeToCanceled" units="seconds">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>Time from background request until it was canceled.</summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.TimeToSaved" units="seconds">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Time from background request until it was successfully saved.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.TimeToStart" units="ms">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Time from background request until processing it was first started. This is
+    for non-svelte devices.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.TimeToStart.Svelte" units="ms">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Time from background request until processing it was first started on svelte
+    device. Svelte is determined by base::SysInfo::IsLowEnd().
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Background.UnsupportedScheme.ConnectionType"
+    enum="NetworkConnectionType">
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Connection type when prerenderer reports Unsupported Scheme error.
+
+    To give insight about Unsupported Scheme errors that may be due to lost
+    network connection (as data URL used for rendering an error page will
+    manifest as an Unsupported Scheme error by the prerenderer).
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.BatchDelete.Count">
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of offline pages that are deleted in a batch.</summary>
+</histogram>
+
+<histogram name="OfflinePages.BatchDelete.TotalPageSize" units="KB">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Total size, in kilobytes, of all offline pages that are deleted in a batch.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.CanSaveRecentPage" enum="Boolean">
+  <owner>fgorski@chromium.org</owner>
+  <summary>
+    Can a recent page be saved or not? Logged for all attempts to save
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.ClearAllStatus" enum="OfflinePagesClearAllStatus">
+  <obsolete>
+    Deprecated 3/2016, and replaced by OfflinePages.ClearAllStatus2.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>Status code of wiping out the offline page data.</summary>
+</histogram>
+
+<histogram name="OfflinePages.ClearAllStatus2"
+    enum="OfflinePagesClearAllStatus">
+  <owner>jianli@chromium.org</owner>
+  <summary>Status code of wiping out the offline page data.</summary>
+</histogram>
+
+<histogram name="OfflinePages.ClearStorageResult"
+    enum="OfflinePagesClearStorageResult">
+  <owner>romax@chromium.org</owner>
+  <summary>Result of asking storage manager to clear storage.</summary>
+</histogram>
+
+<histogram name="OfflinePages.Consistency.DeleteOrphanedArchivesResult"
+    enum="BooleanSuccess">
+  <owner>romax@chromium.org</owner>
+  <summary>
+    Whether an attempt to delete archive files without metadata was successful.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Consistency.ExpirePagesMissingArchiveFileResult"
+    enum="BooleanSuccess">
+  <owner>romax@chromium.org</owner>
+  <summary>
+    Whether an attempt to expire pages without archives was successful.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Consistency.OrphanedArchivesCount">
+  <owner>romax@chromium.org</owner>
+  <summary>
+    Number of archives without metadata entry when checking consistency.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Consistency.PagesMissingArchiveFileCount">
+  <owner>romax@chromium.org</owner>
+  <summary>
+    Number of offline pages without archive file when checking consistency.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.AccessCount">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of accesses to the offline page since its creation. This is reported
+    when the offline page was deleted.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.FreeSpaceMB" units="MB">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The amount of free space available, in megabytes, on the user's device after
+    the page is deleted.
+
+    Note that before M52 this operation was started before delete operation.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.FreeSpacePercentage" units="%">
+  <obsolete>
+    Deprecated as of 5/2016. Marginal applicability.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The percentage of free space available on the user's device when the page is
+    being deleted.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.LastOpenToCreated" units="minutes">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time between when an offline page was created and was opened last
+    time. This is reported when the page was deleted.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.PageSize" units="KB">
+  <owner>jianli@chromium.org</owner>
+  <summary>Size of the offline page, in kilobytes, that was deleted.</summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.TimeSinceLastOpen" units="minutes">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time between when an offline page was last opened and was deleted.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePage.TotalPageSizeAsPercentageOfFreeSpace"
+    units="%">
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The percentage of space taken by offline pages from the free space that
+    could be available, if the feature was not present. I.e. considering
+    situation where the user has: Free Space, Offline content, other apps and
+    data. This is a percentage of: Offline content / (Offline content + Free
+    Space).
+
+    The value will be recorded after user deletes a single or multiple offline
+    pages. In case pages are removed in bulk, this value will be reported once.
+    This value is only reported with deleting, as we are trying to infer if lack
+    of free space might have caused the user to delete.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DeletePageResult"
+    enum="OfflinePagesDeletePageResult">
+  <owner>jianli@chromium.org</owner>
+  <summary>Result of removing an offline copy for a page.</summary>
+</histogram>
+
+<histogram name="OfflinePages.DownloadDeletedPageDuplicateCount" units="pages">
+  <owner>dewittj@chromium.org</owner>
+  <owner>dimich@chromium.org</owner>
+  <summary>
+    The number of downloaded pages with the same URL that exist at the time that
+    we delete a downloaded page.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateRequested"
+    units="seconds">
+  <owner>dewittj@chromium.org</owner>
+  <owner>fgorski@chromium.org</owner>
+  <summary>
+    If at request time there is another request with the same URL, this tracks
+    this amount of time between creation of the most recent request and the
+    current request.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DownloadRequestTimeSinceDuplicateSaved"
+    units="seconds">
+  <owner>dewittj@chromium.org</owner>
+  <owner>fgorski@chromium.org</owner>
+  <summary>
+    If at request time there is another downloaded page with the same URL, this
+    tracks this amount of time between creation of the most recent existing page
+    and the current request.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DownloadSavedPageDuplicateCount" units="pages">
+  <owner>dewittj@chromium.org</owner>
+  <owner>dimich@chromium.org</owner>
+  <summary>
+    The number of downloaded pages with the same URL that exist at the time that
+    we save a downloaded page.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.DownloadSavedPageTimeSinceDuplicateSaved"
+    units="seconds">
+  <owner>dewittj@chromium.org</owner>
+  <owner>dimich@chromium.org</owner>
+  <summary>
+    If at save time there is another downloaded page with the same URL, this
+    tracks this amount of time between creation of the most recent existing page
+    and the current page.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Edit.BookmarkUrlChangedForOfflinePage"
+    enum="BooleanMatched">
+  <obsolete>
+    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
+  </obsolete>
+  <owner>dougarnett@chromium.org</owner>
+  <summary>
+    Whether a user-edited bookmark URL had a saved offline page.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.ExpirePage.BatchSize">
+  <owner>romax@chromium.org</owner>
+  <summary>Number of pages that are expired in a batch.</summary>
+</histogram>
+
+<histogram name="OfflinePages.ExpirePage.PageLifetime" units="minutes">
+  <owner>romax@chromium.org</owner>
+  <summary>
+    Length of time between when an offline page was created and was expired.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.ExpirePage.StoreUpdateResult"
+    enum="BooleanSuccess">
+  <owner>romax@chromium.org</owner>
+  <summary>Result of updating expired page in store.</summary>
+</histogram>
+
+<histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess" units="minutes">
+  <owner>romax@chromium.org</owner>
+  <summary>
+    Length of time between when an offline page was last opened and was expired.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Filter.OnlineWhenEntering" enum="Boolean">
+  <obsolete>
+    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
+  </obsolete>
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether user is connected when entering the filter with offline only
+    content.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Filter.OnlineWhenLeaving" enum="Boolean">
+  <obsolete>
+    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
+  </obsolete>
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether user is connected when leaving the filter with offline only content.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.FirstOpenSinceCreated" units="minutes">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The time elapsed between creation of the offline page and the first time it
+    was opened.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.IncognitoSave" enum="Boolean">
+  <obsolete>
+    Deprecated 5/2016. Not longer needed.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether the page that was being saved offline was in incognito mode.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.LaunchLocation" enum="StarsLaunchLocation">
+  <obsolete>
+    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
+  </obsolete>
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>Logs a UI location from which an offline page is launched.</summary>
+</histogram>
+
+<histogram name="OfflinePages.LoadStatus" enum="OfflinePagesLoadStatus">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Status code of loading from the offline pages metadata store.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.LoadSuccess" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 10/2015, and replaced by OfflinePages.LoadStatus.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether an attempt to load the offline pages metadata store was successful.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Model.ArchiveDirCreationTime" units="ms">
+  <owner>dewittj@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The amount of time to create the offline pages archive directory.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Model.ConstructionToLoadedEventTime" units="ms">
+  <owner>dewittj@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The amount of time to create the offline pages archive directory and load
+    the offline page model.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.OfflinePageCount">
+  <obsolete>
+    Deprecated 5/2016. This was the dup of OfflinePages.SavedPageCount.
+  </obsolete>
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>Number of offline pages the user has. Android only.</summary>
+</histogram>
+
+<histogram name="OfflinePages.OnlineOnOpen" enum="Boolean">
+  <obsolete>
+    Deprecated 5/2016. Offline pages no longer depend on bookmarks UI.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether the user was online when a saved page with offline copy was opened.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.OpenSinceLastOpen" units="minutes">
+  <owner>jianli@chromium.org</owner>
+  <summary>Length of time between two consecutive opens.</summary>
+</histogram>
+
+<histogram name="OfflinePages.PageLifetime" units="minutes">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Length of time between when an offline page was created and was removed.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.PageSize" units="KB">
+  <owner>jianli@chromium.org</owner>
+  <summary>Size of the saved copy of an offline page.</summary>
+</histogram>
+
+<histogram name="OfflinePages.RedirectResult" enum="OfflinePagesRedirectResult">
+  <obsolete>
+    Deprecated 8/2016. Use OfflinePages.RequestResult instead.
+  </obsolete>
+  <owner>dimich@chromium.org</owner>
+  <summary>
+    Result of automatic redirect to offline version of the page or back. Emitted
+    exactly once when offline-to-online or online-to-offline redirect is
+    determined to be needed and conveys the outcome of redirect.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.RedirectToOfflineCount" units="count">
+  <obsolete>
+    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of times an offline copy was loaded instead when the user is trying
+    to load the online version of a saved page and there is no network
+    connection.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.RedirectToOnlineCount" units="count">
+  <obsolete>
+    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of times an online version was loaded instead when the user is trying
+    to load the offline copy of a saved page and there is network connection.
+    connection.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.SavedPageCount" units="pages">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Number of saved pages restored from the offline pages metadata store when it
+    is logged.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.SavePage.FreeSpaceMB" units="MB">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The amount of free space available, in megabytes, on the user's device after
+    the page is saved.
+
+    Note that before M52 this operation was started before save operation.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.SavePage.FreeSpacePercentage" units="%">
+  <obsolete>
+    Deprecated as of 5/2016. Marginal applicability.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The percentage of free space available on the user's device when the page is
+    being saved.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.SavePage.PercentLoaded" units="%">
+  <owner>dfalcantara@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    The percentage of the page load completed when the button to save an offline
+    page is pressed.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.SavePageResult" enum="OfflinePagesSavePageResult">
+  <owner>jianli@chromium.org</owner>
+  <summary>Result of saving an offline copy for a page.</summary>
+</histogram>
+
+<histogram name="OfflinePages.SavePageTime" units="ms">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    The amount of time taken to save an offline copy for a page.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.SharedPageWasOffline"
+    enum="OfflinePagesSharedPageWasOffline">
+  <owner>dewittj@chromium.org</owner>
+  <summary>Whether a shared page was an offline page or not.</summary>
+</histogram>
+
+<histogram name="OfflinePages.ShowOfflinePageOnBadNetwork" enum="Boolean">
+  <obsolete>
+    Deprecated 6/2016. Refactored into OfflinePages.RedirectResult.
+  </obsolete>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether an offline page is shown, instead of error page, when the network is
+    disconnected or poor condition.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.TotalPageSize" units="MB">
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Total size of all the offline pages saved by the user.
+
+    This value is recorded whenever the number of pages change, meaning after a
+    page is added or removed. If pages are removed in bulk, this value will be
+    reported only once.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.TotalPageSizePercentage" units="%">
+  <obsolete>
+    Deprecated as of 5/2016. Marginal applicability.
+  </obsolete>
+  <owner>fgorski@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Total size of all the offline pages saved by the user as a percentage of
+    total storage size.
+
+    This value is recorded whenever the number of pages change, meaning after a
+    page is added or removed.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Wakeup.BatteryPercentage" units="%">
+  <owner>petewil@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Percentage of battery remaining when the offline page background loading
+    task wakes up to check for work.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Wakeup.ConnectedToPower" enum="BooleanConnected">
+  <owner>petewil@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Whether the device is plugged in when the offline page background load task
+    wakes up to check or work.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Wakeup.DelayTime" units="ms">
+  <owner>petewil@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Time delay from a dinosaur page to connection being available.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.Wakeup.NetworkAvailable"
+    enum="NetworkConnectionType">
+  <owner>petewil@chromium.org</owner>
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Which network is available (if any) when the offling page background loading
+    task wakes up to check for work.
+  </summary>
+</histogram>
+
+<histogram
+    name="OfflinePages.WebsiteSettings.ConnectedWhenOpenOnlineButtonClicked"
+    enum="BooleanConnected">
+  <owner>fgorski@chromium.org</owner>
+  <summary>
+    Indicates whether the browser was connected when Open online button was
+    clicked on Website Settings popup, which causes a reload of an offline page
+    to online version.
+  </summary>
+</histogram>
+
+<histogram name="OfflinePages.WebsiteSettings.OpenOnlineButtonVisible"
+    enum="BooleanVisible">
+  <owner>fgorski@chromium.org</owner>
+  <summary>
+    Indicates whether Open online was visible in Website Settings popup, when it
+    was shown for an offline page. (The button is visible only when Chrome is
+    connected when the Website Settings popup is opened for offline page.)
+  </summary>
+</histogram>
+
+<histogram name="OfflinePolicy.SuccessfulResourceLoadPercentage" units="%">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When a page is loaded in offline mode, the percentage of resources on that
+    page that were successfully loaded.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.AggressiveHistoryURLProviderFieldTrialBeacon"
+    enum="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon">
+  <obsolete>
+    Aggressive HistoryURL provider field trial deleted in spring 2012.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    A number that indicates what omnibox ranking behavior the user is seeing as
+    part of the OmniboxAggressiveHistoryURLProvider field trial
+    (OmniboxAggressiveHistoryURLProvider).
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.AnswerParseSuccess" enum="BooleanSuccess">
+  <owner>jdonnelly@chromium.org</owner>
+  <summary>
+    For each answer received in suggest responses, the number that are
+    well-formed and contain all the required elements.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.CharTypedToRepaintLatency" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the time taken between a keystroke being typed in the omnibox and
+    the text being painted. If there are multiple keystrokes before a paint,
+    logs the time since the earliest one.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.CutOrCopyAllText" units="count">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of cut or copy commands on all selected text in the omnibox.
+    Gathered on desktop platforms (Win, Mac, Linux, Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.EnteredKeywordMode" enum="OmniboxEnteredKeywordMode">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of times users enter keyword hint mode &quot;Search ___
+    for:&quot; and how.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.FocusToEditTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of time between when a user focused on the omnibox and first
+    modifies the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.FocusToOpenTime" units="ms">
+  <obsolete>
+    Replaced with Omnibox.FocusToOpenTimeAnyPopupState in April 2014.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of time between when a user focused on the omnibox and opened an
+    omnibox match (which could be what they typed or a suggestion).
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.FocusToOpenTimeAnyPopupState" units="ms">
+  <obsolete>
+    Replaced with Omnibox.FocusToOpenTimeAnyPopupState2 in August, 2016.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of time between when a user focused on the omnibox and opened an
+    omnibox match (which could be what they typed or a suggestion).  This is
+    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.FocusToOpenTimeAnyPopupState2" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of time between when a user focused on the omnibox and opened an
+    omnibox match (which could be what they typed or a suggestion).  This is
+    recorded regardless of whether the omnibox dropdown (a.k.a. popup) is open.
+    It is not recorded if a match is opened without triggering a focus event,
+    e.g., when a user drags a URL to the omnibox to navigate.
+
+    To know how common this last condition is, compare the total count of this
+    histogram to the total number of omnibox events.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.HardwareKeyboardModeEnabled" enum="BooleanEnabled">
+  <owner>lpromero@chromium.org</owner>
+  <summary>
+    iOS: Records whether a hardware keyboard is used to input text. This is
+    recorded each time a UIKeyboardWillChangeFrameNotification is sent while
+    editing the omnibox text.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.HasLegalDefaultMatchWithoutCompletion" enum="Boolean">
+  <obsolete>
+    Deprecated 2015-01-27
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Whether there was at least one legal default match without an
+    |inline_autocompletion|.  Recorded every time
+    AutocompleteResult::SortAndCull() is called, which could happen multiple
+    times on each keystroke.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.InputType" enum="OmniboxInputType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The kind of input the user provided when using the omnibox to go somewhere.
+    The type can be misleading.  For example if the user typed 'http:/', it gets
+    marked as a query because it cannot be opened as a URL even though the user
+    probably wanted and selected a URL from the list of suggestions.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.IsPasteAndGo" enum="Boolean">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Whether an omnibox interaction is a paste-and-search/paste-and-go action.
+    (This histogram records both of these in the &quot;True&quot; bucket for
+    this histogram because both of these are referred to as paste-and-go in the
+    code.)  These typically involve right-clicking in the omnibox and selecting
+    that option from the dropdown.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.IsPopupOpen" enum="Boolean">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Whether the omnibox popup (a.k.a. dropdown) is open at the time the user
+    used the omnibox to go somewhere.  It can be closed if, for instance, the
+    user clicked in the omnibox and hit return to reload the same page.  Also,
+    because paste-and-search/paste-and-go actions ignore the current content of
+    the omnibox dropdown (if it is open) when they happen, we pretend the
+    dropdown is closed when logging these.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.JustDeletedText" enum="Boolean">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Whether the user deleted text immediately before selecting an omnibox
+    suggestion.  This is usually the result of pressing backspace or delete.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.NumEvents">
+  <owner>mpearson@chromium.org</owner>
+  <summary>The number of times users used the omnibox to go somewhere.</summary>
+</histogram>
+
+<histogram name="Omnibox.NumTypedTerms" units="terms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of terms in the text the user entered in the omnibox when they
+    used the omnibox to go somewhere.  Terms are defined by splitting on
+    whitespace.  All values larger than 6 are recorded in bucket 6.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.PageContext" enum="OmniboxPageContext">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    What the user was viewing when the user used the omnibox to go somewhere.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.PaintTime" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the time to paint the omnibox contents. This is a subcomponent of
+    Omnibox.CharTypedToRepaintLatency. Implemented on desktop platforms.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.Paste" units="count">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of paste commands on the text in the omnibox. Reported every time
+    a paste command is done.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.PasteAndGo" units="count">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of paste-and-go commands on the text in the omnibox. Reported
+    every time a paste-and-go command is done.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.PhysicalWebProviderMatches">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    The number of matches returned by PhysicalWebProvider. Emitted when the
+    omnibox is first focused, unless the user is in incognito mode. Capped at
+    10.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.ProgressBarBreakPointUpdateCount"
+    units="break point updates">
+  <owner>kkimlabs@chromium.org</owner>
+  <summary>
+    The number of progress bar break point updates from page load started to
+    page load finished.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.ProgressBarUpdateCount" units="frame updates">
+  <owner>kkimlabs@chromium.org</owner>
+  <summary>
+    The number of progress bar frame updates from page load started to page load
+    finished. If there is no animation, this matches
+    Omnibox.ProgressBarBreakPointUpdateCount. Note that there can be additional
+    updates after page load finished, animating to 100%, but this histogram
+    doesn't include them.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.ProviderTime" units="ms">
+  <obsolete>
+    Deprecated 2015-06-12. Replaced by Omnibox.ProviderTime2.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of time taken by the named provider&quot;s synchronous pass.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.ProviderTime2" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of time taken by the named provider&quot;s synchronous pass.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.QueryBookmarksTime">
+  <obsolete>
+    Deprecated 2012-11-14. Replaced by Omnibox.ProviderTime.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time the HistoryContentProvider takes to perform a bookmark search.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.QueryTime" units="ms">
+  <obsolete>
+    Deprecated 2015-06-12. Replaced by Omnibox.QueryTime2.
+  </obsolete>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time it takes for the omnibox to become responsive to user input after the
+    user has typed N characters. This measures the time it takes to start all
+    the asynchronous autocomplete providers (but not wait for them to finish).
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.QueryTime2" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time it takes for the omnibox to become responsive to user input after the
+    user has typed N characters. This measures the time it takes to start all
+    the asynchronous autocomplete providers (but not wait for them to finish).
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SaveStateForTabSwitch.UserInputInProgress"
+    units="count">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    When a user switches tabs, whether the omnibox had an edit in progress.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SearchEngine" enum="OmniboxSearchEngine">
+  <obsolete>
+    Made obsolete around Chrome 32.  Use Omnibox.SearchEngineType instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The id of search engine that was used for search in omnibox. See
+    src/chrome/browser/search_engines/template_url_prepopulate_data.cc for more
+    info.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SearchEngineType" enum="OmniboxSearchEngineType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The type of search engine associated with a match opened from the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SearchProvider.AddHistoryResultsTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time it takes to add all the raw history results to the list of matches.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SearchProvider.ConvertResultsTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time it takes to convert all the results to matches and add them to a map,
+    to keep the most relevant match for each result.
+  </summary>
+</histogram>
+
+<histogram
+    name="Omnibox.SearchProvider.GetMostRecentKeywordTermsDefaultProviderTime"
+    units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Time it takes for the omnibox to search the previous query history database
+    for queries that start with the omnibox text.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SearchProviderMatches">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of matches returned by SearchProvider.  Emitted on every call to
+    SearchProvider::Start(), which effectively means every key stroke in the
+    omnibox.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SelectedPosition" units="position">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The index of the item that the user selected in the omnibox popup (a.k.a.
+    dropdown) list.  0 means the inline suggestion shown within the omnibox.
+    This is also the same suggestion shown as the top item in the dropdown.  The
+    second item in the dropdown will be recorded as bucket 1. The selected
+    position is always set to 0 when the popup is closed at the time of
+    navigation or if the user did a paste-and-search or paste-and-go action.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestionUsed.NearbyURLCount" units="URLs">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    The number of nearby Physical Web URLs when the user focused the omnibox.
+    Recorded when the user accepts an omnibox suggestion, regardless of whether
+    the suggestion came from PhysicalWebProvider. Capped at 50.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestionUsed.Provider" enum="OmniboxProviderType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The provider of the suggestion the user selected when the user used the
+    omnibox to go somewhere.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestionUsed.ProviderAndResultType"
+    enum="OmniboxProviderAndResultType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The provider and result type of the suggestion the user selected when the
+    user used the omnibox to go somewhere.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestionUsed.SearchVsUrl"
+    enum="OmniboxSummarizedResultType">
+  <owner>mpearson@google.com</owner>
+  <summary>
+    The rough type of the suggestion the user selected when the user used the
+    omnibox to go somewhere.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestRequest.Failure.GoogleResponseTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The time elapsed between the sending of a suggest request to Google until
+    the time the request was returned with status==failed. Ignores requests that
+    were canceled before being returned.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestRequest.Success.GoogleResponseTime" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The time elapsed between the sending of a suggest request to Google until
+    the time the request was returned with status==success. Ignores requests
+    that were canceled before being returned.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.SuggestRequests" enum="OmniboxSuggestRequests">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Counts about the number of suggest requests the omnibox sent, invalidated,
+    and replies received.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.TypedLength" units="characters">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The length of the text the user entered in the omnibox when they used the
+    omnibox to go somewhere.  All values larger than 500 are recorded in bucket
+    500.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.TypingDuration" units="ms">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The amount of time, in milliseconds, since the user first began modifying
+    the text in the omnibox until the user used the omnibox to go somewhere. If
+    at some point after modifying the text, the user reverted the modifications
+    (thus seeing the current web page's URL again), then wrote in the omnibox
+    again, this duration starts from the time of the second series of
+    modification.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.UserTextCleared" enum="OmniboxUserTextCleared">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Counts the number of times that the user text is cleared.  IME users are
+    sometimes in the situation that IME was unintentionally turned on and failed
+    to input latin alphabets (ASCII characters) or the opposite case.  In that
+    case, users may delete all the text and the user text gets cleared.  This
+    histogram helps us estimate how often this scenario happens.
+
+    Note that since we don't currently correlate &quot;text cleared&quot; events
+    with IME usage, this also captures many other cases where users clear the
+    text; though it explicitly doesn't log deleting all the permanent text as
+    the first action of an editing sequence (see comments in
+    OnAfterPossibleChange()).
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.ZeroSuggest.MostVisitedResultsCounterfactual">
+  <owner>hfung@chromium.org</owner>
+  <summary>
+    The number of most visited suggestions returned when ZeroSuggest would have
+    triggered.  The suggestions appear when the user has focused but not
+    modified the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="Omnibox.ZeroSuggestRequests" enum="OmniboxZeroSuggestRequests">
+  <owner>hfung@chromium.org</owner>
+  <summary>
+    Counts about the number of zero suggest requests (requests for suggestions
+    when the user has focused but not modified the omnibox) the omnibox sent,
+    invalidated, and replies received.
+  </summary>
+</histogram>
+
+<histogram name="OOBE.BootToSignInCompleted" units="ms">
+  <owner>merkulova@chromium.org</owner>
+  <summary>Time from boot to sign-in completed.</summary>
+</histogram>
+
+<histogram name="OOBE.ErrorScreensTime.Enrollment" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Time spent on error screens during enrollment or autoenrollment.
+  </summary>
+</histogram>
+
+<histogram name="OOBE.ErrorScreensTime.Signin" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>Time spent on error screens during signin.</summary>
+</histogram>
+
+<histogram name="OOBE.ErrorScreensTime.Supervised" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Time spent on error screens during supervised user creation.
+  </summary>
+</histogram>
+
+<histogram name="OOBE.ErrorScreensTime.Update" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>Time spent on error screens during update.</summary>
+</histogram>
+
+<histogram name="OOBE.NetworkErrorShown.Enrollment" enum="NetworkErrorType">
+  <owner>achuith@google.com</owner>
+  <summary>
+    Number of times error screen has appeared during enrollment or
+    autoenrollment.
+  </summary>
+</histogram>
+
+<histogram name="OOBE.NetworkErrorShown.Signin" enum="NetworkErrorType">
+  <owner>achuith@google.com</owner>
+  <summary>Number of times error screen has appeared during signin.</summary>
+</histogram>
+
+<histogram name="OOBE.NetworkErrorShown.Supervised" enum="NetworkErrorType">
+  <owner>achuith@google.com</owner>
+  <summary>
+    Number of times error screen has appeared during supervised user creation.
+  </summary>
+</histogram>
+
+<histogram name="OOBE.NetworkErrorShown.Update" enum="NetworkErrorType">
+  <owner>achuith@google.com</owner>
+  <summary>Number of times error screen has appeared during update.</summary>
+</histogram>
+
+<histogram name="OOBE.StepCompletionTime" units="ms">
+  <owner>merkulova@chromium.org</owner>
+  <summary>Time spent on specific OOBE screen.</summary>
+</histogram>
+
+<histogram name="OriginChip.Pressed">
+  <obsolete>
+    Deprecated with CL 731423002. OriginChip has been removed.
+  </obsolete>
+  <owner>gbillock@chromium.org</owner>
+  <summary>The number of clicks on the origin chip.</summary>
+</histogram>
+
+<histogram name="OriginTrials.FeatureEnabled" enum="OriginTrialEnableResult">
+  <obsolete>
+    Obsolete as of Chrome 54. Sort of replaced by OriginTrials.ValidationResult.
+  </obsolete>
+  <owner>chasej@chromium.org</owner>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Counts the results of origin trial checks to enable experimental features.
+    The result for each feature check is counted at most once per execution
+    context (e.g. page, worker).
+  </summary>
+</histogram>
+
+<histogram name="OriginTrials.FeatureEnabled.MessageGenerated"
+    enum="OriginTrialMessageGeneratedResult">
+  <obsolete>
+    Obsolete as of Chrome 54.
+  </obsolete>
+  <owner>chasej@chromium.org</owner>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Counts how often an error message is generated for each origin trial check
+    to enable an experimental feature.
+  </summary>
+</histogram>
+
+<histogram name="OriginTrials.ValidationResult" enum="OriginTrialTokenStatus">
+  <owner>chasej@chromium.org</owner>
+  <owner>iclelland@chromium.org</owner>
+  <summary>
+    Counts the results of token validation checks to enable experimental
+    features. The result for each token validation check is counted once per
+    token per execution context (e.g. page, worker).
+  </summary>
+</histogram>
+
+<histogram name="OSX.BluetoothAvailability" enum="BluetoothAvailability">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The availability and capabilities of the Bluetooth driver on OSX devices.
+    This metric is logged on startup.
+  </summary>
+</histogram>
+
+<histogram name="OSX.CatSixtyFour" enum="CatSixtyFour">
+  <obsolete>
+    Obselete as of Chrome 43. See OmahaProxy for more relevant statistics.
+  </obsolete>
+  <owner>mark@chromium.org</owner>
+  <summary>The cat's flavor and how many bits there are in it.</summary>
+</histogram>
+
+<histogram name="OSX.ExceptionHandlerEvents" enum="OSXExceptionHandlerEvents">
+  <owner>mark@chromium.org</owner>
+  <summary>Events seen by the OSX NSException swizzle.</summary>
+</histogram>
+
+<histogram name="OSX.Fullscreen.Enter" enum="OSXFullscreenParameters">
+  <obsolete>
+    Deprecated as of Chrome 40. See OSX.Fullscreen.Enter.Style,
+    OSX.Fullscreen.Enter.WindowLocation and
+    OSX.Settings.ScreensHaveSeparateSpaces.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This event is recorded each time a user triggers fullscreen for a browser
+    window. The value's bits reflect different parameters. Bit 0: Fullscreen
+    entry mechanism (AppKit vs Immersive). Bit 1: Whether the window was on the
+    primary screen (Primary vs. Secondary). Bit 2: Whether displays have
+    separate spaces options is enabled (Seperate vs Shared). Bit 3: Whether
+    there are multiple screens.
+  </summary>
+</histogram>
+
+<histogram name="OSX.Fullscreen.Enter.Style" enum="OSXFullscreenStyle">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This event is recorded each time a user triggers fullscreen for a browser
+    window. It indicates the mechanism (immersive vs. AppKit) and the type of
+    AppKit Fullscreen (Presentation Mode vs. Canonical Fullscreen).
+  </summary>
+</histogram>
+
+<histogram name="OSX.Fullscreen.Enter.WindowLocation"
+    enum="OSXFullscreenWindowLocation">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This event is recorded each time a user triggers fullscreen for a browser
+    window. It indicates the screen in which the window was fullscreened, and
+    the number of screens available.
+  </summary>
+</histogram>
+
+<histogram name="OSX.Handoff.Origin" enum="OSXHandoffOrigin">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This event is recorded each time a Handoff is received by Chrome on OSX. The
+    enumeration indicates the source of the Handoff.
+  </summary>
+</histogram>
+
+<histogram name="OSX.RendererHost.SurfaceWaitTime" units="ms">
+  <obsolete>
+    Deprecated as of 11/2015.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    This event records the amount of time that the browser process main thread
+    blocks, waiting for a frame with the right dimensions to arrive from the gpu
+    process.
+  </summary>
+</histogram>
+
+<histogram name="OSX.Settings.ScreensHaveSeparateSpaces"
+    enum="OSXScreensHaveSeparateSpaces">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The configuration of the setting &quot;Screens Have Separate Spaces&quot;
+    available in OSX 10.9+.
+  </summary>
+</histogram>
+
+<histogram name="OSX.SharedMemory.Mechanism" enum="OSXSharedMemoryMechanism">
+  <obsolete>
+    Deprecated as of Chrome 51 since Mach has become the default mechanism.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    A histogram entry is emitted each time a base::SharedMemory object is
+    constructed. The value of the entry indicates the mechanism used to back the
+    shared memory region.
+  </summary>
+</histogram>
+
+<histogram name="OSX.SystemHotkeyMap.LoadSuccess" enum="BooleanSuccess">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    Whether an attempt to load the system hotkeys on a Mac was successful.
+  </summary>
+</histogram>
+
+<histogram name="OutdatedUpgradeBubble.NumLaterPerEnableAU">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    Counts the number of times the user clicked on the later button of the
+    outdated upgrade bubble, before clicking on the enable updates button in the
+    same Chrome session.
+  </summary>
+</histogram>
+
+<histogram name="OutdatedUpgradeBubble.NumLaterPerReinstall">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    Counts the number of times the user clicked on the later button of the
+    outdated upgrade bubble, before clicking on the reinstall button in the same
+    Chrome session.
+  </summary>
+</histogram>
+
+<histogram name="Overscroll.Cancelled" enum="NavigationDirection">
+  <owner>rbyers@chromium.org</owner>
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Overscroll gestures that were aborted before they were completed.
+  </summary>
+</histogram>
+
+<histogram name="Overscroll.Completed" enum="OverscrollMode">
+  <obsolete>
+    Deprecated as of Chrome 44 in favour of Overscroll.Cancelled and
+    Overscroll.Navigated2.
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>Completed overscroll gestures.</summary>
+  <details>
+    An overscroll gesture starts when user scrolls past the edge of the web page
+    and continues scrolling in the same direction. An overscroll gesture is
+    completed when user stops scrolling (e.g. by lifting the fingers from the
+    touchscreen or touchpad).
+  </details>
+</histogram>
+
+<histogram name="Overscroll.Navigated" enum="OverscrollMode">
+  <obsolete>
+    Deprecated as of Chrome 44 to switch to NavigationDirection enum.
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Navigations that were triggered due to completed overscroll gesture. Note
+    that not all completed overscroll gestures trigger a navigation.
+  </summary>
+</histogram>
+
+<histogram name="Overscroll.Navigated2" enum="NavigationDirection">
+  <owner>rbyers@chromium.org</owner>
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Navigations that were triggered due to completed overscroll gesture. Note
+    that not all completed overscroll gestures trigger a navigation.
+  </summary>
+</histogram>
+
+<histogram name="Overscroll.Started" enum="OverscrollMode">
+  <obsolete>
+    Deprecated as of Chrome 44 to switch to NavigationDirection enum.
+  </obsolete>
+  <owner>rbyers@chromium.org</owner>
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Overscroll gestures initiated by the user. Note that not all overcroll
+    gestures started are completed (e.g. the overscroll gesture is aborted if
+    user clicks or presses a key during the gesture).
+  </summary>
+</histogram>
+
+<histogram name="Overscroll.Started2" enum="NavigationDirection">
+  <owner>rbyers@chromium.org</owner>
+  <owner>mfomitchev@chromium.org</owner>
+  <summary>
+    Overscroll gestures initiated by the user. Note that not all overcroll
+    gestures started are completed (e.g. the overscroll gesture is aborted if
+    user clicks or presses a key during the gesture).
+  </summary>
+</histogram>
+
+<histogram name="Ozone.TouchNoiseFilter.FarApartTapDistance"
+    units="squared pixels">
+  <owner>pkotwicz@google.com</owner>
+  <summary>
+    The squared distance between taps which occur in quick succession. Only
+    reported when the taps are far apart and touch noise filtering is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Ozone.TouchNoiseFilter.HorizontallyAlignedDistance"
+    units="pixels">
+  <owner>pkotwicz@google.com</owner>
+  <summary>
+    The horizontal distance from a &quot;touch press&quot; to the closest other
+    touch. Only reported if there are two or more fingers onscreen and touch
+    noise filtering is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Ozone.TouchNoiseFilter.TimeSinceLastNoiseOccurrence"
+    units="ms">
+  <owner>pkotwicz@google.com</owner>
+  <summary>
+    The amount of time between noisy touches. The amount of time since Chrome
+    startup is recorded for the first noisy touch after startup.
+  </summary>
+</histogram>
+
+<histogram name="Ozone.TouchNoiseFilter.TouchesAtSinglePositionDuration"
+    units="ms">
+  <owner>pkotwicz@google.com</owner>
+  <summary>
+    The time between taps which occur in quick succession at the same screen
+    location. Only reported when touch noise filtering is enabled.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.Canceled.WaitingTimeSeconds" units="seconds">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The wall-clock time spent until a lookup was canceled.  This is reported
+    every time p2p is used to find a candidate but the request was canceled.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.Found.CandidateCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of candidates on the LAN, i.e. the number of peers on the LAN
+    offering at least N bytes of the requested file X. This is reported after
+    examining responses from all peers on the LAN and picking a candidate.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.Found.ConnectionCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of p2p downloads of the peer that the returned URL points to.
+    This is reported after examining responses from all peers on the LAN and
+    picking a candidate.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.Found.WaitingTimeSeconds" units="seconds">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The wall-clock time spent waiting for the LAN-wide number of p2p downloads
+    (i.e. the sum of p2p downloads from each peer on the LAN) to drop below the
+    threshold.  This is reported after examining responses from all peers on the
+    LAN and picking a candidate.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.LookupResult" enum="P2PLookupResult">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The result of the lookup. Possible values include &quot;Found&quot; (if a
+    candidate - i.e. a peer offering at least N bytes of file X - was chosen),
+    &quot;Not Found&quot; (if no candidate could be found), &quot;Vanished&quot;
+    (if a candidate was found but vanished while waiting in line),
+    &quot;Canceled&quot; (if a candidate was found but the request was canceled
+    while waiting in line), and &quot;Filtered&quot; (if it was detected that
+    mDNS was filtered). This is reported after examining responses from all
+    peers on the LAN when p2p is used to find a candidate.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.NumPeers" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of peers implementing p2p file sharing on the network. This is
+    reported every time p2p is used to look up a resource on a network where
+    mDNS is not filtered.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Client.Vanished.WaitingTimeSeconds" units="seconds">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The wall-clock time spent waiting for one or more candidates (i.e. peers
+    offering at least N bytes of file X) that all vanished before the LAN-wide
+    number of p2p downloads dropped below the threshold. This is reported every
+    time candidates were found using p2p but then vanished.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.ClientCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of currently connected HTTP clients. This is reported every time
+    a HTTP client connects.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.ContentServedInterruptedMB" units="MB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Number of megabytes (1,000,000 bytes) served from the device (via HTTP)
+    where the client disconnects prematurely. This is reported every time a file
+    is served and the client disconnects before receiving all data.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.ContentServedSuccessfullyMB" units="MB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Number of megabytes (1,000,000 bytes) served from the device (via HTTP).
+    This is reported every time a file have been served successfully.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.DownloadSpeedKBps" units="kB/s">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The average speed at which the download was served at, in kB/s. This is
+    reported every time a file have been served successfully.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.FileCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of files available via p2p. This is reported every time a file is
+    added or removed to the /var/cache/p2p directory.
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.RangeBeginPercentage" units="%">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    When a client resumes a download, the HTTP request includes range specifier
+    to skip the bytes it already has. This metric conveys this as a percentage
+    of the file size.  This is reported every time a file is served, even if the
+    request does not include a range specifier (in which case 0 is reported).
+  </summary>
+</histogram>
+
+<histogram name="P2P.Server.RequestResult" enum="P2PServerResult">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The result of the HTTP request. Possible values include &quot;Response
+    Sent&quot; (the resource was found and the response was successfully sent),
+    &quot;Response Interrupted&quot; (the resource was found but the client
+    disconnected), &quot;Malformed&quot; (the request was malformed), &quot;Not
+    Found&quot; (the request was for a resource that was not found), and
+    &quot;Index&quot; (the request was for the '/' or '/index.html' resource).
+    This is reported for every HTTP request handled.
+  </summary>
+</histogram>
+
+<histogram name="PageActionController.ExtensionsWithPageActions">
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    The number of Extensions that have Page Actions. Measured once per startup
+    per profile.
+  </summary>
+</histogram>
+
+<histogram name="PageImportanceSignals.HadFormInteraction.OnCommitLoad"
+    enum="HadFormInteraction">
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of pages that had any HTML form interaction before next page load.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.Background" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted due to being backgrounded.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.ClientRedirect" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by a client side redirect (Javascript navigation).
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.Close" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by the user closing the tab or browser.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.ForwardBackNavigation"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by a forward or back navigation.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.NewNavigation" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by a new navigation.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.Other" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted. The abort cause is unknown.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.Reload" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by a reload.
+  </summary>
+</histogram>
+
+<histogram base="true" name="PageLoad.AbortTiming.Stop" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by the user pressing stop.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.AbortTiming.UnknownNavigation" units="ms">
+  <obsolete>
+    We now have sufficient infrastructure to always characterize aborts that
+    resulted in new navigations.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This metric is still experimental and not yet ready to be relied upon.
+    Measures the time from navigation start to the time the page load was
+    aborted by a navigation with unknown transition type.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.DocWrite.Block.ReloadCount">
+  <owner>shivanisha@chromium.org</owner>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    This metric measures reloads in pages that have synchronous, cross-origin
+    document.written scripts that could be blocked if document.write script
+    blocking feature is enabled.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.GoogleCaptcha.Events"
+    enum="GoogleCaptchaEvent">
+  <owner>mdw@chromium.org</owner>
+  <summary>Events related to Google CAPTCHA pages being seen by users.</summary>
+</histogram>
+
+<histogram name="PageLoad.CSSTiming.Parse.BeforeFirstContentfulPaint"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The time spent parsing author style sheets before the first contentful
+    paint.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    DOMContentLoaded event is fired, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first layout is performed, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.DocumentTiming.NavigationToLoadEventFired" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    load event is fired, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.EventCounts" enum="PageLoadEvent">
+  <obsolete>
+    deprecated in favor of PageLoad.Events.*
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Captures counts of various page load events. These are enumerated in the
+    enum page_load_metrics::PageLoadEvent, and include events like 'page load
+    aborted before first layout'
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Events.Committed" enum="CommittedLoadEvent">
+  <obsolete>
+    Deprecated in favor of PageLoad.Timing2.NavigationToCommit and
+    PageLoad.AbortTiming.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Captures counts of load events post-commit, on relevant page loads (i.e.
+    http/https, not same-page, not an error page). These events include aborts
+    before first layout and successful first layouts. Note that the event
+    'Committed load started' when segmented by background/foreground specifies
+    whether the eventually committed load started in the background or
+    foreground, not whether we backgrounded before the actual commit event. This
+    is because we don't have all the data to filter relevant page loads on
+    provisional loads.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Events.InternalError" enum="InternalErrorLoadEvent">
+  <obsolete>
+    Deprecated in favor of PageLoad.Internal.ErrorCode.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Counts of various internal error conditions in the page_load_metrics system.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Events.Provisional" enum="ProvisionalLoadEvent">
+  <obsolete>
+    Deprecated Feb 2016 in favor of PageLoad.AbortTiming and
+    PageLoad.Timing2.NavigationToFailedProvisionalLoad. Note that the
+    corresponding background enumerations are no longer being tracked in the
+    timing histograms.
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Captures counts of provisional load events. These include aborted, failed,
+    and successful (committed) provisional loads.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.Cache.RequestPercent.ParseStop"
+    units="%">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The percent of subresources loaded from cache for the given page load.
+    Recorded at the end of HTML parsing.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.Cache.TotalRequests.ParseStop"
+    units="requests">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The number of subresources a given page finished loading from cache at parse
+    stop.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintSignalStatus"
+    enum="FirstMeaningfulPaintSignalStatus">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Whether the user had any interaction on the page (except mouse move) after
+    first paint, and whether the user left the page before network stable or
+    not.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintStatus"
+    enum="FirstMeaningfulPaintStatus">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Records whether the First Meaningful Paint metric was reported for the page
+    load, or why it wasn't if not. See http://bit.ly/ttfmp-doc for the
+    definition of First Meaningful Paint.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Experimental.PaintTiming.FirstMeaningfulPaintToNetworkStable"
+    units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time between when the first meaningful paint
+    (http://bit.ly/ttfmp-doc) was computed to have happened, and when we
+    actually logged the metric.
+
+    This metric is useful in helping us tweak when FirstMeaningfulPaintDetector
+    should stop observing layout operations.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"
+    units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the first
+    meaningful paint (http://bit.ly/ttfmp-doc), for main frame documents.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"
+    units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from when the HTML parser started, to the first meaningful
+    paint (http://bit.ly/ttfmp-doc), for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.0-50"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The parse duration of the page load where 0-50% of all subresources (loaded
+    during parsing) were served from the HTTP cache (including 304s).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.ParseDuration.CachedPercent.51-100"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The parse duration of the page load where 51-100% of all subresources
+    (loaded during parsing) were served from the HTTP cache (including 304s).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Experimental.TotalRequests.ParseStop"
+    units="requests">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The number of subresources a given page finished loading at parse stop.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.InputTiming.NavigationToFirstNonScroll.AfterPaint"
+    units="ms">
+  <owner>sahel@chromium.org</owner>
+  <summary>
+    Measures the time to first non-scroll input after the first paint.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.InputTiming.NavigationToFirstScroll.AfterPaint"
+    units="ms">
+  <owner>sahel@chromium.org</owner>
+  <summary>
+    Measures the time to first scroll input after the first paint.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ClientRedirect.FirstPaintToNavigation"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The delay between first paint and a client-side redirect navigation, for
+    pages that reported a first paint. This metric is only intended to help in
+    choosing a heuristic delay to distinguish between client-side redirects and
+    other client initiated navigations, and will be deprecated in M54. Please
+    contact bmcquade@chromium.org before using this metric.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ClientRedirect.NavigationWithoutPaint"
+    enum="Boolean">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Counts how often a client-side redirect was initiated from a page that did
+    not report a first paint. This metric is only intended to help in choosing a
+    heuristic delay to distinguish between client-side redirects and other
+    client initiated navigations, and will be deprecated in M54. Please contact
+    bmcquade@chromium.org before using this metric.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ClientRedirectDelayAfterPaint" units="ms">
+  <obsolete>
+    Deprecated in favor of
+    PageLoad.Internal.ClientRedirect.FirstPaintToNavigation and
+    PageLoad.Internal.ClientRedirect.NavigationWithoutPaint.
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The delay between first paint and a client-side redirection. This metric is
+    only intended to help in choosing a heuristic delay to distinguish between
+    client-side redirects and other client initiated navigations, and will be
+    deprecated in M54. Please contact bmcquade@chromium.org before using this
+    metric.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.CommitToComplete.NoTimingIPCs" units="ms">
+  <obsolete>
+    Deprecated on 10/14/2016. No longer needed.
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    The delay between commit and completion, for page loads that did not receive
+    any timing IPCs. This metric is only intended to help understand the cases
+    where committed page loads don't receive timing IPCs. Please contact
+    bmcquade@chromium.org before using this metric.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ErrorCode" enum="InternalErrorLoadEvent">
+  <owner>csharrison@chromium.org</owner>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Counts of various internal error conditions in the page_load_metrics system.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.PageLoadCompleted.AfterAppBackground"
+    enum="BooleanStartedCompleted">
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Whether a page load completed after the app entered the background. We log a
+    'Started' value for each PageLoadTracker that is active when the app enters
+    the background, and a 'Completed' value for each of those PageLoadTrackers
+    that successfully runs its destructor. This helps to understand how many
+    trackers are destroyed while the app is in the background before they are
+    able to run their destructor. This metric is only intended to help in
+    understanding how often app background leads to data loss, and will be
+    deprecated in a subsequent release. Please contact bmcquade@chromium.org
+    before using this metric.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.ForwardBack"
+    units="length">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This histogram counts the number of provisional loads aborted by other
+    navigations, until a final forward back navigation commits.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.NewNavigation"
+    units="length">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This histogram counts the number of provisional loads aborted by new
+    navigations, until a final new navigation commits.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.NoCommit"
+    units="length">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This histogram counts the number of provisional loads aborted by new
+    navigations. In this case the chain never ends with a commit. This is logged
+    on the next abort signal comes in (e.g. tab close or new navigation).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.Reload"
+    units="length">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This histogram counts the number of provisional loads aborted by other
+    navigations, until a final reload navigation commits.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Internal.ProvisionalAbortChainSize.SameURL"
+    units="length">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    This histogram counts the number of consecutive provisional loads aborted by
+    other navigations with the same url (before redirects). It's logged when a
+    provisional abort does not share a URL, or when a load finally commits. Note
+    that we don't log chains of length 0.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.PaintTiming.ForegroundToFirstPaint" units="ms">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Measures the time from a background tab being switched to the foreground to
+    the time the first paint is performed, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"
+    units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time from navigation start to first &quot;contentful&quot; paint.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint" units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first image is painted, for main frame documents. For images that render
+    progressively, this is recorded as soon as any image pixels have been drawn.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.PaintTiming.NavigationToFirstPaint" units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first paint is performed, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint" units="ms">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first non-blank text is painted, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from when the HTML parser started, to when the page first
+    paints content.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.ParseTiming.NavigationToParseStart" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    parser started, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the execution of
+    scripts, for main frame documents that finished parsing.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the execution of
+    scripts inserted from document.write, for main frame documents that finished
+    parsing.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts,
+    for main frame documents that finished parsing.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"
+    units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts
+    inserted from document.write, for main frame documents that finished
+    parsing.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.ParseTiming.ParseDuration" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser was active, for main frame documents
+    that finished parsing.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing.NavigationToDOMContentLoadedEventFired"
+    units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.Timing2.*
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    DOMContentLoaded event is fired, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing.NavigationToFirstLayout" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.Timing2.*
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first layout is performed, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing.NavigationToLoadEventFired" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.Timing2.*
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    load event is fired, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.DOMLoadingToDOMContentLoadedEventFired"
+    units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.DocumentTiming.ParseDuration
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from when DOM loading occurs (the time that HTML parsing
+    begins) to the time the DOMContentLoaded event is fired, for main frame
+    documents. This is equivalent to the time that the HTML document resource
+    was being parsed.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.DOMLoadingToFirstContentfulPaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from when DOM loading occurs (the time that HTML parsing
+    begins) to first &quot;contentful&quot; paint.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.ForegroundToFirstPaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.ForegroundToFirstPaint
+  </obsolete>
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Measures the time from a background tab being switched to the foreground to
+    the time the first paint is performed, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToCommit" units="ms">
+  <obsolete>
+    Deprecated in favor of PageLoad.ParseTiming.NavigationToParseStart
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    navigation committed, for main frame documents.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"
+    units="ms">
+  <obsolete>
+    deprecated in favor of
+    PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    DOMContentLoaded event is fired, for main frame documents. This metric is
+    being phased out in favor of the PageLoad.DocumentTiming equivalent and will
+    be deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFailedProvisionalLoad" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>shivanisha@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    provisional load failed. Only measures provisional loads that failed in the
+    foreground.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstBackground" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.AbortTiming.Background.*
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    user first backgrounds the tab. Only measures navigations that started in
+    the foreground.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstContentfulPaint
+  </obsolete>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time from navigation start to first &quot;contentful&quot; paint.  This
+    metric is being phased out in favor of the PageLoad.PaintTiming equivalent
+    and will be deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstForeground" units="ms">
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    user first foregrounds an initially backgrounded tab. Only measures
+    navigations that started in the background.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstImagePaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstImagePaint
+  </obsolete>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first image is painted, for main frame documents. For images that render
+    progressively, this is recorded as soon as any image pixels have been drawn.
+    This metric is being phased out in favor of the PageLoad.PaintTiming
+    equivalent and will be deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstLayout" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.DocumentTiming.NavigationToFirstLayout
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first layout is performed, for main frame documents. This metric is being
+    phased out in favor of the PageLoad.DocumentTiming equivalent and will be
+    deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstPaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstPaint
+  </obsolete>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first paint is performed, for main frame documents. This metric is being
+    phased out in favor of the PageLoad.PaintTiming equivalent and will be
+    deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToFirstTextPaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.NavigationToFirstTextPaint
+  </obsolete>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first non-blank text is painted, for main frame documents. This metric is
+    being phased out in favor of the PageLoad.PaintTiming equivalent and will be
+    deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.NavigationToLoadEventFired" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.DocumentTiming.NavigationToLoadEventFired
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    load event is fired, for main frame documents. This metric is being phased
+    out in favor of the PageLoad.DocumentTiming equivalent and will be
+    deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts,
+    for main frame documents that started parsing.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"
+    units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.ParseTiming.ParseBlockedOnScriptLoad
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts,
+    for main frame documents that finished parsing. This metric is being phased
+    out in favor of the PageLoad.ParseTiming equivalent and will be deprecated
+    in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"
+    units="ms">
+  <obsolete>
+    deprecated in favor of
+    PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts
+    inserted from document.write, for main frame documents that started parsing.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"
+    units="ms">
+  <obsolete>
+    deprecated in favor of
+    PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser spent blocked on the load of scripts
+    inserted from document.write, for main frame documents that finished
+    parsing. This metric is being phased out in favor of the
+    PageLoad.ParseTiming equivalent and will be deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.ParseDuration" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.ParseTiming.ParseDuration
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time that the HTML parser was active, for main frame documents
+    that finished parsing. This metric is being phased out in favor of the
+    PageLoad.ParseTiming equivalent and will be deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint" units="ms">
+  <obsolete>
+    deprecated in favor of PageLoad.PaintTiming.ParseStartToFirstContentfulPaint
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Measures the time from when the HTML parser started, to when the page first
+    paints content. This metric is being phased out in favor of the
+    PageLoad.PaintTiming equivalent and will be deprecated in M54.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.FrameTree"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Total time the browser process waited for all render processes to save their
+    respective frames while saving a page into MHTML.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageSerialization.MhtmlGeneration.BrowserWaitForRendererTime.SingleFrame"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time the browser process waited on a single frame to be saved by a render
+    processes while saving a page into MHTML.
+  </summary>
+</histogram>
+
+<histogram name="PageSerialization.MhtmlGeneration.EncodingTime.SingleFrame"
+    units="microseconds">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time taken to encode into MTHML the fully serialized contents of a frame.
+  </summary>
+</histogram>
+
+<histogram name="PageSerialization.MhtmlGeneration.FullPageSavingTime"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>Time taken to save a page into an MHTML file.</summary>
+</histogram>
+
+<histogram
+    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.FrameTree"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time spent by the main threads of all involved render processes while saving
+    the frame tree of a page to MHTML.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time spent by the renderer main thread while saving one frame of a page to
+    MHTML.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.SlowestFrame"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    The longest time taken by the main thread of a render processes to save one
+    frame of a page being saved to MHTML. In other words this is the maximum
+    value reported in
+    PageSerialization.MhtmlGeneration.RendererMainThreadTime.SingleFrame for one
+    page save operation.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageSerialization.MhtmlGeneration.SerializationTime.SingleFrame"
+    units="microseconds">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time taken to fully serialize the contents of a frame, including HTML and
+    CSS and image resources.
+  </summary>
+</histogram>
+
+<histogram name="PageSerialization.MhtmlGeneration.WriteToDiskTime.SingleFrame"
+    units="ms">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time spent writing a frame's encoded MHTML data to the file on disk.
+  </summary>
+</histogram>
+
+<histogram name="PageSerialization.SerializationTime.CSSElement"
+    units="microseconds">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time spent serializing a CSS element (including embedded &quot;sub&quot;-CSS
+    and images).
+  </summary>
+</histogram>
+
+<histogram name="PageSerialization.SerializationTime.Html" units="microseconds">
+  <owner>carlosk@chromium.org</owner>
+  <summary>
+    Time taken to generate HTML data from a frame's DOM and serialize it
+    (without sub-resources like CSS and images).
+  </summary>
+</histogram>
+
+<histogram name="PageSerialization.SerializationTime.ImageElement"
+    units="microseconds">
+  <owner>carlosk@chromium.org</owner>
+  <summary>Time spent serializing an image element.</summary>
+</histogram>
+
+<histogram name="Parser.AppendBytesDelay" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The delay from when bytes are received on the main thread to when the
+    BackgroundHTMLParser starts tokenizing them. Always a shorter time than the
+    time emitted to Parser.PreloadTokenizeDelay.
+  </summary>
+</histogram>
+
+<histogram name="Parser.ChunkEnqueueTime" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The time it takes to enqueue a ParsedChunk onto the shared parser queue.
+  </summary>
+</histogram>
+
+<histogram name="Parser.DiscardedTokenCount" units="tokens">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The number of speculative tokens discarded by the parser when a rewind is
+    needed.
+  </summary>
+</histogram>
+
+<histogram name="Parser.PeakPendingChunkCount" units="chunks">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The maximum number of pending Chunks in the ParsedChunkQueue after the
+    parser is detached.
+  </summary>
+</histogram>
+
+<histogram name="Parser.PeakPendingTokenCount" units="tokens">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The maximum number of pending tokens in the ParsedChunkQueue after the
+    parser is detached.
+  </summary>
+</histogram>
+
+<histogram name="Parser.PreloadTokenizeDelay" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The delay from when bytes are received on the main thread to when they are
+    tokenized and preloads are sent back to the main parser. Always a greater
+    time than the time emitted to Parser.AppendBytesDelay.
+  </summary>
+</histogram>
+
+<histogram name="PartitionAlloc.CommittedSize" units="MB">
+  <owner>haraken@chromium.org</owner>
+  <summary>
+    The committed memory size in PartitionAlloc. The value is reported when we
+    see the highest memory usage we've ever seen in the renderer process.
+  </summary>
+</histogram>
+
+<histogram name="PasswordBubble.DisplayDisposition"
+    enum="PasswordBubbleDisplayDisposition">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    When the password management bubble opened, what state was it in?
+  </summary>
+</histogram>
+
+<histogram name="PasswordGeneration.Event" enum="PasswordGenerationEvent">
+  <owner>gcasto@chromium.org</owner>
+  <summary>
+    Measures the frequency of various password generation events.
+
+    Note that this histogram is logged from the renderer process, and
+    consequently the numbers should not be directly compared to the other
+    PasswordGeneration.* histograms, which are logged from the browser process.
+    Histograms logged in different processes are lost at different rates, which
+    introduces systematic bias between histograms logged in the renderer process
+    vs. those logged in the browser process.
+  </summary>
+</histogram>
+
+<histogram name="PasswordGeneration.SubmissionAvailableEvent"
+    enum="PasswordSubmissionEvent">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Measures the frequency of submission events for passwords that could have
+    been generated, but the user didn't choose to use the feature. This is to
+    compare with PasswordGeneration.SubmssionEvent.
+  </summary>
+</histogram>
+
+<histogram name="PasswordGeneration.SubmissionEvent"
+    enum="PasswordSubmissionEvent">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Measures the frequency of submission events for generated passwords. This is
+    similar to PasswordManager.ActionsTakenWithPsl but only tracks events which
+    are interesting for generated passwords.
+  </summary>
+</histogram>
+
+<histogram name="PasswordGeneration.UploadStarted" enum="Boolean">
+  <owner>gcasto@chromium.org</owner>
+  <summary>
+    The number of times that we try to upload a form that we believe should
+    trigger password generation. False means that something about the form would
+    not allow us to try upload (not an Autofillable field, uploading disabled,
+    Autofill servers in backoff, etc.). True does not mean that the upload
+    actually completed successfully, just that it was started.
+  </summary>
+</histogram>
+
+<histogram name="PasswordHash.CreateTime">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Time required to create the local hash of the user's GAIA password.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AccountChooserDialog"
+    enum="AccountChooserDismissalReason">
+  <obsolete>
+    Deprecated as of Chrome 56. See the histograms for one and more accounts.
+  </obsolete>
+  <owner>vasilii@chromium.org</owner>
+  <summary>The dismissal reason of the account chooser.</summary>
+</histogram>
+
+<histogram name="PasswordManager.AccountChooserDialogMultipleAccounts"
+    enum="AccountChooserDismissalReason">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The dismissal reason of the account chooser with multiple accounts.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AccountChooserDialogOneAccount"
+    enum="AccountChooserDismissalReason">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The dismissal reason of the account chooser with one account.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AccountChooserDialogUsability"
+    enum="AccountChooserUsabilityState">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Whether the account chooser includes an empty username or any duplicates
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AccountsPerSite">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The number of accounts stored per site in the password manager (one event
+    per site)
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AccountsReusingPassword" units="accounts">
+  <owner>engedy@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Records, for each account, the number of other accounts (across all sites
+    and usernames) that reuse the same password. Only non-blacklisted,
+    HTML-form-based accounts are considered.
+
+    For each account, samples will only be recorded into the histograms that
+    have the first suffix corresponding to whether that account was saved on a
+    secure website or not. The second suffix is used to further categorize the
+    other accounts that reuse the same password based on how they relate to the
+    account in question, and whether they are secure. The number of other
+    accounts in each category will be reported into histogram with the
+    respective second suffixes.
+
+    Metrics are collected once per browser start-up. In case of multiple
+    profiles, the counts are for the profile for which a WebContents is first
+    created.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ActionsTaken"
+    enum="PasswordManagerActionsTaken">
+  <obsolete>
+    Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Stats documenting how we handle every form containing a password, bucketed
+    by the actions taken.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ActionsTakenV3"
+    enum="PasswordManagerActionsTakenV3">
+  <owner>vabr@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Stats documenting how we handle every form containing a password, bucketed
+    by the actions taken.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ActionsTakenWithPsl"
+    enum="PasswordManagerActionsTakenWithPsl">
+  <obsolete>
+    Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Stats documenting how we handle every form containing a password, bucketed
+    by the actions taken.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationBackend.FetchSize" units="facets">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The number of facets for which affiliation information was requested in a
+    network fetch. Recorded for each network fetch.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationBackend.FirstFetchDelay" units="ms">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The time elapsed between creation of the AffiliationBackend and the first
+    time it needed to issue a network fetch.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationBackend.SubsequentFetchDelay"
+    units="ms">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The elapsed time between subsequent network fetches. Recorded whenever the
+    AffiliationBackend initiated a network fetch, regardless of success or
+    failure.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationDummyData.RequestResultCount"
+    units="results">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The number of facets affiliated with a dummy Web facet, according to the
+    affiliation information retrieved from the cache. Recorded for each dummy
+    Web facet, once shortly after start-up, and then periodically every hour;
+    but only if getting affiliations succeeded for the Web facet.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationDummyData.RequestSuccess"
+    enum="BooleanSuccess">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whether or not affiliations of a dummy Web facet could be successfully
+    retrieved from the cache. Recorded for each dummy Web facet, once shortly
+    after start-up, and then periodically every hour.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationFetcher.FetchErrorCode"
+    enum="NetErrorCodes">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The network error code, as reported by the underlying URLFetcher. Recorded
+    only for each network fetch that failed due to network/server errors.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationFetcher.FetchHttpResponseCode"
+    enum="HttpResponseCode">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The HTTP response code, as reported by the underlying URLFetcher. Recorded
+    only for each network fetch that failed due to network/server errors.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AffiliationFetcher.FetchResult"
+    enum="AffiliationFetchResult">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whether the network fetch succeeded, failed due to network/server errors, or
+    contained malformed data. Recorded for each network fetch.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AllowToCollectURLBubble.UIDismissalReason"
+    enum="PasswordManagerAllowToCollectURLBubble.UIDismissalReason">
+  <obsolete>
+    The bubble isn't shown anymore. Become obsolete in Feb. 2015.
+  </obsolete>
+  <owner>melandory@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>Why was &quot;Allow to collect URL?&quot; bubble closed?</summary>
+</histogram>
+
+<histogram name="PasswordManager.AutocompletePopupSuppressedByGeneration"
+    enum="BooleanSuppressed">
+  <owner>gcasto@chromium.org</owner>
+  <summary>
+    If the password manager UI was suppressed because generation UI was already
+    being displayed for the same field.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.AutoSigninFirstRunDialog"
+    enum="AutoSigninFirstRun">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The dismissal reason of the auto-signin first run experience.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.BlacklistedSites">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The total number of sites that the user has blacklisted. Recorded by
+    iterating over stored passwords once per run of Chrome.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.EmptyUsernames.CountInDatabase">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Number of password forms with empty username in the Login Database. This is
+    recorded on startup.
+  </summary>
+</histogram>
+
+<histogram
+    name="PasswordManager.EmptyUsernames.FormWithoutUsernameFieldIsPasswordChangeForm"
+    enum="PasswordManagerEmptyUsernamePasswordChangeForm">
+  <owner>msramek@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    When parsing a password form, and no username field is detected, whether
+    this was a password change form.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.EmptyUsernames.OfferedToSave"
+    enum="PasswordManagerShowEmptyUsername">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    When offering to save a password, whether the username is empty.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.EmptyUsernames.ParsedUsernameField"
+    enum="PasswordManagerEmptyUsernameField">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    When parsing a password form, whether a username field is detected.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.EmptyUsernames.PasswordFieldCount">
+  <owner>msramek@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The number of password fields for password forms that do not have a username
+    field. This is recorded every time such a password form is successfully
+    parsed. Note that the parsing is attempted when the form is encountered (i.e
+    when the document is loaded) and also when it is submitted.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.EmptyUsernames.TextAndPasswordFieldCount">
+  <owner>msramek@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The total number of text and password fields for password forms that do not
+    have a username field. This is recorded every time such a password form is
+    successfully parsed. Note that the parsing is attempted when the form is
+    encountered (i.e when the document is loaded) and also when it is submitted.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.EmptyUsernames.WithoutCorrespondingNonempty">
+  <owner>msramek@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Number of password forms with empty username in the Login Database for which
+    there is not another password form from the same realm with a nonempty
+    username. In other words, number of password forms with empty username which
+    we do not suspect to be reauthentication forms.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.Enabled" enum="BooleanEnabled">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Indicates whether the password manager is enabled when a tab is opened. This
+    includes prerendered tabs.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ExportedPasswordsPerUserInCSV">
+  <owner>xunlu@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>The number of passwords exported in CSV format per user.</summary>
+</histogram>
+
+<histogram name="PasswordManager.FilledCredentialWasFromAndroidApp"
+    enum="PasswordManagerFilledAndroidCredentials">
+  <owner>msramek@chromium.org</owner>
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    When a credential is filled, whether it comes from an Android app.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.FillSuggestionsIncludeAndroidAppCredentials"
+    enum="PasswordManagerOfferedAndroidCredentials">
+  <owner>msramek@chromium.org</owner>
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    When offering to fill the username and password, whether at least one of the
+    credentials in the dropdown comes from an Android app.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.FormDataDeserializationStatus"
+    enum="FormDataDeserializationStatus">
+  <owner>gcasto@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <summary>
+    The success or failure of deserializing saved FormData. Failure either
+    indicates corrupted data or the presence of bugs in the serialization or
+    deserialization code.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.GeneratedFormHasNoFormManager"
+    enum="BooleanFormManager">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <owner>deepak.m1@samsung.com</owner>
+  <summary>
+    When the generation state of a password was changed, records whether an
+    existing form corresponding to the password was found.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.GetMediated" enum="CredentialManagerGetResult">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Tracks result of navigator.credentials.get() with unmediated=false. That is
+    the result of account chooser.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.GetUnmediated"
+    enum="CredentialManagerGetResult">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Tracks result of navigator.credentials.get() with unmediated=true. That is
+    the result of auto sign-in.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ImportedPasswordsPerUserInCSV">
+  <owner>xunlu@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>The number of passwords imported in CSV format per user</summary>
+</histogram>
+
+<histogram name="PasswordManager.ImportPasswordFromCSVResult"
+    enum="PasswordImportFromCSVResult">
+  <owner>xunlu@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The response code of successful or failed password import attempt from a CSV
+    file.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.InfoBarResponse" enum="InfoBarResponse">
+  <obsolete>
+    Deprecated as of 03/2016. This metric has been replaced by
+    PasswordManager.UIDismissalReason.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The distribution of responses to the &quot;Do you want Chrome to remember
+    this password&quot;? info bar prompt.
+  </summary>
+</histogram>
+
+<histogram
+    name="PasswordManager.KeychainMigration.NumChromeOwnedInaccessiblePasswords">
+  <obsolete>
+    Deprecated as of 09/2016.
+  </obsolete>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    After migration from the Mac Keychain fails, records the number of passwords
+    in the Keychain owned by Chrome but not accessible by it.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.KeychainMigration.NumFailedPasswords">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    After migration from the Mac Keychain fails, records the number of passwords
+    in the Chrome Password Manager database for which the corresponding values
+    in the Keychain are not accessible by Chrome.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.KeychainMigration.NumPasswordsOnFailure">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    After migration from the Mac Keychain fails, records the number of passwords
+    in the Chrome Password Manager database to be migrated. As there is no
+    partial migration, it's the total number of passwords in the DB.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.KeychainMigration.Status"
+    enum="KeychainMigrationStatus">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The status of passwords migration from the Keychain. It's recorded shortly
+    after startup.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.KWalletDeserializationStatus"
+    enum="BooleanSuccess">
+  <owner>gcasto@chromium.org</owner>
+  <owner>dvadym@chromium.org</owner>
+  <summary>
+    The success or failure of deserializing PasswordForms in KWallet. Failure
+    either indicates corrupted data or the presense of bugs in the
+    deserialization code.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.LinuxBackendStatistics">
+  <owner>dvadym@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Information about usage of password storage backends on Linux. It also
+    includes whether a command line flag for a specific backend is given.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.LoginDatabaseFailedVersion">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The version of LoginDatabase if the migration to a new one failed.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.LoginDatabaseInit"
+    enum="LoginDatabaseInitError">
+  <owner>vasilii@chromium.org</owner>
+  <summary>An error on LoginDatabase initialization.</summary>
+</histogram>
+
+<histogram name="PasswordManager.MultiAccountPasswordUpdateAction"
+    enum="MultiAccountUpdateBubbleUserAction">
+  <owner>dvadym@chromium.org</owner>
+  <summary>
+    A user action when a password update bubble with multiple accounts is shown.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.NumPasswordsDeletedByBulkDelete">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Number of passwords deleted when the user chooses to clear passwords via the
+    clear browsing data UI.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.NumPasswordsDeletedDuringRollback">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Number of passwords deleted when browsing data is cleared during rollback.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.NumPasswordsDeletedWhenBlacklisting">
+  <obsolete>
+    Deprecated as of 08/2015.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    When the user chooses to never remember passwords for a form, we remove all
+    previously saved credentials for that form. This is the count of those
+    credentials.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.NumPasswordsNotShown">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The password manager only shows those credentials that are considered the
+    best match for a particular form. This stat keep track of the credentials
+    that were not as good of a match and were suppressed.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.OsPasswordStatus"
+    enum="PasswordManagerOsPasswordStatus">
+  <owner>vabr@chromium.org</owner>
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Indicates whether the user's OS password is blank or not at browser startup.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.OtherPossibleUsernamesUsage"
+    enum="OtherPossibleUsernamesUsage">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Breakdown of how other possible usernames are displayed. Recorded every time
+    we autofill a password form.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.PasswordSyncState" enum="PasswordSyncState">
+  <owner>gcasto@chromium.org</owner>
+  <owner>rouslan@chromium.org</owner>
+  <summary>
+    Whether the passwords are syncing and, if not, then what's causing sync
+    failures. Recorded after the first sync attempt either succeeds or fails.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ProvisionalSaveFailure"
+    enum="ProvisionalSaveFailure">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Breakdown of cases where a password is submitted, but we don't even try and
+    save it. Recorded for every password form submit.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.PslDomainMatchTriggering"
+    enum="PasswordManagerPslDomainMatchTriggering">
+  <owner>vabr@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    Breakdown on trigger rate of providing a password form autofill entry based
+    on matching stored information using the public suffix list for possible
+    matches.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SavePasswordPromptDisappearedQuickly"
+    enum="Boolean">
+  <obsolete>
+    Deprecated as of 03/2016.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Indicates whether the save password prompt disappeared in less than one
+    second. This most likely indicates that the prompt was dismissed
+    automatically, e.g. due to a page navigation, before the user was able to
+    respond to the infobar.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SavePasswordPromptDisplayed" enum="Boolean">
+  <obsolete>
+    Deprecated as of 03/2016.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>Indicates whether the save password prompt was displayed.</summary>
+</histogram>
+
+<histogram name="PasswordManager.SavePasswordPromptResponse"
+    enum="SavePasswordPromptResponseType">
+  <obsolete>
+    Deprecated as of 03/2016.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Breakdown of which response the user selected from the save password prompt.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SettingsReconciliation.InitialAndFinalValues"
+    enum="PasswordManagerPreferencesInitialAndFinalValues">
+  <owner>engedy@chromium.org</owner>
+  <owner>melandory@chromium.org</owner>
+  <summary>
+    Tracks the pair of initial values and pair of final values for the legacy
+    preference for controlling the Chrome Password Manager and the new
+    preference for controlling Smart Lock on Android. A single sample is
+    recorded after sync has merged last snapshot and finished initialization for
+    sync users, and on profile initialization for non-sync users.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SettingsReconciliation.InitialValues"
+    enum="PasswordManagerPreferencesInitialValues">
+  <owner>engedy@chromium.org</owner>
+  <owner>melandory@chromium.org</owner>
+  <summary>
+    Tracks the pair of initial values for both for the legacy preference for
+    controlling the Chrome Password Manager and new preference for controlling
+    Smart Lock on Android. Sample is recorded on every profile initialization
+    before reconciliation logic is taken place, e.g. when user logs in to
+    browser, on a startup of a browser.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.ShouldShowAutoSignInFirstRunExperience"
+    enum="BooleanPending">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Records if the user still has to click through the first run experience to
+    benefit from auto sign-in behavior. Recorded on every start-up.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SignInPromo"
+    enum="PasswordBubbleSignInPromoDismissalReason">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    User action on the Chrome Sync promo that appears in the password bubble.
+    The promo offers to sign in to Chrome.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SignInPromoCountTilClick">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The number of times the Sign In promo in the password bubble was shown
+    before user clicked on it.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SignInPromoDismissalCount">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The number of times the Sign In promo in the password bubble was implcitly
+    dismissed. Recorded each time the promo is implicitly dismissed.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.StorePasswordImportedFromCSVResult"
+    enum="BooleanSuccess">
+  <owner>xunlu@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Whether password manager stored passwords imported from CSV file
+    successfully.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.StoreReadyWhenWiping" enum="Boolean">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    When the user logs in with their sync credential, PasswordManager checks if
+    there are any outdated copies of it in the password store, in order to purge
+    them. This histogram records whether password store data are ready during
+    this check.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SubmitNavigatesToDifferentDomain"
+    enum="PostSubmitNavigation">
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Indicates whether submitting a password login form changes the registry
+    controlled domain of the main frame.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SubmittedFormType" enum="PasswordFormType">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The type (e.g. signup, login, change password) of all submitted password
+    forms. This is logged on form submission, but doesn't require that the
+    password manager saves.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SyncCredentialFiltered"
+    enum="CredentialFilteredType">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    This histogram is reported for those forms on accounts.google.com, on which
+    Chrome is forced by Finch/flags during autofilling to remove sync
+    credentials from password store results. It reports true if sync credentials
+    were indeed removed from the store results, and false if there were no sync
+    credentials in the results to begin with.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.SyncingAccountState"
+    enum="PasswordManagerSyncingAccountState">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    Information about the user's current sync status crossed with whether their
+    synced password is saved.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.TimesGeneratedPasswordUsed">
+  <obsolete>
+    Deprecated as of 11/11/14. New statistic is
+    PasswordManager.TimesPasswordUsed.AutoGenerated.
+  </obsolete>
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The number of times each generated password has been used to log in.
+    Recorded by iterating over stored passwords once per run. This information
+    is persisted and synced.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.TimesPasswordUsed">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The number of times each saved password has been used to log in. Does not
+    include generated passwords. Recorded by iterating over stored passwords
+    once per run. This information is persisted and synced.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.TotalAccounts">
+  <owner>gcasto@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The number of accounts stored in the password manager (across all sites)
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.TotalAccountsHiRes.WithScheme"
+    units="accounts">
+  <owner>engedy@chromium.org</owner>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The number of accounts stored in the password manager (across all sites) for
+    origins with the scheme (e.g., HTTP, HTTPS, FTP) as given in the histogram
+    suffix. For each scheme, the count is recorded once per browser start-up.
+    (In case of multiple profiles, the counts are for the profile that first has
+    a WebContents created.)
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.UIDismissalReason"
+    enum="PasswordManagerUIDismissalReason">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Why was the password manager's UI (bubble or infobar) closed?
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.UpdatePasswordSubmissionEvent"
+    enum="UpdatePasswordSubmissionEvent">
+  <owner>dvadym@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    The password submission event happened when the user changes their password
+    on a website, say foo.com or types new password on a sign-in form for saved
+    credential (which might mean that the password was changed in a different
+    browser). The later case called password overriding. This histogram measures
+    whether the user has any passwords saved in the Chrome password manager for
+    foo.com or the password was overriden on sign-in form, and what action the
+    user performed on the offered bubble. It's recorded when the bubble is
+    closed.
+  </summary>
+</histogram>
+
+<histogram name="PasswordManager.UserStoredPasswordWithInvalidSSLCert"
+    enum="Boolean">
+  <obsolete>
+    Deprecated 07/2016 because this information is no longer stored in
+    PasswordForm. See also http://crbug.com/413020.
+  </obsolete>
+  <owner>xunlu@chromium.org</owner>
+  <owner>gcasto@chromium.org</owner>
+  <summary>
+    Whether saved password for HTTPS site had a valid SSL cert when the password
+    was saved.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.CheckoutFunnel.Aborted"
+    enum="PaymentRequestAbortReason">
+  <owner>sebsg@chromium.org</owner>
+  <summary>The reason that lead to an abort of the Payment Request.</summary>
+</histogram>
+
+<histogram name="PaymentRequest.CheckoutFunnel.Completed" enum="BooleanHit">
+  <owner>sebsg@chromium.org</owner>
+  <summary>When the merchant has processed the user's Payment Request.</summary>
+</histogram>
+
+<histogram name="PaymentRequest.CheckoutFunnel.Initiated" enum="BooleanHit">
+  <owner>sebsg@chromium.org</owner>
+  <summary>When a Payment Request gets initiated by the user.</summary>
+</histogram>
+
+<histogram name="PaymentRequest.CheckoutFunnel.PayClicked" enum="BooleanHit">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    When the user clicks the &quot;pay&quot; button in the Payment Request UI.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.CheckoutFunnel.ReceivedInstrumentDetails"
+    enum="BooleanHit">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    When the browser retrieves the instrument details from the payment app to
+    complete a purchase.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.CheckoutFunnel.Shown" enum="BooleanHit">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    When the Payment Request UI gets shown after initialization.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.NumberOfSelectionAdds">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    The number of times the user added an entry during a Payment Request.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.NumberOfSelectionChanges">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    The number of times the user changed an entry during a Payment Request.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.NumberOfSelectionEdits">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    The number of times the user edited an entry during a Payment Request.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.NumberOfSuggestionsShown">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    The number of suggestions shown to the user during a payment request.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.RequestedInformation"
+    enum="PaymentRequestRequestedInformation">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    Tracks what user information is required by merchants to complete a Payment
+    Request.
+  </summary>
+</histogram>
+
+<histogram name="PaymentRequest.SelectedPaymentMethod"
+    enum="PaymentRequestPaymentMethods">
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    Tracks what payment method was used to complete a transaction in Payment
+    Request.
+  </summary>
+</histogram>
+
+<histogram name="PDF.DocumentFeature" enum="PDFFeatures">
+  <owner>tsergeant@chromium.org</owner>
+  <summary>
+    Tracks which features are used by documents opened in the PDF viewer, logged
+    when the document finishes loading.
+  </summary>
+</histogram>
+
+<histogram name="PDF.IsFontSubstituted" enum="Boolean">
+  <owner>npm@chromium.org</owner>
+  <summary>
+    Tracks documents opened in the PDF viewer where substitute fonts need to be
+    used.
+  </summary>
+</histogram>
+
+<histogram name="Pepper.Graphics3DHasShareGroup" units="BooleanShareGroup">
+  <owner>jbauman@chromium.org</owner>
+  <summary>
+    True if a non-flash Pepper Graphics3D context has a share group.
+  </summary>
+</histogram>
+
+<histogram name="Pepper.InterfaceUsed" enum="PepperInterface">
+  <owner>sehr@chromium.org</owner>
+  <owner>bradnelson@chromium.org</owner>
+  <owner>bbudge@chromium.org</owner>
+  <owner>raymes@chromium.org</owner>
+  <summary>
+    The number of out-of-process plugin processes that have loaded a particular
+    PPB interface version.
+  </summary>
+</histogram>
+
+<histogram name="Pepper.PluginContextSecurity.TCPConnect" enum="BooleanSecure">
+  <owner>raymes@chromium.org</owner>
+  <owner>jww@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether a Pepper TCP connect attempt comes from a plugin in a secure or an
+    insecure origin.
+  </summary>
+</histogram>
+
+<histogram name="Pepper.PluginContextSecurity.UDPBind" enum="BooleanSecure">
+  <owner>raymes@chromium.org</owner>
+  <owner>jww@chromium.org</owner>
+  <owner>rsleevi@chromium.org</owner>
+  <summary>
+    Whether a Pepper UDP bind attempt comes from a plugin in a secure or an
+    insecure origin.
+  </summary>
+</histogram>
+
+<histogram name="Pepper.SecureOrigin.MediaStreamRequest" enum="BooleanSecure">
+  <owner>raymes@chromium.org</owner>
+  <summary>
+    Whether a Pepper media stream request (mic/cam access) comes from a plugin
+    in a secure or an insecure origin.
+  </summary>
+</histogram>
+
+<histogram name="PerformanceMonitor.AverageCPU" units="PercentCPUUsage">
+  <owner>oysteine@chromium.org</owner>
+  <summary>
+    Average CPU utilization of a process, read out at each two-minute interval.
+    The utilization is in the 0-100% range per CPU, which is then summed up.
+    I.e. a quadcore system fully loaded would read as 400%.
+  </summary>
+</histogram>
+
+<histogram name="PerformanceMonitor.HighCPU" enum="BooleanHit">
+  <owner>oysteine@chromium.org</owner>
+  <summary>
+    The number of times a process has continuously stayed above a certain
+    threshold of CPU utilization over a certain time period (currently set to
+    two minutes).
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Action" enum="PermissionAction">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Tracks whether a permission was granted, rejected, etc. The suffix of the
+    histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Action.InsecureOrigin" enum="PermissionAction">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Tracks whether a permission was granted, rejected, etc on an insecure
+    origin. The suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Action.SecureOrigin" enum="PermissionAction">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>miguelg@chromium.org</owner>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Tracks whether a permission was granted, rejected, etc on a secure origin.
+    The suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Accepted" enum="PermissionRequestType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Tracks the permission bubbles (merged and non-merged) that are accepted.
+    Merged bubbles are considered accepted if all permissions are allowed.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Accepted.Persisted" enum="BooleanPersisted">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    For each granted permission prompt displayed with a persistence toggle
+    (remember my decision), records whether the persistence toggle was enabled
+    (persist) or not enabled (don't persist).
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Accepted.PriorDismissCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt accept, records the
+    total number of prompt dismissal events for this origin since the last time
+    the user cleared their history or site data and prior to the accept. The
+    suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt accept, records the
+    total number of prompt ignore events for this origin since the last time the
+    user cleared their history or site data and prior to the accept. The suffix
+    of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Denied" enum="PermissionRequestType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Tracks the permission bubbles (merged and non-merged) that are denied.
+    Merged bubbles are considered denied if any permission is denied.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Denied.Persisted" enum="BooleanPersisted">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    For each denied permission prompt displayed with a persistence toggle
+    (remember my decision), records whether the persistence toggle was enabled
+    (persist) or not enabled (don't persist).
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Denied.PriorDismissCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt deny, records the
+    total number of prompt dismissal events for this origin since the last time
+    the user cleared their history or site data and prior to the accept. The
+    suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Denied.PriorIgnoreCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt deny, records the
+    total number of prompt ignore events for this origin since the last time the
+    user cleared their history or site data and prior to the accept. The suffix
+    of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.DismissCount">
+  <obsolete>
+    Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016.
+  </obsolete>
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt dismissal, records
+    the total number of prompt dismissal events for this origin since the last
+    time the user cleared their history or site data, inclusive of the current
+    dismissal. Every event in a bucket larger than 1 in this histogram will also
+    have an event in each smaller bucket. The suffix of the histogram indicates
+    which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Dismissed.PriorDismissCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt dismiss, records
+    the total number of prompt dismissal events for this origin since the last
+    time the user cleared their history or site data and prior to the dismiss.
+    The suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt dismiss, records
+    the total number of prompt ignore events for this origin since the last time
+    the user cleared their history or site data and prior to the dismiss. The
+    suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.IgnoreCount">
+  <obsolete>
+    Renamed to Permissions.Prompt.Dismissed.PriorDismissCount on 17 August 2016.
+  </obsolete>
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt ignore, records the
+    total number of prompt ignore events for this origin since the last time the
+    user cleared their history or site data, inclusive of the current ignore.
+    Every event in a bucket larger than 1 in this histogram will also have an
+    event in each smaller bucket. The suffix of the histogram indicates which
+    particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Ignored.PriorDismissCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt ignore, records the
+    total number of prompt dismissal events for this origin since the last time
+    the user cleared their history or site data and prior to the ignore. The
+    suffix of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    This metric, recorded at the time of a permission prompt ignore, records the
+    total number of prompt ignore events for this origin since the last time the
+    user cleared their history or site data and prior to the ignore. The suffix
+    of the histogram indicates which particular permission.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.MergedBubbleAccepted"
+    enum="PermissionRequestType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Tracks acceptance of permission bubble request types that have been merged
+    into coalesced bubbles.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.MergedBubbleDenied"
+    enum="PermissionRequestType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Tracks denial of permission bubble request types that have been merged into
+    coalesced bubbles.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.MergedBubbleTypes"
+    enum="PermissionRequestType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Tracks the permission bubble request types that are being merged into
+    coalesced bubbles.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.RequestsPerPrompt">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    How many permission requests each permissions prompt shown to the user
+    contains.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Prompt.Shown" enum="PermissionRequestType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Tracks how many times permission prompts are shown to users.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Requested.CrossOrigin" enum="PermissionStatus">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>keenanb@google.com</owner>
+  <owner>jww@chromium.org</owner>
+  <summary>
+    The embedder's permission setting at the time of a cross-origin iframe
+    permission request for a given permission type. See the corresponding
+    histogram suffixes.
+
+    A request is when a website makes a permission request and the user has the
+    permission set to prompt (i.e. not blocked or allowed).
+
+    Note this is probably not the metric you want - it does not correspond to
+    the total number of times websites request a permission. Also, because
+    specific permissions have code that can automatically block or grant
+    permissions based on things like incognito, installed extensions etc., this
+    does also not correspond to the number of times users are prompted to allow
+    permissions.
+
+    See https://crbug.com/638076 for more details.
+  </summary>
+</histogram>
+
+<histogram name="Permissions.Requested.SameOrigin" enum="PermissionType">
+  <owner>dominickn@chromium.org</owner>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>keenanb@google.com</owner>
+  <owner>jww@chromium.org</owner>
+  <summary>
+    The permission type (geolocation, and such) of a same-origin permission
+    request.
+
+    A request is when a website makes a permission request and the user has the
+    permission set to prompt (i.e. not blocked or allowed).
+
+    Note this is probably not the metric you want - it does not correspond to
+    the total number of times websites request a permission. Also, because
+    specific permissions have code that can automatically block or grant
+    permissions based on things like incognito, installed extensions etc., this
+    does also not correspond to the number of times users are prompted to allow
+    permissions.
+
+    See https://crbug.com/638076 for more details.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.ActivityReferral"
+    enum="PhysicalWebActivityReferer">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Referer used by user to reach the main Physical Web Activity.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.ReferralDelay.OptInNotification" units="ms">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Time between the most recent opt in notification update and when the user
+    arrives at the ListUrlsActivity.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.ReferralDelay.StandardNotification" units="ms">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Time between the most recent standard notification update and when the user
+    arrives at the ListUrlsActivity.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.ResolveTime.Background" units="ms">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Round trip time to the metadata server for a Physical Web URL resolution
+    which the client requests during a background scan.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.ResolveTime.Foreground" units="ms">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Round trip time to the metadata server for a Physical Web URL resolution
+    which the client requests during a foreground scan, that is not explicitly
+    requested via a refresh.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.ResolveTime.Refresh" units="ms">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Round trip time to the metadata server for a Physical Web URL resolution
+    which the client requests during a foreground scan, that is explicitly
+    requested via a refresh.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.RoundTripTimeMilliseconds" units="ms">
+  <owner>olivierrobin@chromium.org</owner>
+  <summary>Round trip time to the metadata server for Physical web.</summary>
+</histogram>
+
+<histogram name="PhysicalWeb.State.Bluetooth" enum="BluetoothStatus">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>Whether bluetooth is on, off, or unknown.</summary>
+</histogram>
+
+<histogram name="PhysicalWeb.State.DataConnectionActive" enum="BooleanActive">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>Whether the data connection is active.</summary>
+</histogram>
+
+<histogram name="PhysicalWeb.State.LocationPermission" enum="BooleanAccepted">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>Whether location permission has been accepted.</summary>
+</histogram>
+
+<histogram name="PhysicalWeb.State.LocationServices" enum="BooleanEnabled">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>Whether location services are enabled.</summary>
+</histogram>
+
+<histogram name="PhysicalWeb.State.Preference"
+    enum="PhysicalWebPreferenceStatus">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Whether the preference is on, off, or if the user is in an onboarding state
+    when Chrome first starts up.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.TotalUrls.OnInitialDisplay" units="urls">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    The number of URLs displayed to a user when a list of nearby URLs is first
+    displayed.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.TotalUrls.OnRefresh" units="urls">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    The number of URLs displayed to a user when a list of nearby URLs is
+    displayed after refreshing.
+  </summary>
+</histogram>
+
+<histogram name="PhysicalWeb.WebUI.ListViewUrlPosition" units="selections">
+  <owner>cco3@chromium.org</owner>
+  <owner>mattreynolds@chromium.org</owner>
+  <owner>mmocny@chromium.org</owner>
+  <summary>
+    Count of how many times the user selected a nearby URL at the specified
+    index in the Physical Web WebUI list view (zero-based). Capped at 50.
+  </summary>
+</histogram>
+
+<histogram name="Platform.AnyCrashesDaily" units="count per day">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of crashes (user, kernel, and unclean shutdowns) during the previous
+    day, or the most recent day the device was in use.  Reported at most once a
+    day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.AnyCrashesWeekly" units="count per week">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of crashes (user, kernel, and unclean shutdowns) during the previous
+    epoch-week, or the most recent epoch-week the device was in use.  Reported
+    at most once a week.  Epoch-weeks divide the time in 7-day intervals
+    starting at the UNIX epoch.
+  </summary>
+</histogram>
+
+<histogram name="Platform.AsvGroup">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS (ARM Chromebooks using Exynos 5250 only) Adaptive Support Voltage
+    Group, recorded once per bootup.  Indicates which &quot;bin&quot; the SoC is
+    part of, which sets the voltage that different rails on the system will run
+    at. The values 0-11 are valid.  A value of 12 indicates an error parsing
+    dmesg and should be investigated.  See also Platform.LotIdEnum.
+  </summary>
+</histogram>
+
+<histogram name="Platform.BatteryAbsent" enum="BooleanAbsent">
+  <owner>cernekee@chromium.org</owner>
+  <summary>
+    Indicates whether the kernel's ACPI Smart Battery System driver logged an
+    error trying to find the battery on boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.BootMode.DevSwitch"
+    enum="Platform.BootMode.SwitchStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Indicates the status of the developer switch on Chrome OS hardware. The
+    developer switch allows users to run their own code on the device.
+  </summary>
+</histogram>
+
+<histogram name="Platform.BootMode.FirmwareWriteProtect"
+    enum="Platform.BootMode.FirmwareWriteProtect">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    On Chrome OS hardware, indicates whether flash write protection is enabled
+    for the firmware indicated by the histogram suffix.
+  </summary>
+</histogram>
+
+<histogram name="Platform.BootMode.WriteProtectSwitch"
+    enum="Platform.BootMode.SwitchStatus">
+  <owner>mnissler@chromium.org</owner>
+  <summary>
+    Indicates the status of the hardware write protect switch on Chrome OS
+    hardware. The write protect switch protects firmware from being rewritten.
+  </summary>
+</histogram>
+
+<histogram name="Platform.BootSectorsRead">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Chrome OS number of disk sectors read at boot from kernel start to
+    login-prompt-ready.
+  </summary>
+</histogram>
+
+<histogram name="Platform.BootSectorsWritten">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Chrome OS number of disk sectors written at boot from kernel start to
+    login-prompt-ready.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Cast.MeminfoMemAvailable">
+  <owner>halliwell@chromium.org</owner>
+  <summary>
+    /proc/meminfo's 'MemAvailable' in Mbytes. Collected on Cast devices with
+    kernel version 3.14 and above and capped at 500.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Cast.MeminfoMemFreeDerived">
+  <owner>halliwell@chromium.org</owner>
+  <summary>
+    free + buffers + cache memory in Mbytes on Cast devices, capped at 500.
+  </summary>
+</histogram>
+
+<histogram name="Platform.CompressedSwapSize" units="MB">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Chrome OS size of allocated swap area in megabytes (before compression)
+  </summary>
+</histogram>
+
+<histogram name="Platform.CpuFrequencyThermalScaling" units="%">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    CPU frequency as percent of the baseline frequency, sampled every 30s. This
+    may be throttled down from 100% due to power dissipation issues (too high
+    temperature).  It may also be throttled up (turbo), but the kernel does not
+    report the actual turbo frequency, so we put such samples in the 101%
+    bucket.
+  </summary>
+</histogram>
+
+<histogram name="Platform.CpuUsage" units="%">
+  <owner>sonnyrao@chromium.org</owner>
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Peak total (single core) CPU usage for the last sample interval.  The sample
+    interval may vary from seconds to several minutes.
+  </summary>
+</histogram>
+
+<histogram name="Platform.CrOSEvent" enum="CrosEventEnum">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    Generic event of interest from Chrome OS.  Intended mainly to help assess
+    the frequency of rare error conditions.
+  </summary>
+</histogram>
+
+<histogram name="Platform.CumulativeCpuTime" units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Total CPU time accumulated since the last version update.  Reported at most
+    once a day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.CumulativeUseTime" units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Total use time (device ON and not asleep) since last version update.
+    Reported at most once a day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DailyUseTime" units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Total use time (device ON and not asleep) in the previous day, or the most
+    recent day the device was in use.  Reported at most once a day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.Cache_Avg" units="KB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Average size of user's Cache directory. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.Cache_Max" units="KB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Maximum size of user's Cache directory. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.Downloads_Avg" units="KB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Average size of user's Cache directory. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.Downloads_Max" units="KB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Maximum size of user's Cache directory. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.GCache_Avg" units="KB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Average size of user's GCache directory. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.GCache_Max" units="KB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Maximum size of user's GCache directory. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.LeastUsedAccountDays" units="days">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Days since the least frequently used account signed in. Logged once a day,
+    if disk usage is high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.NumUserHomeDirectories"
+    units="home directories">
+  <owner>achuith@chromium.org</owner>
+  <owner>tls@chromium.org</owner>
+  <summary>
+    Number of users home directories on the device. Logged once a day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.OldestUserOnDevice">
+  <owner>achuith@chromium.org</owner>
+  <owner>omrilio@chromium.org</owner>
+  <summary>
+    Days since last login of the least recently user on device. Logged once a
+    day, if disk usage is high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsage.UsersOnDevice">
+  <owner>achuith@chromium.org</owner>
+  <owner>omrilio@chromium.org</owner>
+  <summary>
+    Number of user home dirs on device. Logged once a day, if disk usage is
+    high.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsageChronos" units="KB">
+  <owner>keescook@google.com</owner>
+  <summary>
+    Chrome OS KB in use in the /home/chronos filesystem tree. Logged once a day
+    during log file cleanup.
+  </summary>
+</histogram>
+
+<histogram name="Platform.DiskUsageVar" units="KB">
+  <owner>keescook@google.com</owner>
+  <summary>
+    Chrome OS KB in use in the /var filesystem tree. Logged once a day during
+    log file cleanup.
+  </summary>
+</histogram>
+
+<histogram name="Platform.IntelMaxMicroArchitecture"
+    enum="IntelMaxMicroArchitecture">
+  <owner>fbarchard@chromium.org</owner>
+  <summary>
+    The maximum supported micro-architecture on an Intel platform.  This value
+    is logged at program start time.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelCrashesDaily" units="count per day">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of kernel crashes during the previous day, or the most recent day the
+    device was in use.  Reported at most once a day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelCrashesPerActiveYear" units="count per year">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of kernel crashes since the last OS update, normalized as number of
+    crashes per year of active use (active use = device is ON and not asleep).
+    Reported daily.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelCrashesPerCpuYear" units="count per CPU year">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of kernel crashes since the last OS update, normalized as number
+    crashes per year of CPU time.  Reported daily.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelCrashesSinceUpdate" units="count">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of kernel crashes since the last OS update, reported daily.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelCrashesWeekly" units="count per week">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Count of kernel crashes during the previous epoch-week, or the most recent
+    epoch-week the device was in use.  Reported at most once a week. Epoch-weeks
+    divide the time in 7-day intervals starting at the UNIX epoch.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelCrashInterval" units="seconds">
+  <owner>semenzato@chromium.org</owner>
+  <owner>bsimonnet@chromium.org</owner>
+  <summary>
+    Time elapsed between the last two kernel crashes.  Sent after every kernel
+    crash.
+  </summary>
+</histogram>
+
+<histogram name="Platform.KernelWarningHashes">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The 32-bit hash of a kernel warning.  This is the hash of the
+    &quot;file:line&quot; string corresponding to the location of the warning,
+    for instance: &quot;/mnt/host/source/src/third_party/kernel/files/drivers
+    /gpu/drm/i915/intel_dp.c:351&quot; (ignore spurious spaces).  The hash is
+    produced by this code: while (*string) hash = (hash &lt;&lt; 5) + hash +
+    *string++;  Separately each warning is also collected (with its hash) via
+    the crash reporter, but only its first occurrence in each boot session.
+  </summary>
+</histogram>
+
+<histogram name="Platform.LogicalCpuCount">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Number of logical processors. This includes Hyperthreaded cores.
+  </summary>
+</histogram>
+
+<histogram name="Platform.LotIdEnum" enum="Exynos5250LotIdEnum">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Chrome OS (ARM Chromebooks using Exynos 5250 only) indication about whether
+    we're part of a special lot ID.  Special lot IDs are groups of chips that
+    have special case handling in the kernel for the Adaptive Support Voltage
+    code (the normal logic doesn't work).  See also Platform.AsvGroup.  Note
+    that fused devices are never part of a special lot (currently) and only some
+    unfused lots are &quot;special&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Mem" units="%">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>sonnyrao@chromium.org</owner>
+  <owner>semenzato@chromium.org</owner>
+  <owner>bccheng@chromium.org</owner>
+  <summary>
+    Various memory usage % of total memory on Chrome OS devices (snapshotted
+    every 30s).
+  </summary>
+</histogram>
+
+<histogram name="Platform.Meminfo" units="KB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>sonnyrao@chromium.org</owner>
+  <owner>semenzato@chromium.org</owner>
+  <owner>bccheng@chromium.org</owner>
+  <summary>
+    Various memory usage amount on Chrome OS devices (snapshotted every 30s).
+  </summary>
+</histogram>
+
+<histogram name="Platform.MemoryBandwidth.ReadWrite" units="MB/s">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    Peak memory bandwith (read and write) usage during the last sample interval.
+    The sample interval may vary from seconds to several minutes.
+  </summary>
+</histogram>
+
+<histogram name="Platform.MemuseAnon0">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Chrome OS total anonymous memory (active + inactive) as % of total memory 1
+    minute after boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.MemuseAnon1">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Chrome OS total anonymous memory (active + inactive) as % of total memory 5
+    minutes after boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.MemuseAnon2">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Chrome OS total anonymous memory (active + inactive) as % of total memory 30
+    minutes after boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.MemuseAnon3">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Chrome OS total anonymous memory (active + inactive) as % of total memory
+    150 minutes after boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.MemuseAnon4">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Chrome OS total anonymous memory (active + inactive) as % of total memory
+    750 minutes after boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.PageFaultsLong" units="page faults/second">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Page faults per second averaged over 30s interval, sampled continuously.
+  </summary>
+</histogram>
+
+<histogram name="Platform.PageFaultsShort" units="page faults/second">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Page faults per second averaged over 1s interval, sampled every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.ReadSectorsLong">
+  <owner>gwendal@google.com</owner>
+  <summary>
+    Number of disk sectors per second read by Chrome OS in a long interval
+    (currently 30s)
+  </summary>
+</histogram>
+
+<histogram name="Platform.ReadSectorsShort">
+  <owner>gwendal@google.com</owner>
+  <summary>
+    Number of disk sectors per second read by Chrome OS in a short interval
+    (currently 1s, sampled every 30s)
+  </summary>
+</histogram>
+
+<histogram name="Platform.SmartTransferErrors">
+  <owner>gwendal@google.com</owner>
+  <summary>Disk communication errors (SMART 199), sent at boot.</summary>
+</histogram>
+
+<histogram name="Platform.SmartUncorrectableErrors">
+  <owner>gwendal@google.com</owner>
+  <summary>Uncorrectable disk errors (SMART 187), sent at boot.</summary>
+</histogram>
+
+<histogram name="Platform.SpringChargerType">
+  <owner>vpalatin@google.com</owner>
+  <summary>
+    USB device ID of the charger plugged into a Spring device (if any), sent
+    once a minute.  The Device ID is composed from the following 4 8-bit
+    registers of the TSU6721 chip: ADC (07h), Device Type 3 (15h), Device Type 2
+    (0Bh), Device Type 1 (0Ah).  Device Type 1/2/3 is a bitmap and most of bits
+    are mutually exclusive (excepted VBUS debounce).  ADC is the 5-bit value of
+    the ID pin, but for most types (as in Device Type), there are only one or
+    two possible ID pin connections/values. The datasheet can be found here:
+    http://www.ti.com/lit/ds/symlink/tsu6721.pdf.
+
+    Note that different brand/models of the charger can have the same ID.
+  </summary>
+</histogram>
+
+<histogram name="Platform.StatefulUsage" units="%">
+  <owner>achuith@chromium.org</owner>
+  <owner>omrilio@chromium.org</owner>
+  <summary>Chrome OS stateful partition usage level.</summary>
+</histogram>
+
+<histogram name="Platform.Storage.Flash.BadBlocks">
+  <owner>dehrenberg@chromium.org</owner>
+  <owner>cast-analytics@google.com</owner>
+  <summary>
+    The number of blocks marked bad in an MTD partition. This is relevant for
+    devices with raw NAND flash, such as Chromecast. Sampled once daily, if the
+    Chromecast is on for any significant length of time in the day.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapInLong" units="pages/second">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Average pages/second swapped IN over a 30s interval, sampled every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapInShort" units="pages/second">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Average pages/second swapped IN over a 1s interval, sampled every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap0.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap1.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap2.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Cpu.Swap3.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap0.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap1.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap2.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.Scroll.Faults.Swap3.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    scroll event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap0.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap1.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap2.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time1" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time2" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time3" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Cpu.Swap3.Time4" units="%">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    CPU utilization for the specified swap group and time interval after a tab
+    switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap0.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap1.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap2.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time1"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time2"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time3"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapJank.TabSwitch.Faults.Swap3.Time4"
+    units="page faults/second">
+  <obsolete>
+    Deprecated 9/2013 when the SwapJank64vs32Parrot experiment ended.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Page faults/second for the specified swap group and time interval after a
+    tab switch event.  See src/chrome/browser/chromeos/swap_metrics.cc.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapOutLong" units="pages/second">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Average pages/second swapped OUT over a 30s interval, sampled every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SwapOutShort" units="pages/second">
+  <owner>sonnyrao@chromium.org</owner>
+  <summary>
+    Average pages/second swapped OUT over a 1s interval, sampled every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor00" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 0 (I2C_CPU-Die) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor01" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 1 (I2C_CPU-Object) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor02" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 2 (I2C_PCH-Die) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor03" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 3 (I2C_PCH-Object) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor04" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 4 (I2C_DDR-Die) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor05" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 5 (I2C_DDR-Object) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor06" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 6 (Charger-Die), taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor07" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 7 (Charger-Object) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor08" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Temperature reading at sensor 8 (ECInternal) taken every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Temperature.Sensor09" units="Celsius">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Temperature reading at sensor 9 (PECI) taken every 30s.</summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Temperature.Cpu.0" units="Celsius">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    Temperature reading at sensor 0 of the CPU collected every few seconds (may
+    vary between devices).
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Temperature.Wifi0" units="Celsius">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    Temperature reading at wireless interface 0 collected every few seconds (may
+    vary between devices).
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Temperature.Wifi1" units="Celsius">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    Temperature reading at wireless interface 1 collected every few seconds (may
+    vary between devices).
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Temperature.Wifi2" units="Celsius">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    Temperature reading at wireless interface 2 collected every few seconds (may
+    vary between devices).
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Zone.Cpu.States" units="Thermal state">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    State of the thermal zone of the CPU collected every second. State depends
+    on device, higher state corresponds to a higher temperature.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Zone.Wifi0.States" units="Thermal state">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    State of the thermal zone of wireless interface 0 collected every second.
+    State depends on device, higher state corresponds to a higher temperature.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Zone.Wifi1.States" units="Thermal state">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    State of the thermal zone of wireless interface 1 collected every second.
+    State depends on device, higher state corresponds to a higher temperature.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Thermal.Zone.Wifi2.States" units="Thermal state">
+  <owner>mka@chromium.org</owner>
+  <summary>
+    State of the thermal zone of wireless interface 2 collected every second.
+    State depends on device, higher state corresponds to a higher temperature.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Platform.TPM.AuthErrorCode" enum="TPMResultCodeEnum">
+  <owner>semenzato@chromium.org</owner>
+  <summary>
+    Each sample is the result code of a TPM authorized command issued through
+    tcsd.  Success is 0.  For the other error codes, see
+    /usr/include/tss/tpm_error.h.
+  </summary>
+</histogram>
+
+<histogram name="Platform.TPM.DictionaryAttackCounter">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    Each sample is the value of the TPM dictionary attack counter reported at
+    boot and hourly while running.  Any non-zero value is unexpected.
+  </summary>
+</histogram>
+
+<histogram name="Platform.TPM.DictionaryAttackResetStatus"
+    enum="CrosTPMDictionaryAttackResetStatusEnum">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    Each sample is the status of an hourly attempt to reset the TPM dictionary
+    attack counter.
+  </summary>
+</histogram>
+
+<histogram name="Platform.TPM.ErrorCode" enum="TPMResultCodeEnum">
+  <owner>semenzato@chromium.org</owner>
+  <summary>
+    Each sample is the result code of a TPM command issued through tcsd. Success
+    is 0.  For the other error codes, see /usr/include/tss/tpm_error.h.
+  </summary>
+</histogram>
+
+<histogram name="Platform.TPMForcedReboot" units="reboots">
+  <owner>dkrahn@chromium.org</owner>
+  <summary>
+    Each sample is the number of consecutive reboots performed while attempting
+    to clear a TPM (Trusted Platform Module) error.
+  </summary>
+</histogram>
+
+<histogram name="Platform.Tps65090Retries">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Retries needed to enable a FET on tps65090 (AKA tpschrome).  Tps65090 is a
+    power management unit (PMU) used on many ARM Chromebooks.  Until version ES7
+    was rolled into production we would sometimes run into a problem where FET1
+    (the FET used to switch on and off the backlight) wouldn't turn on properly.
+    This problem was especially prevalent when the voltage was high (like when
+    the device was plugged into the wall).  Retrying by turning the FET off and
+    on again is nearly always effective, so the kernel will retry up to 5 times
+    (currently) and will also log the fact that it needed to retry.  On newest
+    kernels (kernel 3.8 and up) a kernel warning will be logged with WARN_ON if
+    the FET still failed to turn on after 5 tries. Refer to the kernel warning
+    reports to find that information.  For more details about this bug refer to
+    http://crbug.com/338657 and http://crosbug.com/p/16009.  Note that we log
+    retries on all 7 FETs even though we've only ever seen failures of FET1.
+  </summary>
+</histogram>
+
+<histogram name="Platform.WriteSectorsLong">
+  <owner>gwendal@google.com</owner>
+  <summary>
+    Number of disk sectors per second written by Chrome OS in a long interval
+    (currently 30s)
+  </summary>
+</histogram>
+
+<histogram name="Platform.WriteSectorsShort">
+  <owner>gwendal@google.com</owner>
+  <summary>
+    Number of disk sectors per second written by Chrome OS in a short interval
+    (currently 1s, sampled every 30s)
+  </summary>
+</histogram>
+
+<histogram name="Platform.ZramCompressedSize" units="MB">
+  <owner>semenzato@google.com</owner>
+  <summary>
+    Compressed swap size in megabytes.  This is the actual amount of RAM used by
+    the system to compress memory (i.e. after compression).  Snapshot every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.ZramCompressionRatioPercent" units="%">
+  <owner>semenzato@google.com</owner>
+  <summary>
+    The ratio of compressed memory (zram) before and after compression when the
+    denominator at least 1 MB. Ratios of interest are between 1 and 6 (typically
+    between 2 and 3), and we express them as a percentage (between 100% and
+    600%). The size of memory before compression includes zero-filled pages.
+    Values close to 100% indicate low compression effectiveness. Snapshot every
+    30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.ZramSavings" units="MB">
+  <owner>semenzato@google.com</owner>
+  <summary>
+    RAM savings in megabytes from using memory compression.  This is the
+    difference between the RAM size before and after compression.  Snapshot
+    every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.ZramZeroPages" units="pages">
+  <owner>semenzato@google.com</owner>
+  <summary>
+    Number of zero-filled pages that the OS is compressing.  A large number
+    suggests wasteful allocation.  Snapshot every 30s.
+  </summary>
+</histogram>
+
+<histogram name="Platform.ZramZeroRatioPercent" units="%">
+  <owner>semenzato@google.com</owner>
+  <summary>
+    The fraction of compressed memory that consists of zero-filled pages.
+    Snapshot every 30s.
+  </summary>
+</histogram>
+
+<histogram name="PlatformFile.FlushTime" units="ms">
+  <obsolete>
+    Deprecated as of 2016-07 because the histogram's purpose of adding colour to
+    the description of File::Flush() has been fulfilled.
+  </obsolete>
+  <owner>tnagel@chromium.org</owner>
+  <summary>The time it takes to run File::Flush().</summary>
+</histogram>
+
+<histogram name="PlatformFile.UnknownCreateFileErrors" units="code">
+  <obsolete>
+    Deprecated as of 2013-05, replaced by
+    PlatformFile.UnknownCreateFileErrorsWin in chrome 29.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Errors returned by CreateFile on windows that PlatformFileError doesn't yet
+    support.
+  </summary>
+</histogram>
+
+<histogram name="PlatformFile.UnknownErrors.Posix" enum="OSAgnosticErrno">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Errors returned by CreateFile on POSIX that PlatformFileError doesn't yet
+    support.
+  </summary>
+</histogram>
+
+<histogram name="PlatformFile.UnknownErrors.Windows" enum="WinGetLastError">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Errors returned by CreateFile on Windows that PlatformFileError doesn't yet
+    support.
+  </summary>
+</histogram>
+
+<histogram name="PLT.Abandoned" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Distribution of actual finished pages, vs abandoned pages, where we needed
+    to declare a finish time prematurely since the page was being closed
+    (exited).
+  </summary>
+</histogram>
+
+<histogram name="PLT.Abandoned.NoProxy.http" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned.NoProxy.https" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned.Proxy.http" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned.Proxy.https" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned_ExtensionAdblock" enum="Abandoned">
+  <obsolete>
+    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned_ExtensionAdblockPlus" enum="Abandoned">
+  <obsolete>
+    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned_ExtensionWebRequest" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The PLT.Abandoned histogram for pages loaded after WebRequest API was used.
+  </summary>
+</histogram>
+
+<histogram name="PLT.Abandoned_ExtensionWebRequestAdblock" enum="Abandoned">
+  <obsolete>
+    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned_ExtensionWebRequestAdblockPlus" enum="Abandoned">
+  <obsolete>
+    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned_ExtensionWebRequestOther" enum="Abandoned">
+  <obsolete>
+    Deprecated 6/2014. Replaced by Abandoned_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.Abandoned_SpdyProxy" enum="Abandoned">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.AbandonType" enum="AbandonType">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Diagnose why a page load was considered abandoned.</summary>
+</histogram>
+
+<histogram name="PLT.BeginToCommit" units="ms">
+  <obsolete>
+    Use PageLoad.Timing2.NavigationToCommit instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;begin&quot; to &quot;commit.&quot;   &quot;Begin&quot;==
+    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
+    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
+    time when renderer requested load of document, after any unload of last
+    document. &quot;Commit&quot;== time when renderer got first byte of
+    document.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_AfterPreconnectRequest" units="ms">
+  <obsolete>
+    Deprecated as of http://crrev.com/392823002
+  </obsolete>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    PLT.BeginToFinish, but for pages requested just after a new preconnect
+    request.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_ContentPrefetcher" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    PLT.BeginToFinish, but for pages which contained prefetch links.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    PLT.BeginToFinish, but for pages which were referred to by pages which
+    contained prefetch links.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblock" units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequest"
+    units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The PLT.BeginToFinish histogram for pages loaded by following a link, after
+    WebRequest API was used.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblock"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram
+    name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadNormal_ExtensionWebRequestOther"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadNormal_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblock" units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequest"
+    units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The PLT.BeginToFinish histogram for pages reloaded by JavaScript or by
+    following a link, after WebRequest API was used.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblock"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram
+    name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadReload_ExtensionWebRequestOther"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadReload_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblock" units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest"
+    units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The PLT.BeginToFinish histogram for pages loads initiated by back/forward
+    buttons, or by a change of encoding, after WebRequest API was used.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblock"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram
+    name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_LinkLoadStaleOk_ExtensionWebRequestOther"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by
+    BeginToFinish_LinkLoadStaleOk_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblock" units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionAdblockPlus" units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequest" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>vabr@chromium.org</owner>
+  <summary>
+    The PLT.BeginToFinish histogram for pages loaded by entering a URL or a
+    search query into Omnibox, after WebRequest API was used.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblock"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestAdblockPlus"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_NormalLoad_ExtensionWebRequestOther"
+    units="ms">
+  <obsolete>
+    Deprecated 6/2014. Replaced by BeginToFinish_NormalLoad_ExtensionWebRequest.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary/>
+</histogram>
+
+<histogram name="PLT.BeginToFinish_SpdyProxy" units="ms">
+  <obsolete>
+    Use PLT.PT_BeginToFinish_DataReductionProxy instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>PLT.BeginToFinish, but for pages fetched over a SPDY proxy.</summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinishDoc">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinishDoc_AfterPreconnectRequest" units="ms">
+  <obsolete>
+    Deprecated as of http://crrev.com/392823002
+  </obsolete>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    PLT.BeginToFinishDoc, but for pages requested just after a new preconnect
+    request.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinishDoc_ContentPrefetcher" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    PLT.BeginToFinishDoc, but for pages which contained prefetch links.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    PLT.BeginToFinishDoc, but for pages which were referred to by pages which
+    contained prefetch links.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFinishDoc_SpdyProxy" units="ms">
+  <obsolete>
+    Use PLT.PT_BeginToFinishDoc_DataReductionProxy instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    PLT.BeginToFinshDoc, but for pages fetched over a SPDY proxy.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFirstPaint" units="ms">
+  <obsolete>
+    Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    Time from &quot;begin&quot; to &quot;first paint.&quot;  &quot;Begin&quot;==
+    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
+    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
+    time when renderer requested load of document, after any unload of last
+    document. &quot;First paint&quot;== time when first paint operation was
+    performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFirstPaint_Negative" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Magnitude and difference between begin and first paint, when first_paint
+    precedes begin. This is a temporary metric used to better understand the
+    root cause of http://crbug.com/125273.
+  </summary>
+</histogram>
+
+<histogram name="PLT.BeginToFirstPaintAfterLoad" units="ms">
+  <obsolete>
+    The first paint after load is not useful for most documents. Consider using
+    PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    Time from &quot;big&quot; to &quot;first paint after load.&quot;
+    &quot;Begin&quot;== &quot;request&quot; if user requested, and
+    &quot;start&quot; otherwise.  &quot;Request&quot;== time when user requested
+    document. &quot;Start&quot;== time when renderer requested load of document,
+    after any unload of last document. &quot;First paint after load&quot;== time
+    after onload() when first paint operation is performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.CommitToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
+    time when renderer got first byte of document.  &quot;Finish&quot;==after
+    onload() and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="PLT.CommitToFinishDoc" units="ms">
+  <obsolete>
+    Use PageLoad.ParseTiming.ParseDuration instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
+    time when renderer got first byte of document. &quot;Finish doc&quot; ==
+    main document loaded, before onload(). &quot;Finish&quot;==after onload()
+    and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="PLT.CommitToFirstPaint" units="ms">
+  <obsolete>
+    Use PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;first paint.&quot;
+    &quot;Commit&quot;== time when renderer got first byte of document.
+    &quot;First paint&quot;== time when first paint operation was performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.CommitToFirstPaintAfterLoad" units="ms">
+  <obsolete>
+    The first paint after load is not useful for most documents. Consider using
+    PageLoad.PaintTiming.ParseStartToFirstContentfulPaint instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;first paint after load.&quot;
+    &quot;Commit&quot;== time when renderer got first byte of document.
+    &quot;First paint after load&quot;== time after onload() when first paint
+    operation is performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.FinishDocToFinish" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
+    doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
+    onload() and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="PLT.FinishToFirstPaintAfterLoad" units="ms">
+  <obsolete>
+    The first paint after load is not useful for most documents. Consider using
+    PageLoad.PaintTiming.NavigationToFirstContentfulPaint instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;finish &quot; to &quot;first paint after load.&quot;
+    &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
+    paint after load&quot;== time after onload() when first paint operation is
+    performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.LoadType" enum="LoadType">
+  <obsolete>
+    Use PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.*
+    instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Probability distribution for enumerated varieties of page loads.
+  </summary>
+</histogram>
+
+<histogram name="PLT.MissingStart" enum="MissingStartType">
+  <obsolete>
+    Deprecated as of 2014-06.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Diagnose error conditions in PLT reporting. A start time should always be
+    present.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NavStartToLoadEnd" units="ms">
+  <obsolete>
+    deprecated 2012-01-19 in favour of PLT.PT_*
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time elapsed between the Navigation Timing metrics navigationStart and
+    loadEventEnd. Definitions: http://www.w3.org/TR/navigation-timing/
+  </summary>
+</histogram>
+
+<histogram name="PLT.NavStartToLoadStart" units="ms">
+  <obsolete>
+    deprecated 2012-01-19 in favour of PLT.PT_*
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time elapsed between the Navigation Timing metrics navigationStart and
+    loadEventStart. Definitions: http://www.w3.org/TR/navigation-timing/
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_Connect" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from connectStart to connectEnd based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeConnect" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from domanLookupEnd to connectStart based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeDomainLookup" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from fetchStart to domainLookupStart based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeDomLoading" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016. Replaced by
+    PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from responseStart to domLoading based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeFetch" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from navigationStart to fetchStart based on Navigation Timing when no
+    redirect.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeFetchRedirect" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from navigationStart to fetchStart excluding time spent on redirects
+    based on Navigation Timing. Only page loads with redirects are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeLoadEvent" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016. Replaced by
+    PageLoad.DocumentTiming.NavigationToLoadEventFired.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from domContentLoadedEventEnd to loadEventStart based on Navigation
+    Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DelayBeforeRequest" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from connectEnd to requestStart based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DomainLookup" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from domainLookupStart to domainLookupEnd based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DomContentLoaded" units="ms">
+  <obsolete>
+    Deprecated 09/2016. Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToDOMContentLoadedEventFired
+    instead.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from domContentLoadedEventStart to domContentLoadedEventEnd based on
+    Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DomInteractive" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from domInteractive to domContentLoadEventStart based on Navigation
+    Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_DomLoading" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from domLoading to domInteractive based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_LoadEvent" units="ms">
+  <obsolete>
+    Deprecated 09/2016. Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
+    instead.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from loadEventStart to loadEventEnd based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_Redirect" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from redirectStart to redirectEnd based on Navigation Timing when
+    redirects exist.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_Request" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016. Replaced by
+    PageLoad.ParseTiming.NavigationToParseStart.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from requestStart to responseStart based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.NT_Response" units="ms">
+  <obsolete>
+    Deprecated as of 7/19/2016. Replaced by PageLoad.ParseTiming.ParseDuration.
+  </obsolete>
+  <owner>bolian@chromium.org</owner>
+  <summary>
+    Time from responseStart to responseEnd based on Navigation Timing.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PageUsed_PrerenderLoad" enum="PageUsed">
+  <obsolete>
+    Deprecated as of 5/02/2011.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Distribution of discarded and displayed prerendered pages.</summary>
+</histogram>
+
+<histogram name="PLT.PerceivedLoadTime" units="ms">
+  <obsolete>
+    Deprecated as of 5/02/2011, replaced by Prerender.RendererPLT.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Perceived load time of a page. For non-prerendered pages, this is just
+    BeginToFinish. For displayed prerendered pages, this is the time from when
+    the prerendered page is moved into a TabContents until finish.
+    &quot;Finish&quot; == after onload() and all resources are loaded. Note that
+    this is 0 if the loading finishes before the page is moved into a
+    TabContents.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PerceivedLoadTime_PrerenderLoad" units="ms">
+  <obsolete>
+    Deprecated as of 5/02/2011, replaced by
+    Prerender.RendererPerceivedPLTMatched.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Perceived load time of a prerendered page that is displayed. This is the
+    time from when the prerendered page is moved into a TabContents until
+    finish. &quot;Finish&quot; == after onload() and all resources are loaded.
+    Note that this is 0 if the loading finishes before the page is moved into a
+    TabContents.
+  </summary>
+</histogram>
+
+<histogram name="PLT.Prerender_TimeUntilDisplay" units="ms">
+  <obsolete>
+    Deprecated as of 5/02/2011, replaced by Prerender.RendererTimeUntilDisplay.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time elapsed between when the prerendering of a page starts and when the
+    page is displayed. Prerendered pages discarded without being displayed are
+    excluded from this count.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PrerenderIdleTime" units="ms">
+  <obsolete>
+    Deprecated as of 5/02/2011, replaced by Prerender.RendererIdleTime.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This is the time from when a prerendered page finishes loading to when it is
+    displayed. When a page is displayed before it finishes loading, no value is
+    recorded in this histogram.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT.NavigationStartToFirstLayout" units="ms">
+  <obsolete>
+    Deprecated. Use PageLoad.Timing2.* instead.
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's navigation start to the time the
+    first document layout is performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT.ResponseStartToFirstLayout" units="ms">
+  <obsolete>
+    Deprecated. Use PageLoad.Timing2.* instead.
+  </obsolete>
+  <owner>bmcquade@chromium.org</owner>
+  <summary>
+    Measures the time from navigation timing's response start to the time the
+    first document layout is performed.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_BeginToCommit" units="ms">
+  <obsolete>
+    Use PageLoad.Timing2.NavigationToCommit instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
+    navigationStart if user-initiated request.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_BeginToCommit_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 9/2016. Use Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToCommit
+    instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.BeginToCommit. Commit: responseStart. Begin: requestStart or
+    navigationStart if user-initiated request. Only page loads through the data
+    reduction proxy are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_BeginToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.BeginToFinish. Finish: loadEventEnd. Begin: requestStart or
+    navigationStart if user-initiated request.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_BeginToFinish_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 9/2016. Use Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
+    instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.BeginToFinish_SpdyProxy. Finish: loadEventEnd. Begin:
+    requestStart or navigationStart if user-initiated request. Only page loads
+    through the data reduction proxy are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_BeginToFinishDoc" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.BeginToFinishDoc. FinishDoc: loadEventStart. Begin:
+    requestStart or navigationStart if user-initiated request.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_BeginToFinishDoc_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016. Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
+    instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.BeginToFinishDoc_SpdyProxy. FinishDoc: loadEventStart. Begin:
+    requestStart or navigationStart if user-initiated request. Only page loads
+    through the data reduction proxy are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_CommitToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_CommitToFinish_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016. Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
+    instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.CommitToFinish. Commit: responseStart. Finish: loadEventEnd.
+    Only page loads through the data reduction proxy are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_CommitToFinishDoc" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
+    loadEventStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_CommitToFinishDoc_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016. Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
+    instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.CommitToFinishDoc. Commit: responseStart. FinishDoc:
+    loadEventStart. Only page loads through the data reduction proxy are
+    considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_FinishDocToFinish" units="ms">
+  <obsolete>
+    No longer needed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
+    loadEventStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_FinishDocToFinish_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.FinishDocToFinish. Finish: loadEventEnd. FinishDoc:
+    loadEventStart. Only page loads through the data reduction proxy are
+    considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToCommit" units="ms">
+  <obsolete>
+    Use PageLoad.Timing2.NavigationToCommit instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and measures the time until
+    the renderer got first byte of document. Commit: time when renderer got
+    first byte of document. Request: navigationStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToDomContentLoaded" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and measures the time until
+    the beginning of the DOMContentLoaded event. DOMContentLoaded:
+    domContentLoadedEventStart. Request: navigationStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
+    navigationStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToFinish_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016. Use
+    PageLoad.Clients.DataReductionProxy.DocumentTiming.NavigationToLoadEventFired
+    instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.RequestToFinish. Finish: loadEventEnd. Request:
+    navigationStart. Only page loads through the data reduction proxy are
+    considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToFinishDoc" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and measures the page load
+    time until the beginning of the load event. Finish: loadEventStart. Request:
+    navigationStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToStart" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.RequestToStart. Start: requestStart. Request:
+    navigationStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_RequestToStart_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.RequestToStart. Start: requestStart. Request:
+    navigationStart. Only page loads through the data reduction proxy are
+    considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_StartToCommit" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_StartToCommit_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.StartToCommit. Start: requestStart. Commit: responseStart.
+    Only page loads through the data reduction proxy are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_StartToFinish" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This time is based on the NavigationTiming spec and is a more accurate
+    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
+  </summary>
+</histogram>
+
+<histogram name="PLT.PT_StartToFinish_DataReductionProxy" units="ms">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    This time is based on the PerformanceTiming spec and is a more accurate
+    version of PLT.StartToFinish. Start: requestStart. Finish: loadEventEnd.
+    Only page loads through the data reduction proxy are considered.
+  </summary>
+</histogram>
+
+<histogram name="PLT.RequestToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;request&quot; to &quot;finish.&quot;  &quot;Request&quot; ==
+    time when user requested document.  &quot;Finish&quot; == after onload() and
+    all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="PLT.RequestToStart" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
+    time when user requested document. &quot;Start&quot;== time when renderer
+    requested load of document, after any unload of last document.
+  </summary>
+</histogram>
+
+<histogram name="PLT.StartToCommit" units="ms">
+  <obsolete>
+    Use PageLoad.Timing2.NavigationToCommit instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
+    when renderer requested load of document, after any unload of last document.
+    &quot;Commit&quot;== time when renderer got first byte of document.
+  </summary>
+</histogram>
+
+<histogram name="PLT.StartToFinish" units="ms">
+  <obsolete>
+    Use PageLoad.DocumentTiming.NavigationToLoadEventFired instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
+    when renderer requested load of document, after any unload of last document.
+    &quot;Finish&quot;==after onload() and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="PLT.StartToFinish.NoProxy.http">
+  <obsolete>
+    Deprecated as of 07/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>StartToFinish times when using http and no proxy.</summary>
+</histogram>
+
+<histogram name="PLT.StartToFinish.NoProxy.https">
+  <obsolete>
+    Deprecated as of 07/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>StartToFinish times when using https and no proxy.</summary>
+</histogram>
+
+<histogram name="PLT.StartToFinish.Proxy.http">
+  <obsolete>
+    Deprecated as of 07/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>StartToFinish times when using http over a proxy.</summary>
+</histogram>
+
+<histogram name="PLT.StartToFinish.Proxy.https">
+  <obsolete>
+    Deprecated as of 07/2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>StartToFinish times when using https over a proxy.</summary>
+</histogram>
+
+<histogram name="PLT.UserTiming_Mark" units="ms">
+  <obsolete>
+    Deprecated as of 09/2016.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the User Timing spec and measures the time from
+    Navigation Timing navigationStart until the point where the page called
+    performance.mark().
+  </summary>
+</histogram>
+
+<histogram name="PLT.UserTiming_MeasureDuration" units="ms">
+  <obsolete>
+    Deprecated as of 09/2016.
+  </obsolete>
+  <owner>pmeenan@chromium.org</owner>
+  <summary>
+    This time is based on the User Timing spec and reports the time between two
+    arbitrary points defined by the page being loaded and directly matches the
+    measurement exposed by performance.measure().
+  </summary>
+</histogram>
+
+<histogram name="Plugin.AvailabilityStatus.WidevineCdm"
+    enum="PluginAvailabilityStatus">
+  <owner>xhwang@chromium.org</owner>
+  <summary>
+    The availability status of Widevine CDM. In normal cases, this is reported
+    per render process if EME API is used. This is not reported if EME API is
+    not used. This could be reported multiple times per render process until
+    PLUGIN_AVAILABLE is reported (which should be a rare case).
+  </summary>
+</histogram>
+
+<histogram name="Plugin.EnabledStatusMigrationDone" enum="Boolean">
+  <owner>pastarmovj@chromium.org</owner>
+  <owner>tommycli@chromium.org</owner>
+  <summary>Tracks whether plugins that were disabled were migrated.</summary>
+</histogram>
+
+<histogram name="Plugin.Flash.ClickSize.AspectRatio" units="%">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Aspect ratio of Flash plugins users click at least once. The aspect ratio is
+    multiplied by 100 and stored as a rounded integer.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.Flash.ClickSize.Height" units="pixels">
+  <owner>tommycli@chromium.org</owner>
+  <summary>Height of Flash plugins users click at least once.</summary>
+</histogram>
+
+<histogram name="Plugin.Flash.ClickSize.Width" units="pixels">
+  <owner>tommycli@chromium.org</owner>
+  <summary>Width of Flash plugins users click at least once.</summary>
+</histogram>
+
+<histogram name="Plugin.Flash.Engagement">
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The engagement score of origins which have passed through a site engagement
+    check to permit or block Flash. Recorded every time the Flash plugin is
+    requested with the PreferHtmlOverPlugins feature active.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.Flash.TinyContentSize" enum="FlashTinyContentSize">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Collects the sizes of all loaded Flash plugin instances. This is for
+    determining the prevalence of tiny flash plugin instances.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.Flash.YouTubeRewrite" enum="YouTubeRewriteStatus">
+  <owner>mlamouri@chromium.org</owner>
+  <owner>kdsilva@google.org</owner>
+  <summary>
+    Records the YouTube Flash embed rewrite status when attempted.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.FlashNavigateUsage" enum="FlashNavigateUsageType">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Record usage of PPB_Flash.Navigate() Pepper API.</summary>
+</histogram>
+
+<histogram name="Plugin.FlashUsage" enum="FlashUsage">
+  <owner>yzshen@chromium.org</owner>
+  <owner>thestig@chromium.org</owner>
+  <summary>Collects Flash usage data.</summary>
+</histogram>
+
+<histogram name="Plugin.NpapiRemovalInfobar.Removed.PluginGroup"
+    enum="PluginGroup">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    The plugin group of an NPAPI plugin that is no longer supported. Recorded
+    when the NPAPI removal infobar is shown for a plugin which is no longer
+    supported.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.NpapiRemovalInfobar.RemovedSoon.PluginGroup"
+    enum="PluginGroup">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    The plugin group of an NPAPI plugin that will be unsupported soon. Recorded
+    when the NPAPI removal infobar is shown after an NPAPI plugin first loads to
+    warn the user that NPAPI support for this plugin will be removed soon.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.NPAPIStatus" enum="NPAPIPluginStatus">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Records whether NPAPI plugins are supported by the platform, and if so,
+    whether they are enabled or disabled.  Recorded once at browser startup.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.PowerSaver.PeripheralHeuristic"
+    enum="PluginPowerSaverPeripheralHeuristicDecision">
+  <obsolete>
+    Deprecated in favor of Plugin.PowerSaver.PeripheralHeuristicFinalDecision.
+  </obsolete>
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Records each decision of the Plugin Power Saver peripheral content
+    heuristic. This UMA is counted once per peripheral query, and may count a
+    single plugin instance multiple times as it is resized.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.PowerSaver.PeripheralHeuristicInitialDecision"
+    enum="PluginPowerSaverPeripheralHeuristicDecision">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Records the initial decision of the Plugin Power Saver peripheral content
+    heuristic for each plugin instance. This is recorded once per plugin
+    instance.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.PowerSaver.PosterParamPresence"
+    enum="PluginPowerSaverPosterParamPresence">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Record how many plugin object tags use poster param. This is recorded once
+    per plugin instance, and is currently restricted to Flash plugin instances.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.PowerSaver.Unthrottle"
+    enum="PluginPowerSaverUnthrottleMethod">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Record how many throttled plugins are unthrottled, and by what method.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.PpapiBrokerLoadErrorCode" units="code">
+  <owner>xhwang@chromium.org</owner>
+  <summary>The error code of a PPAPI broker load failure.</summary>
+</histogram>
+
+<histogram name="Plugin.PpapiBrokerLoadResult" enum="PluginLoadResult">
+  <owner>xhwang@chromium.org</owner>
+  <summary>The result from an attempt to load a PPAPI broker.</summary>
+</histogram>
+
+<histogram name="Plugin.PpapiBrokerLoadTime" units="ms">
+  <owner>xhwang@chromium.org</owner>
+  <summary>The time spent to load a PPAPI broker.</summary>
+</histogram>
+
+<histogram name="Plugin.PpapiPluginLoadErrorCode" units="code">
+  <owner>xhwang@chromium.org</owner>
+  <summary>The error code of a PPAPI plugin load failure.</summary>
+</histogram>
+
+<histogram name="Plugin.PpapiPluginLoadResult" enum="PluginLoadResult">
+  <owner>xhwang@chromium.org</owner>
+  <summary>The result from an attempt to load a PPAPI plugin.</summary>
+</histogram>
+
+<histogram name="Plugin.PpapiPluginLoadTime" units="ms">
+  <owner>xhwang@chromium.org</owner>
+  <summary>The time spent to load a PPAPI plugin.</summary>
+</histogram>
+
+<histogram name="Plugin.PpapiSyncIPCTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The time it took to complete a synchronous IPC made from the PPAPI process.
+  </summary>
+</histogram>
+
+<histogram name="Plugin.RequestObjectResult" enum="BooleanSuccess">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>Result of HTMLPluginElement::requestObject in Blink.</summary>
+</histogram>
+
+<histogram name="Plugin.SyncMessageTime" units="ms">
+  <obsolete>
+    Deprecated due to NPAPI removal.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Roundtrip times for synchronous IPC calls from the renderer to NPAPI plugin
+    processes.
+  </summary>
+</histogram>
+
+<histogram name="PluginFinder.BuiltInPluginList.ErrorCode"
+    enum="PluginListError">
+  <owner>bauerb@chromium.org</owner>
+  <summary>
+    Error codes when parsing the built-in plugin list. Logged when the
+    PluginFinder singleton is created.
+  </summary>
+</histogram>
+
+<histogram name="Power.BacklightLevelOnAC" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The level of the backlight as a percentage when the user is on AC. Sampled
+    every 30 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Power.BacklightLevelOnBattery" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The level of the backlight as a percentage when the user is on battery.
+    Sampled every 30 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryChargeHealth" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS battery charge health percentage.  Sampled once when device starts
+    charging.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryDischargePercentPerHour" units="%">
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+        The percentage of battery capacity used per hour relative to a full
+    battery. Reported once when the power adaptor is plugged back in after the
+    system is on battery power for more than 30 minutes.  If at any point the
+    system is suspended or all Chrome renderers are closed the measurement is
+    not recorded. Anytime the user unplugs the power adaptor, a new measurement
+    will begin being recorded. Collection of this histogram only starts after 30
+    minutes of uptime at which point the clock starts (assuming the user is on
+    battery power at that point).  The system will need to remain unplugged for
+    at least another 30 minutes in order for any measurement to be recorded.
+    Values are normalized to a percent per hour scale. This measurement is tied
+    tightly to hardware model/OS and is not comparable across different hardware
+    configurations.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryDischargeRate" units="mW">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS battery discharge rate in mW sampled every 30 seconds while the
+    device runs on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryDischargeRate_15" units="%">
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+        The percent of depleted battery capacity relative to a full battery over
+    the first 15 minutes after battery power collection information starts.
+    Collection of this histogram only starts after 30 minutes of uptime at which
+    point the clock starts (assuming the user is on battery power at that
+    point).  The system will need to remain unplugged for at least another 15
+    minutes in order for any measurement to be recorded. Values are normalized
+    to a percent per hour scale. This measurement is tied tightly to hardware
+    model/OS and is not comparable across different hardware configurations.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryDischargeRate_30" units="%">
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+        The percent of depleted battery capacity relative to a full battery over
+    the first 30 minutes after battery power collection information starts.
+    Collection of this histogram only starts after 30 minutes of uptime at which
+    point the clock starts (assuming the user is on battery power at that
+    point).  The system will need to remain unplugged for at least another 30
+    minutes in order for any measurement to be recorded. Values are normalized
+    to a percent per hour scale. This measurement is tied tightly to hardware
+    model/OS and is not comparable across different hardware configurations.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryDischargeRate_5" units="%">
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+        The percent of depleted battery capacity relative to a full battery over
+    the first 5 minutes after battery power collection information starts.
+    Collection of this histogram only starts after 30 minutes of uptime at which
+    point the clock starts (assuming the user is on battery power at that
+    point).  The system will need to remain unplugged for at least another 5
+    minutes in order for any measurement to be recorded. Values are normalized
+    to a percent per hour scale. This measurement is tied tightly to hardware
+    model/OS and is not comparable across different hardware configurations.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryDischargeRateWhileSuspended" units="mW">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS battery discharge rate in mW while the system was suspended,
+    sampled at resume. Only reported if the system was on battery power both
+    before suspending and after resuming, if the energy level didn't increase
+    while suspended (which would indicate that an AC adapter was connected), and
+    if the system was suspended for at least a minute.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryInfoSample" enum="BatteryInfoSampleResult">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Counts the number of times we have read the battery status from sysfs and if
+    it gave us sensible values.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryRemainingAtEndOfSessionOnAC" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge,
+    sampled at the end of a user session when the device is on AC.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryRemainingAtEndOfSessionOnBattery" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge,
+    sampled at the end of a user session when the device is on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryRemainingAtStartOfSessionOnAC" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge,
+    sampled at the start of a user session when the device is on AC.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryRemainingAtStartOfSessionOnBattery" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge,
+    sampled at the start of a user session when the device is on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryRemainingCharge" units="%">
+  <obsolete>
+    Deprecated as of 03/2012, no longer being generated by powerd.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge
+    sampled when the device runs on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryRemainingWhenChargeStarts" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining battery charge as percent of the maximum battery charge,
+    sampled when charging starts.
+  </summary>
+</histogram>
+
+<histogram name="Power.BatteryTimeToEmpty" units="minutes">
+  <obsolete>
+    Deprecated as of 03/2012, no longer being generated by powerd.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS remaining time to empty battery in minutes sampled when the device
+    runs on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.BitfixChunks">
+  <owner>dianders@chromium.org</owner>
+  <summary>
+    Chrome OS (Snow RO firmware 2695.90.0 only) number of 8K chunks that were
+    fixed (memory corruption corrected) for each suspend/resume cycle.  Expect 0
+    around 97% of the time and a non-zero value around 3% of the time.
+  </summary>
+</histogram>
+
+<histogram name="Power.BitfixFixes">
+  <owner>dianders@chromium.org</owner>
+  <summary>
+    Chrome OS (Snow RO firmware 2695.90.0 only) number of 4-byte words that were
+    fixed (memory corruption corrected) for each suspend/resume cycle.  Expect 0
+    around 97% of the time and a non-zero value around 3% of the time.  Would be
+    exactly equal to Power.BitfixChunks if there were only one corrupted word in
+    each chunk but is sometimes several times higher.
+  </summary>
+</histogram>
+
+<histogram name="Power.BrightnessAdjustOnAC" enum="PowerBrightnessAdjust">
+  <obsolete>
+    Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
+    Accel_BrightnessUp_F7 user actions instead.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Number of times the user has adjusted brightness up and down while running
+    on battery power.
+  </summary>
+</histogram>
+
+<histogram name="Power.BrightnessAdjustOnBattery" enum="PowerBrightnessAdjust">
+  <obsolete>
+    Deprecated as of 5/2013. See Accel_BrightnessDown_F6 and
+    Accel_BrightnessUp_F7 user actions instead.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Number of times the user has adjusted brightness up and down while running
+    on AC power.
+  </summary>
+</histogram>
+
+<histogram name="Power.ChargerType" enum="PowerChargerType">
+  <obsolete>
+    Deprecated 11/2014 in issue 427057.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    External power supply type such as MAINS_CHARGER, USB_CHARGER,
+    UNCONFIRMED_SPRING_CHARGER, SAFE_SPRING_CHARGER. A sample is reported each
+    time a charger is connected to the device.
+  </summary>
+</histogram>
+
+<histogram name="Power.DarkResumeWakeDurationMs" units="ms">
+  <owner>chirantan@chromium.org</owner>
+  <summary>
+    The amount of time a system spent awake every time it woke up in dark
+    resume.
+  </summary>
+</histogram>
+
+<histogram name="Power.DarkResumeWakeDurationMs.Other" units="ms">
+  <owner>chirantan@chromium.org</owner>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    The amount of time a system spent awake every time it woke up in dark resume
+    triggered by an unknown or unsupported wake trigger.
+  </summary>
+</histogram>
+
+<histogram name="Power.DarkResumeWakeDurationMs.WiFi.Disconnect" units="ms">
+  <owner>chirantan@chromium.org</owner>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    The amount of time a system spent awake every time it woke up in dark resume
+    triggered by a WiFi disconnect.
+  </summary>
+</histogram>
+
+<histogram name="Power.DarkResumeWakeDurationMs.WiFi.Pattern" units="ms">
+  <owner>chirantan@chromium.org</owner>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    The amount of time a system spent awake every time it woke up in dark resume
+    triggered by a WiFi packet pattern match.
+  </summary>
+</histogram>
+
+<histogram name="Power.DarkResumeWakeDurationMs.WiFi.SSID" units="ms">
+  <owner>chirantan@chromium.org</owner>
+  <owner>samueltan@chromium.org</owner>
+  <summary>
+    The amount of time a system spent awake every time it woke up in dark resume
+    triggered by a net detect SSID match.
+  </summary>
+</histogram>
+
+<histogram name="Power.DarkResumeWakeupsPerHour">
+  <owner>chirantan@chromium.org</owner>
+  <summary>
+    The number of times a system woke up in dark resume in an hour.  Note that
+    this value is scaled up or down to an hour based on the amount of time the
+    system spent in suspend.  So if the system suspended for 20 minutes and woke
+    up 3 times, it would report a value of 9.
+  </summary>
+</histogram>
+
+<histogram name="Power.ExternalBrightnessReadResult"
+    enum="ExternalDisplayReceiveResult">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The result of attempting to read an external display's brightness on Chrome
+    OS. A read attempt is made after successfully requesting the brightness (see
+    Power.ExternalBrightnessRequestResult).
+  </summary>
+</histogram>
+
+<histogram name="Power.ExternalBrightnessRequestResult"
+    enum="ExternalDisplaySendResult">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The result of requesting an external display's brightness on Chrome OS. A
+    request is sent when the user presses a brightness key and the current
+    brightness is not already cached. A successful request is followed shortly
+    thereafter by a read attempt (see Power.ExternalBrightnessReadResult).
+  </summary>
+</histogram>
+
+<histogram name="Power.ExternalBrightnessWriteResult"
+    enum="ExternalDisplaySendResult">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The result of attempting to change an external display's brightness on
+    Chrome OS. A request is sent when the user presses a brightness key and the
+    current brightness is either already cached or successfully loaded.
+  </summary>
+</histogram>
+
+<histogram name="Power.ExternalDisplayOpenResult"
+    enum="ExternalDisplayOpenResult">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The result of attempting to open an I2C device to control an external
+    display's brightness on Chrome OS. An attempt is made when a display is
+    connected to a device that lacks an internal display.
+  </summary>
+</histogram>
+
+<histogram name="Power.FirmwareResumeTimeOnAC" units="ms">
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The time that the firmware took to resume the Chrome OS device from
+    suspend-to-RAM state when running on AC at pre-suspend time.
+  </summary>
+</histogram>
+
+<histogram name="Power.FirmwareResumeTimeOnBattery" units="ms">
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The time that the firmware took to resume the Chrome OS device from
+    suspend-to-RAM state when running on battery at pre-suspend time.
+  </summary>
+</histogram>
+
+<histogram name="Power.IdleTimeAfterDimOnAC" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS user idle time since the screen dimmed sampled when the user
+    becomes active again if the device runs on AC.
+  </summary>
+</histogram>
+
+<histogram name="Power.IdleTimeAfterDimOnBattery" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS user idle time since the screen dimmed sampled when the user
+    becomes active again if the device runs on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.IdleTimeAfterScreenOffOnAC" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS user idle time since the screen turned off sampled when the user
+    becomes active again if the device runs on AC.
+  </summary>
+</histogram>
+
+<histogram name="Power.IdleTimeAfterScreenOffOnBattery" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS user idle time since the screen turned off sampled when the user
+    becomes active again if the device runs on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.IdleTimeOnAC" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS user idle time sampled when the user becomes active again if the
+    device runs on AC.
+  </summary>
+</histogram>
+
+<histogram name="Power.IdleTimeOnBattery" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    Chrome OS user idle time sampled when the user becomes active again if the
+    device runs on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.KernelResumeTimeOnAC" units="ms">
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The time that the kernel took to resume the Chrome OS device from
+    suspend-to-RAM state when running on AC at pre-suspend time.
+  </summary>
+</histogram>
+
+<histogram name="Power.KernelResumeTimeOnBattery" units="ms">
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The time that the kernel took to resume the Chrome OS device from
+    suspend-to-RAM state when running on battery at pre-suspend time.
+  </summary>
+</histogram>
+
+<histogram name="Power.KernelSuspendTimeOnAC" units="ms">
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The time that the kernel took to suspend-to-RAM the Chrome OS device when
+    running on AC.
+  </summary>
+</histogram>
+
+<histogram name="Power.KernelSuspendTimeOnBattery" units="ms">
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The time that the kernel took to suspend-to-RAM the Chrome OS device when
+    running on battery.
+  </summary>
+</histogram>
+
+<histogram name="Power.KeyboardBacklightLevel" units="%">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The level of the keyboard backlight as a percentage. Sampled every 30
+    seconds.
+  </summary>
+</histogram>
+
+<histogram name="Power.LengthOfSession" units="seconds">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The length of time, in seconds, that a user spent in a single session.
+    Values for this metric are clamped to 12 hours, so the last bucket should be
+    considered to be including all metrics above 12 hours.
+  </summary>
+</histogram>
+
+<histogram name="Power.MilliConsumptionPerHourIosOnActive">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average power consumption, measured in milli-units per hour, when sync
+    invalidator listens to on_application_active events. Values for this metric
+    are per session, i.e. from battery level at application entering foreground
+    to returning to background, and normalized to an hourly average consumption.
+    This is an iOS only measurement. Due to how iOS reports battery levels, it
+    is likely to see many readings of 0.
+  </summary>
+</histogram>
+
+<histogram name="Power.MilliConsumptionPerHourOthers">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average power consumption, measured in milli-units per hour, for other
+    sync invalidator methods. Values for this metric are per session, i.e. from
+    battery level at application entering foreground to returning to background,
+    and normalized to an hourly average consumption. This is an iOS only
+    measurement. Due to how iOS reports battery levels, it is likely to see many
+    readings of 0.
+  </summary>
+</histogram>
+
+<histogram name="Power.MilliConsumptionPerHourP2P">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average power consumption, measured in milli-units per hour, when sync
+    invalidator uses peer-to-peer notifications. Values for this metric are per
+    session, i.e. from battery level at application entering foreground to
+    returning to background, and normalized to an hourly average consumption.
+    This is an iOS only measurement. Due to how iOS reports battery levels, it
+    is likely to see many readings of 0.
+  </summary>
+</histogram>
+
+<histogram name="Power.MilliConsumptionPerHourServer">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The average power consumption, measured in milli-units per hour, when sync
+    invalidator uses server-based non-blocking invalidator. Values for this
+    metric are per session, i.e. from battery level at application entering
+    foreground to returning to background, and normalized to an hourly average
+    consumption. This is an iOS only measurement. Due to how iOS reports battery
+    levels, it is likely to see many readings of 0.
+  </summary>
+</histogram>
+
+<histogram name="Power.NumberOfAlsAdjustmentsPerSession">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The number of times that the Automatic Light Sensor (ALS) adjusted the
+    brightness during a session.  Values for this metric are clamped to 10k
+    count, so the last bucket should be considered to be including all metrics
+    above 10k.
+  </summary>
+</histogram>
+
+<histogram name="Power.NumberOfSessionsPerCharge">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The number of user sessions that occured since the last time that the device
+    was charged. Values for this metric are clamped at 10k, so the last bucket
+    should be considered to include all metrics about 10k.
+  </summary>
+</histogram>
+
+<histogram name="Power.PowerButtonAcknowledgmentDelay" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The amount of time between the user pressing the power button and Chrome
+    acknowledging the button-down event on Chrome OS. Values for this metric are
+    capped to two seconds.
+  </summary>
+</histogram>
+
+<histogram name="Power.PowerButtonDownTime" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The amount of time between the user pressing the power button and releasing
+    it on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="Power.RetrySuspendCount">
+  <obsolete>
+    Deprecated Feb 2014 by Power.SuspendAttemptsBeforeCancel and
+    Power.SuspendAttemptsBeforeSuccess.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The number of times Chrome OS retried suspend due to previous failure.
+  </summary>
+</histogram>
+
+<histogram name="Power.ShutdownReason" enum="ShutdownReason">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The reason for the Chrome OS power manager shutting down or rebooting the
+    system.
+  </summary>
+</histogram>
+
+<histogram name="Power.SuspendAttempt" enum="SuspendAttempt">
+  <owner>derat@chromium.org</owner>
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The number of suspend attempts on Chrome OS. Samples are reported before
+    each attempt, so this histogram may include cases where the system crashed
+    instead of suspending.
+  </summary>
+</histogram>
+
+<histogram name="Power.SuspendAttemptsBeforeCancel">
+  <owner>derat@chromium.org</owner>
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The number of suspend attempts performed for a single suspend request (e.g.
+    triggered by the lid being closed) that was eventually canceled on Chrome
+    OS. This also includes requests that were canceled due to the system
+    eventually shutting down due to repeated suspend failures.
+  </summary>
+</histogram>
+
+<histogram name="Power.SuspendAttemptsBeforeSuccess">
+  <owner>derat@chromium.org</owner>
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The number of suspend attempts performed for a single suspend request (e.g.
+    triggered by the lid being closed) that eventually succeeded on Chrome OS.
+    This includes the successful attempt.
+  </summary>
+</histogram>
+
+<histogram name="Power.SuspendResult" enum="SuspendResult">
+  <owner>derat@chromium.org</owner>
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    The results of suspend attempts on Chrome OS. Samples are reported after
+    each attempt.
+  </summary>
+</histogram>
+
+<histogram name="Power.SuspendStatus" enum="SuspendStatus">
+  <obsolete>
+    Deprecated Jan 2014 by Power.SuspendAttempt and Power.SuspendResult.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>Chrome OS suspend status.</summary>
+</histogram>
+
+<histogram name="Power.ThermalAbortedFanTurnOn" units="%">
+  <obsolete>
+    No longer sent.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The percentage of aborted fan attempts out of total fan attempts per
+    session, where an abort is due to hysteresis.  This value is computed from
+    boot and sent when powerd starts and then every 15 minutes afterwards.
+  </summary>
+</histogram>
+
+<histogram name="Power.ThermalMultipleFanTurnOn" units="%">
+  <obsolete>
+    No longer sent.
+  </obsolete>
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The percentage of fan trip point passes that are more than one trip point.
+    This value is computed from boot and sent when powerd starts and then every
+    15 minutes afterwards.
+  </summary>
+</histogram>
+
+<histogram name="Power.TimeInSuspendAtBoot" units="minutes">
+  <owner>derat@chromium.org</owner>
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    Chrome OS time in minutes spent in suspend-to-RAM mode sampled at boot
+    (i.e., the device most likely ran out of battery while in suspend).
+  </summary>
+</histogram>
+
+<histogram name="Power.TimeInSuspendAtResume" units="minutes">
+  <owner>derat@chromium.org</owner>
+  <owner>snanda@chromium.org</owner>
+  <summary>
+    Chrome OS time in minutes spent in suspend-to-RAM mode sampled at resume.
+  </summary>
+</histogram>
+
+<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnAC">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The number of times that the user adjusted the brightness during a session
+    when on AC. Values for this metric are clamped to 10k count, so the last
+    bucket should be considered to be including all metrics above 10k.
+  </summary>
+</histogram>
+
+<histogram name="Power.UserBrightnessAdjustmentsPerSessionOnBattery">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The number of times that the user adjusted the brightness during a session
+    when on battery. Values for this metric are clamped to 10k count, so the
+    last bucket should be considered to be including all metrics above 10k.
+  </summary>
+</histogram>
+
+<histogram name="Precache.BatteryPercentage.Start" units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    The battery level in percentage when the precache task was started.
+  </summary>
+</histogram>
+
+<histogram name="Precache.BatteryPercentageDiff.End" units="%">
+  <owner>bengr@chromium.org</owner>
+  <owner>rajendrant@chromium.org</owner>
+  <summary>
+    Measures the difference between the battery level percentage when the
+    precache task is started and ended. This value indicates the possible
+    battery usage due to the precache task. Logged when the precache task ends,
+    which could be due to successful completion, time-out, error conditions, max
+    download limit exceeded, etc.
+  </summary>
+</histogram>
+
+<histogram name="Precache.CacheStatus.NonPrefetch" enum="HttpCachePattern">
+  <owner>jamartin@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Like HttpCache.Pattern but only for requests not made during precaching.
+    Logged per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.CacheStatus.NonPrefetch.FromPrecache"
+    enum="HttpCachePattern">
+  <owner>jamartin@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Like Precache.CacheStatus.NonPrefetch but only for requests which having a
+    matching URL in the precache. Measures the amount of precache misses due to
+    expiration or eviction. Logged per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.DownloadedNonPrecache" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The number of bytes that were downloaded over the network for HTTP/HTTPS
+    fetches that were not motivated by precaching. Logged per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.DownloadedPrecacheMotivated" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The number of bytes that were downloaded because of precaching. Logged
+    per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Events" enum="PrecacheEvents">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Enumerates the various failure reasons and events of interest for
+    precaching. The events are persisted when the native library is not loaded,
+    and recorded when the library loads next time.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.FailureReasons">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    A bit vector of reasons why the precache fetch failed to start. Bit values
+    are documented in the FailureReason Java enum.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.PercentCompleted" units="%">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The percent of manifests for which all resources have been downloaded.
+    Logged per prefetch run.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.ResponseBytes" units="bytes">
+  <obsolete>
+    Deprecated July 29 2015.
+  </obsolete>
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total number of response bytes received from all prefetch requests,
+    including config, manifests, and resources. Logged per prefetch run.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.ResponseBytes.Network" units="bytes">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total number of response bytes received over the network from all
+    prefetch requests, including config, manifests, and resources. Logged per
+    prefetch run.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.ResponseBytes.NetworkWasted" units="bytes">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total number of response bytes received over the network for a wasted
+    resource precache fetch. Logged when a partially downloaded resource
+    precache fetch gets cancelled due to per-resource size limit or max precache
+    size limit.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.ResponseBytes.Total" units="bytes">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total number of response bytes contained in all prefetch requests,
+    including config, manifests, and resources. Logged per prefetch run.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Fetch.TimeToComplete" units="ms">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The time, in milliseconds, to complete a prefetch run. Only applies to
+    non-cancelled runs (those for which PercentCompleted is 100).
+  </summary>
+</histogram>
+
+<histogram name="Precache.Freshness.Prefetch" units="seconds">
+  <owner>jamartin@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The freshness lifetimes of the resources that were precached from the moment
+    they were fetched or revalidated as described in RFC 2616 13.2.4. Logged per
+    precache request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Latency.NonPrefetch" units="ms">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The latency for requests that were not made during precaching. Logged
+    per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Latency.NonPrefetch.NonTopHosts" units="ms">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Like Precache.Latency.NonPrefetch, but limited to requests with a referer
+    not in the user's top visited hosts. See History.TopHostsVisitsByRank for
+    details on the top hosts computation.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Latency.NonPrefetch.TopHosts" units="ms">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    Like Precache.Latency.NonPrefetch, but limited to requests with a referer in
+    the user's top visited hosts. See History.TopHostsVisitsByRank for details
+    on the top hosts computation.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Latency.Prefetch" units="ms">
+  <owner>twifkak@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The latency for requests that were made during precaching. Logged
+    per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.PeriodicTaskInterval" units="minutes">
+  <owner>rajendrant@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The time between successive precache periodic GCM task invocations. When
+    precache task is started, the time interval from previous task invocation is
+    logged.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Saved" units="bytes">
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The number of bytes during user browsing that were served from the cache,
+    but would have been downloaded over a network if precaching was disabled.
+    Logged per-request.
+  </summary>
+</histogram>
+
+<histogram name="Precache.Saved.Freshness" units="seconds">
+  <owner>jamartin@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The freshness lifetimes (RFC 2616 13.2.4) of the resources that were
+    precached and later used (and thus served from the cache). This is computed
+    at serving time and thus possibly different from the precached value if the
+    cache entry was revalidated. Logged per-request but only once per URL and
+    precaching cycle (as Precache.Saved).
+  </summary>
+</histogram>
+
+<histogram name="Precache.TimeSinceLastPrecache" units="seconds">
+  <owner>jamartin@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The time between the the beginning of the last precache session and each of
+    the URL fetches made by the user ever since. Logged per-request.
+  </summary>
+</histogram>
+
+<histogram name="PrefService.CreateProfilePrefsTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>The amount of time that elapsed during CreateProfilePrefs.</summary>
+</histogram>
+
+<histogram name="PreloadScanner.Counts" units="preloads">
+  <obsolete>
+    Deprecated 5/25/2016 in favor of PreloadScanner.Counts2
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>The number of preloads generated by the preload scanner.</summary>
+</histogram>
+
+<histogram name="PreloadScanner.Counts.Miss" units="preloads">
+  <obsolete>
+    Deprecated 5/25/2016 in favor of PreloadScanner.Counts2.Miss
+  </obsolete>
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The number of unused preloads generated by the preload scanner. Note that
+    some link rel preloads are not referenced until after this point, so they
+    will be falsely marked as preload misses. These will show up in the Raw
+    bucket.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.Counts2" units="preloads">
+  <owner>csharrison@chromium.org</owner>
+  <summary>The number of preloads generated by the preload scanner.</summary>
+</histogram>
+
+<histogram name="PreloadScanner.Counts2.Miss" units="preloads">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The number of unused preloads generated by the preload scanner. Note that
+    some link rel preloads are not referenced until after this point, so they
+    will be falsely marked as preload misses.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Failure" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Time spent executing a script tag in the blink preload scanner, for the
+    purpose of preloading scripts that will be fetched via a call to
+    document.write. The execution failed to generate a preload request.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.DocumentWrite.ExecutionTime.Success" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Time spent executing a script tag in the blink preload scanner, for the
+    purpose of preloading scripts that will be fetched via a call to
+    document.write. The execution successfully resulted in a preload request.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.DocumentWrite.GatedEvaluation"
+    enum="DocumentWriteGatedEvaluation">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The reason a particular inline script was blocked from evaluation.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.DocumentWrite.InitializationTime" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Time spent initializing a new V8 context for the purpose of evaluating it
+    and preloading document.written strings.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.DocumentWrite.ScriptLength" units="characters">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The length of the inline script that is being considered for document write
+    evaluation.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.ExternalCSS.PreloadCount" units="preloads">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The number of preloads generated by scanning an external preloaded CSS
+    resource. As of 4/25/2016 this only includes @import declarations.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.ExternalCSS.ScanTime" units="us">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Microseconds it took to scan the first chunk of external CSS for preloads.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.ReferenceTime" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The time between preload discovery and when the resource is actually
+    referenced. This is implemented by marking when a preload is discovered by
+    the scanner, and when it has its first ResourceClient added to it. Note that
+    for link rel preloads, this tracks the time from scanner discory to DOM
+    discovery of the link declaration, not the actual resource.
+  </summary>
+</histogram>
+
+<histogram name="PreloadScanner.TTFB" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The time between preload discovery and when the first bytes of the response
+    data arrive.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.AbandonTimeUntilUsed" units="ms">
+  <owner>davidben@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a prerendered page is abandoned to when it is first used due
+    to user navigation. If the page is swapped before begin abandoned, a zero is
+    recorded.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.CookieSendType" enum="PrerenderCookieSendType">
+  <obsolete>
+    Deprecated March 13 2015.
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Enumeration of what types of cookies were sent for a prerender.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.CookieStatus" enum="PrerenderCookieStatus">
+  <obsolete>
+    Deprecated March 13 2015.
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>Enumeration of what cookie actions a prerender caused.</summary>
+</histogram>
+
+<histogram name="Prerender.Event" enum="PrerenderEvent">
+  <obsolete>
+    Deprecated Dec 12 2014.
+  </obsolete>
+  <summary>
+    Enumeration of what events related to prerendering have occurred.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.Events" enum="PrerenderHoverEvent">
+  <obsolete>
+    deprecated May 10 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Hover Event counts for prerendering.</summary>
+</histogram>
+
+<histogram name="Prerender.FinalStatus" enum="PrerenderFinalStatus">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Final status for prerender pages - either success, or why it was canceled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.FinalStatusMatchComplete"
+    enum="PrerenderFinalStatus">
+  <obsolete>
+    deprecated 2016-05-12
+  </obsolete>
+  <summary>
+    Final status for prerender pages - either success, or why it was canceled.
+    This is for the MatchComplete set of pages (including some pages that were
+    not actually prerendered), to match the control group.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.FractionPixelsFinalAtSwapin">
+  <obsolete>
+    Deprecated Jan 14 2014.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For prerenders that are swapped in, the percentage of pixels that is already
+    final at swap-in time compared to when the spinner stops.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.HoverStats_TimeUntilClicked" units="ms">
+  <obsolete>
+    deprecated May 10 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Duration that a user hovers a link before clicking on it.
+
+    This is recorded for all pages loaded in a session.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.HoverStats_TimeUntilDiscarded" units="ms">
+  <obsolete>
+    deprecated May 10 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Duration that the mouse pointer hovers on a link before the mouse pointer
+    moves off of it.
+
+    This is recorded for all pages loaded in a session.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalPredictorEvent"
+    enum="PrerenderLocalPredictorEvents">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Enumeration of what events related to the local predictor have occurred
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalPredictorLoggedInLookupTime" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time to perform the LoggedIn Lookup for the local predictor. This operation
+    checks whether a user is likely logged into a page that we would like to
+    prerender.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalPredictorPrefetchMatchPLT" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The PrerenderLocalPredictor uses local browsing history and the prerender
+    service to predict pages likely visited soon. Some of these URLs are
+    prefetched. When such prefetched likely next pages are visited, this
+    histogram records the PLT for such pages. In particular, this also happens
+    if prefetch is actually disabled, allowing (by pivoting on whether or not
+    prefetch is enabled) to compare the effect of prefetch on PLT.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalPredictorServiceLookupTime" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time to perform the Service Lookup for the local predictor. This operation
+    queries a Google service to obtain pages to prerender, as well as whether
+    prerender candidate pages are likely safe for prerendering.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalPredictorTimeUntilUsed" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a prerendered page is started to when it is first used due to
+    user navigation. If the page is never used, it is not included in this
+    histogram.  This only refers to prerenders based on the local predictor.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalPredictorURLLookupTime" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time to perform the URL Lookup for the local predictor. This operation
+    retrieves from the user's local browsing history the URLs corresponding to
+    URLIDs.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalVisitCoreTransition"
+    enum="PrerenderLocalVisitCoreTransition">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The transition type for each new visit as recorded in the local visits
+    database.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.LocalVisitDatabaseSize">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the local visits database (number of entries).</summary>
+</histogram>
+
+<histogram name="Prerender.LocalVisitEvents" enum="PrerenderLocalVisitEvents">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Enumeration of what events related to local visits have occurred
+  </summary>
+</histogram>
+
+<histogram name="Prerender.ModPagespeedHeader">
+  <obsolete>
+    Deprecated as of 10/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Previous version of the Prerender.PagespeedHeader.* histograms.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NetworkBytes.TotalForProfile" units="bytes">
+  <obsolete>
+    Deprecated May 13th 2014, use Prerender.NetworkBytesTotalForProfile instead.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of bytes transferred on the network for URLRequests (not including
+    HTTP/TLS/TCP/IP overhead).  Reported on event of a PrerenderContents
+    deletion.  Includes prerender bytes.  Bytes are only counted when
+    prerendering is enabled and not in a control group.  The sum of the
+    distribution for a single user represents all of that user's network
+    transfers for resource for that time period while prerendering was enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NetworkBytes.Used" units="bytes">
+  <obsolete>
+    Deprecated May 13th 2014, use Prerender.NetworkBytes.Used instead.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of bytes transferred on the network for URLRequests (not including
+    HTTP/TLS/TCP/IP overhead) for a prerender that was used (or would have been
+    used).
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NetworkBytes.Wasted" units="bytes">
+  <obsolete>
+    Deprecated May 13th 2014, use Prerender.NetworkBytes.Wasted instead.
+  </obsolete>
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of bytes transferred on the network for URLRequests (not including
+    HTTP/TLS/TCP/IP overhead) for a prerender that was not used.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NetworkBytesTotalForProfile" units="bytes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of bytes transferred on the network for URLRequests (not including
+    HTTP/TLS/TCP/IP overhead).  Reported on event of a PrerenderContents
+    deletion.  Includes prerender bytes.  Bytes are only counted when
+    prerendering is enabled and not in a control group.  The sum of the
+    distribution for a single user represents all of that user's network
+    transfers for resource for that time period while prerendering was enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NetworkBytesUsed" units="bytes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of bytes transferred on the network for URLRequests (not including
+    HTTP/TLS/TCP/IP overhead) for a prerender that was used (or would have been
+    used).
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NetworkBytesWasted" units="bytes">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>jkarlin@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Number of bytes transferred on the network for URLRequests (not including
+    HTTP/TLS/TCP/IP overhead) for a prerender that was not used.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NoStatePrefetchAge" units="ms">
+  <owner>droger@chromium.org</owner>
+  <owner>mattcary@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>Time between the prefetch and the actual load of the page.</summary>
+</histogram>
+
+<histogram name="Prerender.NoStatePrefetchMainResourceRedirects"
+    units="redirects">
+  <owner>droger@chromium.org</owner>
+  <owner>mattcary@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Length of the redirect chain for main resources loaded by NoStatePrefetch.
+    Recorded when the final response in the chain is received.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NoStatePrefetchResponseTypes"
+    enum="NoStatePrefetchResponseType">
+  <owner>droger@chromium.org</owner>
+  <owner>mattcary@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Type of responses received by NoStatePrefetch, distinguishing cacheable
+    resources from no-store resources, and main resources from sub-resources.
+    Recorded when a response is received, including on each redirect.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NoStatePrefetchSubResourceRedirects"
+    units="redirects">
+  <owner>droger@chromium.org</owner>
+  <owner>mattcary@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Length of the redirect chain for sub-resources loaded by NoStatePrefetch.
+    Recorded when the final response in the chain is received.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.NoStatePrefetchTTFCP" units="ms">
+  <owner>droger@chromium.org</owner>
+  <owner>mattcary@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <summary>Time to first contentful paint.</summary>
+</histogram>
+
+<histogram name="Prerender.OmniboxNavigationsCouldPrerender">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    A boolean that indicates whether the Omnibox navigation being committed
+    could have been prerendered by the Omnibox Prerender system. This provides
+    an upper bound for Prerender.OmniboxNavigationsUsedPrerenderCount and allows
+    the potential for Omnibox Prerendering coverage to be understood. If Omnibox
+    Prerendering is disabled, this histogram will register a 'false' entry. The
+    total count is the equivalent of the deprecated
+    NetworkActionPredictor.NavigationCount histogram.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The number of navigations that use a prerender initiated from the Omnibox.
+    The count is incremented when the Prerendered tab is swapped in if the
+    Prerender was initiated by the Omnibox, which obviously requires
+    Prerendering from the Omnibox to be enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.OmniboxPrerenderCount">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The number of prerenders initiated from the Omnibox. This is incremented
+    when the NetworkActionPredictor suggests Prerendering as an optimal strategy
+    given the text the user has entered and the Autocomplete suggestion
+    currently selected. It is only incremented if Prerendering from the Omnibox
+    is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PagespeedHeader.ServerCounts"
+    enum="PagespeedHeaderServerType">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The number of responses received bucketed into the range [0,4]: bucket 0 is
+    the total number of responses received; bucket 1 is the number of responses
+    received with an X-Mod-Pagespeed header [indicating a mod_pagespeed server];
+    bucket 2 is the number of responses received with an X-Page-Speed header and
+    a header value in the X-Mod-Pagespeed format (a.b.c.d-e) [indicating an
+    ngx_pagespeed server]; bucket 3 is the number of responses received with an
+    X-Page-Speed header and a header value in the PageSpeed Service format
+    (a_b_c) [indicating a PSS server]; and bucket 4 is the number of responses
+    received with an X-Page-Speed header and a header value in neither of the
+    preceding formats [indicating some other server; IISpeed is the only known
+    one at this stage].
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PagespeedHeader.VersionCounts"
+    enum="PagespeedVersion">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The number of responses received that either have an X-Mod-Pagespeed header
+    or have an X-Page-Speed header with a value in the X-Mod-Pagespeed format
+    (a.b.c.d-e), bucketed into the range [1,99]: bucket 1 is for header values
+    that aren't in the a.b.c.d-e format, the remaining buckets are an encoding
+    of the value: 2 + 2 * (max(c, 10) - 10) + (d &gt; 1 ? 1 : 0). The rationale
+    is that 'c' is incremented with each new release and 'd' is initially 0 but
+    is incremented for each patch to a release.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PageviewEvents" enum="PrerenderPageviewEvents">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Types of pages rendered.</summary>
+</histogram>
+
+<histogram name="Prerender.PageVisitedStatus" enum="Boolean">
+  <obsolete>
+    deprecated March 30, 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Indicates whether the user has ever visited (in the past) a URL for which a
+    prerender is launched.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPageLoadTime_Control" units="ms">
+  <obsolete>
+    Deprecated 03/24/11.  Replaced by
+    Prerender.PerceivedPLT_ContentPrefetchPrerenderControl.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This particular histogram is for all page loads for users who do not have
+    prerendering enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchControl"
+    units="ms">
+  <obsolete>
+    Deprecated 03/24/11.   Replaced by
+    Prerender.PerceivedPLTMatched_ContentPrefetchPrerenderControl.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This particular histogram is only for pages that would have been prerendered
+    if the user had prerender enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPageLoadTime_PrerenderMatchTreatment"
+    units="ms">
+  <obsolete>
+    Deprecated 03/24/11.   Replaced by
+    Prerender.PerceivedPLTMatched_ContentPrefetchPrerender.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This particular histogram is for all prerendered page loads for users who
+    have prerender enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPageLoadTime_Treatment" units="ms">
+  <obsolete>
+    Deprecated 03/24/11.   Replaced by
+    Prerender.PerceivedPLT_ContentPrefetchPrerender.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This particular histogram is for all page loads for users who have
+    prerendering enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPageLoadTime_WindowControl" units="ms">
+  <obsolete>
+    Deprecated 03/24/11.   Replaced by
+    Prerender.PerceivedPLTWindowed_ContentPrefetchPrerenderControl.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This particular histogram is for all page loads within 30 seconds after a
+    prefetch tag is seen for users who do not have prerendering enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPageLoadTime_WindowTreatment" units="ms">
+  <obsolete>
+    Deprecated 03/24/11.   Replaced by
+    Prerender.PerceivedPLTWindowed_ContentPrefetchPrerender.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load pre navigation.
+
+    This particular histogram is for all page loads within 30 seconds after a
+    prefetch tag is seen for users who have prerendering enabled.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLT" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded for all pages loaded in a session.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTFirstAfterMiss" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded for the first page load completing immediately after a
+    prerender.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
+    There are two types: Any, and Non-overlapping.  The latter only applies to
+    page loads initiated after the prerender.  This variable records cases where
+    only Any triggered.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTFirstAfterMissBoth" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
+    There are two types: Any, and Non-overlapping.  The latter only applies to
+    page loads initiated after the prerender.  This variable records cases where
+    both triggered.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded for the first page load completing immediately after a
+    prerender, but which has also started after the prerender has been
+    initiated.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"
+    units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    &quot;FirstAfterMiss&quot; means the first pageload after a prerender miss.
+    There are two types: Any, and Non-overlapping.  The latter only applies to
+    page loads initiated after the prerender.  This variable records cases where
+    only Non-overlapping triggered.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTMatched" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded only for prerendered pages, or for pages which would have
+    been prerendered in the control case.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTMatchedComplete" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded only for prerendered pages, or for pages which would have
+    been prerendered in the control case.
+
+    In MatchedComplete, the prerender group also contains cancelled prerenders,
+    so as to produce a perfect match of page views attributed this group in the
+    prerender group with those attributed to this group in the control group.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTWindowed" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded for all page loads which happen within 30 seconds after a
+    prefetch tag is observed.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PerceivedPLTWindowNotMatched" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a user navigates to a page to when it loads. Since the pages
+    may start loading before the user navigates to it, this does not include any
+    portion of load prior to navigation.
+
+    This is recorded for all page loads which happen within 30 seconds after a
+    prefetch tag is observed and which do not correspond to a prerender tag.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PercentLoadDoneAtSwapin">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    For prerenders that are swapped in, the percentage of the time from load
+    start until the onload event fires that has elapsed at the time of the
+    swapin.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PeriodicCleanupDeleteContentsTime" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    How long the cleanup portion of PrerenderManager::PeriodicCleanup takes, to
+    measure jank.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PeriodicCleanupResourceCheckTime" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    How long the resource check portion of PrerenderManager::PeriodicCleanup
+    takes, to measure jank.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PrerenderCountOf3Max">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    After launching a prerender, how many simultanious prerenders are recorded
+    as running, out of a maximum of three.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PrerenderNotSwappedInPLT" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    For prerenders that finish loading before they are ever swapped in, their
+    page load time until the onload event fires.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.PrerendersPerSessionCount">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The number of sessions that have at least X successful prerenders.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.RelTypesLinkAdded" enum="PrerenderRelTypes">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    For each prerender link added to a document, records the rel types present
+    on the link element.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.RelTypesLinkStarted" enum="PrerenderRelTypes">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    For each prerender in a document which starts prerendering, records the rel
+    types present on the link element.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.RendererIdleTime" units="ms">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This is the time from when a prerendered page finishes loading to when it is
+    displayed, as measured by the renderer process. When a page is displayed
+    before it finishes loading, no value is recorded in this histogram.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.RendererPerceivedPLT" units="ms">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Perceived load time of a page, as measured by the renderer process. For
+    non-prerendered pages, this is just BeginToFinish. For displayed prerendered
+    pages, this is the time from when the prerendered page is moved into a
+    TabContents until finish. &quot;Finish&quot; == after onload() and all
+    resources are loaded. Note that this is 0 if the loading finishes before the
+    page is moved into a TabContents.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.RendererPerceivedPLTMatched" units="ms">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Perceived load time of a prerendered page that is displayed, as measured by
+    the renderer process. This is the time from when the prerendered page is
+    moved into a TabContents until finish. &quot;Finish&quot; == after onload()
+    and all resources are loaded. Note that this is 0 if the loading finishes
+    before the page is moved into a TabContents.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.RendererTimeUntilDisplay" units="ms">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time elapsed between when the prerendering of a page starts and when the
+    page is displayed, as measured by the renderer process. Prerendered pages
+    discarded without being displayed are excluded from this count.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.SchemeCancelReason"
+    enum="PrerenderSchemeCancelReason">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The detailed reason why a prerender is canceled with
+    FINAL_STATUS_UNSUPPORTED_SCHEME
+  </summary>
+</histogram>
+
+<histogram name="Prerender.Sessions" enum="PrerenderMode">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Enumeration of how prerender was used per session.</summary>
+</histogram>
+
+<histogram name="Prerender.SessionStorageNamespaceMergeTime" units="ms">
+  <obsolete>
+    Deprecated Dec 12 2014.
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>Time to perform the session storage namespace merge.</summary>
+</histogram>
+
+<histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    For simulated local browsing prerendering, the baseline PLT of pages without
+    any prerendering for pages that would be prerendered.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.SimulatedLocalBrowsingPLT" units="ms">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    For simulated local browsing prerendering, the estimated PLT of pages with
+    prerendering enabled for pages that would be prerendered.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.TabContentsDeleterSuppressedDialog"
+    enum="BooleanSuppressed">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    A boolean that indicates how often we suppress a dialog from a tab when
+    swapping it with a prerender.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.TabContentsDeleterTimeout"
+    enum="BooleanCloseTimeout">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    A boolean that indicates how often we fail to delete an old prerendered tab
+    before the timeout.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.TabHelperEvent" enum="PrerenderTabHelperEvents">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Enumeration of what events related to the TabHelper class have occurred.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.TimeBetweenPrerenderRequests" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>Time between subsequent prerender requests.</summary>
+</histogram>
+
+<histogram name="Prerender.TimeSinceLastRecentVisit" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    The time elapsed between the most recent visit to a URL and when an
+    attempted prerender of the same URL is cancelled with
+    FINAL_STATUS_RECENTLY_VISITED.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.TimeToClick" units="ms">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Duration that a user hovers a link before clicking on it.</summary>
+</histogram>
+
+<histogram name="Prerender.TimeUntilUsed" units="ms">
+  <obsolete>
+    deprecated Nov 16 2012.  See Prerender.TimeUntilUsed2, which has a larger
+    range.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time from when a prerendered page is started to when it is first used due to
+    user navigation. If the page is never used, it is not included in this
+    histogram.
+  </summary>
+</histogram>
+
+<histogram name="Prerender.TimeUntilUsed2" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    Time from when a prerendered page is started to when it is first used due to
+    user navigation. If the page is never used, it is not included in this
+    histogram.
+  </summary>
+</histogram>
+
+<histogram name="Previews.ContentLength" units="KB">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The actual data used for a page load using a preview optimization.
+  </summary>
+</histogram>
+
+<histogram name="Previews.ContextMenuAction.LoFi"
+    enum="PreviewsContextMenuActionLoFi">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the Lo-Fi context menu options. These
+    samples include:
+
+    Displays and clicks on the &quot;Load image&quot; and &quot;Load
+    images&quot; context menu options. Count of pages where the user has clicked
+    &quot;Load image&quot; at least once.
+  </summary>
+</histogram>
+
+<histogram name="Previews.DataInflation" units="KB">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The estimated amount that the content was inflated for a page load using a
+    previews optimization. Recorded when a page load using a previews
+    optimization inflates the data used.
+  </summary>
+</histogram>
+
+<histogram name="Previews.DataInflationPercent" units="%">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The estimated percent of data used that a page load would have otherwise
+    cost for a page load using a previews optimization. Recorded when a page
+    load using a previews optimization inflates the data used.
+  </summary>
+</histogram>
+
+<histogram name="Previews.DataSavings" units="KB">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The estimated data savings for a page load using a previews optimization.
+    Recorded when a page load using a previews optimization reduces the data
+    used.
+  </summary>
+</histogram>
+
+<histogram name="Previews.DataSavingsPercent" units="%">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The estimated percent of data savings for a page load using a previews
+    optimization. Recorded when a page load using a previews optimization
+    reduces the data used.
+  </summary>
+</histogram>
+
+<histogram name="Previews.EligibilityReason.Offline"
+    enum="PreviewsEligibilityReason">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    Whether an offline preview was allowed to be shown or the reason the preview
+    could not be shown to the user.
+  </summary>
+</histogram>
+
+<histogram name="Previews.InfoBarAction.LitePage" enum="PreviewsInfoBarAction">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the previews LitePage &quot;Saved
+    data&quot; infobar. These samples include:
+
+    Displays of the infobar and clicks on the &quot;Load original&quot; link.
+    Whether the infobar was dismissed by navigation or the user clicking on
+    &quot;X&quot; close button.
+  </summary>
+</histogram>
+
+<histogram name="Previews.InfoBarAction.LoFi" enum="PreviewsInfoBarAction">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the previews Lo-Fi &quot;Saved data&quot;
+    infobar. These samples include:
+
+    Displays of the infobar and clicks on the &quot;Load original&quot; link.
+    Whether the infobar was dismissed by navigation or the user clicking on
+    &quot;X&quot; close button.
+  </summary>
+</histogram>
+
+<histogram name="Previews.InfoBarAction.Offline" enum="PreviewsInfoBarAction">
+  <owner>bengr@chromium.org</owner>
+  <owner>megjablon@chromium.org</owner>
+  <summary>
+    Samples of user interactions with the previews Offline &quot;Faster page
+    loaded&quot; infobar. These samples include:
+
+    Displays of the infobar and clicks on the &quot;Load original&quot; link.
+    Whether the infobar was dismissed by navigation or the user clicking on
+    &quot;X&quot; close button.
+  </summary>
+</histogram>
+
+<histogram name="Previews.OptOut.DBRowCount" units="rows">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The number of rows in the Previews opt out SQLite table at profile startup.
+  </summary>
+</histogram>
+
+<histogram name="Previews.OptOut.UserOptedOut.Offline"
+    enum="PreviewsUserOptedOut">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    Whether the user chose to reload the full page when shown an offline
+    preview.
+  </summary>
+</histogram>
+
+<histogram name="Previews.OriginalContentLength" units="KB">
+  <owner>ryansturm@chromium.org</owner>
+  <summary>
+    The estimated content length of a page load using a preview optimization.
+  </summary>
+</histogram>
+
+<histogram name="PrinterService.PrinterServiceEvent"
+    enum="PrinterServiceEventType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Count of events in PrinterService on ChromeOS related to USB printers.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.DestinationAction"
+    enum="PrintPreviewPrintDestinationBuckets">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Actions performed by the user when the print destination search widget is
+    shown to the user.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.FontType" enum="PrintPreviewFontTypeType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Count of font file formats embeeded in print preview PDFs. These numbers are
+    biased by what the platforms supports in terms of detection.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.GcpPromo" enum="PrintPreviewGcpPromoBuckets">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Actions performed by the user when the Google Cloud Print add-printers
+    promotion is shown to the user.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.InitialDisplayTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Time from when print preview is intiated until the intial preview is sent to
+    the preview tab for rendering.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.InitializationTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Time from when print preview is intiated until the preview PDF generation is
+    started.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.InitiatedByScript" enum="BooleanMainFrame">
+  <owner>nasko@chromium.org</owner>
+  <summary>
+    Logged when a document calls the window.print() API. The boolean value
+    indicates whether it is invoked by the main frame. It will be false for
+    documents in subframes.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.ManagePrinters">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Count the number of requests received to show the manage printers dialog.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.NumberOfPrinters">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Count the total number of printers shown in destination drop down list.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.OutOfProcessSubframe" enum="Boolean">
+  <owner>nasko@chromium.org</owner>
+  <summary>
+    Logged when a document calls the window.print() API in any frame. The
+    boolean value will be true when the API call is invoked by a document which
+    is in a process different than the top level document. It will be false in
+    all other cases.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.Initial">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The page count of the initial print preview, a.k.a. the total number of
+    pages in documents to be printed.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.PrintToCloudPrint">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed to a cloud
+    printer.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.PrintToCloudPrintWebDialog">
+  <obsolete>
+    No longer used as of 01/2016.
+  </obsolete>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed to a cloud
+    printer using web dialog.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.PrintToPDF">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed to PDF.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.PrintToPrinter">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed to a
+    printer.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.PrintWithExtension">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed to an
+    extension printer (using printerProvider API).
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.PrintWithPrivet">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed to a privet
+    printer.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PageCount.SystemDialog">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The final page count (after page selection) of documents printed using
+    system dialog.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PreviewEvent" enum="PrintPreviewHelperEvents">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Print preview events.</summary>
+</histogram>
+
+<histogram name="PrintPreview.PrintSettings" enum="PrintSettings">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Track the popularity of print settings. (Settings when printing to PDF are
+    excluded from this statistic.)
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.PrintSettingsUi"
+    enum="PrintPreviewPrintSettingsUiBuckets">
+  <owner>alekseys@chromium.org</owner>
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Actions performed by the user interacting with print settings UI elements.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RegeneratePreviewRequest.BeforeCancel">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The number of times regenerate preview requests received before the user
+    clicked the cancel button.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RegeneratePreviewRequest.BeforeFirstData">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The number of times regenerate preview requests received before the first
+    preview data is availible.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RegeneratePreviewRequest.BeforePrint">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    The number of times regenerate preview requests received before the user
+    clicked the print button.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RenderAndGeneratePDFTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Time taken to render and generate PDF for print preview. (Includes time to
+    reflow the page back to normal, but not the time to reflow the page to
+    prepare for printing.)
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RenderAndGeneratePDFTimeAvgPerPage" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Time taken to render and generate PDF for print preview divided by the
+    number of pages. (Includes time to reflow the page back to normal, but not
+    the time to reflow the page to prepare for printing.)
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RendererError" enum="PrintPreviewFailureType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Count how frequently a set of pre-defined print preview errors occur.
+  </summary>
+</histogram>
+
+<histogram name="PrintPreview.RenderPDFPageTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Time taken to render each PDF page for print preview.</summary>
+</histogram>
+
+<histogram name="PrintPreview.RenderToPDFTime" units="ms">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Time taken to render to PDF for print preview.</summary>
+</histogram>
+
+<histogram name="PrintPreview.UserAction" enum="PrintPreviewUserActionType">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Action taken by the user in the preview tab such as print, cancel, print to
+    pdf and show advanced print settings dialog.
+  </summary>
+</histogram>
+
+<histogram name="Process.Sandbox.Launch.Error" enum="WinGetLastError">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Errors returned while launching sandboxed process on Windows. For decoding
+    error code please refer to http://goo.gl/fJJiAv.
+  </summary>
+</histogram>
+
+<histogram name="Process.Sandbox.Launch.Warning" enum="WinGetLastError">
+  <owner>forshaw@chromium.org</owner>
+  <summary>
+    Warnings returned while launching sandboxed process on Windows. For decoding
+    error code please refer to http://goo.gl/fJJiAv. This will only be logged
+    when SpawnTarget succeeds with SBOX_ALL_OK but the last warning result does
+    not equal SBOX_ALL_OK.
+  </summary>
+</histogram>
+
+<histogram name="Process.Sandbox.Launch.WarningResultCode"
+    units="LaunchErrorCodes">
+  <owner>forshaw@chromium.org</owner>
+  <summary>
+    The warning launch error returned while launching sandboxed process on
+    Windows. This will only be logged when SpawnTarget succeeds with SBOX_ALL_OK
+    but the last warning result does not equal SBOX_ALL_OK.
+  </summary>
+</histogram>
+
+<histogram name="Process.Sandbox.Lowbox.Launch.Error" enum="WinGetLastError">
+  <owner>shrikant@chromium.org</owner>
+  <summary>
+    Errors returned while launching lowbox enabled sandboxed process on Windows.
+    For decoding error code please refer to http://goo.gl/fJJiAv.
+  </summary>
+</histogram>
+
+<histogram name="Profile.AddNewUser" enum="ProfileAddNewUser">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>The frequency of ways that new user profiles are added.</summary>
+</histogram>
+
+<histogram name="Profile.AndroidAccountManagementMenu"
+    enum="ProfileAndroidAccountManagementMenu">
+  <owner>aruslan@chromium.org</owner>
+  <summary>
+    Track user interactions that can be performed in the Android account
+    management menu.
+  </summary>
+</histogram>
+
+<histogram name="Profile.AppCount">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The number of installed apps when a profile is opened.</summary>
+</histogram>
+
+<histogram name="Profile.AuthResult" enum="ProfileAuth">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Counts of authorization results when trying to open a locked profile from
+    the User Manager.
+  </summary>
+</histogram>
+
+<histogram name="Profile.Avatar" enum="ProfileAvatar">
+  <owner>rlp@chromium.org</owner>
+  <summary>The frequency of selection of each avatar.</summary>
+</histogram>
+
+<histogram name="Profile.BookmarksSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the bookmarks database.</summary>
+</histogram>
+
+<histogram name="Profile.CookiesSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the cookies database.</summary>
+</histogram>
+
+<histogram name="Profile.CreateAndInitializeProfile" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>Length of time to setup profile.</summary>
+</histogram>
+
+<histogram name="Profile.CreateBrowserContextServicesTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the CreateBrowserContextServices call
+    within OnPrefsLoaded.
+  </summary>
+</histogram>
+
+<histogram name="Profile.CreateProfileHelperTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during ProfileManager::CreateProfileHelper.
+    This is called when a profile is created synchronously (usually at startup).
+  </summary>
+</histogram>
+
+<histogram name="Profile.CreateResult" enum="ProfileCreateResult">
+  <owner>pam@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>Result (final status) when creating a new profile.</summary>
+</histogram>
+
+<histogram name="Profile.CreateTime" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Back-end time elapsed while creating a new profile. The max is 30 seconds,
+    when an external timeout was applied.
+  </summary>
+</histogram>
+
+<histogram name="Profile.CreateTimeCanceled" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time elapsed before the user decided to cancel creation of a new profile.
+    Since only managed-user profile creation can be canceled, this time comes
+    from managed-user registration. The max is 30 seconds, when an external
+    timeout was applied.
+  </summary>
+</histogram>
+
+<histogram name="Profile.CreateTimeCanceledNoTimeout" units="ms">
+  <owner>pam@chromium.org</owner>
+  <summary>
+    Time elapsed from when the handler received the message that a user clicked
+    'Create' until the user decided to cancel creation of a new profile. Since
+    only managed-user profile creation can be canceled, this time comes from
+    managed-user registration.
+  </summary>
+</histogram>
+
+<histogram name="Profile.CreateTimeNoTimeout" units="ms">
+  <owner>pam@chromium.org</owner>
+  <summary>
+    Time elapsed from when the handler received the message that a user clicked
+    'Create' until the creation either failed with a local error (see
+    Profile.CreateResult), was canceled (also recorded in
+    Profile.CreateTimeCanceledNoTimeout), or completed successfully.
+  </summary>
+</histogram>
+
+<histogram name="Profile.Delete" enum="BooleanProfileSignedIn">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    This histogram tracks the deletion of the profile. This tracks when the
+    cleanup actually takes place, not the UI interaction. The parameter
+    indicates if the profile was signed in or not; true means the profile was
+    signed in, false means the profile was not signed in.
+  </summary>
+</histogram>
+
+<histogram name="Profile.DeleteProfileAction" enum="ProfileDeleteAction">
+  <owner>mlerman@chromium.org</owner>
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    This histogram tracks which UI screen was used to initiate and confirm the
+    deletion of a profile. This does not track when the profile is actually
+    deleted, which is an asynchronous process that happens later.
+  </summary>
+</histogram>
+
+<histogram name="Profile.DesktopMenu" enum="ProfileDesktopMenu">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Track user interactions that can be performed in the user menu and user
+    manager. The origin of the action, whether the an interaction in the content
+    area or some other source, is noted in the histogram suffix.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ExtensionSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the extension cookies database.</summary>
+</histogram>
+
+<histogram name="Profile.FaviconsSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the favicons database.</summary>
+</histogram>
+
+<histogram name="Profile.GetProfile" units="ms">
+  <obsolete>
+    Deprecated 02/2015. Profile.CreateAndInitializeProfile is more useful.
+  </obsolete>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>Length of time to retrieve profile.</summary>
+</histogram>
+
+<histogram name="Profile.GetProfileInfoPath.OutsideUserDir" enum="BooleanHit">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Whether Profile::GetProfileInfoPath is called with a profile outside the
+    user data directory. We expect this to never happen but need to verify in
+    stable. This metric may be removed after M54.
+  </summary>
+</histogram>
+
+<histogram name="Profile.HistorySize" units="MB">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>Size of the history database.</summary>
+</histogram>
+
+<histogram name="Profile.InitProfileUserPrefs.OutsideUserDir" enum="BooleanHit">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Whether Profile::InitProfileUserPrefs is called with a profile outside the
+    user data directory. We expect this to never happen but need to verify in
+    stable. This metric may be removed after M54.
+  </summary>
+</histogram>
+
+<histogram name="Profile.LaunchBrowser" enum="ProfileType">
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Number of times users launch a browser window from either a primary or
+    secondary profile (i.e., each time a browser window is opened we log which
+    type of profile it belongs to).
+  </summary>
+</histogram>
+
+<histogram name="Profile.LockedProfilesDuration" units="minutes">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    How long locked profiles have been locked for. This is logged each time any
+    profile is loaded. Note that this does not track the total time the profile
+    was locked, but rather the span from when the profile was locked to when the
+    measurement takes place.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NetUserCount" enum="ProfileNetUserCount">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Counts of users added and deleted. Percentages are not meaningful. Please
+    look at the ratio of the counts/percentages.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NewAvatarMenu.NotYou"
+    enum="ProfileNewAvatarMenuNotYou">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Tracks user interactions with the 'Not You?' bubble that users can navigate
+    to from the Upgrade bubble after upgrade to the New Avatar Menu.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NewAvatarMenu.Signin"
+    enum="ProfileNewAvatarMenuSignin">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Tracks user interactions with the signin bubble that appears in the New
+    Avatar Menu upon signin. This bubble appears after the user signs in using
+    the Inline Signin flow.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NewAvatarMenu.Upgrade"
+    enum="ProfileNewAvatarMenuUpgrade">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Tracks user interactions with the bubble that appears for users in the new
+    avatar menu after upgrade.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NotifyProfileCreatedTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the Notify() of
+    NOTIFICATION_PROFILE_CREATED during ProfileImpl::DoFinalInit().
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfAccountsPerProfile">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Counts the number of Google-managed accounts linked to a profile. This may
+    be counted multiple times per profile. Please review with the &quot;Show
+    user counts&quot; option enabled on the dashboard.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfManagedProfiles">
+  <owner>pam@chromium.org</owner>
+  <summary>
+    Counts the number of locally managed profiles on a user's machine at least
+    every 24 hours while Chrome is running, among cases with at least one
+    profile. Always de-dupe the results with Show User Counts.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfProfiles">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Counts the number of profiles on a user's machine at least every 24 hours
+    while Chrome is running. Always de-dupe the results with Show User Counts.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfProfilesAfterAddOrDelete">
+  <obsolete>
+    Deprecated 2013-04-09. No longer tracked. See Profile.NumberOfProfiles.
+  </obsolete>
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Counts the number of profiles on a user's machine whenever a profile is
+    added or deleted.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfProfilesOnStartup">
+  <obsolete>
+    Deprecated; replaced by Profile.NumberOfProfiles on 2013-04-09. Data are
+    suspect, especially after 2012-02-24: see https://crbug.com/189213.
+  </obsolete>
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Counts the number of profiles on a user's machine when Chrome starts up.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfProfilesWithAuthErrors">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Counts the type GAIA authentication errors on a user's machine when Chrome
+    starts up. The types of errors are broken down in Signin.AuthError.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfSignedInProfiles">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Counts the number of signed-in profiles on a user's machine at least every
+    24 hours while Chrome is running. Always de-dupe the results with Show User
+    Counts.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfSignedInProfilesOnStartup">
+  <obsolete>
+    Deprecated; replaced by Profile.NumberOfSignedInProfiles on 2013-04-09.
+  </obsolete>
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Counts the number of profiles that are signed in to Chrome when Chrome
+    starts up.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfSignedInProfilesWithGAIAIcons">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Counts the number of signed-in profiles that are using the GAIA image as the
+    avatar icon. This is counted at least every 24 hours while Chrome is
+    running, so always de-dupe the results with Show User Counts.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfSwitches">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Counts the number of times profiles were switched in a browser session. This
+    value is incremented when a profile is switched to and the result is logged
+    during shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Profile.NumberOfUnusedProfiles">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Counts the number of profiles unused within the past 28 days on a user's
+    machine. This is counts at least every 24 hours while Chrome is running, so
+    always de-dupe the results with Show User Counts.
+  </summary>
+</histogram>
+
+<histogram name="Profile.OnLocaleReadyTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during ProfileImpl::OnLocaleReady. This
+    happens once after profile was loaded.
+  </summary>
+</histogram>
+
+<histogram name="Profile.OnPrefsLoadedTime" units="ms">
+  <obsolete>
+    Deprecated 04/2015, and replaced by Profile.OnLocaleReadyTime.
+  </obsolete>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during ProfileImpl::OnPrefsLoaded.
+  </summary>
+</histogram>
+
+<histogram name="Profile.Opening" enum="ProfileOpen">
+  <obsolete>
+    Deprecated because it did not present the information clearly.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The frequency of ways that the profiles are opened.</summary>
+</histogram>
+
+<histogram name="Profile.OpenMethod" enum="ProfileOpenMethod">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    The frequency with which the user opens the different profile menus or
+    switches profiles. For the open statistics, this does not mean the user
+    necessarily opened a profile after clicking. The switch statistics indicate
+    how often and how the user switches profiles. They are provided together for
+    comparison of how often the user actually switches after opening the avatar
+    bubble menu.
+  </summary>
+</histogram>
+
+<histogram name="Profile.PercentageOfManagedProfiles">
+  <owner>pam@chromium.org</owner>
+  <summary>
+    Tracks the percentage (0-100) of profiles that are locally managed, recorded
+    when Chrome starts up.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ProfileError" enum="ProfileErrorType">
+  <owner>tnagel@chromium.org</owner>
+  <summary>
+    The error with the current user profile that caused an error dialog to be
+    shown. This dialog is shown usually when there is some sort of corruption in
+    the user's profile data.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ProfileImplDoFinalInit" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the ProfileImpl::DoFinalInit().
+  </summary>
+</histogram>
+
+<histogram name="Profile.SupervisedProfileCreateError"
+    enum="GoogleServiceAuthError">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The error code generated in the final step (registration step) of creating a
+    new supervised profile.
+  </summary>
+</histogram>
+
+<histogram name="Profile.SupervisedProfileImportError"
+    enum="GoogleServiceAuthError">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The error code generated in the final step (registration step) of importing
+    a supervised profile.
+  </summary>
+</histogram>
+
+<histogram name="Profile.SupervisedProfileTotalCreateTime" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time elapsed from when the handler received the message that a user clicked
+    'Create' to create a new supervised user profile until the registration ends
+    either successfully or with a failure (both recorded in
+    Profile.SupervisedProfileCreateResult).
+  </summary>
+</histogram>
+
+<histogram name="Profile.SupervisedProfileTotalImportTime" units="ms">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Time elapsed from when the handler received the message that a user clicked
+    'Import supervised user' until the registration ends either successfully or
+    with a failure (both recorded in Profile.SupervisedProfileImportResult).
+  </summary>
+</histogram>
+
+<histogram name="Profile.SwitchGaiaPhotoSettings"
+    enum="ProfileGaiaPhotoOptions">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Counts of when users switch to using their GAIA photo instead of an avatar
+    icon or the opposite when they switch back to an avatar icon instead of
+    their GAIA photo.
+  </summary>
+</histogram>
+
+<histogram name="Profile.Sync" enum="ProfileSync">
+  <obsolete>
+    Deprecated because it did not present the information clearly.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Activity of the user with regards to sync.</summary>
+</histogram>
+
+<histogram name="Profile.SyncCustomize" enum="ProfileSyncCustomize">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Number of times and ways the user customized the sync options of their
+    profile. Percentages are not meaningful. To determine percentages, take the
+    count of a given action over the count of number of customizations.
+  </summary>
+</histogram>
+
+<histogram name="Profile.SyncSignIn" enum="ProfileType">
+  <owner>rpop@google.com</owner>
+  <summary>
+    Number of times the user signed into sync from original or secondary
+    profile.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ThumbnailsSize" units="MB">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the thumbnails database.</summary>
+</histogram>
+
+<histogram name="Profile.TimeToOpenUserManager" units="ms">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Time required to open the UserManager, from when it started to show until
+    when its javascript started executing.
+  </summary>
+</histogram>
+
+<histogram name="Profile.TopSitesSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the top sites database.</summary>
+</histogram>
+
+<histogram name="Profile.TotalHistorySize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Total size of all history databases.</summary>
+</histogram>
+
+<histogram name="Profile.TotalSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Total size of the profile data (excluding sub-folders).</summary>
+</histogram>
+
+<histogram name="Profile.TriggeredReset" enum="BooleanReset">
+  <owner>robertshield@chromium.org</owner>
+  <summary>
+    Indicates whether a profile had a reset trigger that caused it to launch a
+    reset flow. The presence of this trigger is recorded during profile
+    creation.
+  </summary>
+</histogram>
+
+<histogram name="Profile.Update" enum="ProfileType">
+  <owner>rlp@chromium.org</owner>
+  <summary>Times a profile name and/or avatar was updated.</summary>
+</histogram>
+
+<histogram name="Profile.UpgradeEnrollment" enum="ProfileUpgradeEnrollment">
+  <obsolete>
+    Deprecated 8/2014. Upgrade Promotional UI removed.
+  </obsolete>
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    The process which leads a user to enroll in New Profile Management. Also
+    tracks if the user chooses to opt out, and tutorials which guide the user
+    into New Profile Management.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ValidateMenuItemInvalidIndex.IsGuest" enum="Boolean">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    Whether the active profile is a guest profile when -validateMenuItem in the
+    ProfileMenuController gets an invalid value for the current profile's index.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ValidateMenuItemInvalidIndex.ProfileCount">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    The count of profiles in the avatar menu when -validateMenuItem in the
+    ProfileMenuController gets an invalid value for the current profile's index.
+  </summary>
+</histogram>
+
+<histogram name="Profile.ValidateMenuItemInvalidIndex.Selector"
+    enum="ValidateMenuItemSelectorType">
+  <owner>anthonyvd@chromium.org</owner>
+  <summary>
+    The selector associated with the menu item when -validateMenuItem in the
+    ProfileMenuController gets an invalid value for the current profile's index.
+  </summary>
+</histogram>
+
+<histogram name="Profile.VisitedLinksSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the visited links database.</summary>
+</histogram>
+
+<histogram name="Profile.WebDataSize" units="MB">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of the web data database.</summary>
+</histogram>
+
+<histogram name="ProfileReset.ResetRequestOrigin"
+    enum="ProfileResetRequestOriginEnum">
+  <owner>alito@chromium.org</owner>
+  <summary>
+    Encodes from where the request for resetting the profile settings
+    originated.
+  </summary>
+</histogram>
+
+<histogram name="ProfileReset.SendFeedback" enum="Boolean">
+  <owner>engedy@chromium.org</owner>
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Signifies if the user selected &quot;Send feedback&quot; checkbox in the
+    Reset Profile dialog.
+  </summary>
+</histogram>
+
+<histogram name="Protector.DefaultSearchProvider" enum="ProtectorError">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Errors that Protector detects about default search provider in Web Data.
+    Reported once when Web Data is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Protector.Preferences" enum="ProtectorError">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Errors that Protector detects about protected settings in Preferences.
+    Reported once when profile is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Protector.SearchProvider" enum="SearchEngine">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When the default search provider setting is changed outside of Chrome, which
+    is detected by the Protector, this histogram reports the new setting.
+  </summary>
+</histogram>
+
+<histogram name="Protector.StartupSettings" enum="SessionStartupType">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    When the startup settings are changed outside of Chrome, which is detected
+    by the Protector, this histogram reports the new setting.
+  </summary>
+</histogram>
+
+<histogram name="ProxyOverriddenBubble.ExtensionCount" units="Extensions">
+  <obsolete>
+    Deprecated 9/2016. Never added to histograms.xml and value is always 1.
+  </obsolete>
+  <summary>
+    The number of extensions overriding the proxy, triggering the proxy override
+    extension warning bubble.
+  </summary>
+</histogram>
+
+<histogram name="ProxyOverriddenBubble.UserSelection"
+    units="ExtensionBubbleAction">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The action taken by the user when the &quot;proxy overridden&quot; extension
+    warning bubble is shown. Logged immediately after the action is taken.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.Memory.BlinkGCKB" units="KB">
+  <owner>tasak@google.com</owner>
+  <summary>
+    The memory usage of the BlinkGC allocator after a background renderer is
+    purged and suspended. Note: this metric is for A/B testing.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.Memory.DiscardableKB" units="KB">
+  <owner>tasak@google.com</owner>
+  <summary>
+    The memory usage of the discardable memory after a background renderer is
+    purged and suspended. Note: this metric is for A/B testing.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.Memory.MallocMB" units="MB">
+  <owner>tasak@google.com</owner>
+  <summary>
+    The memory usage of the malloc after a background renderer is purged and
+    suspended. Note: this metric is for A/B testing.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.Memory.PartitionAllocKB" units="KB">
+  <owner>tasak@google.com</owner>
+  <summary>
+    The memory usage of PartitionAlloc after a background renderer is purged and
+    suspended. Note: this metric is for A/B testing.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.Memory.TotalAllocatedMB" units="MB">
+  <owner>tasak@google.com</owner>
+  <summary>
+    The sum of the memory usages of PartitionAlloc, malloc, discardable memory,
+    mainThreadIsolate() and BlinkGC allocator after a backgrounded renderer is
+    purged and suspended. Note: this metric is for A/B testing.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.Memory.V8MainThreadIsolateMB" units="MB">
+  <owner>tasak@google.com</owner>
+  <summary>
+    The memory usage of mainThreadIsolate() after a backgrounded renderer is
+    purged and suspended. Note: this metric is for A/B testing.
+  </summary>
+</histogram>
+
+<histogram name="PurgeAndSuspend.PendingTaskCount">
+  <owner>tasak@google.com</owner>
+  <summary>
+    This records how many tasks are still in task queues when a backgrounded
+    renderer is suspended.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.BackgroundBudget">
+  <owner>harkness@chromium.org</owner>
+  <summary>
+    Whenever a Service Worker receives a push message, this records the budget
+    available to the service worker, which is an internal Chrome value for the
+    amount of background processing a service worker is allowed to do without
+    visibly alerting the user. Scale for the budget is 0 to 100.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.DeliveryStatus" enum="PushDeliveryStatus">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When a Service Worker receives a push message, this records whether the
+    overall operation was successful, or otherwise the type of error
+    encountered.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.DeliveryStatus.FindServiceWorker"
+    enum="ServiceWorkerStatusCode">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When attempting to deliver a push message to a Service Worker, this records
+    the result of finding the Service Worker registration given its ID and
+    origin.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.DeliveryStatus.ServiceWorkerEvent"
+    enum="ServiceWorkerStatusCode">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When a Service Worker receives a push message, this records the precise
+    result received from the Service Worker code.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.GetRegistrationStatus"
+    enum="PushGetRegistrationStatus">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When a webpage asks for details about its current push messaging
+    registration, this records whether the request is successful, or otherwise
+    the type of error encountered.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.ReceivedMessageInBackground" enum="Boolean">
+  <owner>dgn@chromium.org</owner>
+  <summary>
+    Whenever a Service Worker receives a push message, this records whether
+    Chrome is completely running in the background. A successful report means
+    that the message was received when Chrome was in complete background mode,
+    without UI, while a failure means it was in some other state: in background
+    with some apps running, showing browser windows, etc.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.RegistrationStatus"
+    enum="PushRegistrationStatus">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When a webpage registers for push messaging, this records whether the
+    request is successful, or otherwise the type of error encountered.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.SESForLowBudgetOrigin">
+  <owner>harkness@chromium.org</owner>
+  <summary>
+    When a Service Worker hits low budget when servicing a push message, this
+    records what the Site Engagement Service score is at that time.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.SESForNoBudgetOrigin">
+  <owner>harkness@chromium.org</owner>
+  <summary>
+    When a Service Worker hits zero budget when servicing a push message, this
+    records what the Site Engagement Service score is at that time.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.UnregistrationReason"
+    enum="PushUnregistrationReason">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When unregistering a website from push messaging, this records the reason
+    why it is being unregistered.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.UnregistrationStatus"
+    enum="PushUnregistrationStatus">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When unregistering a website from push messaging, this records whether the
+    request is successful, or otherwise the type of error encountered.
+  </summary>
+</histogram>
+
+<histogram name="PushMessaging.UserVisibleStatus" enum="PushUserVisibleStatus">
+  <owner>johnme@google.com</owner>
+  <summary>
+    When a Service Worker receives a push message, this records whether it
+    showed user-visible UX (like a notification), or whether we showed a forced
+    notification on its behalf.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.csvFormattedCellCount">
+  <owner>dskelton@google.com</owner>
+  <summary>
+    Records the number of cells that contain formatting data in the default
+    worksheet when a comma separated value spreadsheet is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.csvNonEmptyCellCount">
+  <owner>dskelton@google.com</owner>
+  <summary>
+    Records the number of non-empty cells in the default worksheet when a comma
+    separated value spreadsheet is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.csvSheetCount">
+  <owner>dskelton@google.com</owner>
+  <summary>
+    Records the number of worksheets when a comma separated value spreadsheet is
+    opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.docPageCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the page count when a compound binary format document is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.docParagraphCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the paragraph count when a compound binary format document is
+    opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.docSectionCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the section count when a compound binary format document is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.docxPageCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the page count when an OOXML format document is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.docxParagraphCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the paragraph count when an OOXML format document is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.docxSectionCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the section count when an OOXML format document is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.ErrorTypes" enum="QuickofficeErrorTypes">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the various different error types encountered when opening and
+    reading MS Office file formats in the Quickoffice viewer. These range from
+    Nacl crashes and uncaught javascript exceptions to document errors inside
+    Quickoffice Web Toolkit (eg QOWT). The errors are recorded against the file
+    format in which they occurred.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.FileFormat" enum="QuickofficeFileFormat">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the various different file types supported by Quickoffice (like MS
+    Word, Excel, Powerpoint files) when they opened in the browser to measure
+    which file formats are most popular.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.pptMasterCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of slide masters when a compound binary format
+    presentation is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.pptSlideCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the slide count when a compound binary format presentation is
+    opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.pptxMasterCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of slide masters when an OOXML format presentation is
+    opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.pptxSlideCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the slide count when an OOXML format presentation is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.xlsFormattedCellCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of cells that contain formatting data in the default
+    worksheet when a compound binary format spreadsheet is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.xlsNonEmptyCellCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of non-empty cells in the default worksheet when a
+    compound binary format spreadsheet is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.xlsSheetCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of worksheets when a compound binary format spreadsheet
+    is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.xlsxFormattedCellCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of cells that contain formatting data in the default
+    worksheet when an OOXML format spreadsheet is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.xlsxNonEmptyCellCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of non-empty cells when an OOXML format spreadsheet is
+    opened.
+  </summary>
+</histogram>
+
+<histogram name="Quickoffice.xlsxSheetCount">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Records the number of worksheets when an OOXML format spreadsheet is opened.
+  </summary>
+</histogram>
+
+<histogram name="Quota.AgeOfDataInDays" units="days">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    How many kilobytes are how old. Similar to |AgeOfOrigin| except a sample is
+    added for each kilobyte of an origin's data. Logged hourly for all origins
+    with stored data.
+  </summary>
+</histogram>
+
+<histogram name="Quota.AgeOfOriginInDays" units="days">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    How many days it's been since an origin's temporary storage has been
+    accessed. Logged hourly for all origins with stored data.
+  </summary>
+</histogram>
+
+<histogram name="Quota.AvailableDiskSpace" units="MB">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Amount of free disk space for the storage directory. Logged at irregular
+    intervals.
+  </summary>
+</histogram>
+
+<histogram name="Quota.DaysSinceLastAccess" units="days">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    The number of days since an origin's data was last accessed. Logged upon
+    access when the time since last access is at least 24 hours.
+  </summary>
+</histogram>
+
+<histogram name="Quota.DiskspaceShortage" units="MB">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Difference between acceptable lower limit of diskspace and actual free
+    diskspace at beginning of an eviction round.
+  </summary>
+</histogram>
+
+<histogram name="Quota.ErrorsOnEvictingOriginPerHour">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Number of errors on evicting origin by QuotaTemporaryStorageEvictor in an
+    hour.
+  </summary>
+</histogram>
+
+<histogram name="Quota.ErrorsOnGettingUsageAndQuotaPerHour">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Number of errors on getting usage and quota by QuotaTemporaryStorageEvictor
+    in an hour.
+  </summary>
+</histogram>
+
+<histogram name="Quota.EvictedBytesPerRound" units="MB">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Amount of usage used by evicted origins in an eviction round.
+  </summary>
+</histogram>
+
+<histogram name="Quota.EvictedOriginAccessCount">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The number of times the evicted origin was accessed. Logged when the origin
+    is evicted.
+  </summary>
+</histogram>
+
+<histogram name="Quota.EvictedOriginsPerHour">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of evicted origins in an hour.</summary>
+</histogram>
+
+<histogram name="Quota.EvictedOriginTimeSinceAccess">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The time since the evicted origin was last accessed. Logged when the origin
+    is evicted.
+  </summary>
+</histogram>
+
+<histogram name="Quota.EvictionRoundsPerHour">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of eviction rounds in an hour.</summary>
+</histogram>
+
+<histogram name="Quota.FreeDiskSpaceForProfile" units="MB">
+  <obsolete/>
+  <owner>tzik@chromium.org</owner>
+  <summary>Amount of free disk space for profile directory.</summary>
+</histogram>
+
+<histogram name="Quota.GlobalTemporaryPoolSize" units="MB">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    The size of the global temporary storage pool. Logged at irregular
+    intervals.
+  </summary>
+</histogram>
+
+<histogram name="Quota.GlobalUsageOfPersistentStorage" units="MB">
+  <owner>tzik@chromium.org</owner>
+  <summary>Global usage of persistent storage.</summary>
+</histogram>
+
+<histogram name="Quota.GlobalUsageOfTemporaryStorage" units="MB">
+  <owner>tzik@chromium.org</owner>
+  <summary>Global usage of temporary storage.</summary>
+</histogram>
+
+<histogram name="Quota.InitialTemporaryGlobalStorageQuota" units="MB">
+  <obsolete/>
+  <owner>tzik@chromium.org</owner>
+  <summary>Initial quota for global temporary storage.</summary>
+</histogram>
+
+<histogram name="Quota.LRUOriginTypes" enum="QuotaOriginTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Types of origins that are initially selected for eviction via LRU. Some of
+    these types are exempt from eviction.
+  </summary>
+</histogram>
+
+<histogram name="Quota.NumberOfEvictedOriginsPerRound">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of evicted origins per round.</summary>
+</histogram>
+
+<histogram name="Quota.NumberOfPersistentStorageOrigins">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of origins using persistent storage.</summary>
+</histogram>
+
+<histogram name="Quota.NumberOfProtectedPersistentStorageOrigins">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of protected origins using persistent storage.</summary>
+</histogram>
+
+<histogram name="Quota.NumberOfProtectedTemporaryStorageOrigins">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of protected origins using temporary storage.</summary>
+</histogram>
+
+<histogram name="Quota.NumberOfTemporaryStorageOrigins">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of origins using temporary storage.</summary>
+</histogram>
+
+<histogram name="Quota.NumberOfUnlimitedPersistentStorageOrigins">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of unlimited origins using persistent storage.</summary>
+</histogram>
+
+<histogram name="Quota.NumberOfUnlimitedTemporaryStorageOrigins">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of unlimited origins using temporary storage.</summary>
+</histogram>
+
+<histogram name="Quota.QuotaForOrigin" units="MB">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    The quota value computed for an origin using temporary storage. Logged at
+    irregular intervals. (In the process of writing new data, storage systems
+    consult the quota system for &quot;usage and quota&quot; to determine if
+    there is sufficient space available for the new data. This value is logged
+    at the time of that consultation. The frequency is dependent on how
+    individual websites use the various storage apis.)
+  </summary>
+</histogram>
+
+<histogram name="Quota.SkippedEvictionRoundsPerHour">
+  <owner>tzik@chromium.org</owner>
+  <summary>Number of skipped eviction rounds in an hour.</summary>
+</histogram>
+
+<histogram name="Quota.TimeBetweenRepeatedOriginEvictions">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    Time since an origin was last chosen to be evicted from the storage,
+    recorded each time the origin is evicted (except for the first eviction).
+  </summary>
+</histogram>
+
+<histogram name="Quota.TimeDeltaOfEvictionRounds">
+  <owner>tzik@chromium.org</owner>
+  <summary>Time between two consecutive active eviction rounds.</summary>
+</histogram>
+
+<histogram name="Quota.TimeSpentToAEvictionRound">
+  <owner>tzik@chromium.org</owner>
+  <summary>Time spent to an eviction round.</summary>
+</histogram>
+
+<histogram name="Quota.TimeToInitializeGlobalQuota" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time spent initializing the global quota. Logged when the storage
+    partition's quota manager is initialized.
+  </summary>
+</histogram>
+
+<histogram name="Quota.TotalDiskSpace" units="MB">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Total disk space for the storage directory. Logged at irregular intervals.
+  </summary>
+</histogram>
+
+<histogram name="Quota.UsageOverageOfTemporaryGlobalStorage" units="MB">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Overage of the temporary global storage usage at beginning of an eviction
+    round.
+  </summary>
+</histogram>
+
+<histogram name="Rappor.DailyEvent.IntervalType" enum="DailyEventIntervalType">
+  <owner>holte@chromium.org</owner>
+  <summary>Counts how often daily interval events were fired.</summary>
+</histogram>
+
+<histogram name="Rappor.DiscardReason" enum="RapporDiscardReason">
+  <owner>holte@chromium.org</owner>
+  <summary>
+    For each Rappor log that is discarded, the reason that it was discarded.
+  </summary>
+</histogram>
+
+<histogram name="Rappor.FailedUploadErrorCode" enum="NetErrorCodes">
+  <owner>holte@chromium.org</owner>
+  <summary>Net error codes for failed Rappor uploads.</summary>
+</histogram>
+
+<histogram name="rappor.last_daily_sample" enum="DailyEventIntervalType">
+  <obsolete>
+    Removed 2015/05/05.
+  </obsolete>
+  <owner>holte@chromium.org</owner>
+  <summary>
+    Rappor.DailyEvent.IntervalType reported under the wrong name.
+  </summary>
+</histogram>
+
+<histogram name="Rappor.LoadCohortResult" enum="RapporLoadResultType">
+  <owner>holte@chromium.org</owner>
+  <summary>
+    Success or errors encountered when loading Rappor cohort pref.
+  </summary>
+</histogram>
+
+<histogram name="Rappor.LoadSecretResult" enum="RapporLoadResultType">
+  <owner>holte@chromium.org</owner>
+  <summary>
+    Success or errors encountered when loading Rappor secret pref.
+  </summary>
+</histogram>
+
+<histogram name="Rappor.UploadResponseCode" enum="HttpResponseCode">
+  <owner>holte@chromium.org</owner>
+  <summary>
+    For each upload to the Rappor server, log the response received from the
+    server.
+  </summary>
+</histogram>
+
+<histogram name="RecoveryComponent.Event" enum="RecoveryComponentEvent">
+  <owner>robertshield@chromium.org</owner>
+  <summary>Log each stage of a recovery component event.</summary>
+</histogram>
+
+<histogram name="Render.Workers.MaxWorkerCountInRendererProcess">
+  <owner>kinuko@chromium.org</owner>
+  <summary>
+    Maximum number of workers (SharedWorker or ServiceWorker) that are
+    simultaneously hosted in a single renderer process. Recorded when the
+    renderer process host is being destructed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.AcceleratedFixedRootBackground"
+    enum="AcceleratedFixedRootBackground">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Keeps track of the number of main frame scrolls with an accelerated fixed
+    root background, the number of main frame scrolls with an unaccelerated
+    fixed root background, and the total number of main frame scrolls.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.CompositedScrolling" enum="CompositedScrolling">
+  <owner>hartmanng@chromium.org</owner>
+  <summary>
+    Total count of the number of RenderLayers which are scrollable areas, need
+    to be promoted to stacking containers, and will use composited scrolling.
+    Each bucket is sampled at most once per RenderLayer, when the RenderLayer
+    first becomes scrollable, first needs to become a stacking container, and
+    first uses composited scrolling, respectively.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.DrawDuration" units="ms">
+  <obsolete>
+    Replaced by Scheduling.Renderer.DrawDuration. This metric did not
+    differentiate between processes.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>The time it takes for the compositor to draw a frame.</summary>
+</histogram>
+
+<histogram name="Renderer.DrawDurationOverestimate" units="ms">
+  <obsolete>
+    Measurement no longer taken.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The amount by which the compositor's draw duration was overestimated in a
+    particular frame (0 if the duration was perfectly predicted or
+    underestimated).
+  </summary>
+</histogram>
+
+<histogram name="Renderer.DrawDurationUnderestimate" units="ms">
+  <obsolete>
+    Measurement no longer taken.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The amount by which the compositor's draw duration was underestimated in a
+    particular frame (0 if the duration was perfectly predicted or
+    overestimated).
+  </summary>
+</histogram>
+
+<histogram name="Renderer.GpuLatency" units="ms">
+  <obsolete>
+    Measurement no longer taken.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The delay between the compositor submitting a command to the GPU and that
+    command executing on the GPU. This delay is measured once per frame.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.GpuLatencyOverestimate" units="ms">
+  <obsolete>
+    Measurement no longer taken.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The amount by which GPU latency was overestimated in a particular frame (0
+    if the latency was perfectly predicted or underestimated).
+  </summary>
+</histogram>
+
+<histogram name="Renderer.GpuLatencyUnderestimate" units="ms">
+  <obsolete>
+    Measurement no longer taken.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The amount by which GPU latency was underestimated in a particular frame (0
+    if the latency was perfectly predicted or overestimated).
+  </summary>
+</histogram>
+
+<histogram name="Renderer.Hung.MobileInfoBar.UserEvent"
+    enum="MobileHungRendererInfoBarEvent">
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>
+    Android: Records the terminal event associated with a hung renderer infobar.
+    This includes both the explicit user actions as well as implicit dismissals,
+    e.g., when the renderer regains responsiveness before the infobar is
+    interactively dismissed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.LayoutMs" units="ms">
+  <obsolete>
+    Deprecated as of 3/2015.
+  </obsolete>
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    Duration of the FrameView::performLayout trace event, which occurs at most
+    once per frame.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.LineLayoutMs" units="ms">
+  <obsolete>
+    Deprecated as of 3/2015.
+  </obsolete>
+  <owner>benjhayden@chromium.org</owner>
+  <summary>
+    Amount of time spent doing line layout during FrameView::performLayout.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.PixelIncreaseFromTransitions">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    A lower-bound on the percentage increase in memory that would result from
+    promoting all layers that have a webkit-transition on opacity or transform.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.unloadEventsDurationMS" units="ms">
+  <obsolete>
+    Deprecated as of 10/2013.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This measures how long all unload event handlers required to run whenever an
+    unload event is processed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer.ViewportZoomBugCount" enum="BooleanHit">
+  <owner>kkhorimoto@chromium.org</owner>
+  <summary>
+    [iOS] A boolean that is used to indicate that the WebKit rendering bug in
+    http://crbug.com/583231 has occurred. This occurs when a page with no
+    viewport tag is rendered with an unusable zoom scale. Only logged on iOS.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.FinishDocToFinish">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a document finished loading to when all it's resources
+    are also loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.RequestToFinish">
+  <obsolete>
+    Deprecated 6/15/09.  Replaced by Renderer2.RequestToFinish_L
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page was requested by a user to when it is fully
+    loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.RequestToFinish_L">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page was requested by a user to when it is fully
+    loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.RequestToFirstLayout">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page was requested by a user to its first layout.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.RequestToStart">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page was requested by a user to when it starts loading.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.StartToFinish">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page started loading to when it is fully loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.StartToFinishDoc">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page starts loading to when the main document is
+    finished loading.
+  </summary>
+</histogram>
+
+<histogram name="Renderer2.StartToFirstLayout">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time from when a page starts loading to its first layout.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.Abandoned" enum="Abandoned">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Distribution of actual finished pages, vs abandoned pages, where we needed
+    to declare a finish time prematurely since the page was being closed
+    (exited).
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.AccelContentPaintDurationMS">
+  <obsolete>
+    Deprecated 2014-05 because of impl-side painting.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time spent by WebKit painting the page, in milliseconds, when the GPU
+    acceleration is active, for paints that affect non-root layers.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.AccelContentPaintMegapixPerSecond">
+  <obsolete>
+    Deprecated 2014-05 because of impl-side painting.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    WebKit paint throughput, measured in megapixels per second, when GPU
+    acceleration is active, for paints that affect non-root layers.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.AccelDoDeferredUpdateDelay">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>Time between frames when GPU acceleration is active.</summary>
+</histogram>
+
+<histogram name="Renderer4.AccelRootPaintDurationMS">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time spent by WebKit painting the page, in milliseconds, when the GPU
+    acceleration is active, for paints that affect the root layer.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.AccelRootPaintMegapixPerSecond">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    WebKit paint throughput, measured in megapixels per second, when GPU
+    acceleration is active, for paints that affect the root layer.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.AnimationCallbackDelayTime" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from when the animation callback was posted to when it ran.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.BeginToCommit" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;begin&quot; to &quot;commit.&quot;   &quot;Begin&quot;==
+    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
+    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
+    time when renderer requested load of document, after any unload of last
+    document. &quot;Commit&quot;== time when renderer got first byte of
+    document.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.BeginToFinish">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="Renderer4.BeginToFinishDoc">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="Renderer4.BeginToFirstPaint" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;begin&quot; to &quot;first paint.&quot;  &quot;Begin&quot;==
+    &quot;request&quot; if user requested, and &quot;start&quot; otherwise.
+    &quot;Request&quot;== time when user requested document. &quot;Start&quot;==
+    time when renderer requested load of document, after any unload of last
+    document. &quot;First paint&quot;== time when first paint operation was
+    performed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.BeginToFirstPaintAfterLoad" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;big&quot; to &quot;first paint after load.&quot;
+    &quot;Begin&quot;== &quot;request&quot; if user requested, and
+    &quot;start&quot; otherwise.  &quot;Request&quot;== time when user requested
+    document. &quot;Start&quot;== time when renderer requested load of document,
+    after any unload of last document. &quot;First paint after load&quot;== time
+    after onload() when first paint operation is performed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.Browser.PartialRasterPercentageSaved" units="%">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    Percentage of pixels which would have been rastered, but were skipped due to
+    the partial raster optimization. Logged for each raster task run in a
+    Browser process. The histogram is suffixed by the RasterBufferProvider which
+    is in use.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CommitToFinish" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;finish.&quot; &quot;Commit&quot;==
+    time when renderer got first byte of document.  &quot;Finish&quot;==after
+    onload() and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CommitToFinishDoc" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;finish doc.&quot; &quot;Commit&quot;==
+    time when renderer got first byte of document. &quot;Finish doc&quot; ==
+    main document loaded, before onload(). &quot;Finish&quot;==after onload()
+    and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CommitToFirstPaint" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;first paint.&quot;
+    &quot;Commit&quot;== time when renderer got first byte of document.
+    &quot;First paint&quot;== time when first paint operation was performed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CommitToFirstPaintAfterLoad" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;commit&quot; to &quot;first paint after load.&quot;
+    &quot;Commit&quot;== time when renderer got first byte of document.
+    &quot;First paint after load&quot;== time after onload() when first paint
+    operation is performed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CompositorScrollHitTestResult"
+    enum="CompositorScrollResult">
+  <owner>vollick@chromium.org</owner>
+  <summary>
+    It's possible for compositor hit testing to determine conclusively that
+    compositor thread scrolling can or cannot be done. It's also possible that
+    the hit testing result is inconclusive. We would like to see the I-don't-
+    know result as little as possible. This histogram tracks the ratios.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CompositorThreadImplDrawDelay" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time between frames, as measured on the compositor thread. This is collected
+    once per frame while it is being drawn to the screen in the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.CompositorTouchScrollUpdateThread"
+    enum="ScrollThread">
+  <owner>tdresser@chromium.org</owner>
+  <summary>Whether the scroll from touch is executed on main thread.</summary>
+</histogram>
+
+<histogram name="Renderer4.CompositorWheelScrollUpdateThread"
+    enum="ScrollThread">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Whether the scroll from mouse wheel is executed on main thread.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.drawPixelCountCulled" units="NormalizedPixels">
+  <obsolete>
+    Renamed to Renderer4.pixelCountCulled_Draw.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels that culling prevented being drawn to the screen,
+    normalized to the viewport size. This is collected once per frame while it
+    is being drawn to the screen in the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.drawPixelCountOpaque" units="NormalizedPixels">
+  <obsolete>
+    Renamed to Renderer4.pixelCountOpaque_Draw.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels drawn to the screen and known opaque, normalized to the
+    viewport size. This is collected once per frame while it is being drawn to
+    the screen in the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.drawPixelCountTranslucent" units="NormalizedPixels">
+  <obsolete>
+    Renamed to Renderer4.pixelCountTranslucent_Draw.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels drawn to the screen and not known opaque, normalized to the
+    viewport size. This is collected once per frame while it is being drawn to
+    the screen in the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.FinishDocToFinish" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;finish doc&quot; to &quot;finish.&quot; &quot;Finish
+    doc&quot;== main document loaded, before onload(). &quot;Finish&quot;==after
+    onload() and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.FinishToFirstPaintAfterLoad" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;finish &quot; to &quot;first paint after load.&quot;
+    &quot;Finish&quot;==after onload() and all resources are loaded. &quot;First
+    paint after load&quot;== time after onload() when first paint operation is
+    performed.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuImageDecodeState" enum="GpuImageDecodeState">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Gpu image decode usage statistics. Images are decoded and locked prior to
+    upload; this indicates how that decode is used during tile management.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuImageDecodeState.FirstLockWasted"
+    enum="BooleanWasted">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Indication whether the first lock of an image decode was wasted (image was
+    not used). Images are decoded and locked prior to raster; this indicates
+    whether the decode was used or not during the first lock.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuImageUploadState.FirstRefWasted"
+    enum="BooleanWasted">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Indication whether the first ref of a GPU image upload was wasted (not used
+    in raster). Images are uploaded prior to raster; this indicates whether the
+    upload was used during the first ref.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuImageUploadState.Used" enum="BooleanUsage">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Indication whether the GPU image upload was used in raster. Images are
+    uploaded prior to raster; this indicates whether the upload was used during
+    raster.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuRasterizationEnabled" enum="BooleanEnabled">
+  <owner>alokp@chromium.org</owner>
+  <summary>
+    Whether gpu rasterization is enabled (checked once after the page is painted
+    for the first time).
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuRasterizationSuitableContent"
+    enum="BooleanEnabled">
+  <owner>alokp@chromium.org</owner>
+  <summary>
+    If gpu rasterization is enabled, whether the page contents are suitable for
+    gpu rasterization (checked once after the page is painted for the first
+    time).
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuRasterizationTriggered" enum="BooleanEnabled">
+  <owner>alokp@chromium.org</owner>
+  <summary>
+    If gpu rasterization is enabled, whether it was triggered (checked once
+    after the page is painted for the first time).
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.GpuRasterizationUsed" enum="BooleanEnabled">
+  <owner>alokp@chromium.org</owner>
+  <summary>
+    If gpu rasterization is enabled, whether it was actually used for the page
+    (checked once after the page is painted for the first time).
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.IdealContentsScale">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    The contents scale at which picture layer impl should be rasterized in order
+    to appear crisp. This is also known as ideal contents scale. This value is
+    recorded any time the ideal contents scale changes. Some examples of this
+    are pinch-zoom and JavaScript transform changes.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.ImageDecodeTaskDurationUs" units="microseconds">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    This metric records the duration of an image decode in the compositor. It is
+    recorded every time we decode an image. It is suffixed by the type of
+    rasterization we're in (either Gpu or Software).
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.InvalidationRegionApproximateRectCount"
+    units="rects">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of rects inside of a PictureLayer's invalidation region per commit.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.LanguageDetection" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time to determine the page language. This is done after the page has been
+    loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.LCDText.PercentageOfAALayers" units="%">
+  <obsolete>
+    Deprecated as of 02/2015.  No longer generated.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    The ratio of LCDText CC Layers / candidate LCDText layers. Recorded in
+    LayerTreeHost, after LayerTreeHostCommon::CalculateDrawProperties() has
+    computed the properties we need. Only recorded for the first 50 frames of
+    every page.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.LCDText.PercentageOfCandidateLayers" units="%">
+  <obsolete>
+    Deprecated as of 02/2015.  No longer generated.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    The ratio of CC Layers which are candidates for LCDText AA / total picture
+    or content Layers.  Recorded in LayerTreeHost, after
+    LayerTreeHostCommon::CalculateDrawProperties() has computed the properties
+    we need. Only recorded for the first 50 frames of every page.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.LoadType" enum="LoadType">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Probability distribution for enumerated varieties of page loads.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.LockExistingCachedImage" enum="BooleanSuccess">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    For each attempted lock of a cached image, records whether it was
+    successful.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.MainThreadGestureScrollReason"
+    enum="MainThreadScrollingReason">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Ideally we'd always scroll on the impl thread, but there are a variety of
+    situations where we need to scroll on main. We should try to drive these
+    down. For every gesture, we record whether or not the scroll occurred on the
+    main thread, and if it did, what the reason was.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.MainThreadWheelScrollReason"
+    enum="MainThreadScrollingReason">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    Ideally we'd always scroll on the impl thread, but there are a variety of
+    situations where we need to scroll on main. We should try to drive these
+    down. For every wheel tick, we record whether or not the the scroll occurred
+    on the main thread, and if it did, what the reason was.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.pixelCountCulled_Draw" units="NormalizedPixels">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels that culling prevented being drawn to the screen, recorded
+    as 10 times the percentage of the viewport that these pixels cover. This is
+    collected once per frame while it is being drawn to the screen in the
+    compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.pixelCountOpaque" units="NormalizedPixels">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels known to be opaque, recorded as 10 times the percentage of
+    the viewport that these pixels cover.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.pixelCountPainted" units="NormalizedPixels">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels painted by WebKit into main memory, recorded as 10 times
+    the percentage of the viewport that these pixels cover. This is collected
+    once per commit from WebKit to the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.pixelCountTranslucent" units="NormalizedPixels">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels not known to be opaque opaque, recorded as 10 times the
+    percentage of the viewport that these pixels cover.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.ReadyToDrawTileDrawStatus" enum="UsedInDraw">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    For each tile that was ready to draw at some point, logs whether the tile
+    was actually used in a draw. This is logged at tile destruction time.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.Renderer.PartialRasterPercentageSaved" units="%">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    Percentage of pixels which would have been rastered, but were skipped due to
+    the partial raster optimization. Logged for each raster task run in a
+    Renderer process. The histogram is suffixed by the RasterBufferProvider
+    which is in use.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.renderPassCount">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    The number of render passes (or render targets) in the renderer's frame. If
+    the value is more than one, then an intermediate rendering target must be
+    used during the rendering of the frame for each render pass greater than
+    one.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.RequestToFinish" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;request&quot; to &quot;finish.&quot;  &quot;Request&quot;==
+    time when user requested document.  &quot;Finish&quot;==after onload() and
+    all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.RequestToStart" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;request&quot; to &quot;start.&quot; &quot;Request&quot;==
+    time when user requested document. &quot;Start&quot;== time when renderer
+    requested load of document, after any unload of last document.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.ResourcePoolMemoryUsage" units="MB">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    Size of the in-use portion of the ResourcePool. Recorded each time resources
+    are reclaimed after tile work completes.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.Snapshot">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>Time to capture a renderer snapshot.</summary>
+</histogram>
+
+<histogram name="Renderer4.SoftwareCompositorThreadImplDrawDelay" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time between frames when the software renderer is being used, as measured on
+    the compositor thread. This is collected once per frame while it is being
+    drawn to the screen in the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.SoftwareDoDeferredUpdateDelay">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>Time between frames when the page is not GPU accelerated.</summary>
+</histogram>
+
+<histogram name="Renderer4.SoftwareImageDecodeState"
+    enum="SoftwareImageDecodeState">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Software image decode usage statistics. Images are decoded and locked prior
+    to raster; this indicates how that decode is used during tile management.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.SoftwareImageDecodeState.FirstLockWasted"
+    enum="BooleanWasted">
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Indication whether the first lock of an image decode was wasted (image was
+    not used). Images are decoded and locked prior to raster; this indicates
+    whether the decode was used or not during the first lock.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.SoftwarePaintDurationMS">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time spent by WebKit painting the page, in milliseconds, when the page is
+    not GPU accelerated.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.SoftwarePaintMegapixPerSecond">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    WebKit paint throughput, measured in megapixels per second, when the page is
+    not GPU accelerated.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.StartToCommit" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;start&quot; to &quot;commit.&quot; &quot;Start&quot;== time
+    when renderer requested load of document, after any unload of last document.
+    &quot;Commit&quot;== time when renderer got first byte of document.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.StartToFinish" units="ms">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Time from &quot;start&quot; to &quot;finish.&quot; &quot;Start&quot;== time
+    when renderer requested load of document, after any unload of last document.
+    &quot;Finish&quot;==after onload() and all resources are loaded.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.TextureCopyLatency" units="microseconds">
+  <owner>reveman@chromium.org</owner>
+  <summary>
+    Time between the issue of a texture copy operation and detecting that it has
+    completed as measured by the GPU process.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.TextureGpuUploadTimeUS">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    The number of microseconds it took to upload a tile's full texture as
+    measured on the GPU process.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.Thumbnail">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>Time to capture a renderer thumbnail.</summary>
+</histogram>
+
+<histogram name="Renderer4.tileCountCulled_Upload" units="NormalizedTiles">
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of tiles that culling prevented being uploaded to texture memory.
+    This is an approximation and is recorded as a 100 times the percentage of
+    the number of tiles, of default size, needed to cover the viewport. This is
+    collected once per commit from WebKit to the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.uploadPixelCountCulled" units="NormalizedPixels">
+  <obsolete>
+    Deprecated as of 04/2012, replaced with Renderer4.tileCountCulled_Upload.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels that culling prevented being uploaded to texture memory,
+    normalized to the viewport size. This is collected once per commit from
+    WebKit to the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.uploadPixelCountOpaque" units="NormalizedPixels">
+  <obsolete>
+    Renamed to Renderer4.pixelCountOpaque_Upload.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels uploaded to texture memory and known to be opaque,
+    normalized to the viewport size. This is collected once per commit from
+    WebKit to the compositor.
+  </summary>
+</histogram>
+
+<histogram name="Renderer4.uploadPixelCountTranslucent"
+    units="NormalizedPixels">
+  <obsolete>
+    Renamed to Renderer4.pixelCountTranslucent_Upload.
+  </obsolete>
+  <owner>wiltzius@chromium.org</owner>
+  <summary>
+    Number of pixels uploaded to texture memory and not known opaque, normalized
+    to the viewport size.  This is collected once per commit from WebKit to the
+    compositor.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.BackgroundRendererMainThreadLoad" units="%">
+  <owner>altimin@chromium.org</owner>
+  <summary>
+    Renderer main thread load when renderer is backgrounded, i.e. percentage of
+    time spent on running tasks.
+
+    This metric is emitted when the renderer main thread task is completed or
+    renderer is backgrounded or foregrounded, at most once per second per
+    renderer amortized.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.ExpectedTaskQueueingDuration" units="ms">
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    The estimated queueing duration which would be observed for additional high
+    priority tasks posted to the RendererScheduler. Recorded for each 1000 ms
+    window.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.ForegroundRendererMainThreadLoad" units="%">
+  <owner>altimin@chromium.org</owner>
+  <summary>
+    Renderer main thread load when renderer is foregrounded, i.e. percentage of
+    time spent on running tasks.
+
+    This metric is emitted when the renderer main thread task is completed or
+    renderer is backgrounded or foregrounded, at most once per second per
+    renderer amortized.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.NumberOfTasksPerQueueType"
+    enum="RendererSchedulerTaskQueueType">
+  <owner>altimin@chromium.org,alexclarke@chromium.org</owner>
+  <summary>
+    The number of completed renderer tasks split per task queue type. Used to
+    monitor usage of each type of task queues. Reported each time when task is
+    completed.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.TaskQueueManager.DelayedTaskLateness"
+    units="ms">
+  <owner>alexclarke@chromium.org</owner>
+  <summary>
+    The delta between when a delayed task was scheduled to run and when the
+    RendererScheduler actually ran it. Note: to reduce overhead only 10% of
+    tasks are sampled.
+  </summary>
+</histogram>
+
+<histogram
+    name="RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration"
+    units="ms">
+  <owner>alexclarke@chromium.org</owner>
+  <summary>
+    The queueing duration for non-delayed tasks posted to the RendererScheduler.
+    This metric is only recorded if TrackingInfo::time_posted is set (i.e. not
+    on android). Note: to reduce overhead only 10% of tasks are sampled.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.TaskTime" units="microseconds">
+  <owner>sunyunjia@chromium.org</owner>
+  <owner>tdresser@chromium.org</owner>
+  <summary>
+    The duration of every task queued in the _renderer_ scheduler to see the
+    distribution of the task duration.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.UserModel.GestureDuration" units="ms">
+  <owner>alexclarke@chromium.org</owner>
+  <summary>Duration of gestures (scrolls and pinches).</summary>
+</histogram>
+
+<histogram name="RendererScheduler.UserModel.GesturePredictedCorrectly"
+    units="GesturePredictionResult">
+  <owner>alexclarke@chromium.org</owner>
+  <summary>Whether a user gesture was predicted correctly.</summary>
+</histogram>
+
+<histogram name="RendererScheduler.UserModel.GestureStartTimeSinceModelReset"
+    units="ms">
+  <owner>alexclarke@chromium.org</owner>
+  <summary>
+    Time between when the UserModel was last reset (which happens on navigation)
+    and a gesture starting.
+  </summary>
+</histogram>
+
+<histogram name="RendererScheduler.UserModel.TimeBetweenGestures" units="ms">
+  <owner>alexclarke@chromium.org</owner>
+  <summary>Time between subsequent gestures (scrolls and pinches).</summary>
+</histogram>
+
+<histogram name="RendererSyncIPC.ElapsedTime" units="ms">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    Roundtrip times for synchronous IPC calls from the renderer to browser.
+  </summary>
+</histogram>
+
+<histogram name="RenderViewContextMenu.OpenLinkAsUser" enum="OpenLinkAsUser">
+  <owner>jochen@chromium.org</owner>
+  <summary>
+    State of the profile that is activated via the &quot;Open Link as User&quot;
+    menu. Logged when one of the &quot;Open Link as User&quot; context menu
+    options is selected.
+  </summary>
+</histogram>
+
+<histogram name="RenderViewContextMenu.OpenLinkAsUserProfilesState"
+    enum="OpenLinkAsUserProfilesState">
+  <owner>jochen@chromium.org</owner>
+  <summary>
+    Whether or not other profiles are active when the &quot;Open Link as
+    User&quot; context menu is shown. Logged when the context menu is created.
+  </summary>
+</histogram>
+
+<histogram name="RenderViewContextMenu.OpenLinkAsUserShown" units="profiles">
+  <owner>jochen@chromium.org</owner>
+  <summary>
+    Count of the profiles shown for the &quot;Open Link as User&quot; context
+    menu. Logged when the context menu is created.
+  </summary>
+</histogram>
+
+<histogram name="RenderViewContextMenu.Shown" enum="RenderViewContextMenuItem">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>Count of renderer view context menu items shown.</summary>
+</histogram>
+
+<histogram name="RenderViewContextMenu.Used" enum="RenderViewContextMenuItem">
+  <owner>vitalybuka@chromium.org</owner>
+  <summary>
+    Count of renderer view context menu items (Only commands now) used.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.DismissalState"
+    enum="AutofillDialogDismissalState">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    The state of the requestAutocomplete() dialog when it was dismissed.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.InitialUserState"
+    enum="AutofillDialogInitialUserState">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    The initial state of a user that's interacting with a freshly shown
+    requestAutocomplete() dialog.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.PopupInDialog"
+    enum="AutofillDialogPopupEvent">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    User interactions with the Autofill popup shown while filling an
+    requestAutocomplete() dialog.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.Security" enum="AutofillDialogSecurity">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the frequency of security warnings and errors in the
+    RequestAutocomplete dialog.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.UiDuration" units="ms">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the duration for which an requestAutocomplete() dialog was shown.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.UiDuration.Cancel" units="ms">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the duration for which an requestAutocomplete() dialog was shown,
+    in cases where the user ended up canceling out of the dialog.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.UiDuration.Submit" units="ms">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the duration for which an requestAutocomplete() dialog was shown,
+    in cases where the user ended up accepting the dialog.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.UiEvents" enum="AutofillDialogUiEvents">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures how users are interacting with the requestAutocomplete() dialog UI.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.UiLatencyToShow" units="ms">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the duration of time it takes for the requestAutocomplete() UI to
+    be actionable by the user after it is shown.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.WalletErrors" enum="WalletErrors">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the frequency of errors in communicating with the Google Online
+    Wallet server.
+  </summary>
+</histogram>
+
+<histogram name="RequestAutocomplete.WalletRequiredActions"
+    enum="WalletRequiredActions">
+  <obsolete>
+    Deprecated as of 5/5/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the frequency of required user actions returned by the Google
+    Online Wallet server.
+  </summary>
+</histogram>
+
+<histogram name="Reset.ChromeOS.PowerwashDialogShown"
+    enum="PowerwashDialogViewType">
+  <owner>merkulova@chromium.org</owner>
+  <summary>
+    Records the number of times the factory reset dialog was shown. Grouped by
+    the viewtype.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.DbStringTooLong">
+  <obsolete>
+    Deprecated October 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    A boolean that used to indicate a corner case when certain resources are not
+    written to the Predictor database becuase their URLs are too long. We
+    monitor this number to ensure that we do not discard too many resources.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.HavePredictionsForUrl">
+  <obsolete>
+    Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    A boolean that indicates if the speculative resource prefetch predictor has
+    predictions for a Navigation. This is updated on each navigations and helps
+    us determine the coverage of the predictor.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.HavePrefetchResults">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    A boolean that used to indicate a corner case when we may not have prefetch
+    results even though prefetching is enabled and predictions are present,
+    because another navigation in the same tab canceled the prefetching of the
+    previous load.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.HistoryVisitCountForUrl">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The visit count of a URL in the history database, measured when the onload
+    fires for the URL. Helpful in figuring out what visit count should be used
+    to start learning about a URL.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Assuming a fixed number (25 or 50) of URLs could be prefetched max, how many
+    would be available for prefetch (after we apply our heuristics for picking
+    subresources to prefetch for a navigation).
+
+    This stat is recorded when the predictor uses the host of the main frame url
+    as the key for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page and served
+    from the cache restricted to some max predictions (25 or 50).
+
+    This stat is recorded when the predictor uses the host of the main frame url
+    as the key for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page and served
+    from the network restricted to some max predictions (25 or 50).
+
+    This stat is recorded when the predictor uses the host of the main frame url
+    as the key for prediction.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Similar to ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork but
+    as a percent of the total number of resources the page actually fetched from
+    the network. This depcits the major gains that we can get.
+
+    This stat is recorded when the predictor uses the host of the main frame url
+    as the key for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page not used
+    by the page, restricted to some max predictions (25 or 50).
+
+    This stat is recorded when the predictor uses the host of the main frame url
+    as the key for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PrefetchCancelled" units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    prefetches cancelled as a percentage of the total number of resources that
+    the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PrefetchFailed" units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    prefetches failed as a percentage of the total number of resources that the
+    predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheNotUsed"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    successful prefetches that came from cache while prefetching but were not
+    requested by the page, as a percentage of the total number of resources that
+    the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromCache"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    successful prefetches that came from cache while prefetching and also came
+    from the cache when the page requested it, as a percentage of the total
+    number of resources that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Host.PrefetchFromCacheUsedFromNetwork"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    successful prefetches that came from cache while prefetching but came from
+    the network when the page requested it, as a percentage of the total number
+    of resources that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkNotUsed"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    successful prefetches that came from network while prefetching but were not
+    requested by the page, as a percentage of the total number of resources that
+    the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkUsedFromCache"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    successful prefetches that came from network while prefetching but came from
+    the cache when the page requested it, as a percentage of the total number of
+    resources that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Host.PrefetchFromNetworkUsedFromNetwork"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of
+    successful prefetches that came from cache while prefetching and also came
+    from the network when the page requested it, as a percentage of the total
+    number of resources that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Host.PrefetchNotStarted" units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of resources
+    that were prefetchable but were not prefetched as a percentage of
+    prefetchable resources.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.HostTableHostCount">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The count of number of unique hosts in the HostTable, i.e. the number of
+    hosts that the database has prediction data for. This data is useful for
+    determining the recall/precision as a function of the number of hosts that
+    need to be tracked by the database. Measured at startup.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.HostTableRowCount">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The count of number of rows in the HostTable. This is effecively the number
+    of (host, resource URL) pairs in the database. This is measured at startup
+    and used to get an estimate of the data size.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.MainFrameRequestStats"
+    enum="ResourcePrefetchPredictorMainFrameRequestStats">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Records stats about main frame navigations. Records the total number of
+    requests/responses/redirects for main frame urls along with the numbers for
+    how often the predictor can process such events. This is useful to figure
+    out what percentange of requests are handled by the predictor and also for
+    sanity checking the other stats.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.NavigationEvent"
+    enum="ResourcePrefetchPredictorNavigationEvent">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Records stats about various interesting events such as - request start,
+    response start, redirect, onload, etc during the load of a main frame.
+    Essential for understanding the complete life of a navigation request start
+    to the onload fire and the events that occur in between.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.NavigationStatus"
+    enum="ResourcePrefetchPredictorNavigationStatus">
+  <obsolete>
+    Deprecated 08/2012. Replaced with ResourcePrefetchPredictorNavigationEvent.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The status of various navigations from the view point of the 'onload' event.
+    Since we measure the prediction accuracy and learn navigation subresources
+    on the onload event, it is useful to know how many of the navigations are
+    abandoned before 'onload' fires.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.NetworkType"
+    enum="ResourcePrefetchPredictorNetworkType">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Records the number of pages on each type of network after a page is loaded.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.PLT" units="ms">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Page load time. It starts from when the main frame URL request is sent out
+    to when the main frame document load is completed.
+
+    This is recorded for both prefetched and non-prefetched pages.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.PredictedPrefetchCount">
+  <obsolete>
+    Deprecated 01/2013. Replaced with specific ones for Url and Host.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Assuming a fixed number of URLs could be prefetched max, how many would be
+    available for prefetch (after we apply our heuristics for picking
+    subresources to prefetch for a navigation).
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromCache">
+  <obsolete>
+    Deprecated 01/2013. Replaced with specific ones for Url and Host.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page and served
+    from the cache restricted to some max predictions.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.PredictedPrefetchFromNetwork">
+  <obsolete>
+    Deprecated 01/2013. Replaced with specific ones for Url and Host.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page and served
+    from the network restricted to some max predictions.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork">
+  <obsolete>
+    Deprecated 01/2013. Replaced with specific ones for Url and Host.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Similar to ResourcePrefetchPredictor.Predicted.PrefetchFromNetwork but as a
+    percent of the total number of resources the page actually fetched from the
+    network. This depcits the major gains that we can get.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.PredictedPrefetchMisses">
+  <obsolete>
+    Deprecated 01/2013. Replaced with specific ones for Url and Host.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page not used
+    by the page, restricted to some max predictions.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.ReportingEvent"
+    enum="ResourcePrefetchPredictorReportingEvent">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Records stats about various interesting events such as - when partial or all
+    of history is cleared. It will include events which do not necessarily
+    happen during a navigation (which are reported in
+    ResourcePrefetchPredictor.NavigationEvent).
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.RequestStats"
+    enum="ResourcePrefetchPredictorRequestStats">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Records stats about requests, redirects, and responses observed by the
+    ResourcePrefetchPredictorObserver. These stats are useful as a baseline for
+    other stats.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.ResourceStatus"
+    enum="ResourcePrefetchPredictorResourceStatus">
+  <obsolete>
+    Deprecated 08/2016 with the removal of the recording code.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The distribution of the reasons for which subresources are ignored during
+    prefetching. This helps us prioritze reasons we should further investigate
+    to increase coverage. This is reported as a bit map and every status will be
+    a bitwise or of the underlying reasons.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Assuming a fixed number of URLs could be prefetched max (25 or 50), how many
+    would be available for prefetch (after we apply our heuristics for picking
+    subresources to prefetch for a navigation).
+
+    This stat is recorded when the predictor uses the main frame url as the key
+    for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page and served
+    from the cache restricted to some max predictions (25 or 50).
+
+    This stat is recorded when the predictor uses the main frame url as the key
+    for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page and served
+    from the network restricted to some max predictions (25 or 50).
+
+    This stat is recorded when the predictor uses the main frame url as the key
+    for prediction.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Similar to ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork but as
+    a percent of the total number of resources the page actually fetched from
+    the network. This depcits the major gains that we can get.
+
+    This stat is recorded when the predictor uses the main frame url as the key
+    for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    When we have predictions for a navigation, we measure the accuracy of the
+    predictions against the actual resources downloaded. This histogram gives
+    the distribution of the predictions that were fetched by the page not used
+    by the page, restricted to some max predictions (25 or 50).
+
+    This stat is recorded when the predictor uses the main frame url as the key
+    for prediction.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PrefetchCancelled" units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of prefetches
+    cancelled as a percentage of the total number of resources that the
+    predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PrefetchFailed" units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of prefetches
+    failed as a percentage of the total number of resources that the predictor
+    tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheNotUsed"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of successful
+    prefetches that came from cache while prefetching but were not requested by
+    the page, as a percentage of the total number of resources that the
+    predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromCache"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of successful
+    prefetches that came from cache while prefetching and also came from the
+    cache when the page requested it, as a percentage of the total number of
+    resources that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Url.PrefetchFromCacheUsedFromNetwork"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of successful
+    prefetches that came from cache while prefetching but came from the network
+    when the page requested it, as a percentage of the total number of resources
+    that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkNotUsed"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of successful
+    prefetches that came from network while prefetching but were not requested
+    by the page, as a percentage of the total number of resources that the
+    predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkUsedFromCache"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of successful
+    prefetches that came from network while prefetching but came from the cache
+    when the page requested it, as a percentage of the total number of resources
+    that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.Url.PrefetchFromNetworkUsedFromNetwork"
+    units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on the main frame URL, the percentage of successful
+    prefetches that came from cache while prefetching and also came from the
+    network when the page requested it, as a percentage of the total number of
+    resources that the predictor tried to prefetch.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.Url.PrefetchNotStarted" units="%">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    For prefetching based on host of main frame URL, the percentage of resources
+    that were prefetchable but were not prefetched as a percentage of
+    prefetchable resources.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.UrlTableMainFrameUrlCount">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The count of number of unique main frame urls in the UrlTable, i.e. the
+    number of webpages that the database has prediction data for. This data is
+    useful for determining the recall/precision as a function of the number of
+    webpages that need to be tracked by the database. Measured at startup.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistory">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The count of number of unique main frame urls that are deleted from the URL
+    table at startup because they are no longer in history. Essential to figure
+    out how much data we are loosing out.
+  </summary>
+</histogram>
+
+<histogram
+    name="ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistoryPercent"
+    units="%">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    Same as ResourcePrefetchPredictor.UrlTableMainFrameUrlsDeletedNotInHistory
+    but recording percentage of URLs in the table rather than absolute numbers.
+  </summary>
+</histogram>
+
+<histogram name="ResourcePrefetchPredictor.UrlTableRowCount">
+  <owner>zhenw@chromium.org</owner>
+  <summary>
+    The count of number of rows in the UrlTable. This is effecively the number
+    of (main frame URL, resource URL) pairs in the database. This is measured at
+    startup and used to get an estimate of the data size.
+  </summary>
+</histogram>
+
+<histogram name="ResourceReporter.BrowserProcess.CpuUsage"
+    enum="ResourceReporterCpuUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The cpu usage range reported for the browser process when the chromeos
+    device memory pressure (which is the percentage of total memory used by the
+    system) is critical. This is emitted only when memory pressure changes from
+    a low pressure to a higher pressure.
+  </summary>
+</histogram>
+
+<histogram name="ResourceReporter.BrowserProcess.MemoryUsage"
+    enum="ResourceReporterMemoryUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The system memory usage range reported for the browser process when the
+    chromeos device memory pressure (which is the percentage of total memory
+    used by the system) is critical. This is emitted only when memory pressure
+    changes from a low pressure to a higher pressure.
+  </summary>
+</histogram>
+
+<histogram name="ResourceReporter.GpuProcess.CpuUsage"
+    enum="ResourceReporterCpuUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The cpu usage range reported for the GPU process when the chromeos device
+    memory pressure (which is the percentage of total memory used by the system)
+    is critical. This is emitted only when memory pressure changes from a low
+    pressure to a higher pressure.
+  </summary>
+</histogram>
+
+<histogram name="ResourceReporter.GpuProcess.MemoryUsage"
+    enum="ResourceReporterMemoryUsage">
+  <owner>afakhry@chromium.org</owner>
+  <summary>
+    The system's RAM memory usage range reported for the GPU process when the
+    chromeos device memory pressure (which is the percentage of total memory
+    used by the system) is critical. This is emitted only when memory pressure
+    changes from a low pressure to a higher pressure.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.ClientLoadedTime.Active">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between when the ResourceScheduler is informed of a
+    Client's creation or starts loading and when that Client finishes loading in
+    a Client which has been user-observable the entire time.
+
+    Note: Will not include time for the main resource if PlzNavigate is in use.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.ClientLoadedTime.Background">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between when the ResourceScheduler is informed of a
+    Client's creation or starts loading and when that Client finishes loading in
+    a Client which has been background the entire time.
+
+    Note: Will not include time for the main resource if PlzNavigate is in use.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.ClientLoadedTime.Other">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between when the ResourceScheduler is informed of a
+    Client's creation or starts loading and when that Client finishes loading in
+    a Client which has switched between Active and Background.
+
+    Note: Will not include time for the main resource if PlzNavigate is in use.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between the last time that a Client becomes
+    user-observable and when that Client finishes loading in a Client that was
+    user-observable when the load completed.
+
+    Note: Will not include time for the main resource if PlzNavigate is in use.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.RequestTimeDeferred.Active">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time the ResourceScheduler is throttling a request after
+    WillStartRequest is called for a request in a client that was
+    user-observable at creation and start time.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.RequestTimeDeferred.Background">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time the ResourceScheduler is throttling a request after
+    WillStartRequest is called for a request in a client that was background at
+    creation and start time.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.RequestTimeDeferred.Other">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time the ResourceScheduler is throttling a request after
+    WillStartRequest is called on a request without a Client or a request in a
+    Client which is in a different state since the request was made. Note that
+    this won't capture requests which have switched state an even number of
+    times. Switching from Active to Background back to Active will be recorded
+    in the Active version of this histogram.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.RequestTimeThrottled.Active">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between when the request was created and when the
+    ResourceScheduler stops throttling the request in a client that was
+    user-observable at creation and start time.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.RequestTimeThrottled.Background">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between when the request was created and when the
+    ResourceScheduler stops throttling the request in a client that was
+    background at creation and start time.
+  </summary>
+</histogram>
+
+<histogram name="ResourceScheduler.RequestTimeThrottled.Other">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <owner>aiolos@chromium.org</owner>
+  <summary>
+    The amount of time between when the request was created and when the
+    ResourceScheduler stops throttling a request without a client or a request
+    in a Client which is in a different state since the request was made. Note
+    that this won't capture requests which have switched state an even number of
+    times. Switching from Active to Background back to Active will be recorded
+    in the Active version of this histogram.
+  </summary>
+</histogram>
+
+<histogram name="SadTab.Created" enum="SadTabKind">
+  <obsolete>
+    Replaced with Tabs.SadTab.* in R20.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Track number of times we built a sad tab page for a renderer crash or kill.
+    The user may not have seen the page if it was not the frontmost tab.
+  </summary>
+</histogram>
+
+<histogram name="SadTab.Displayed" enum="SadTabKind">
+  <obsolete>
+    Replaced with Tabs.SadTab.* in R20.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Track number of times the user actually saw a sad tab page for a renderer
+    crash or kill.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.EnabledSettingChanged" enum="BooleanEnabled">
+  <obsolete>
+    Not in the code anymore (10/2015).
+  </obsolete>
+  <owner>feng@chromium.org</owner>
+  <summary>
+    Records the user action that enables/disables safe browsing feature in the
+    Settings page on Android.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateResult"
+    enum="SBFileTypeUpdateResult">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The result of reading/parsing/accepting a new proto for the FileTypePolices
+    repo of file extensions and their meta data.
+
+      This is for the file types loaded from the component-update system. This
+    includes both those loaded from disk shortly after startup, and those
+    received over the network when the component version changes
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateTypeCount"
+    units="number of file types">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Number of file types (aka file extensions) present in the FileTypePolicies
+    proto loaded.
+
+      This is for the file types loaded from the component-update system. This
+    includes both those loaded from disk shortly after startup, and those
+    received over the network when the component version changes
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FileTypeUpdate.DynamicUpdateVersion"
+    units="FileTypePolicies Version">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Integer version number citing which version of the proto data chrome just
+    loaded.  Latest version is in download_file_types.asciipb.
+
+      This is for the file types loaded from the component-update system. This
+    includes both those loaded from disk shortly after startup, and those
+    received over the network when the component version changes
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleResult"
+    enum="SBFileTypeUpdateResult">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The result of reading/parsing/accepting a new proto for the FileTypePolices
+    repo of file extensions and their meta data.
+
+      This is for the file types loaded from the resource bundle packaged with
+    Chrome, which is always loaded at startup.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleTypeCount"
+    units="number of file types">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Number of file types (aka file extensions) present in the FileTypePolicies
+    proto loaded.
+
+      This is for the file types loaded from the resource bundle packaged with
+    Chrome, which is always loaded at startup.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.FileTypeUpdate.ResourceBundleVersion"
+    units="FileTypePolicies Version">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Integer version number citing which version of the proto data chrome just
+    loaded.  Latest version is in download_file_types.asciipb.
+
+      This is for the file types loaded from the resource bundle packaged with
+    Chrome, which is always loaded at startup.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.GetV4HashHttpResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.Network.Result.
+  </obsolete>
+  <owner>kcarattini@google.com</owner>
+  <summary>
+    Response or error codes from the SafeBrowsing Pver4 service. Logged after a
+    GetHash or request finishes to capture the response code or error code for
+    that call.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.GetV4HashNetwork" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.Network.Time.
+  </obsolete>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    The time that it took to receive a response from the Safe Browsing servers
+    for a V4 GetHash request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.GetV4HashResult"
+    enum="SafeBrowsingV4OperationResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.Result.
+  </obsolete>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Track return status from V4 GetHash attempts. The buckets of this histogram
+    overlap, so the counts cannot be used as percentages.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.ModuleBaseRelocation" units="BaseRelocationType">
+  <owner>csharp@chromium.org</owner>
+  <owner>krstnmnlsn@chromium.org</owner>
+  <summary>
+    A windows only historgram. Records when an unknown base relocation type is
+    encountered while reading the reloc table of a loaded module.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.ParseV4HashResult"
+    enum="SafeBrowsingParseV4HashResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.Parse.Result.
+  </obsolete>
+  <owner>kcarattini@chromium.org</owner>
+  <summary>
+    Track the parsing results of a status 200 GetV4Hash request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.ParseV4UpdateResult"
+    enum="SafeBrowsingParseV4UpdateResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4Update.Parse.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the parsing results of a status 200 GetV4Update request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.Pref.Extended" enum="BooleanEnabled">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Whether the Safe Browsing extended reporting service is currently enabled.
+    Recorded for all non-Incognito profiles on profile startup.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.Pref.General" enum="BooleanEnabled">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Whether the Safe Browsing service is currently enabled. Recorded for all
+    non-Incognito profiles on profile startup.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.Pref.Scout" enum="BooleanEnabled">
+  <owner>lpz@chromium.org</owner>
+  <summary>
+    Tracks the Extended Reporting preference transition. Suffixes track which
+    opt-in text users are viewing and the values of each Extended Reporting
+    preference. Recorded for all non-Incognito profiles on profile startup.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.UnverifiedDownloads.Allowed"
+    enum="SBClientDownloadExtensions">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    File types that were allowed to be downloaded without verifying their
+    content nor their source URLs with Safe Browsing.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.UnverifiedDownloads.AllowedByWhitelist"
+    enum="SBClientDownloadExtensions">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    File types that were allowed to be downloaded without verifying their
+    content nor their source URLs with Safe Browsing due to the requestor URL
+    being on the Safe Browsing whitelist. Each sample recorded on this histogram
+    is also recorded in SafeBrowsing.UnverifiedDownloads.Allowed.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.UnverifiedDownloads.AllowedDueToDisabledService"
+    enum="SBClientDownloadExtensions">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    File types that were allowed to be downloaded without verifying their
+    content nor their source URLs with Safe Browsing due to the SafeBrowsing
+    service being disabled. Each sample recorded on this histogram is also
+    recorded in SafeBrowsing.UnverifiedDownloads.Allowed.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.UnverifiedDownloads.AlternateExtensionCount">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Count of alternate extensions that were supplied when attempting to download
+    a file without verifying their content nor their source URLs with Safe
+    Browsing.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.UnverifiedDownloads.Blocked"
+    enum="SBClientDownloadExtensions">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    File types that were blocked from downloaded without verifying their content
+    nor their source URLs with Safe Browsing.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4AddUnlumpedHashes.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to copy the SafeBrowsing list update as a string,
+    into a map which contains the hash prefixes that are looked up when a client
+    queries for the reputation of a resource (URL, full hash, etc.).
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4AddUnlumpedHashesTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4AddUnlumpedHashes.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to copy the SafeBrowsing list update as a string,
+    into a map which contains the hash prefixes that are looked up when a client
+    queries for the reputation of a resource (URL, full hash, etc.).
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ApplyUpdateResult"
+    enum="SafeBrowsingV4ApplyUpdateResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4*.ApplyUpdate.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of applying the update fetched from the PVer4 service for a
+    particular store.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ApplyUpdateResultWhenReadingFromDisk"
+    enum="SafeBrowsingV4ApplyUpdateResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of applying an update read from disk after parsing it
+    successfully as a protobuf.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4Database.Size" units="KB">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The size of the SafeBrowsing database or file on disk in kilobytes, after
+    reading it from disk on startup and after a database update has occurred.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4DatabaseOpen.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The time it takes to parse and load the SafeBrowsing database from disk, in
+    milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4DecodeAdditionsResult"
+    enum="SafeBrowsingV4DecodeResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4*.DecodeAdditions.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of decoding the Rice-encoded list of additions of 4-byte
+    hash prefixes. This is logged once per store, per update containing
+    Rice-encoded additions.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4DecodeAdditionsTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4*.DecodeAdditions.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to decode the Rice-encoded additions to the
+    blacklist into raw format.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4DecodeRemovalsResult"
+    enum="SafeBrowsingV4DecodeResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of decoding the Rice-encoded list of indexes of hash
+    prefixes to remove since the last update. This is logged once per store, per
+    update containing Rice-encoded removals.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4DecodeRemovalsTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to decode the Rice-encoded removals from the
+    blacklist into raw format.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4FullHashCacheResult"
+    enum="SafeBrowsingV4FullHashCacheResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.CacheHit.Result.
+  </obsolete>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>Track cache hits for V4 full hashes.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHash.CacheHit.Result"
+    enum="SafeBrowsingV4FullHashCacheResult">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>Track cache hits for V4 full hashes.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHash.Check.Result"
+    enum="SafeBrowsingV4GetHashCheckResult">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>Track get hash response hits for V4 full hash requests.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHash.Network.Result"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>kcarattini@google.com</owner>
+  <owner>vakh@google.com</owner>
+  <summary>
+    Response or error codes from the SafeBrowsing Pver4 service. Logged after a
+    GetHash or request finishes to capture the response code or error code for
+    that call.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHash.Network.Time" units="ms">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The time that it took to receive a response from the Google SafeBrowsing
+    servers for a full hash request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHash.Parse.Result"
+    enum="SafeBrowsingParseV4HashResult">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the parsing results of a status 200 GetV4Hash request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHash.Result"
+    enum="SafeBrowsingV4OperationResult">
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track return status from V4 GetHash attempts. The buckets of this histogram
+    overlap, so the counts cannot be used as percentages.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHashCheckResult"
+    enum="SafeBrowsingV4GetHashCheckResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.Check.Result.
+  </obsolete>
+  <owner>kcarattini@chromium.org</owner>
+  <owner>vakh@chromium.org</owner>
+  <summary>Track get hash response hits for V4 full hash requests.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetHashNetwork.Time" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4GetHash.Network.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The time that it took to receive a response from the Google SafeBrowsing
+    servers for a full hash request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4GetPrefixMatches.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The time that it took to check a URL against our in-memory database. It is
+    dominated by the time to perform checks for CheckBrowseUrl.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4MergeUpdateTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4*.MergeUpdate.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to merge the existing state of the list with the
+    update. The update may have been received from the server, or it may have
+    just been read from disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"
+    enum="SafeBrowsingV4ApplyUpdateResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of applying a full update for a store received from PVer4
+    SafeBrowsing service.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to process a SafeBrowsing list full update. It
+    includes V4AddUnlumpedHashes.Time for each prefix-sized list, and
+    V4ProcessFullUpdate.MergeUpdate.Time. Additionally, if the update is
+    Rice-encoded, it includes V4ProcessFullUpdate.DecodeAdditions.Time for each
+    prefix-sized list that's Rice-encoded.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Result"
+    enum="SafeBrowsingV4DecodeResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of decoding the Rice-encoded list of additions of 4-byte
+    hash prefixes. This is logged once per store, per update containing
+    Rice-encoded additions. This histogram is specific to processing full
+    updates received from the server.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Time"
+    units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to decode the Rice-encoded additions to the
+    blacklist into raw format when applying a full update to a store.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to merge the existing state of the list with a
+    full update received from the server.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessFullUpdateTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to process a SafeBrowsing list full update. It
+    includes V4AddUnlumpedHashesTime for each prefix-sized list, and
+    V4MergeUpdateTime. Additionally, if the update is Rice-encoded, it includes
+    V4DecodeAdditionsTime for each prefix-sized list that's Rice-encoded.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Result"
+    enum="SafeBrowsingV4ApplyUpdateResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of applying a partial update for a store received from
+    PVer4 SafeBrowsing service.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time"
+    units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to process a SafeBrowsing list partial update. It
+    includes V4AddUnlumpedHashes.Time for each prefix-sized list, and
+    SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time. Additionally, if the
+    update is Rice-encoded, it includes
+    V4ProcessPartialUpdate.DecodeRemovals.Time, and
+    V4ProcessPartialUpdate.DecodeAdditions.Time for each prefix-sized list
+    that's Rice-encoded.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Result"
+    enum="SafeBrowsingV4DecodeResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of decoding the Rice-encoded list of additions of 4-byte
+    hash prefixes. This is logged once per store, per update containing
+    Rice-encoded additions. This histogram is specific to processing partial
+    updates received from the server.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Time"
+    units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to decode the Rice-encoded additions to the
+    blacklist into raw format when applying a partial update to a store.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result"
+    enum="SafeBrowsingV4DecodeResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of decoding the Rice-encoded list of indexes of hash
+    prefixes to remove since the last update. This is logged once per store, per
+    update containing Rice-encoded removals.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time"
+    units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to decode the Rice-encoded removals from the
+    blacklist into raw format when applying a partial update to a store.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time"
+    units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to merge the existing state of the list with a
+    partial update received from the server.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ProcessPartialUpdateTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to process a SafeBrowsing list partial update. It
+    includes V4AddUnlumpedHashesTime for each prefix-sized list, and
+    V4MergeUpdateTime. Additionally, if the update is Rice-encoded, it includes
+    V4DecodeRemovalsTime, and V4DecodeAdditionsTime for each prefix-sized list
+    that's Rice-encoded.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result"
+    enum="SafeBrowsingV4ApplyUpdateResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of applying an ListUpdateResponse read from disk after
+    parsing it successfully as a protobuf.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to read, parse, and process a SafeBrowsing list
+    stored on disk. This happens at Chromium start-up. It includes
+    V4AddUnlumpedHashes.Time for each prefix-sized list, and
+    SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time. Additionally, if the file is
+    Rice-encoded, it includes V4ReadFromDisk.DecodeAdditions.Time for each
+    prefix-sized list that's Rice-encoded.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Result"
+    enum="SafeBrowsingV4DecodeResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the result of decoding the Rice-encoded list of additions of 4-byte
+    hash prefixes. This is logged once per store, per Chrome launch. It is
+    specific to processing V4StoreFileFormat proto read from disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to decode the Rice-encoded additions to the
+    blacklist into raw format when reading a store file from disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time" units="ms">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to perform in-memory copy of the map of raw hash
+    prefixes read from disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4ReadFromDiskTime" units="ms">
+  <obsolete>
+    Replaced by SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Records the time it takes to read, parse, and process a SafeBrowsing list
+    stored on disk. This happens at Chromium start-up. It includes
+    V4AddUnlumpedHashesTime for each prefix-sized list, and V4MergeUpdateTime.
+    Additionally, if the file is Rice-encoded, it includes V4DecodeAdditionsTime
+    for each prefix-sized list that's Rice-encoded.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4StoreRead.Result"
+    enum="SafeBrowsingV4StoreReadResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the parsing results of reading the SafeBrowsing V4 store file from
+    disk. Recorded every time a store is read from disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4StoreReadResult"
+    enum="SafeBrowsingV4StoreReadResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4StoreRead.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the parsing results of reading the SafeBrowsing V4 store file from
+    disk. Recorded every time a store is read from disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4StoreVersionRead" units="version number">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Version of V4Store read from a store file. This would be useful in tracking
+    the usage and rollout of new V4Store versions.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4StoreWrite.Result"
+    enum="SafeBrowsingV4StoreWriteResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the results of writing the SafeBrowsing V4 store file to disk.
+    Recorded every time a store is written to disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4StoreWriteResult"
+    enum="SafeBrowsingV4StoreWriteResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4StoreWrite.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the results of writing the SafeBrowsing V4 store file to disk.
+    Recorded every time a store is written to disk.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4Update.Network.Result"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Response or error codes when fetching updates from the SafeBrowsing PVer4
+    service.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4Update.Parse.Result"
+    enum="SafeBrowsingParseV4UpdateResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track the parsing results of a status 200 GetV4Update request.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4Update.ResponseSizeKB" units="KB">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The size of the response sent by the SafeBrowsing PVer4 service, in KB.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4Update.Result"
+    enum="SafeBrowsingV4OperationResult">
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track return status from V4 update attempts. The buckets of this histogram
+    overlap, so the counts cannot be used as percentages.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4Update.TimedOut" enum="BooleanTimedOut">
+  <owner>vakh@chromium.org</owner>
+  <summary>True if a PVer4 update request timed out.</summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4UpdateHttpResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <obsolete>
+    Replaced by SafeBrowsing.V4Update.Network.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Response or error codes when fetching updates from the SafeBrowsing PVer4
+    service.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4UpdateResponseSizeKB" units="KB">
+  <obsolete>
+    Replaced by SafeBrowsing.V4Update.ResponseSizeKB.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    The size of the response sent by the SafeBrowsing PVer4 service, in KB.
+  </summary>
+</histogram>
+
+<histogram name="SafeBrowsing.V4UpdateResult"
+    enum="SafeBrowsingV4OperationResult">
+  <obsolete>
+    Replaced by SafeBrowsing.V4Update.Result.
+  </obsolete>
+  <owner>vakh@chromium.org</owner>
+  <summary>
+    Track return status from V4 update attempts. The buckets of this histogram
+    overlap, so the counts cannot be used as percentages.
+  </summary>
+</histogram>
+
+<histogram name="SB.BloomFilter" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The first stage check that measures the time that Chrome took to check if a
+    URL is present in our in-memory bloom filter.
+  </summary>
+</histogram>
+
+<histogram name="SB.BuildBloom">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD.</summary>
+</histogram>
+
+<histogram name="SB.Database" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The second stage check that measures the time that Chrome took to check if a
+    URL is present in our SQLite database.
+  </summary>
+</histogram>
+
+<histogram name="SB.DBCheck" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The second stage check that mesures the time that Chrome took to check if a
+    URL is present in our SQLite database. This time includes the filter check
+    time.
+  </summary>
+</histogram>
+
+<histogram name="SB.Delay" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This measures the time that SafeBrowsing actually delayed the browsing
+    experience. It records the difference between the time when Chrome would
+    have started reading the response for a URL and when the SafeBrowsing system
+    completed its check of that URL.
+  </summary>
+</histogram>
+
+<histogram name="SB.FilterCheck" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The first stage check that measures the time that Chrome took to check if a
+    URL is present in our in-memory hash table.
+  </summary>
+</histogram>
+
+<histogram name="SB.Network" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The third and final stage check that mesures the time that Chrome took to
+    get a response from the Google SafeBrowsing servers for a particular URL.
+  </summary>
+</histogram>
+
+<histogram name="SB.NetworkCheck" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The third and final stage check that mesures the time that Chrome took to
+    get a response from the Google SafeBrowsing servers for a particular URL.
+    This time includes the filter and database check time.
+  </summary>
+</histogram>
+
+<histogram name="SB.PauseSafe" units="ms">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    This measures the time that SafeBrowsing actually delayed the browsing
+    experience. It records the difference between the time when Chrome would
+    have started reading the response for a URL and when the SafeBrowsing system
+    completed its check of that URL.
+  </summary>
+</histogram>
+
+<histogram name="SB.Update">
+  <obsolete>
+    Has not been generated for years (7/8/14).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>TBD.</summary>
+</histogram>
+
+<histogram name="SB2.AddPrefixes">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The number of add prefixes stored in the database after the last update.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BloomFailure" enum="SB2BloomFailure">
+  <obsolete>
+    Bloom filter support deleted in October 2012.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Track failures when in processing the safe-browsing database bloom filter.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BloomFilterFalsePositives"
+    enum="SB2BloomFilterFalsePositives">
+  <obsolete>
+    This became misleading around M-22 (September 2012), deleted in M-32
+    (November 2013).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    All prefix misses (server returned no full hashes) and prefix misses due to
+    false positives in the bloom filter.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BloomFilterLoad" units="ms">
+  <obsolete>
+    Bloom filter support deleted in October 2012.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Time to load the BloomFilter file.</summary>
+</histogram>
+
+<histogram name="SB2.BrowseDatabaseKilobytes" units="KB">
+  <obsolete>
+    Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Browse.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the browsing SafeBrowsing database file on disk in kilobytes,
+    after an update has occurred.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildFilter" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time that it took to regenerate the filter after we have received all
+    the update chunks.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildReadBytes" units="bytes">
+  <obsolete>
+    Deprecated because it was exceeding the range.  Replaced by
+    SB2.BuildReadKilobytes.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of bytes read by the browser process during the bloom filter
+    generation phase.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildReadKilobytes" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The number of kilobytes read by the browser process during the filter
+    generation phase.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildReadOperations">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The number of read operations issued by the browser process during the
+    filter generation phase.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildWriteBytes" units="bytes">
+  <obsolete>
+    Deprecated because it was exceeding the range.  Replaced by
+    SB2.BuildWriteKilobytes.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of bytes written by the browser process during the bloom filter
+    generation phase.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildWriteKilobytes" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The number of kilobytes written by the browser process during the filter
+    generation phase.
+  </summary>
+</histogram>
+
+<histogram name="SB2.BuildWriteOperations">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The number of write operations issued by the browser process during the
+    filter generation phase.
+  </summary>
+</histogram>
+
+<histogram name="SB2.ChunkInsert" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time that it takes to write one redirect URL (which can contain multiple
+    chunks) to the database.
+  </summary>
+</histogram>
+
+<histogram name="SB2.ChunkRequest" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The network time between the request and response for a chunk.
+  </summary>
+</histogram>
+
+<histogram name="SB2.ChunkSize" units="bytes">
+  <owner>shess@chromium.org</owner>
+  <summary>The size of one chunk URL.</summary>
+</histogram>
+
+<histogram name="SB2.DatabaseBytes" units="bytes">
+  <obsolete>
+    Deprecated because it was exceeding the range.  Replaced by
+    SB2.DatabaseKilobytes.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The size of the SafeBrowsing database file on disk.</summary>
+</histogram>
+
+<histogram name="SB2.DatabaseFailure" enum="SB2DatabaseFailure">
+  <owner>shess@chromium.org</owner>
+  <summary>Track failures when updating the safe-browsing database.</summary>
+</histogram>
+
+<histogram name="SB2.DatabaseKilobytes" units="KB">
+  <obsolete>
+    Replaced by SB2.BrowseDatabaseKilobytes.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the SafeBrowsing database file on disk in kilobytes.
+  </summary>
+</histogram>
+
+<histogram name="SB2.DatabaseOpen" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time it takes to initialize the SafeBrowsing storage backend, in
+    milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="SB2.DatabaseSizeKilobytes" units="KB">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The size of one of the SafeBrowsing database file on disk in kilobytes,
+    after a database update has occurred (once a few minutes after startup, and
+    every thirty minutes or so thereafter).
+  </summary>
+</histogram>
+
+<histogram name="SB2.DatabaseUpdateKilobytes" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the update file before merging with the database file, in
+    kilobytes.
+  </summary>
+</histogram>
+
+<histogram name="SB2.Delay" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time that SafeBrowsing actually delayed the browsing experience. It
+    records the difference between the time when Chrome would have started
+    reading the response for a URL and when the SafeBrowsing system completed
+    its check of that URL.
+  </summary>
+</histogram>
+
+<histogram name="SB2.DownloadBinhashAddsDeleted">
+  <obsolete>
+    Deleted in M-34 (February 2014).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Obsolete download BINHASH add chunks deleted.</summary>
+</histogram>
+
+<histogram name="SB2.DownloadBinhashSubsDeleted">
+  <obsolete>
+    Deleted in M-34 (February 2014).
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Obsolete download BINHASH sub chunks deleted.</summary>
+</histogram>
+
+<histogram name="SB2.DownloadChecks" enum="SB2DownloadChecks">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Records results of SafeBrowsing download check, including both url check and
+    downloaded file hash check.
+  </summary>
+</histogram>
+
+<histogram name="SB2.DownloadDatabaseKilobytes" units="KB">
+  <obsolete>
+    Deprecated 12/2014. Moved to SB2.DatabaseSizeKilobytes.Download.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the downloads SafeBrowsing database file on disk in kilobytes,
+    after an update has occurred.
+  </summary>
+</histogram>
+
+<histogram name="SB2.DownloadDuration" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>The time it takes for a download to finish.</summary>
+</histogram>
+
+<histogram name="SB2.DownloadHashCheckDuration" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time it takes for SafeBrowsing to check hash of a download file.
+  </summary>
+</histogram>
+
+<histogram name="SB2.DownloadUrlCheckDuration" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>The time it takes for SafeBrowsing to check a download url.</summary>
+</histogram>
+
+<histogram name="SB2.DownloadUrlChecks" enum="SB2DownloadChecks">
+  <obsolete>
+    Deprecated 3/11/11, and replaced by SB2.DownloadChecks.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Records results of SafeBrowsing download url check.</summary>
+</histogram>
+
+<histogram name="SB2.ExtendedReportingIsEnabled" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated 03/2015. Replaced by
+    SecurityInterstitialInteraction::EXTENDED_REPORTING_IS_ENABLED.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Whether the user has Safe Browsing extended reporting enabled at the time a
+    Safe Browsing warning was dismissed.  This tracks the fraction of all SB
+    interstitials that had reporting enabled.
+  </summary>
+</histogram>
+
+<histogram name="SB2.FailedUpdate">
+  <obsolete>
+    Deprecated, replaced by SB2.DatabaseFailure BROWSE_DB_UPDATE_FINISH.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of the number of times an update failed when being committed to
+    the database.
+  </summary>
+</histogram>
+
+<histogram name="SB2.FilterCheck" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time that it took to check a URL against our in-memory filter.
+  </summary>
+</histogram>
+
+<histogram name="SB2.FilterKilobytes" units="KB">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The size of the current bloom filter in kilobytes.</summary>
+</histogram>
+
+<histogram name="SB2.FilterLoad" enum="SB2FilterLoad">
+  <owner>shess@chromium.org</owner>
+  <summary>Which filter file the database loaded from disk.</summary>
+</histogram>
+
+<histogram name="SB2.FilterMissing">
+  <obsolete>
+    Deprecated, replaced by SB2.DatabaseFailure FILTER_MISSING.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of the number of times we attempted to load the bloom filter file
+    but it was missing.
+  </summary>
+</histogram>
+
+<histogram name="SB2.FilterReadFail">
+  <obsolete>
+    Deprecated, replaced by SB2.DatabaseFailure FILTER_READ.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of the number of times we attempted to load the bloom filter file
+    but failed while reading the file on disk.
+  </summary>
+</histogram>
+
+<histogram name="SB2.FilterSize" units="bytes">
+  <obsolete>
+    Deprecated because it was exceeding the range.  Replaced by
+    SB2.FilterKilobytes.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The size of the current bloom filter.</summary>
+</histogram>
+
+<histogram name="SB2.FilterWriteFail">
+  <obsolete>
+    Deprecated, replaced by SB2.DatabaseFailure FILTER_WRITE.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of the number of times we attempted to save the bloom filter file
+    but failed while writing the file to disk.
+  </summary>
+</histogram>
+
+<histogram name="SB2.FormatEvent" enum="SB2FormatEvent">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Collection of boolean events for SafeBrowsingFileStore instances.  Includes
+    corruptions detected, old versions detected, and various failures detected.
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetChunkResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>vakh@google.com</owner>
+  <summary>
+    Response or error codes from the SafeBrowsing service. Logged after a
+    GetChunk request finishes to capture the response code or error code for
+    that call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetHash200">
+  <obsolete>
+    Deprecated in favor of SB2.GetHashResult STATUS_200.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of GetHash requests that returned data (valid requests).
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetHash204">
+  <obsolete>
+    Deprecated in favor of SB2.GetHashResult STATUS_204.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of GetHash requests that returned empty data (false positives).
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetHashResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>vakh@google.com</owner>
+  <summary>
+    Response or error codes from the SafeBrowsing service. Logged after a
+    GetHash request finishes to capture the response code or error code for that
+    call. Split out from SB2.GetHashErrorResponseOrErrorCode in M49.
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetHashResult" enum="SB2GetHashResult">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Track return status from GetHash attempts (STATUS_200, STATUS_204,
+    NETWORK_ERROR, HTTP_ERROR, BACKOFF_ERROR), whether parsing a 200 result
+    failed (PARSE_ERROR), and dispensation of returned values (EMPTY, HIT,
+    MISS).  EMPTY means the response had no full hashes, and should contain all
+    of the 204 responses plus all *_ERROR cases.  HIT means that one of the full
+    hashes matched. MISS means that none of the hashes matched (there was a
+    prefix collision). (PARSE_ERROR, NETWORK_ERROR, HTTP_ERROR, and
+    BACKOFF_ERROR were added in M36.)
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetHashResultDownload" enum="SB2GetHashResult">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Track return status from GetHash attempts (STATUS_200, STATUS_204,
+    NETWORK_ERROR, HTTP_ERROR, BACKOFF_ERROR), whether parsing a 200 result
+    failed (PARSE_ERROR), and dispensation of returned values (EMPTY, HIT,
+    MISS).  EMPTY means the response had no full hashes, and should contain all
+    of the 204 responses plus all *_ERROR cases.  HIT means that one of the full
+    hashes matched. MISS means that none of the hashes matched (there was a
+    prefix collision). (PARSE_ERROR, NETWORK_ERROR, HTTP_ERROR, and
+    BACKOFF_ERROR were added in M36.)
+  </summary>
+</histogram>
+
+<histogram name="SB2.GetHashServerMiss">
+  <obsolete>
+    Deprecated in favor of SB2.GetHashResult FULL_HASH_* and
+    SB2.BloomFilterFalsePositives.  It is unclear if this histogram ever
+    reported useful data.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of GetHash requests returning full hashes that didn't match the
+    URL that initiated the request.
+  </summary>
+</histogram>
+
+<histogram name="SB2.HandleCorrupt">
+  <obsolete>
+    Deprecated, replaced by SB2.DatabaseFailure CORRUPT.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The count of the number of times a database was found corrupt and reset.
+  </summary>
+</histogram>
+
+<histogram name="SB2.InterstitialAction" enum="SB2InterstitialAction">
+  <obsolete>
+    Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Track number of times Safe Browsing interstitials have been shown, and how
+    many times they have been clicked through or not.
+  </summary>
+</histogram>
+
+<histogram name="SB2.InterstitialActionDetails"
+    enum="SB2InterstitialActionDetails">
+  <obsolete>
+    Deprecated, replaced by: interstitial.malware.* and interstitial.phishing.*.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Tracks the click-through rate for specific cases of the interstitial.
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimeClosed" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user navigating away by for example, closing the tab, clicking the browser
+    back button or typing another URL in the address bar.
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimeDiagnostic" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user clicking on diagnostic page link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimeExpandedSeeMore" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user expanding the &quot;see more info&quot; section of the page.  (Only
+    applies to field trial version 2 of the interstitial.)
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimeLearnMore" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user clicking on the learn more about malware link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimePrivacyPolicy" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user clicking on the privacy policy link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimeProceed" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user clicking on the proceed link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.MalwareInterstitialTimeTakeMeBack" units="ms">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing malware interstitial and the
+    user clicking on the big green back button.
+  </summary>
+</histogram>
+
+<histogram name="SB2.Network" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time that it took to receive a response from the Google SafeBrowsing
+    servers for a GetHash request.
+  </summary>
+</histogram>
+
+<histogram name="SB2.OldDatabaseKilobytes" units="KB">
+  <obsolete>
+    Deprecated 7/2014. No longer generated.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>Size of v1 database deleted from client profile.</summary>
+</histogram>
+
+<histogram name="SB2.OutShardShifts">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Indicates how sharded safe-browsing on-disk stores are.  Values like 0 to 4
+    are reasonable.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PhishingInterstitialTimeClosed" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing phishing interstitial and the
+    user navigating away by for example, closing the tab, clicking the browser
+    back button or typing another URL in the address bar.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PhishingInterstitialTimeExpandedSeeMore" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing phishing interstitial and the
+    user expanding the &quot;see more info&quot; section of the page.  (Only
+    applies to field trial version 2 of the interstitial.)
+  </summary>
+</histogram>
+
+<histogram name="SB2.PhishingInterstitialTimeLearnMore" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing phishing interstitial and the
+    user clicking on the learn more link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PhishingInterstitialTimeProceed" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing phishing interstitial and the
+    user clicking on the proceed link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PhishingInterstitialTimeReportError" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing phishing interstitial and the
+    user clicking on the report error link.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PhishingInterstitialTimeTakeMeBack" units="ms">
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The time between when we show the SafeBrowsing phishing interstitial and the
+    user clicking on the big green back button.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetBitsPerPrefix" units="bits">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the PrefixSet storage in bits, divided by the number of prefixes
+    represented.  Should almost always be 16.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetEvent" enum="SB2PrefixSetEvent">
+  <obsolete>
+    Deprecated 9/2012. No longer generated, BloomFilter being removed.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Records how well the PrefixSet implementation matches the BloomFilter
+    implementation.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetKilobytes" units="KB">
+  <obsolete>
+    Deprecated 01/2014. Replaced by suffixed SB2.PrefixSetSizeKilobytes.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>The size of one of the PrefixSet files in kilobytes.</summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetLoad" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>Time to load one of the PrefixSet files.</summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetRestoredExcess">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For debugging PrefixSet.  How many extra results GetPrefixes returns.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetRestoredShortfall">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For debugging PrefixSet.  How many fewer results GetPrefixes returns.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetSizeKilobytes" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of one of the PrefixSet files in kilobytes. Logged after a database
+    update has occurred and the PrefixSet has been flushed to disk (once a few
+    minutes after startup, and every thirty minutes or so thereafter).
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetUnsortedDelta">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For debugging PrefixSet.  How far unsorted deltas are from expected value.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetUnsortedDifference">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For debugging PrefixSet.  Distance of unsorted elements from expected
+    location.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetUnsortedPercent" units="%">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For debugging PrefixSet.  How far into the results unsorted elements were
+    found.  Interesting values would be 0%, 50%, or 100%.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetUnsortedSize">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    For debugging PrefixSet.  Size of unsorted sets.  To see if there is a
+    problem with a particular size of dataset.
+  </summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetVersionRead">
+  <owner>shess@chromium.org</owner>
+  <summary>Version read from one of the PrefixSet files.</summary>
+</histogram>
+
+<histogram name="SB2.PrefixSetWrite" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>Time to store one of the PrefixSet files.</summary>
+</histogram>
+
+<histogram name="SB2.RemoteCall.CanCheckUrl" enum="BooleanCanCheckUrl">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Count of how many URLs were actually checked vs skipped via
+    RemoteSafeBrowsingDatabaseManager because the scheme is not supported by
+    Safe Browsing. Incremented each time a resource load is initiated.
+  </summary>
+</histogram>
+
+<histogram name="SB2.RemoteCall.ChecksPending" units="calls">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Number of outstanding calls for URLs getting classified through
+    RemoteSafeBrowsingDatabaseManager.  The size of the queue is logged before
+    initiating each request.
+  </summary>
+</histogram>
+
+<histogram name="SB2.RemoteCall.Elapsed" units="ms">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Latency of URL-classification API calls from Chrome via
+    RemoteSafeBrowsingDatabaseManager, logged per-request. This includes the
+    time to go through JNI, check the URL, and return the result and includes
+    several thread hops betwetween IO and UI threads. The resource-load will not
+    necessarily be delayed this much (see SB2.Delay for that).
+  </summary>
+</histogram>
+
+<histogram name="SB2.RemoteCall.Result" enum="SB2RemoteCallResult">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Result of URL-classification API calls from Chrome via
+    RemoteSafeBrowsingApiHandler.  Logged after each URL is judged
+    safe/not-safe, or hits a deadline.
+  </summary>
+</histogram>
+
+<histogram name="SB2.RemoteCall.ThreatSubType.PotentiallyHarmfulApp"
+    enum="SB2RemoteCallThreatSubType">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The threat sub-type annotated  for URLs classified as PHA via remote calls
+    through RemoteSafeBrowsingApiHandler. &quot;PHA&quot; classifications
+    generate &quot;malware&quot; interstitials.
+  </summary>
+</histogram>
+
+<histogram name="SB2.RemoteCall.ThreatSubType.SocialEngineering"
+    enum="SB2RemoteCallThreatSubType">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The threat sub-type annotated returned for URLs classified as social
+    engineering via remote calls through RemoteSafeBrowsingApiHandler.
+    &quot;Social engineering&quot; classifications generate &quot;phishing&quot;
+    interstitials.
+  </summary>
+</histogram>
+
+<histogram name="SB2.ReportingIsEnabled" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated 06/2014.  Replaced by SB2.ExtendedReportingIsEnabled.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether the user has Safe Browsing extended reporting enabled at the time a
+    Safe Browsing warning was dismissed.  This tracks the fraction of all SB
+    interstitials that had reporting enabled.
+  </summary>
+</histogram>
+
+<histogram name="SB2.ResourceTypes" enum="ContentResourceType">
+  <obsolete>
+    Superseded by SB2.ResourceTypes2 in December 2015.
+  </obsolete>
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Resource types of resources that were inspected by Safe Browsing in the
+    SafeBrowsingResourceThrottle.
+  </summary>
+</histogram>
+
+<histogram name="SB2.ResourceTypes2" enum="ContentResourceType2">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Resource types of resources that were inspected by Safe Browsing in the
+    SafeBrowsingResourceThrottle.
+  </summary>
+</histogram>
+
+<histogram name="SB2.SetExtendedReportingEnabled" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated 03/2015. Replaced by
+    SecurityInterstitialInteraction::SET_EXTENDED_REPORTING_ENABLED.
+  </obsolete>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Tracks changes to the Safe Browsing extended reporting opt-in which is shown
+    in the Safe Browsing interstitial.
+  </summary>
+</histogram>
+
+<histogram name="SB2.SetReportingEnabled" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated 06/2014.  Replaced by SB2.SetExtendedReportingEnabled.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Tracks changes to the Safe Browsing extended reporting opt-in which is shown
+    in the Safe Browsing interstitial.
+  </summary>
+</histogram>
+
+<histogram name="SB2.SideEffectFreePrefixSetWrite" units="ms">
+  <obsolete>
+    Deprecated 12/2014. Merged into SB2.PrefixSetWrite.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Time to store the Side Effect Free Whitelist PrefixSet file. Note: this
+    histogram was intended to be stored as
+    SB2.SideEffectFreeWhitelistPrefixSetWrite but was actually reported as
+    SB2.SideEffectFreePrefixSetWrite from its inception to its deprecation...
+  </summary>
+</histogram>
+
+<histogram name="SB2.SideEffectFreeWhitelistDatabaseKilobytes" units="KB">
+  <obsolete>
+    Deprecated 12/2014. Moved to
+    SB2.DatabaseSizeKilobytes.SideEffectFreeWhitelist.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the Side Effect Free Whitelist SaafeBrowsing database file on
+    disk in kilobytes, after an update has occurred.
+  </summary>
+</histogram>
+
+<histogram name="SB2.SideEffectFreeWhitelistPrefixSetKilobytes" units="KB">
+  <obsolete>
+    Deprecated 12/2014. Moved to
+    SB2.PrefixSetSizeKilobytes.SideEffectFreeWhitelist.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The size of the Side Effect Free Whitelist PrefixSet file in kilobytes,
+    after an udpate has occurred.
+  </summary>
+</histogram>
+
+<histogram name="SB2.SideEffectFreeWhitelistPrefixSetLoad" units="ms">
+  <obsolete>
+    Deprecated 12/2014. Merged into SB2.PrefixSetLoad.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>Time to load the Side Effect Free Whitelist PrefixSet file.</summary>
+</histogram>
+
+<histogram name="SB2.SideEffectFreeWhitelistStatus"
+    enum="SB2SideEffectFreeWhitelistStatus">
+  <obsolete>
+    Deprecated 4/2015.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>The instantiation status of the SideEffectFreeWhitelist.</summary>
+</histogram>
+
+<histogram name="SB2.StoreVersionRead">
+  <owner>shess@chromium.org</owner>
+  <summary>Version read from the store file.</summary>
+</histogram>
+
+<histogram name="SB2.SubPrefixes">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The number of sub prefixes stored in the database after the last update.
+  </summary>
+</histogram>
+
+<histogram name="SB2.Update" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    The time from the receipt of the update request to the receipt of the final
+    update chunk.
+  </summary>
+</histogram>
+
+<histogram name="SB2.UpdateRequestSize" units="bytes">
+  <owner>shess@chromium.org</owner>
+  <summary>The payload size of update requests to the server.</summary>
+</histogram>
+
+<histogram name="SB2.UpdateResult" enum="SB2UpdateResult">
+  <owner>shess@chromium.org</owner>
+  <summary>Result from trying to update the SafeBrowsing data.</summary>
+</histogram>
+
+<histogram name="SB2.UpdateSize" units="bytes">
+  <owner>shess@chromium.org</owner>
+  <summary>The size of all the chunk URLs in an update response.</summary>
+</histogram>
+
+<histogram name="SB2.UpdateSizeBackground" units="bytes">
+  <obsolete>
+    Was used for an experiment in late 2014.
+  </obsolete>
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The size of all the chunk URLs in an update response when Chrome is in the
+    background.
+  </summary>
+</histogram>
+
+<histogram name="SB2.UpdateSizeForeground" units="bytes">
+  <obsolete>
+    Was used for an experiment in late 2014.
+  </obsolete>
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The size of all the chunk URLs in an update response when Chrome is in the
+    foreground.
+  </summary>
+</histogram>
+
+<histogram name="SB2.UpdateUrls">
+  <owner>shess@chromium.org</owner>
+  <summary>The number of chunk URLs in an update response.</summary>
+</histogram>
+
+<histogram name="SB2.VolunteerPrefixesRemoved">
+  <obsolete>
+    The operation this is tracking has been deleted as of 09/2014.
+  </obsolete>
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Older versions of the safe-browsing code incorrectly added additional
+    SBPrefix items when receiving full hashes.  This caused errors when
+    calculating when to send gethash requests to the server.  An additional pass
+    over the data has been added to remove the excess prefixes.  This histogram
+    tracks progress of that code for purposes of informing a decision on when to
+    remove the additional pass.  See http://crbug.com/361248 .
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ArchivedArchiveExtensions"
+    enum="SBClientDownloadExtensions">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Records a histogram of archive file types that were found while examining a
+    downloaded ZIP file. Each archive file type in a single ZIP file is recorded
+    at most once. The relative incidence rate of each filetype in this histogram
+    should indicate the probability of finding that file type in a ZIP file
+    given that that ZIP file contains an archive file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.CheckDownloadStats"
+    enum="SBClientDownloadCheckDownloadStats">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records a histogram of the reason why downloads are marked as being
+    malicious or clean by the improved SafeBrowsing binary download protection.
+    Note that UNSUPPORTED_URL_SCHEME was split out of the INVALID_URL bucket in
+    M41. The NOT_BINARY_FILE check was moved before the UNSUPPORTED_URL_SCHEME
+    check in M42.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.CheckWhitelistResult"
+    enum="WhitelistedDownloadType">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    For each download supported by the SafeBrowsing download protection service,
+    records if it matches a certain whitelist (e.g. matches URL whitelist,
+    matches signature whitelist, or does not match any whitelists).
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DmgFileFailureByType"
+    enum="SBClientDownloadExtensions">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Counts of DMG-like file types that failed to be successfully analyzed by the
+    SafeBrowsing download service.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DmgFileHasExecutable" enum="Boolean">
+  <obsolete>
+    Replaced by SBClientDownload.DmgFileHas[No]ExecutableByType in M51.
+  </obsolete>
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    For each DMG file analyzed by the SafeBrowsing download service, records if
+    the DMG contained an executable file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DmgFileHasExecutableByType"
+    enum="SBClientDownloadExtensions">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Counts of DMG-like file types which were analyzed by the SafeBrowsing
+    download service that contained an executable file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DmgFileHasNoExecutableByType"
+    enum="SBClientDownloadExtensions">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Counts of DMG-like file types which were analyzed by the SafeBrowsing
+    download service that did NOT contain an executable file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DmgFileSuccess" enum="BooleanSuccess">
+  <obsolete>
+    Replaced by SBClientDownload.DmgFile{Success,Failure}ByType in M51.
+  </obsolete>
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    For each DMG file analyzed by the SafeBrowsing download service, records
+    true if the analysis was successful, or false if there was an error
+    analyzing the file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DmgFileSuccessByType"
+    enum="SBClientDownloadExtensions">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    Counts of DMG-like file types that were successfully analyzed by the
+    SafeBrowsing download service.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadExtensions"
+    enum="SBClientDownloadExtensions">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records a histogram of how often users download a file with a file extension
+    that is possibly dangerous (e.g., exe, class).
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestDuration" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the total time it takes for the SafeBrowsing download service to
+    check whether the content of a download is malicious or not, including file
+    feature extraction, whitelist checking, and server ping. This histogram only
+    includes checks that sent a ping to the SafeBrowsing server. It does not
+    include requests that were cancelled, but does include requests that
+    received a bad response.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestNetError" enum="NetErrorCodes">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    The net error code for all CheckClientDownloadRequest URLFetchers.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestNetworkDuration" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service ping. It is
+    not recorded for requests that were cancelled.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestNetworkStats"
+    enum="SBClientDownloadCheckDownloadStats">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the results of SafeBrowsing binary download checks which caused a
+    server ping.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestPayloadSize" units="bytes">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    The size of the upload data for CheckClientDownloadRequest URLFetchers.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestResponseCode"
+    enum="HttpResponseCode">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    For CheckClientDownloadRequest URLFetchers with successful status, the HTTP
+    response code that was received.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestTimeoutDuration" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the portion of the SafeBrowsing download service check starting with
+    the point CheckClientDownloadRequest::StartTimeout() is called. It is
+    recorded regardless if a ping was sent or not. It is not recorded for
+    requests that were cancelled.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.DownloadRequestTimeoutStats"
+    enum="SBClientDownloadCheckDownloadStats">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    For SafeBrowsing binary download checks which reached the
+    CheckClientDownloadRequest::StartTimeout() call, records the final result
+    (once the check finishes or is cancelled).
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractDmgFeaturesTime" units="ms">
+  <owner>rsesek@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    info from a downloaded DMG file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractImageHeadersTime" units="ms">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    image headers from a downloaded binary.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractSignatureFeaturesTime" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    signature info from a downloaded binary. This includes both unsigned and
+    signed binaries.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ExtractZipFeaturesTime" units="ms">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the time it takes for the SafeBrowsing download service to extract
+    info from a downloaded zip file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.PPAPIDownloadRequest.RequestDuration"
+    units="ms">
+  <owner>asanka@chromium.org</owner>
+  <summary>Time taken to complete a PPAPIDownloadRequest.</summary>
+</histogram>
+
+<histogram name="SBClientDownload.PPAPIDownloadRequest.RequestOutcome"
+    enum="SBClientDownloadPPAPIDownloadRequestOutcome">
+  <owner>asanka@chromium.org</owner>
+  <summary>
+    Outcome of running CheckPPAPIDownloadRequest. Most failure modes cause an
+    UNKNOWN result to be returned to the caller. If the attempt succeeds, the
+    result returned to the caller is based on the SafeBrowsing resopnse. The
+    final result returned is counted in
+    SBClientDownload.PPAPIDownloadRequest.Result.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.PPAPIDownloadRequest.Result"
+    enum="SBClientDownloadCheckResult">
+  <owner>asanka@chromium.org</owner>
+  <summary>Result returned to the caller of CheckPPAPIDownloadRequest.</summary>
+</histogram>
+
+<histogram name="SBClientDownload.SignedBinaryDownload"
+    enum="SBClientDownloadIsSignedBinary">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Records the number of signed vs. unsigned executables that are downloaded.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.SignedOrWhitelistedDownload">
+  <obsolete>
+    Deprecated in Chrome 50. Replaced by
+    SBClientDownload.CheckWhitelistResult.*.
+  </obsolete>
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Counter which is incremented whenever an executable is downloaded which is
+    either signed or whose URL matches the download whitelist.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.UnsupportedScheme"
+    enum="SBClientDownloadExtensions">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    Records how often different file extensions are downloaded with schemes that
+    aren't supported by Safe Browsing (e.g. ftp, gopher, content, cid, etc).
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ZipFileHasArchiveButNoExecutable"
+    enum="Boolean">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    For each zip file analyzed by the SafeBrowsing download service, records
+    true if the zip did not contain any executables but did contain another zip
+    file, false otherwise.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ZipFileHasExecutable" enum="Boolean">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    For each zip file analyzed by the SafeBrowsing download service, records if
+    the zip contained an executable file.
+  </summary>
+</histogram>
+
+<histogram name="SBClientDownload.ZipFileSuccess" enum="BooleanSuccess">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    For each zip file analyzed by the SafeBrowsing download service, records if
+    the unpacking was 100% successful.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.ClassificationStart" enum="BooleanHit">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of pages that we could have possibly classified (essentially the
+    number of top page navigations by users with SBClientMalware enabled). The
+    name is slightly misleading as it is recorded before
+    &quot;Preclassification&quot; happens.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.IPBlacklistRequestNetError"
+    enum="NetErrorCodes">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The net error code for all ClientMalwareRequest URLFetchers.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.IPBlacklistRequestPayloadSize" units="bytes">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The size of the upload data for ClientMalwareRequest URLFetchers.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.IPBlacklistRequestResponseCode"
+    enum="HttpResponseCode">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    For ClientMalwareRequest URLFetchers with successful status, the HTTP
+    response code that was received.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.PreClassificationCheckFail"
+    enum="SBClientDetectionPreClassificationCheckFail">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    Records the number of malware classifications that were skipped because a
+    pre-classification check failed.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.ResourceUrlMatchedBadIp"
+    enum="BooleanMatchedBadIp">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    True if at least one resource url matched the malware IP list. Recorded when
+    client side malware feature extraction is done.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.SentReports" enum="SBClientMalwareSentReports">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    Measures the success rate of sending malware reports.  Sending a report can
+    fail due to a client reaching the limit on the number of reports it can send
+    per day or due to the report failing to be serialized.
+  </summary>
+</histogram>
+
+<histogram name="SBClientMalware.ServerDeterminesMalware"
+    enum="BooleanIsMalware">
+  <owner>jialiul@chromium.org</owner>
+  <summary>The counts for malware verdicts given by server side model.</summary>
+</histogram>
+
+<histogram name="SBClientMalware.UnexpectedPageId" enum="BooleanHit">
+  <obsolete>
+    Deprecated 03/2014.  That part of the code got deleted.
+  </obsolete>
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    Counts the number of times the page ID that completed the page load does not
+    match the browse info page ID.  We expect that number to be zero.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.CancelClassificationReason"
+    enum="SBClientPhishingCancelClassificationReason">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The counts for various reasons why an in-progress phishing classification
+    was canceled.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.CheckNoPendingClassificationFailed">
+  <obsolete>
+    Removed in M47.
+  </obsolete>
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of times client-side phishing classifier expected to have no
+    pending classifications running but that check failed.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ClassificationStart" enum="BooleanHit">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of pages that we could have possibly classified (essentially the
+    number of top page navigations by users with SBClientPhishing enabled). The
+    name is slightly misleading as it is recorded before
+    &quot;Preclassification&quot; happens.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ClientDeterminesPhishing"
+    enum="BooleanIsPhishing">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    The counts for phishing verdicts given by client side model.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ClientModelDownloadResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>vakh@google.com</owner>
+  <summary>
+    Response or error codes from the SafeBrowsing service. Logged after a
+    request for the client side model finishes to capture the response code or
+    the error code for that HTTP request.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ClientModelStatus"
+    enum="SBClientPhishingClientModelStatus">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The counts for various model status codes that we get after loading a new
+    client-side phishing model.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.DOMFeatureChunkTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The time that an individual chunk of DOM feature extraction work took.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.DOMFeatureFrameRemoved">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The number of times that DOM feature extraction finished early because the
+    active WebDocument's frame was removed during traversal.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.DOMFeatureIterations">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The number of iterations that the DOM feature extractor took to finish.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.DOMFeatureResumeTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The time that it took to resume DOM feature extraction for the phishing
+    classifier.  Longer times may indicate that the page DOM changed between
+    chunks of work and the extractor had to re-traverse up to the saved
+    position.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.DOMFeatureTimeout">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The number of phishing classifications that were aborted because DOM feature
+    extraction took too long.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.DOMFeatureTotalTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The time that the DOM feature extarctor took to finish, summed across all
+    chunks of work.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.GrabPhishingThumbnail" units="ms">
+  <obsolete>
+    Removed in M47
+  </obsolete>
+  <owner>noelutz@chromium.org</owner>
+  <summary>Time spent generating the thumbnail.</summary>
+</histogram>
+
+<histogram name="SBClientPhishing.IllegalFeatureValue">
+  <owner>nparker@chromium.org</owner>
+  <summary>
+    The number of features which were omitted from phishing classification
+    because they were added with an illegal value.  This would indicate a bug.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.InitPrivateNetworksFailed">
+  <obsolete>
+    Deprecated in Chrome 37, which now uses //net's internal matching.
+  </obsolete>
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    The number of times that the phishing detection service could not be
+    initialized due to an error parsing the private IP networks.  This would
+    indicate a bug.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.InvalidWhitelistExpression">
+  <obsolete>
+    Deprecated 12/2011.  Whitelist entries are no longer part of
+    ClientPhishingResponse.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of whitelist_expression entries in a ClientPhishingResponse that
+    could not be canonicalized.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.PreClassificationCheckFail"
+    enum="SBClientDetectionPreClassificationCheckFail">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    Records the number of phishing classifications that were skipped because a
+    pre-classification check failed.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ReportLimitSkipped" enum="BooleanHit">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of phishing classifications that were previously cached as being
+    phishing but that will get re-classified (to possibly fix false positives).
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.RequestNotSerialized">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of phishing classifier pingbacks that were skipped because
+    serializing the request protocol buffer to string failed.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.RequestSatisfiedFromCache" enum="BooleanHit">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of times that a cached phishing classification result was used,
+    rather than pinging the server.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ScorerCreationStatus"
+    enum="SBClientPhishingScorerCreationStatus">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    Records the status when we create a scorer object for the client-side
+    phishing detection classifier.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.ServerDeterminesPhishing"
+    enum="BooleanIsPhishing">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    The counts for phishing verdicts given by server side model.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.SkipClassificationReason"
+    enum="SBClientPhishingSkipClassificationReason">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    The counts for various reasons why a phishing classification is skipped.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.TermFeatureBreakIterError">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of phishing classifications that were aborted because the term
+    feature extractor failed to initialize an ICU break iterator.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.TermFeatureChunkTime" units="ms">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The time that an individual chunk of term feature extraction work took.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.TermFeatureIterations">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of iterations that the term feature extractor took to finish.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.TermFeatureTimeout">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of phishing classification that were aborted because term feature
+    extraction took too long.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.TermFeatureTotalTime" units="ms">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The time that the term feature extarctor took to finish, summed across all
+    chunks of work.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.TooManyFeatures">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The number of times that the limit on the number of phishing classifier
+    features for a page was reached.  This may indicate a bug, or that
+    kMaxFeatureSize is too small.
+  </summary>
+</histogram>
+
+<histogram name="SBClientPhishing.URLFeatureTime" units="ms">
+  <owner>noelutz@chromium.org</owner>
+  <summary>
+    The time taken to extract URL features for the phishing classifier.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.Activations" enum="DownloadItem.DangerType">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Count of times download feedback has been started, broken down by danger
+    type.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.ActiveFeedbacks">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    When a new download feedback request is added, records the number of
+    download requests currently active and/or pending.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.Eligible" enum="DownloadItem.DangerType">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Count of times eligible download notifications are shown. Broken down by
+    danger type.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.EmptyFilePathFailure" enum="Boolean">
+  <owner>jialiul@chromium.org</owner>
+  <summary>
+    Count of times download feedback cannot be sent due to empty file path.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.Shown" enum="DownloadItem.DangerType">
+  <obsolete>
+    Starting with M32, replaced by SBDownloadFeedback.Eligible.
+  </obsolete>
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Count of times download feedback button has been shown, broken down by
+    danger type.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.SizeEligibleKB" units="KB">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Size of downloads that were of the correct danger type, regardless if they
+    meet the max file size check or if they are actually uploaded or not.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.SizeFailure" units="bytes">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Size of downloads that failed to be uploaded to the feedback service.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.SizeSuccess" units="bytes">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Size of downloads that were successfully uploaded to the feedback service.
+  </summary>
+</histogram>
+
+<histogram name="SBDownloadFeedback.UploadResult"
+    enum="SBDownloadFeedbackUploadResult">
+  <owner>mattm@chromium.org</owner>
+  <summary>
+    Final result of attempt to upload binary to download feedback service.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.BLAHashTime" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to compute the hash of a blacklisted module.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.BLASignatureTime" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to validate the signature of a blacklisted module.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.DiscardedIncident" enum="IncidentType">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The type of incident discarded by the safe browsing incident reporting
+    service as a result of profile or service destruction.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.DownloadMetadata.DeleteSuccess" enum="BooleanSuccess">
+  <owner>caitkp@chromium.org</owner>
+  <summary>The result of deleting a profile's download metadata file.</summary>
+</histogram>
+
+<histogram name="SBIRS.DownloadMetadata.ReadResult" enum="MetadataReadResult">
+  <owner>caitkp@chromium.org</owner>
+  <summary>The result of reading a profile's download metadata file.</summary>
+</histogram>
+
+<histogram name="SBIRS.DownloadMetadata.WriteResult" enum="MetadataWriteResult">
+  <owner>caitkp@chromium.org</owner>
+  <summary>The result of writing a profile's download metadata file.</summary>
+</histogram>
+
+<histogram name="SBIRS.DroppedIncident" enum="IncidentType">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The type of incident given to the safe browsing incident reporting service
+    but dropped as a result of not participating in safe browsing.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.EnvCollectionTime" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to collect environmental data for a safe browsing incident
+    report.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.FindDownloadedBinaryTime" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to find the most recent binary download from all loaded
+    profiles when creating a safe browsing incident report.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.Incident" enum="IncidentType">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The type of incident included in an incident report by the safe browsing
+    incident reporting service.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.IncidentCount">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The number of incidents collated into a single safe browsing incident
+    report.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.InterIncidentTime" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time between two successive incidents collated into the same
+    incident report by the safe browsing incident reporting service.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.NoDownloadIncident" enum="IncidentType">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The type of incident pruned by the safe browsing incident reporting service
+    as a result of not having a matching binary download.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.PrunedIncident" enum="IncidentType">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The type of incident pruned from a report in the safe browsing incident
+    reporting service as a result of having previously been reported.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.PruneRatio" units="%">
+  <obsolete>
+    Deprecated 08/2015.
+  </obsolete>
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The percentage of incidents pruned from a safe browsing incident report on
+    account of having been previously reported.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.PSSDataStoreSize" units="bytes">
+  <owner>grt@google.com</owner>
+  <summary>
+    The size, in bytes, of a profile's platform state store. This hisogram is
+    logged on each write, which always replaces any previous contents.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.PSSLoadResult" enum="PlatformStateStoreLoadResult">
+  <owner>grt@google.com</owner>
+  <summary>The result of loading data from the platform state store.</summary>
+</histogram>
+
+<histogram name="SBIRS.ReceivedIncident" enum="IncidentType">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The type of incident received by the safe browsing incident reporting
+    service.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.ReportPayloadSize" units="bytes">
+  <owner>caitkp@google.com</owner>
+  <summary>The size, in bytes, of a safe browsing incident report.</summary>
+</histogram>
+
+<histogram name="SBIRS.ReportUploadTime" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>The elapsed time to upload a safe browsing incident report.</summary>
+</histogram>
+
+<histogram name="SBIRS.StateStoreInitResult" enum="StateStoreInitResult">
+  <owner>proberge@google.com</owner>
+  <summary>
+    The result of initializing the state store and comparing the preferences to
+    the platform-specific state store.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.SuspiciousModuleDetectionTime" units="ms">
+  <owner>proberge@google.com</owner>
+  <summary>
+    The elapsed time to check loaded modules against the module whitelist.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.SuspiciousModuleReportCount" units="modules">
+  <owner>proberge@google.com</owner>
+  <summary>The number of suspicious modules found.</summary>
+</histogram>
+
+<histogram name="SBIRS.SuspiciousModuleReportingTime" units="ms">
+  <owner>proberge@google.com</owner>
+  <summary>
+    The elapsed time to create incidents for suspicious modules.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.UploadResult" enum="ReportProcessingResult">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The result of an attempted report upload by the safe browsing incident
+    reporting service.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.VerifyBinaryIntegrity.0" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to verify the binary integrity of chrome.exe.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.VerifyBinaryIntegrity.1" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to verify the binary integrity of chrome.dll.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.VerifyBinaryIntegrity.2" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to verify the binary integrity of chrome_child.dll.
+  </summary>
+</histogram>
+
+<histogram name="SBIRS.VerifyBinaryIntegrity.3" units="ms">
+  <owner>caitkp@google.com</owner>
+  <summary>
+    The elapsed time to verify the binary integrity of chrome_elf.dll.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.Abort" enum="ContentResourceType">
+  <obsolete>
+    Superseded by SBOffDomainInclusion2.Abort in December 2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the off-domain
+    inclusion analysis was aborted. This histogram is suffixed with the abort
+    reason.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.Detected" enum="ContentResourceType">
+  <obsolete>
+    Deprecated 01/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which an off-domain
+    inclusion was detected by the OffDomainInclusionDetector.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.EmptyMainFrameURL"
+    enum="ContentResourceType">
+  <obsolete>
+    Deprecated 01/2015. Moved to SBOffDomainInclusion.Abort.EmptyMainFrameURL.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the main frame URL
+    was unexpectedly empty in the OffDomainInclusionDetector.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.InHistory" enum="ContentResourceType">
+  <obsolete>
+    Superseded by SBOffDomainInclusion2.InHistory in December 2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the off-domain
+    inclusion analysis concluded in no inclusion whitelist hit but a browsing
+    history hit.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.InvalidMainFrameURL"
+    enum="ContentResourceType">
+  <obsolete>
+    Deprecated 01/2015 (was never reported, confirming experiment that handling
+    it is irrelevant).
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the main frame URL
+    was unexpectedly invalid (and not empty) in the OffDomainInclusionDetector.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.RequestAnalyzed"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SBOffDomainInclusion2.RequestAnalyzed in December 2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request analyzed by the
+    OffDomainInclusionDetector.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.Suspicious" enum="ContentResourceType">
+  <obsolete>
+    Superseded by SBOffDomainInclusion2.Suspicious in December 2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which an off-domain
+    inclusion was detected by the OffDomainInclusionDetector and considered
+    suspicious.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion.Whitelisted" enum="ContentResourceType">
+  <obsolete>
+    Superseded by SBOffDomainInclusion2.Suspicious in December 2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the off-domain
+    inclusion analysis concluded in an inclusion whitelist hit.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion2.Abort" enum="ContentResourceType2">
+  <obsolete>
+    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the off-domain
+    inclusion analysis was aborted. This histogram is suffixed with the abort
+    reason.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion2.InHistory" enum="ContentResourceType2">
+  <obsolete>
+    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the off-domain
+    inclusion analysis concluded in no inclusion whitelist hit but a browsing
+    history hit.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion2.RequestAnalyzed"
+    enum="ContentResourceType2">
+  <obsolete>
+    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request analyzed by the
+    OffDomainInclusionDetector.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion2.Suspicious" enum="ContentResourceType2">
+  <obsolete>
+    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which an off-domain
+    inclusion was detected by the OffDomainInclusionDetector and considered
+    suspicious.
+  </summary>
+</histogram>
+
+<histogram name="SBOffDomainInclusion2.Whitelisted" enum="ContentResourceType2">
+  <obsolete>
+    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the resource type of each resource request for which the off-domain
+    inclusion analysis concluded in an inclusion whitelist hit.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.ActivateDuration" units="microseconds">
+  <obsolete>
+    Replaced by ActivateDuration2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the compositor to simply activate the pending tree.
+    Does not include any PrepareTiles or raster time.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.ActivateDuration2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the compositor to simply activate the pending tree.
+    Does not include any PrepareTiles or raster time.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameIntervalCritical"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameIntervalCritical2, due to inefficient bucketing
+    scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    This is the time delta between back-to-back BeginMainFrames completions on
+    the compositor side when the on_critical_path flag is set, regardless of
+    whether they abort (have no updates) or commit (have updates).
+
+    The interval is only recorded when the BeginMainFrames are running
+    continuously; sepcifically when another BeginMainFrame is requested by the
+    next BeginImplFrame after a) an abort or b) activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameIntervalCritical2"
+    units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    This is the time delta between back-to-back BeginMainFrames completions on
+    the compositor side when the on_critical_path flag is set, regardless of
+    whether they abort (have no updates) or commit (have updates).
+
+    The interval is only recorded when the BeginMainFrames are running
+    continuously; sepcifically when another BeginMainFrame is requested by the
+    next BeginImplFrame after a) an abort or b) activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameIntervalNotCritical"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameIntervalNotCritical2, due to inefficient bucketing
+    scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    This is the time delta between back-to-back BeginMainFrames completions on
+    the compositor side when the on_critical_path flag is not set, regardless of
+    whether they abort (have no updates) or commit (have updates).
+
+    The interval is only recorded when the BeginMainFrames are running
+    continuously; sepcifically when another BeginMainFrame is requested by the
+    next BeginImplFrame after a) an abort or b) activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameIntervalNotCritical2"
+    units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    This is the time delta between back-to-back BeginMainFrames completions on
+    the compositor side when the on_critical_path flag is not set, regardless of
+    whether they abort (have no updates) or commit (have updates).
+
+    The interval is only recorded when the BeginMainFrames are running
+    continuously; sepcifically when another BeginMainFrame is requested by the
+    next BeginImplFrame after a) an abort or b) activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameQueueDurationCritical"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameQueueDurationCritical2, due to inefficient
+    bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the main side to start the BeginMainFrame in response
+    to the compositor's SendBeginMainFrame when the on_critical_path flag is
+    set.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"
+    units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the main side to start the BeginMainFrame in response
+    to the compositor's SendBeginMainFrame when the on_critical_path flag is
+    set.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameQueueDurationNotCritical2, due to inefficient
+    bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the main side to start the BeginMainFrame in response
+    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
+    set.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical2"
+    units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the main side to start the BeginMainFrame in response
+    to the compositor's SendBeginMainFrame when the on_critical_path flag is not
+    set.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameStartToCommitDuration"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameStartToCommitDuration2, due to inefficient
+    bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time from when the main side actually starts the BeginMainFrame to when
+    the commit completes on the impl side.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"
+    units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time from when the main side actually starts the BeginMainFrame to when
+    the commit completes on the impl side.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.BeginMainFrameToCommitDuration"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameQueueDurationCritical,
+    BeginMainFrameQueueDurationNotCritical, and
+    BeginMainFrameStartToCommitDuration.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the blink main thread to respond to the compositor's
+    SendBeginMainFrame.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.Browser.BeginMainFrameStartToCommit"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameStartToCommitDuration. This was recorded as a
+    result of a typo in the code that didn't include &quot;Duration&quot;.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time from when the main side actually starts the BeginMainFrame to when
+    the commit completes on the impl side.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.Browser.BeginMainFrameStartToCommit2"
+    units="microseconds">
+  <obsolete>
+    Replaced by BeginMainFrameStartToCommitDuration2. This was recorded as a
+    result of a typo in the code that didn't include &quot;Duration&quot;.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time from when the main side actually starts the BeginMainFrame to when
+    the commit completes on the impl side.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.CommitInterval" units="microseconds">
+  <obsolete>
+    Replaced by CommitInterval2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time delta between the *draw* times of back-to-back BeginMainFrames that
+    result in a commit.
+
+    The interval is only recorded when the BeginMainFrames are running and
+    committing continuously, where continuously means when another
+    BeginMainFrame is requested by the next BeginImplFrame after activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.CommitInterval2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time delta between the *draw* times of back-to-back BeginMainFrames that
+    result in a commit.
+
+    The interval is only recorded when the BeginMainFrames are running and
+    committing continuously, where continuously means when another
+    BeginMainFrame is requested by the next BeginImplFrame after activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.CommitToReadyToActivateDuration"
+    units="microseconds">
+  <obsolete>
+    Replaced by CommitToReadyToActivateDuration2, due to inefficient bucketing
+    scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the compositor to rasterize pending tree content after
+    a commit before it is ready for activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.CommitToReadyToActivateDuration2"
+    units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes for the compositor to rasterize pending tree content after
+    a commit before it is ready for activation.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.DrawDuration" units="microseconds">
+  <obsolete>
+    Replaced by DrawDuration2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>How long it takes the compositor to draw a frame.</summary>
+</histogram>
+
+<histogram name="Scheduling.DrawDuration2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>How long it takes the compositor to draw a frame.</summary>
+</histogram>
+
+<histogram name="Scheduling.DrawInterval" units="microseconds">
+  <obsolete>
+    Replaced by DrawInterval2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time delta between the draw times of back-to-back BeginImplFrames,
+    regardless of whether or not they result in a swap.
+
+    The interval is only recorded when every BeginImplFrame wants to draw.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.DrawInterval2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    The time delta between the draw times of back-to-back BeginImplFrames,
+    regardless of whether or not they result in a swap.
+
+    The interval is only recorded when every BeginImplFrame wants to draw.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.MainAndImplFrameTimeDelta" units="microseconds">
+  <obsolete>
+    Replaced by MainAndImplFrameTimeDelta2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    Recorded every time the compositor draws with a new active tree. A value of
+    0 indicates the main-side started and finished within the same frame
+    interval as the impl-side. Positive values correspond to how old any
+    main-side updates are compared to the impl-side updates. If there are no
+    mid-frame updates, this metric is a good proxy for how well the main and
+    impl threads are synchronized.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.MainAndImplFrameTimeDelta2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    Recorded every time the compositor draws with a new active tree. A value of
+    0 indicates the main-side started and finished within the same frame
+    interval as the impl-side. Positive values correspond to how old any
+    main-side updates are compared to the impl-side updates. If there are no
+    mid-frame updates, this metric is a good proxy for how well the main and
+    impl threads are synchronized.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.PendingTreeDuration" units="microseconds">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    Time between creating a pending tree and activating that tree. This differs
+    from Scheduling.ActivateDuration in that it includes time taken to raster
+    the pending tree, not just the time to activate it.
+
+    The interval is recorded each time a pending tree is activated.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.PrepareTilesDuration" units="microseconds">
+  <obsolete>
+    Replaced by PrepareTIlesDuration2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes the compositor to PreapreTiles, which determines what
+    rasterization work to do.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.PrepareTilesDuration2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    How long it takes the compositor to PreapreTiles, which determines what
+    rasterization work to do.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.SwapAckWasFast" enum="BooleanWasFast">
+  <owner>brianderson@chromium.org</owner>
+  <summary>
+    True if the swap ack was received within approximately 8 seconds of the
+    swap. Although 8 seconds isn't exactly fast, it is a threshold that
+    represents a hang or the appearance of a hang.
+  </summary>
+</histogram>
+
+<histogram name="Scheduling.SwapToAckLatency" units="microseconds">
+  <obsolete>
+    Replaced by SwapToAckLatency2, due to inefficient bucketing scheme.
+  </obsolete>
+  <owner>brianderson@chromium.org</owner>
+  <summary>How long it takes the swap ack to return after a swap.</summary>
+</histogram>
+
+<histogram name="Scheduling.SwapToAckLatency2" units="microseconds">
+  <owner>brianderson@chromium.org</owner>
+  <summary>How long it takes the swap ack to return after a swap.</summary>
+</histogram>
+
+<histogram name="ScreenLocker.AuthenticationFailure" enum="UnlockType">
+  <owner>sammiequon@chromium.org</owner>
+  <summary>
+    What type of authentication was attempted when the user failed to unlock the
+    lock screen.
+  </summary>
+</histogram>
+
+<histogram name="ScreenLocker.AuthenticationSuccess" enum="UnlockType">
+  <owner>sammiequon@chromium.org</owner>
+  <summary>
+    What type of authentication was attempted when the user successfully
+    unlocked the lock screen.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.AdvertisedWithSecureScheme" enum="BooleanHttps">
+  <obsolete>
+    Experiment complete, histogram gathering code removed.
+  </obsolete>
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Whether an SDCH dictionary was advertised over a secure scheme or not. This
+    histogram is logged inside SdchManager at advertisement time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Advertisement_Count">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The number of dictionaries advertised in an HTTP GET transaction that
+    supports SDCH.  Note that only non-zero advertisements are logged.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.BlacklistReason" enum="SdchProblemCode">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The reason why a blacklist blocking a request from advertising SDCH was
+    implemented.  There is one entry in this histogram per inhibited request.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Dictionary size loaded" units="bytes">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Each sample is the byte count for a dictionary that is loaded by Chrome. A
+    dictionary is loaded shortly after the first Google query performed in each
+    session, and allows future SDCH transactions to be encoded/decoded using
+    that dictionary.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.DictionaryFate" enum="SdchDictionaryFate">
+  <owner>rdsmith@chromium.org&gt;</owner>
+  <summary>
+    The fate, both on input and output, of dictionary requests.  There is
+    intended to be two entries in this histogram for each Get-Dictionary seen
+    (except failed requests are not currently tracked).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.DictionaryUseCount">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The number of times a dictionary has been successfully used for decoding,
+    recorded at the time it is evicted from the manager.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment2_Decode">
+  <obsolete>
+    Replaced by Sdch3.Experiment3_Holdback.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Duration in time from when a request was made, until all bytes were
+    received.  During the running of an SDCH latency experiment, these packets
+    were part of an SDCH encoded transmission made after the link had proven it
+    was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment2_Holdback">
+  <obsolete>
+    Replaced by Sdch3.Experiment3_Holdback.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Duration in time from when a request was made, until all bytes were
+    received.  During the running of an SDCH latency experiment, these packets
+    were part of a holdback, which precluded SDCH despite the fact that the link
+    had proven it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment3_Decode">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Duration in time from the first byte of a request was received, until all
+    bytes were received.  During the running of an SDCH latency experiment,
+    these packets were part of an SDCH encoded transmission made after the link
+    had proven it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment3_Holdback">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Duration in time from the first byte of a request was received, until all
+    bytes were received.  During the running of an SDCH latency experiment,
+    these packets were part of a holdback, which precluded SDCH despite the fact
+    that the link had proven it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Decode">
+  <obsolete>
+    Replaced by Sdch3.Experiment2_Decode.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Duration in time from when a request was made, until all bytes were
+    received.  During the running of an SDCH latency experiment, these packets
+    were part of an SDCH encoded transmission made after the link had proven it
+    was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Holdback">
+  <obsolete>
+    Replaced by Sdch3.Experiment2_Holdback.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Duration in time from when a request was made, until all bytes were
+    received.  During the running of an SDCH latency experiment, these packets
+    were part of a holdback, which precluded SDCH despite the fact that the link
+    had proven it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Holdback_1st_To_2nd_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 1st **NON**-SDCH encoded packet to receipt of the 2nd packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+    During the running of an SDCH latency experiment, these packets were part of
+    a holdback, which precluded SDCH despite the fact that the link had proven
+    it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Holdback_1st_To_Last_a" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The duration between receipt of the 1st holdback (non-SDCH encoded) packet
+    and receipt of the last packet.  Only groups that are part of the holdback
+    (i.e., could have been sdch encoded) are sampled.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Holdback_2nd_To_3rd_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 2nd **NON**-SDCH encoded packet to receipt of the 3rd packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+    During the running of an SDCH latency experiment, these packets were part of
+    a holdback, which precluded SDCH despite the fact that the link had proven
+    it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Holdback_3rd_To_4th_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 3rd **NON**-SDCH encoded packet to receipt of the 4th packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+    During the running of an SDCH latency experiment, these packets were part of
+    a holdback, which precluded SDCH despite the fact that the link had proven
+    it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Experiment_Holdback_4th_To_5th_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 4th **NON**-SDCH encoded packet to receipt of the 5th packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+    During the running of an SDCH latency experiment, these packets were part of
+    a holdback, which precluded SDCH despite the fact that the link had proven
+    it was capable of handling SDCH compression.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.FilterUseBeforeDisabling">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If SDCH decoding was disabled client side, this records how many URLs were
+    processed by the SDCH filter before disabling this feature.  The most common
+    number is 1, which happens when there is one home-page tab that contains
+    SDCH encoded data, for which there is no dictionary loaded into the Chrome
+    process (yet), since Chrome was just restarted.  Large values in this
+    histogram are indicative of flaky decompression, that works for a while, and
+    then is disabled.  Values of 2 or 3 may appear if a user has more than one
+    home page with a query, and restarts there browser.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.FirstUseInterval" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The amount of time between creation/load of an SDCH dictionary and its first
+    use.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_1st_To_2nd_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 1st SDCH encoded packet and receipt of the 2nd packet, for
+    processing by the SDCH filter.  Packet count boundaries are calculated each
+    time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_1st_To_Last_a" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The duration between receipt of the 1st SDCH encoded packet and receipt of
+    the last packet, for processing by the SDCH filter.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_2nd_To_3rd_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 2nd SDCH encoded packet and receipt of the 3rd packet, for
+    processing by the SDCH filter.  Packet count boundaries are calculated each
+    time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_3rd_To_4th_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 3rd SDCH encoded packet and receipt of the 4th packet, for
+    processing by the SDCH filter. Packet count boundaries are calculated each
+    time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_4th_To_5th_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 4th SDCH encoded packet and receipt of the 5th packet, for
+    processing by the SDCH filter. Packet count boundaries are calculated each
+    time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_Bytes_Processed_a" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    (discontinued 7/29/2009, and replaced by
+    Sdch3.Network_Decode_Bytes_Processed_b) The number of bytes processed
+    (received over the net or from cache) by the SDCH filter chain.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_Bytes_Processed_b" units="bytes">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The number of bytes processed (received over the net or from cache) by the
+    SDCH filter chain.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_Bytes_VcdiffOut_a" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The number of bytes emitted after decoding by the SDCH filter.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_Latency_F_a" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The duration between putting the first byte of a request (such as a GET) on
+    the wire, until the last by of compressed SDCH encoded content is received
+    (with durations over 10 minutes discarded).  During a planned latency
+    experiment, some clients will receive encoded SDCH data, and other will
+    received mere gzip'ed data (that passes through the SDCH filter unchanged).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_Packets_b">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    An approximation to the total number of SDCH encoded packets received for
+    processing by the SDCH filter. Packet count boundaries are calculated each
+    time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Decode_Ratio_a" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The ratio of the number of bytes read from the network (or cache) and fed to
+    the filter chain (usually the gunzip filter) vs. the number of bytes emitted
+    by the SDCH filter to be rendered.  This is commonly described as the SDCH
+    compression ratio.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_1st_To_2nd_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 1st **NON**-SDCH encoded packet to receipt of the 2nd packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_1st_To_Last_a" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The duration between receipt of the 1st **NON**-SDCH encoded packet to
+    receipt of the last packet, for processing by the SDCH filter.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_2nd_To_3rd_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 2nd **NON**-SDCH encoded packet to receipt of the 3rd packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_3rd_To_4th_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 3rd **NON**-SDCH encoded packet to receipt of the 4th packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_4th_To_5th_c" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Sampling only transmissions with 5 or more packets, the duration between
+    receipt of the 4th **NON**-SDCH encoded packet to receipt of the 5th packet,
+    for processing by the SDCH filter.  Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_Latency_F_a" units="ms">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The duration between putting the first byte of a request (such as a GET) on
+    the wire, until the last by gzip compressed content is received and
+    passed-through unchanged by the SDCH filter (with durations over 10 minutes
+    discarded).  During a planned latency experiment, some clients will receive
+    encoded SDCH data, and other will received mere gzip'ed data (that passes
+    through the SDCH filter unchanged).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.Network_Pass-through_Packets_b">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The total number of **NON**-SDCH encoded packets received for processing by
+    the SDCH filter in one URL fetch. Packet count boundaries are calculated
+    each time a read from the filter is called, assuming 1430 bytes of data per
+    packet since the last boundary calculation.  This *tends* to properly count
+    small packets, but can err if small packets come at roughly the same time.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.NetworkBytesSavedByCompression" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    The absolute difference in bytes between the amount of data entering the
+    SDCH filter and the amount of data exiting the SDCH filter.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.NetworkBytesSpent" units="bytes">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Absolute sizes, in bytes, of SDCH dictionaries fetched over the network.
+    These are logged in SdchOwner when dictionary fetches complete.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.PartialBytesIn" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
+    decoder still has internally buffered data that has never been read, this
+    histogram reports the number of bytes that were received over the net (or
+    from the cache) and fed to the start of the filter chain (usually to the
+    gunzip filter).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.PartialVcdiffIn" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
+    decoder still has internally buffered data that has never been read, this
+    histogram reports the number of bytes that were received over the net (or
+    from the cache) and fed to VCDIFF decoder (usually after gunzipping).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.PartialVcdiffOut" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode INCOMPLETE_SDCH_CONTENT reports that the VCDIFF
+    decoder still has internally buffered data that has never been read, this
+    histogram reports the number of bytes that were output by the VCDIFF decoder
+    (and sent toward the renderer).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.PersistenceFailureReason"
+    enum="SdchPersistenceFailureReason">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Tracks failures that occur when reading in or writing out persisted
+    dictionary information.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.ProblemCodes_3" enum="SdchProblemCode">
+  <obsolete>
+    Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>Each sample is the report of a distinct problem code.</summary>
+</histogram>
+
+<histogram name="Sdch3.ProblemCodes_4" enum="SdchProblemCode">
+  <obsolete>
+    Deprecated 2014-11. Sdch3.ProblemCodes_5 used instead.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>Each sample is the report of a distinct problem code.</summary>
+</histogram>
+
+<histogram name="Sdch3.ProblemCodes_5" enum="SdchProblemCode">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>Each sample is the report of a distinct problem code.</summary>
+</histogram>
+
+<histogram name="Sdch3.ResponseCorruptionDetection.Cached"
+    enum="SdchResponseCorruptionDetectionCauses">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Attempted SDCH decoding can fail at the Read() filter processing stage.  In
+    some of those cases, the request is corrupted enough that it must be either
+    retried or failed completely.  This histogram records the details of why the
+    request was considered corrupted, for results returned from the cache.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.ResponseCorruptionDetection.Uncached"
+    enum="SdchResponseCorruptionDetectionCauses">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    Attempted SDCH decoding can fail at the Read() filter processing stage.  In
+    some of those cases, the request is corrupted enough that it must be either
+    retried or failed completely.  This histogram records the details of why the
+    request was considered corrupted for results returned from the network.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.TimeWeightedMemoryUse" units="bytes">
+  <owner>ellyjones@chromium.org</owner>
+  <summary>
+    Measures the time-weighted memory use of SDCH dictionaries, in bytes. The
+    numerator is bytes of dictionary times seconds that dictionary was in
+    memory, and the denominator is seconds that the Chrome process lives.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.UnflushedBufferSize" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
+    still buffering output of the VCDIFF decoder that has never been read, this
+    histogram reports the number of bytes that were in that buffer.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.UnflushedBytesIn" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
+    still buffering output of the VCDIFF decoder  that has never been read, this
+    histogram reports the number of bytes that were received over the net (or
+    from the cache) and fed to the start of the filter chain (usually to the
+    gunzip filter).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.UnflushedVcdiffIn" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
+    still buffering output of the VCDIFF decoder that has never been read, this
+    histogram reports the number of bytes that were received over the net (or
+    from the cache) and fed to VCDIFF decoder (usually after gunzipping).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.UnflushedVcdiffOut" units="bytes">
+  <obsolete>
+    Deprecated 2016-11.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    If/when a ProblemCode UNFLUSHED_CONTENT reports that the SDCH filter is
+    still buffering output of the VCDIFF decoder  that has never been read, this
+    histogram reports the number of bytes that were output by the VCDIFF decoder
+    (and sent toward the renderer).
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.UsageInterval" units="ms">
+  <obsolete>
+    Use Sdch3.UsageInterval2 instead.
+  </obsolete>
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The amount of time from the last time an SDCH dictionary was used.  For the
+    first use of a dictionary, the maximum time is used.
+  </summary>
+</histogram>
+
+<histogram name="Sdch3.UsageInterval2" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The amount of time from the last time an SDCH dictionary was used.  Not
+    recorded on first dictionary use. First use is recorded as
+    Sdch3.FirstUseInterval.
+  </summary>
+</histogram>
+
+<histogram name="Search.AddSearchProvider" enum="AddSearchProvider">
+  <obsolete>
+    Replaced by Search.AddSearchProvider2, which is also now obsolete.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures how much the user modifies their search engines, whether through
+    window.external.AddSearchProvider or chrome://settings.
+  </summary>
+</histogram>
+
+<histogram name="Search.AddSearchProvider2" enum="AddSearchProvider">
+  <obsolete>
+    AddSearchProvider was removed 05/2016.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures usage of window.external.AddSearchProvider and user interaction
+    with the resulting confirmation dialog (if any). Only works on Views
+    platforms (Win, Linux, CrOS).
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchAllCapsResultsSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen during a contextual search where the
+    selected text consisted of all capital letters. Only logged when contextual
+    search is triggered due to a tap. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchBarOverlap"
+    enum="ContextualSearchTapSuppression">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether a Tap was suppressed because the Bar overlapped the selection area.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchBarOverlapSeen"
+    enum="ContextualSearchBarOverlapSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether the Bar overlapped the selection area and whether the results were
+    seen. Recorded when the UX is hidden. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchBasePageProtocol"
+    enum="ContextualSearchBasePageProtocol">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The protocol of the base page, logged at the time that any Search Term
+    Resolution Response is recieved.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchBlacklistSeen"
+    enum="ContextualSearchBlacklistSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>pedrosimonetti@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (blacklist reason and whether the results were seen) of every
+    search term issued by a tap gesture. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchContextualCardsIntegration.DataShown"
+    enum="Boolean">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether Contextual Cards data was shown in the Contextual Search Bar.
+    Contextual Cards data is included with the search term resolution response.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchContextualCardsIntegration.ResultsSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen as part of a Contextual Search when
+    Contextual Cards data was shown. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollNotSeen"
+    units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The duration between the panel being triggered and the panel being dismisesd
+    due to a scroll when search results were not seen. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationBetweenTriggerAndScrollSeen"
+    units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The duration between the panel being triggered and the panel being dismisesd
+    due to a scroll when search results were seen. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationNonPrefetched" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from opening the panel until the SERP is fully loaded. Applies only
+    to non-prefetched requests. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationPrefetched" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from opening the panel until the SERP is fully loaded. Applies only
+    to prefetched requests. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationSeen" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from initiating to ending a contextual search, when results were
+    seen as part of the search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationUnseen" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from initiating to ending a contextual search, when results were
+    not seen as part of the search and the search did not end with the beginning
+    of another contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchDurationUnseenChained" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from initiating to ending a contextual search, when results were
+    not seen as part of the search and the search ended with the beginning of
+    another contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchEnterClosed"
+    enum="ContextualSearchEnterClosedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (previous state and reason) of the first entry into the closed
+    panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchEnterExpanded"
+    enum="ContextualSearchEnterExpandedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (previous state and reason) of the first entry into the expanded
+    panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchEnterMaximized"
+    enum="ContextualSearchEnterMaximizedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (previous state and reason) of the first entry into the
+    maximized panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchEnterPeeked"
+    enum="ContextualSearchEnterPeekedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (previous state and reason) of the first entry into the peeked
+    panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchExitClosed"
+    enum="ContextualSearchExitClosedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (destination state and reason) of the first exit out of the
+    closed panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchExitExpanded"
+    enum="ContextualSearchExitExpandedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (destination state and reason) of the first exit out of the
+    expanded panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchExitMaximized"
+    enum="ContextualSearchExitMaximizedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (destination state and reason) of the first exit out of the
+    maximized panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchExitPeeked"
+    enum="ContextualSearchExitPeekedStateChange">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The details (destination state and reason) of the first exit out of the
+    peeked panel state within a contextual search. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchFallbackSearchRequestStatus"
+    enum="ContextualSearchSearchRequestStatus">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The status of the Contextual Search fallback Search request. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchFirstRunFlowOutcome"
+    enum="ContextualSearchPreferenceState">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The state of the Contextual Search Preference after the first run flow.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchFirstRunPanelSeen"
+    enum="ContextualSearchFirstRunPanelSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether the first run flow's panel was seen as part of a contextual search.
+    Only logged when the user triggered the first run flow yet exited the search
+    still in the undecided preference state. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchIconSpriteAnimated"
+    enum="ContextualSearchIconSpriteAnimated">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen, whether the search provider icon sprite
+    was animated when the panel first appeared, and the triggering gesture. If
+    animation is disabled due to a field trial, we still log
+    &quot;animated&quot; if the animation would have run otherwise.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchLiteralSearchDuration" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from starting a literal search until the results in the SERP start
+    to become viewable. Applies only to prefetched requests. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchLowPrioritySearchRequestStatus"
+    enum="ContextualSearchSearchRequestStatus">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The status of the Contextual Search low priority Search request. Implemented
+    for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchMandatoryPromoOutcomeByGesture"
+    enum="ContextualSearchOutcomeByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>pedrosimonetti@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The outcome of the mandatory Promo broken down by original triggering
+    gesture. Logged for each view of the promo. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchNormalPrioritySearchRequestStatus"
+    enum="ContextualSearchSearchRequestStatus">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The status of the Contextual Search normal priority Search request.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPanelOpenDuration" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from opening the panel beyond peek until the panel is closed.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPeekPromoCount" units="count">
+  <owner>donnd@chromium.org</owner>
+  <owner>pedrosimonetti@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of times the Peek Promo was seen. This histogram will be emitted
+    when the Panel closes. The panel is always visible when the Peek Promo is
+    shown, so this histogram will always be emitted after a Promo is shown
+    (except in the case of a crash). This histogram does not care whether the
+    Panel was opened.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPeekPromoCountUntilOpened"
+    units="count">
+  <owner>donnd@chromium.org</owner>
+  <owner>pedrosimonetti@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of times the Peek Promo was seen until the Panel was opened. This
+    histogram will be emitted when the Panel closes, if the Panel was opened
+    with the Peek Promo visible. If the Panel is not opened, nothing will be
+    emitted.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPeekPromoOutcome"
+    enum="ContextualSearchPeekPromoOutcome">
+  <owner>donnd@chromium.org</owner>
+  <owner>pedrosimonetti@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The outcome of the Contextual Search Peek Promo for those who have seen the
+    promo and for those who would have seen the promo if it was enabled, so we
+    can compare the effect of the promo on users opening the Panel. This
+    histogram will be emitted when the Panel closes, if the conditions to
+    display the Peek Promo are met, regardless of whether the Peek Promo was
+    actually visible (the Promo is controlled by Finch) and regardless of
+    whether the Panel was opened.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPreferenceState"
+    enum="ContextualSearchPreferenceState">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The state of the Contextual Search Preference. Can be logged multiple times.
+    Used to determine the population size (user view). Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPreferenceStateChange"
+    enum="ContextualSearchPreferenceState">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The Contextual Search preference state after a modification from the
+    preference menu. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPrefetchSummary"
+    enum="ContextualSearchPrefetchSummary">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    A summary histogram for prefetch timings, indicating fully preloaded, etc.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPrevious28DayCtr" units="%">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The CTR from the previous 28 day period for each user, expressed as a
+    percentage. Logged the first time the panel is closed in each new week.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPrevious28DayImpressions" units="views">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of user impressions of the Bar from the previous 28 day period.
+    Logged the first time the panel is closed in each new week. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPreviousWeekCtr" units="%">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The CTR from the previous week for each user, expressed as a percentage.
+    Logged the first time the panel is closed in each new week. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPreviousWeekImpressions" units="views">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of user impressions of the Bar from the previous week. Logged the
+    first time the panel is closed in each new week. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPromoOpenCount" units="opens">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The total count of times that the bar with the promo has been opened. Once
+    the user decides, this counter is no longer updated.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPromoOutcomeByGesture"
+    enum="ContextualSearchOutcomeByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The outcome of the promo broken down by original triggering gesture. Logged
+    for each view of the promo.  Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPromoSeenByGesture"
+    enum="ContextualSearchSeenByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether the promo was seen, broken down by original triggering gesture.
+    Logged each time the promo was activated.  Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPromoTapsBeforeFirstOpen" units="taps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The historic number of taps that showed a peeking bar with the opt-out promo
+    before the first time the user opened the panel.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPromoTapsForNeverOpened" units="taps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The historic number of taps that showed a peeking bar with the opt-out promo
+    for users who have never opened the panel. This count may be limited by the
+    Finch config param promo_on_limited_taps.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchPromoTapsRemaining" units="taps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The number of remaining taps that can trigger the promo for this user.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchQuickActions.Category"
+    enum="ContextualSearchQuickActionCategory">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The category of quick actions shown in the Contextual Search bar. Recorded
+    when the quick action is set. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchQuickActions.Clicked"
+    enum="BooleanClicked">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether a quick action in the Contextual Search bar was clicked. Recorded
+    when Contextual Search is dismissed. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchQuickActions.IntentResolution"
+    enum="ContextualSearchQuickActionIntentResolution">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether a Contextual Search quick action intent resolved to zero, one, or
+    many apps. Recorded when the quick action intent URI is resolved.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchQuickActions.ResultsSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen as part of a Contextual Search when a quick
+    action was shown. Recorded when Contextual Search is dismissed. Implemented
+    for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchQuickActions.Shown" enum="BooleanShown">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether a quick action was shown in the Contextual Search bar. Recorded when
+    the quick action is set. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchQuickAnswerSeen"
+    enum="ContextualSearchQuickAnswerSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether a Quick Answer was activated, considered an answer, and seen.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchRecentScrollNotSeen" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The duration since a recent scroll when the results were not seen. Recorded
+    when the UX is hidden. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchRecentScrollSeen" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The duration since a recent scroll when the results were seen. Recorded when
+    the UX is hidden. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchRecentScrollSuppression"
+    enum="ContextualSearchTapSuppression">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether showing the Tap to Search UX in response to a Tap was suppressed by
+    a recent scroll. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchResolutionDuration" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from starting a resolving search until the Search Term Resolves.
+    Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchResolvedSearchDuration" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time from starting a resolving search until the results in the SERP
+    start to become viewable. Applies only to prefetched requests. Implemented
+    for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchResolvedTermWords"
+    enum="ContextualSearchResolvedTermWords">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether the search term was single or multi-word, logged at the time that
+    any Search Term Resolution Response is recieved.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchResultsSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen as part of a contextual search. Implemented
+    for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchResultsSeenByGesture"
+    enum="ContextualSearchSeenByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen, broken down by original triggering
+    gesture. Only includes users that have enabled. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchResultsSeenSelectionWasUrl"
+    enum="ContextualSearchSeenByGesture">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen (Contextual Search panel was opened) when
+    the selection was part of a URL, broken down by original triggering gesture.
+    Includes both users that have enabled Contextual Search and users that are
+    undecided (have neither enabled or disabled the feature). Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchScreenTopSuppressed"
+    enum="ContextualSearchTapSuppression">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether Taps near the top of the screen was suppressed. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchSecondTapSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether results were seen for a Tap during suppression when Tap Suppression
+    is enabled. Recorded when the UX is hidden. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchSelectionValid"
+    enum="ContextualSearchSelectionValid">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether a Contextual Search selection was valid. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchSerpLoadedOnClose"
+    enum="ContextualSearchLoaded">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether the SERP was fully loaded when an opened panel was closed.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchShouldTranslate"
+    enum="ContextualSearchShouldTranslate">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Emitted when a translate one-box should be forced, to indicate if it
+    actually was forced or simply would have been forced if not disabled by a
+    flag in the variations_service.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchStartedWithCapitalResultsSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether search results were seen during a contextual search where the
+    selected text started with a capital letter but was not all capital letters.
+    Only logged when contextual search is triggered due to a tap. Implemented
+    for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchTapsSinceOpenDecided" units="taps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The count of taps that showed a peeking bar without the opt-out promo since
+    this user has last opened the panel.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchTapsSinceOpenUndecided" units="taps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The count of taps that showed a peeking bar with the opt-out promo since
+    this user has last opened the panel.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchTapSuppressionSeen"
+    enum="ContextualSearchResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether results were seen for a Tap before suppression when Tap Suppression
+    is enabled. Recorded when the UX is hidden. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram
+    name="Search.ContextualSearchTapSuppressionSeen.AnyHeuristicSatisfied"
+    enum="ContextualSearchSuppressionResultsSeen">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Whether results were seen for a Tap and whether any suppression heuristic
+    was satisifed. Recorded when the UX is still shown (suppression not enabled,
+    only logged). Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchTimeToSearch" units="ms">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The time between tapping on a word and performing a search. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchTopLocationNotSeen" units="dps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The DPs count histogram for Taps that were not seen. Implemented for
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.ContextualSearchTopLocationSeen" units="dps">
+  <owner>donnd@chromium.org</owner>
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    The DPs count histogram for Taps that were seen. Implemented for Android.
+  </summary>
+</histogram>
+
+<histogram name="Search.DefaultSearchChangeOrigin"
+    enum="DefaultSearchChangeOrigin">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The origin/cause of a change to the default search provider.
+  </summary>
+</histogram>
+
+<histogram name="Search.DefaultSearchProvider" enum="OmniboxSearchEngine">
+  <obsolete>
+    Made obsolete around Chrome 32.  Use Search.DefaultSearchProviderType
+    instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The id of the default search engine that is loaded after Chrome startup. See
+    src/chrome/browser/search_engines/prepopulate_engines.json for more info.
+  </summary>
+</histogram>
+
+<histogram name="Search.DefaultSearchProviderType"
+    enum="OmniboxSearchEngineType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The type of the default search engine that is loaded when a profile is
+    opened or after a profile reset.  Note that at least one profile is opened
+    on startup. Due to an error, there was a period from roughly May 9 2014 to
+    May 23 2014 during which this was not being logged.
+  </summary>
+</histogram>
+
+<histogram name="Search.DesktopSearch.RedirectionInfobarCloseAction"
+    enum="DesktopSearchRedirectionInfobarCloseAction">
+  <obsolete>
+    Deprecated 05/2016 because desktop searches are no longer opened in the
+    default browser.
+  </obsolete>
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    The action performed by the user to close the infobar explaining that a
+    desktop search has been redirected to the default search engine.
+  </summary>
+</histogram>
+
+<histogram name="Search.DesktopSearch.URLAction" enum="DesktopSearchURLAction">
+  <obsolete>
+    Deprecated 05/2016 because desktop searches are no longer opened in the
+    default browser.
+  </obsolete>
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    The action performed when a desktop search URL is passed to the browser
+    through the command line.
+  </summary>
+</histogram>
+
+<histogram name="Search.GsaBroadcastsAccountChanges"
+    enum="BooleanAccountChange">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    On Android, whether GSA tells Chrome about account changes through the
+    service or through a broadcast. This is reported at most once per Chrome
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Search.GsaProcessMemoryPss" units="KB">
+  <owner>lizeb@chromium.org</owner>
+  <summary>
+    On Android, when Chrome connects to a bound service exposed by GSA, the
+    memory footprint of the GSA process in KB, as measured by PSS. Reported at
+    most once per Chrome startup.
+  </summary>
+</histogram>
+
+<histogram name="Search.MigratedPrefToDictionaryValue" enum="BooleanHit">
+  <owner>caitkp@chromium.org</owner>
+  <summary>
+    The number of times that a user-selected DSE was migrated from separate
+    String/List/..Value preferences to the new single DictionaryValue used in
+    M36.
+  </summary>
+</histogram>
+
+<histogram
+    name="Security.HTTPBad.NavigationStartedAfterUserWarnedAboutSensitiveInput"
+    units="ms">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Records the time from when a page was put into a warning state because of a
+    sensitive input on an HTTP page until a navigation starts. Recorded at most
+    once per main-frame navigation. The Finch trial 'mark-non-secure-as'
+    controls whether the user sees an omnibox warning for this state, or just a
+    console warning.
+  </summary>
+</histogram>
+
+<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput"
+    enum="BooleanShown">
+  <obsolete>
+    Deprecated on 2016-11-10 because this is replaced by two separate metrics:
+    Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard and
+    Security.HTTPBad.UserWarnedAboutSensitiveInput.Password.
+  </obsolete>
+  <owner>elawrence@chromium.org</owner>
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
+    security-sensitive form field was rendered in a non-secure context. Logged
+    at most once per main-frame navigation.
+  </summary>
+</histogram>
+
+<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.CreditCard"
+    enum="BooleanShown">
+  <owner>elawrence@chromium.org</owner>
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
+    credit card form field was rendered in a non-secure context. Logged at most
+    once per main-frame navigation.
+  </summary>
+</histogram>
+
+<histogram name="Security.HTTPBad.UserWarnedAboutSensitiveInput.Password"
+    enum="BooleanShown">
+  <owner>elawrence@chromium.org</owner>
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Whether a &quot;Not Secure&quot; warning was shown in the omnibox because a
+    password form field was rendered in a non-secure context. Logged at most
+    once per main-frame navigation.
+  </summary>
+</histogram>
+
+<histogram
+    name="Security.HTTPBad.WebContentsDestroyedAfterUserWarnedAboutSensitiveInput"
+    units="ms">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Records the time delta between when a page was put into a warning state
+    because of a sensitive input on an HTTP page and when the WebContents was
+    destroyed. Recorded at most once per main-frame navigation, and it is not
+    recorded if the user starts a navigation before the WebContents is
+    destroyed. The Finch trial 'mark-non-secure-as' controls whether the user
+    sees an omnibox warning for this state, or just a console warning.
+  </summary>
+</histogram>
+
+<histogram name="Security.PageInfo.Action.HttpsUrl.Dangerous"
+    enum="WebsiteSettingsAction">
+  <owner>estark@chromium.org</owner>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks Page Info bubble actions that take place on an HTTPS URL that has
+    been marked dangerous or not secure (such as for malware or broken HTTPS).
+  </summary>
+</histogram>
+
+<histogram name="Security.PageInfo.Action.HttpsUrl.Downgraded"
+    enum="WebsiteSettingsAction">
+  <owner>estark@chromium.org</owner>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks Page Info bubble actions that take place on a valid HTTPS URL that
+    has a security issue (e.g. mixed content).
+  </summary>
+</histogram>
+
+<histogram name="Security.PageInfo.Action.HttpsUrl.Valid"
+    enum="WebsiteSettingsAction">
+  <owner>estark@chromium.org</owner>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks Page Info bubble actions that take place on a valid HTTPS URL with no
+    security issues (e.g. no mixed content).
+  </summary>
+</histogram>
+
+<histogram name="Security.PageInfo.Action.HttpUrl.Dangerous"
+    enum="WebsiteSettingsAction">
+  <owner>estark@chromium.org</owner>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks Page Info bubble actions that take place on an HTTP URL that has been
+    marked dangerous (such as for malware).
+  </summary>
+</histogram>
+
+<histogram name="Security.PageInfo.Action.HttpUrl.Neutral"
+    enum="WebsiteSettingsAction">
+  <owner>estark@chromium.org</owner>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks Page Info bubble actions that take place on an HTTP URL that does not
+    have an omnibox security indicator warning associated with it.
+  </summary>
+</histogram>
+
+<histogram name="Security.PageInfo.Action.HttpUrl.Warning"
+    enum="WebsiteSettingsAction">
+  <owner>estark@chromium.org</owner>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks Page Info bubble actions that take place on an HTTP URL that has been
+    given a &quot;Not secure&quot; warning in the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="SequencedWorkerPool.ShutdownDelayTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    How long it takes to wait for tasks that block shutdown to complete.
+  </summary>
+</histogram>
+
+<histogram name="SequencedWorkerPool.TaskCount">
+  <obsolete>
+    Histogram wasn't even reported anymore when ownership was taken in 11/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    How many pending tasks there are on each request for work from a worker
+    thread.
+  </summary>
+</histogram>
+
+<histogram name="SequencedWorkerPool.UnrunnableTaskCount">
+  <obsolete>
+    Histogram wasn't even reported anymore when ownership was taken in 11/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>How many tasks we skip over to find the next runnable task.</summary>
+</histogram>
+
+<histogram name="ServicesCustomization.LoadResult"
+    enum="ServicesCustomizationLoadResult">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    Records result of fetching and parsing OEM customization manifest. See
+    ServicesCustomizationDocument class for more info. Used only on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"
+    units="ms">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time taken for the browser to find and possibly start an active worker
+    to dispatch a FetchEvent for a main frame resource request. For context, a
+    FetchEvent can only be dispatched to an ACTIVATED worker that is running (it
+    has been successfully started). The measurements starts when the browser
+    process receives the request. The browser then finds the worker appropriate
+    for this request (if there is none, this metric is not recorded). If that
+    worker is already started, the browser process can send the request to it,
+    so the measurement ends quickly. Otherwise the browser process has to start
+    the worker and the measurement ends when the worker is successfully started
+    (we do not include in the time it takes for the worker to become ACTIVATED).
+    The metric is not recorded in the following situations: 1) The worker was in
+    state INSTALLED or ACTIVATING, and the browser had to wait for it to become
+    ACTIVATED. This is to avoid including the time to execute the activate event
+    handlers in the worker's script. 2) The worker was started for the fetch AND
+    DevTools was attached during startup. This is intended to avoid including
+    the time for debugging. 3) The request is for New Tab Page. This is because
+    it tends to dominate the stats and makes the results largely skewed.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ActivateEvent.Time" units="ms">
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerGlobalScope.onactivate. Includes the time for
+    waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ActivateEventExecutionTime" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of ServiceWorker.ActivateEvent.Time.
+  </obsolete>
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerGlobalScope.onactivate. Includes the time for
+    waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ActivateEventStatus"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of dispatching the activate event to the worker. This is recorded
+    to both ServiceWorker.ActivateEventStatus and whichever of
+    ServiceWorker.ActivateEventStatus_InShutdown
+    ServiceWorker.ActivateEventStatus_NotInShutdown is appropriate. (InShutdown
+    means the context was null or ServiceWorkerProcessManger::Shutdown was
+    called.)
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.BackgroundSyncEvent.Time" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a SyncEvent to a Service Worker and
+    receiving a message that it finished handling the event. Includes the time
+    for the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.Database.DestroyDatabaseResult"
+    enum="ServiceWorkerDatabaseStatus">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of destroy database operations in ServiceWorkerDatabase.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.Database.OpenResult"
+    enum="ServiceWorkerDatabaseStatus">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of opening a database for ServiceWorkerDatabase.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.Database.ReadResult"
+    enum="ServiceWorkerDatabaseStatus">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>Records result of read operations in ServiceWorkerDatabase.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.Database.WriteResult"
+    enum="ServiceWorkerDatabaseStatus">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of write operations in ServiceWorkerDatabase.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.DiskCache.InitResult">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of opening a disk cache for ServiceWorkerDiskCache.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.DiskCache.ReadResponseResult"
+    enum="ServiceWorkerReadResponseResult">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of reading response from ServiceWorkerDiskCache.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.DiskCache.WriteResponseResult"
+    enum="ServiceWorkerWriteResponseResult">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of writing response into ServiceWorkerDiskCache.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.DiskCacheMigrator.MigrationResult"
+    enum="ServiceWorkerDiskCacheMigrationStatus">
+  <obsolete>
+    Deprecated because the migrator was removed as of 12/2015.
+  </obsolete>
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of ServiceWorkerDiskCacheMigrator::Start that migrates
+    resources in BlockFile backend to Simple backend.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.DiskCacheMigrator.MigrationTime" units="ms">
+  <obsolete>
+    Deprecated because the migrator was removed as of 12/2015.
+  </obsolete>
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerDiskCache migration from BlockFile to Simple.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.DiskCacheMigrator.NumberOfMigratedResources"
+    units="count">
+  <obsolete>
+    Deprecated because the migrator was removed as of 12/2015.
+  </obsolete>
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    The counts of resources migrated by ServiceWorkerDiskCacheMigrator. This
+    includes the main script and imported scripts.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.EventDispatchingDelay" units="ms">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time taken between sending an event IPC from the browser process to a
+    Service Worker and executing the event handler in the Service Worker.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.EventHandledRatioType.Fetch"
+    enum="ServiceWorkerEventHandleRatioType">
+  <owner>kinuko@chromium.org</owner>
+  <summary>
+    Records the proportion of (non foreign) fetch events that are handled
+    compared to the number of events that are fired for a ServiceWorker.
+    Recorded each time the ServiceWorker is stopped when at least one event was
+    fired.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.EventHandledRatioType.ForeignFetch"
+    enum="ServiceWorkerEventHandleRatioType">
+  <owner>mek@chromium.org</owner>
+  <summary>
+    Records the proportion of foreign fetch events that are handled compared to
+    the number of events that are fired for a ServiceWorker.  Recorded each time
+    the ServiceWorker is stopped when at least one event was fired.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ExtendableMessageEvent.Time" units="ms">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    The time taken between dispatching an ExtendableMessageEvent to a Service
+    Worker and receiving a message that it finished handling the event. Includes
+    the time for the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ExternalRequest.Time" units="ms">
+  <owner>lazyboy@chromium.org</owner>
+  <summary>
+    The duration an external request spent to keep a service worker alive.
+    Currently, extension service workers use external requests to keep the
+    worker alive during the time the worker requests an extension API.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEvent.Fallback.Time" units="ms">
+  <owner>jeremyarcher@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a FetchEvent to a Service Worker and
+    receiving a fallback-to-network reply.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEvent.HasResponse.Time" units="ms">
+  <owner>jeremyarcher@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a FetchEvent to a Service Worker and
+    receiving a response. Includes the time for the respondWith() promise to
+    settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEvent.MainResource.Status"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of dispatching a fetch event to a Service Worker for a main
+    resource request.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEvent.Subresource.Status"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of dispatching a fetch event to a Service Worker for a
+    subresource request.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEvent.Time" units="ms">
+  <obsolete>
+    Deprecated on 2015-07-13; please use
+    ServiceWorker.FetchEvent.HasResponse.Time or
+    ServiceWorker.FetchEvent.Fallback.Time.
+  </obsolete>
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerGlobalScope.onfetch. Includes the time for
+    the respondWith() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEvent.WaitUntil.Time" units="ms">
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a FetchEvent to a Service Worker and
+    finishing the FetchEvent. Includes the time for the waitUntil() promise to
+    settle. If there is no waitUntil promise, this will be almost the same with
+    HasResponse.Time or Fallback.Time.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.FetchEventExecutionTime" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of ServiceWorker.FetchEvent.Time.
+  </obsolete>
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerGlobalScope.onfetch. Includes the time for
+    the respondWith() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ForeignFetch.OriginCount">
+  <owner>mek@chromium.org</owner>
+  <summary>
+    The number of origins a particular service worker with foreign fetch
+    registrations will intercept fetches from. A value of zero indicates that
+    the foreign fetch service worker intercepts requests from any origin.
+    Recorded at the end of a successful install event, if the service worker
+    registered for foreign fetch. A service worker that registers for foreign
+    fetch must always intercept fetches from at least one origin or intercept
+    fetches from all origins.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ForeignFetch.ScopeCount">
+  <owner>mek@chromium.org</owner>
+  <summary>
+    The number of foreign fetch scopes a particular service worker registered
+    for. Recorded at the end of every successful install event. A value of zero
+    indicates that the service worker did not register for foreign fetch.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ForeignFetchEvent.Fallback.Time" units="ms">
+  <owner>mek@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a ForeignFetchEvent to a Service Worker
+    and receiving a fallback-to-network reply. Includes the time for the
+    waitUntil() promise to settle, if any.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ForeignFetchEvent.HasResponse.Time" units="ms">
+  <owner>mek@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a ForeignFetchEvent to a Service Worker
+    and receiving a response. Includes the time for the respondWith() promise to
+    settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ForeignFetchEvent.WaitUntil.Time" units="ms">
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a ForeignFetchEvent to a Service Worker
+    and finishing the ForeignFetch. Includes the time for the waitUntil()
+    promise to settle. If there is no waitUntil promise, this will be almost the
+    same with HasResponse.Time or Fallback.Time.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.InstallEvent.Time" units="ms">
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    The time taken between dispatching an InstallEvent to a Service Worker and
+    receiving a message that it finished handling the event. Includes the time
+    for the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.InstallEventExecutionTime" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of ServiceWorker.InstallEvent.Time.
+  </obsolete>
+  <owner>shimazu@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerGlobalScope.oninstall. Includes the time for
+    the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.InstallEventStatus"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>The result of dispatching the install event to the worker.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.MainFramePageLoad" enum="ServiceWorkerSite">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    Counts main frame page loads controlled by a service worker.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.MessageEvent.Time" units="ms">
+  <obsolete>
+    Deprecated 2016-04 in favor of ServiceWorker.ExtendableMessageEvent.Time.
+  </obsolete>
+  <owner>shimazu@chromium.org</owner>
+  <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.MessageEventExecutionTime" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of ServiceWorker.MessageEvent.Time.
+  </obsolete>
+  <owner>shimazu@chromium.org</owner>
+  <summary>Execution time of ServiceWorkerGlobalScope.onmessage.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.NavigationHintPrecision" enum="BooleanEnabled">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The precision of the speculative launch of Service Workers for navigation
+    hints. Recorded when the worker is stopped. If there was no main/sub frame
+    fetch event fired on the worker, this value is false. This means that the
+    speculative launch wasn't helpful.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.NotificationClickEvent.Time" units="ms">
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a NotificationClickEvent to a Service
+    Worker and receiving a message that it finished handling the event. Includes
+    the time for the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.NotificationClickEventExecutionTime" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of ServiceWorker.NotificationClickEvent.Time.
+  </obsolete>
+  <owner>peter@chromium.org</owner>
+  <summary>
+    Execution time of ServiceWorkerGlobalScope.onnotificationclick.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.NotificationCloseEvent.Time" units="ms">
+  <owner>nsatragno@chromium.org</owner>
+  <owner>peter@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a NotificationCloseEvent to a Service
+    Worker and receiving a message that it finished handling the event. Includes
+    the time for the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.PageLoad" enum="ServiceWorkerSite">
+  <owner>falken@chromium.org</owner>
+  <summary>Counts page loads controlled by a service worker.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.PushEvent.Time" units="ms">
+  <owner>johnme@chromium.org</owner>
+  <summary>
+    The time taken between dispatching a PushEvent to a Service Worker and
+    receiving a message that it finished handling the event. Includes the time
+    for the waitUntil() promise to settle.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.PushEventExecutionTime" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of ServiceWorker.PushEvent.Time.
+  </obsolete>
+  <owner>johnme@chromium.org</owner>
+  <summary>Execution time of ServiceWorkerGlobalScope.onpush.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.RequestTimeouts.Count"
+    enum="ServiceWorkerMetrics.EventType">
+  <owner>jeremyarcher@google.com</owner>
+  <summary>
+    The number of Service Worker request timeouts, by request type.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ScriptCachedMetadataSize" units="bytes">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The length of cached metadata of Service Worker scripts. Logged on each load
+    of Service Worker script only when the cached metadata is available. It
+    doesn't include the size of imported scripts.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ScriptCachedMetadataTotalSize" units="bytes">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The total length of cached metadata of Service Worker scripts. Logged on
+    each start of Service Worker only when the cached metadata is available. It
+    includes the main script and imported scripts.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ScriptCount" units="count">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The counts of scripts per Service Worker. Logged on each start of Service
+    Worker. It includes the main script and imported scripts.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ScriptLoadSuccess" enum="BooleanSuccess">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Whether loading the service worker script succeeded. Only recorded for
+    installed service workers. Recorded by the browser process when reported
+    back by the renderer during worker startup.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ScriptSize" units="bytes">
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The length of Service Worker scripts. Logged on each load of Service Worker
+    script. It doesn't include the size of imported scripts.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.ScriptTotalSize" units="bytes">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The total length of Service Worker scripts. Logged on each start of Service
+    Worker. It includes the main script and imported scripts.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.SendStopWorker.Status"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of trying to send the IPC message to a renderer process telling
+    it to stop an embedded worker. Recorded in EmbeddedWorkerInstance::Stop.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartNewWorker.Status"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of trying to start a Service Worker that has not yet installed.
+    See also ServiceWorker.StartWorker.Status for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartNewWorker.Time" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken to start a Service Worker that has not yet installed, from
+    process allocation to ACK of started from the renderer (which occurs after
+    script execution). This may include script download time. The metric is not
+    recorded if DevTools was ever attached to the Service Worker during startup.
+    See also ServiceWorker.StartWorker.Time for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.AfterFailureStreak"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of trying to start a service worker after it has failed
+    consecutively. Recorded only for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.FailureStreak" units="count">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The number of consecutive startup failures of a service worker. Recorded
+    each time the service worker failed (so there is double counting: failing
+    twice results in 1 and 2 being logged). Only for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.FailureStreakEnded" units="count">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    When a worker startup succeeded after failing, the number of times the
+    worker had consecutively failed. Recorded only for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.Purpose"
+    enum="ServiceWorkerMetrics.EventType">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The purpose for starting up a service worker. Recorded only for installed
+    workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.Status"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of trying to start a Service Worker that is already installed.
+    See also ServiceWorker.StartNewWorker.Status for new workers. See also
+    ServiceWorker.StartWorker.StatusByPurpose_* for the breakdown by event type.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.StatusByPurpose"
+    enum="ServiceWorkerStatusCode">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of trying to start a service worker for a particular event type
+    (see ServiceWorker.StartWorker.Status for the total). Only recorded for
+    installed workers. For event type:
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.Time" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken to start a Service Worker that is already installed, from
+    process allocation to ACK of started from the renderer (which occurs after
+    script execution). The metric is not recorded if DevTools was ever attached
+    to the Service Worker during startup. See also
+    ServiceWorker.StartNewWorker.Time for new workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.Timeout.StartPurpose"
+    enum="ServiceWorkerMetrics.EventType">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Records the start purpose for a service worker that timed out while starting
+    up. Recorded only for installed workers.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StartWorker.TimeoutPhase"
+    enum="EmbeddedWorkerStartingPhase">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The phase the EmbeddedWorker was in when ServiceWorker startup timed out.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StopWorker.Status"
+    enum="ServiceWorkerStopStatus">
+  <obsolete>
+    Removed from code in Oct 2015, replaced with ServiceWorker.WorkerStopped.
+  </obsolete>
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The result of trying to stop a Service Worker. Recorded only for installed
+    Service Workers that succesfully stopped or were detected as stalling. If a
+    worker stalled and later stopped, it will be recorded as both STALLED and
+    STALLED_THEN_STOPPED.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.StopWorker.Time" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>The time taken to stop a Service Worker.</summary>
+</histogram>
+
+<histogram name="ServiceWorker.Storage.DeleteAndStartOverResult"
+    enum="ServiceWorkerDeleteAndStartOverResult">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records result of storage recovery operations in ServiceWorkerStorage.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.Storage.DiskCacheMigrationResult"
+    enum="ServiceWorkerDiskCacheMigrationResult">
+  <obsolete>
+    Deprecated because the migrator was removed as of 12/2015.
+  </obsolete>
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records the final result of diskcache migration in ServiceWorkerStorage.
+    ServiceWorker.DiskCacheMigrator.MigrationResult records more detailed status
+    of migration operations.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.Storage.PurgeResourceResult"
+    enum="NetErrorCodes">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records successes and failures of purging a stale resource in
+    ServiceWorkerStorage.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.TerminateThread.Time" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The time taken in the renderer process between the main thread asking the
+    worker thread to terminate and getting ACK that it terminated.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.TimeBetweenEvents" units="ms">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Called at the beginning of each ServiceWorkerVersion::Dispatch*Event
+    function: the time elapsed since idle. Generally this is the time between
+    one event ending and one event starting, if the worker remained running in
+    the interim.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.UnhandledEventRatio" units="%">
+  <obsolete>
+    Deprecated 2015-06 in favor of ServiceWorker.EventHandledStatus*.
+  </obsolete>
+  <owner>kinuko@chromium.org</owner>
+  <summary>
+    Records the ratio of unhandled events to all events that are dispatched to
+    each ServiceWorker.  Recorded when each ServiceWorkerVersion is destructed.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.URLRequestJob.FallbackedRequestMode"
+    enum="FetchRequestMode">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    Records the the mode of request that was fallbacked to the network by the
+    Service Worker.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.URLRequestJob.MainResource.Result"
+    enum="ServiceWorkerURLRequestJobResult">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Records the result of a main resource request forwarded to a Service Worker.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.URLRequestJob.MainResource.StatusZeroError"
+    enum="ServiceWorkerResponseError">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Records the error provided when the renderer returns a response with status
+    code zero to a main resource request forwarded to a Service Worker (i.e.,
+    ServiceWorker.URLRequestJob.MainResource.Result was
+    REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO).
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.URLRequestJob.Subresource.Result"
+    enum="ServiceWorkerURLRequestJobResult">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Records the result of a subresource request forwarded to a Service Worker.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.URLRequestJob.Subresource.StatusZeroError"
+    enum="ServiceWorkerResponseError">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    Records the error provided when the renderer returns a response with status
+    code zero to a subresource request forwarded to a Service Worker (i.e.,
+    ServiceWorker.URLRequestJob.Subresource.Result was
+    REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO).
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.WorkerForMessageFound" enum="Boolean">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    True if a message from the renderer intended for a browser-side embedded
+    worker instance found its recipient. False if the instance did not exist
+    when the message was received (e.g., it was a detached worker). Recorded in
+    EmbeddedWorkerRegistry::GetWorkerForMessage.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorker.WorkerStopped" enum="ServiceWorkerStoppedStatus">
+  <owner>falken@chromium.org</owner>
+  <summary>
+    The mechanism by which a service worker entered running status STOPPED.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Cache" units="ms">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The time to perform operations on the Cache object in the ServiceWorker
+    Cache API.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Cache.AddResponseType"
+    enum="ServiceWorkerCacheResponseType">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>
+    Records the response type to be added in the Cache by Cache.add()/addAll().
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Cache.AllWritesResponseType"
+    enum="ServiceWorkerCacheResponseType">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Records the response type to be added in the Cache by all operations that
+    write to the cache.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.CacheStorage" units="ms">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The time to perform operations on the CacheStorage object in the
+    ServiceWorker Cache API.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.CreateCacheStorageResult"
+    enum="BooleanCreated">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    Whether a new ServiceWorkerCacheStorage and its directory were successfully
+    created on disk.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.InitBackendResult"
+    enum="ServiceWorkerCacheErrorType">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The result of opening the backend in the ServiceWorker Cache API.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow" enum="Boolean">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    An operation is slow (true) if it takes at least 10 seconds to run. If an
+    operation never completes, it will still be recorded as slow.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Scheduler.OperationDuration" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The time in ms from when an operation is started until it completes.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Scheduler.QueueDuration" units="ms">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The time in ms from when an operation was queued until its task is posted.
+  </summary>
+</histogram>
+
+<histogram name="ServiceWorkerCache.Scheduler.QueueLength" units="operations">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The number of operations in the scheduling queue just before enqueuing a new
+    operation.
+  </summary>
+</histogram>
+
+<histogram name="Session.TotalDuration" units="ms">
+  <owner>mariakhomenko@chromium.org</owner>
+  <owner>fqian@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The length of a session (launch/foregrounding to backgrounding) in
+    milliseconds. On desktop it also takes into account user interaction and
+    audio events. Starting from M55 the session length is recorded by
+    discounting for default inactivity timeout on desktop.
+  </summary>
+</histogram>
+
+<histogram name="SessionCrashed.Bubble" enum="SessionCrashedBubbleUserAction">
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>How did the user interact with the SessionCrashed Bubble?</summary>
+</histogram>
+
+<histogram name="SessionRestore.Actions" enum="SessionRestoreActions">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The actions that have occurred in a session restore timeline. These are to
+    be interpreted as raw event counts. Tabs are almost certainly deferred due
+    to the existence memory pressure, but this may not always be the case.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.AllTabsLoaded" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    The time from SessionRestore start until all tabs have finished loading.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.command_size" units="bytes">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    The size of the commands written to disk. See SessionBackend for details.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.FirstTabPainted" units="ms">
+  <obsolete>
+    Deprecated 2014-10 in favor of SessionRestore.ForegroundTabFirstPaint and
+    ultimately SessionRestore.ForegroundTabFirstPaint3.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="SessionRestore.ForegroundTabFirstLoaded" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    The time from SessionRestore start until a visible tab has finished loading.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.ForegroundTabFirstPaint" units="ms">
+  <obsolete>
+    Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2
+    and ultimately SessionRestore.ForegroundTabFirstPaint3.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Deprecated 2015-03-13 in favor of SessionRestore.ForegroundTabFirstPaint2
+    and ultimately SessionRestore.ForegroundTabFirstPaint3.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.ForegroundTabFirstPaint2" units="ms">
+  <obsolete>
+    Deprecated 2015-05 in favor of SessionRestore.ForegroundTabFirstPaint3.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    The time from SessionRestore start until a visible tab's first paint. This
+    metric only records paints that have occurred after a tab has loaded.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.ForegroundTabFirstPaint3" units="ms">
+  <owner>chrisha@chromium.org</owner>
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    The time from SessionRestore start until a visible tab's first paint.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.FrameUniqueNameLength" units="bytes">
+  <owner>dcheng@chromium.org</owner>
+  <summary>
+    Records the length of unique names for web frames that are saved as part of
+    session restore data. It is logged each time the unique name changes, which
+    typically happens when a web frame is first created or its name is changed
+    by mutating window.name.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.last_session_file_size" units="KB">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>The size, in k, of the last session file on disk.</summary>
+</histogram>
+
+<histogram name="SessionRestore.NavEntryCommittedLongPeriod">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Like NavEntryCommittedPeriod, but specifically to provide a clearer
+    breakdown of samples in the 10 minutes - 8 hours range.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.NavEntryCommittedPeriod" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Milliseconds between subsequent Save() operations due to a nav entry being
+    committed (new tab created + nav initiated).
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.NavigationListPrunedLongPeriod">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Like NavListPrunedPeriod, but specifically to provide a clearer breakdown of
+    samples in the 10 minutes - 8 hours range.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.NavigationListPrunedPeriod" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Milliseconds between subsequent Save() operations due to the navigation list
+    being pruned (typically a change in back/forward stacks).
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.ParallelTabLoads">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    The number of tabs that were loaded simultaneously when restoring a session.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.read_session_file_time" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Amount of time to read and assemble the commands from the last session.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.RestoredSubframeURL" enum="BooleanRestoredURL">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    How often history navigations in subframes restore a different URL than the
+    frame's default src URL.  This indicates how much users rely on subframe
+    session history items.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.RestoreSubframeFramePathLength" units="bytes">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    Records the length of unique names that include frame paths, for subframes
+    that are restoring a different URL than the frame's default src URL during a
+    history navigation.  Large values here would indicate a possible challenge
+    for the plan to truncate frame unique names (to save memory).
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.SaveLongPeriod">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Like SavePeriod, but specifically to provide a clearer breakdown of samples
+    in the 10 minutes - 8 hours range.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.SavePeriod" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Amount of time between subsequent SessionService Save() operations (aka
+    updates to session data).
+  </summary>
+  <details>
+    Periods longer than 10 minutes are grouped together; see SaveLongPeriod for
+    resolution.
+  </details>
+</histogram>
+
+<histogram name="SessionRestore.SubFrameUniqueNameChangedBeforeFirstCommit"
+    enum="BooleanSuccess">
+  <owner>dcheng@chromium.org</owner>
+  <summary>
+    How often a subframe is assigned a new name between the initial empty
+    document and the first navigation.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.TabActions" enum="SessionRestoreTabActions">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    A breakdown of key events that occur to individual tabs as they are
+    processed by an ongoing session restore.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.TabClosedLongPeriod">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    TabClosedPeriod, but specifically to provide a clearer breakdown of samples
+    in the 10 minutes - 8 hours range.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.TabClosedPeriod" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>sky@chromium.org</owner>
+  <summary>
+    Milliseconds between subsequent Save() operations due to a tab being closed.
+  </summary>
+</histogram>
+
+<histogram name="SessionRestore.TabCount" units="tabs">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The number of tabs involved in a single session restore event.
+  </summary>
+</histogram>
+
+<histogram name="SessionStorageDatabase.Commit" enum="LevelDBStatus">
+  <owner>cmumford@chromium.org</owner>
+  <summary>The result of a commit to the sessionStorage database.</summary>
+</histogram>
+
+<histogram name="SessionStorageDatabase.Open" enum="SessionStorageDatabaseOpen">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    The result (success, failure, or database recreated) of trying to open the
+    LevelDB database for sessionStorage.
+  </summary>
+</histogram>
+
+<histogram name="Settings.DefaultSearchProvider" enum="OmniboxSearchEngine">
+  <obsolete>
+    Deprecated in Chrome 30.  Use Search.DefaultSearchProviderType instead.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The id of the default search engine domain that is specified in user
+    preferences when a profile is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Settings.EnforcementGroupDeterminedFromTrial"
+    enum="BooleanSuccess">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Whether the SettingsEnforcement group was successfully determined from the
+    field trial or if it had to revert to the hardcoded default.
+  </summary>
+</histogram>
+
+<histogram name="Settings.FilterOnLoadTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The amount of time it took to run PrefHashFilter::FilterOnLoad on startup.
+  </summary>
+</histogram>
+
+<histogram name="Settings.FilterSerializeDataTime" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The amount of time it took to run PrefHashFilter::FilterSerializeData on the
+    UI thread prior to writing the Preferences file to disk. Only logged when
+    PrefHashFilter::FilterSerializeData actually had work to do.
+  </summary>
+</histogram>
+
+<histogram name="Settings.GivenShowHomeButton_HomePageIsNewTabPage"
+    enum="Boolean">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Whether or not the home page user preference is set to the default NTP value
+    when a profile is loaded. This is only logged if the home button is shown.
+  </summary>
+</histogram>
+
+<histogram name="Settings.HashesDictionaryTrusted" enum="BooleanValid">
+  <owner>csharp@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged on profile load. Indicates whether the hashes dictionary for this
+    profile is trusted.
+  </summary>
+</histogram>
+
+<histogram name="Settings.HomePageDomain" enum="OmniboxSearchEngine">
+  <obsolete>
+    Deprecated in Chrome 30.  Replaced by Settings.HomePageEngineType.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The id of the home page domain that is specified in user preferences when a
+    profile is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Settings.HomePageEngineType" enum="OmniboxSearchEngineType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Tries to pretend the home page URL is a search URL, and records the search
+    engine type of that URL by comparing the TLD+1 of the home page URL with
+    those of the different known search engines.  Recorded when a profile is
+    opened, if a home page URL has been set.  Note that at least one profile is
+    opened on startup.
+  </summary>
+</histogram>
+
+<histogram name="Settings.HomePageIsNewTabPage" enum="Boolean">
+  <obsolete>
+    Deprecated 08/05/2013. Replaced by
+    Settings.GivenShowHomeButton_HomePageIsNewTabPage.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Whether or not the home page user preference is set to the default NTP value
+    when a profile is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Settings.HomePageIsNewTabPage.PulledFromSync" enum="Boolean">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The value of the home-page-is-new-tab-page pref when pulled down from sync
+    to update an out-of-sync local pref store.
+  </summary>
+</histogram>
+
+<histogram name="Settings.HomePageIsNewTabPage.PushedToSync" enum="Boolean">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The value of the home-page-is-new-tab-page pref when pushed up to sync from
+    a change made locally.
+  </summary>
+</histogram>
+
+<histogram name="Settings.InitializedFromMasterPrefs" enum="BooleanSuccess">
+  <owner>csharp@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged on first run when generating the Preferences file from
+    master_preferences. True if serializing the generated Preferences file to
+    disk was successful, false otherwise. Note: this event does not occur if
+    there is no master_preferences file on first run.
+  </summary>
+</histogram>
+
+<histogram name="Settings.JsonDataReadSizeKilobytes" units="KB">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The size (in kilobytes) of the JSON settings read from disk on startup.
+    Suffixed with the name of the corresponding JSON file.
+  </summary>
+</histogram>
+
+<histogram name="Settings.JsonDataSizeKilobytes" units="KB">
+  <obsolete>
+    Deprecated 02/2015. Replaced by Settings.JsonDataReadSizeKilobytes.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The size of the JSON settings content about to be written to disk in
+    kilobytes. Suffixed with the name of the JSON file being written to disk.
+  </summary>
+</histogram>
+
+<histogram name="Settings.JsonDataWriteCount" units="count">
+  <owner>raymes@chromium.org</owner>
+  <summary>
+    The number of writes of a JSON file that occur in every 5 minute period of
+    running Chrome. Suffixed with the name of the corresponding JSON file.
+  </summary>
+</histogram>
+
+<histogram name="Settings.LoadCompletedTime" units="ms">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    The amount of time between the render frame host StartProvisionalLoad event
+    and the render frame DocumentOnLoadCompleted event for the settings page.
+  </summary>
+</histogram>
+
+<histogram name="Settings.LoadCompletedTime.MD" units="ms">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    The amount of time between the render frame host StartProvisionalLoad event
+    and the render frame DocumentOnLoadCompleted event for the md-settings page.
+  </summary>
+</histogram>
+
+<histogram name="Settings.LoadDocumentTime" units="ms">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    The amount of time between the render frame host StartProvisionalLoad and
+    DidFinishDocumentLoad events for the settings page.
+  </summary>
+</histogram>
+
+<histogram name="Settings.LoadDocumentTime.MD" units="ms">
+  <owner>stevenjb@chromium.org</owner>
+  <summary>
+    The amount of time between the render frame host StartProvisionalLoad and
+    DidFinishDocumentLoad events for the md-settings page.
+  </summary>
+</histogram>
+
+<histogram name="Settings.MigratedHashesFromLocalState" enum="BooleanMigrated">
+  <obsolete>
+    Deprecated in Chrome 54, as we stopped legacy migration of preferences.
+  </obsolete>
+  <owner>csharp@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Whether, while loading a profile, any preference hashes were migrated from
+    Local State to either Preferences or Protected Preferences.
+  </summary>
+</histogram>
+
+<histogram name="Settings.PinnedTabEngineTypes" enum="OmniboxSearchEngineType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Tries to pretend pinned tab URLs are search URLs, and records the search
+    engine types of those URLs by comparing the TLD+1s of the URLs with those of
+    the different known search engines.  Recorded when a profile is opened, if
+    there are pinned tabs.  Note that at least one profile is opened on startup.
+  </summary>
+</histogram>
+
+<histogram name="Settings.PinnedTabs">
+  <owner>mpearson@chromium.org</owner>
+  <summary>The number of pinned tabs opened when a profile is loaded.</summary>
+</histogram>
+
+<histogram name="Settings.RegisterProfilePrefsTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during RegisterProfilePrefs.
+  </summary>
+</histogram>
+
+<histogram name="Settings.SearchLength">
+  <owner>dschuyler@chromium.org</owner>
+  <summary>
+    The number of characters typed in the chrome://settings page search box.
+    Intended to determine if we are making the user type too much to find what
+    they are looking for (the search is incremental).
+  </summary>
+</histogram>
+
+<histogram name="Settings.SearchLengthNoMatch">
+  <owner>dschuyler@chromium.org</owner>
+  <summary>
+    If no matches are found when searching within the chrome://settings page,
+    record the length of the search text.
+  </summary>
+</histogram>
+
+<histogram name="Settings.SearchPageMatchCount">
+  <owner>dschuyler@chromium.org</owner>
+  <summary>
+    The number of search page hits within the chrome://settings page.  This is
+    especially important when the count is zero (i.e. we returned no hits for a
+    given search in settings).  A search is considered complete via timeout
+    since there is no concrete way to define the end of a search (the search is
+    incremental).
+  </summary>
+</histogram>
+
+<histogram name="Settings.SearchSections" enum="SettingsSections">
+  <owner>dschuyler@chromium.org</owner>
+  <summary>
+    If there is no further activity in the search box for 1 second, this records
+    one tick each time a settings section is shown as a result of searching
+    withing the chrome://settings page.  If multiple matches are found within
+    the same section, the section match is only recorded once.
+  </summary>
+</histogram>
+
+<histogram name="Settings.SearchSubpageMatchCount">
+  <owner>dschuyler@chromium.org</owner>
+  <summary>
+    The number of search subpage hits within the chrome://settings page.  This
+    is different from Settings.SearchPageMatchCount in that it is tracking hits
+    in subpages rather than top level pages. See also
+    Settings.SearchPageMatchCount.
+  </summary>
+</histogram>
+
+<histogram name="Settings.ShowHomeButton" enum="BooleanEnabled">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Whether or not the home button is enabled in user preferences when a profile
+    is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Settings.ShowHomeButton.PulledFromSync" enum="BooleanEnabled">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The enabled state of the Home button pref when pulled down from sync to
+    update an out-of-sync local pref store.
+  </summary>
+</histogram>
+
+<histogram name="Settings.ShowHomeButton.PushedToSync" enum="BooleanEnabled">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The enabled state of the Home button pref when pushed up to sync from a
+    change made locally.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartSetAsDefault" enum="BooleanHit">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The user clicked &quot;Make Google Chrome the default browser&quot; on the
+    settings page.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartupPageDomains" enum="OmniboxSearchEngine">
+  <obsolete>
+    Deprecated in Chrome 30.  Replaced by Settings.StartupPageEngineTypes.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The ids of startup page domains that are specified in user preferences when
+    a profile is loaded.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartupPageEngineTypes"
+    enum="OmniboxSearchEngineType">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    Tries to pretend the startup page URLs are search URLs, and records the
+    search engine types of those URLs by comparing the TLD+1s of the URLs with
+    those of the different known search engines.  Recorded when a profile is
+    opened, if startup page URLs have been set.  Note that at least one profile
+    is opened on startup.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartupPageLoadSettings" enum="SessionStartupPref">
+  <owner>mpearson@chromium.org</owner>
+  <summary>The startup page settings when a profile is loaded.</summary>
+</histogram>
+
+<histogram name="Settings.StartupPageLoadSettings.PulledFromSync"
+    enum="SessionStartupPref">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The startup page setting when pulled down from sync to update an out-of-sync
+    local pref store.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartupPageLoadSettings.PushedToSync"
+    enum="SessionStartupPref">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The startup page setting when pushed up to sync from a change made locally.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartupPageLoadURLs">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of URLs to be loaded on startup when a profile is loaded, if the
+    startup page setting is set to load URLs.
+  </summary>
+</histogram>
+
+<histogram name="Settings.StartupURLsMigration" enum="StartupURLsMigration">
+  <obsolete>
+    Deprecated 12/2015.
+  </obsolete>
+  <owner>mad@chromium.org</owner>
+  <summary>The startup URLs pref migration steps.</summary>
+</histogram>
+
+<histogram name="Settings.StartupURLsResetTime" units="ms">
+  <obsolete>
+    Deprecated 12/2015.
+  </obsolete>
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The time elapsed in milliseconds in between startup URLs pref migration. A
+    value of 0 indicates that the last migration time was in the future due to
+    e.g. an incorrect system time.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TimeToFirstSearch" units="ms">
+  <owner>dschuyler@chromium.org</owner>
+  <summary>
+    The time between when the chrome://settings page is opened to the first time
+    a search is done within that page.  This is intended to evaluate how long a
+    user looks for a setting before giving up and searching for it.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceChanged" enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference whose value has been changed since the last
+    time Chrome set it. Without a suffix, this histogram stands for preference
+    validation using MACs in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceCleared" enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference whose value has been cleared since the last
+    time Chrome set it. Without a suffix, this histogram stands for preference
+    validation using MACs in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceInitialized"
+    enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference whose last value isn't known. We may be just
+    starting to track the preference, or local state may have been changed
+    outside of Chrome. This should only happen once per pref per profile.
+    Without a suffix, this histogram stands for preference validation using MACs
+    in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceMigrated" enum="TrackedPreference">
+  <obsolete>
+    Deprecated 2014-07.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logs the tracked preference id when it is migrated to the new MAC algorithm.
+    This should only happen once per pref per profile.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceMigratedLegacyDeviceId"
+    enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference whose value has not changed since the last
+    time Chrome set it, but which was last set using a legacy device ID. Each
+    user should report this at most once per preference id and immediately be
+    migrated to the latest hashing model. Without a suffix, this histogram
+    stands for preference validation using MACs in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceNullInitialized"
+    enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference which was initialized despite the absence of
+    a MAC as its value was NULL. Without a suffix, this histogram stands for
+    preference validation using MACs in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceReset" enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>The id of a tracked preference which was reset by Chrome.</summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferencesAlternateStoreVersion"
+    enum="PrefHashStoreVersion">
+  <obsolete>
+    Deprecated 2014-06.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The version of a PrefHashStore, reported once for each alternate
+    PrefHashStore (not associated to the default profile) from a delayed task on
+    startup.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom"
+    enum="PrefHashStoreVersion">
+  <obsolete>
+    Deprecated 2014-06.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The previous version of an alternate PrefHashStore (not associated to the
+    default profile) that was updated from a delayed task on startup. This
+    should match Settings.TrackedPreferencesAlternateStoreVersion fairly closely
+    for all versions but VERSION_LATEST which should never be reported here.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferencesInitializedForUnloadedProfile"
+    enum="BooleanHit">
+  <obsolete>
+    Deprecated 2014-02 in favor of
+    Settings.TrackedPreferencesAlternateStoreVersionUpdatedFrom.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Preference tracking was initialized for an unloaded profile. This should
+    happen at most once per profile.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferencesNoEnforcementOnDomain"
+    enum="BooleanEnabled">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Whether settings enforcement was cancelled for a machine joined to a domain.
+    Reported once per session on browser startup (note: this histogram was
+    disabled for part of M40).
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceTrustedInitialized"
+    enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference which was initialized despite the absence of
+    a MAC as the current MACs are trusted, inferring that this is a newly
+    tracked pref. Without a suffix, this histogram stands for preference
+    validation using MACs in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceUnchanged" enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference whose value has not changed since the last
+    time Chrome set it. Without a suffix, this histogram stands for preference
+    validation using MACs in the JSON pref files.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedPreferenceWantedReset"
+    enum="TrackedPreference">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The id of a tracked preference which Chrome would have reset had the config
+    allowed it.
+  </summary>
+</histogram>
+
+<histogram name="Settings.TrackedSplitPreferenceChanged">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The number of items that had changed in a dictionary pref when
+    Settings.TrackedPreferenceChanged is reported for that pref.
+  </summary>
+</histogram>
+
+<histogram name="Settings.ZoomLevelPreferencesMigrated" enum="BooleanMigrated">
+  <obsolete>
+    Deprecated 2015-08-18.
+  </obsolete>
+  <owner>wjmaclean@chromium.org</owner>
+  <summary>
+    Tracks migration to per-partition zoom-level preferences during profile
+    initialization.
+  </summary>
+</histogram>
+
+<histogram name="SettingsAppMonitor.InitializationResult" enum="BooleanSuccess">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    Indicates whether or not the Windows Settings app monitor was initialized.
+  </summary>
+</histogram>
+
+<histogram name="SettingsResetBubble.NumNoThanksPerReset">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    Counts the number of times the user clicked on the No Thanks button of the
+    settings reset bubble before clicking on the Reset button in the same Chrome
+    session.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.ApplyArchivePatchTime" units="ms">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The elapesed time to apply a patch to a previous version's chrome.7z archive
+    to generate a new chrome.7z archive. This histogram only applies to diff
+    updates.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.HasArchivePatch" enum="Boolean">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    True if the chrome.packed.7z archive contains a patch (in which case a diff
+    update is taking place) or false if it contains a full archive (in which
+    case a new install or a full update is taking place).
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.LzmaUnPackNTSTATUS" enum="NTSTATUS">
+  <owner>zmin@chromium.org</owner>
+  <summary>
+    Record the NTSTATUS code of unpacking the contents of a 7z file.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.LzmaUnPackStatus" enum="UnPackStatus">
+  <owner>zmin@chromium.org</owner>
+  <summary>Record the status of unpacking the contents of a 7z file.</summary>
+</histogram>
+
+<histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort"
+    units="Attempts">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Number of calls to DeleteOldVerions() made by a --delete-old-versions
+    process that didn't delete all files that belong to old versions of Chrome.
+    A --delete-old-versions process exits when another process tries to acquire
+    the SetupSingleton or after too many unsuccessful attempts to delete all old
+    files. A --delete-old-versions process that successfully acquires the
+    SetupSingleton records to either the
+    Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort histogram or the
+    Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess histogram.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess"
+    units="Attempts">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Number of calls to DeleteOldVersions() made by a --delete-old-versions
+    process that successfully deleted all files that belong to old versions of
+    Chrome. A --delete-old-versions process that successfully acquires the
+    SetupSingleton records to either the
+    Setup.Install.NumDeleteOldVersionsAttemptsBeforeAbort histogram or the
+    Setup.Install.NumDeleteOldVersionsAttemptsBeforeSuccess histogram.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.PeakPagefileUsage" units="KB">
+  <owner>huangs@chromium.org</owner>
+  <summary>
+    The peak page file usage by setup.exe in KB during install or uninstall
+    attempt.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.PeakWorkingSetSize" units="KB">
+  <owner>huangs@chromium.org</owner>
+  <summary>
+    The peak working set size of setup.exe in KB during install or uninstall
+    attempt.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.Result" enum="SetupInstallResult">
+  <owner>grt@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The final exit-result of the entire run of setup.exe on Windows.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.SingletonAcquisitionResult"
+    enum="SetupSingletonAcquisitionResult">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    The result of trying to acquire a setup singleton. On Windows, a setup.exe
+    process must hold the setup singleton of a Chrome installation when it makes
+    changes to it.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.StrandedChromeIsUsed" enum="BooleanUsage">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The disposition of a stranded Chrome install discovered while updating
+    multi-install Chrome Binaries. This metric is only logged in an edge case.
+    The buckets indicate whether or not the &quot;stranded&quot; Chrome install
+    has been used in the last 28 days. If so, it respresents a Chrome that has
+    not been updating due to a logic flaw in the installer and will be repaired
+    in the current update. If not, it likely represents Chrome Binaries that
+    were previously used by Chrome Frame that has since been uninstalled and
+    that will be uninstalled in a future update.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.UncompressArchivePatchTime" units="ms">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The elapsed time to uncompress a chrome.7z patch. This histogram only
+    applies to diff updates.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.UncompressFullArchiveTime" units="ms">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The elapsed time to uncompress a full chrome.7z archive. This histogram only
+    applies to new installs and to full updates.
+  </summary>
+</histogram>
+
+<histogram name="Setup.Install.UnpackFullArchiveTime" units="ms">
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The elapsed time to unpack the uncompressed chrome.7z archive. This
+    histogram applies to all installs and updates.
+  </summary>
+</histogram>
+
+<histogram name="SharedMemory.CreateError" enum="SharedMemoryCreateError">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    A histogram entry is emitted each time a base::SharedMemory object is
+    constructed. The value of the entry indicates the type of error encountered
+    during construction.
+  </summary>
+</histogram>
+
+<histogram name="SharedMemory.CreateWinError" enum="WinGetLastError">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    A histogram entry is emitted each time a base::SharedMemory object could not
+    be created due to a failed Windows system call. The value of the entry
+    indicates the result of the GetLastError() API call.
+  </summary>
+</histogram>
+
+<histogram name="SharedMemory.TimeSpentMakingAnonymousMemory" units="ms">
+  <obsolete>
+    Deprecated 2015-06 because the Finch experiment SharedMemoryCreateStrategy
+    has finished running.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The time spent making a new region of shared, anonymous memory. This metric
+    is not emitted if the shared memory region is read only.
+  </summary>
+</histogram>
+
+<histogram name="SharedWorker.RendererSurviveForWorkerTime" units="ms">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    A survival time of RenderProcessHostImpl for the In-renderer Shared Worker
+    from when FastShutdownIfPossible() is called.
+  </summary>
+</histogram>
+
+<histogram name="SharedWorker.TimeToDeleted" units="ms">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The lifetime of a SharedWorkerHost. This roughly corresponds to the lifetime
+    of SharedWorker.
+  </summary>
+</histogram>
+
+<histogram name="SharedWorker.TimeToScriptLoaded" units="ms">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time from the creation of SharedWorkerHost until when WorkerScriptLoaded
+    is called.
+  </summary>
+</histogram>
+
+<histogram name="SharedWorker.TimeToScriptLoadFailed" units="ms">
+  <owner>horo@chromium.org</owner>
+  <summary>
+    The time from the creation of SharedWorkerHost until when
+    WorkerScriptLoadFailed is called.
+  </summary>
+</histogram>
+
+<histogram name="ShortcutsProvider.DatabaseSize">
+  <owner>mpearson@chromium.org</owner>
+  <summary>
+    The number of entries in shortcuts backend's database when initialized,
+    which happens during profile load.
+  </summary>
+</histogram>
+
+<histogram name="ShortcutsProvider.QueryIndexTime" units="ms">
+  <owner>davidben@chromium.org</owner>
+  <summary>
+    The time it takes for the ShortcutsProvider to perform a query after the
+    user has typed N characters.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.browser_exit.time">
+  <obsolete>
+    Replaced by Shutdown.browser_exit.time2 to get more resolution into the tail
+    of the distribution (10/2016).
+  </obsolete>
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by the browser exit menu command.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.browser_exit.time2">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by the browser exit menu command.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.browser_exit.time_per_process">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by the browser exit menu command per renderer
+    process.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.end_session.time">
+  <obsolete>
+    Replaced by Shutdown.end_session.time2 to get more resolution into the tail
+    of the distribution (10/2016).
+  </obsolete>
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by an end session (user logs off, shuts down or
+    reboots without explicitly exiting).
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.end_session.time2">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by an end session (user logs off, shuts down or
+    reboots without explicitly exiting).
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.end_session.time_per_process">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by an end session (user logs off, shuts down or
+    reboots without explicitly exiting) per renderer process.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.renderers.slow">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    The number of renderer processes that couldn't be shutdown quickly due to
+    onbeforeunload or onunload listeners.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.renderers.total">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    The number of renderer processes running when shutdown was called.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.ShutdownType" enum="ShutdownType">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>The type of the last shutdown.</summary>
+</histogram>
+
+<histogram name="Shutdown.window_close.time" units="ms">
+  <obsolete>
+    Replaced by Shutdown.window_close.time2 to get more resolution into the tail
+    of the distribution (10/2016).
+  </obsolete>
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by the last browser window being closed.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.window_close.time2" units="ms">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by the last browser window being closed.
+  </summary>
+</histogram>
+
+<histogram name="Shutdown.window_close.time_per_process">
+  <owner>hashimoto@chromium.org</owner>
+  <summary>
+    Time for shutdown initiated by the last browser window being closed per
+    renderer process.
+  </summary>
+</histogram>
+
+<histogram name="Signin" enum="SigninHelperFlow">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Tracks user interactions as they sign in through a flow. The suffix of the
+    histogram indicates what UI widget or application flow triggered the signin
+    flow.
+  </summary>
+</histogram>
+
+<histogram name="Signin.AccountEquality" enum="SigninAccountEquality">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    There are two separate ways to test for account equality, using the account
+    id or the email. Historically the email was always used, but going forward
+    email will be modifiable. Now when we check account equality we use both
+    approaches and emit this metric to capture if they agreed or not.
+  </summary>
+</histogram>
+
+<histogram name="Signin.AccountReconcilorState.OnGaiaResponse"
+    enum="SigninAccountReconcilorState">
+  <owner>bzanotti@chromium.org</owner>
+  <summary>
+    Records the state of the account reconcilor when GAIA returns a specific
+    response.
+  </summary>
+</histogram>
+
+<histogram name="Signin.AddAccount" enum="BooleanSuccess">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Track when chrome successfully adds an account. Failures are not tracked.
+  </summary>
+</histogram>
+
+<histogram name="Signin.AndroidGetAccountsTime" units="ms">
+  <owner>nyquist@chromium.org</owner>
+  <summary>
+    The time it takes to retrieve the list of accounts from the system.
+  </summary>
+</histogram>
+
+<histogram name="Signin.AndroidSigninPromoAction"
+    enum="AndroidSigninPromoAction">
+  <obsolete>
+    Removed this histogram since we have had newly designed histograms
+    Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
+    Signin.SigninReason.
+  </obsolete>
+  <owner>guohui@chromium.org</owner>
+  <summary>Track how a user interfacts with the android signin promo.</summary>
+</histogram>
+
+<histogram name="Signin.AuthError" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Log the type of GAIA authentication error that occur whenever the error
+    state changes.
+  </summary>
+</histogram>
+
+<histogram name="Signin.CookieJar.ChromeAccountRelation" enum="AccountRelation">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    The relation between the account signed into chrome, and the account(s) in
+    the cookie jar. This metric is never recorded when not signed into chrome.
+  </summary>
+</histogram>
+
+<histogram name="Signin.CookieJar.SignedInCount" units="accounts">
+  <owner>skym@chromium.org</owner>
+  <summary>The number of signed in accounts in the cookie jar.</summary>
+</histogram>
+
+<histogram name="Signin.CookieJar.SignedOutCount" units="accounts">
+  <owner>skym@chromium.org</owner>
+  <summary>The number of signed out accounts in the cookie jar.</summary>
+</histogram>
+
+<histogram name="Signin.CookieJar.StableAge" units="seconds">
+  <owner>skym@chromium.org</owner>
+  <summary>The amount of time since the cookie jar last changed.</summary>
+</histogram>
+
+<histogram name="Signin.CookieJar.TotalCount" units="accounts">
+  <owner>skym@chromium.org</owner>
+  <summary>The total number of accounts in the cookie jar.</summary>
+</histogram>
+
+<histogram name="Signin.DuringFirstRun">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Track if the profile sign in took place during First Run or not. Logged at
+    signin time. True means signin took place during First Run, False means
+    anytime after.
+  </summary>
+</histogram>
+
+<histogram name="Signin.ElapsedTimeFromInstallToSignin" units="minutes">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Track how many minutes of local system time elapsed from when Chrome was
+    installed to when Signin occured for this profile.
+  </summary>
+</histogram>
+
+<histogram name="Signin.InvestigatedScenario" enum="SigninInvestigatedScenario">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Records the general type of signin that is occuring in relation to previous
+    signin and local data.
+  </summary>
+</histogram>
+
+<histogram name="Signin.IsShared" enum="BooleanIsShared">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Current best guess if this device is shared between multiple users.
+  </summary>
+</histogram>
+
+<histogram name="Signin.ListAccountsFailure" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Failure reason of ListAccounts call failure during account reconciliation,
+    ChromeOS login, or signin internals queries.
+  </summary>
+</histogram>
+
+<histogram name="Signin.ListAccountsRetry" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Retry reason of failed ListAccounts call during Chrome OS login during
+    account reconciliation, ChromeOS login, or signin internals queries.
+  </summary>
+</histogram>
+
+<histogram name="Signin.OAuth2TokenGetFailure" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Reason fetching an OAuth2 Token failed. Available on all OSes.
+  </summary>
+</histogram>
+
+<histogram name="Signin.OAuth2TokenGetRetry" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Reason fetching an OAuth2 Token is being retried. Available on all OSes.
+  </summary>
+</histogram>
+
+<histogram name="Signin.OneClickConfirmation" enum="SigninFlowConfirmations">
+  <owner>noms@chromium.org</owner>
+  <summary>
+    Count of the ways users interact with the confirmation dialogs of the new
+    web based sign in to Chrome flow (accessed via the one click signin).
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reauth" enum="SigninReauthStates">
+  <owner>noms@chromium.org</owner>
+  <summary>Tracks events related to the reauthentication Gaia page.</summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.AddedToChrome">
+  <obsolete>
+    Deprecated 2014-09 because chrome no longer tries to reconcile from the
+    cookie jar to the browser.
+  </obsolete>
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    How many accounts were added to the browser's token service because they
+    were in the cookie jar.
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.AddedToCookieJar">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    How many accounts were added to the cookie jar because they were in the
+    browser's token service.
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.AllExternalCcResultCompleted"
+    enum="BooleanSuccess">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Records whether all external connections have been successfully checked (a
+    value of &quot;true&quot;) or not (&quot;false&quot;) when the reconciler
+    attempts to perform MergeSession.
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.DifferentPrimaryAccounts"
+    enum="DifferentPrimaryAccounts">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    After execution of the account reconcilor, compares the primary account in
+    the token service to the primary GAIA account of the cookie jar.
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.Duration">
+  <owner>rogerta@chromium.org</owner>
+  <summary>Records the execution time of the account reconciler.</summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.ExternalCcResultTime.Completed">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Records the time it took to successfully check all external connections
+    whenever the reconciler performs a reconciliation.
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.ExternalCcResultTime.NotCompleted">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Records the time it took to check only a portion of external connections
+    whenever the reconciler performs a reconciliation.  This means that either a
+    network error occured while checking some sites or the site did not respond
+    before the check timeout.
+  </summary>
+</histogram>
+
+<histogram name="Signin.Reconciler.RemovedFromCookieJar">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    How many accounts were removed from the cookie jar because they were not in
+    the browser's token service.
+  </summary>
+</histogram>
+
+<histogram name="Signin.RefreshTokenAnnotationRequest" enum="BooleanSuccess">
+  <owner>pavely@chromium.org</owner>
+  <summary>
+    Track when chrome successfully sends RefreshTokenAnnotationRequest.
+  </summary>
+</histogram>
+
+<histogram name="Signin.SignedInDurationBeforeSignout" units="minutes">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Track how many minutes of real time (not browser active time) elapsed
+    between profile signin and signout.
+  </summary>
+</histogram>
+
+<histogram name="Signin.SigninCompletedAccessPoint" enum="SigninAccessPoint">
+  <owner>gogerald@chromium.org</owner>
+  <summary>Logs the original access point of each completed sign in.</summary>
+</histogram>
+
+<histogram name="Signin.SigninReason" enum="SigninReason">
+  <owner>gogerald@chromium.org</owner>
+  <summary>Logs the reason of each completed sign in.</summary>
+</histogram>
+
+<histogram name="Signin.SigninSource" enum="SigninSource">
+  <obsolete>
+    Removed this histogram since we have had newly designed histograms
+    Signin.SigninStartedAccessPoint, Signin.SigninCompletedAccessPoint, and
+    Signin.SigninReason.
+  </obsolete>
+  <owner>noms@chromium.org</owner>
+  <summary>
+    Logs the original source that displayed the signin or reauth Gaia page,
+    before the page is displayed.
+  </summary>
+</histogram>
+
+<histogram name="Signin.SigninStartedAccessPoint" enum="SigninAccessPoint">
+  <owner>gogerald@chromium.org</owner>
+  <summary>
+    Logs the original access point that displayed the signin or reauth Gaia
+    page, before the page is displayed.
+  </summary>
+</histogram>
+
+<histogram name="Signin.SignoutDeleteProfile" enum="BooleanDeletedOrNot">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    If the user chose to delete their profile or not when signing out of an
+    unmanaged account. When the user is not given a choice this metric is not
+    recorded.
+  </summary>
+</histogram>
+
+<histogram name="Signin.SignoutProfile" enum="SigninSignoutProfile">
+  <owner>mlerman@chromium.org</owner>
+  <summary>Track how a profile gets signed out.</summary>
+</histogram>
+
+<histogram name="Signin.UberTokenFailure" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Reason of failure to acquiring an ubertoken based on an already-minted
+    access token. Available on all OSes.
+  </summary>
+</histogram>
+
+<histogram name="Signin.UberTokenRetry" enum="GoogleServiceAuthError">
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Retry reason of failure to acquire an ubertoken based on an already-minted
+    access token. Available on all OSes.
+  </summary>
+</histogram>
+
+<histogram name="Signin.XDevicePromo.BrowsingSessionDuration" units="minutes">
+  <owner>anthonyvd@chromium.org</owner>
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    How long a browsing session was measured to be. Logged when a Browser window
+    becomes active if the previous activation was longer than the minimum
+    configured in the &quot;CrossDevicePromo&quot; experiment. Desktop only.
+  </summary>
+</histogram>
+
+<histogram name="Signin.XDevicePromo.BrowsingSessionDurationComputed"
+    units="minutes">
+  <owner>anthonyvd@chromium.org</owner>
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    How often browsers are considered activated, which in turn triggers the
+    CrossDevicePromo. Logged every time a Browser window becomes active. We need
+    this to estimate QPS for RPC calls. Desktop only.
+  </summary>
+</histogram>
+
+<histogram name="Signin.XDevicePromo.Eligibility"
+    enum="SigninXDevicePromoEligibility">
+  <owner>anthonyvd@chromium.org</owner>
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    The reasons for which a profile is or is not eligible for the Desktop Cross
+    Device Sign In Promo. Logged every time a new Browsing session is detected
+    as part of a Browser window becoming active. Desktop only.
+  </summary>
+</histogram>
+
+<histogram name="Signin.XDevicePromo.Initialized"
+    enum="SigninXDevicePromoInitialized">
+  <owner>anthonyvd@chromium.org</owner>
+  <owner>mlerman@chromium.org</owner>
+  <summary>
+    Tracks if profiles initialized the XDevicePromo, and if not, why. Logged at
+    Profile startup and (if not initialized then) when a new browsing session is
+    detected during Browser window activation. Desktop only.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.CacheSizeOnInit" units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size of the cache at the time that the index has finished initializing.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.CheckCRCResult" enum="CheckCRCResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Whether or not the CRC was checked at the moment when the last reference to
+    a read-only entry stream is closed.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.CreationToIndex" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The time from the creation of the simple cache backend until the index has
+    been loaded from disk.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.CreationToIndexFail" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The time from the creation of the simple cache backend until the index fails
+    to load.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.DiskOpenLatency" units="ms">
+  <owner>rdsmith@chromium.org</owner>
+  <summary>
+    The time to access (open and read headers from all files) the cache entry on
+    disk.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.EntryCreatedAndStream2Omitted"
+    enum="SimpleCache.EntryCreatedAndStream2Omitted">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Whether, upon creation of a new cache entry, the file for stream 2 was
+    omitted since that stream was empty.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.EntryCreationResult" enum="BooleanSuccess">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For entry creation operations that were sent to the disk, the result of
+    creation.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.EntryCreationTime" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The time, in ms, spent creating a new entry on disk.</summary>
+</histogram>
+
+<histogram name="SimpleCache.EntryOpenedAndStream2Removed"
+    enum="SimpleCache.EntryOpenedAndStream2Removed">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Whether, upon opening of an existing cache entry, stream 2 was empty and the
+    file for that stream was therefore removed.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.EntryOperationsPending">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    At the time that operations are run, the number of pending operations on a
+    particular entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.CacheSizeOnStart" units="bytes">
+  <obsolete>
+    Deprecated 2013 in favour of SimpleCache.Eviction.CacheSizeOnStart2
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>The size of the cache at the beginning of an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.CacheSizeOnStart2" units="KB">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The size of the cache at the beginning of an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.EntryCount">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The number of entries to be erased in an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart" units="bytes">
+  <obsolete>
+    Deprecated 2013 in favour of SimpleCache.Eviction.MaxCacheSizeOnStart2
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The maximum allowed size of the cache at the beginning of an eviction.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart2" units="KB">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The maximum allowed size of the cache at the beginning of an eviction.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.Result" enum="BooleanSuccess">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The result of an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.SizeOfEvicted" units="bytes">
+  <obsolete>
+    Deprecated 2013 in favour of SimpleCache.Eviction.SizeOfEvicted2
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>The number of bytes to be erased in an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.SizeOfEvicted2" units="KB">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The amount of memory freed in an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.SizeWhenDone" units="bytes">
+  <obsolete>
+    Deprecated 2013 in favour of SimpleCache.Eviction.SizeWhenDone2
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>The size of the cache after running an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.SizeWhenDone2" units="KB">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The size of the cache after running an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.TimeToDone" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>Time spent completing an eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.Eviction.TimeToSelectEntries" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>Time spent selecting entries for eviction.</summary>
+</histogram>
+
+<histogram name="SimpleCache.FileDescriptorLimitHard">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The maximum limit of how many file descriptors a process can open.  Emitted
+    each time the browser is launched, if the limit could be retrieved.  (This
+    is the highest value we could raise the current limit to if we liked.)
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.FileDescriptorLimitSoft">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The current limit of how many file descriptors a process can open.  Emitted
+    each time the browser is launched, if the limit could be retrieved.  (We can
+    raise this to the maximum limit if we like, without root access.)
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.FileDescriptorLimitStatus"
+    enum="SimpleCache.FileDescriptorLimitStatus">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result of trying to get the file descriptor limit.  Emitted each time
+    the browser is launched.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.GlobalOpenEntryCount">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The number of open entries across all caches backed by the Simple Cache. An
+    entry is opened whenever a caller asks to open it to read or write cache
+    data, and remains open until the last caller asks to close it. Logged
+    whenever an entry is opened or closed.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.HeaderSize" units="bytes">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The size of the header stream of a Simple Cache entry, emitted every time
+    the headers are written or rewritten.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.HeaderSizeChange"
+    enum="SimpleCacheHeaderSizeChange">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    How the header size has changed in a Simple Cache entry, emitted every time
+    a write operation occurs on the header stream.  (This includes the initial
+    write, rewrites, and other writes that we couldn't classify.)
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.HeaderSizeDecreaseAbsolute" units="bytes">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The absolute size decrease of the header stream of a Simple Cache entry,
+    emitted every time the headers are rewritten with a smaller size.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.HeaderSizeDecreasePercentage" units="%">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The relative size decrease of the header stream of a Simple Cache entry,
+    emitted every time the headers are rewritten with a smaller size.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.HeaderSizeIncreaseAbsolute" units="bytes">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The absolute size increase of the header stream of a Simple Cache entry,
+    emitted every time the headers are rewritten with a larger size.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.HeaderSizeIncreasePercentage" units="%">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The relative size increase of the header stream of a Simple Cache entry,
+    emitted every time the headers are rewritten with a larger size.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexCorrupt" enum="BooleanCorrupt">
+  <owner>gavinp@chromium.org</owner>
+  <summary>For each index load, whether the index file was corrupt.</summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexCreatedEntryCount">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The number of entries in a newly created index file.</summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexEntriesLoaded">
+  <owner>gavinp@chromium.org</owner>
+  <summary>Number of entries loaded from the index file on start.</summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexEntriesRestored">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Number of entries restored from disk when there was no index or the index
+    was corrupted.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexFileStateOnLoad" enum="SimpleIndexState">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The state the index file is at when an attempt is made to load from it.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexInitializationWaiters">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    At the time of index initialization, the number of enqueued jobs awaiting
+    index initialization.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexInitializeMethod"
+    enum="SimpleCacheIndexInitializeMethod">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The method used to initialize the simple cache index.</summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexLoadTime" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Time (as measured on the worker pool) spent loading the index file.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexNumEntriesOnInit" units="entries">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The number of entries in the index at the time that the index has finished
+    initializing.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexNumEntriesOnWrite">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The number of entries written to the index on a flush.</summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexRestoreTime" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Time (as measured on the worker pool) spent restoring the index file by
+    iterating directory entries.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexStale" enum="BooleanStale">
+  <obsolete>
+    Deprecated 07/2013, and replaced by IndexFileStateOnLoad.
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>For each index load, whether the index file was stale.</summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteInterval.Background" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The interval between index saves, for apps in the background.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteInterval.Foreground" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The interval between index saves, for apps in the foreground.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteReason"
+    enum="SimpleCacheIndexWriteReason">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The reason an index was written to disk. Recorded every time an index is
+    saved.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteReasonAtLoad"
+    enum="SimpleCacheIndexWriteReason">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Recorded immediately after loading a fresh index (INDEX_STATE_FRESH or
+    INDEX_STATE_FRESH_CONCURRENT_UPDATES), the reason the loaded index was
+    written to disk.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteToDiskTime" units="ms">
+  <obsolete>
+    Deprecated 2013-05 in favour of
+    SimpleCache.SimpleIndexWriteToDiskTime.Background and
+    SimpleCache.SimpleIndexWriteToDiskTime.Foreground.
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The amount of time spend writing the index file to disk, measured starting
+    at the beginning of the write on the callback thread, and calculated using
+    the completion time on the worker pool.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteToDiskTime.Background" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The amount of time spend writing the index file to disk, for apps in the
+    background, measured starting at the beginning of the write on the callback
+    thread, and calculated using the completion time on the worker pool.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.IndexWriteToDiskTime.Foreground" units="ms">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The amount of time spend writing the index file to disk, for apps in the
+    foreground, measured starting at the beginning of the write on the callback
+    thread, and calculated using the completion time on the worker pool.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.KeyMatchedOnOpen" enum="BooleanMatched">
+  <obsolete>
+    Deprecated 2016-05 as the match checking was moved back into the entry
+    itself, so this result is now reported in the SimpleCache.x.SyncOpenResult
+    histograms.
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For each call to OpenEntry, whether the key on disk matched the request key.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.LastClusterLossPercent" units="%">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For each file in the Simple Cache, the percentage of disk space used by the
+    cluster loss, the unused disk space in the last 4096 byte cluster of the
+    file.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.LastClusterSize" units="bytes">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For each file in the Simple Cache, the number of bytes in the last 4096 byte
+    cluster when the entry is saved to disk.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.MaxCacheSizeOnInit" units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The maximum allowed size of the cache at the time that the index has
+    finished initializing.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.OpenEntryIndexState"
+    enum="SimpleCacheOpenEntryIndexState">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    At the time that an entry is opened, the state of that entry in the index.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.PercentFullOnInit" units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The fullness (in percent) of the cache at the time that the index has
+    finished initializing. The percentage is calculated as (cache_size * 100) /
+    max_cache_size.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.ReadIsParallelizable"
+    enum="SimpleCacheReadParallelizable">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For each Read operation, whether it could have been issued in parallel of a
+    previous Read operation.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.ReadResult" enum="SimpleCacheReadResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The outcome of Entry::ReadData in the simple cache.</summary>
+</histogram>
+
+<histogram name="SimpleCache.StaleIndexExtraEntryCount" units="entries">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Count of the number of entries recorded in the index, but not actually
+    present in the cache. Recorded each time a stale index is found and a
+    directory rescan is required.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.StaleIndexMissedEntryCount" units="entries">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Count of the number of entries present in a cache, but not recorded in the
+    index. Recorded each time a stale index is found and a directory rescan is
+    required.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.StaleIndexQuality"
+    enum="SimpleCacheStaleIndexQuality">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The quality of a &quot;stale&quot; index compared to a full directory
+    rescan. Recorded immediately after every directory scan for stale indexes.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncCheckEOFHasCrc" enum="BooleanHasCrc">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    For each EOFRecord found with a valid magic number, indicates if the record
+    also contains a CRC.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncCheckEOFResult"
+    enum="SimpleCacheSyncCheckEOFResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result, at the synchronous layer, of checking the EOF record of a cache
+    entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncCloseResult" enum="SimpleCacheSyncCloseResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result, at the synchronous layer, of closing a cache entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncCreatePlatformFileError"
+    enum="PlatformFileError">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The platform error reported when attempting to create a new cache entry at
+    the synchronous layer.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncCreateResult"
+    enum="SimpleCacheSyncCreateResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result, at the synchronous layer, reported when attempting to create a
+    new cache entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncKeySHA256Result"
+    enum="SimpleCacheSyncSHA256Result">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result of the the key SHA256 check done when opening stream 0 for each
+    entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncOpenEntryAge" units="hours">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The age of the entry (time since last modified), when opened at the
+    synchronous layer.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncOpenPlatformFileError"
+    enum="PlatformFileError">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The platform error reported when attempting to create a new cache entry at
+    the synchronous layer.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncOpenResult" enum="SimpleCacheSyncOpenResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result, at the synchronous layer, reported when attempting to open a new
+    cache entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.SyncWriteResult" enum="SimpleCacheSyncWriteResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    The result, at the synchronous layer, of writing to a cache entry.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.WriteDependencyType"
+    enum="SimpleCacheWriteDependencyType">
+  <owner>gavinp@chromium.org</owner>
+  <summary>
+    Shows whether a write operation depends on the previous operation in queue
+    particularly in the aspect of its possibility to run in parallel.
+  </summary>
+</histogram>
+
+<histogram name="SimpleCache.WriteResult" enum="SimpleCacheWriteResult">
+  <obsolete>
+    Replaced 2013/09/03 by WriteResult2, which adds &quot;fast empty
+    return&quot;, which previously showed up as &quot;success&quot;.
+  </obsolete>
+  <owner>gavinp@chromium.org</owner>
+  <summary>The outcome of Entry::WriteData in the simple cache.</summary>
+</histogram>
+
+<histogram name="SimpleCache.WriteResult2" enum="SimpleCacheWriteResult">
+  <owner>gavinp@chromium.org</owner>
+  <summary>The outcome of Entry::WriteData in the simple cache.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.Event"
+    enum="SimpleGeolocationRequestEvent">
+  <owner>alemate@chromium.org</owner>
+  <summary>Events in reqests processing of IP-based SimpleGeolocation.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.HasWiFiAccessPoints"
+    enum="SimpleGeolocationRequestHasWiFiAccessPoints">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    This boolean histogram counts SimpleGeolocationRequests carrying nonzero
+    number of WiFi access points.
+  </summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.ResponseCode"
+    enum="HttpResponseCode">
+  <owner>alemate@chromium.org</owner>
+  <summary>Http response codes in IP-based SimpleGeolocation.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.ResponseFailureTime" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The time elapsed between the sending of the first API request and the time
+    the final (failed) response was recorded. Includes all retries.
+  </summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.ResponseSuccessTime" units="ms">
+  <owner>alemate@chromium.org</owner>
+  <summary>
+    The time elapsed between the sending of the first API request and the time
+    the final (successfull) response was recorded. Includes all retries.
+  </summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.Result"
+    enum="SimpleGeolocationRequestResult">
+  <owner>alemate@chromium.org</owner>
+  <summary>Result of SimpleGeolocationRequest.</summary>
+</histogram>
+
+<histogram name="SimpleGeolocation.Request.Retries">
+  <owner>alemate@chromium.org</owner>
+  <summary>Number of retries until the final response was recorded.</summary>
+</histogram>
+
+<histogram name="SiteEngagementService.DaysSinceLastShortcutLaunch"
+    units="days">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The number of days between launches of an origin saved to homescreen or as a
+    bookmark app shortcut. Recorded at the second and each following launch of a
+    specific origin from a shortcut, independently per origin.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.EngagementPercentageForHTTPS">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    The percentage of total site engagement accumulated by this profile for
+    HTTPS URLs as a proportion of all engagement for HTTPS and HTTP URLs.
+    Recorded at startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.EngagementScore">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    Distribution of the engagement scores accumulated by a user, recorded at
+    startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.EngagementScore.HTTP">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Distribution of the engagement scores accumulated by a user, recorded at
+    startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter. Limited specifically to
+    HTTP URLs.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.EngagementScore.HTTPS">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Distribution of the engagement scores accumulated by a user, recorded at
+    startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter. Limited specifically to
+    HTTPS URLs.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.EngagementScoreBucket" units="%">
+  <owner>calamity@chromium.org</owner>
+  <summary>
+    The percentage of sites on a user's profile that have engagement scores that
+    fall in these buckets, recorded at startup per non-incognito profile, and
+    then upon the first engagement-increasing event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.EngagementType"
+    enum="SiteEngagementServiceEngagementType">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The type of engagement (navigation, user input, etc.) which led to an
+    accumulation in site engagement.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.MeanEngagement">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The mean site engagement per origin accumulated by this profile, recorded at
+    startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.MedianEngagement">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The median site engagement per origin accumulated by this profile, recorded
+    at startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.OriginsEngaged">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The total number of origins with a non-zero site engagement score for this
+    profile, recorded at startup per non-incognito profile, and then upon the
+    first engagement-increasing event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.OriginsWithMaxDailyEngagement">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The number of origins which have reached the daily site engagement point
+    cap, recorded at startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter. Thus, each bin N contains
+    the number of clients where at least N origins have reached the maximum
+    daily site engagement point cap.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.OriginsWithMaxEngagement">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The number of origins which have reached the absolute site engagement point
+    cap, recorded at startup per non-incognito profile, and then upon the first
+    engagement-increasing event every hour thereafter. Thus, each bin N contains
+    the number of clients where at least N origins have reached the maximum
+    absolute site engagement point cap.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.PercentOriginsWithMaxEngagement">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The percentage of all origins recorded by the site engagement service which
+    have reached the absolute site engagement point cap, recorded at startup per
+    non-incognito profile, and then upon the first engagement-increasing event
+    every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteEngagementService.TotalEngagement">
+  <owner>calamity@chromium.org</owner>
+  <owner>dominickn@chromium.org</owner>
+  <summary>
+    The total site engagement accumulated by this profile, recorded at startup
+    per non-incognito profile, and then upon the first engagement-increasing
+    event every hour thereafter.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.AllResponses">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of all network responses received by a renderer. Each response is
+    corresponding to one URL requested by a renderer. Incremented when the first
+    network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.BrowsingInstanceCount">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of all current BrowsingInstances.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.CurrentRendererProcessCount">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of all renderer processes, including WebUI and extensions.
+    Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateAllSitesProcessCountEstimate">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The upper bound of the predicted renderer process count if we isolated all
+    sites, subject to the process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateAllSitesProcessCountLowerBound">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The lower bound of the predicted renderer process count if we isolated all
+    sites, subject to the process limit.  Happens to be the number of unique
+    sites.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateAllSitesProcessCountNoLimit">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The predicted renderer process count if we isolated all sites and if there
+    were no process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateAllSitesTotalProcessCountEstimate">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The predicted total process count if we isolated all sites, subject to the
+    process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateExtensionsProcessCountEstimate">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    The upper bound of the predicted renderer process count if we isolated only
+    Chrome extensions, subject to the process limit.  Recorded once per UMA
+    ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateExtensionsProcessCountLowerBound">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    The lower bound of the predicted renderer process count if we isolated only
+    Chrome extensions, subject to the process limit. Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateExtensionsProcessCountNoLimit">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    The predicted renderer process count if we isolated only Chrome extensions
+    and if there were no process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateExtensionsTotalProcessCountEstimate">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    The predicted total process count if we isolated only Chrome extensions,
+    subject to the process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountEstimate">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The upper bound of the predicted renderer process count if we isolated only
+    HTTPS (not HTTP) sites, subject to the process limit.  Recorded once per UMA
+    ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountLowerBound">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The lower bound of the predicted renderer process count if we isolated only
+    HTTPS (not HTTP) sites, subject to the process limit.  Happens to be the
+    number of isolated sites.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateHttpsSitesProcessCountNoLimit">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The predicted renderer process count if we isolated only HTTPS (not HTTP)
+    sites and if there were no process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateHttpsSitesTotalProcessCountEstimate">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The predicted total process count if we isolated only HTTPS (not HTTP)
+    sites, subject to the process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateNothingProcessCountEstimate">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The upper bound of the estimated renderer process count if we isolated no
+    sites, subject to the process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateNothingProcessCountLowerBound">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The lower bound of the predicted renderer process count if we isolated no
+    sites, subject to the process limit.  Happens to be the number of isolated
+    sites.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateNothingProcessCountNoLimit">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The predicted renderer process count if we isolated no sites and if there
+    were no process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.IsolateNothingTotalProcessCountEstimate">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The predicted total process count if we isolated no sites, subject to the
+    process limit.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.OutOfProcessIframes">
+  <owner>nasko@chromium.org</owner>
+  <summary>
+    The count of all out-of-process iframes.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.ProxyCount">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    The count of all RenderFrameProxyHosts.  Recorded once per UMA ping.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.ProxyCountPerBrowsingInstance">
+  <owner>nick@chromium.org</owner>
+  <summary>
+    The count of RenderFrameProxyHosts in each BrowsingInstance.  Recorded each
+    UMA ping, once per BrowsingInstance.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.SiteInstancesPerBrowsingInstance">
+  <owner>nasko@chromium.org</owner>
+  <summary>
+    The count of SiteInstances in a single BrowsingInstance. Recorded each UMA
+    ping, once per BrowsingInstance.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.DataLength" units="byte">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The number of bytes in the first network packet for a response with headers
+    that imply potential illegal cross-site access. Recorded when the first
+    network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.Blocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of blocked cross-site document responses due to having HTML
+    content type header and contents sniffed as HTML. Sampled with value of 1
+    when the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.Blocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to their HTML contents. Sampled with value
+    1 when the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.) among blocked
+    cross-site document responses due to their HTML contents. Sampled with a
+    resource type (0-14) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.Blocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.) among blocked
+    cross-site document responses due to their HTML contents. Sampled with a
+    resource type (0-17) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to having HTML content type and nosniff
+    headers. Sampled with value 1 when the first network packet of a response of
+    this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having HTML content type and nosniff
+    headers. Sampled with a resource type (0-14) when the first network packet
+    of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.NoSniffBlocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having HTML content type and nosniff
+    headers. Sampled with a resource type (0-17) when the first network packet
+    of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.NotBlocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of not blocked responses despite having an HTML content type
+    header due to the failure of content sniffing. Sampled with value 1 when the
+    first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.HTML.NotBlocked.MaybeJS">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses that may be parsed as JavaScript among not blocked
+    responses. Sampled with value 1 when the first network packet of a response
+    of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.Blocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of blocked cross-site document responses due to having JSON
+    content type header and contents sniffed as JSON. Sampled with value 1 when
+    the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.Blocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to their JSON contents. Sampled with value
+    1 when the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their JSON contents. Sampled with a
+    resource type (0-14) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.Blocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their JSON contents. Sampled with a
+    resource type (0-17) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to having JSON content type and nosniff
+    headers. Sampled with value 1 when the first network packet of a response of
+    this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having JSON content type and nosniff
+    headers. Sampled with a resource type (0-14) when the first network packet
+    of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.NoSniffBlocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having JSON content type and nosniff
+    headers. Sampled with a resource type (0-17) when the first network packet
+    of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.NotBlocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of not blocked responses despite having an JSON content type
+    header due to the failure of content sniffing. Sampled with value 1 when the
+    first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.JSON.NotBlocked.MaybeJS">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses that may be parsed as JavaScript among not blocked
+    responses with a JSON content type header. Sampled with value 1 when the
+    first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.MimeType" enum="SiteIsolationMimeType">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    MIME type codes for content type header values of potentially cross-site
+    document responses, excluding same-site or not http(s) urls. Sampled with a
+    MIME type code (0-4) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of blocked cross-site document responses due to having Plain
+    content type header and contents sniffed as HTML. Sampled with value 1 when
+    the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    responses due to their Plain.HTML contents. Sampled with value 1 when the
+    first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their Plain.HTML contents. Sampled with
+    a resource type (0-14) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.HTML.Blocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their Plain.HTML contents. Sampled with
+    a resource type (0-17) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of blocked cross-site document responses due to having Plain
+    content type header and contents sniffed as JSON. Sampled with value 1 when
+    the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to their Plain.JSON contents. Sampled with
+    value 1 when the first network packet of a response of this type is
+    received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their Plain.JSON contents. Sampled with
+    a resource type (0-14) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.JSON.Blocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their Plain.JSON contents. Sampled with
+    a resource type (0-17) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram
+    name="SiteIsolation.XSD.Plain.NoSniffBlocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to having Plain content type and nosniff
+    headers. Sampled with value 1 when the first network packet of a response of
+    this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2
+    in December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having Plain content type and nosniff
+    header. Sampled with a resource type (0-14) when the first network packet of
+    a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.NoSniffBlocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having Plain content type and nosniff
+    header. Sampled with a resource type (0-17) when the first network packet of
+    a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.NotBlocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of not blocked responses despite having an Plain content type
+    header due to the failure of content sniffing. Sampled with value 1 when the
+    first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.NotBlocked.MaybeJS">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses that may be parsed as JavaScript among not blocked
+    responses with a Plain content type header. Sampled with value 1 when the
+    first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.XML.Blocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of blocked cross-site document responses due to having Plain
+    content type header and contents sniffed as XML. Sampled with value 1 when
+    the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to their Plain.XML contents. Sampled with
+    value 1 when the first network packet of a response of this type is
+    received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with renderable HTTP status codes sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their Plain.XML contents. Sampled with
+    a resource type (0-14) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.Plain.XML.Blocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with renderable HTTP status codes sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their Plain.XML contents. Sampled with
+    a resource type (0-17) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.Blocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of blocked cross-site document responses due to having XML content
+    type header and contents sniffed as XML. Sampled with value 1 when the first
+    network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.Blocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with nonrenderable HTTP status codes among blocked
+    cross-site document responses due to their XML contents. Sampled with value
+    1 when the first network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with renderable HTTP status codes sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their XML contents. Sampled with a
+    resource type (0-14) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.Blocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with renderable HTTP status codes sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to their XML contents. Sampled with a
+    resource type (0-17) when the first network packet of a response of this
+    type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.NonRenderableStatusCode">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a nonrenderable HTTP status code among blocked
+    cross-site document responses due to having XML content type and nosniff
+    headers. Sampled with value 1 when the first network packet of a response of
+    this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode"
+    enum="ContentResourceType">
+  <obsolete>
+    Superseded by SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2 in
+    December 2015.
+  </obsolete>
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having XML content type and nosniff
+    headers. Sampled with a resource type (0-14) when the first network packet
+    of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.NoSniffBlocked.RenderableStatusCode2"
+    enum="ContentResourceType2">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses with a renderable HTTP status code sub-categorized by
+    their requesting context type (e.g., image, script, etc.), among blocked
+    cross-site document responses due to having XML content type and nosniff
+    headers. Sampled with a resource type (0-17) when the first network packet
+    of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.NotBlocked">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of not blocked responses despite having an XML content type header
+    due to the failure of content sniffing. Sampled with value 1 when the first
+    network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="SiteIsolation.XSD.XML.NotBlocked.MaybeJS">
+  <owner>creis@chromium.org</owner>
+  <summary>
+    The count of responses that may be parsed as JavaScript among not blocked
+    responses with an XML content type. Sampled with value 1 when the first
+    network packet of a response of this type is received.
+  </summary>
+</histogram>
+
+<histogram name="Skia.DrawScaleFactor" enum="SkiaScaleFactor">
+  <owner>ericrk@chromium.org</owner>
+  <summary>The scale factor of any images drawn by Skia.</summary>
+</histogram>
+
+<histogram name="Skia.DrawTiled" enum="BooleanTiled">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    Whether a call to drawBitmap(Rect) or drawImage(Rect) used the tiled or
+    non-tiled rasterization path.
+  </summary>
+</histogram>
+
+<histogram name="Skia.FilterQuality" enum="SkiaFilterQuality">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The count of images drawn by Skia with a given filter quality.
+  </summary>
+</histogram>
+
+<histogram name="Skia.LockTexturePath" enum="SkiaLockTexturePath">
+  <owner>ericrk@chromium.org</owner>
+  <summary>
+    The path taken by Skia when it attempts to lock a texture for use.
+  </summary>
+</histogram>
+
+<histogram name="Snackbar.Shown" enum="SnackbarIdentifier">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Records how many times a particular snackbar was shown to the user.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.Cleaner.HasCompleted" enum="SRTCompleted">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The state of software reporter cleaner tool runs. A value of &quot;Not
+    Completed&quot; can mean either the tool crashed, or the tool was still
+    running when Chrome checked.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.Cleaner.HasRebooted" enum="BooleanRebooted">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    Whether a reboot happened since the software reporter cleaner tool has
+    finished execution with a pre-reboot exit code.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.Cleaner.RunningTime" units="ms">
+  <owner>mad@chromium.org</owner>
+  <summary>How long it took to run the software reporter cleaner tool.</summary>
+</histogram>
+
+<histogram name="SoftwareReporter.Cleaner.Version">
+  <owner>mad@chromium.org</owner>
+  <summary>The build version of the software reporter cleaner tool.</summary>
+</histogram>
+
+<histogram name="SoftwareReporter.ExperimentErrors"
+    enum="SoftwareReporterExperimentError">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Whether a configuration error prevented the experimental Software Reporter
+    from running.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.FoundUwSReadError" enum="BooleanError">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    Whether there was an error reading the registry key containing UwS found by
+    the Software Removal Tool.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.LastUploadResult" enum="BooleanSuccess">
+  <owner>mad@chromium.org</owner>
+  <summary>The result of the most recent SRT log upload.</summary>
+</histogram>
+
+<histogram name="SoftwareReporter.LogsUploadEnabled"
+    enum="SoftwareReporterLogsUploadEnabled">
+  <owner>ftirelo@chromium.org</owner>
+  <summary>
+    If logs uploads are enabled in the Software Reporter or the reason why it is
+    disabled. Recorded before each run of the Software Reporter.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.LogsUploadResult"
+    enum="SoftwareReporterLogsUploadResult">
+  <owner>ftirelo@chromium.org</owner>
+  <summary>
+    The result of the most recent Software Reporter logs upload. Written by the
+    Software Reporter in the registry and sent by Chrome after the reporter
+    finishes.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.LogsUploadResultRegistryError"
+    enum="SoftwareReporterLogsUploadResultRegistryError">
+  <owner>ftirelo@chromium.org</owner>
+  <summary>
+    Error encountered when reading the software reporter logs upload result from
+    the registry.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.MajorVersion">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    As SoftwareReporter.MinorVersion, but a double word combination of the other
+    components of the version of the software reporter. The high word is the
+    first component when there are more than one, and the low word is either the
+    second or third one, depending if there are at least 3, or 4 components.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.MemoryUsed" units="KB">
+  <owner>alito@chromium.org</owner>
+  <summary>
+    The memory used by the software reporter tool as reported by the tool itself
+    via the registry. Logged just after the software reporter tool has finished.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.MinorVersion">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The last component of the version of the software reporter that was executed
+    so we can identify when users are not getting their component updated as
+    quickly as we expect it.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.PromptUsage" enum="SRTPromptUsage">
+  <owner>mad@chromium.org</owner>
+  <summary>Usage of the Software Removal Tool (SRT) Prompt.</summary>
+</histogram>
+
+<histogram name="SoftwareReporter.RunningTime" units="ms">
+  <owner>alito@chromium.org</owner>
+  <summary>
+    The amount of time it took to run the software reporter tool as reported by
+    the tool itself via the registry. Logged just after the software reporter
+    tool has finished.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.RunningTimeAccordingToChrome" units="ms">
+  <owner>alito@chromium.org</owner>
+  <summary>
+    The amount of time it took for the software reporter to run as measured by
+    chrome. Logged just after the software reporter tool has finished.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.RunningTimeRegistryError"
+    enum="SwReporterRunningTimeRegistryError">
+  <owner>alito@chromium.org</owner>
+  <summary>
+    Error encountered when reading the software reporter tool's start and end
+    times from the registry.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.Step" enum="SwReporterStep">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The registration and execution steps for the software reporter.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.UploadFailureCount">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The total count of SRT log upload failures experienced by this machine for
+    all time. This value is reported at startup by Chrome and is capped at 64.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.UploadLongestFailureRun">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The longest run of upload failures logged by SRT runs. This value is
+    reported at startup by Chrome and is capped at 64.
+  </summary>
+</histogram>
+
+<histogram name="SoftwareReporter.UploadSuccessCount">
+  <owner>mad@chromium.org</owner>
+  <summary>
+    The total count of successful SRT log uploads experienced by this machine
+    for all time. This value is reported at startup by Chrome and is capped at
+    64.
+  </summary>
+</histogram>
+
+<histogram name="SpecialLocale.PromotionDialog" enum="SpecialLocalePromoAction">
+  <owner>ianwen@chromium.org</owner>
+  <summary>
+    Records how users interact with the special locale promotion dialog.
+  </summary>
+</histogram>
+
+<histogram name="Spellcheck.Android.Available" enum="BooleanAvailable">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Whether the Android spellchecking service was available at the start of a
+    new spellchecking session. Note that the user can disable the Android
+    spellchecking service in settings, in which case it will show up as not
+    available in the histogram.
+  </summary>
+</histogram>
+
+<histogram name="SpellCheck.Android.Latency" units="ms">
+  <owner>timvolodine@chromium.org</owner>
+  <summary>
+    Measures the amount of time it takes to receive results from the
+    spellchecking service on Android. More precisely this is the
+    SystemClock.elapsedRealtime() between the
+    SpellCheckerSession.getSentenceSuggestions() and the invocation of the
+    onGetSentenceSuggestions() callback.
+  </summary>
+</histogram>
+
+<histogram name="SpellCheck.SpellingService.Enabled" enum="BooleanEnabled">
+  <owner>groby@chromium.org</owner>
+  <owner>rlp@chromium.org</owner>
+  <summary>
+    Whether the user has opted in to asking Google for spelling suggestions.
+    Recorded both when spelling is initialized and when the preference is
+    changed.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.AppCache.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.AppCache in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite for the appcache db.</summary>
+</histogram>
+
+<histogram name="Sqlite.AutoCommitTime" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Record times for INSERT/UPDATE/DELETE statements run outside of an explicit
+    transaction.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.CloseFailure" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Error which prevented database close.</summary>
+</histogram>
+
+<histogram name="Sqlite.CommitTime" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>Record time spent in explicit COMMIT statements.</summary>
+</histogram>
+
+<histogram name="Sqlite.Cookie.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.Cookie in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite the cookie db.</summary>
+</histogram>
+
+<histogram name="Sqlite.DatabaseTracker.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.DatabaseTracker in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite the websqldb tracker db.</summary>
+</histogram>
+
+<histogram name="Sqlite.DeprecationVersionResult"
+    enum="SqliteVersionDeprecation">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Annotations for which bits of sql::MetaTable::CheckDeprecated() fire.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.DomainBoundCerts.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.DomainBoundCerts in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Error codes returned by sqlite for the domain-bound certs db.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.DomStorageDatabase.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.DomStorageDatabase in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite for the domstorage db.</summary>
+</histogram>
+
+<histogram name="Sqlite.Error" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>SQLite extended error codes.</summary>
+</histogram>
+
+<histogram name="Sqlite.Error.IOERR" enum="SqliteIOERRCode">
+  <obsolete>
+    Replaced 5/14/2013 by expanded Sqlite.Error histogram.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>SQLite extended SQLITE_IOERR codes for all databases.</summary>
+</histogram>
+
+<histogram name="Sqlite.History.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.History in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite for the history db.</summary>
+</histogram>
+
+<histogram name="Sqlite.MemoryKB.OneDay" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    SQLite memory footprint from sqlite3_memory_used() recorded 1 day after
+    first database is opened by sql::Connection.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.MemoryKB.OneHour" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    SQLite memory footprint from sqlite3_memory_used() recorded 1 hour after
+    first database is opened by sql::Connection.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.MemoryKB.OneWeek" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    SQLite memory footprint from sqlite3_memory_used() recorded 1 week after
+    first database is opened by sql::Connection.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.MemoryKB.TenMinutes" units="KB">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    SQLite memory footprint from sqlite3_memory_used() recorded 10 minutes after
+    first database is opened by sql::Connection.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.Migration.History" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Time used to migrate History database schema to a new version.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.OpenFailure" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Error which prevented database open.</summary>
+</histogram>
+
+<histogram name="Sqlite.OpenProbeFailure" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Error from first read of the database.</summary>
+</histogram>
+
+<histogram name="Sqlite.QueryTime" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>Record times for all statements run against the database.</summary>
+</histogram>
+
+<histogram name="Sqlite.Quota.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.Quota in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite for the quota db.</summary>
+</histogram>
+
+<histogram name="Sqlite.RazeDatabase" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Errors attempting to Raze() database.</summary>
+</histogram>
+
+<histogram name="Sqlite.RazeDatabase2" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Errors on second attempt to Raze() database.</summary>
+</histogram>
+
+<histogram name="Sqlite.RazeDatabaseTruncate" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Errors truncating database for Raze().</summary>
+</histogram>
+
+<histogram name="Sqlite.RecoveryAttachError" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    SQLite error code from failed ATTACH in sql::Recovery::Init().
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.RecoveryEvents" enum="SqliteRecoveryEventEnum">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Records specific failure and success cases in sql::Recovery implementation,
+    to determine which cases warrant further development.  This histogram tracks
+    detected errors, some of which may cause multiple results.  See recovery.cc
+    for details.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.RecoveryHandle" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Error from sqlite3_backup_init() in sql::Recovery.</summary>
+</histogram>
+
+<histogram name="Sqlite.RecoveryStep" enum="SqliteErrorCode">
+  <owner>shess@chromium.org</owner>
+  <summary>Error from sqlite3_backup_step() in sql::Recovery.</summary>
+</histogram>
+
+<histogram name="Sqlite.SizeKB" units="Kb">
+  <owner>peria@chromium.org</owner>
+  <owner>shess@chromium.org</owner>
+  <summary>Size in kilobytes of pre-existing database at startup.</summary>
+</histogram>
+
+<histogram name="Sqlite.Stats" enum="SqliteStatsEnum">
+  <owner>shess@chromium.org</owner>
+  <summary>Stats for different API calls in sql/.</summary>
+</histogram>
+
+<histogram name="Sqlite.Text.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.Text in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite the full text db.</summary>
+</histogram>
+
+<histogram name="Sqlite.Thumbnail.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.Thumbnail in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite for the thumbnail db.</summary>
+</histogram>
+
+<histogram name="Sqlite.UpdateTime" units="ms">
+  <owner>shess@chromium.org</owner>
+  <summary>
+    Record times for statements which could update the database file.  Includes
+    commit and autocommit time.
+  </summary>
+</histogram>
+
+<histogram name="Sqlite.Version">
+  <owner>shess@chromium.org</owner>
+  <summary>Version of pre-existing database at startup.</summary>
+</histogram>
+
+<histogram name="Sqlite.Web.Error" enum="SqliteErrorCode">
+  <obsolete>
+    Moved to Sqlite.Error.Web in M-27.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Error codes returned by sqlite the web db.</summary>
+</histogram>
+
+<histogram name="sri.resource_integrity_mismatch_event"
+    enum="SRIResourceIntegrityMismatchEvent">
+  <owner>jww@chromium.org</owner>
+  <summary>
+    When resources are checked for mismatching integrity and whether the
+    mismatch forces a refetch.
+  </summary>
+</histogram>
+
+<histogram name="SSL.CertificateErrorReportFailure" enum="NetErrorCodes">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Users can opt in to send reports of certificate validation errors to Google.
+    This records the error code whenever Chrome fails to send such a report.
+  </summary>
+</histogram>
+
+<histogram name="SSL.ExpectCTReportFailure" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated as of 07/2016. Replaced with SSL.ExpectCTReportFailure2.
+  </obsolete>
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Sites can opt in to Expect CT, a reporting feature that sends a report
+    whenever a TLS connection does not have valid Certificate Transparency
+    information associated with it. This records the error code when Chrome
+    fails to send an Expect CT report.
+  </summary>
+</histogram>
+
+<histogram name="SSL.ExpectCTReportFailure2" enum="NetErrorCodes">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Sites can opt in to Expect CT, a reporting feature that sends a report
+    whenever a TLS connection does not have valid Certificate Transparency
+    information associated with it. This records the error code when Chrome
+    fails to send an Expect CT report.
+  </summary>
+</histogram>
+
+<histogram name="SSL.ExpectCTReportSendingAttempt">
+  <owner>estark@chromium.org</owner>
+  <summary>
+    Sites can opt in to Expect CT, a reporting feature that sends a report
+    whenever a TLS connection does not have valid Certificate Transparency
+    information associated with it. This metric fires whenever Chrome attempts
+    to send an Expect CT report.
+  </summary>
+</histogram>
+
+<histogram name="SSL.InsecureContent" enum="InsecureContentType">
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Keeps track of various insecure content events, such as loading an HTTP
+    script from an HTTPS page.
+  </summary>
+</histogram>
+
+<histogram name="SSL.MarkHttpAsStatus" enum="MarkHttpAsStatus">
+  <owner>estark@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Reports whether the user has selected to mark HTTP origins with an
+    experimental UI treatment (such as showing a warning on HTTP pages that
+    collect sensitive information). This histogram is recorded whenever the
+    security level (the overall security state of a page, roughly corresponding
+    to the lock icon) is computed for an HTTP page.
+  </summary>
+</histogram>
+
+<histogram name="SSL.MarkNonSecureAsStatus" enum="MarkNonSecureAsStatus">
+  <obsolete>
+    Deprecated 09/2016 and replaced with SSL.MarkHttpAsStatus.
+  </obsolete>
+  <owner>palmer@chromium.org</owner>
+  <summary>
+    Reports whether the user has selected to mark non-secure origins as Neutral
+    (the status quo), Dubious, or Non-Secure.
+  </summary>
+</histogram>
+
+<histogram name="Stability.BadMessageTerminated.Chrome"
+    enum="BadMessageReasonChrome">
+  <owner>nick@chromium.org</owner>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Count of processes killed by chrome/browser because they sent an IPC that
+    couldn't be properly handled. Categories are the reasons (code locations)
+    for the kills.
+  </summary>
+</histogram>
+
+<histogram name="Stability.BadMessageTerminated.Content"
+    enum="BadMessageReasonContent">
+  <owner>jam@chromium.org</owner>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Count of child processes killed because they sent an IPC that couldn't be
+    properly handled. Categories are the reasons (code locations) for the kills.
+  </summary>
+</histogram>
+
+<histogram name="Stability.BadMessageTerminated.Extensions"
+    enum="BadMessageReasonExtensions">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Count of extension processes killed because they sent an IPC that couldn't
+    be properly handled. Categories are the reasons (code locations) for the
+    kills.
+  </summary>
+</histogram>
+
+<histogram name="Stability.BadMessageTerminated.NaCl"
+    enum="BadMessageReasonNaCl">
+  <owner>nick@chromium.org</owner>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Count of processes killed because they sent a NaCl IPC that couldn't be
+    properly handled. Categories are the reasons (code locations) for the kills.
+  </summary>
+</histogram>
+
+<histogram name="Stability.BadMessageTerminated.PasswordManager"
+    enum="BadMessageReasonPasswordManager">
+  <owner>nick@chromium.org</owner>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Count of processes killed because they sent a bad IPC that couldn't be
+    properly handled. Categories are the reasons (code locations) for the kills.
+  </summary>
+</histogram>
+
+<histogram name="Stability.BrowserExitCodes" enum="WindowsExitCode">
+  <owner>siggi@chromium.org</owner>
+  <summary>
+    Records the exit code of the browser process (on Windows) from the previous
+    launch. On crash, the exit code will indicate the exception code of the
+    crash. This is emitted in stability data with the first report on a
+    subsequent launch.
+  </summary>
+</histogram>
+
+<histogram name="Stability.ExitFunnel" units="ms">
+  <owner>siggi@chromium.org</owner>
+  <summary>
+    Temporary instrumentation to record the Windows browser's exit path. See
+    http://crbug.com/412384.
+  </summary>
+</histogram>
+
+<histogram name="Stability.Internals.DataDiscardCount" units="counts">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Number of times stability data was discarded. This is accumulated since the
+    last report, even across versions. This is logged during stability metric
+    recording for the following log sent.
+  </summary>
+</histogram>
+
+<histogram name="Stability.Internals.InitialStabilityLogDeferredCount"
+    units="counts">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Number of times the initial stability log upload was deferred to the next
+    startup. This is logged during stability metric recording for the following
+    log sent.
+  </summary>
+</histogram>
+
+<histogram name="Stability.Internals.VersionMismatchCount" units="counts">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Number of times the version number stored in prefs did not match the
+    serialized system profile version number. This is logged during stability
+    metric recording.
+  </summary>
+</histogram>
+
+<histogram name="Stability.MobileSessionShutdownType"
+    enum="MobileSessionShutdownType">
+  <owner>lpromero@chromium.org</owner>
+  <owner>olivierrobin@chromium.org</owner>
+  <summary>
+    Type of the shutdown. This histogram is recorded at startup and logs a
+    sample for the previous session. A clean shutdown is one where the app
+    enters the background before being killed. Other shutdowns are all some sort
+    of crash. The absence of a crash log indicates that the app was killed by
+    the OS, normally due to memory pressure. If memory pressure is extremely
+    high, the app may not have had a chance to response to a memory warning
+    before being killed. For first launch after upgrade, the crash reports may
+    be discarded before this histogram is written to so it's not possible to
+    determine if there's a valid crash log present or not.
+  </summary>
+</histogram>
+
+<histogram name="Stars.Goog_Related" units="%">
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Percentage of clips with Google related urls (points to internal Google
+    resources). Logs every time user goes to chrome://bookmarks.
+  </summary>
+</histogram>
+
+<histogram name="Stars.Goog_Related_20_Percent" units="%">
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Percentage of clips with Google related urls within first 20 (points to
+    internal Google resources). Logs every time user goes to chrome://bookmarks.
+  </summary>
+</histogram>
+
+<histogram name="Stars.Images_Percent" units="%">
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Percentage of clips with images. Logs every time user goes to
+    chrome://bookmarks.
+  </summary>
+</histogram>
+
+<histogram name="Stars.Images_Percent_First20" units="%">
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Percentage of clips with images within first 20. Logs every time user goes
+    to chrome://bookmarks.
+  </summary>
+</histogram>
+
+<histogram name="Stars.LaunchLocation" enum="StarsLaunchLocation">
+  <owner>ianwen@chromium.org</owner>
+  <summary>Logs a UI location from which a bookmark is launched.</summary>
+</histogram>
+
+<histogram name="Stars.No_Images_Snippets" units="%">
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Percentage of clips without images or snippets. Logs every time user goes to
+    chrome://bookmarks.
+  </summary>
+</histogram>
+
+<histogram name="Stars.No_Img_No_Snippet_20_Percent" units="%">
+  <owner>yefim@chromium.org</owner>
+  <summary>
+    Percentage of clips without images or snippets within first 20. Logs every
+    time user goes to chrome://bookmarks.
+  </summary>
+</histogram>
+
+<histogram name="Startup.AfterStartupTaskCount">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    The number of after-startup tasks that were queued prior to startup
+    completion and deferred until that time.
+  </summary>
+</histogram>
+
+<histogram name="Startup.AfterStartupTaskDelayedUntilTime" units="ms">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Time from the process creation until deferred after-startup tasks began
+    running.
+  </summary>
+</histogram>
+
+<histogram name="Startup.AppListFirstPaintColdStart" units="ms">
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    Time for a newly created browser process to perform the first paint of the
+    app launcher, when started with the --show-app-list flag and with no
+    currently running Chrome processes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.AppListFirstPaintWarmStart" units="ms">
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    Time for a running browser process to perform the first paint of the app
+    launcher. Measured from the time a second Chrome process started, which sent
+    its --show-app-list command line argument to the already-running process and
+    will soon exit.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BringToForegroundReason"
+    enum="BooleanBringToForegroundReason">
+  <owner>johnme@chromium.org</owner>
+  <summary>
+    Records the cause, each time Chrome is brought to the foreground. Currently
+    only checks if a NotificationUIManager notification was shown in the last 5
+    seconds (includes Web Notifications, but not media or Cast).
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserLaunchURLCount" units="urls">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    Measured when Chrome is invoked, this counts the number of URLs passed via
+    command line. Note that this handles the case of a URL passed to Chrome
+    starting up, or when a running Chrome is given the message to open a new
+    URL.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMainRunnerImplInitializeLongTime" units="ms">
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during BrowserMainRunnerImpl::Initialize.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMainRunnerImplInitializeStep1Time" units="ms">
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the first section of
+    BrowserMainRunnerImpl::Initialize.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMainRunnerImplInitializeStep2Time" units="ms">
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the second section of
+    BrowserMainRunnerImpl::Initialize.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMainToRendererMain" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Time from the ChromeMain() entry in the browser process to the first
+    RendererMain() entry.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartHardFaultCount" units="faults">
+  <owner>chrisha@chromium.org</owner>
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    The number of hard faults incurred in the browser process from startup to
+    start of the main thread's message loop, not including first runs of the
+    browser. This is only reported on Windows 7 and greater.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartHardFaultCount.FirstRun"
+    units="faults">
+  <obsolete>
+    Removed 1/2016.
+  </obsolete>
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The number of hard faults incurred in the browser process from startup to
+    start of the main thread's message loop on first run. This is only reported
+    on Windows 7 and greater.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartHardFaultCount.Success"
+    enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 12/2015. No longer tracked because values collected on stable
+    show that the function pretty much never fails (succeeds 99.9996% of the
+    time).
+  </obsolete>
+  <owner>chrisha@chromium.org</owner>
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    If OS support was detected (Windows 7 and greater) indicates whether it was
+    possible to determine the number of hard faults that have occurred in the
+    process from startup to start of the main thread's message loop. This can
+    fail because the underlying call is inherently racy.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartTime">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Time from browser startup to the start of the main thread's message loop.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from main entry to the start of the main thread's message loop. This
+    stat is only recorded after 7 minutes of OS uptime to try to mitigate the
+    variance resulting from Chrome being autostarted. Replaced with
+    Startup.BrowserMessageLoopStartTimeFromMainEntry2 which is recorded all the
+    time. TODO(fdoray): Deprecate this once M54 hits stable. crbug.com/634408
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"
+    units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from main entry to the start of the main thread's message loop on first
+    run. This stat is only recorded after 7 minutes of OS uptime to try to
+    mitigate the variance resulting from Chrome being autostarted. Replaced with
+    Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2 which is recorded
+    all the time. TODO(fdoray): Deprecate this once M54 hits stable.
+    crbug.com/634408
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2"
+    units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from main entry to the start of the main thread's message loop on first
+    run.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from main entry to the start of the main thread's message loop.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserOpenTabs">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Time taken to open the initial tab or to restore tabs from previous session.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserProcessImpl_PreMainMessageLoopRunTime"
+    units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during
+    BrowserProcessImpl::PreMainMessageLoopRun.
+  </summary>
+</histogram>
+
+<histogram name="Startup.BrowserWindowDisplay" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Time from browser startup to the time the browser window initially becomes
+    visible.
+  </summary>
+</histogram>
+
+<histogram name="Startup.ChromeCast.TimeToDisplayVideo" units="ms">
+  <obsolete>
+    Deprecated 7/2015. To be replaced with Cast events.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    The elapsed time from the ChromeCast application launch to the first video
+    frame displayed.
+  </summary>
+</histogram>
+
+<histogram name="Startup.CreateFirstProfile" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    How long it takes to load the original profile synchronously on the UI
+    thread.
+  </summary>
+</histogram>
+
+<histogram
+    name="Startup.Experimental.FirstWebContents.MainFrameLoad.ManyBuckets"
+    units="ms">
+  <obsolete>
+    Removed in M-41.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    An experimental metric only collected on the dev and canary channels.
+    Measure the elapsed time from process launch to the first main frame load of
+    the first web contents. Uses significantly more buckets, with reduced
+    ranges.
+  </summary>
+</histogram>
+
+<histogram
+    name="Startup.Experimental.FirstWebContents.MainFrameLoad.StandardBuckets"
+    units="ms">
+  <obsolete>
+    Moved to Startup.FirstWebContents.MainFrameLoad in M-41.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    An experimental metric only collected on the dev and canary channels.
+    Measure the elapsed time from process launch to the first main frame load of
+    the first web contents. Uses standard bucket ranges.
+  </summary>
+</histogram>
+
+<histogram
+    name="Startup.Experimental.FirstWebContents.NonEmptyPaint.ManyBuckets"
+    units="ms">
+  <obsolete>
+    Removed in M-41.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    An experimental metric only collected on the dev and canary channels.
+    Measure the elapsed time from process launch to the first non-empty paint of
+    the first web contents. Uses significantly more buckets, with reduced
+    ranges.
+  </summary>
+</histogram>
+
+<histogram
+    name="Startup.Experimental.FirstWebContents.NonEmptyPaint.StandardBuckets"
+    units="ms">
+  <obsolete>
+    Moved to Startup.FirstWebContents.NonEmptyPaint in M-41.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    An experimental metric only collected on the dev and canary channels.
+    Measure the elapsed time from process launch to the first non-empty paint of
+    the first web contents. Uses standard bucket ranges.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstCommitNavigationTime" units="ms">
+  <obsolete>
+    Replaced by Startup.FirstCommitNavigationTime2
+  </obsolete>
+  <owner>pasko@chromium.org</owner>
+  <summary>
+    [Android only] The time from the earliest entry point in the browser process
+    to the moment the first navigation is committed, i.e. when renderer gets the
+    first byte of the document.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstCommitNavigationTime2" units="ms">
+  <owner>pasko@chromium.org</owner>
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    [Android only] The time from the first foreground entry point in the app to
+    the moment the first navigation is committed, i.e. when renderer gets the
+    first byte of the document.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.FinishReason"
+    enum="StartupProfilingFinishReason">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] The reason for which startup profiling was deemed complete. Logged
+    once per session on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.MainFrameLoad" units="ms">
+  <obsolete>
+    Deprecated with 3/2016 with M48.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] DEPRECATED (but kept as a known basis until M48 is phased out).
+    Measure the elapsed time from process launch to the first main frame load of
+    the first web contents. Deprecated in favor of
+    Startup.FirstWebContents.MainFrameLoad2 which now avoids counting ill-cases
+    (ref. FirstWebContentsProfiler::FinishReason).
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.MainFrameLoad2" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] Measure the elapsed time from process launch to the first main
+    frame load of the first web contents. Only comprised of cases where the
+    initial foreground tab gets to complete its rendering task unimpeded (an
+    improvement over Startup.FirstWebContents.MainFrameLoad).
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.MainNavigationFinished" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] Measure the elapsed time from process launch to the moment when
+    the navigation is committed (first bytes received) in the first web
+    contents' main frame.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.MainNavigationStart" units="ms">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] Measure the elapsed time from process launch to the beginning of
+    navigation in the first web contents' main frame.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.NonEmptyPaint" units="ms">
+  <obsolete>
+    Deprecated with 3/2016 with M48.
+  </obsolete>
+  <owner>erikchen@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] DEPRECATED (but kept as a known basis until M48 is phased out).
+    Measure the elapsed time from process launch to the first non- empty paint
+    of the first web contents. Deprecated in favor of
+    Startup.FirstWebContents.NonEmptyPaint2 which now avoids counting ill-cases
+    (ref. FirstWebContentsProfiler::FinishReason).
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.NonEmptyPaint2" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    [Desktop] Measure the elapsed time from process launch to the first non-
+    empty paint of the first web contents. Only comprised of cases where the
+    initial foreground tab gets to complete its rendering task unimpeded (an
+    improvement over Startup.FirstWebContents.NonEmptyPaint).
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.UINotResponsive" units="ms">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    [Desktop] Measures the execution time for a single task to execute on UI if
+    it was not possible to execute UI tasks under 1/60s within certain limits,
+    after WebContents was painted at least once. This is recorded at most once
+    per Chrome launch. Used as a measure of responsiveness on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.UINotResponsive_10sec" units="ms">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    [Desktop] Measures the elapsed time for a single task to execute on UI if it
+    was not possible to execute it under 1/60s within certain limits, 10 second
+    after first WebContents was painted at least once.  This is recorded at most
+    once per Chrome launch. Used as a measure of responsiveness on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.UINotResponsive_1sec" units="ms">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    [Desktop] Measures the elapsed time for a single task to execute on UI if it
+    was not possible to execute it under 1/60s within certain limits, 1 second
+    after first WebContents was painted at least once.  This is recorded at most
+    once per Chrome launch. Used as a measure of responsiveness on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.UIResponsive" units="ms">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    [Desktop] Measures the elapsed time it takes for a task to execute on UI
+    under 1/60s after first WebContents was painted at least once. This is
+    recorded at most once per Chrome launch. Used as a measure of responsiveness
+    on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.UIResponsive_10sec" units="ms">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    [Desktop] Measures the elapsed time it takes for a task to execute on UI
+    under 1/60s, 10 second after the first WebContents was painted.  This is
+    recorded at most once per Chrome launch. Used as a measure of responsiveness
+    on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.FirstWebContents.UIResponsive_1sec" units="ms">
+  <obsolete>
+    Deprecated 10/2015.
+  </obsolete>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    [Desktop] Measures the elapsed time it takes for a task to execute on UI
+    under 1/60s, 1 second after the first WebContents was painted. This is
+    recorded at most once per Chrome launch. Used as a measure of responsiveness
+    on startup.
+  </summary>
+</histogram>
+
+<histogram name="Startup.Fling.TimeToDisplayVideo" units="ms">
+  <obsolete>
+    Deprecated 7/2015. To be replaced with Cast events.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    The elapsed time from the Fling application launch to the first video frame
+    displayed.
+  </summary>
+</histogram>
+
+<histogram name="Startup.IsResume">
+  <obsolete>
+    Deprecated 12/2011. Merged into MobileSessionStartType.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>Whether a startup is a resume (vs a cold start).</summary>
+</histogram>
+
+<histogram name="Startup.LoadTime.ExeMainToDllMain">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from the main() function in chrome.exe to chrome.dll's main(). This
+    stat is only recorded after 7 minutes of OS uptime to try to mitigate the
+    variance resulting from Chrome being autostarted. Replaced with
+    Startup.LoadTime.ExeMainToDllMain2 which is recorded all the time.
+    TODO(fdoray): Deprecate this once M54 hits stable. crbug.com/634408
+  </summary>
+</histogram>
+
+<histogram name="Startup.LoadTime.ExeMainToDllMain2">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from the main() function in chrome.exe to chrome.dll's main().
+  </summary>
+</histogram>
+
+<histogram name="Startup.LoadTime.ProcessCreateToDllMain">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from the process creation to chrome.dll's main(). This stat is only
+    recorded after 7 minutes of OS uptime to try to mitigate the variance
+    resulting from Chrome being autostarted. Replaced with
+    Startup.LoadTime.ProcessCreateToDllMain2 which is recorded all the time.
+    TODO(fdoray): Deprecate this once M54 hits stable. crbug.com/634408
+  </summary>
+</histogram>
+
+<histogram name="Startup.LoadTime.ProcessCreateToDllMain2">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>Time from the process creation to chrome.dll's main().</summary>
+</histogram>
+
+<histogram name="Startup.LoadTime.ProcessCreateToExeMain">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from the process creation to executing the main() function in
+    chrome.exe. This stat is only recorded after 7 minutes of OS uptime to try
+    to mitigate the variance resulting from Chrome being autostarted. Replaced
+    with Startup.LoadTime.ProcessCreateToExeMain2 which is recorded all the
+    time. TODO(fdoray): Deprecate this once M54 hits stable. crbug.com/634408
+  </summary>
+</histogram>
+
+<histogram name="Startup.LoadTime.ProcessCreateToExeMain2">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Time from the process creation to executing the main() function in
+    chrome.exe.
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.AwakeFromNib" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    -[AppControllerMac awakeFromNib].
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.DockIconWillFinishBouncing" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    -[AppControllerMac didFinishLaunching:]. At that point, the dock icon will
+    finish its current animation and stop bouncing.
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.PostMainMessageLoopStart" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    ChromeBrowserMainPartsMac::PostMainMessageLoopStart.
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.PostProfileInit" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    ChromeBrowserMainPartsMac::PostProfileInit.
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.PreMainMessageLoopStart" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    ChromeBrowserMainPartsMac::PreMainMessageLoopStart.
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.PreProfileInit" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    ChromeBrowserMainPartsMac::PreProfileInit.
+  </summary>
+</histogram>
+
+<histogram name="Startup.OSX.WillFinishLaunching" units="ms">
+  <owner>erikchen@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed between main entry and the invocation of
+    -[AppControllerMac willFinishLaunching:].
+  </summary>
+</histogram>
+
+<histogram name="Startup.PreMainMessageLoopRunImplLongTime" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during
+    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
+  </summary>
+</histogram>
+
+<histogram name="Startup.PreMainMessageLoopRunImplStep1Time" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the first untracked section of
+    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
+  </summary>
+</histogram>
+
+<histogram name="Startup.PreMainMessageLoopRunImplStep2Time" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the second untracked section of
+    ChromeBrowserMainParts::PreMainMessageLoopRunImpl. Not written for Android.
+  </summary>
+</histogram>
+
+<histogram name="Startup.PreMainMessageLoopRunImplStep3Time" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during the third untracked section of
+    ChromeBrowserMainParts::PreMainMessageLoopRunImpl. Not written for Android.
+  </summary>
+</histogram>
+
+<histogram name="Startup.PreMainMessageLoopRunImplTime" units="ms">
+  <obsolete>
+    Deprecated as of 2/2015.
+  </obsolete>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during
+    ChromeBrowserMainParts::PreMainMessageLoopRunImpl.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SameVersionStartupCount">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    The number of startups the current version has been through. Reported once
+    per Chrome session, on startup. Any user that reports X for this version
+    will also have previously reported [1,X-1] for this version through the
+    previous X-1 Chrome sessions.
+  </summary>
+</histogram>
+
+<histogram name="Startup.ShowAppListColdStart" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    Time for a newly created browser process to reach the code that starts
+    showing the app launcher, when started with the --show-app-list flag and
+    with no currently running Chrome processes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.ShowAppListWarmStart" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>tapted@chromium.org</owner>
+  <summary>
+    Time for a running browser process to reach the code that starts showing the
+    app launcher. Measured from the time a second Chrome process started, which
+    sent its --show-app-list command line argument to the already-running
+    process and will soon exit.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupBookmarksLoad" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to load bookmarks from disk. This measurement is only sent for
+    startups that take &gt;10 seconds after an uptime of 7 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupExtensionServiceInitAfterImport" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to finish initialization of the extension service including
+    loading built-in extensions. This measurement is only sent for startups that
+    take &gt;10 seconds after an uptime of 7 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupFinalProfileInit" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time the final stages of profile initialization taking including
+    initialization of profile keyed services. This measurement is only sent for
+    startups that take &gt;10 seconds after an uptime of 7 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupNSSInit" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to load the NSS libraries and initialize it. This measurement
+    is only sent for startups that take &gt;10 seconds after an uptime of 7
+    minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupPreferenceLoading" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to load preferences from disk. This measurement is only sent
+    for startups that take &gt;10 seconds after an uptime of 7 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupProfileIODataInit" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to initialize the ProfileIOData object - this includes
+    initialization of the cookie store. This measurement is only sent for
+    startups that take &gt;10 seconds after an uptime of 7 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupSafeBrowsingGetDatabase" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to load the safe browsing database from disk. This measurement
+    is only sent for startups that take &gt;10 seconds after an uptime of 7
+    minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupSafeBrowsingServiceInitialize" units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes to initialize the safe browsing service. This measurement is
+    only sent for startups that take &gt;10 seconds after an uptime of 7
+    minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.SlowStartupSessionServiceCreateTabsAndWindows"
+    units="ms">
+  <obsolete>
+    Deprecated 06/2015.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <summary>
+    Time it takes for session restore to finish initiating creation of restored
+    tabs and windows. This measurement is only sent for startups that take
+    &gt;10 seconds after an uptime of 7 minutes.
+  </summary>
+</histogram>
+
+<histogram name="Startup.StartupBrowserCreator_ProcessCmdLineImplTime"
+    units="ms">
+  <obsolete>
+    Deprecated 02/2015. Startup.StartupBrowserCreator_Start is more useful.
+  </obsolete>
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during
+    StartupBrowserCreator::ProcessCmdLineImpl.
+  </summary>
+</histogram>
+
+<histogram name="Startup.StartupBrowserCreator_Start" units="ms">
+  <owner>rkaplow@chromium.org</owner>
+  <summary>
+    The amount of time that elapsed during StartupBrowserCreator::Start().
+  </summary>
+</histogram>
+
+<histogram name="Startup.SystemUptime" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    The time elapsed between system boot and Chrome browser process launch. This
+    is recorded just before the main message loop starts.
+  </summary>
+</histogram>
+
+<histogram name="Startup.Temperature" enum="StartupTemperature">
+  <owner>chrisha@chromium.org</owner>
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Indicates whether or not the given startup was warm, cold or unable to be
+    determined. This is based off observing the number of hard faults that occur
+    during startup prior to Startup.BrowserMessageLoopStartTime.
+  </summary>
+</histogram>
+
+<histogram name="Startup.TimeSinceLastStartup" units="minutes">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Time elapsed since the last startup that went up to the main message loop
+    start. This is recorded just before the main message loop starts.
+  </summary>
+</histogram>
+
+<histogram name="Startup.WarmStartTimeFromRemoteProcessStart" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Time for a running browser process to start processing the command line
+    passed in by a second Chrome process, which just sent its command line
+    arguments to the already-running process and will soon exit. Measured from
+    the time the second Chrome process started.
+  </summary>
+</histogram>
+
+<histogram name="StartupTimeBomb.Alarm" units="ms">
+  <obsolete>
+    Deprecated as of 10/2014.
+  </obsolete>
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    Time duration measured from the time the startup timebomb was started and
+    when it went off.
+  </summary>
+</histogram>
+
+<histogram name="Storage.BlacklistedImportantSites.Reason"
+    enum="ClearDataSiteBlacklistCrossedReason">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    This is recorded for every site that the user blacklists when they when they
+    clear browsing data. It indicates which signals were used to show the given
+    site to the user that the user then chose to exclude from clearing.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.Broken" enum="BooleanBroken">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    If a newly constructed blob is broken. See Storage.Blob.BrokenReason for a
+    the broken reasons.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.BrokenReason" enum="BlobBrokenReason">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The reason a blob is broken, reported only for broken blobs upon
+    construction. See Storage.Blob.Broken for the breakdown of blobs broken vs
+    unbroken.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.CreateDirectoryResult" enum="PlatformFileError">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when we create the blob storage directory for the blob storage
+    system. When we need to write blob data to files, we create this directory
+    if it doesn't exist. We write blob data to files when either we have a new
+    blob that's larger than our memory limit, or we're approaching our in-memory
+    limit for blob storage.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.ExceededMemory" enum="Boolean">
+  <obsolete>
+    Deprecated as of 3/2016. Use Storage.Blob.Broken to see the fraction of
+    blobs that are broken, and Storage.Blob.BrokenReason for the number of
+    broken blobs that are broken because of memory constraints.
+  </obsolete>
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    True if a created blob exceeded the internal in-memory storage memory limit
+    for blobs.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.InvalidReference" enum="RefcountOperation">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Counts the number of times we have an invalid refcount operation. An invalid
+    increment means the blob didn't exist, and an invalid decrement means we
+    don't have any record of the blob in our host.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.InvalidURLRegister" enum="RefcountOperation">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Counts the number of times we have an invalid url registration operation. An
+    invalid increment means the blob isn't in use by the host yet or the url is
+    already mapped. An invalid decrement means the url isn't registered.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.ItemCount" units="Blob Items">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The number of blob items in a blob, recorded at blob construction. (Blobs
+    are immutable, so this won't change afterwards).
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.PageFileSize" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Size of a page file created for blob data by the blob storage system.
+    Recorded before we create the file and write the blob items. We page blob
+    data to files when we get close to our maximum blob memory usage.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.PagingDisabled" enum="PlatformFileError">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when we disable paging blobs to file in the blob storage system.
+    This occurs when we experience a filesystem error during writing blob data
+    to disk. We write blob data to files when either we have a new blob that's
+    larger than our memory limit, or we're approaching our in-memory limit for
+    blob storage. The relevant error is recorded here.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.RendererFileSeekFailed" enum="Boolean">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Whether seeking within a file (in order to write a part of a blob) failed in
+    the renderer.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.RendererFileWriteFailed" enum="Boolean">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Whether writing part of a blob to a file failed in the renderer.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.ReusedItem" enum="BooleanReused">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    True if we reuse an item for a blob created from using Blob.slice, recorded
+    in BlobStorageContext on blob creation.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.StorageSizeAfterAppend" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Records the total in-memory storage size of blobs before a blob item is
+    appended.  Can be subtracted by Storage.Blob.StorageSizeBeforeAppend to find
+    the true distribution of blob storage sizes.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.StorageSizeBeforeAppend" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Records the total in-memory storage size of blobs before a blob item is
+    appended.  Can be subtracted from Storage.Blob.StorageSizeAfterAppend to
+    find the true distribution of blob storage sizes.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.TotalSize" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The total in-memory size in KB of finished blobs. Recorded in
+    BlobStorageContext when the blob is finished being created. This can include
+    memory that is shared with other blobs or memory from repeated internal
+    items.
+  </summary>
+</histogram>
+
+<histogram name="Storage.Blob.TotalUnsharedSize" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The total amount of unique memory used to create a blob. Recorded in
+    BlobStorageContext when the blob is finished being created. This does not
+    include memory that is shared with other blobs. If multiple of the same blob
+    item is present, then this number will reflect the size of the single item.
+  </summary>
+</histogram>
+
+<histogram name="Storage.BlobItemSize" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The size in KB of items (or parts of items) appended to blobs.
+  </summary>
+</histogram>
+
+<histogram name="Storage.BlobItemSize.BlobSlice" units="KB">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    The size in KB of items (or parts of items) appended to blobs that come from
+    the slicing of other blobs.  This happens when using Blob.slice, where we
+    are using a part of an item in the original blob (not the whole item).
+  </summary>
+</histogram>
+
+<histogram name="Storage.BlobItemSize.File.Unknown" enum="BooleanUnknown">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    True if the file size on blob append is unknown (which means the full file),
+    or false if a specific file length was populated. Recorded in
+    BlobStorageContext when we are adding a file item to a blob.
+  </summary>
+</histogram>
+
+<histogram name="Storage.BlobItemSize.FileSystem.Unknown" enum="BooleanUnknown">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    True if the file size of a filesystem object on blob append is unknown
+    (which means the full file), or false if a specific file length was
+    populated. Recorded in BlobStorageContext when we are adding a filesystem
+    item to a blob.
+  </summary>
+</histogram>
+
+<histogram name="Storage.ImportantSites.CBDChosenReason"
+    enum="ImportantSitesReason">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    When a user chooses to blacklist one or more sites when they clear browsing
+    data, this is recorded for every reason each chosen site was marked as
+    important. It indicates which signals were used to show the given site to
+    the user that the user then chose to exclude from clearing.
+  </summary>
+</histogram>
+
+<histogram name="Storage.ImportantSites.CBDChosenReasonCount" units="count">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    This records the number of reasons each important site had that the user
+    chose to blacklist when clearing browsing data.
+  </summary>
+</histogram>
+
+<histogram name="Storage.ImportantSites.CBDIgnoredReason"
+    enum="ImportantSitesReason">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    When a user chooses to blacklist one or more sites when they clear browsing
+    data, this is recorded for every reason each unchosen site was marked as
+    important. It indicates which signals were used to show the given site to
+    the user, which the user then ignored and did not select to blacklist from
+    clearing data.
+  </summary>
+</histogram>
+
+<histogram name="Storage.ImportantSites.CBDIgnoredReasonCount" units="count">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    This records the number of reasons each important site had that the user
+    chose to NOT blacklist when clearing browsing data.
+  </summary>
+</histogram>
+
+<histogram name="Storage.ImportantSites.GeneratedReason"
+    enum="ImportantSitesReason">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    Recorded when we generate a list of important sites. This can happen when
+    the user opens the Clear Browsing Data dialog on Android, views the Storage
+    tab in Site Settings on Android, or launches 'Manage Storage' from Android
+    System Settings for Chrome. We record every reason each site was chosen in
+    this metric. This means that we can report this metric multiple times for a
+    single site.
+  </summary>
+</histogram>
+
+<histogram name="Storage.ImportantSites.GeneratedReasonCount" units="count">
+  <owner>dmurph@chromium.org</owner>
+  <summary>
+    This records the number of reasons qualifying a site for being 'important'.
+    We record this for every site when we generate a list of important sites,
+    described in &quot;Storage.ImportantSites.GeneratedReason&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Style.AuthorStyleSheet.ParseTime" units="us">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    Microseconds spent in StyleSheetContents::parseAuthorStyleSheet.
+  </summary>
+</histogram>
+
+<histogram name="Style.UpdateTime" units="us">
+  <owner>csharrison@chromium.org</owner>
+  <summary>Microseconds spent in Document::updateStyle.</summary>
+</histogram>
+
+<histogram name="SubresourceFilter.DocumentLoad.ActivationState"
+    enum="SubresourceFilterActivationState">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whenever a document load is committed in a main frame or subframe, records
+    whether subresource filtering should be activated for that load.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Disallowed"
+    units="resource loads">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whenever a document load is finished in a main frame or subframe with
+    subresource filtering activated, records the total number of subresource
+    loads that have been disallowed. This only differs from `MatchedRules` when
+    filtering is performed in dry-run mode.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Evaluated"
+    units="resource loads">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whenever a document load is finished in a main frame or subframe with
+    subresource filtering activated, records the total number of subresource
+    loads that have been evaluated. This only differs from 'Total' when the
+    document is subject to a deactivating rule with DOCUMENT activation type.
+  </summary>
+</histogram>
+
+<histogram
+    name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.MatchedRules"
+    units="resource loads">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whenever a document load is finished in a main frame or subframe with
+    subresource filtering activated, records the total number of subresource
+    loads that have matched filtering rules. This only differs from `Disallowed`
+    when filtering is performed in dry-run mode.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.DocumentLoad.NumSubresourceLoads.Total"
+    units="resource loads">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whenever a document load is finished in a main frame or subframe with
+    subresource filtering activated, records the total number of subresource
+    loads that have gone through the subresource filtering pipeline.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.DocumentLoad.RulesetIsAvailable"
+    enum="BooleanAvailable">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whenever a document load is committed in a main frame or subframe and
+    subresource filtering should be activated, records whether the filtering
+    rules are available.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.IndexRuleset.NumUnsupportedRules"
+    units="rules">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The number of rules that could be not be successfully indexed and therefore
+    have been ignored. Recorded every time the RulesetService kicks off a
+    ruleset indexing process and it reaches the point where rules are getting
+    indexed.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.IndexRuleset.WallDuration" units="ms">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    The total time it took to read and index all rules. Includes I/O time for
+    reading the unindexed rules, but not for writing the indexed ruleset.
+    Recorded every time the RulesetService kicks off a ruleset indexing process.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.Prompt.NumReloads" enum="BooleanRequested">
+  <owner>melandory@chromium.org</owner>
+  <summary>
+    Number of times the user has requested a reload for the page by clicking on
+    the reload button.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.Prompt.NumVisibility" enum="BooleanVisible">
+  <owner>melandory@chromium.org</owner>
+  <summary>
+    Number of times Safebrowsing Subresource Filter decided to toggle visibility
+    of the prompt.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.WriteRuleset.ReplaceFileError"
+    enum="PlatformFileError">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Records the exact error whenever writing a ruleset fails at the step where
+    the ruleset would be moved from the scratch directory to its final location.
+  </summary>
+</histogram>
+
+<histogram name="SubresourceFilter.WriteRuleset.Result"
+    enum="SubresourceFilterWriteRulesetResult">
+  <owner>engedy@chromium.org</owner>
+  <summary>
+    Whether indexing a version of the ruleset and writing it to disk succeeded,
+    or failed at a particular step. Recorded every time the RulesetService kicks
+    off a ruleset indexing process.
+  </summary>
+</histogram>
+
+<histogram name="Suggestions.FailedRequestErrorCode" enum="NetErrorCodes">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The counts of network error codes encountered by SuggestionsService when an
+    attempt to fetch suggestions from the server fails.
+  </summary>
+</histogram>
+
+<histogram name="Suggestions.FetchResponseCode">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The counts of HTTP response codes encountered by SuggestionsService when
+    attempting to fetch suggestions from the server.
+  </summary>
+</histogram>
+
+<histogram name="Suggestions.FetchSuccessLatency" units="ms">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The latency of a SuggestionsService fetch that results in a success
+    response.
+  </summary>
+</histogram>
+
+<histogram name="Suggestions.LocalBlacklistSize" units="URLcount">
+  <owner>manzagop@chromium.org</owner>
+  <summary>
+    Number of URLs present in the Suggestions local blacklist when the
+    Suggestions service is created.
+  </summary>
+</histogram>
+
+<histogram name="Suggestions.ResponseState" enum="SuggestionsResponseState">
+  <owner>mathp@chromium.org</owner>
+  <summary>
+    The counts of response states (such as empty or invalid) encountered by
+    SuggestionsService when attempting to fetch suggestions from the server.
+  </summary>
+</histogram>
+
+<histogram name="SupervisedUserContentProvider.ChromeNotStartedRequestTime"
+    units="ms">
+  <owner>aberent@chromium.org</owner>
+  <summary>
+    Time to get the response to requesting whether a URL should be accessible to
+    the supervised user, when Chrome was not previously running.
+  </summary>
+</histogram>
+
+<histogram name="SupervisedUserContentProvider.ChromeStartedRequestTime"
+    units="ms">
+  <owner>aberent@chromium.org</owner>
+  <summary>
+    Time to get the response to requesting whether a URL should be accessible to
+    the supervised user, when Chrome was already running.
+  </summary>
+</histogram>
+
+<histogram name="SupervisedUserContentProvider.RequestTimedOut"
+    enum="BooleanTimedOut">
+  <owner>aberent@chromium.org</owner>
+  <summary>
+    True if a request to find out whether a URL should be accessible to a
+    supervised user timed out.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AppAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during app association (M18 and earlier were mispelled with this
+    histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.AppRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of apps run failures, used to compare failure rates between data types
+    for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.AppsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during app association.</summary>
+</histogram>
+
+<histogram name="Sync.AppsConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of app configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.AppSettingsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during app settings association.</summary>
+</histogram>
+
+<histogram name="Sync.AppSettingsConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of app settings configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AppSettingsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by AppSettingsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of app settings association failures.</summary>
+</histogram>
+
+<histogram name="Sync.AppsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by AppsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of app association failures.</summary>
+</histogram>
+
+<histogram name="Sync.AppStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of app association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.Attachments.DownloadChecksumResult" enum="BooleanMatched">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>Whether attachment checksums match on download or not.</summary>
+</histogram>
+
+<histogram name="Sync.Attachments.DownloadResponseCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>Response or error codes from downloading sync attachments.</summary>
+</histogram>
+
+<histogram name="Sync.Attachments.DownloadTotalTime" units="ms">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>
+    The total time a download takes including request and server overhead.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Attachments.StoreInitResult"
+    enum="SyncAttachmentStoreResult">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>The result of initializing the sync attachment store.</summary>
+</histogram>
+
+<histogram name="Sync.Attachments.UploadResponseCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>Response or error codes from uploading sync attachments.</summary>
+</histogram>
+
+<histogram name="Sync.AttemptNigoriMigration" enum="SyncNigoriMigrationResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of results from attempting to migrate Sync's nigori node and its
+    encryption keys to support keystore.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AuthInvalidationRejectedTokenAgeLong" units="days">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Age of all auth tokens rejected by the invalidation server. Measured from
+    the time they were created.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AuthInvalidationRejectedTokenAgeShort" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Age of auth tokens younger than one hour that were rejected by the
+    invalidation server. Measured from the time they were created.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AuthorizationTimeInNetwork" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during initial authorization.</summary>
+</histogram>
+
+<histogram name="Sync.AuthServerRejectedTokenAgeLong" units="days">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Age of all auth tokens rejected by the sync server. Measured from the time
+    they were created.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AuthServerRejectedTokenAgeShort" units="ms">
+  <obsolete>
+    No longer relevant since transition to OAuth.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Age of auth tokens younger than one hour that were rejected by the sync
+    server. Measured from the time they were created.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during autofill association.</summary>
+</histogram>
+
+<histogram name="Sync.AutofillConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of autofill configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.AutofillProfileAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during autofill profile association (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillProfileRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of autofill profiles run failures, used to compare failure rates
+    between data types for a particular profile (see other Sync*RunFailures
+    histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillProfilesAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during autofill profile association.</summary>
+</histogram>
+
+<histogram name="Sync.AutofillProfilesConfigureFailure"
+    enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of autofill profile configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillProfilesStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by AutofillProfilesConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of autofill profile association failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillProfileStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of autofill profile association failures (M18 and
+    earlier were mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of autofill (autocomplete) run failures, used to compare failure rates
+    between data types for a particular profile (see other Sync*RunFailures
+    histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.AutofillStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by AutofillConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of autofill association failures.</summary>
+</histogram>
+
+<histogram name="Sync.AutoNigoriOverwrites">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of times this client has overwritten the nigori node to update the
+    encryption keys without a user action (during this instantiation of Chrome).
+  </summary>
+</histogram>
+
+<histogram name="Sync.BackendInitializeFirstTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Tracks sync backend initialization time during initial sync setup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BackendInitializeFirstTimeSuccess" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Tracks sync backend initialization success rate during initial sync setup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BackendInitializeRestoreState"
+    enum="SyncBackendInitializeRestoreState">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Compares sync's has_setup_completed pref against the set of types actually
+    restored from the sync DB.  Mismatches should be rare.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BackendInitializeRestoreSuccess" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Tracks sync backend initialization success rate in cases where sync was
+    previously initialized.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BackendInitializeRestoreTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Tracks sync backend initialization time in cases where sync was previously
+    initialized.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BadRequestCountOnSignInNeedsUpdateInfoBar">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of bad requests since application startup, when the Sync error
+    infobar asking the user to update their account details is displayed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BookmarkAssociationTime" units="ms">
+  <obsolete>
+    Deprecated as of m18
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during bookmark association.</summary>
+</histogram>
+
+<histogram name="Sync.BookmarkRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of bookmark run failures, used to compare failure rates between data
+    types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.BookmarksAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during bookmark association.</summary>
+</histogram>
+
+<histogram name="Sync.BookmarksConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of bookmark configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.BookmarksDuplicationsAtAssociation">
+  <owner>stanisc@chromium.org</owner>
+  <summary>
+    Estimated number of bookmark duplications after bookmark association.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BookmarksModelSyncStateAtNewDuplication"
+    enum="SyncBookmarkModelSyncState">
+  <owner>stanisc@chromium.org</owner>
+  <summary>
+    Tracks state of local bookmark model version relative to the sync version
+    when a new bookmark duplication occurs during bookmark association.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BookmarksNewDuplicationsAtAssociation">
+  <owner>stanisc@chromium.org</owner>
+  <summary>
+    Estimated number of new bookmark duplications after bookmark association.
+  </summary>
+</histogram>
+
+<histogram name="Sync.BookmarksStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by BookmarksConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of bookmark association failures.</summary>
+</histogram>
+
+<histogram name="Sync.BookmarkStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of bookmark association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureDataTypes" enum="SyncModelTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Breakdown of sync data types being configured at first time signin, restart,
+    or user-initiated reconfiguration. This is different from Sync.CustomTypes
+    in that this captures all active devices, not just those that are choosing a
+    custom sync configuration.
+
+    Note that not all platforms support all data types. As such, comparing
+    across platforms should only look at the common data types.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureFailed" enum="SyncModelTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>Count of model association failures for each type.</summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime.ABORTED" units="ms">
+  <obsolete>
+    Replaced by Sync.ConfigureTime_Long.ABORTED in m21.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where configuration is
+    aborted.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime.OK" units="ms">
+  <obsolete>
+    Replaced by Sync.ConfigureTime_Long.OK in m21.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where configuration succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime.PARTIAL_SUCCESS" units="ms">
+  <obsolete>
+    Replaced by Sync.ConfigureTime_Long.PARTIAL_SUCCESS in m21.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where only some data types
+    succeed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime.UNRECOVERABLE_ERROR" units="ms">
+  <obsolete>
+    Replaced by Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR in m21.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where configuration encounters
+    an unrecoverable error.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime_Long.ABORTED" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where configuration is
+    aborted.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime_Long.OK" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where configuration succeeds.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime_Long.PARTIAL_SUCCESS" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where only some data types
+    succeed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConfigureTime_Long.UNRECOVERABLE_ERROR" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent configuring data types in the case where configuration encounters
+    an unrecoverable error.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConflictFixCircularity">
+  <obsolete>
+    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of times we fix a circularity sync conflict. This is not expected to
+    be hit anymore.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ConflictFixRemovedDirectoriesWithContent">
+  <obsolete>
+    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of times we fix a removed directory with content sync conflict. This
+    is not expected to be hit anymore
+  </summary>
+</histogram>
+
+<histogram name="Sync.CookieJarEmptyOnMismatch" enum="BooleanEmpty">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether the gaia cookie jar was empty. Recorded on every SESSIONS commit
+    where the gaia cookie jar does not include the signed in user (
+    CookieJarMatchOnNavigation == false).
+  </summary>
+</histogram>
+
+<histogram name="Sync.CookieJarMatchOnNavigation" enum="BooleanMatched">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether the gaia cookie jar included the signed in user (matched) or not.
+    Recorded on every SESSIONS commit.
+  </summary>
+</histogram>
+
+<histogram name="Sync.CredentialsLost" enum="BooleanCredentialsLost">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether or not we detected missing credentials during startup.  This may be
+    related to crbug.com/121755.
+  </summary>
+</histogram>
+
+<histogram name="Sync.CryptographerPendingKeys"
+    enum="SyncCryptographerPendingKeysState">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Breakdown of sync users whose cryptographer has pending keys.
+  </summary>
+</histogram>
+
+<histogram name="Sync.CryptographerReady" enum="SyncCryptographerReadyState">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Breakdown of sync users whose cryptographer is fully ready for encryption
+    and decryption (initialized and no pending keys).
+  </summary>
+</histogram>
+
+<histogram name="Sync.CustomEncryption" enum="SyncCustomEncryptionEvent">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Histogram that keeps track of how users encrypt their sync data. All users
+    start off with default encryption during initial setup, while a subset of
+    users go on to encrypt their sync data with a custom passphrase.
+  </summary>
+</histogram>
+
+<histogram name="Sync.CustomPassphrase">
+  <obsolete>
+    Deprecated as of m26.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Boolean histogram for whether a custom passphrase was entered during sync
+    setup. Samples are taken every time sync is (re)configured, and the unique
+    userid count shows how many users entered a custom passphrase.
+  </summary>
+</histogram>
+
+<histogram name="Sync.CustomSync" enum="UserSelectableSyncType">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Samples are taken every time sync is (re)configured, and the unique userid
+    count shows how many users explicitly chose to sync this data type via the
+    &quot;Advanced Sync Preferences&quot; dialog.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DatatypePrefRecovery">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of clients that have fixed themselves up from a datatype preference
+    loss. Clients are not expected to have this happen more than once. This
+    value can be compared to Sync.BackendInitializeRestoreSuccess to determine
+    what percentage of users are still recovering.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DataTypeRunFailures" enum="SyncModelTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Histogram of the run failures for the different sync datatypes. These are
+    failures that occur after startup while the datatype is syncing. Note: Due
+    to an enumeration reordering, pre-M23 labels are inaccurate (see
+    sync/base/model_type.h).
+  </summary>
+</histogram>
+
+<histogram name="Sync.DataTypeStartFailures" enum="SyncModelTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Histogram of the startup failures for the different sync datatypes. These
+    are failures due to missing top level sync nodes or model association Note:
+    Due to an enumeration reordering, pre-M23 labels are inaccurate (see
+    sync/base/model_type.h).
+  </summary>
+</histogram>
+
+<histogram name="Sync.DeviceCount">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    The largest number of active syncing devices known to any profile. May be 0
+    when there are no signed in/syncing profiles open.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DeviceIdMismatchDetails" enum="DeviceIdMismatch">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>pavely@chromium.org</owner>
+  <summary>
+    When signin_scoped_device_id from pref doesn't match the one in
+    DeviceInfoSpecfics this histogram tells if sync or pref copy was empty. This
+    will indicate how often such mismatch happens and what was the state before.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DictionaryAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during dictionary association.</summary>
+</histogram>
+
+<histogram name="Sync.DictionaryConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of dictionary configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.DictionaryStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by DictionaryConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of dictionary association failures.</summary>
+</histogram>
+
+<histogram name="Sync.DirectoryCatastrophicError" enum="BooleanError">
+  <owner>maniscalco@chromium.org</owner>
+  <summary>
+    Whether the Sync Directory encountered a catastrophic error.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DirectoryOpenFailedMac">
+  <obsolete>
+    Deprecated 11/2011. No longer tracked.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Number of failures trying to open the sync database on mac.</summary>
+</histogram>
+
+<histogram name="Sync.DirectoryOpenFailedNotWinMac">
+  <obsolete>
+    Deprecated 11/2011. No longer tracked.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of failures trying to open the sync database on a non-windows non-mac
+    platform.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DirectoryOpenFailedWin">
+  <obsolete>
+    Deprecated 11/2011. No longer tracked.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of failures trying to open the sync database on windows.
+  </summary>
+</histogram>
+
+<histogram name="Sync.DirectoryOpenResult" enum="SyncDirectoryOpenResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Tracks success of failure of sync directory initialization.</summary>
+</histogram>
+
+<histogram name="Sync.EncryptAllData">
+  <obsolete>
+    Deprecated as of m26.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Boolean histogram for whether the &quot;Encrypt all synced data&quot; radio
+    button was selected during sync setup. Samples are taken every time sync is
+    (re)configured, and the unique userid count shows how many users chose to
+    encrypt their sync data.
+  </summary>
+</histogram>
+
+<histogram name="Sync.EventCodes" enum="SyncEventCode">
+  <owner>zea@chromium.org</owner>
+  <summary>A UI event occured.</summary>
+</histogram>
+
+<histogram name="Sync.ExtensionAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during extension association (M18 and earlier were mispelled with
+    this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ExtensionRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of extension run failures, used to compare failure rates between data
+    types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ExtensionsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during extension association.</summary>
+</histogram>
+
+<histogram name="Sync.ExtensionsConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of extension configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.ExtensionSettingsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during extension settings association.</summary>
+</histogram>
+
+<histogram name="Sync.ExtensionSettingsConfigureFailure"
+    enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of extension settings configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ExtensionSettingsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by ExtensionSettingsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of extension settings association failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ExtensionsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by ExtensionsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of extension association failures.</summary>
+</histogram>
+
+<histogram name="Sync.ExtensionStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of extension association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ExtraSyncDataCount" units="entries">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    Counts the total number of extra copies of sync data in memory. This count
+    is emitted once, after loading Sync Directory. The count will indicate how
+    many Directory entities fail to share client and server specifics.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FaviconCacheLookupSucceeded" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>Whether a sync favicon cache lookup succeeded or not.</summary>
+</histogram>
+
+<histogram name="Sync.FaviconCount">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Number of synced favicons at initialization time.</summary>
+</histogram>
+
+<histogram name="Sync.FaviconImagesAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during favicon images association.</summary>
+</histogram>
+
+<histogram name="Sync.FaviconImagesConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of favicon images configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FaviconImagesStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by FaviconImagesConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of favicon images association failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FaviconsAvailableAtMerge" enum="SyncFaviconsAvailable">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of client that have filled their sync favicon cache and must evict
+    old favicons vs those whose cache is not full.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FaviconTrackingAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during favicon tracking association.</summary>
+</histogram>
+
+<histogram name="Sync.FaviconTrackingConfigureFailure"
+    enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of favicon tracking configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FaviconTrackingStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by FaviconTrackingConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of favicon tracking association failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FaviconVisitPeriod" units="hours">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time between updates to a synced favicon's visit time.</summary>
+</histogram>
+
+<histogram name="Sync.FirstBackendInitializeSuccess" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 11/2011.  Was counted incorrectly.  Replaced by
+    Sync.BackendInitializeFirstTimeSuccess.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Tracks sync backend initialization success rate during initial sync setup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FirstSyncDelayByBackup" units="ms">
+  <obsolete>
+    Backup logic has been removed since 02/2016.
+  </obsolete>
+  <owner>haitaol@chromium.org</owner>
+  <summary>First sync delay casued by backing up user data.</summary>
+</histogram>
+
+<histogram name="Sync.FreqApps" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for apps. Used as estimate of datatype commit frequency.
+    Logged when a sync cycle is performed for apps.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqAutofill" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for autofill entries. Used as estimate of datatype
+    commit frequency. Logged when a sync cycle is performed for autofill
+    entries.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqAutofillProfiles" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for autofill profiles. Used as estimate of datatype
+    commit frequency. Logged when a sync cycle is performed for autofill
+    profiles.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqBookmarks" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for bookmarks. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for boomarks.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqDictionary" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for dictionary. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for dictionary.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqExtensions" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for extensions. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for extensions.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqFaviconImages" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for favicon images. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for favicon images.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqFaviconTracking" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for favicon tracking. Used as estimate of datatype
+    commit frequency. Logged when a sync cycle is performed for favicon
+    tracking.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqNigori" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for nigori. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for nigori.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqPasswords" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for passwords. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for passwords.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqPreferences" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for preferences. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for preferences.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqSearchEngines" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for search engines. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for search engines.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqSessions" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for sessions. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for sessions.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqSyncedNotifications" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for synced notifications. Used as estimate of datatype
+    commit frequency. Logged when a sync cycle is performed for synced
+    notifications.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqThemes" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for themes. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for themes.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqTypedUrls" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for typed urls. Used as estimate of datatype commit
+    frequency. Logged when a sync cycle is performed for typed urls.
+  </summary>
+</histogram>
+
+<histogram name="Sync.FreqWifiCredentials" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time between nudges for WiFi credentials. Used as estimate of datatype
+    commit frequency. Logged when a sync cycle is performed for WiFi
+    credentials.
+  </summary>
+</histogram>
+
+<histogram name="Sync.InitialState" enum="SyncInitialState">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>
+    An approximate state of sync at startup. Logs a few reasons sync definitely
+    wouldn't be able to start, or that it probably can start. The user having
+    turned off sync on mobile will be logged as &quot;turned off by user&quot;.
+    A dashboard stop and clear will fall under &quot;turned off and setup not
+    completed&quot;. See the SyncInitialState enum in profile_sync_service.h for
+    more information.
+  </summary>
+</histogram>
+
+<histogram name="Sync.InvalidationSessionsAndroid" enum="BooleanHit">
+  <obsolete>
+    Deprecated as of 5/2016.
+  </obsolete>
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Count of the number of session sync invalidations. The goal of the metric is
+    to track how the number of session sync invalidations changes over time.
+  </summary>
+</histogram>
+
+<histogram name="Sync.KeystoreDecryptionFailed"
+    enum="SyncKeystoreDecryptionFailure">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    The reason for a failure decrypting the keystore decryptor token.
+  </summary>
+</histogram>
+
+<histogram name="Sync.LocalDataFailedToLoad" enum="SyncModelTypes">
+  <owner>vasilii@chromium.org</owner>
+  <summary>
+    Counts cases when a sync type failed to load the local data during startup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.LocalModelOutOfSync" enum="SyncModelTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Counts instances of out of sync local models detected during startup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.LostNavigationCount" units="navigations">
+  <owner>pnoland@chromium.org</owner>
+  <summary>
+    Counts instances of navigations that are recorded locally but not synced.
+    Recorded once per active tab for every inferred sync cycle. Sync cycles are
+    inferred by examining the is_synced and is_syncing flags of sync directories
+    when recording local changes to tabs or windows. Sync cycles that occur
+    without changes to tabs or windows won't cause this metric to be logged.
+  </summary>
+</histogram>
+
+<histogram name="Sync.MemoryPressureWarningBeforeCleanShutdown" units="count">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    Counts the number of times a user's sync service received a
+    MEMORY_PRESSURE_LEVEL_CRITICAL warning before the sync service shut down
+    cleanly. The sync service emits this number the next time the user's sync
+    service is started, which will likely happen the next time the user's
+    profile is opened after a Chrome restart.  This count is emitted once per
+    user/profile. Things like browser crashes that implicitly bring down all
+    users' sync services will cause unclean shutdown tags to appear on all open
+    profiles, meaning that there will be multiple emissions to this histogram as
+    those profiles are re-opened.
+  </summary>
+</histogram>
+
+<histogram name="Sync.MemoryPressureWarningBeforeUncleanShutdown" units="count">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    Counts the number of times a user's sync service received a
+    MEMORY_PRESSURE_LEVEL_CRITICAL warning before the sync service shut down
+    uncleanly. The sync service emits this number the next time the user's sync
+    service is started, which will likely happen the next time the user's
+    profile is opened after a Chrome restart.  This count is emitted once per
+    user/profile. Things like browser crashes that implicitly bring down all
+    users' sync services will cause unclean shutdown tags to appear on all open
+    profiles, meaning that there will be multiple emissions to this histogram as
+    those profiles are re-opened.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ModelTypeCount" units="entries">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    Counts the number of entries for each model type in sync DB at startup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.NigoriMigrationState" enum="SyncNigoriMigrationState">
+  <owner>zea@chromium.org</owner>
+  <summary>Breakdown of sync's nigori node keystore migration state.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitBookmarksDuration" units="ms">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    The client side execution time to check for revisits with bookmarks data.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitBookmarksMatchAge" units="minutes">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Age of bookmark that matches a navigation event, where matching means the
+    urls match. If multiple bookmarks match, the most recently created is used.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitBookmarksMatchTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type to a page that matched a bookmark.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitBookmarksMissTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type to a page that didn't match a bookmark.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitNavigationMatchAge" units="minutes">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Difference in time between finding the match and the creation of the most
+    recent foreign modification of the parent tab. The parent tab's modification
+    will not always be indicative of when the matching navigation occurred.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitNavigationMatchOffset">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    The number of navigations forward or backwards the matching noncurrent
+    navigation is from the current navigation in its tab. Negative values
+    represent backwards and positive values represent forwards. Zero should not
+    occur since it would cease to be noncurrent.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitNavigationMatchTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type that matched a synced navigation.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitNavigationMissTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type that didn't match a synced navigation.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitSessionDuration" units="ms">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    The client side execution time to check for revisits with session data.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTabMatchAge" units="minutes">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Difference in time between finding the match and the creation of the most
+    recent foreign modification of the given tab.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTabMatchTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type that matched a synced tab.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTabMissTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type that didn't match a synced tab.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTypedUrlDuration" units="ms">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    The client side execution time to check for revisits with typed URL data.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTypedUrlMatchAge" units="minutes">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Difference in time between finding the match and the last time this URL was
+    typed on a foreign client.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTypedUrlMatchTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type that matched a typed URL.</summary>
+</histogram>
+
+<histogram name="Sync.PageRevisitTypedUrlMissTransition"
+    enum="PageVisitTransitionType">
+  <owner>skym@chromium.org</owner>
+  <summary>Transition type that didn't match a typed URL.</summary>
+</histogram>
+
+<histogram name="Sync.PartiallySyncedTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of partially synced types (those with a progress marker but no
+    initial sync ended bit) that exist at sync startup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.PassphraseDecryptionSucceeded" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>Whether a passphrase decryption attempt succeeded or not.</summary>
+</histogram>
+
+<histogram name="Sync.PassphraseDialogDismissed" enum="SyncPassphraseDismissal">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of how a user dismissed the passphrase dialog.</summary>
+</histogram>
+
+<histogram name="Sync.PassphraseType" enum="SyncPassphraseType">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>The active sync passphrase type at sync startup.</summary>
+</histogram>
+
+<histogram name="Sync.PasswordAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during password association (M18 and earlier were mispelled with
+    this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.PasswordRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of passwords run failures, used to compare failure rates between data
+    types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.PasswordsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during password association.</summary>
+</histogram>
+
+<histogram name="Sync.PasswordsConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of password configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.PasswordsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by PasswordsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of password association failures.</summary>
+</histogram>
+
+<histogram name="Sync.PasswordStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of password association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.PreferenceAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during preference association (M18 and earlier were mispelled
+    with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.PreferenceRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of preferences run failures, used to compare failure rates between
+    data types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.PreferencesAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during preference association.</summary>
+</histogram>
+
+<histogram name="Sync.PreferencesConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of preference configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.PreferencesStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by PreferencesConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of preference association failures.</summary>
+</histogram>
+
+<histogram name="Sync.PreferenceStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of preference association failures (M18 and earlier
+    were mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ReauthorizationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken from startup for the user to reauthorize.</summary>
+</histogram>
+
+<histogram name="Sync.RefreshTokenAvailable" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 04/2016 as not useful since it always logged true.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether OAuth2 refresh token was available at the time when
+    ProfileSyncService was starting backend.
+  </summary>
+</histogram>
+
+<histogram name="Sync.RequestContentLength.Compressed" units="bytes">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    The request content size for a single HTTP/HTTPS call from sync client to
+    server. The content is compressed by gzip.
+  </summary>
+</histogram>
+
+<histogram name="Sync.RequestContentLength.Original" units="bytes">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    The original request content size for a single HTTP/HTTPS call from sync
+    client to server. It is the size before content got compressed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ResolveConflict" enum="SyncConflictResolutions">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>
+    Enumeration of types of conflict resolutions. Recorded every time a conflict
+    is resolved for a data type that has been converted to USS.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ResolveSimpleConflict"
+    enum="SyncSimpleConflictResolutions">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of simple conflict resolutions.</summary>
+</histogram>
+
+<histogram name="Sync.ResponseContentLength.Compressed" units="bytes">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    The response content size for a single HTTP/HTTPS call from sync server to
+    client. The content is compressed by gzip.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ResponseContentLength.Original" units="bytes">
+  <owner>gangwu@chromium.org</owner>
+  <summary>
+    The original response content size for a single HTTP/HTTPS call from sync
+    server and client. It is the size after content got uncompressed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.RestoreBackendInitializeSucess" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 11/2011.  Was counted incorrectly.  Replaced by
+    Sync.BackendInitializeRestoreSuccess.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Tracks sync backend initialization success rate in cases where sync was
+    previously initialized.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SearchEngineAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during search engine association (M18 and earlier were mispelled
+    with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.SearchEngineRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of search engine run failures, used to compare failure rates between
+    data types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.SearchEnginesAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during search engine association.</summary>
+</histogram>
+
+<histogram name="Sync.SearchEnginesConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of search engine configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SearchEnginesStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by SearchEnginesConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of search engine association failures.</summary>
+</histogram>
+
+<histogram name="Sync.SearchEngineStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of search engine association failures (M18 and earlier
+    were mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ServiceInitialConfigureTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent on first-time configure.  May include time spent on retries.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ServiceSubsequentConfigureTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent on non-first-time configure.  May include time spent on retries.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during session association (M18 and earlier were mispelled with
+    this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of sessions run failures, used to compare failure rates between data
+    types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during session association.</summary>
+</histogram>
+
+<histogram name="Sync.SessionsBadForeignHashOnMergeCount"
+    units="Sessions Entries">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Number of foreign sessions entries detected with bad client tag hash value
+    during MergeDataAndStartSyncing. These will be immediately deleted. The
+    overwhelming majority of clients should report a value of 0 upon startup.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionsConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of session configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.SessionsRefreshDelay" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Delay from the time chrome://history is loaded until the other devices'
+    sessions data became available.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by SessionsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of session association failures.</summary>
+</histogram>
+
+<histogram name="Sync.SessionStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of session association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionTabs" units="tabs">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    For each Chrome window, records the number of tabs present at the time Sync
+    associates the SESSIONS datatype.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SessionWindows" units="windows">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    The number of windows present within Chrome at the time Sync associates the
+    SESSIONS datatype.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Shutdown.BackendDestroyedTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken from the start of sync shutdown (in ProfileSyncService) until the
+    backend (SyncBackendHost) is fully destroyed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Shutdown.StopRegistrarTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Amount of time the UI thread waits (at shutdown) to stop the
+    SyncBackendRegistrar.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Shutdown.StopSyncThreadTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Amount of time the UI thread waits (at shutdown) to stop the sync thread.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Startup.DeferredInitTrigger"
+    enum="SyncDeferredInitTrigger">
+  <owner>zea@chromium.org</owner>
+  <summary>The type of event that triggered sync initialization.</summary>
+</histogram>
+
+<histogram name="Sync.Startup.TimeDeferred" units="ms">
+  <obsolete>
+    Deprecated, see TimeDeferred2.
+  </obsolete>
+  <owner>jeremy@chromium.org</owner>
+  <owner>zea@google.com</owner>
+  <summary>
+    Time spent after ProfileSyncService *creation* but before SyncBackendHost
+    initialization.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Startup.TimeDeferred2" units="ms">
+  <owner>jeremy@chromium.org</owner>
+  <owner>zea@google.com</owner>
+  <summary>
+    Time spent after ProfileSyncService *creation* but before SyncBackendHost
+    initialization.
+  </summary>
+</histogram>
+
+<histogram name="Sync.Startup.TypeTriggeringInit" enum="SyncModelTypes">
+  <owner>zea@chromium.org</owner>
+  <summary>Data type that first requests sync initialization.</summary>
+</histogram>
+
+<histogram name="Sync.StopSource" enum="SyncStopSource">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>
+    Tracks how sync was turned off. Logged every time sync is told to stop
+    permanently by the user (e.g. it won't come back on by itself).
+  </summary>
+</histogram>
+
+<histogram name="Sync.SyncAuthError" enum="SyncAuthError">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Counts the number of times sync clients have encountered an auth error and
+    number of times auth errors are fixed.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SyncedNotificationsAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during synced notifications association.</summary>
+</histogram>
+
+<histogram name="Sync.SyncedNotificationsConfigureFailure"
+    enum="SyncConfigureResult">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of synced notifications configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SyncedNotificationsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Deprecated in M53. Replaced by SyncedNotificationsConfigureFailure. See
+    crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of synced notifications association failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SyncerConflictStuck">
+  <obsolete>
+    Deprecated 12/2011. No longer tracked. See crbug.com/107816.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Number of times the sync conflict resolver gets stuck. This is not expected
+    to be hit anymore.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SyncErrorInfobarDisplayed" enum="SyncErrorInfobarTypes">
+  <owner>droger@chromium.org</owner>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of error conditions that displays an infobar to the user.
+  </summary>
+</histogram>
+
+<histogram name="Sync.SyncEverything">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Boolean histogram for whether the &quot;Sync Everything&quot; option was
+    selected during sync setup. Samples are taken every time sync is
+    (re)configured, and the unique userid count shows how many users chose to
+    sync all available data types.
+  </summary>
+</histogram>
+
+<histogram name="Sync.ThemeAssociationTime" units="ms">
+  <obsolete>
+    Deprecated as of m19
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during theme association (M18 and earlier were mispelled with
+    this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ThemeRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of theme run failures, used to compare failure rates between data
+    types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.ThemesAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during theme association.</summary>
+</histogram>
+
+<histogram name="Sync.ThemesConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of theme configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.ThemesStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by ThemesConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of theme association failures.</summary>
+</histogram>
+
+<histogram name="Sync.ThemeStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of theme association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time taken during typed url association (M18 and earlier were mispelled with
+    this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlChangeProcessorErrors" units="%">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    The percentage of history DB operations initiated by the typed URL change
+    processor that return an error. The cumulative count for the current sync
+    session is logged after every typed URL change.
+  </summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlMergeAndStartSyncingErrors" units="%">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    The percentage of history DB operations during merge data that return an
+    error. This is logged at the end of typed URL merge data, which happens once
+    each time sync starts up.
+  </summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlModelAssociationErrors" units="%">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    The percentage of history DB operations during model association that return
+    an error. This is logged at the end of typed URL model association, which
+    happens once each time sync starts up.
+  </summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlRunFailures">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Count of typed url run failures, used to compare failure rates between data
+    types for a particular profile (see other Sync*RunFailures histograms).
+  </summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlsAssociationTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during typed url association.</summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlsConfigureFailure" enum="SyncConfigureResult">
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of typed url configuration failures.</summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by TypedUrlsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Enumeration of types of typed url association failures.</summary>
+</histogram>
+
+<histogram name="Sync.TypedUrlStartFailures" enum="SyncStartResult">
+  <obsolete>
+    Deprecated as of m19.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of typed url association failures (M18 and earlier were
+    mispelled with this histogram).
+  </summary>
+</histogram>
+
+<histogram name="Sync.UnrecoverableErrors" enum="SyncUnrecoverableErrorReason">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of the different reasons for unrecoverable errors and how often
+    they have occurred.
+  </summary>
+</histogram>
+
+<histogram name="Sync.URLFetchResponse"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Counts of responses (both http code and net error code) for Sync URL
+    fetches.
+  </summary>
+</histogram>
+
+<histogram name="Sync.URLFetchTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time spent waiting for a sync cycle to complete the url fetch.
+  </summary>
+</histogram>
+
+<histogram name="Sync.URLFetchTimedOut" enum="BooleanTimedOut">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether a url fetch timed out or not. Timing out implies the fetch was
+    stalled for an unknown reason.
+  </summary>
+</histogram>
+
+<histogram name="Sync.UserPerceivedAuthorizationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time the user spends looking at the authorization dialog.</summary>
+</histogram>
+
+<histogram name="Sync.UserPerceivedBookmarkAssociation">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during bookmark association.</summary>
+</histogram>
+
+<histogram name="Sync.USSLoadModelsTime" units="ms">
+  <owner>pavely@chromium.org</owner>
+  <summary>Time it took sync to load models for USS datatypes.</summary>
+</histogram>
+
+<histogram name="Sync.USSMigrationFailure" enum="SyncModelTypes">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>Counts directory to USS migration failures per model type.</summary>
+</histogram>
+
+<histogram name="Sync.USSMigrationSuccess" enum="SyncModelTypes">
+  <owner>maxbogue@chromium.org</owner>
+  <summary>Counts directory to USS migration successes per model type.</summary>
+</histogram>
+
+<histogram name="Sync.WifiCredentialsAssociationTime" units="ms">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>Time taken during WiFi credentials association.</summary>
+</histogram>
+
+<histogram name="Sync.WifiCredentialsConfigureFailure"
+    enum="SyncConfigureResult">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of WiFi credentials configuration failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.WifiCredentialsStartFailure" enum="SyncStartResult">
+  <obsolete>
+    Replaced by WifiCredentialsConfigureFailure. See crbug.com/478226.
+  </obsolete>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Enumeration of types of WiFi credentials association failures.
+  </summary>
+</histogram>
+
+<histogram name="Sync.WorkerApplyHasEncryptedUpdates" enum="Boolean">
+  <owner>skym@chromium.org</owner>
+  <summary>
+    Whether there are still encrypted updates that the cryptographer cannot
+    decrypt during ApplyUpdates in the ModelTypeWorker (USS Only). Emitting true
+    is an invalid state that hopefully never happens, as it is a potential data
+    loss scenario.
+  </summary>
+</histogram>
+
+<histogram name="Sync.YoungestForeignTabAgeOnNTP" units="seconds">
+  <owner>skym@chromium.org</owner>
+  <summary>Upon NTP load, the age of the youngest synced foreign tab.</summary>
+</histogram>
+
+<histogram name="SyncedNotifications.Actions"
+    enum="SyncedNotificationActionType">
+  <obsolete>
+    Deprecated in M53.
+  </obsolete>
+  <owner>petewil@chromium.org</owner>
+  <owner>zea@chromium.org</owner>
+  <summary>
+    The actions taken on synced notifications, recorded every time they happen.
+    This histogram will record every single event that happens separately.
+  </summary>
+</histogram>
+
+<histogram name="SyncFileSystem.ConflictResolutionPolicy"
+    enum="SyncFSConflictResolutionPolicy">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Overridden conflict resolution policy of Sync FileSystem API. Recorded for
+    each API call to override the policy.
+  </summary>
+</histogram>
+
+<histogram name="SyncFileSystem.Database.Open" enum="LevelDBStatus">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of opening the Sync FileSystem backend database.</summary>
+</histogram>
+
+<histogram name="SyncFileSystem.MetadataNumber">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    The number of cached backing remote file metadata in the Sync FileSystem
+    database. Recorded at the initialization phase of Sync FileSystem.
+  </summary>
+</histogram>
+
+<histogram name="SyncFileSystem.RegisteredAppNumber">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    The number of Chrome Apps that uses Sync FileSystem with V2 backend.
+    Recorded at the initialization phase of Sync FileSystem.
+  </summary>
+</histogram>
+
+<histogram name="SyncFileSystem.RegisterOriginResult"
+    enum="SyncFSRemoteServiceState">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    The result of the registration of Chrome App to Sync FileSystem.
+  </summary>
+</histogram>
+
+<histogram name="SyncFileSystem.RegisterOriginTime" units="ms">
+  <owner>peria@chromium.org</owner>
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Time elapsed to register a Chrome App to SyncFilesystem. Recorded for each
+    registration request by apps.
+  </summary>
+</histogram>
+
+<histogram name="SyncFileSystem.TrackerDB.Open" enum="LevelDBStatus">
+  <owner>tzik@chromium.org</owner>
+  <summary>The result of opening the Sync FileSystem tracker database.</summary>
+</histogram>
+
+<histogram name="SyncFileSystem.TrackerNumber">
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    The number of the directory tree node that maps backing files to local files
+    in the Sync FileSystem database. Recorded at the initialization phase of
+    SyncFileSystem.
+  </summary>
+</histogram>
+
+<histogram name="SyncPromo.NTPPromo" enum="SyncPromoAction">
+  <owner>dbeam@chromium.org</owner>
+  <summary>
+    Shows actions taken on the &quot;Not signed in? You're misssing out&quot;
+    link on the top right of chrome://apps. Logged once per visit of
+    chrome://apps as well as on each click of the sync promo.
+  </summary>
+</histogram>
+
+<histogram name="Syzyasan.DeferredFreeWasEnabled" enum="BooleanEnabled">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Record whether the deferred free mechanism was successfully enabled or not.
+    This is only recorded in syzyasan builds with the feature enabled.
+  </summary>
+</histogram>
+
+<histogram name="Tab.AgeUponRestoreFromColdStart" units="minutes">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Age (time since the last display in previous sessions) of a tab being
+    restored due to the first tab switch after the browser cold start, recorded
+    upon such restore. When the browser is started from cold, this metric is not
+    recorded for the foreground, automatically restored tab, so that the metric
+    tracks only the restores triggered by direct user decision to switch tabs.
+  </summary>
+</histogram>
+
+<histogram name="Tab.AndroidCrashUpload" enum="BooleanSuccess">
+  <owner>hzl@google.com</owner>
+  <summary>Count of upload success/failures by crash type.</summary>
+</histogram>
+
+<histogram name="Tab.BackgroundLoadStatus" enum="TabBackgroundLoadStatus">
+  <owner>ppi@chromium.org</owner>
+  <summary>
+    Mobile-specific metric: when a tab that was opened in background (via
+    &quot;Open link in new tab&quot;) is switched to, we record whether the
+    eagerly loaded tab was still memory resident, or we lost the loaded page due
+    to memory pressure.
+  </summary>
+</histogram>
+
+<histogram name="Tab.BackgroundTabShown" enum="BooleanShown">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Whether a tab which was opened in the background (e.g. via &quot;Open link
+    in new tab&quot;) is foregrounded prior to being closed.
+  </summary>
+</histogram>
+
+<histogram name="Tab.BackgroundTabsOpenedViaContextMenuCount">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Counts the number of background tabs opened via the context menu per page
+    URL. The count is reset on each navigation of the parent tab. Zero counts
+    are not recorded.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Close" units="ms">
+  <summary>
+    Time in milliseconds from trying to close the tab to actually closing it.
+    Includes time that's spent in JS OnUnload handlers.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Close.UnloadTime" units="ms">
+  <summary>
+    Time in milliseconds from when JS OnUnload handlers have finished to
+    actually closing tab. Doesn't include time that's spent in JS OnUnload
+    handlers. If there are no UnLoad handlers, should be idential to Tab.Close.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Deactivation.Bookmarked" enum="Boolean">
+  <obsolete>
+    Deprecated 11/2016. No longer useful after finding out that it has no effect
+    on tab reactivation rates.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    A tab was deactivated. Closing tabs are not included. This histogram also
+    records if the tab's URL was bookmarked.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Deactivation.HadFormInteraction" enum="Boolean">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    A tab was deactivated. Closing tabs are not included. This histogram also
+    records if the tab had any form interaction.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Deactivation.Pinned" enum="Boolean">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    A tab was deactivated. Closing tabs are not included. This histogram also
+    records if the tab was pinned to the tab strip or not.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Discarding" enum="TabDiscardingEvents">
+  <obsolete>
+    Deprecated 10/2015, not needed anymore.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Metric to track counts of actions related to tab discarding. Namely, we get
+    an event for every tab switch, split into two groups, whether it was a
+    discarded tab not. We also get an event whenever a tab gets discarded as
+    well as when a tab that's playing audio gets discarded.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Discarding.DiscardCount" units="Discards">
+  <obsolete>
+    Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount.
+  </obsolete>
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Metric to track the number of discards tabs have gone through. Each time a
+    tab is discarded, this histogram is recorded. Therefore, this metric is
+    cumulative, ie. as a tab gets discarded over and over, it gets a hit in each
+    bin (1, 2, 3...).
+  </summary>
+</histogram>
+
+<histogram name="Tab.EvictedTabWasActive" enum="Boolean">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    [iOS] When switching to an evicted tab, this histogram records whether or
+    not the tab had ever been active. For example, the tab was opened via
+    &quot;Open in new tab&quot; but evicted before being viewed for the first
+    time.
+  </summary>
+</histogram>
+
+<histogram name="Tab.FormActivityCountEvictedHistogram">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    A count of form activity (e.g. fields selected, characters typed) in a tab.
+    Recorded only for tabs that are evicted due to memory pressure and then
+    selected again.
+  </summary>
+</histogram>
+
+<histogram name="Tab.LostTabAgeWhenSwitchedToForeground" units="ms">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    [Android] When a tab that was opened in the background (e.g. via &quot;Open
+    link in new tab&quot;) is evicted prior to the first time that it is shown,
+    we record the tab's age at the time that the tab is shown.
+  </summary>
+</histogram>
+
+<histogram name="Tab.NewTab" enum="NewTabType">
+  <owner>lliabraa@chromium.org</owner>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    Tracks the different ways users are opening new tabs. Does not apply to
+    opening existing links or searches in a new tab, only to brand new empty
+    tabs. Note: Currently the &quot;Regular menu option&quot; includes some
+    programmatic actions in addition to user actions.
+  </summary>
+</histogram>
+
+<histogram name="Tab.NewTabDOMContentLoaded" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The time for the new tab page to fire the &quot;DOMContentLoaded&quot;
+    event.
+  </summary>
+</histogram>
+
+<histogram name="Tab.NewTabOnload" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The time for the new tab page to fire the &quot;load&quot; event. Note: This
+    is usually recorded with a suffix (.Local/Google/Other). The base version is
+    recorded only on Android, as well as for the old NTP (&quot;NTP4&quot;) on
+    other platforms.
+  </summary>
+</histogram>
+
+<histogram name="Tab.NewTabScriptStart" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <owner>beaudoin@chromium.org</owner>
+  <summary>
+    The time for the new tab page to start executing JavaScript.
+  </summary>
+</histogram>
+
+<histogram name="Tab.PerceivedRestoreTime" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    User-perceived load time for a successful tab restore, measured from the
+    first time the user sees the tab being restored until the load completes.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Reactivation.Bookmarked" enum="Boolean">
+  <obsolete>
+    Deprecated 11/2016. No longer useful after finding out that it has no effect
+    on tab reactivation rates.
+  </obsolete>
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    A tab was reactivated after being hidden. This histogram also records if the
+    tab's URL was bookmarked.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Reactivation.HadFormInteraction" enum="Boolean">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    A tab was reactivated after being hidden. This histogram also records if the
+    tab had any form interaction.
+  </summary>
+</histogram>
+
+<histogram name="Tab.Reactivation.Pinned" enum="Boolean">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    A tab was reactivated after being hidden. This histogram also records if the
+    tab was pinned to the tab strip.
+  </summary>
+</histogram>
+
+<histogram name="Tab.RendererCrashStatus" enum="TabRendererCrashStatus">
+  <owner>jaekyun@chromium.org</owner>
+  <summary>
+    The status of a tab and an application when a renderer crashes. This is
+    recorded only for Android when a renderer crashes.
+  </summary>
+</histogram>
+
+<histogram name="Tab.RendererDetailedExitStatus"
+    enum="ProcessDetailedExitStatus">
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Breakdown of renderer exit status for renderers that have strong bindings.
+    An extension of the counts in Tab.RendererExitStatus. Only recorded on
+    Android.
+  </summary>
+</histogram>
+
+<histogram name="Tab.RendererDetailedExitStatusUnbound"
+    enum="ProcessDetailedExitStatus">
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Breakdown of renderer exit status for renderers that do not have strong
+    bindings. An extension of the counts in Tab.RendererExitStatus. Only
+    recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="Tab.RendererExitStatus" enum="TabRendererExitStatus">
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    The status of a renderer when the browser notices that the process has
+    exited. Only recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="Tab.RestoreResult" enum="TabRestoreResult">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    When the browser restores a tab, whether the load was successful. Loads can
+    fail for instance when there is no connectivity.
+  </summary>
+</histogram>
+
+<histogram name="Tab.RestoreTime" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>Load time for a successful tab restore.</summary>
+</histogram>
+
+<histogram name="Tab.RestoreUserPersistence" enum="TabRestoreUserAction">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    When the browser restores a tab, whether the user waits for completion of
+    the load or if the user gives up by switching to another tab or leaving
+    Chrome.
+  </summary>
+</histogram>
+
+<histogram name="Tab.StatusWhenDisplayed" enum="TabStatus">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    The status of a tab collected each time the tab is displayed on Android,
+    including user switching to the tab and displays of newly created tabs, such
+    as NTP or tabs opened to handle intents.
+  </summary>
+</histogram>
+
+<histogram name="Tab.StatusWhenSwitchedBackToForeground" enum="TabStatus">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    The status of a tab collected each time the user switches to it on mobile.
+    That does not include tabs being created at the time the user switches to
+    them, such as NTP or tabs opened to handle intents.
+  </summary>
+</histogram>
+
+<histogram name="Tab.StatusWhenSwitchedBackToForegroundDataProxyEnabled"
+    enum="TabStatus">
+  <owner>lliabraa@chromium.org</owner>
+  <owner>marq@chromium.org</owner>
+  <summary>
+    The status of a tab collected each time the user switches to it on mobile
+    with the data reduction proxy enabled. This is populated identically, and in
+    addition to Tab.StatusWhenSwitchedBackToForeground for any given tab
+    switching event if the proxy is enabled.
+  </summary>
+</histogram>
+
+<histogram name="Tab.SwitchedToForegroundAge" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>Age (in ms) when the tab was switched to foreground.</summary>
+</histogram>
+
+<histogram name="Tab.SwitchedToForegroundLaunchedWithURL"
+    enum="TabSwitchedToForegroundLaunchedWithURL">
+  <obsolete>
+    Deprecated as of 04/2014.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Each time a tab is brought to the foreground, this histogram indicates if
+    chrome was launched without an URL (i.e., from the launcher), or with an URL
+    (i.e., from another app).
+  </summary>
+</histogram>
+
+<histogram name="Tab.SwitchedToForegroundMRURank">
+  <obsolete>
+    Deprecated as of 04/2014.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Rank in MRU order (0 being first) when the tab was switched to foreground.
+  </summary>
+</histogram>
+
+<histogram name="Tab.SwitchedToForegroundNumTabs">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>Count of all tabs when a tab is switched.</summary>
+</histogram>
+
+<histogram name="Tab.SwitchedToForegroundRevisit"
+    enum="TabSwitchedToForegroundRevisit">
+  <obsolete>
+    Deprecated as of 04/2014.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Each time a tab is brought to the foreground, this histogram indicates if
+    this is the first viewing of the tab since Chrome was put into foreground,
+    or if it was a return to a tab that has already been shown in this session.
+  </summary>
+</histogram>
+
+<histogram name="Tab.TimeSinceActive" units="ms">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    [iOS] When an existing tab becomes active, this histogram records the time
+    since it was made inactive.
+  </summary>
+</histogram>
+
+<histogram name="Tab.TimeSinceActiveEvicted" units="ms">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    [iOS] When an evicted tab becomes active, this histogram records the time
+    since it was made inactive.
+  </summary>
+</histogram>
+
+<histogram name="Tab.TimeSinceFormActivityEvictedHistogram" units="ms">
+  <obsolete>
+    Deprecated as of 10/2016.
+  </obsolete>
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Time elapsed since there was form activity (e.g. fields selected, characters
+    typed) in a tab. Recorded only for tabs that are evicted due to memory
+    pressure and then selected again.
+  </summary>
+</histogram>
+
+<histogram name="Tab.TimeToReactivation.Important" units="ms">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The time elapsed from the moment a tab was deactivated until it was
+    reactivated. Only recorded for tabs that are pinned or had form interaction.
+  </summary>
+</histogram>
+
+<histogram name="Tab.TimeToReactivation.Normal" units="ms">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    The time elapsed from the moment a tab was deactivated until it was
+    reactivated. Only recorded for tabs that are not pinned nor had form
+    interaction.
+  </summary>
+</histogram>
+
+<histogram name="Tab.TotalTabCount.BeforeLeavingApp" units="tabs">
+  <owner>jaekyun@chromium.org</owner>
+  <summary>
+    The total count of tabs which were kept while Chrome process is in the
+    foreground. This is recorded only for Android right before Chrome process
+    goes into the background.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.DiscardCount" units="Discards">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Cumulative number of tabs discarded due to low memory conditions, recorded
+    once per tab discard event.  For example, a user who had 3 tabs discarded
+    records a count in the 1 bin, 2 bin and 3 bin.  Thus each bin N is the
+    number of sessions where users experienced N or more tab discard events.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.DiscardedEngagementScore">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Site engagement score of a discarded tab. Recorded for each discard if the
+    score is available.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.DiscardedTabHasBeforeUnloadHandler"
+    enum="Boolean">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Recorded for each discarding, allowing us to know whether the discarded tab
+    had a before unload handler or not.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.DiscardToReloadTime" units="ms">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Elapsed time between a tab getting discarded to eventually being reloaded by
+    the user.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.InactiveToReloadTime" units="ms">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Elapsed time between the time a tab switched from being active to inactive
+    (that eventually gets discarded) until it gets reloaded.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.ReloadCount" units="Reloads">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Cumulative number of discarded tabs that have been reloaded by the user,
+    recorded once per tab discard event. For example, a user who had 3 tabs
+    reloaded records a count in the 1 bin, 2 bin and 3 bin. Thus each bin N is
+    the number of sessions where users experienced N or more tab reload events.
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.ReloadedEngagementScore">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Site engagement score of a reloaded tab. Recorded for each reload if the
+    score is available. Note that this will be the same score the tab had when
+    discarded (which could have changed by the time it gets reloaded).
+  </summary>
+</histogram>
+
+<histogram name="TabManager.Discarding.ReloadToCloseTime" units="ms">
+  <owner>georgesak@chromium.org</owner>
+  <summary>
+    Elapsed time between the last time a discarded tab was reloaded and the time
+    it gets closed.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.CountAtResume" units="tabs">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    The number of tabs open when the app comes out of the background.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.CountAtStartup" units="tabs">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>The number of tabs open at cold launch.</summary>
+</histogram>
+
+<histogram name="Tabs.Discard.DiscardCount">
+  <obsolete>
+    Deprecated 10/2015, and replaced by TabManager.Discarding.DiscardCount.
+  </obsolete>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Cumulative number of tabs discarded due to low memory conditions, recorded
+    once per tab discard event.  For example, a user who had 3 tabs discarded
+    records a count in the 1 bin, 2 bin and 3 bin.  Thus each bin N is the
+    number of sessions where users experienced N or more tab discard events.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.DiscardInLastMinute" enum="BooleanTabDiscard">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Whether or not a tab was discarded in the last minute of usage. Total count
+    is number of minutes of device usage. 100 / discard percentage gives the
+    average number of minutes between discard events.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.InitialTime" units="seconds">
+  <obsolete>
+    Deprecated May 4, 2012.  Replaced by Tabs.Discard.InitialTime2 because this
+    stat had too low of a range maximum.  No longer tracked.
+  </obsolete>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Time in seconds between system startup and when the first tab is discarded
+    due to low memory conditions.  Higher is better.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.InitialTime2" units="seconds">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Time in seconds between system startup and when the first tab is discarded
+    due to low memory conditions.  Higher is better.  Range maximum is
+    approximately one day.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.IntervalTime" units="seconds">
+  <obsolete>
+    Deprecated May 4, 2012.  Replaced by Tabs.Discard.IntervalTime2 because this
+    stat had too low of a range maximum.  No longer tracked.
+  </obsolete>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Time in seconds between tab discard events after the first one, recorded
+    once per discard event.  Higher is better.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.IntervalTime2" units="ms">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Time in milliseconds between tab discard events after the first one,
+    recorded once per discard event.  Should occur no faster than once every 750
+    ms.  Higher is better.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.MemAllocatedMB" units="MB">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    System-wide memory allocation at the time a tab was discarded, roughly
+    equivalent to the sum of memory allocated with malloc() in userspace plus
+    graphics driver memory.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.MemAnonymousMB" units="MB">
+  <obsolete>
+    Deprecated December 7, 2012.  Replaced by Tabs.Discard.MemAllocatedMB
+    because this stat has insufficient precision in the 2-4 GB range and does
+    not properly account for graphics memory on ARM.
+  </obsolete>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    System-wide anonymous memory allocation at the time a tab was discarded,
+    roughly equivalent to memory allocated with malloc().
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.MemAvailableMB" units="MB">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    System-wide file-backed memory plus free memory, roughly equivalent to what
+    the kernel uses to trigger low-memory notifications for tab discards. If
+    lower than the kernel's threshold then we are not effectively freeing memory
+    in response to the initial notification and are repeatedly being notified.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.MemGraphicsMB" units="MB">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Graphics driver (GEM object) memory at the time of a tab discard.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.MemShmemMB" units="MB">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    System-wide shared memory at the time of a tab discard. Used primarily for
+    shared buffers in the graphics system. Tracked because it's a historical
+    source of leaks on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.ReloadCount">
+  <obsolete>
+    Deprecated 10/2015, and replaced by TabManager.Discarding.ReloadCount.
+  </obsolete>
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab was reloaded because it was discarded and
+    the user clicked on it later, recorded once per reload event.  For example,
+    a user who clicks on 3 discarded tabs will record a count in the 1 bin, 2
+    bin, and 3 bin.  Thus each bin N is the number of sessions where users
+    experienced N or more reload events.  Compare to Tabs.Discard.DiscardCount.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.Discard.TabCount" units="tabs">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    The number of tabs open across all browser windows when a tab was discarded
+    due to low memory conditions.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.FineTiming.TimeBetweenTabClosedAndNextTabCreated"
+    units="ms">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Fine-grained (in msec) time between closing a tab and opening another, to
+    track very frequent tabs.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndNextTabCreated"
+    units="ms">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Fine-grained (in msec) time between opening a tab and opening another, to
+    track very frequent tabs.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.FineTiming.TimeBetweenTabCreatedAndSameTabClosed"
+    units="ms">
+  <owner>joenotcharles@chromium.org</owner>
+  <summary>
+    Fine-grained (in msec) time between opening a tab and closing it, to track
+    very short-lived tabs.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.FirstSwitchedToForegroundCreationRank">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Records the &quot;Tab Creation Rank&quot; for the first background tab which
+    was switched to the foreground. The &quot;Tab Creation Rank&quot; is
+    relative to other background tabs which were opened from the same URL via
+    the context menu. The oldest background tab has a rank of zero.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.FirstSwitchedToForegroundCreationReverseRank">
+  <owner>pkotwicz@chromium.org</owner>
+  <summary>
+    Records the &quot;Reverse Tab Creation Rank&quot; for the first background
+    background tab which was switched to the foreground. The &quot;Reverse Tab
+    Creation Rank&quot; is relative to other background tabs which were opened
+    from the same URL via the context menu. The newest background tab has a
+    &quot;Reverse Tab Creation Rank&quot; of zero.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.ForegroundTabAgeAtStartup" units="minutes">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Age (time since the last display in previous sessions) of the foreground tab
+    being restored on the browser cold start.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.iOS_PostRedirectPLT" units="ms">
+  <owner>pauljensen@chromium.org</owner>
+  <summary>
+    Page load time (PLT) for iOS that does not include time spent following
+    redirects. On other platforms this is calculated from Navigation Timings but
+    on iOS Navigation Timings are not available so we're recreating a
+    calculation similar to PLT.PT_RequestToFinish but not including time spent
+    following redirects. This metric represents the time between when navigation
+    is initiated (prior to DNS, TCP connect, etc but after following redirects)
+    until loading ends (i.e. JS onload event). On non-iOS Chrome this is
+    (performance.timing.loadEventEnd - performance.timing.redirectEnd). On
+    Chrome for iOS we're calculating the time between the creation of the
+    top-level URLRequest and when webDidFinishWithURL is called.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.CrashCreated" units="tabs">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot;,
+    recorded once per tab crash event.  For example, a user who crashed 3 tabs
+    will record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the
+    number of sessions where users experienced N or more crash events.  The user
+    may not have actually seen the sad tab page, as it might have been an
+    inactive tab. Compare to Tabs.SadTab.CrashDisplayed.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.CrashDisplayed" units="tabs">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot; and the
+    user saw the page, recorded once per tab crash event.  For example, a user
+    who crashed 3 tabs will record a count in the 1 bin, 2 bin, and 3 bin.  Thus
+    each bin N is the number of sessions where users experienced N or more crash
+    events.  Compare to Tabs.SadTab.CrashCreated.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.Feedback.Event" enum="SadTabEvent">
+  <owner>sdy@chromium.org</owner>
+  <summary>
+    Counts of events from the style of sad tab which has a feedback button as
+    its primary action. Currently, events include being displayed (actually
+    visible in a window), and the actions a user can take on the page.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.KillCreated" units="tabs">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab was killed with a &quot;He's dead,
+    Jim!&quot; page, which is usually due to the renderer being killed, recorded
+    once per tab kill event.  For example, a user who loses 3 tabs will record a
+    count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the number of
+    sessions where users experienced N or more kill events.  The user may not
+    have actually seen the sad tab page, as it might have been an inactive tab.
+    Compare to Tabs.SadTab.KillDisplayed. This can happen due to out of memory,
+    malformed IPC messages, or a SIGINT/TERM/KILL signal sent by a user.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.KillCreated.OOM" units="tabs">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab was killed with a &quot;He's dead,
+    Jim!&quot; page due to the kernel out-of-memory killer, recorded once per
+    tab kill event.  For example, a user who loses 3 tabs will record a count in
+    the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the number of sessions
+    where users experienced N or more kill events.  The user may not have
+    actually seen the sad tab page, as it might have been an inactive tab.
+    Compare to Tabs.SadTab.KillDisplayed.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.KillDisplayed" units="tabs">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab was killed with a &quot;He's dead,
+    Jim!&quot; page and the user saw the page, recorded once per tab kill event.
+    For example, a user who loses 3 tabs will record a count in the 1 bin, 2
+    bin, and 3 bin. Thus each bin N is the number of sessions where users
+    experienced N or more kill events.  Compare to Tabs.SadTab.CrashCreated.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.KillDisplayed.OOM" units="tabs">
+  <owner>oshima@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab was killed with a &quot;He's dead,
+    Jim!&quot; page due to the kernel out-of-memory killer and the user saw the
+    page, recorded once per tab kill event.  For example, a user who loses 3
+    tabs will record a count in the 1 bin, 2 bin, and 3 bin. Thus each bin N is
+    the number of sessions where users experienced N or more kill events.
+    Compare to Tabs.SadTab.CrashCreated.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.OomCreated" units="tabs">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab crashed with &quot;Aw, Snap!&quot;,
+    recorded once per tab oom event.  For example, a user who ran out of memory
+    in 3 tabs will record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin
+    N is the number of sessions where users experienced N or more oom events.
+    The user may not have actually seen the sad tab page, as it might have been
+    an inactive tab. Compare to Tabs.SadTab.OomDisplayed.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.OomDisplayed" units="tabs">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Cumulative number of times a tab ran out of memory with &quot;Aw,
+    Snap!&quot; and the user saw the page, recorded once per tab oom event.  For
+    example, a user who ran out of memory in 3 tabs will record a count in the 1
+    bin, 2 bin, and 3 bin.  Thus each bin N is the number of sessions where
+    users experienced N or more oom events.  Compare to Tabs.SadTab.OomCreated.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.Reload.Event" enum="SadTabEvent">
+  <owner>sdy@chromium.org</owner>
+  <summary>
+    Counts of events from the style of sad tab which has a reload button as its
+    primary action. Compare to Tabs.SadTab.Feedback.Event.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SadTab.ReloadCount" units="tabs">
+  <owner>jamescook@chromium.org</owner>
+  <summary>
+    The number of times a tab was reloaded because it was killed (usually by the
+    kernel OOM killer) and the user clicked on it later, recorded once per
+    reload event.  For example, a user who clicks on 3 discarded tabs will
+    record a count in the 1 bin, 2 bin, and 3 bin.  Thus each bin N is the
+    number of sessions where users experienced N or more reload events.  Compare
+    to Tabs.Discard.DiscardCount.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.ScrubDistance" units="tabs">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The distance a user 3 finger scrubbed to change tabs. Always positive
+    (ignores left / right).
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SpeculativeRestoreApplicability"
+    enum="SpeculativeRestoreApplicability">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Applicability of speculative tab restore, recorded every time a tab is
+    switched. This allows to estimate the fraction of tab restores experienced
+    on mobile that can be mitigated using speculative restore. Options higher in
+    the enum take precedence over the lower ones (i.e. low-memory tablet will be
+    accounted as tablet).
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.SideSwipe"
+    enum="SpeculativeRestorePredictionAccuracy">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Accuracy of the tab switch predictions made when the user begins the side
+    swipe gesture.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SpeculativeRestorePredictionAccuracy.TabSwitcher"
+    enum="SpeculativeRestorePredictionAccuracy">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Accuracy of the tab switch predictions made when the user enters the tab
+    switcher.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SpeculativeRestoreTargetStatus"
+    enum="SpeculativeRestoreTabStatus">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Status of a tab recorded when the tab is targeted with speculative restore.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SpeculativeRestoreTimeAhead.SideSwipe" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Time between starting the speculative load and actual tab switch for correct
+    speculative load predictions made when the user begins the side swipe
+    gesture.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SpeculativeRestoreTimeAhead.TabSwitcher" units="ms">
+  <owner>lliabraa@chromium.org</owner>
+  <summary>
+    Time between starting the speculative load and actual tab switch for correct
+    speculative load predictions made when the user enters the tab switcher.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.StateTransfer.NumberOfOtherTabsActivatedBeforeMadeActive"
+    units="tabs">
+  <owner>kouhei@chromium.org</owner>
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Recorded once per tab activation. The number of tabs that were activated
+    while the tab was inactive.
+  </summary>
+  <details>
+    This metric is to be removed after M46 hits stable. We don't expect this
+    metric to change over release, so we will remove this once we have the
+    numbers from stable.
+  </details>
+</histogram>
+
+<histogram name="Tabs.StateTransfer.TabDistanceInactiveToActive" units="tabs">
+  <owner>kouhei@chromium.org</owner>
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Number of tabs between the previously active tab and the new active tab.
+  </summary>
+  <details>
+    This metric is to be removed after M46 hits stable. We don't expect this
+    metric to change over release, so we will remove this once we have the
+    numbers from stable.
+  </details>
+</histogram>
+
+<histogram name="Tabs.StateTransfer.Target" enum="TabStripState">
+  <owner>kouhei@chromium.org</owner>
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    The state to which a tab transitioned. Recorded when a tab transitions from
+    the state in the histogram name to a new state.
+  </summary>
+  <details>
+    kouhei@ and tzik@ will remove some variation of these once M46 hits stable.
+  </details>
+</histogram>
+
+<histogram name="Tabs.StateTransfer.Time" units="ms">
+  <owner>kouhei@chromium.org</owner>
+  <owner>tzik@chromium.org</owner>
+  <summary>
+    Tabs.StateTransfer.TimeA_B measures the time a tab was in state A before it
+    transferred to state B.
+  </summary>
+  <details>
+    kouhei@ and tzik@ will remove some variation of these once M46 hits stable.
+  </details>
+</histogram>
+
+<histogram name="Tabs.SwitchFromCloseLatency" units="ms">
+  <owner>simonb@chromium.org</owner>
+  <summary>
+    Time between the event that closes a tab and the start of rendering.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SwitchFromExitLatency" units="ms">
+  <owner>simonb@chromium.org</owner>
+  <summary>
+    Time between the event that exits an app and the start of rendering.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SwitchFromNewLatency" units="ms">
+  <owner>simonb@chromium.org</owner>
+  <summary>
+    Time between the event that creates a tab and the start of rendering.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.SwitchFromUserLatency" units="ms">
+  <owner>simonb@chromium.org</owner>
+  <summary>
+    Time between the event that selects a tab and the start of rendering.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.TabCountActiveWindow" units="Tabs">
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of tabs open in the active window when a load completes.
+  </summary>
+</histogram>
+
+<histogram name="Tabs.TabCountPerLoad" units="Tabs">
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of tabs open in all browsers (counting app-mode windows) when a
+    load completes.
+  </summary>
+  <details>
+    This is basically the average number of tabs over time.
+
+    See also MPArch.RPHCountPerLoad for the number of processes used by these
+    tabs.
+  </details>
+</histogram>
+
+<histogram name="Tabs.TabCountPerWindow" units="Tabs">
+  <owner>bruthig@chromium.org</owner>
+  <owner>tdanderson@chromium.org</owner>
+  <summary>
+    The number of tabs open per window (counting app-mode windows) when a load
+    completes.
+  </summary>
+  <details>
+    This value will be recorded multiple times per load if more than one window
+    is open.
+  </details>
+</histogram>
+
+<histogram name="TaskScheduler.BlockShutdownTasksPostedDuringShutdown"
+    units="tasks">
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    Number of BLOCK_SHUTDOWN tasks that were posted to a base::TaskScheduler
+    after its Shutdown() method was called but before it returned.
+  </summary>
+</histogram>
+
+<histogram name="TaskScheduler.DetachDuration" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    Time elapsed between when the thread managed by a SchedulerWorker is
+    detached and when the main function of a new thread managed by the same
+    SchedulerWorker is entered (following a wake up). Recorded each time that a
+    thread is recreated for a given SchedulerWorker.
+  </summary>
+</histogram>
+
+<histogram name="TaskScheduler.NumTasksBeforeDetach" units="tasks">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    Number of tasks executed by a SchedulerWorker before it detached. Recorded
+    when a SchedulerWorker detaches.
+  </summary>
+</histogram>
+
+<histogram name="TaskScheduler.NumTasksBetweenWaits" units="tasks">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    Number of tasks executed by a SchedulerWorker between two waits on its
+    WaitableEvent. This should be maximized without affecting perceived browser
+    performance.
+  </summary>
+</histogram>
+
+<histogram name="TaskScheduler.TaskLatency" units="ms">
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    Time elapsed between when a task is posted and when it starts to run.
+    Recorded for each task that runs inside the TaskScheduler.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Certificates.Microsoft" units="certificates">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of certificates for modules loaded (or potentially loaded)
+    into the browser process that are signed by Microsoft. A catalog counts as a
+    single certificate, and may refer to many modules. Measured shortly after
+    startup. Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Certificates.Total" units="certificates">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of certificates for modules loaded (or potentially loaded)
+    into the browser process. A catalog counts as a single certificate, and may
+    refer to many modules. Measured shortly after startup. Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Modules.Loaded" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of third-party modules (neither Microsoft nor Google) that
+    are loaded in the browser process. Measured shortly after startup. Windows
+    only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Modules.NotLoaded" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of third-party modules (neither Microsoft nor Google) that
+    are not yet loaded in the browser process, but may potentially be (shell
+    extensions, for example). Measured shortly after startup. Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Modules.Signed" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of signed modules loaded (or potentially loaded) into the
+    browser process. Measured shortly after startup. Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Modules.Signed.Catalog" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of modules loaded (or potentially loaded) into the browser
+    process that are signed via a catalog. Measured shortly after startup.
+    Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Modules.Signed.Microsoft" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of modules loaded (or potentially loaded) into the browser
+    process that are signed by Microsoft. Measured shortly after startup.
+    Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThirdPartyModules.Modules.Total" units="modules">
+  <owner>chrisha@chromium.org</owner>
+  <summary>
+    The total number of modules loaded (or potentially loaded) into the browser
+    process. Measured shortly after startup. Windows only.
+  </summary>
+</histogram>
+
+<histogram name="ThreadWatcher.ResponseTime" units="ms">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    The time it takes indicated thread to respond with a pong message for a ping
+    message from WatchDog thread.
+  </summary>
+</histogram>
+
+<histogram name="ThreadWatcher.ResponsiveThreads">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    This is the total number of watched threads that are responding when we got
+    no response from the watched thread.
+  </summary>
+</histogram>
+
+<histogram name="ThreadWatcher.Unresponsive" units="ms">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    This is the total unresponsive time since last pong message for the
+    indicated thread when we got no response from the watched thread.
+  </summary>
+</histogram>
+
+<histogram name="ThreadWatcher.UnresponsiveThreads">
+  <owner>rtenneti@chromium.org</owner>
+  <summary>
+    This is the total number of watched threads that are not responding when we
+    got no response from the watched thread.
+  </summary>
+</histogram>
+
+<histogram name="TileManager.ExceededMemoryBudget" enum="TileMemoryBudget">
+  <owner>reveman@chromium.org</owner>
+  <owner>vmpstr@chromium.org</owner>
+  <summary>
+    Measures whether the tile manager exceeded the hard GPU memory budget
+    (OOMed). Recorded each time the tile manager assigns GPU memory to tiles.
+  </summary>
+</histogram>
+
+<histogram name="TimeZone.TimeZoneRequest.Event" enum="TimeZoneRequestEvent">
+  <summary>Events in TimeZoneRequest.</summary>
+</histogram>
+
+<histogram name="TimeZone.TimeZoneRequest.ResponseCode" enum="HttpResponseCode">
+  <summary>Http response codes in TimeZoneRequest.</summary>
+</histogram>
+
+<histogram name="TimeZone.TimeZoneRequest.ResponseFailureTime" units="ms">
+  <summary>
+    The time elapsed between the sending of the first API request and the time
+    the final (failed) response was recorded. Includes all retries.
+  </summary>
+</histogram>
+
+<histogram name="TimeZone.TimeZoneRequest.ResponseSuccessTime" units="ms">
+  <summary>
+    The time elapsed between the sending of the first API request and the time
+    the final (successfull) response was recorded. Includes all retries.
+  </summary>
+</histogram>
+
+<histogram name="TimeZone.TimeZoneRequest.Result" enum="TimeZoneRequestResult">
+  <summary>Result of TimeZoneRequest.</summary>
+</histogram>
+
+<histogram name="TimeZone.TimeZoneRequest.Retries">
+  <summary>Number of retries until the final response was recorded.</summary>
+</histogram>
+
+<histogram name="Toolbar.ActionsModel.ComponentActionsCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of component action icons the Browser Actions Container knows
+    about (visible or in the overflow bucket). Does not count icons that have
+    been permanently hidden by the user. Measured once per startup per
+    (non-incognito) profile.
+  </summary>
+</histogram>
+
+<histogram name="Toolbar.ActionsModel.OverallActionsCount">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The total number of action icons the Browser Actions Container knows about
+    (visible or in the overflow bucket). Does not count icons that have been
+    permanently hidden by the user. Measured once per startup per
+    (non-incognito) profile.
+  </summary>
+</histogram>
+
+<histogram name="Toolbar.ActionsModel.ToolbarActionsVisible">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of visible toolbar icons in the Browser Actions Container
+    (visible as in number of icons not in the overflow bucket). 0 means all
+    icons are in the overflow bucket. MAX_INT means the toolbar is always
+    showing all icons. Measured once per startup per (non-incognito) profile but
+    only for those profiles that have one or more browser actions showing in the
+    toolbar.
+  </summary>
+</histogram>
+
+<histogram name="Toolbar.AppMenuTimeToAction" units="ms">
+  <owner>rdevlin.cronin@chromium.org</owner>
+  <summary>
+    The number of millseconds between when the user opens the app menu and when
+    the app menu is closed. Logged once per app menu run when the menu closes.
+    Not recorded for menu runs that are initiated by a drag-and-drop sequence.
+    Note that the code paths for Views-platforms vs Mac are different, so cross-
+    platform comparison may not always be reasonable.
+  </summary>
+</histogram>
+
+<histogram name="TopSites.NumberOfApplyBlacklist">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>The number of times TopSitesImpl::ApplyBlacklist is called.</summary>
+</histogram>
+
+<histogram name="TopSites.NumberOfBlacklistedItems">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of items in the user Most Visited blacklist every time
+    TopSitesImpl::ApplyBlacklist is called.
+  </summary>
+</histogram>
+
+<histogram name="Touchpad.Device" enum="TouchpadDeviceState">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad device state.</summary>
+</histogram>
+
+<histogram name="Touchpad.Metrics" enum="TouchpadProblemType">
+  <owner>pthammaiah@google.com</owner>
+  <summary>
+    Tracks unusual CrOS touchpad operational states (e.g. running into the noisy
+    ground issue). This is sampled at every touchpad event.
+  </summary>
+</histogram>
+
+<histogram name="Touchpad.NaturalScroll.Changed" enum="BooleanEnabled">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad natural scroll setting changes by the user.</summary>
+</histogram>
+
+<histogram name="Touchpad.NaturalScroll.Started" enum="BooleanEnabled">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad natural scroll setting on startup.</summary>
+</histogram>
+
+<histogram name="Touchpad.PointerSensitivity.Changed" enum="PointerSensitivity">
+  <owner>pthammaiah@google.com</owner>
+  <summary>
+    Tracks touchpad sensitivity setting changes by the user. This replaces the
+    old Touchpad.Sensitivity.Changed metric.
+  </summary>
+</histogram>
+
+<histogram name="Touchpad.PointerSensitivity.Started" enum="PointerSensitivity">
+  <owner>pthammaiah@google.com</owner>
+  <summary>
+    Tracks touchpad sensitivity setting on startup. This replaces the old
+    Touchpad.Sensitivity.Started metric.
+  </summary>
+</histogram>
+
+<histogram name="Touchpad.Sensitivity.Changed" enum="PointerSensitivity">
+  <obsolete>
+    Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Changed.
+  </obsolete>
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad sensitivity setting changes by the user.</summary>
+</histogram>
+
+<histogram name="Touchpad.Sensitivity.Started" enum="PointerSensitivity">
+  <obsolete>
+    Deprecated as of 6/2013, replaced by Touchpad.PointerSensitivity.Started.
+  </obsolete>
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad sensitivity setting on startup.</summary>
+</histogram>
+
+<histogram name="Touchpad.TapDragging.Changed" enum="BooleanEnabled">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad TapDragging setting changes by the user.</summary>
+</histogram>
+
+<histogram name="Touchpad.TapDragging.Started" enum="BooleanEnabled">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad TapDragging setting on startup.</summary>
+</histogram>
+
+<histogram name="Touchpad.TapToClick.Changed" enum="BooleanEnabled">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad TapToClick setting changes by the user.</summary>
+</histogram>
+
+<histogram name="Touchpad.TapToClick.Started" enum="BooleanEnabled">
+  <owner>pthammaiah@google.com</owner>
+  <summary>Tracks touchpad TapToClick setting on startup.</summary>
+</histogram>
+
+<histogram name="Touchpad.ThreeFingerSwipe.Changed" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated as of 7/2013.
+  </obsolete>
+  <owner>pthammaiah@google.com</owner>
+</histogram>
+
+<histogram name="Touchpad.ThreeFingerSwipe.Started" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated as of 7/2013.
+  </obsolete>
+  <owner>pthammaiah@google.com</owner>
+</histogram>
+
+<histogram name="Touchscreen.TouchEventsEnabled" enum="TouchEventsState">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Tracks whether touch events are enabled. This is based on the touch events
+    enabled flag.
+  </summary>
+  <details>
+    NOTE: This metric was incorrectly recorded on ChromeOS for versions 42
+    through 45, see http://crbug.com/499476 for more details.
+  </details>
+</histogram>
+
+<histogram name="TPM.EarlyResetDuringCommand" units="count">
+  <owner>semenzato@google.com</owner>
+  <summary>
+    Reported at boot if the previous boot session was interrupted in the middle
+    of a TPM command during the first 30 seconds of uptime.
+  </summary>
+</histogram>
+
+<histogram name="Tracing.Background.FinalizingTraceSizeInKB" units="KB">
+  <owner>oysteine@chromium.org</owner>
+  <summary>
+    The size, in kilobytes, of a finalized trace ready to be uploaded.
+  </summary>
+</histogram>
+
+<histogram name="Tracing.Background.ScenarioState"
+    enum="BackgroundTracingState">
+  <owner>oysteine@chromium.org</owner>
+  <summary>
+    Records state of the Background Tracing system, from when scenarios are
+    attempted to be activated until they're completed (successfully or failed)
+  </summary>
+</histogram>
+
+<histogram name="TrafficStatsAmortizer.AmortizationDelay" units="ms">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The amount of time spent waiting to perform an amortization run. This is
+    logged at the end of each amortization run, before passing any DataUse
+    objects to their respective callbacks.
+  </summary>
+</histogram>
+
+<histogram name="TrafficStatsAmortizer.BufferSizeOnFlush" units="count">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The number of DataUse objects processed in an amortization run.
+  </summary>
+</histogram>
+
+<histogram name="TrafficStatsAmortizer.ConcurrentTabs" units="count">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The number of unique tabs seen across all DataUse objects buffered for a
+    single amortization run by the TrafficStatsAmortizer. This is recorded even
+    if TrafficStats byte counts are unavailable, but not recorded if no DataUse
+    objects have been buffered.
+  </summary>
+</histogram>
+
+<histogram name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes"
+    units="bytes">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total bytes after performing amortization across all DataUse objects
+    buffered for a single amortization run by the TrafficStatsAmortizer. This is
+    recorded even if TrafficStats byte counts are unavailable, but not recorded
+    if no DataUse objects have been buffered.
+  </summary>
+</histogram>
+
+<histogram name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"
+    units="bytes">
+  <owner>sclittle@chromium.org</owner>
+  <owner>bengr@chromium.org</owner>
+  <summary>
+    The total bytes before performing amortization across all DataUse objects
+    buffered for a single amortization run by the TrafficStatsAmortizer. This is
+    recorded even if TrafficStats byte counts are unavailable, but not recorded
+    if no DataUse objects have been buffered.
+  </summary>
+</histogram>
+
+<histogram name="Translate.AlwaysTranslateLang">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the always translate option was selected in the
+    translate infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.BubbleUiEvent" enum="TranslateBubbleUiEvent">
+  <owner>groby@google.com</owner>
+  <summary>Tracks UI events related to the translate bubble.</summary>
+</histogram>
+
+<histogram name="Translate.CaptureText" units="ms">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The time spent capturing plain text from the DOM. This is reported by
+    ChromeRenderViewObserver when a page is loaded completely.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CLD2.LanguageAccuracy" units="%">
+  <owner>rkaplow@google.com</owner>
+  <summary>
+    Accuracy of the language detected by CLD2. Only recorded if the detection
+    returned a &quot;known&quot; result.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CLD2.LanguageDetected" enum="CLD2LanguageCode">
+  <owner>rkaplow@google.com</owner>
+  <summary>Language of page detected by CLD2.</summary>
+</histogram>
+
+<histogram name="Translate.CLD3.LanguageDetected" enum="CLD3LanguageCode">
+  <owner>abakalov@chromium.org</owner>
+  <summary>
+    Language of the input page detected by CLD3. This information is logged on
+    every page load.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CLD3.LanguagePercentage" units="%">
+  <owner>abakalov@chromium.org</owner>
+  <summary>
+    Percentage of the bytes that are associated with the most popular language
+    on the input page. Only recorded if the detection returned a
+    &quot;known&quot; result.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ContentLanguage" enum="TranslateLanguage">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    A page may provide a Content-Language HTTP header or a META tag. For each
+    page load, measures whether the Content-Language header exists and is valid.
+  </summary>
+</histogram>
+
+<histogram name="Translate.DeclineTranslate">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the &quot;Nope&quot; (don't translate) or the infobar's
+    X button was clicked in the translate infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.DeclineTranslateCloseInfobar">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the translate infobar was closed by clicking the X
+    button without the user translating the page.
+  </summary>
+</histogram>
+
+<histogram name="Translate.DeclineTranslateDismissUI">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the translate UI was closed without translating in the
+    way that the user doesn't deny translating explicityly, like pressing 'Nope'
+    button. This is counted on both the infobar and the bubble UI. We are
+    comparing this on infobar to that on bubble by A/B testing and expecting
+    that the user will click 'Nope' button on bubble less times than infobar. We
+    won't delete this histogram after the experiment.
+  </summary>
+</histogram>
+
+<histogram name="Translate.HtmlLang" enum="TranslateLanguage">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    A page may provide a lang attribute in html tag. For each page load,
+    measures whether the lang attribute exists and is valid.
+  </summary>
+</histogram>
+
+<histogram name="Translate.InitiationStatus" enum="TranslateInitiationStatus">
+  <obsolete>
+    Deprecated as of 11/2013, and replaced by Translate.InitiationStatus.v2.
+  </obsolete>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The reason why Chrome decided to perform the next action (e.g., to show
+    infobar, to translate a page without any prompting, and so on) when Chrome
+    Translate is ready to translate a page.
+  </summary>
+</histogram>
+
+<histogram name="Translate.InitiationStatus.v2"
+    enum="TranslateInitiationStatus">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The reason why Chrome decided to perform the next action (e.g., to show
+    infobar, to translate a page without any prompting, and so on) when Chrome
+    Translate is ready to translate a page.
+  </summary>
+</histogram>
+
+<histogram name="Translate.LanguageDetectionTiming"
+    enum="TranslateLanguageDetectionTiming">
+  <owner>andrewhayden@chromium.org</owner>
+  <summary>
+    For each page load, records whether language detection occurs on time or
+    gets deferred. If deferred language detection later completes, this is also
+    recorded. This allows measuring the UX impact of using a non-static CLD data
+    source.
+  </summary>
+</histogram>
+
+<histogram name="Translate.LanguageVerification"
+    enum="TranslateLanguageVerification">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    For each page load, measures whether the provided Content-Language header
+    matches the language determined by CLD.  Beyond directly matching or
+    mismatching the Content-Language header, CLD can complement the
+    Content-Language.  For example, suppose the Content-Language header
+    specifies 'zh' (general Chinese), a language code that the Translate server
+    does not support.  In this case, CLD can detect a subcode like '-TW' or
+    '-CN', resulting in language codes 'zh-TW' and 'zh-CN', which the Translate
+    server supports.  This is referred to as &quot;complementing a language
+    subcode&quot;.
+  </summary>
+</histogram>
+
+<histogram name="Translate.LocalesOnDisabledByPrefs" enum="LanguageCode">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Logs the user locale when the Translate feature is disabled by the user.
+    This is recorded each time a webpage is loaded and prefs for translation is
+    checked. This allows us to investigate the correlation between the user
+    locale and the usage rates of the Translate.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ModifyOriginalLang">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the original language in the translate infobar has been
+    changed.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ModifyTargetLang">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the target language in the translate infobar has been
+    changed.
+  </summary>
+</histogram>
+
+<histogram name="Translate.NeverTranslateLang">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the never translate option was selected in the translate
+    infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.NeverTranslateSite">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the never translate site was selected in the translate
+    infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.PageScheme" enum="TranslateScheme">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>Counts translation target page schemes.</summary>
+</histogram>
+
+<histogram name="Translate.Ranker.Model.Status"
+    enum="TranslateRankerModelStatus">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    Tracks the outcome of attempts to download a Translate Ranker Model.
+  </summary>
+</histogram>
+
+<histogram name="Translate.Ranker.Model.Version" units="date stamp">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    The date tamp (e.g., 20160916 -&gt; 15 Sept 2016) which denotes the
+    TranslateRankerModel's version.
+  </summary>
+</histogram>
+
+<histogram name="Translate.Ranker.QueryResult" enum="BooleanAccepted">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    Whether the TranslateRanker accepts or denies to show the translation
+    prompt.
+  </summary>
+</histogram>
+
+<histogram name="Translate.Ranker.Timer.CalculateScore" units="ms">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    Time taken for the TranslateRanker to use the translate ranker model to
+    calculate a score for the translation, in ms.
+  </summary>
+</histogram>
+
+<histogram name="Translate.Ranker.Timer.DownloadModel" units="ms">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    Time taken for the TranslateRanker to download its model, in ms.
+  </summary>
+</histogram>
+
+<histogram name="Translate.Ranker.Timer.ParseModel" units="ms">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    Time taken for the TranslateRanker to parse its model, in ms.
+  </summary>
+</histogram>
+
+<histogram name="Translate.Ranker.Timer.ShouldOfferTranslation" units="ms">
+  <owner>rogerm@google.com</owner>
+  <summary>
+    Time taken for the TranslateRanker to decide if a given translation should
+    be offered or not, in ms. This includes the time taken to extract the
+    relevant features upon which to base the decision, as well as the time taken
+    to calculate the result.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ReportLanguageDetectionError">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the &quot;report this error&quot; of options menu is
+    selected in the translate infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.RevertTranslation">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the show original button was clicked in the translate
+    infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ServerReportedUnsupportedLanguage">
+  <obsolete>
+    Deprecated 5/2013 by Translate.UndisplayableLanguage
+  </obsolete>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the detected language is not supported by Translate
+    Element.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ShowBeforeTranslateInfobar">
+  <obsolete>
+    Deprecated 7/2010. No longer tracked.
+  </obsolete>
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times an infobar proposing to translate a page has been shown.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ShowErrorInfobar" enum="TranslateError">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Chrome Translate shows an error infobar when an error happens on translation
+    and the infobar message depends on what kind of error happens. This metric
+    counts how often each error message is shown.
+  </summary>
+</histogram>
+
+<histogram name="Translate.ShowErrorUI" enum="TranslateError">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Chrome Translate shows an error UI (infobar or bubble) when an error happens
+    on translation and the UI message depends on what kind of error happens.
+    This metric counts how often each error message is shown.
+  </summary>
+</histogram>
+
+<histogram name="Translate.SimilarLanguageMatch" enum="BooleanMatched">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    This metrics is logged whenever a page is loaded. The logged value is
+    &quot;Mathced&quot; when the CLD-detected language differs from the page
+    language code , and the two languages are such similar languages. In that
+    case, Chrome ignore the CLD-determined language and instead uses the page
+    language code. The page language code is decided by Content-Language and
+    HTML lang attribute.
+  </summary>
+</histogram>
+
+<histogram name="Translate.TimeToBeReady" units="ms">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The time from injecting scripts for Chrome Translate to being ready to
+    perform translation.
+  </summary>
+</histogram>
+
+<histogram name="Translate.TimeToLoad" units="ms">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The time from injecting scripts for Chrome Translate to the finishing loads
+    of all depending libraries.
+  </summary>
+</histogram>
+
+<histogram name="Translate.TimeToTranslate" units="ms">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>The time from starting translation to the completion.</summary>
+</histogram>
+
+<histogram name="Translate.Translate">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The number of times the translate button was clicked in the translate
+    infobar.
+  </summary>
+</histogram>
+
+<histogram name="Translate.UndisplayableLanguage" enum="LanguageCode">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Logs an undisplayable language included in the language list sent by the
+    Translate server. The Translate server sends the list each time the user
+    runs Chrome. This metrics tells us that there is a language which UI should
+    support but doesn't.
+  </summary>
+</histogram>
+
+<histogram name="Translate.UnsupportedLanguageAtInitiation" enum="LanguageCode">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    Logs an unsupported source language detected during initiation of the
+    Translate feature.  This is reported when the language detector successfully
+    detects the language of the webpage, but the language is not supported by
+    the translation server because it is too minor.  This metric allows us to
+    assess how important the unsupported language is for Google translate.
+  </summary>
+</histogram>
+
+<histogram name="Translate.UserActionDuration" units="ms">
+  <owner>kenjibaheux@google.com</owner>
+  <summary>
+    The time from a page content language being determined to user requesting
+    Chrome Translate.
+  </summary>
+</histogram>
+
+<histogram name="TryScroll.SlowScroll" enum="ScrollThread">
+  <obsolete>
+    Deprecated 02/2016 in Issue 1741103002, and replaced by
+    Renderer4.CompositorWheelScrollUpdateThread and
+    Renderer4.CompositorTouchScrollUpdateThread.
+  </obsolete>
+  <owner>tdresser@chromium.org</owner>
+  <summary>Whether a scroll is executed on main thread.</summary>
+</histogram>
+
+<histogram name="UI.DeviceScale" units="%">
+  <owner>bsep@chromium.org</owner>
+  <summary>
+    The device scales available on the system at startup. A system may report
+    more than one if it has multiple displays with varying device scales. Only
+    logged on Windows.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ActualLogUploadInterval" units="minutes">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The actual interval between log upload start and previous log upload
+    finished within the same process.
+  </summary>
+</histogram>
+
+<histogram name="UMA.AntiVirusMetricsProvider.Result"
+    enum="AntiVirusMetricsProviderResult">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Records the result of the attempt to enumerate the installed AntiVirus on
+    the machine. This is recorded once during metrics initialization.
+  </summary>
+</histogram>
+
+<histogram name="UMA.CleanExitBeaconConsistency" enum="UmaCleanExitConsistency">
+  <owner>siggi@chromium.org</owner>
+  <summary>
+    Reports the combined state of distinct clean exit beacons stored in Local
+    State and the Windows registry. They are normally expected to be identical.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ClientIdBackupRecoveredWithAge" units="hours">
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Recorded when we are somehow missing the client ID stored in Local State yet
+    are able to recover it from a backup location along with the backed up
+    installation date. This report carries the age in hours of the recovered
+    client id.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ClientIdMigrated" enum="BooleanMigrated">
+  <obsolete>
+    Removed in M45.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Recorded when the one-time UMA client id reset was performed (and the client
+    id of this user was migrated).
+  </summary>
+</histogram>
+
+<histogram name="UMA.CollectExternalEventsTime" units="ms">
+  <obsolete>
+    Deprecated as of August 2015. The histogram showed no unexpected slowness,
+    and a profiler is a better tool for identifying any future issues.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time to run the external metrics collection task (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="UMA.ComputeCurrentSigninStatus"
+    enum="ComputeCurrentSigninStatus">
+  <obsolete>
+    Deprecated as of Jun 2016. The histogram was added for debugging purpose and
+    is not needed anymore.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>
+    Records attempts to compute the current the signin status and error
+    encountered when computing.
+  </summary>
+</histogram>
+
+<histogram name="UMA.CreatePersistentHistogram.Result"
+    enum="CreatePersistentHistogramResult">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records attempts to create histograms in presistent space and any errors
+    encountered when doing so.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpCompleteTime"
+    units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Measures how much time since application was first in foreground till all
+    deferred tasks are done. Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDuration"
+    units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time it took to complete deferred startup tasks on the UI
+    thread. Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpDurationAsync"
+    units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time it took to complete async deferred startup tasks on
+    the background thread. Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUpMaxTaskDuration"
+    units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <summary>
+    Measures the maximum amount of time a single deferred startup task took.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime" units="ms">
+  <obsolete>
+    Replaced by UMA.Debug.EnableCrashUpload.DeferredStartUptime2
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since start up it took for onDeferredStartup() to be
+    called, which schedules enablePotentialCrashUploading() to be executed on an
+    async task. Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.DeferredStartUptime2" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since application was first in foreground till
+    deferred tasks are initialized and queued on the idle handler. Only logged
+    on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime"
+    units="ms">
+  <obsolete>
+    Replaced by UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since start up it took before ChromeActivity's
+    postDeferredStartupIfNeeded() was called. Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.PostDeferredStartUptime2"
+    units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since application was first in foreground till
+    ChromeActivity's postDeferredStartupIfNeeded() was called exactly once. Only
+    logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.Uptime" units="ms">
+  <obsolete>
+    Replaced by UMA.Debug.EnableCrashUpload.Uptime2
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since start up it took before crash reporting was
+    enabled via enablePotentialCrashUploading() as part of deferred start up.
+    Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.Uptime2" units="ms">
+  <obsolete>
+    Replaced by UMA.Debug.EnableCrashUpload.Uptime3
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since start up it took before crash reporting was
+    enabled via enablePotentialCrashUploading() as part of deferred start up.
+    Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Debug.EnableCrashUpload.Uptime3" units="ms">
+  <owner>wnwen@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Measures how much time since application was first in foreground till crash
+    reporting was enabled via enablePotentialCrashUploading() as part of
+    deferred start up. Only logged on Android.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Discarded Log Events">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of events discarded at log transmission time because the event
+    count was already too large.
+  </summary>
+</histogram>
+
+<histogram name="UMA.EnrollmentStatus" enum="EnrollmentStatus">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>kaznacheev@chromium.org</owner>
+  <summary>
+    Logs the device enrollment status for Chrome OS device. Logged with every
+    UMA upload.
+  </summary>
+</histogram>
+
+<histogram name="UMA.EntropySourceType" enum="UmaEntropySourceType">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Logs the entropy source type that was used for field trial randomization.
+    Logged once at each start up.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ExternalExperiment.GroupCount" units="groups">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Logged on Android whenever an external experiment is registered. The logged
+    value is the number of groups in the experiment. This will not be logged at
+    all if there are no external experiments, but will be logged on group
+    transitions (e.g. when going from 1 to 0 groups).
+  </summary>
+</histogram>
+
+<histogram name="UMA.FieldTrialAllocator.Size" units="bytes">
+  <obsolete>
+    Deprecated 11/2016 for UMA.FieldTrialAllocator.Used
+  </obsolete>
+  <owner>lawrencewu@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in the
+    browser process for field trials. Updated on each subprocess launch.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FieldTrialsEnabledBenchmarking" enum="BooleanUsage">
+  <obsolete>
+    Deprecated 2012. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Log whether the --enable-benchmarking flag was set, which causes field
+    trials to only use the default group.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.AccessResult"
+    enum="FileMetricsProviderAccessResult">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records attempts to access a file for the purpose of extracting metrics.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.DeletedFiles">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The number of old metrics files for which a delete was attempted. This is
+    logged once with each upload operation. Values greater than 1 indicate that
+    the files are not deletable by the browser and must be cleaned up by
+    whatever process is creating them.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.DirectoryFiles">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The number of metrics files in a directory that need to be uploaded. This is
+    logged once with each upload operation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.InitialAccessResult"
+    enum="FileMetricsProviderAccessResult">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records attempts to access a file for the purpose of extracting initial
+    stability metrics.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.InitialCheckTime.File" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent checking and mapping an initial metrics
+    file on disk.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.InitialCheckTime.Total" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent checking and mapping initial metrics
+    from all files on disk.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.File" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent collecting initial stability metrics
+    from a file on disk.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.InitialSnapshotTime.Total" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent collecting initial stability metrics
+    from all files on disk.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.SnapshotTime.File" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent collecting metrics from a file on disk.
+  </summary>
+</histogram>
+
+<histogram name="UMA.FileMetricsProvider.SnapshotTime.Total" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent collecting metrics from all files on
+    disk.
+  </summary>
+</histogram>
+
+<histogram name="UMA.GeneratedLowEntropySource" enum="Boolean">
+  <obsolete>
+    Deprecated as of August 2015. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    For each attempt to generate the low entropy source, log whether or not the
+    load required generating a new low entropy source.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Histograms.Activity" enum="HistogramActivityReport">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Type and flags of every histogram created plus other activities. Counts are
+    not mutually-exclusive except for the different types.
+  </summary>
+</histogram>
+
+<histogram name="UMA.InitSequence" enum="UmaInitSequence">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Logged during MetricsService initialization whether the init task or the
+    initial log timer completed first. The expectation is the vast majority of
+    the time, the init task should complete first. If metrics show otherwise,
+    then it may indicate there's a bug in the MetricsService init sequence and
+    that it should be investigated.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Large Accumulated Log Not Persisted" units="bytes">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Number of bytes in an excessively large log that was discarded at shutdown
+    instead of being saved to disk to retry during next chrome run.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Large Rejected Log was Discarded" units="bytes">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Number of bytes in a log was was rejected by server, and then discarded.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LoadLogsTime" units="ms">
+  <obsolete>
+    Deprecated as of August 2015. The histograms showed no unexpected slowness,
+    and a profiler is a better tool for identifying any future issues.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time spent to load (de-serialize) unsent logs from local state, recorded
+    during the MetricsService startup sequence.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LocalPersistentMemoryAllocator.Failures.Posix"
+    enum="OSAgnosticErrno">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Failures, as reported in errno, encountered while allocating local
+    persistent memory under Posix.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LocalPersistentMemoryAllocator.Failures.Win"
+    enum="WinGetLastError">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Failures, as reported by GetLastError(), encountered while allocating local
+    persistent memory under Windows.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LogLoadComplete called">
+  <obsolete>
+    No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Simple counter of the number of times LogLoadComplete was called (bug
+    demonstration, as we're called more often than once per page load :-/ )
+  </summary>
+</histogram>
+
+<histogram name="UMA.LogSize.OnSuccess" units="KB">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size in kilobytes (after compression) of an uploaded UMA log. Recorded after
+    a successful UMA upload.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LogUpload.Canceled.CellularConstraint"
+    enum="BooleanCanceled">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    Logs whether a log was not uploaded due to cellular log throttling logic.
+    Android only.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LogUpload.ConnetionType" enum="NetworkConnectionType">
+  <obsolete>
+    Used for analyzing UMA log uploads on cellular connection, but necessary
+    after the analysis is finished.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    The network connection type for each successful metrics log upload.
+  </summary>
+</histogram>
+
+<histogram name="UMA.LowEntropySourceValue">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Distribution of the low entropy source value used for field trial
+    randomization, recorded on startup.
+  </summary>
+</histogram>
+
+<histogram name="UMA.MachineIdState" enum="UmaMachineIdState">
+  <owner>jwd@chromium.org</owner>
+  <summary>
+    Tracks if the machine ID is generated successfully and if it changes from
+    one run to the next. The machine ID is a 24-bit hash of machine
+    characteristics. It is expected to change if an install of Chrome is copied
+    to multiple machines. This check happens once per browser startup.
+  </summary>
+</histogram>
+
+<histogram name="UMA.MetricsIDsReset" enum="BooleanHit">
+  <owner>jwd@chromium.org</owner>
+  <summary>
+    A count of the number of times the metrics ids (client id and low entropy
+    source) have been reset due to a cloned install being detected.
+  </summary>
+</histogram>
+
+<histogram name="UMA.MetricsReporting.Toggle" enum="MetricsReportingChange">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Logged when user successfully enables/disables MetricsReporting or when an
+    error occurs.
+  </summary>
+</histogram>
+
+<histogram name="UMA.MetricsService.RecordCurrentHistograms.Time" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    Records how much wall time was spent merging, taking snapshots, and
+    recording histograms for reporting to UMA.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Perf.GetData" enum="GetPerfDataOutcome">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    A count of successes and various failure modes related to collecting and
+    processing performance data obtained through &quot;perf&quot; on Chrome OS.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.BrowserMetrics.Allocs" units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in the
+    browser process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.BrowserMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.FieldTrialAllocator.Allocs"
+    units="bytes">
+  <owner>lawrencewu@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size of objects allocated from persistent memory in the browser process for
+    field trials. Updated on each subprocess launch.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.FieldTrialAllocator.UsedPct" units="%">
+  <owner>lawrencewu@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated on each subprocess launch.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.GpuMetrics.Allocs" units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a GPU
+    process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.GpuMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.PpapiBrokerMetrics.Allocs"
+    units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a
+    &quot;PPAPI broker&quot; process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.PpapiBrokerMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.PpapiPluginMetrics.Allocs"
+    units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a
+    &quot;PPAPI plugin&quot; process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.PpapiPluginMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.RendererMetrics.Allocs" units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a
+    renderer process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.RendererMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.SandboxHelperMetrics.Allocs"
+    units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a
+    &quot;sandbox helper&quot; process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.SandboxHelperMetrics.UsedPct"
+    units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.SetupMetrics.Allocs" units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a setup
+    process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.SetupMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.UtilityMetrics.Allocs" units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a
+    &quot;utility&quot; process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.UtilityMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.ZygoteMetrics.Allocs" units="bytes">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Size, before padding, of objects allocated from persistent memory in a
+    &quot;zygote&quot; process. This is updated with every allocation.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentAllocator.ZygoteMetrics.UsedPct" units="%">
+  <owner>bcwhite@chromium.org</owner>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Percentage of persistent memory segment that has been allocated. This is
+    updated only once per reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.PersistentHistograms.InitResult"
+    enum="PersistentHistogramsInitResult">
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    A count of successes and failures for the creation of various forms of
+    persistent memory used to store histograms.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ProfilesCount.AfterErase">
+  <obsolete>
+    Deprecated as of Jun 2016. The histogram was added for debugging purpose and
+    is not needed anymore.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>
+    Record the number of loaded profiles when a profile is erased from the
+    profiles map kept by profile manager.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ProfileSignInStatus" enum="ProfileSigninStatus">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>yiyaoliu@chromium.org</owner>
+  <summary>
+    An enum representing the signin status of all opened profiles during one UMA
+    session.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ProtoCompressionRatio" units="%">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Compression ratio of the serialized protobuf that will be uploaded to the
+    UMA server. This serialized protobuf is compressed using gzip.
+  </summary>
+</histogram>
+
+<histogram name="UMA.ProtoGzipped" enum="Boolean">
+  <obsolete>
+    Deprecated as of Sep, 2013. Gzipping protobufs is now the default.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>Was the UMA protobuf uploaded earlier compressed or not.</summary>
+</histogram>
+
+<histogram name="UMA.ProtoGzippedKBSaved" units="KB">
+  <obsolete>
+    Deprecated as of August 2015. See UMA.ProtoCompressionRatio instead.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Kilobytes saved from gzipping the protobufs before uploading them.
+  </summary>
+</histogram>
+
+<histogram name="UMA.SamplingRatePerMille" units="samples permille">
+  <owner>jwd@chromium.org</owner>
+  <summary>
+    Sample rate applied to this client, expressed as number of clients per 1000
+    that are in the sample. Recorded on every log upload.
+  </summary>
+</histogram>
+
+<histogram name="UMA.StoreLogsTime" units="ms">
+  <obsolete>
+    Deprecated as of August 2015. The histograms showed no unexpected slowness,
+    and a profiler is a better tool for identifying any future issues.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time spent to store unsent logs to local state, which is done
+    periodically and also during start up if there was an initial stability log.
+  </summary>
+</histogram>
+
+<histogram name="UMA.SubprocessMetricsProvider.SubprocessCount"
+    units="subprocesses">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The number of subprocesses from which persistent metrics were collected,
+    logged once with every reporting cycle.
+  </summary>
+</histogram>
+
+<histogram name="UMA.SubprocessMetricsProvider.UntrackedProcesses"
+    units="subprocesses">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>bcwhite@chromium.org</owner>
+  <summary>
+    The number of subprocesses, by type, from which persistent metrics are NOT
+    collected because there is no information about this (likely new) process
+    type.
+  </summary>
+</histogram>
+
+<histogram name="UMA.SyntheticTrials.Count">
+  <obsolete>
+    Deprecated as of August 2015.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The number of synthetic field trials added to the UMA log when the system
+    profile is recorded. Since this is done prior to capturing the histograms
+    from the current process, this will generally be logged once per UMA log.
+  </summary>
+</histogram>
+
+<histogram name="UMA.Unacceptable_Log_Discarded">
+  <obsolete>
+    Deprecated as of May, 2012 (i.e. Chrome 21+).  Replaced by the
+    UMA.UploadResponseStatus.XML and UMA.UploadResponseStatus.Protobuf
+    histograms.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>The server returned a 400 code, and we discarded a log.</summary>
+  <details>
+    This tends to indicate that a syntax error is present in a log, such as
+    would appear when a bogus XML tag is included, or the XML is not balanced
+    and well structured.
+  </details>
+</histogram>
+
+<histogram name="UMA.UnsentLogs.Dropped">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>gayane@chromium.org</owner>
+  <summary>
+    Counter for number of UMA unsent logs removed from persistent storage.
+  </summary>
+</histogram>
+
+<histogram name="UMA.UploadCreation" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated as of August 2015.  This failure case no longer exists.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    For each attempted UMA upload, log whether the upload was successfully
+    constructed.  An upload might fail to be constructed, for example, if we try
+    to upload before the system is fully initialized; or if serialization of the
+    data fails.
+  </summary>
+</histogram>
+
+<histogram name="UMA.UploadResponseStatus.Protobuf"
+    enum="UmaUploadResponseStatus">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    For each upload to the protocol buffer (v2) UMA server, log whether the
+    upload was successful, or whether there was an error.
+  </summary>
+</histogram>
+
+<histogram name="UMA.UploadResponseStatus.XML" enum="UmaUploadResponseStatus">
+  <obsolete>
+    Deprecated 2013. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    For each upload to the XML (v1) UMA server, log whether the upload was
+    successful, or whether there was an error.
+  </summary>
+</histogram>
+
+<histogram name="UMA.UsedResetVariationsFlag" enum="BooleanUsage">
+  <obsolete>
+    No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Log whether the --reset-variation-state flag was set before the low entropy
+    source was requested.
+  </summary>
+</histogram>
+
+<histogram name="UMA.XMLNodeDumpTime" units="ms">
+  <obsolete>
+    Deprecated 2013. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time spent in converting the XML tree into a character buffer when
+    closing a metrics log (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="UMA.XMLWriterDestructionTime" units="ms">
+  <obsolete>
+    Deprecated 2013. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time spent in freeing the XML writer and tree when closing a metrics log
+    (Chrome OS).
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.ConnectionType"
+    enum="UpdateEngineConnectionType">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The network connection type when the attempt begins. Possible values include
+    &quot;Unknown&quot;, &quot;Ethernet&quot;, &quot;Wifi&quot;,
+    &quot;Wimax&quot;, &quot;Bluetooth&quot;, &quot;Cellular&quot;,
+    &quot;Tethered Ethernet&quot;, &quot;Tethered Wifi&quot;.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.DownloadErrorCode"
+    enum="UpdateEngineDownloadErrorCode">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    A more detailed description of the last Payload transfer error when
+    downloading the payload.
+
+    This is reported when an attempt ends with the &quot;Payload Download
+    Error&quot; result.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.DownloadSource"
+    enum="UpdateEngineDownloadSource">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The download source used, possible values include &quot;HTTPS Server&quot;,
+    &quot;HTTP Server&quot; and &quot;HTTP Peer&quot;.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.DurationMinutes" units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of minutes the update attempt took including the time the device
+    spent sleeping.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.DurationUptimeMinutes" units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of minutes the update attempt took excluding the time the device
+    spent sleeping.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.InternalErrorCode"
+    enum="UpdateEngineErrorCode">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    A more detailed description of the last internal error. The possible values
+    correspond to the ErrorCode enumeration in the update_engine source code.
+
+    This is reported when an attempt ends with the InternalError result.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.Number" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The attempt number which starts at 0 for the initial attempt and keeps
+    increasing for subsequent attempts.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.PayloadBytesDownloadedMiB" units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of payload mebibytes (1048576 bytes) actually download.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.PayloadDownloadSpeedKBps" units="KBps">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The payload download speed, in kilobytes per second (1000 bytes/second).
+    This is calculated as the number of bytes downloaded divided by the duration
+    of the attempt (excluding time spent sleeping).
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.PayloadSizeMiB" units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The payload size, in mebibytes (1048576 bytes).
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.PayloadType"
+    enum="UpdateEnginePayloadFormat">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The payload type, possible values include &quot;Delta&quot; (if Omaha
+    specified to download a delta payload); and &quot;Full&quot; (if Omaha
+    specified to download a full payload); and &quot;ForcedFull&quot; (if the
+    client specified that it would only accept a full payload).
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.Result" enum="UpdateEngineAttemptResult">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The result of the update attempt.
+
+    This is reported when an update attempt ends.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptMinutes"
+    units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of minutes since the last attempt including the time the device
+    spent sleeping.
+
+    This is reported when an update attempt ends but only if there was a
+    previous attempt for the same update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Attempt.TimeSinceLastAttemptUptimeMinutes"
+    units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of minutes since the last attempt excluding the time the device
+    spent sleeping.
+
+    This is reported when an update attempt ends but only if there was a
+    previous attempt for the same update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.CertificateCheck.Download"
+    enum="UpdateEngineCertificateCheckStatus">
+  <owner>deymo@chromium.org</owner>
+  <summary>
+    The status of the certificate check done when downloading a payload over
+    HTTPS. Note that most downloads are done over HTTP.
+
+    This is reported on every HTTPS connection to the payload download server.
+    Connection drops on the same payload may report different values.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.CertificateCheck.UpdateCheck"
+    enum="UpdateEngineCertificateCheckStatus">
+  <owner>deymo@chromium.org</owner>
+  <summary>
+    The status of the certificate check done when querying Omaha for a new
+    version.
+
+    This is reported on every update check.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Check.DownloadErrorCode"
+    enum="UpdateEngineDownloadErrorCode">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    If unable to download a response from Omaha, a more detailed error code is
+    reported in this metric.
+
+    This is reported on every update check resulting in &quot;Download
+    error&quot;.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Check.Reaction" enum="UpdateEngineCheckReaction">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    If there is an update available, this metric will track what the device does
+    with the information. Possible values include &quot;Applying update&quot;,
+    &quot;Deferring update&quot;, &quot;Ignoring update&quot;, and &quot;Backing
+    off&quot;.
+
+    This is reported on update checks resulting in &quot;Update available&quot;.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Check.Result" enum="UpdateEngineCheckResult">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The response from Omaha. Possible values include &quot;No update
+    available&quot;, &quot;Update available&quot;, &quot;Download error&quot;,
+    &quot;Response parsing error&quot;, and &quot;Reboot pending&quot;.
+
+    This is reported on every update check.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Check.TimeSinceLastCheckMinutes" units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of minutes since the last check including the time the device
+    spent sleeping.
+
+    This is reported on every update check except for the first one.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Check.TimeSinceLastCheckUptimeMinutes"
+    units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of minutes since the last check excluding the time the device
+    spent sleeping.
+
+    This is reported on every update check except for the first one.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Daily.OSAgeDays" units="days">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The age of the OS in days, defined as the age of the /etc/lsb-release file.
+
+    This is reported on every update check but at most once a day.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.FailedUpdateCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The number of consecutive times a device has failed to boot an update that
+    successfully applied.
+
+    This is reported every time the firmware fails to boot the slot with the
+    update and fell back to the slot it originally updated from.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.InstallDateProvisioningSource"
+    enum="UpdateEngineInstallDateProvisioningSource">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The source used to provision the install-date-days value sent to Omaha with
+    every request.
+
+    This is reported when OOBE (Out Of Box Experience) completes (M34 or later)
+    or when upgrading to a version with install-date-days support.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.Rollback.Result" enum="BooleanSuccess">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    Whether rollback worked.
+
+    This is reported every time there's a rollback request.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.AttemptCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of update attempts required to update the device.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiB" units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of bytes downloaded in mebibytes (1048576 bytes) using all
+    available sources (e.g. HTTP, HTTPS, HTTP Peer).
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpPeer"
+    units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of bytes downloaded in mebibytes (1048576 bytes) using HTTP
+    from a local peer.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpServer"
+    units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of bytes downloaded in mebibytes (1048576 bytes) using
+    HTTP.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.BytesDownloadedMiBHttpsServer"
+    units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of bytes downloaded in mebibytes (1048576 bytes) using
+    HTTPS.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.DownloadOverheadPercentage"
+    units="%">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The ratio between bytes downloaded and payload size minus 100.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.DownloadSourcesUsed"
+    enum="UpdateEngineDownloadSources">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The various download sources used - this is a combination of the values
+    &quot;HTTPS Server&quot;, &quot;HTTP Server&quot; and &quot;HTTP Peer&quot;.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.PayloadSizeMiB" units="MiB">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The size of the payload, in mebibytes (1048576 bytes).
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.PayloadType"
+    enum="UpdateEnginePayloadFormat">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The payload type (&quot;Delta&quot;, &quot;Full&quot;,
+    &quot;ForcedFull&quot;) used.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.RebootCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of reboots during the update.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.TotalDurationMinutes"
+    units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of minutes from when an update was detected until an update
+    (possibly another update) was applied. This includes the time waiting for
+    update checks and time the device spent sleeping.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.UpdatesAbandonedCount"
+    units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of updates that were abandoned since the last successful
+    update.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.SuccessfulUpdate.UrlSwitchCount" units="count">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The total number of times the URL was switched (from e.g. HTTPS to HTTP)
+    because of failures.
+
+    This is reported on every successful update.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="UpdateEngine.TimeToRebootMinutes" units="minutes">
+  <owner>zeuthen@chromium.org</owner>
+  <summary>
+    The duration between when an update has successfully completed and the user
+    is presented with the &quot;reboot arrow&quot; and when the system has
+    booted into the new update.
+
+    This is reported every time the device is rebooted after an update has been
+    applied.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.ChromeExecToLoginPromptVisibleAfterLogout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS between when Chrome is started, and
+    when the login prompt is again visible after a logout.  This statistic is
+    only collected when preceeded by a logout.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.DBusCrash" units="ms">
+  <owner>derat@chromium.org</owner>
+  <summary>
+    The system uptime on Chrome OS when the dbus-daemon process crashes,
+    resulting in a reboot.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.LoginPromptSetupTimeAfterLogout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS for setting up for a login after a
+    logout. More specifically, it is the time between when the Cryptohome is
+    unmounted (the last step in the logout process) and when the login prompt is
+    again visible after a logout.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.Logout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS when performing a logout. More
+    specifically, it is the time between when a logout is initiated and when the
+    Cryptohome is unmounted, signaling the last step in the logout process. This
+    statistic is not collected when the logout is part of a restart or shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.LogoutToLoginPromptVisible" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS between initiating a logout and the
+    next time the login prompt is visible again.  This statistic is not
+    collected if the machine is shutdown between the logout initiation and the
+    prompt becoming visible.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.LogoutToUIStopAfterLogout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS between when a logout is initiated
+    and the UI has stopped (and Chrome has exited) during the logout process.
+    This statistic is not collected if the logout is part of a restart or
+    shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.ProcessesTerminatedToXTerminatedAfterLogout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS between when all user-associated
+    processes (including the X server) have been terminated during the logout
+    process.  This statistic is not collected if the logout is part of a restart
+    or shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.UIStopToProcessesTerminatedAfterLogout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS between when the UI has stopped
+    (Chrome has exited), and when all other associated processes have been
+    terminated during the logout process. This statistic is not collected if the
+    logout is part of a restart or shutdown.
+  </summary>
+</histogram>
+
+<histogram name="Uptime.XTerminatedToChromeExecAfterLogout" units="ms">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <summary>
+    Measures the time elapsed on Chrome OS between when the X server has been
+    terminated from a previous logout and when Chrome is started again to show
+    the login screen.
+  </summary>
+</histogram>
+
+<histogram name="UrlFetcher.StringResponseSize" units="KB">
+  <owner>mmenke@chromium.org</owner>
+  <summary>
+    Size (in kilobytes) of response bodies retrieved as strings from URLFetcher.
+  </summary>
+</histogram>
+
+<histogram name="UserCert.ContentDisposition" enum="UserCertContentDisposition">
+  <owner>rsleevi@chromium.org</owner>
+  <owner>svaldez@chromium.org</owner>
+  <summary>
+    Distribution of Content-Disposition headers sent with x-x509-user-cert
+    content types.
+  </summary>
+</histogram>
+
+<histogram name="UserImage.ChangeChoice" enum="ChromeOSUserImageId">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Distribution of the default images that users choose in Change Picture
+    dialog (Chrome OS). One sample is taken each time the user changes picture.
+  </summary>
+</histogram>
+
+<histogram name="UserImage.FirstTimeChoice" enum="ChromeOSUserImageId">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Distribution of the default images chosen on user image screen during
+    out-of-the-box experience (Chrome OS). One sample is taken each time the
+    user confirms the choice by clicking OK button.
+  </summary>
+</histogram>
+
+<histogram name="UserImage.LoggedIn" enum="ChromeOSUserImageId">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Distribution of the default images that existing users login with (Chrome
+    OS). One sample is taken each time the user logs in.
+  </summary>
+</histogram>
+
+<histogram name="UserImage.ProfileDownloadResult"
+    enum="ProfileImageDownloadResult">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Profile image download result for UserManager (either on behalf of the
+    Change Picture prefs page, OOBE or scheduled refresh after user login).
+  </summary>
+</histogram>
+
+<histogram name="UserImage.ProfileDownloadTime" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>The time it took to download user's profile picture.</summary>
+</histogram>
+
+<histogram name="UserImage.ScreenIsShownTime" units="ms">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Time histogram of the &quot;Choose Picture&quot; OOBE screen display delay.
+  </summary>
+</histogram>
+
+<histogram name="UserManager.LoginUserType" enum="UserType">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    The number of users of different types that log in to the system (Chrome
+    OS).
+  </summary>
+</histogram>
+
+<histogram name="UserManager.LogoutToLoginDelay" units="seconds">
+  <owner>alemate@chromium.org</owner>
+  <owner>omrilio@chromium.org</owner>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The time between one regular user logging out and a different regular user
+    logging in (Chrome OS). Delays above thirty minutes or which span system
+    reboots or non-regular-user logins are not reported.
+  </summary>
+</histogram>
+
+<histogram name="UserSessionManager.UserPodsDisplay" enum="UserPodsDisplay">
+  <owner>achuith@chromium.org</owner>
+  <summary>
+    Whether the user pods were enabled during login, and what could disable
+    them.
+  </summary>
+</histogram>
+
+<histogram name="V8.ASTOptimization">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="V8.CodeCacheRejectReason" enum="V8CodeCacheRejectReason">
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    Reason code data has been rejected when attempting to deserialize.
+  </summary>
+</histogram>
+
+<histogram name="V8.CodeCacheSizeRatio" units="%">
+  <owner>yangguo@chromium.org</owner>
+  <summary>Cache size to source size ratio when caching compiled code.</summary>
+</histogram>
+
+<histogram name="V8.CodeCreation">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="V8.CodeGeneration">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>Time spent generating native code for functions.</summary>
+</histogram>
+
+<histogram name="V8.CodegenFractionCrankshaft" units="%">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>rmcilroy@chromium.org</owner>
+  <summary>
+    Fraction of the total generated code which was generated using the
+    Crankshaft optimizing compiler, after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.Compile" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.CompileMicroSeconds.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>yangguo@chromium.org</owner>
+  <summary>Time spent in V8 compiler (full codegen).</summary>
+</histogram>
+
+<histogram name="V8.CompileCacheableMicroSeconds" units="microseconds">
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    Time spent compiling a script that may be subject to caching.
+  </summary>
+</histogram>
+
+<histogram name="V8.CompileDeserialize" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.CompileDeserializeMicroSeconds.
+  </obsolete>
+  <owner>vogelheim@chromium.org</owner>
+  <summary>Time spent deseriailzing code, used by V8 code caching.</summary>
+</histogram>
+
+<histogram name="V8.CompileDeserializeMicroSeconds" units="microseconds">
+  <owner>vogelheim@chromium.org</owner>
+  <summary>Time spent deseriailzing code, used by V8 code caching.</summary>
+</histogram>
+
+<histogram name="V8.CompileEval" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.CompileEvalMicroSeconds.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>yangguo@chromium.org</owner>
+  <summary>Time spent in V8 compiler (full codegen) for eval.</summary>
+</histogram>
+
+<histogram name="V8.CompileEvalMicroSeconds" units="microseconds">
+  <owner>jochen@chromium.org</owner>
+  <owner>yangguo@chromium.org</owner>
+  <summary>Time spent in V8 compiler (full codegen) for eval.</summary>
+</histogram>
+
+<histogram name="V8.CompileInlineScriptMicroSeconds" units="microseconds">
+  <owner>yangguo@chromium.org</owner>
+  <summary>Time spent compiling an inline script.</summary>
+</histogram>
+
+<histogram name="V8.CompileLazy" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.CompileLazyMicroSeconds.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>Time spent compiling functions lazily on first run.</summary>
+</histogram>
+
+<histogram name="V8.CompileLazyMicroSeconds" units="microseconds">
+  <owner>jochen@chromium.org</owner>
+  <summary>
+    Aggregated time spent compiling functions lazily during a single script
+    execution.
+  </summary>
+</histogram>
+
+<histogram name="V8.CompileMicroSeconds" units="microseconds">
+  <owner>jochen@chromium.org</owner>
+  <owner>yangguo@chromium.org</owner>
+  <summary>Time spent in V8 compiler (full codegen) excluding parser.</summary>
+</histogram>
+
+<histogram name="V8.CompileNoncacheableMicroSeconds" units="microseconds">
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    Time spent compiling a script that cannot be subject to caching.
+  </summary>
+</histogram>
+
+<histogram name="V8.CompileScript" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.CompileScriptMicroSeconds.
+  </obsolete>
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    Total time spent in compiling a script (incl. parsing/caching).
+  </summary>
+</histogram>
+
+<histogram name="V8.CompileScriptMicroSeconds" units="microseconds">
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    Total time spent in compiling a script (incl. parsing/caching).
+  </summary>
+</histogram>
+
+<histogram name="V8.CompileSerialize" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.CompileSerializeMicroSeconds.
+  </obsolete>
+  <owner>vogelheim@chromium.org</owner>
+  <summary>Time spent serializing code, used by V8 code caching.</summary>
+</histogram>
+
+<histogram name="V8.CompileSerializeMicroSeconds" units="microseconds">
+  <owner>vogelheim@chromium.org</owner>
+  <summary>Time spent serializing code, used by V8 code caching.</summary>
+</histogram>
+
+<histogram name="V8.DebugFeatureUsage" enum="V8DebugFeature">
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    Debugger feature used at least once per isolate, recorded on first use.
+  </summary>
+</histogram>
+
+<histogram name="V8.DeferredCodeGeneration">
+  <obsolete>
+    This histogram is no longer present in V8
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>Time spent generating deferred code stubs.</summary>
+</histogram>
+
+<histogram name="V8.DetachedContextAgeInGC">
+  <owner>ulan@chromium.org</owner>
+  <summary>
+    Number of garbage collections that a detached global context survives,
+    recorded after each major garbage collection. Values greater than 7 indicate
+    a memory leak.
+  </summary>
+</histogram>
+
+<histogram name="V8.ErrorsThrownPerContext" units="errors">
+  <owner>hablich@chromium.org</owner>
+  <summary>
+    The amount of JavaScript errors thrown by V8 per context. It does not count
+    custom errors and ignores catched errors thrown by V8. This is collected
+    after the context is detached.
+  </summary>
+</histogram>
+
+<histogram name="V8.ExecutableMemoryMax" units="bytes">
+  <obsolete>
+    This histogram is no longer present in V8
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>
+    The maximum memory used to store V8 compiled code on a given process.
+  </summary>
+</histogram>
+
+<histogram name="V8.Execute" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>rmcilroy@chromium.org</owner>
+  <summary>
+    Time spent in JavaScript Execution, including runtime calls, callbacks, and
+    lazy compilation.
+  </summary>
+</histogram>
+
+<histogram name="V8.GCCompactor" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in mark-sweep phase of GC.</summary>
+</histogram>
+
+<histogram name="V8.GCContext" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent doing a full GC during an IdleNotification.</summary>
+</histogram>
+
+<histogram name="V8.GCFinalizeMC" units="ms">
+  <owner>ulan@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in finalize incremental mark-sweep phase of GC.</summary>
+</histogram>
+
+<histogram name="V8.GCFinalizeMCReduceMemory" units="ms">
+  <owner>ulan@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Time spent in finalize incremental memory-reducing mark-sweep phase of GC.
+  </summary>
+</histogram>
+
+<histogram name="V8.GCFinalzeMC" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.GCFinalizeMC because of typo in the
+    name.
+  </obsolete>
+  <owner>ulan@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in finalize incremental mark-sweep phase of GC.</summary>
+</histogram>
+
+<histogram name="V8.GCIdleNotification" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in IdleNotifications.</summary>
+</histogram>
+
+<histogram name="V8.GCIdleTimeAllottedInMS" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Idle time passed to V8 via IdleNotifications.</summary>
+</histogram>
+
+<histogram name="V8.GCIdleTimeLimit.Overshot" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Milliseconds the idle time limit was overshot by the IdleNotification.
+  </summary>
+</histogram>
+
+<histogram name="V8.GCIdleTimeLimit.Undershot" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Milliseconds the idle time limit was undershot by the IdleNotification.
+  </summary>
+</histogram>
+
+<histogram name="V8.GCIncrementalMarking" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent doing incremental marking steps during GC.</summary>
+</histogram>
+
+<histogram name="V8.GCIncrementalMarkingFinalize" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in finalizing incremental marking.</summary>
+</histogram>
+
+<histogram name="V8.GCIncrementalMarkingReason" units="GarbageCollectionReason">
+  <owner>ulan@chromium.org</owner>
+  <summary>Reason an incremental marking was started in V8.</summary>
+</histogram>
+
+<histogram name="V8.GCIncrementalMarkingStart" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in starting incremental marking.</summary>
+</histogram>
+
+<histogram name="V8.GCLowMemoryNotification" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in LowMemoryNotifications.</summary>
+</histogram>
+
+<histogram name="V8.GCMarkCompactReason" units="GarbageCollectionReason">
+  <owner>ulan@chromium.org</owner>
+  <summary>Reason a mark-compact garbage collection was started in V8.</summary>
+</histogram>
+
+<histogram name="V8.GCScavenger" units="ms">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>Time spent in scavenging phase of GC.</summary>
+</histogram>
+
+<histogram name="V8.GCScavengeReason" units="GarbageCollectionReason">
+  <owner>ulan@chromium.org</owner>
+  <summary>Reason a scavenge garbage collection was started in V8.</summary>
+</histogram>
+
+<histogram name="V8.Initializer.LoadV8Snapshot.Result"
+    enum="V8InitializerLoadV8SnapshotResult">
+  <owner>oth@chromium.org</owner>
+  <summary>Results from snapshot loading.</summary>
+</histogram>
+
+<histogram name="V8.Initializer.OpenV8File.Result"
+    enum="V8InitializerOpenV8FileResult">
+  <owner>oth@chromium.org</owner>
+  <summary>Results from opening V8 snapshot files.</summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationCellSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the cell space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationCodeSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the code space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationLoSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the large object space after each GC in
+    percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationMapSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the map space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationOldDataSpace" units="%">
+  <obsolete>
+    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the old data space after each GC in
+    percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationOldPointerSpace" units="%">
+  <obsolete>
+    This histogram has been replaced by V8.MemoryExternalFragmentationOldSpace.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the old pointer space after each GC in
+    percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationOldSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    External memory fragmentation in the old space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryExternalFragmentationTotal" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Total external memory fragmentation after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapCommitted" units="KB">
+  <owner>ulan@chromium.org</owner>
+  <summary>
+    The committed memory used by V8 in KB averaged over time, logged before each
+    GC.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionCellSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the cell space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionCodeSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the code space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionLoSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the lo space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionMapSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the map space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionNewSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the new space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionOldDataSpace" units="%">
+  <obsolete>
+    This histogram has been replaced by V8.MemoryHeapFractionOldSpace.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the old data space after each GC in
+    percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionOldPointerSpace" units="%">
+  <obsolete>
+    This histogram has been replaced by V8.MemoryHeapFractionOldSpace.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the old pointer space after each GC in
+    percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapFractionOldSpace" units="%">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    Fraction of the total heap used by the old space after each GC in percent.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapSampleCellSpaceCommitted" units="KB">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    The size of committed memory in the cell space after each GC in KB.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapSampleCodeSpaceCommitted" units="KB">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    The size of committed memory in the code space after each GC in KB.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapSampleMapSpaceCommitted" units="KB">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    The size of committed memory in the map space after each GC in KB.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapSampleTotalCommitted" units="KB">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    The total size of committed memory used by V8 after each GC in KB.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapSampleTotalUsed" units="KB">
+  <owner>jochen@chromium.org</owner>
+  <owner>hpayer@chromium.org</owner>
+  <summary>
+    The total size of live memory used by V8 after each GC in KB.
+  </summary>
+</histogram>
+
+<histogram name="V8.MemoryHeapUsed" units="KB">
+  <owner>ulan@chromium.org</owner>
+  <summary>
+    The live memory used by V8 in KB averaged over time, logged before each GC.
+  </summary>
+</histogram>
+
+<histogram name="V8.Parse" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.ParseMicroSeconds.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>marja@chromium.org</owner>
+  <summary>Time spent in V8 parser.</summary>
+</histogram>
+
+<histogram name="V8.ParseLazy" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.ParseLazyMicroSeconds.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>marja@chromium.org</owner>
+  <summary>
+    Time spent parsing functions when they are lazily compiled on first run.
+  </summary>
+</histogram>
+
+<histogram name="V8.ParseLazyMicroSeconds" units="microseconds">
+  <obsolete>
+    Deprecated.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>marja@chromium.org</owner>
+  <summary>
+    Time spent parsing functions when they are lazily compiled on first run.
+  </summary>
+</histogram>
+
+<histogram name="V8.ParseMicroSeconds" units="microseconds">
+  <obsolete>
+    Deprecated.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>marja@chromium.org</owner>
+  <summary>Time spent in V8 parser.</summary>
+</histogram>
+
+<histogram name="V8.PreParse" units="ms">
+  <obsolete>
+    This histogram has been replaced by V8.PreParseMicroSeconds.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>marja@chromium.org</owner>
+  <summary>Time spent preparsing source code.</summary>
+</histogram>
+
+<histogram name="V8.PreParseMicroSeconds" units="microseconds">
+  <obsolete>
+    Deprecated.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>marja@chromium.org</owner>
+  <summary>Time spent preparsing source code.</summary>
+</histogram>
+
+<histogram name="V8.Rewriting">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>Time spent on rewriting ASTs before compilation.</summary>
+</histogram>
+
+<histogram name="V8.RSetLO">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="V8.RSetPaged">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="V8.ScriptCache">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <owner>yangguo@chromium.org</owner>
+  <summary>
+    The generation a compiled script was found in the compilation cache.
+  </summary>
+</histogram>
+
+<histogram name="V8.UsageAnalysis">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>Time spent analysing the usage of variables.</summary>
+</histogram>
+
+<histogram name="V8.VariableAllocation">
+  <obsolete>
+    This histogram is no longer present in V8.
+  </obsolete>
+  <owner>jochen@chromium.org</owner>
+  <summary>TBD</summary>
+</histogram>
+
+<histogram name="Variations.CreateTrials.SeedExpiry"
+    enum="VariationsSeedExpiry">
+  <owner>asvitkine@chromium.org</owner>
+  <owner>fdoray@chromium.org</owner>
+  <summary>
+    The result of verifying if the variations seed is expired, recorded before
+    trials are created from the seed. Expired seeds are treated as not existing.
+  </summary>
+</histogram>
+
+<histogram name="Variations.DisabledNoEntropyProvider" enum="BooleanHit">
+  <obsolete>
+    Deprecated 1/2013. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    A count of the number of times we hit the code where a field trial is
+    disabled because no entropy provider was provided.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FailedRequestErrorCode" enum="NetErrorCodes">
+  <obsolete>
+    Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The counts of network error codes encountered by VariationsService when an
+    attempt to fetch a variations seed from the server fails.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FetchNotModifiedLatency" units="ms">
+  <obsolete>
+    Deprecated 2/2014. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The latency of a VariationsService seed fetch that results in a not modified
+    response.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FetchOtherLatency" units="ms">
+  <obsolete>
+    Deprecated 2/2014. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The latency of a VariationsService seed fetch that results in neither a
+    success nor not modified response.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FetchSuccessLatency" units="ms">
+  <obsolete>
+    Deprecated 2/2014. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The latency of a VariationsService seed fetch that results in a success
+    response.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FirstRun.SeedFetchResult"
+    enum="VariationsFirstRunSeedFetchResult">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The result of attempting to fetch an initial variations seed during Android
+    Chrome first run. Records both the HTTP code and various error values in one
+    enumeration.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FirstRun.SeedFetchTime" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The latency of fetching an initial variations seed during Android Chrome
+    first run. Only considers cases where an HTTP 200 result was received.
+  </summary>
+</histogram>
+
+<histogram name="Variations.FirstRunResult" enum="VariationsFirstRunResult">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The result of attempting to import an initial variations seed during Android
+    Chrome first run. Logged from VariationsSeedStore::LoadSeed when seed prefs
+    do not exist.
+  </summary>
+</histogram>
+
+<histogram name="Variations.GoogleUpdateRegistryLabelsNeedClearing"
+    enum="BooleanNeedsClearing">
+  <owner>jwd@chromium.org</owner>
+  <summary>
+    If the registry value for Google Update experiment labels contains
+    Variations experiments, and therefore needs to have them cleared. This will
+    be recorderd once per sessions, right before attempting to clear the value.
+  </summary>
+</histogram>
+
+<histogram name="Variations.HeaderConstructionTime" units="microseconds">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>How long it took to create the X-Client-Data header.</summary>
+</histogram>
+
+<histogram name="Variations.Headers.ExperimentCount">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records number of experiment ids in the X-Client-Data header at the time the
+    header is constructed.
+  </summary>
+</histogram>
+
+<histogram name="Variations.LoadPermanentConsistencyCountryResult"
+    enum="VariationsPermanentConsistencyCountryResult">
+  <owner>sclittle@chromium.org</owner>
+  <summary>
+    Records how the country code saved in prefs used for filtering permanent
+    consistency studies compares to the country code in the variations seed.
+    This is recorded each time the saved country code is loaded from the pref.
+  </summary>
+</histogram>
+
+<histogram name="Variations.LoadSeedSignature" enum="VariationSeedSignature">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The result of verifying the variations seed signature, recorded when the
+    variations seed is stored to Local State after being retrieved from the
+    server.
+  </summary>
+</histogram>
+
+<histogram name="Variations.NetworkAvailability" enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 9/2012. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Whether or not the network was available when requested by the
+    VariationsService.
+  </summary>
+</histogram>
+
+<histogram name="Variations.RequestCount">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Number of previous requests to the variations server in the same session,
+    logged each time a new request is attempted to the variations server. For
+    example, the value of the 0th bucket indicates the number of initial
+    requests to the server that took place.
+  </summary>
+</histogram>
+
+<histogram name="Variations.ResourceRequestsAllowed"
+    enum="VariationsResourceRequestsAllowedState">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Counts the number of times the VariationsService is allowed or not allowed
+    to make a request due to the ResourceRequestAllowedNotifier.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedDateChange" enum="VariationsSeedDateChange">
+  <owner>jwd@chromium.org</owner>
+  <summary>
+    Counts if a response from the variations server is the first response of the
+    day or not. This is counted when a new valid seed or a 304 is received. The
+    date line is computed in UTC and the times being compared are the server
+    time from the server response and the stored server time from the last
+    successful request.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedDateSkew.BuildTimeAheadBy" units="days">
+  <obsolete>
+    Deprecated as of 9/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged on startup when creating field trials from the variations seed if the
+    build time is ahead of or within 24 hours of the kVariationsSeedDate. Used
+    as an experiment to see whether the build time could be used to discard very
+    old seeds.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedDateSkew.BuildTimeBehindBy" units="days">
+  <obsolete>
+    Deprecated as of 9/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged on startup when creating field trials from the variations seed if the
+    build time is behind the kVariationsSeedDate by a day or more. Used as an
+    experiment to see whether the build time could be used to discard very old
+    seeds.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedDateSkew.SystemClockAheadBy" units="days">
+  <obsolete>
+    Deprecated as of 9/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged on startup when creating field trials from the variations seed if the
+    system clock is ahead of or within 24 hours of the kVariationsSeedDate. Used
+    as an experiment to see whether the system clock could be used to discard
+    very old seeds.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedDateSkew.SystemClockBehindBy" units="days">
+  <obsolete>
+    Deprecated as of 9/2015.
+  </obsolete>
+  <owner>gab@chromium.org</owner>
+  <summary>
+    Logged on startup when creating field trials from the variations seed if the
+    system clock is behind the kVariationsSeedDate by a day or more. Used as an
+    experiment to see whether the system clock could be used to discard very old
+    seeds.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedEmpty" enum="VariationsSeedEmpty">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records whether the variations seed in local state is empty (does not exist)
+    on startup.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedFetchResponseCode" enum="HttpResponseCode">
+  <obsolete>
+    Deprecated 10/2016. Replaced by Variations.SeedFetchResponseOrErrorCode.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The counts of HTTP response codes encountered by VariationsService when
+    attempting to fetch a variations seed from the server.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedFetchResponseOrErrorCode"
+    enum="CombinedHttpResponseAndNetErrorCode">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    HTTP response codes and network error encountered by VariationsService when
+    attempting to fetch a variations seed from the server.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedFreshness" units="minutes">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time interval between when the variations seed was last downloaded and
+    when it was used.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SeedStoreResult" enum="VariationsSeedStoreResult">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the result of storing the variations seed that was received from the
+    server.
+  </summary>
+</histogram>
+
+<histogram name="Variations.ServerStudyExpiredUniformity1Percent"
+    enum="BooleanExpired">
+  <obsolete>
+    Deprecated 11/2012. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Whether or not the 1-Percent uniformity trial from the Variations server was
+    expired when loaded.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SimulateSeed.Duration" units="ms">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the time taken to perform variations seed simulation.
+
+    Recorded on every variation seed simulation, which follows a fetch.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SimulateSeed.KillBestEffortChanges">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the result of variations seed simulation. Logs the number of
+    experiment groups in the &quot;kill best effort&quot; category that are
+    expected to change on a restart of the browser with the received seed.
+
+    Recorded on every variation seed simulation, which follows a fetch.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SimulateSeed.KillCriticalChanges">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the result of variations seed simulation. Logs the number of
+    experiment groups in the &quot;kill critical&quot; category that are
+    expected to change on a restart of the browser with the received seed.
+
+    Recorded on every variation seed simulation, which follows a fetch.
+  </summary>
+</histogram>
+
+<histogram name="Variations.SimulateSeed.NormalChanges">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the result of variations seed simulation. Logs the number of
+    experiment groups in the &quot;normal&quot; category that are expected to
+    change on a restart of the browser with the received seed.
+
+    Recorded on every variation seed simulation, which follows a fetch.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StoreSeed.DeltaSize" units="KiB">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    On successful save of a delta-compressed variations seed, records the size
+    of the delta in KiB.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StoreSeed.DeltaSize.ReductionPercent" units="%">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    On successful save of a delta-compressed variations seed, records the size
+    of the delta as a percentage of the decoded seed size.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StoreSeed.GzipSize" units="KiB">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the size of the gzip-compressed variations seed in KiB.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StoreSeed.GzipSize.ReductionPercent" units="%">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the size of the gzip-compressed variations seed as a percentage of
+    the decoded seed size. Note that variations seed could be first
+    delta-compressed and then gzip-compressed. In this case we record
+    gzip-compressed seed size as a percentage of the delta-compressed seed size.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StoreSeed.Size" units="KiB">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    On successful save of a non-delta-compressed variations seed, records the
+    size of the received seed in KiB.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StoreSeedSignature" enum="VariationSeedSignature">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The result of verifying the variations seed signature, recorded when the
+    variations seed is loaded from Local State.
+  </summary>
+</histogram>
+
+<histogram name="Variations.StringsOverridden" units="strings">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Records the number of UI strings overriden for each study that overrides
+    strings. Recorded at start up when each study is evaluated.
+  </summary>
+</histogram>
+
+<histogram name="Variations.TimeSinceLastFetchAttempt" units="minutes">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    The time since the previous attempt to fetch the variations seed within the
+    same session, with 0 indicating that this is the first attempt. Recorded
+    when a variations seed fetch is attempted by the VariationsService.
+  </summary>
+</histogram>
+
+<histogram name="Variations.UniformityTrialExpired" enum="BooleanHit">
+  <obsolete>
+    Deprecated 1/2013. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    A count of the number of times we hit the code where the
+    UMA-Uniformity-Trial-1-Percent field trial is disabled as a result of the
+    expiration check.
+  </summary>
+</histogram>
+
+<histogram name="Variations.UniformityTrialGroupNotActive"
+    enum="UniformityTrialGroupNotActive">
+  <obsolete>
+    Deprecated 1/2013. No longer tracked.
+  </obsolete>
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Tracks whether the UMA-Uniformity-Trial-1-Percent field trial was not active
+    and which factors contributed to it.
+  </summary>
+</histogram>
+
+<histogram name="Variations.UserChannel" enum="UserChannels">
+  <owner>asvitkine@chromium.org</owner>
+  <summary>
+    Log the user channel assigned at browser startup used for evaluating the
+    variations seeds.
+  </summary>
+</histogram>
+
+<histogram name="Vibration.Context" enum="NavigatorVibrationType">
+  <owner>binlu@google.com</owner>
+  <summary>
+    Records instances of navigator.vibrate. Includes whether or not it comes
+    with a user gesture, same-origin subframe or cross-origin subframe.
+  </summary>
+</histogram>
+
+<histogram name="VideoPlayer.CastAPIExtensionStatus"
+    enum="VideoPlayerCastAPIExtensionStatus">
+  <owner>yoshiki@chromium.org</owner>
+  <summary>
+    Chrome OS Video Player: the results of the cast API extension load. This is
+    recorded after the initialization of the extension is finished.
+  </summary>
+</histogram>
+
+<histogram name="VideoPlayer.CastedVideoLength" units="seconds">
+  <owner>yoshiki@chromium.org</owner>
+  <summary>
+    Chrome OS Video Player: the length of casted video (in seconds).
+  </summary>
+</histogram>
+
+<histogram name="VideoPlayer.NumberOfCastDevices">
+  <owner>yoshiki@chromium.org</owner>
+  <summary>
+    Chrome OS Video Player: the number of cast devices. This is recorded when
+    the cast extension finishes the discovery.
+  </summary>
+</histogram>
+
+<histogram name="VideoPlayer.NumberOfOpenedFiles">
+  <owner>yoshiki@chromium.org</owner>
+  <summary>
+    Chrome OS Video Player: the number of files being opened on launch.
+  </summary>
+</histogram>
+
+<histogram name="VideoPlayer.PlayType" enum="VideoPlayerPlayType">
+  <owner>yoshiki@chromium.org</owner>
+  <summary>
+    Chrome OS Video Player: type of playback (eg. local play, cast). This is
+    recorded when a video starts playing.
+  </summary>
+</histogram>
+
+<histogram name="Viewport.DidScalePage" enum="BooleanDidScalePage">
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    Tracks the proportion of non-mobile optimized (i.e. zoom disabled or layout
+    width matches viewport) page views that had a user-initiated page scale
+    (e.g. pinch-zoom, double-tap). Recorded on navigation to a new page - on
+    Android only.
+  </summary>
+</histogram>
+
+<histogram name="Viewport.MaxPageScale" enum="PageScaleFactorRange">
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    Tracks the maximum scale factor that a user has scaled to over the lifetime
+    of the page. The scale is counted at pinch end (e.g. zooming to 300% and
+    back out to 150% in one gesture would count as 150%). Reported only on
+    non-mobile optimized pages (i.e. zoom disabled or layout width matches
+    viewport) which have had a page scale changing gesture. Recorded on
+    navigation to a new page - on Android only.
+  </summary>
+</histogram>
+
+<histogram name="Viewport.MetaTagType" enum="MetaTagTypeEnum">
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    The viewport meta tag type seen on each page load. Only recorded on Android.
+  </summary>
+</histogram>
+
+<histogram name="Viewport.OverviewZoom" units="%">
+  <owner>bokan@chromium.org</owner>
+  <summary>
+    The screen width as a percentage of viewport width (i.e. zoom at which we
+    can see the whole page). Only recorded on Android and for viewport meta tags
+    with constant width.
+  </summary>
+</histogram>
+
+<histogram name="VirtualKeyboard.KeyboardControlEvent"
+    enum="KeyboardControlEvent">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    A count of various control events that can occur on the virtual keyboard,
+    such as showing and hiding.
+  </summary>
+</histogram>
+
+<histogram name="VirtualKeyboard.KeystrokesBetweenBackspace">
+  <obsolete>
+    Deprecated 04/2016 as doesn't have data nor owner.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Counts the number of keys typed by the virtual keyboard between each
+    backspace. This metric provides a rough approximation of an error rate for
+    the virtual keyboard.
+  </summary>
+</histogram>
+
+<histogram name="VRDisplayPresentResult" enum="PresentationResult">
+  <owner>billorr@chromium.org</owner>
+  <summary>
+    The result of calls to VRDisplay::requestPresent().  Reported twice per
+    requestPresent() call, once to record the call, and once to record the
+    result.
+  </summary>
+</histogram>
+
+<histogram name="VRSessionNavigationCount">
+  <owner>billorr@chromium.org</owner>
+  <summary>
+    Count of navigations while in a VR session.  Logged when a new disjoint
+    session has begun, or when the session has ended in a non-continuable way.
+  </summary>
+</histogram>
+
+<histogram name="VRSessionTime" units="ms">
+  <owner>billorr@chromium.org</owner>
+  <summary>
+    The duration of the VR session.  Logged when a new disjoint session has
+    begun, or when the session has ended in a non-continuable way.
+  </summary>
+</histogram>
+
+<histogram name="VRSessionVideoCount">
+  <owner>billorr@chromium.org</owner>
+  <summary>
+    Number of videos watched in a VR session.  Logged when a new disjoint
+    session has begun, or when the session has ended in a non-continuable way.
+  </summary>
+</histogram>
+
+<histogram name="VRSessionVideoTime" units="ms">
+  <owner>billorr@chromium.org</owner>
+  <summary>
+    The duration of a single session spent watching video in VR.  Logged when a
+    new disjoint session has begun, or when the session has ended in a
+    non-continuable way.
+  </summary>
+</histogram>
+
+<histogram name="VRViewerType" enum="VRViewerType">
+  <owner>billorr@chromium.org</owner>
+  <summary>The type of headset being used for VR.</summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.AcceptLegalDocuments" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's accept legal
+    document API call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.AuthenticateInstrument" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's authenticate
+    instrument API call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.GetFullWallet" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's get full wallet API
+    call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.GetWalletItems" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's get wallet items
+    API call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.SaveAddress" units="ms">
+  <obsolete>
+    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's save address API
+    call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.SaveInstrument" units="ms">
+  <obsolete>
+    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's save instrument API
+    call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.SaveInstrumentAndAddress" units="ms">
+  <obsolete>
+    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's save instument and
+    address API call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.SaveToWallet" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's save to wallet API
+    call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.SendStatus" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's send status API
+    call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.UnknownApiCall" units="ms">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's unknown API calls.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.UpdateAddress" units="ms">
+  <obsolete>
+    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's update address API
+    call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ApiCallDuration.UpdateInstrument" units="ms">
+  <obsolete>
+    Deprecated as of 7/2013, replaced by Wallet.ApiCallDuration.SaveToWallet.
+  </obsolete>
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Measures the time taken by Google Online Wallet server's update instument
+    API call.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.MalformedResponse" enum="WalletApiCall">
+  <owner>estade@chromium.org</owner>
+  <summary>
+    Counts the number of times each Wallet API failed due to being unable to
+    parse the response.
+  </summary>
+</histogram>
+
+<histogram name="Wallet.ResponseCode" enum="HttpResponseCode">
+  <owner>estade@chromium.org</owner>
+  <summary>HTTP response codes seen by Wallet client.</summary>
+</histogram>
+
+<histogram name="Web.CertVerifyAgreement" enum="WebCertVerifyAgreement">
+  <obsolete>
+    Deprecated 08/2016 because CertVerifier is not used for web view cert
+    verification.
+  </obsolete>
+  <owner>eugenebut@chromium.com</owner>
+  <summary>
+    [iOS] Reports certificate verification mismatch between SecTrust API and
+    CertVerifier. SecTrust API is used for making load/no-load decision and
+    CertVerifier is used for getting the reason of verification failure. It is
+    expected that mismatches will happen for those 2 approaches (e.g. SecTrust
+    API considers cert as good, but CertVerifier considers same cert as bad).
+    This metric helps to understand how common mismatches are.
+  </summary>
+</histogram>
+
+<histogram name="Web.CurrentURLEqualsLastCommittedURL" enum="BooleanEqual">
+  <owner>michaeldo@chromium.com</owner>
+  <summary>
+    [iOS] Reports URL matches between the return value from the WebState's
+    GetLastCommittedURL and GetCurrentURL methods. It is expected the values
+    will be equal to confirm that GetCurrentURL can now be replaced with
+    GetLastCommittedURL. This will be called each time WebStateImpl::
+    GetCurrentURL(URLVerificationTrustLevel* trust_level) is called, which is an
+    old method of obtaining the url and trust level. The trust level was only
+    relevant with UIWebView, so this method is only called from code which has
+    not yet been updated since UIWebView was removed.
+  </summary>
+</histogram>
+
+<histogram name="WebApk.Install.InfoBarShown" enum="WebApkInstallInfoBarShown">
+  <owner>hanxi@chromium.org</owner>
+  <owner>pkotwicz@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
+    the add to homescreen menu item. This stat tracks whether the installation
+    is triggered by an app banner or by the add to homescreen menu.
+  </summary>
+</histogram>
+
+<histogram name="WebApk.Install.InstallEvent" enum="WebApkInstallEvent">
+  <owner>hanxi@chromium.org</owner>
+  <owner>pkotwicz@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
+    the add to homescreen menu item. This stat tracks the WebAPKs installation
+    events, including whether the infobar is ignored, whether the infobar is
+    dismissed by the user before or during the installation, as well as whether
+    the installation was successful.
+  </summary>
+</histogram>
+
+<histogram name="WebApk.Install.InstallSource" enum="WebApkInstallSource">
+  <owner>hanxi@chromium.org</owner>
+  <owner>pkotwicz@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
+    the add to homescreen menu item. If the installation is via an app banner,
+    user could either accept to install or dismiss the infobar; while via the
+    add to homescreen menu, the installation will start automatically. This stat
+    tracks the ways that user accepts to install a WebAPK.
+  </summary>
+</histogram>
+
+<histogram name="WebApk.Install.UserAction" enum="WebApkUserAction">
+  <owner>hanxi@chromium.org</owner>
+  <owner>pkotwicz@chromium.org</owner>
+  <owner>yfriedman@chromium.org</owner>
+  <summary>
+    WebAPKs are PWAs wrapped in an Android apk, installed from an app banner or
+    the add to homescreen menu item. If the user clicks the add to homescreen
+    menu, and a WebAPK has been installed before, an infobar with an open button
+    will show. The open button will also show on the infobar after a successful
+    installation. This stat tracks whether user clicks the open button on the
+    infobar or dismiss it.
+  </summary>
+</histogram>
+
+<histogram name="Webapp.Splashscreen.BackgroundColor"
+    enum="SplashscreenColorStatus">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records the status of the splashscreen's background color (default or
+    custom).
+  </summary>
+</histogram>
+
+<histogram name="Webapp.Splashscreen.Duration" units="ms">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>Records the time during which the splashscreen was visible.</summary>
+</histogram>
+
+<histogram name="Webapp.Splashscreen.Hides" enum="SplashscreenHidesReason">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>Records the signal that was used to hide the splashscreen.</summary>
+</histogram>
+
+<histogram name="Webapp.Splashscreen.Icon.Size" units="dp">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records the size of the icon used to construct the splashscreen in device
+    pixels (ie. real size divided by device pixel density). This is only
+    recording one dimension, the icon being square.
+  </summary>
+</histogram>
+
+<histogram name="Webapp.Splashscreen.Icon.Type" enum="SplashscreenIconType">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records the origin of the icon used to construct the splashscreen.
+  </summary>
+</histogram>
+
+<histogram name="Webapp.Splashscreen.ThemeColor" enum="SplashscreenColorStatus">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records the status of the splashscreen's theme color (default or custom).
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioBuffer.Length" units="frames">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The length (in frames) requested by createBuffer(). Recorded for every call
+    to createBuffer(). Probably many (tens or hundreds) per page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioBuffer.NumberOfChannels">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The number of channels requested by createBuffer(). Recorded for every call
+    to createBuffer(). Probably many (tens or hundreds) per page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioBuffer.SampleRate" units="Hz">
+  <obsolete>
+    Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher
+    supported sample rates.
+  </obsolete>
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The sample rate (in Hz) requested by createBuffer(). Recorded for every call
+    to createBuffer(). Probably many (tens or hundreds) per page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioBuffer.SampleRate384kHz" units="Hz">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The sample rate (in Hz) requested by createBuffer(). Recorded for every call
+    to createBuffer(). Probably many (tens or hundreds) per page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioBuffer.SampleRateRatio">
+  <obsolete>
+    Replaced by SampleRateRatio384kHz in Issue 644683 on 2016/10 due to higher
+    supported sample rates.
+  </obsolete>
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The ratio of the buffer sample rate from createBuffer() to the context
+    sample rate. This indicates if the buffer needs to be resampled.  Recorded
+    for every call to createBuffer().  Probably many (tens or hundreds) per
+    page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioBuffer.SampleRateRatio384kHz">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The ratio of the buffer sample rate from createBuffer() to the context
+    sample rate. This indicates if the buffer needs to be resampled.  Recorded
+    for every call to createBuffer().  Probably many (tens or hundreds) per
+    page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioContext.HardwareSampleRate" units="Hz">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The hardware sample rate (in Hz) used by an AudioContext. Recorded for every
+    WebAudio AudioContext that is created; probably only one or two per page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioContext.MaxChannelsAvailable">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The maximum number of (hardware) channels available in an AudioContext.
+    Recorded for every WebAudio AudioContext that is created; probably only one
+    or two per page.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioDestination.CallbackBufferSize">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The callback buffer size (in audio frames) for WebAudio rendering between
+    the WebAudio graph and the audio device thread.  This can differ from the
+    value recommended by the audio hardware due to internal constraints in
+    WebAudio. Recorded for every WebAudio AudioContext that is created.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.AudioDestination.HardwareBufferSize">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The buffer size (in audio frames) for WebAudio rendering recommended by the
+    audio hardware.  Recorded for every WebAudio AudioContext that is created.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.Autoplay.CrossOrigin" enum="WebAudioAutoplayStatus">
+  <owner>mlamouri@chromium.org</owner>
+  <summary>The autoplay status of an AudioContext when destroyed.</summary>
+</histogram>
+
+<histogram name="WebAudio.BiquadFilter.Q.Highpass">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The Q value (in 0.25 dB steps) used for a highpass BiquadFilter. Recorded
+    each time the value is set for a highpass filter via the .value setter or
+    the automation methods linearRampToValueAtTime, exponentialValueAtTime, and
+    setValueAtTime.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.BiquadFilter.Q.Lowpass">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The Q value (in 0.25 dB steps) used for a lowpass BiquadFilter. Recorded
+    each time the value is set for a lowpass filter via the .value setter or the
+    automation methods linearRampToValueAtTime, exponentialValueAtTime, and
+    setValueAtTime.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.BiquadFilter.Type" enum="BiquadFilterType">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The type of the BiquadFilterNode. Recorded each time the type is set. This
+    recorded once (to lowpass) when a biquad filter is created and also recorded
+    whenever the filter type changes due to user action or programatically. It
+    is unlikely the type will change more than once.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.IIRFilterNode.Order">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The order of the WebAudio IIRFilterNode.  The order is one less than the
+    number of feedback coefficients used in the denominator of the IIRFilter
+    transfer function.  Recorded each time an IIRFilter is constructed.
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.OfflineAudioContext.ChannelCount">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The number of channels specified for the offline audio context. Recorded for
+    every offline context created. Probably only a few per page, but could be
+    potentially much more (thousands).
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.OfflineAudioContext.Length" units="frames">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The length (in frames) specified for the offline audio context. Recorded for
+    every offline context created. Probably only a few per page, but could be
+    potentially much more (thousands).
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.OfflineAudioContext.SampleRate" units="Hz">
+  <obsolete>
+    Replaced by SampleRate384kHz in Issue 644683 on 2016/10 due to higher
+    supported sample rates.
+  </obsolete>
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The sample rate (in Hz) specified for the offline audio context. Recorded
+    for every offline context created.  Probably only a few per page, but could
+    be potentially much more (thousands).
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.OfflineAudioContext.SampleRate384kHz" units="Hz">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The sample rate (in Hz) specified for the offline audio context. Recorded
+    for every offline context created.  Probably only a few per page, but could
+    be potentially much more (thousands).
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.PannerNode.PanningModel" enum="PanningModelType">
+  <owner>rtoy@chromium.org</owner>
+  <owner>hongchan@chromium.org</owner>
+  <summary>
+    The panning model for the PannerNode. Recorded once with the default value
+    at creation and once again whenver it is changed.  Once changed, it is
+    unlikely to be changed again. If there are any PannerNodes created at all,
+    then there is probably one for each source (AudioBufferSourceNode,
+    OscillatorNode, or other source).
+  </summary>
+</histogram>
+
+<histogram name="WebAudio.UserGesture" enum="UserGestureRequirement">
+  <obsolete>
+    Deprecated 2016-09. As of M55, this is no longer recorded.
+  </obsolete>
+  <owner>mlamouri@chromium.org</owner>
+  <summary>
+    Records whether WebAudio had a user gesture requirement and whether it was
+    fulfilled.
+  </summary>
+</histogram>
+
+<histogram name="WebController.CertVerificationErrorsCacheHit"
+    enum="BooleanCacheHit">
+  <owner>eugenebut@chromium.org</owner>
+  <summary>
+    [iOS] Report cache hit/miss for WKWebView cert verification. WKWebView Web
+    Controller has a cache of pending cert verification results to avoid extra
+    verifications when presenting SSL interstitial. This metric helps to
+    understand whether or not cache miss is possible.
+  </summary>
+</histogram>
+
+<histogram name="WebController.EmptyNavigationManagerCausedByStopLoading"
+    enum="Boolean">
+  <owner>eugenebut@chromium.org</owner>
+  <summary>
+    [iOS] Chrome for iOS crashes because NavigationManager does not have any
+    navigation items and visible navigation item is dereferenced
+    (crbug.com/565457). The assumption is that crash occurs if pending load was
+    stopped for a child window. This metric will prove or disprove that
+    assumption.
+  </summary>
+</histogram>
+
+<histogram name="WebController.ExternalURLRequestBlocking"
+    enum="IOSExternalURLRequestStatus">
+  <owner>jyquinn@chromium.org</owner>
+  <summary>
+    [iOS] Measures the proportion of external URL requests that originate from a
+    subframe without any user interaction (e.g. an advertisement contains an
+    iframe directed at the App Store).
+  </summary>
+</histogram>
+
+<histogram name="WebCore.Animation.CSSProperties" enum="MappedCSSProperties">
+  <owner>ajuma@chromium.org</owner>
+  <summary>
+    Counts the number of times each CSS property is animated. There is no limit
+    on the number of times each property is counted per page view -- a property
+    that is animated multiple times during a single page view is counted each
+    time it animates.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.CanvasContextUsage" enum="CanvasContextUsage">
+  <owner>zmin@chromium.org</owner>
+  <owner>junov@chromium.org</owner>
+  <summary>
+    The usage of Canvas 2D Context API. Logged when the particular API is used.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.DistillabilityUs" units="microseconds">
+  <owner>wychen@chromium.org</owner>
+  <summary>
+    The time spent on collecting the statistics of the document in the main
+    frame. These statistics would be used as features to classify whether the
+    page is suitable for DOM distiller.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.Document.execCommand" enum="MappedEditingCommands">
+  <owner>yoichio@chromium.org</owner>
+  <summary>
+    Counts the number of times each document.execCommand is executed. This
+    doesn't count commands not supported by Blink.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.Editing.Commands" enum="MappedEditingCommands">
+  <owner>yoichio@chromium.org</owner>
+  <summary>
+    Counts the number of times each Editor::Command::execute is called. This
+    doesn't count commands not supported by Blink.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.FeatureObserver" enum="FeatureObserver">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    NOTE: This is in the process of being superseded by
+    WebCore.UseCounter.Features which fixes a number of issues.  See
+    https://crbug.com/597963.
+
+    Count of how many page loads use various features. The PageVisits bucket is
+    incremented for each page load, and the other buckets incremented at most
+    once per PageVisit via the WebCore::UseCounter class.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.FeatureObserver.CSSProperties"
+    enum="MappedCSSProperties">
+  <owner>mikelawther@chromium.org</owner>
+  <summary>
+    NOTE: This is in the process of being superseded by
+    WebCore.UseCounter.CSSProperties which fixes a number of issues.  See
+    https://crbug.com/597963.
+
+    Records usage of CSS properties used on a page, either statically or
+    dynamically, from the time the page is initialised to when it is closed or
+    navigated away from. Each property is counted at most once per page per
+    view.
+  </summary>
+  <details>
+    Every time a CSS property is parsed on a page, that property is recorded as
+    having been used. The histogram is updated with this data whenever a page is
+    closed, or a page navigation happens. Each histogram bucket corresponds to a
+    CSS property (eg width, border-radius). The exception is the bucket numbered
+    '1' - this counts the number of pages that CSS properties were counted on.
+
+    These numbers give the percentage of pages that use a CSS property. For
+    example, if the 'border-radius' histogram bucket has a count of 250, and the
+    page count bucket (i.e. bucket number 1) has a count of 1000 - this means
+    that 1000 pages were recorded, and border-radius was used on 25% of those
+    pages.
+
+    Internally, each WebCore::Page has a WebCore::UseCounter instance, with
+    booleans recording use of each CSS property - one boolean per property. Upon
+    destruction of the WebCore::Page (e.g. by the user closing the tab), or a
+    page navigation happening, the histogram is updated. For each boolean that
+    is set to True, the corresponding histogram bucket for that CSS property is
+    incremented by 1. The page count bucket (i.e. bucket number 1) is always
+    incremented by 1 on each histogram update.
+  </details>
+</histogram>
+
+<histogram name="WebCore.Framebust" enum="FramebustPermissions">
+  <owner>japhet@chromium.org</owner>
+  <summary>
+    Records instances of child frames navigating the top frame. Includes whether
+    or not the navigation would have been permitted if not for our special case
+    for 'framebusting', the practice of ensuring a given document is never
+    displayed in a frame.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.ConsistencyError"
+    enum="IDBLevelDBBackingStoreInternalErrorType">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Methods that encountered consistency errors. Such errors probably point to a
+    bug in our code.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.InternalError"
+    enum="IDBLevelDBBackingStoreInternalErrorType">
+  <obsolete>
+    As of chrome 26, use {Consistency, Read, Write}Error instead.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Count of internal IndexedDB errors (data corruption, I/O errors, etc)
+    encountered.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus"
+    enum="IDBLevelDBBackingStoreOpenResult">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Count of the different success and failure modes when opening an IndexedDB
+    backing store - clean open, successful open with recovery, failed recovery,
+    etc. Includes all hosts.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.OpenStatus.Docs"
+    enum="IDBLevelDBBackingStoreOpenResult">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Count of the different success and failure modes when opening an IndexedDB
+    backing store - clean open, successful open with recovery, failed recovery,
+    etc. Only for docs.google.com.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.OverlyLargeOriginLength"
+    units="characters">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Length of leveldb directories that cause paths to not fit in the filesystem,
+    either because the individual component is too long or the overall path is
+    larger than MAX_PATH.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.ReadError"
+    enum="IDBLevelDBBackingStoreInternalErrorType">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Methods that encountered leveldb errors while trying to read from disk.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.BackingStore.WriteError"
+    enum="IDBLevelDBBackingStoreInternalErrorType">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Methods that encountered leveldb errors while trying to write to disk.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Context.ForcedCloseReason"
+    enum="IDBContextForcedCloseReason">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>The reason that a forced-close of a backing store occurred.</summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Database.OutstandingTransactionCount"
+    units="transactions">
+  <owner>jsbell@chromium.org</owner>
+  <summary>
+    Number of outstanding transactions (running, blocked) in database when a new
+    transaction is created.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.FrontEndAPICalls"
+    enum="IndexedDatabaseMethods">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Count total number of front end API calls of IndexedDB methods.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.CloseTime" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The time that it takes to close IndexedDB's LevelDB backing store.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.FreeDiskSpaceFailure"
+    enum="LevelDBErrorCount">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Count of how many times LevelDBDatabase got an error trying to check free
+    disk space.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.OpenFailureFreeDiskSpace" units="Kb">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Amount of free disk space on the partition/volume/etc where LevelDB failed
+    to open.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.OpenSuccessFreeDiskSpace" units="Kb">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Amount of free disk space on the partition/volume/etc where LevelDB was
+    successfully opened.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.OpenTime" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The time that it takes to open IndexedDB's LevelDB backing store.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.PutTime" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The time that it takes to write the data IndexedDB to the LevelDB backing
+    store for a put operation.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.Transaction.CommitTime" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The time that it takes to commit an IndexedDB transaction to its LevelDB
+    backing store.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDB.WriteTime" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The time that it takes to write data to an IndexedDB's LevelDB backing
+    store.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBOpenErrors" enum="LevelDBErrorTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Error classes returned by LevelDB when it failed to open a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.BFE"
+    enum="PlatformFileError">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    Errors (base::File::Error) encountered by a single LevelDBEnv method when
+    opening an IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Corruption"
+    enum="LevelDBCorruptionTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Types of corruption that LevelDB encounters when opening a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.EnvMethod"
+    enum="LevelDBIOErrorMethods">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    LevelDBEnv methods that generated IO errors when opening a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"
+    enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Errno errors encountered by a single LevelDBEnv method when opening an
+    IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"
+    enum="PlatformFileError">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBOpenErrors.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    PlatformFileErrors encountered by a single LevelDBEnv method when opening an
+    IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBReadErrors" enum="LevelDBErrorTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Error classes returned by LevelDB when it failed to read a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBReadErrors.BFE"
+    enum="PlatformFileError">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    Errors (base::File::Error) encountered by a single LevelDBEnv method when
+    reading from an IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Corruption"
+    enum="LevelDBCorruptionTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Types of corruption that LevelDB encounters when reading a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBReadErrors.EnvMethod"
+    enum="LevelDBIOErrorMethods">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    LevelDBEnv methods that generated IO errors when reading a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"
+    enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Errno errors encountered by a single LevelDBEnv method when reading an
+    IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"
+    enum="PlatformFileError">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBReadErrors.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    PlatformFileErrors encountered by a single LevelDBEnv method when opening an
+    IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBWriteErrors" enum="LevelDBErrorTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Error classes returned by LevelDB when it failed to write to a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE"
+    enum="PlatformFileError">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    Errors (base::File::Error) encountered by a single LevelDBEnv method when
+    writing to an IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Corruption"
+    enum="LevelDBCorruptionTypes">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Types of corruption returned by LevelDB when it failed to write to a
+    database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.EnvMethod"
+    enum="LevelDBIOErrorMethods">
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    LevelDBEnv methods that generated IO errors when writing to a database.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"
+    enum="OSAgnosticErrno">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    Errno errors encountered by a single LevelDBEnv method when writing to an
+    IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"
+    enum="PlatformFileError">
+  <obsolete>
+    Deprecated 2015-05. As of M43 use WebCore.IndexedDB.LevelDBWriteErrors.BFE.
+  </obsolete>
+  <owner>dgrogan@chromium.org</owner>
+  <summary>
+    PlatformFileErrors encountered by a single LevelDBEnv method when writing to
+    an IndexedDB instance.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.OpenTime.Blocked" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The delay between the receipt of the request to open an IndexedDB database
+    and the firing of the blocked event.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.OpenTime.Error" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The delay between the receipt of the request to open an IndexedDB database
+    and the firing of the error event.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.OpenTime.Success" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The delay between the receipt of the request to open an IndexedDB database
+    and the firing of the success event.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.OpenTime.UpgradeNeeded" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The delay between the receipt of the request to open an IndexedDB database
+    and the firing of the upgradeneeded event.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Schema.Index.KeyPathType"
+    enum="IDBKeyPathType">
+  <owner>jsbell@chromium.org</owner>
+  <summary>
+    Records the 'keyPath' type (none, string, or array) during IDBObjectStore's
+    createIndex operation. See http://www.w3.org/TR/IndexedDB/
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Schema.Index.MultiEntry" enum="Boolean">
+  <owner>jsbell@chromium.org</owner>
+  <summary>
+    Records the 'multiEntry' flag value during IDBObjectStore's createIndex
+    operation. See http://www.w3.org/TR/IndexedDB/
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Schema.Index.Unique" enum="Boolean">
+  <owner>jsbell@chromium.org</owner>
+  <summary>
+    Records the 'unique' flag value during IDBObjectStore's createIndex
+    operation. See http://www.w3.org/TR/IndexedDB/
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Schema.ObjectStore.AutoIncrement"
+    enum="Boolean">
+  <owner>jsbell@chromium.org</owner>
+  <summary>
+    Records the 'autoIncrement' flag value during IDBDatabase's
+    createObjectStore operation. See http://www.w3.org/TR/IndexedDB/
+  </summary>
+</histogram>
+
+<histogram name="WebCore.IndexedDB.Schema.ObjectStore.KeyPathType"
+    enum="IDBKeyPathType">
+  <owner>jsbell@chromium.org</owner>
+  <summary>
+    Records the 'keyPath' type (none, string, or array) during IDBDatabase's
+    createObjectStore operation. See http://www.w3.org/TR/IndexedDB/
+  </summary>
+</histogram>
+
+<histogram name="WebCore.PreloadDelayMs" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The delay between when the preload scanner discovers a resource on the
+    parser thread and when the preload request is issued on the main thread.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ResourceFetcher.ActionUponResourceRequest"
+    enum="ActionUponResourceRequest">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    The resulting action (e.g. load resource, use resource from in-memory
+    cache...) upon a resource request.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ResourceFetcher.HitCount">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Number of dead resources found in the memory cache over the lifetime of the
+    ResourceFetcher.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ResourceFetcher.LoadCount">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Number of resources that needed to be loaded by the ResourceFetcher over its
+    lifetime.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ResourceFetcher.ResourceHasClientUponCacheHit"
+    enum="ResourceHasClient">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Whether the resource in the cache is being used by at least one client (live
+    resource) or not (dead resource) upon a cache hit.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ResourceFetcher.ResourceTypeUponCacheHit"
+    enum="ResourceType">
+  <obsolete>
+    This metric has been not recorded at least since 2016/01. The displayed enum
+    labels might be unreliable because C++ enum values of blink::Resource::Type
+    have been changed over time.
+  </obsolete>
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    The type of the resource (e.g. image, script...) upon a cache hit.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ResourceFetcher.RevalidateCount">
+  <owner>clamy@chromium.org</owner>
+  <summary>
+    Number of dead resources that needed to be revalidated by the
+    ResourceFetcher over its lifetime.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackDeadline"
+    units="ms">
+  <owner>rmcilroy@chromium.org</owner>
+  <summary>
+    The amount of time allotted to a requestIdleCallback callback, i.e., the
+    difference between the time when it is called and when its deadline expires.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.ScriptedIdleTaskController.IdleCallbackOverrun"
+    units="ms">
+  <owner>rmcilroy@chromium.org</owner>
+  <summary>
+    The amount of time by which a requestIdleCallback callback overran its
+    deadline. Callbacks which don't overrun their deadline will report an
+    overrun of 0.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.Async.NotStreamingReason"
+    enum="NotStreamingReason">
+  <owner>marja@chromium.org</owner>
+  <summary>Reason for not streaming an async script.</summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.Async.StartedStreaming" enum="BooleanStreamed">
+  <owner>marja@chromium.org</owner>
+  <summary>Whether an async script was streamed or not.</summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.Deferred.NotStreamingReason"
+    enum="NotStreamingReason">
+  <owner>marja@chromium.org</owner>
+  <summary>Reason for not streaming a deferred script.</summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.Deferred.StartedStreaming"
+    enum="BooleanStreamed">
+  <owner>marja@chromium.org</owner>
+  <summary>Whether a deferred script was streamed or not.</summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.ParsingBlocking.AlreadyLoaded"
+    enum="BooleanLoaded">
+  <obsolete>
+    Deprecated as this data was needed for streaming investigations, no longer
+    needed.
+  </obsolete>
+  <owner>marja@chromium.org</owner>
+  <summary>
+    Whether a parsing blocking script was already preloaded from the net or the
+    cache by the time it was needed.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.ParsingBlocking.NotStreamingReason"
+    enum="NotStreamingReason">
+  <owner>marja@chromium.org</owner>
+  <summary>Reason for not streaming a parsing blocking script.</summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.ParsingBlocking.StartedStreaming"
+    enum="BooleanStreamed">
+  <owner>marja@chromium.org</owner>
+  <summary>Whether a parsing blocking script was streamed or not.</summary>
+</histogram>
+
+<histogram name="WebCore.Scripts.ParsingBlocking.TimeBetweenLoadedAndCompiled"
+    units="ms">
+  <obsolete>
+    Deprecated as this data was needed for streaming investigations, no longer
+    needed.
+  </obsolete>
+  <owner>marja@chromium.org</owner>
+  <summary>
+    Time between the events &quot;script is loaded&quot; and &quot;script is
+    compiled&quot; for parsing blocking scripts.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.UseCounter_TEST.CSSProperties"
+    enum="MappedCSSProperties">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    NOTE: This is in the process of replacing
+    WebCore.FeatureObserver.CSSProperties which fixes a number of issues.  See
+    https://crbug.com/597963.
+
+    Records usage of CSS properties used on a page, either statically or
+    dynamically, from the time the page is initialised to when it is closed or
+    navigated away from. Each property is counted at most once per page per
+    view.
+  </summary>
+  <details>
+    The first time a CSS property is parsed on a page, the histogram is updated
+    to increment the counter.  Each histogram bucket corresponds to a CSS
+    property (eg. width, border-radius). The exception is the 'Total pages
+    measured' bucket - this counts the number of pages that CSS properties were
+    counted on.  When a page navigation occurs the page count bucket is
+    incremented and tracking of the set of which properties have been seen is
+    reset.
+
+    These numbers give the percentage of pages that use a CSS property. For
+    example, if the 'border-radius' histogram bucket has a count of 250, and the
+    page count bucket (i.e. bucket number 1) has a count of 1000 - this means
+    that 1000 pages were recorded, and border-radius was used on 25% of those
+    pages.
+
+    TODO: The exact definition of &quot;page load&quot; is still
+    incorrect/fuzzy. https://crbug.com/236262
+  </details>
+</histogram>
+
+<histogram name="WebCore.UseCounter_TEST.Features" enum="FeatureObserver">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    NOTE: This is in the process of replacing WebCore.FeatureObserver which
+    fixes a number of issues.  See https://crbug.com/597963.
+
+    Count of how many page loads use various features. The PageVisits bucket is
+    incremented for each page load, and the other buckets incremented at most
+    once per PageVisit via the WebCore::UseCounter class.
+  </summary>
+  <details>
+    TODO: The exact definition of &quot;page load&quot; is still
+    incorrect/fuzzy. https://crbug.com/236262
+  </details>
+</histogram>
+
+<histogram name="WebCore.UseCounter_TEST.SVGImage.CSSProperties"
+    enum="MappedCSSProperties">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Like WebCore.UseCounter_TEST.CSSProperties but specifically for the case of
+    CSS properties used inside of an SVG image.
+  </summary>
+  <details>
+    The 'Total pages measured' bucket is incremented each time a new SVG image
+    is created.  Note that the same SVG image can be used across multiple tabs
+    in a single renderer but this counts as a single usage. See
+    http://crbug.com/236262.
+  </details>
+</histogram>
+
+<histogram name="WebCore.UseCounter_TEST.SVGImage.Features"
+    enum="FeatureObserver">
+  <owner>rbyers@chromium.org</owner>
+  <summary>
+    Like WebCore.UseCounter_TEST.Features except specifically for the case of
+    SVG Images.
+  </summary>
+  <details>
+    Count of how many SVG images use various features. The PageVisits bucket is
+    incremented each time a new SVG image is created.  Note that the same SVG
+    image can be used across multiple tabs in a single renderer but this counts
+    as a single usage.  See http://crbug.com/236262.
+  </details>
+</histogram>
+
+<histogram name="WebCore.V8DOMWindowShell.createContext.IsolatedWorld"
+    units="ms">
+  <obsolete>
+    Deprecated 05/2013, we no longer have the code that uses this metric.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Duration of time taken to create a V8 Context for an isolated world.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.V8DOMWindowShell.createContext.MainWorld" units="ms">
+  <obsolete>
+    Deprecated 05/2013, we no longer have the code that uses this metric.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Duration of time taken to create a V8 Context for the main world.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.BinaryTypeChangesAfterOpen">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Count the number of changes to WebSocket.binaryType after the connection
+    opened, per connection. Assignments that match the existing binaryType are
+    not counted. This is recorded after WebSocket close, whether explicit or due
+    to error or navigation. It is not recorded if the render process is
+    destroyed before the WebSocket is closed.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.HandshakeResult"
+    enum="WebSocketHandshakeResult">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Count the number of WebSocket handshake for each result. Use this histogram
+    as a baseline for investigating feature usage counters.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.MessageSize.Receive" units="bytes">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    The sizes of binary WebSocket messages received, broken down by type. One
+    entry per message. Clamped to 100 MB.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.MessageSize.Send" units="bytes">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    The sizes of binary WebSocket messages sent, broken down by type. One entry
+    per message. Clamped to 100 MB.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.PerMessageDeflateContextTakeOverMode"
+    enum="WebSocketPerMessageDeflateContextTakeOverMode">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Count the number of WebSockets that accepted permessage-deflate extension
+    for each context take over mode. Used by the old Blink-based WebSocket
+    implementation.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.ReceiveType" enum="WebSocketReceiveType">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Count the number of messages for each message type and set binary type.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.WebSocket.SendType" enum="WebSocketSendType">
+  <owner>yhirano@chromium.org</owner>
+  <owner>ricea@chromium.org</owner>
+  <owner>tyoshino@chromium.org</owner>
+  <summary>
+    Count the number of send() method calls on WebSockets for each argument
+    type.
+  </summary>
+</histogram>
+
+<histogram name="WebCore.XHR.send.ArrayBufferOrView"
+    enum="XMLHttpRequestSendArrayBufferOrView">
+  <obsolete>
+    Deprecated as of 7/2014. This histogram was used to determine when it would
+    be ok to remove the deprecated XMLHttpRequest.send(ArrayBuffer) overload.
+    The support for ArrayBuffer was un-deprecated in the WHATWG spec for XHR,
+    and subsequently un-deprecated in Blink.
+  </obsolete>
+  <owner>tyoshino@chromium.org</owner>
+  <owner>costan@gmail.com</owner>
+  <summary>
+    Count the number of XHR.send() calls for each argument type to see when we
+    can deprecate the ArrayBuffer type support.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.BlankTextShownTime" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    A histogram tracking the time we spent showing blank text because a web font
+    wasn't available by the time we needed it. Measured once per @font-face that
+    ended up showing blank text.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.CacheHit" enum="WebFontCacheHit">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Recorded upon web fonts load. Counts the number of times web font is loaded
+    from cache (disk cache or memory cache), fetched over network, or served
+    from data URL.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.CORSSuccess" enum="BooleanSuccess">
+  <owner>bashi@chromium.org</owner>
+  <owner>kenjibaheux@chromium.org</owner>
+  <summary>The success or failure of web fonts CORS-enabled fetching.</summary>
+</histogram>
+
+<histogram name="WebFont.DecodeSpeed" units="KB/s">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Uncompressed font image size divided by the duration of time OTS takes to
+    decode the font image, in kilobytes per second.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DiskCache.EntryAge.Evict" units="hours">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Recorded upon an eviction of a cache entry for a font in Google Fonts.
+    Records the age of the cache entry.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DiskCache.EntryAge.Hit" units="hours">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Recorded upon a cache hit for a font in Google Fonts. Records the age of the
+    cache entry.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DiskCache.ReuseCount.Evict">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    When a cache entry for a font in Google Fonts is evicted, records the reuse
+    count of the cache entry.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DiskCache.ReuseCount.Hit">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Recorded upon a cache hit for a font in Google Fonts. Records the reuse
+    count of the cache entry.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DiskCacheHit" enum="WebFontDiskCacheHit">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Whether the font was in the cache or not. &quot;Previously in the
+    cache&quot; means there was an evicted entry for the font in the cache.
+    Recorded upon a disk cache query for a font in Google Fonts.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DownloadTime.0.Under10KB" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of under
+    10KB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DownloadTime.1.10KBTo50KB" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of
+    10KB-50KB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DownloadTime.2.50KBTo100KB" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of
+    50KB-100KB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DownloadTime.3.100KBTo1MB" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of
+    100KB-1MB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DownloadTime.4.Over1MB" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of over
+    1MB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.DownloadTime.LoadError" units="ms">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time taken for a webfont download that failed. Includes aborted
+    requests.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.FontDisplayValue" enum="FontDisplayValue">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The value of font-display @font-face descriptor. Counted only when
+    explicitly specified in the @font-face rule.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.HadBlankText" enum="BooleanHadBlankText">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    This metrics is logged when a page that use web fonts is loaded. The value
+    is whether we had to wait on at least one web font and ended up showing
+    blank text, or not.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.InterventionResult" enum="WebFontInterventionResult">
+  <owner>toyoshim@chromium.org</owner>
+  <owner>kenjibaheux@chromium.org</owner>
+  <summary>
+    For each WebFont load attempt, records whether User Agent Intervention was
+    triggered, and whether the request (would have) timed out or not. The
+    intervention takes adaptive behaviors to handle loading timeouts to improve
+    user experiences on slow networks.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.InterventionResult.MissedCache"
+    enum="WebFontInterventionResult">
+  <owner>toyoshim@chromium.org</owner>
+  <owner>kenjibaheux@chromium.org</owner>
+  <summary>
+    Like InterventionResult, this records whether User Agent Intervention was
+    triggered, and whether the request (would have) timed out or not. But this
+    version records only when data actually comes from network, not from disk or
+    memory cache, and is not provided in a data URL format.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LayoutLatency" units="ms">
+  <obsolete>
+    Renamed to WebFont.StyleRecalcToDownloadLatency for clarity.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time from when the webfont was referenced by a calculated style for the
+    first time to the start of the font download.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LoadTime.0.Under10KB" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.0.Under10KB.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of under
+    10KB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LoadTime.1.10KBTo50KB" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.1.10KBTo50KB.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of
+    10KB-50KB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LoadTime.2.50KBTo100KB" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.2.50KBTo100KB.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of
+    50KB-100KB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LoadTime.3.100KBTo1MB" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.3.100KBTo1MB.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of
+    100KB-1MB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LoadTime.4.Over1MB" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.4.Over1MB.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time it takes for a webfont download to finish, for webfonts of over
+    1MB.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LoadTime.LoadError" units="ms">
+  <obsolete>
+    Deprecated as of 8/2013, replaced by WebFont.DownloadTime.LoadError.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time taken for a webfont download that failed. Includes aborted
+    requests.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.LocalFontUsed" enum="BooleanUsage">
+  <owner>hajimehoshi@chromium.org</owner>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>kouhei@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    Whether a locallly installed font is actually used when @font-face had local
+    sources.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.PackageFormat" enum="WebFontPackageFormat">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The packaging format of the font file (e.g. SFNT, WOFF ...) upon a webfont
+    load.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.Resource.StyleRecalcToDownloadLatency" units="ms">
+  <obsolete>
+    Deprecated 11/2013. No longer tracked.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time from when the webfont was referenced by a calculated style for the
+    first time to the start of the font download. Recorded at most once for each
+    FontResource object (not recorded if the font is retrieved from the memory
+    cache).
+  </summary>
+</histogram>
+
+<histogram name="WebFont.Resource.UsageType" enum="WebFontUsageType">
+  <obsolete>
+    Deprecated 11/2013. No longer tracked.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    For each webfont, this records (a) if the font was 'styled', i.e. referenced
+    by a calculated style for a RenderText before the font data was used, and
+    (b) if the font was actually used or not, i.e. the renderer requested the
+    font data or not. (A Font can be used without being styled, for example when
+    drawn by a Canvas 2D Context.) This is recorded upon a download request of a
+    webfont, or destruction of a FontResource object. Recorded at most once for
+    each FontResource object in the renderer's memory cahce.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.StyleRecalcToDownloadLatency" units="ms">
+  <obsolete>
+    Deprecated as of 9/2013, replaced by
+    WebFont.Resource.StyleRecalcToDownloadLatency.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The time from when the webfont was referenced by a calculated style for the
+    first time to the start of the font download.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.UsageType" enum="WebFontUsageType">
+  <obsolete>
+    Deprecated as of 9/2013, replaced by WebFont.Resource.UsageType.
+  </obsolete>
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    For each webfont, this records (a) if the font was 'styled', i.e. referenced
+    by a calculated style for a RenderText before the font data was used, and
+    (b) if the font was actually used or not, i.e. the renderer requested the
+    font data or not. (A Font can be used without being styled, for example when
+    drawn by a Canvas 2D Context.) This is recorded upon a download request of a
+    webfont, or destruction of a CSSFontFaceSource object. Recorded at most once
+    for each url() source of @font-face CSS rule.
+  </summary>
+</histogram>
+
+<histogram name="WebFont.WebFontsInPage">
+  <owner>kenjibaheux@chromium.org</owner>
+  <owner>ksakamoto@chromium.org</owner>
+  <summary>
+    The number of webfonts used in a page. This is recorded when the first
+    layout is done, and so will not count webfonts dynamically loaded by
+    scripts.
+  </summary>
+</histogram>
+
+<histogram name="WebHistory.LocalResultMissingOnServer" units="%">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Percentage of results that are present locally but are not returned by the
+    web history API call. Recorded every time a signed-in user visits the
+    chrome://history page and the results from the web history are received.
+  </summary>
+</histogram>
+
+<histogram name="WebHistory.OAuthTokenCompletion" enum="BooleanSuccess">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether getting the OAuth token was successful for a web history query. On
+    visits to the chrome://history page this token is obtained and then used to
+    get the user's synced web history.
+  </summary>
+</histogram>
+
+<histogram name="WebHistory.OAuthTokenResponseCode" units="code">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    HTTP Response code returned by the server when trying to fetch the OAuth
+    token for a web history query.
+  </summary>
+</histogram>
+
+<histogram name="WebHistory.QueryCompletion" enum="WebHistoryStatus">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Whether the web history API call was successful. Every time a signed-in user
+    visits the chrome://history page this query is executed to get the user's
+    synced web history. If successful, the local and remote results are merged
+    and shown in the history page.
+  </summary>
+</histogram>
+
+<histogram name="WebHistory.ResponseTime" units="ms">
+  <owner>zea@chromium.org</owner>
+  <summary>
+    Time it took for the web history to reply. Recorded when the web history API
+    call triggered by visiting chrome://history receives the data, measuring how
+    much time it took for the server to reply.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AecDelayBasedQuality" enum="DelayBasedEchoQuality">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    Captures if the estimated delay between rendered and captured audio is out
+    of bounds which can cause the Echo Cancellation to fail. This is logged
+    roughly once every 5 seconds. The values are logged in four buckets
+    reflecting how well the Echo Cancellation likely performs based on the
+    estimated delay.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AecFilterHasDivergence" units="%">
+  <owner>grunell@chromium.org</owner>
+  <owner>minyue@chromium.org</owner>
+  <summary>
+    The percentage of measurement periods during a capture stream's lifetime
+    when the echo canceler's filter is considered to have diverged at least
+    once. A diverged filter could mean that there was echo och ducking
+    experienced. The measurement period size is fixed and in the order of one
+    second. The first measurement period is larger, typically 2-3 seconds.
+    Capture streams with shorter lifetimes (i.e. no data available) are not
+    recorded here.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard">
+  <obsolete>
+    Deprecated as of 12/2014, replaced by
+    WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2.
+  </obsolete>
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    The maximum consecutive discarded bytes caused by not enough buffer
+    available in WebRTC's socket implementation.  This happens when WebRTC
+    IpcPacketSocket's throttling mechanism kicks in.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ApplicationMaxConsecutiveBytesDiscard.v2">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    The maximum consecutive discarded bytes caused by not enough buffer
+    available in WebRTC's socket implementation.  This happens when WebRTC
+    IpcPacketSocket's throttling mechanism kicks in. The maximum bucket is
+    expanded from previous version to provide more insight when upper layer
+    feeds a lot of packets.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ApplicationPercentPacketsDiscarded" units="%">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    The percentage of packets discarded by WebRTC's socket layer due to
+    EWOULDBLOCKs when WebRTC IpcPacketSocket's throttling mechanism kicks in.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.AecDelayAdjustmentMsAgnosticValue" units="ms">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    The AEC in WebRTC will sometimes realign the far- and near-end signal
+    buffers to keep in sync with delay changes in the echo path. This metric
+    logs each such realignment, storing the delay change in ms, when the change
+    is triggered by a shift in the signal based delay estimation (a.k.a
+    delay-agnostic).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.AecDelayAdjustmentMsSystemValue" units="ms">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    The AEC in WebRTC will sometimes realign the far- and near-end signal
+    buffers to keep in sync with delay changes in the echo path. This metric
+    logs each such realignment, storing the delay change in ms, when the change
+    is triggered by a shift in system reported delay.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.AecSystemDelayJump" units="ms">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    The AEC in WebRTC keeps a buffer to mimic the audio buffers in the lower
+    layers. This histogram logs a sudden positive jump in buffer size. Since we
+    detect jumps in the capture thread, only positive values are feasible. Note
+    that the difference in milliseconds is logged and not the actual AEC system
+    delay value. Sampled every time the AEC system delay changes more than 50
+    milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.AverageExcessBufferDelayMs" units="ms">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    Measures the average waiting time in the buffer for each packet. The waiting
+    time is the time elapsed from the packet arrives until it is decoded. The
+    metric is calculated as the average over one minute, and is logged at the
+    end of each such interval. A well tuned target buffer level should lead to a
+    low value.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.DelayedPacketOutageEventMs" units="ms">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    Measures the duration of each packet loss concealment (a.k.a. expand) event
+    that is not followed by a merge operation. The outage is measured in
+    milliseconds, with a range between 0 and 2000 ms. This gives an indication
+    of how well the jitter buffer's level adaptation is working. If the chosen
+    target level is too low, this value will increase.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.DelayedPacketOutageEventsPerMinute"
+    units="events/minute">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    Counts the number of delayed packet outage events per minute. The range is
+    between 0 and 100 (corresponds to more 1.6 events per second). See
+    WebRTC.Audio.DelayedPacketOutageEventMs for the definition of a delayed
+    packet outage event, and the interpretation of such events.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.Encoder.CodecType" enum="WebRtcAudioCodecs">
+  <owner>aleloi@chromium.org</owner>
+  <summary>
+    Histogram of audio codec usage. Every sample corresponds to 5 seconds of
+    encoding with that codec.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.NumOfAecSystemDelayJumps" units="jumps">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    Number of triggered WebRTC.Audio.AecSystemDelayJump during a call. This is
+    recorded when a WebRTC based call has ended. AecSystemDelayJump can be
+    triggered when, for example, the capture thread is stalled, which can harm
+    the AEC. NumOfAecSystemDelayJumps shows how often this occurs in general as
+    well as during a call.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.NumOfPlatformReportedStreamDelayJumps"
+    units="jumps">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    Number of triggered WebRTC.Audio.PlatformReportedStreamDelayJump during a
+    call. This is recorded when a WebRTC based call has ended.
+    PlatformReportedStreamDelayJump can be triggered when, for example, the
+    capture thread is stalled, which can harm the AEC.
+    NumOfPlatformReportedStreamDelayJumps shows how often this occurs in general
+    as well as during a call.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.PlatformReportedStreamDelayJump" units="ms">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    The difference in stream delay reported to WebRTC by Chrome. Since we detect
+    jumps in the capture thread, only positive values are feasible. Note that
+    the difference in milliseconds is logged and not the actual stream delay
+    value. Sampled every time the stream delay changes more than 50
+    milliseconds.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.ResidualEchoDetector.EchoLikelihood" units="%">
+  <owner>hlundin@chromium.org</owner>
+  <owner>ivoc@chromium.org</owner>
+  <summary>
+    The estimated likelihood percentage of echo as detected by the residual echo
+    detector. The residual echo detector can be used to detect cases where the
+    AEC (hardware or software) is not functioning properly. The detector can be
+    non-causal and operates on larger timescales with more delay than the
+    regular AEC.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Audio.TargetBitrateInKbps" units="kbps">
+  <owner>hlundin@chromium.org</owner>
+  <summary>
+    The target bitrate in kbps that the audio codec should try to produce on
+    average. Sampled every time the rate is updated.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AudioCaptureTime" units="ms">
+  <obsolete>
+    Removed from code 2014/2/25.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Duration in milliseconds of WebRTC audio capture session.</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioInputChannelLayout" enum="ChannelLayout">
+  <owner>henrika@chromium.org</owner>
+  <summary>Audio input channel layout in WebRTC.</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioInputFramesPerBuffer" enum="AudioFramesPerBuffer">
+  <obsolete>
+    No longer exists in the code as of 2014/2/25.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Size of WebRTC audio input buffers (in audio frames).</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioInputFramesPerBufferUnexpected"
+    units="audio frames">
+  <obsolete>
+    No longer exists in the code as of 2014/2/25.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Size of WebRTC audio input buffers (atypical values, in audio frames).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AudioInputSampleRate" enum="AudioSampleRate">
+  <owner>henrika@chromium.org</owner>
+  <summary>Audio input sample rate for WebRTC (in Hz).</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioInputSampleRateUnexpected" units="Hz">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Audio input sample rate for WebRTC (atypical values, in Hz).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AudioOutputChannelLayout" enum="ChannelLayout">
+  <obsolete>
+    Removed from code on 2014/2/25.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Audio output channel layout in WebRTC.</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioOutputFramesPerBuffer" enum="AudioFramesPerBuffer">
+  <obsolete>
+    Removed from code Sep 2014.
+  </obsolete>
+  <owner>henrika@chromium.org</owner>
+  <summary>Size of WebRTC audio output buffers (in audio frames).</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioOutputFramesPerBufferUnexpected"
+    units="audio frames">
+  <obsolete>
+    Removed from code Sep 2014.
+  </obsolete>
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Size of WebRTC audio output buffers (atypical values, in audio frames).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AudioOutputSampleRate" enum="AudioSampleRate">
+  <owner>henrika@chromium.org</owner>
+  <summary>Audio output sample rate for WebRTC (in Hz).</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioOutputSampleRateUnexpected" units="Hz">
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Audio output sample rate for WebRTC (atypical values, in Hz).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.AudioRenderTime" units="ms">
+  <obsolete>
+    Removed from code 2014/2/25.
+  </obsolete>
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>Duration in milliseconds of WebRTC audio render session.</summary>
+</histogram>
+
+<histogram name="WebRTC.AudioRenderTimes" units="ms">
+  <obsolete>
+    Deprecated as of Aug 2016, replaced by
+    Media.Audio.Render.GetSourceDataTime.WebRTC.
+  </obsolete>
+  <owner>henrika@chromium.org</owner>
+  <summary>
+    Measures the time spent in WebRtcAudioRenderer::SourceCallback. Sampled 10
+    times per second.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.InitialBandwidthEstimate" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>The bandwidth estimate 2 seconds into a WebRTC call.</summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.InitiallyLostPackets" units="packets">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The number of video packets lost durig the first 2 seconds in a WebRTC call.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.InitialRtt" units="ms">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The round-trip time as measured 2 seconds into a WebRTC call.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.InitialVsConvergedDiff" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The difference between the bandwidth estimate at 2 seconds and 20 seconds
+    into a WebRTC call, with a min at 0, which is supposed to capture the how
+    much the initial bandwidth estimate overshot the actual bandwidth available.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.RampUpTimeTo1000kbpsInMs" units="ms">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The time it takes the estimated bandwidth to reach 1000 kbps from the first
+    RTCP packet received. Used to measure the bandwidth ramp-up time.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.RampUpTimeTo2000kbpsInMs" units="ms">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The time it takes the estimated bandwidth to reach 2000 kbps from the first
+    RTCP packet received. Used to measure the bandwidth ramp-up time.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.RampUpTimeTo500kbpsInMs" units="ms">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The time it takes the estimated bandwidth to reach 500 kbps from the first
+    RTCP packet received. Used to measure the bandwidth ramp-up time.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.BWE.Types" enum="WebRtcBweType">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The bandwidth estimation used in WebRTC calls. Records whether the BWE is
+    running on the sender or the receiver and what BWE related RTP header
+    extensions are in use.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.AudioBitrateReceivedInKbps" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    Average audio bitrate received during a call, counted from first packet
+    received until Call instance is destroyed. Only mesured for calls that are
+    at least 10 seconds long.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.BitrateReceivedInKbps" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    Average total bitrate received during a call (audio + video + RTCP), counted
+    from first packet received until Call instance is destroyed. Only mesured
+    for calls that are at least 10 seconds long.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.EstimatedSendBitrateInKbps" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    Average estimated send bitrate during a call, counted from first packet sent
+    until Call instance is destroyed. Only mesured for calls that are at least
+    10 seconds long.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.LifetimeInSeconds" units="seconds">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The lifetime of a call. Recorded when a Call instance is destroyed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.PacerBitrateInKbps" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    Average pacer bitrate during a call, counted from first packet sent until
+    Call instance is destroyed. Only mesured for calls that are at least 10
+    seconds long.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.RtcpBitrateReceivedInBps" units="bits/s">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    Average RTCP bitrate received during a call, counted from first packet
+    received until Call instance is destroyed. Only mesured for calls that are
+    at least 10 seconds long.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Call.VideoBitrateReceivedInKbps" units="kbps">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    Average video bitrate received during a call, counted from first packet
+    received until Call instance is destroyed. Only mesured for calls that are
+    at least 10 seconds long.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.DataChannelCounters" enum="DataChannelCounters">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Counters on creation, opening, and a few main attributes of data channels.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.DataChannelMaxRetransmits">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    The maximum number of retransmissions that are attempted in unreliable mode.
+    It is set to the value used in the configuration when a RTCDataChannel is
+    created.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.DataChannelMaxRetransmitTime" units="ms">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    The length of the time window during which transmissions and retransmissions
+    may occur in unreliable mode. It is set to the value used in the
+    configuration when a RTCDataChannel is created.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.DesktopCaptureCounters" enum="DesktopCaptureCounters">
+  <owner>jiayl@chromium.org</owner>
+  <summary>
+    Counters on creation of DesktopCaptureDevice and the first capture call.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ICE.TcpSocketWriteErrorCode" enum="SocketErrorCode">
+  <owner>zhihuang@chromium.org</owner>
+  <summary>
+    Counters on different types of TCP socket error code. Collected when we hit
+    the error code when writing.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ICE.UdpSocketWriteErrorCode" enum="SocketErrorCode">
+  <owner>zhihuang@chromium.org</owner>
+  <summary>
+    Counters on different types of UDP socket error code. Collected when we hit
+    the error code when writing.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.NAT.Metrics" enum="NatTypeCounters">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Counters on various types of NAT observed. This is logged once per session.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.NumDataChannelsPerPeerConnection">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Number of data channels created per PeerConnection. Sample added to the
+    histogram when the PeerConnection is destroyed. Note that this is done
+    purely on the renderer side, so no sample will be generated when the
+    renderer process is destroyed (as in the fast shutdown path for the
+    renderer) before the PeerConnection is destroyed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.CandidatePairType"
+    enum="IceCandidatePairTypes">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Counters of various ICE Endpoint types. These values are logged for the
+    first selected candidate pair of a PeerConnection.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.ConnectionState"
+    enum="IceConnectionStates">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Counters of ICE Connection states. These values are logged when the
+    PeerConnection gets into that state for the first time or after the ICE
+    restart.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.DtlsHandshakeError"
+    enum="DtlsHandshakeError">
+  <owner>zhihuang@chromium.org</owner>
+  <summary>
+    Records the error whenever the Dtls handshake fails. There are only two
+    types of errors, incompatitable cipher suite and unknown error, for now.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IceRegatheringReason"
+    enum="IceRegatheringReason">
+  <owner>honghaiz@chromium.org</owner>
+  <summary>Records the reasons for ICE re-gathering.</summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IceRestartState" enum="IceRestartState">
+  <owner>honghaiz@chromium.org</owner>
+  <summary>
+    Records the transport channel states when ICE restart happens.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IPMetrics" enum="PeerConnectionCounters">
+  <owner>mallinath@chromium.org</owner>
+  <summary>
+    Counters on IPv4 and IPv6 usage in PeerConnection. These values are logged
+    once per PeerConnection.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IPPermissionStatus"
+    enum="IPPermissionStatus">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Whether the permission to collect the local IP addresses in WebRTC has been
+    requested and/or granted. This is collected the first time when networks
+    updated event is reported or if never reported, during the destruction phase
+    of a call.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IPv4Interfaces">
+  <owner>mallinath@chromium.org</owner>
+  <summary>
+    Number of IPv4 network interfaces discovered in a PeerConnection Session.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IPv4LocalCandidates">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Number of IPv4 local Candidates gathered in a PeerConnection Session once
+    the ICE address gathering process reaches the Completed status. To avoid
+    miscounting, this only includes the first m line's first component.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IPv6Interfaces">
+  <owner>mallinath@chromium.org</owner>
+  <summary>
+    Number of IPv6 network interfaces discovered in a PeerConnection Session.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.IPv6LocalCandidates">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Number of IPv6 local Candidates gathered in a PeerConnection Session once
+    the ICE address gathering process reaches the Completed status. To avoid
+    miscounting, this only includes the first m line's first component.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.RtcpMux" enum="PeerConnectionRtcpMux">
+  <owner>pthatcher@chromium.org</owner>
+  <summary>
+    Whether RTCP-mux is used for the PeerConnection (both the local and remote
+    description enable RTCP-mux).  Recorded after SetLocalDescription and
+    SetRemoteDescription are called, once per PeerConnection.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SelectedRtcpMuxPolicy"
+    enum="PeerConnectionRtcpMuxPolicy">
+  <owner>zhihuang@chromium.org</owner>
+  <summary>
+    Whether the application specified a value for RTCP-mux policy, and if so,
+    which value, &quot;Require&quot; or &quot;Negotiate&quot;. Recorded after
+    parsing the configuration when creating the RTCPeerConnection.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SrtpCryptoSuite"
+    enum="DTLS_SRTPCryptoSuite">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Counters on the type of SRTP crypto suites used by WebRTC. This is collected
+    whenever the transport signals the OnCompleted event.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.SslCipherSuite" enum="SSLCipherSuite">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Counters on the type of SSL cipher suites used by WebRTC. This is collected
+    whenever the transport signals the OnCompleted event.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.TimeToConnect" units="ms">
+  <owner>mallinath@chromium.org</owner>
+  <summary>Time to setup a peer to peer call with PeerConnection.</summary>
+</histogram>
+
+<histogram name="WebRTC.PeerConnection.TimeToNetworkUpdated" units="ms">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    Time to receive the first SignalNetworksChanged from the request to start
+    updating network in PeerConnection.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ReceivedAudioTrackDuration" units="ms">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Durations of audio tracks received over a PeerConnection. The stopwatch
+    starts when the track first becomes connected, and ends when it is
+    disconnected or very soon thereafter.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ReceivedVideoTrackDuration" units="ms">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Durations of video tracks received over a PeerConnection. The stopwatch
+    starts when the track first becomes connected, and ends when it is
+    disconnected or very soon thereafter.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ReliableDataChannelMessageSize" units="bytes">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Sizes of messages sent over reliable data channels. The size of an
+    individual message is added to the histogram as a sample immediately when a
+    message is sent.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.ScreenCaptureTime" units="ms">
+  <owner>jiayl@chromium.org</owner>
+  <summary>Time for capturing one frame in screen capturing.</summary>
+</histogram>
+
+<histogram name="WebRTC.SentAudioTrackDuration" units="ms">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Durations of audio tracks sent over a PeerConnection. The stopwatch starts
+    when the track first becomes connected, and ends when it is disconnected or
+    very soon thereafter.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.SentVideoTrackDuration" units="ms">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Durations of video tracks sent over a PeerConnection. The stopwatch starts
+    when the track first becomes connected, and ends when it is disconnected or
+    very soon thereafter.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Stun.BatchSuccessPercent" units="%">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    For clients using a shared source port per STUN binding request toward the
+    specified servers, success rate for requests which received a response with
+    various intervals between requests. Only the first instance of renderers
+    will conduct the trial and log this result. The STUN binding requests are
+    grouped into multiple batches and the success rate is calculated for an
+    individual batch.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Stun.ResponseLatency" units="ms">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    For clients using a shared source port per STUN binding request, average RTT
+    for requests which received a response with various intervals between
+    requests. Only the first instance of renderers will conduct the trial and
+    log this result.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Stun.SuccessPercent" units="%">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    For clients using a shared source port per STUN binding request, success
+    rate for requests which received a response with various intervals between
+    requests. Only the first instance of renderers will conduct the trial and
+    log this result.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    The maximum of consecutive delayed bytes caused by EWOULDBLOCKs from system.
+    This happens when system can't send any packet synchronously at that moment.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.SystemPercentPacketsDelayed" units="%">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    The percentage of packets delayed due to ERR_IO_PENDING from system in a
+    WebRTC socket. This happens when system can't send any packet synchronously
+    at that moment.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.SystemSendPacketDuration" units="ms">
+  <owner>guoweis@chromium.org</owner>
+  <summary>
+    The duration that it takes to send out a packet in system layer. This
+    includes both the queuing time (under the condition when socket returns
+    EWOULDBLOCK from system) as well as the time system takes to finish the
+    asynchronous send. For UDP, it's the time from P2PSocketHostUdp::Send to
+    P2PSocketHostUdp::HandleSendResult. Tcp part is to be implemented.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.UnreliableDataChannelMessageSize" units="bytes">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Sizes of messages sent over unreliable data channels. The size of an
+    individual message is added to the histogram as a sample immediately when a
+    message is sent.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.UserMediaRequest.NoResultState"
+    enum="MediaStreamRequestState">
+  <owner>andresp@chromium.org</owner>
+  <summary>
+    The state of a UserMediaRequest when it gets destroyed before having a
+    result.
+
+    Note: &quot;Explicitly Cancelled&quot; means
+    MediaStreamImpl::cancelUserMediaRequest was called and not necessarily that
+    the user cancelled. Those are likely tracked as UserMediaRequest with a
+    result of permission denied.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.UserMediaRequest.Result"
+    enum="MediaStreamRequestResult">
+  <owner>andresp@chromium.org</owner>
+  <summary>
+    Counters for UserMediaRequests results such as failure reasons.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.AverageRoundTripTimeInMilliseconds" units="ms">
+  <owner>holmer@chromium.org</owner>
+  <summary>
+    The average round-trip time of a WebRTC call in milliseconds. Recorded when
+    a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.AVSyncOffsetInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The absolute value of the sync offset between a rendered video frame and the
+    latest played audio frame is measured per video frame. The average offset
+    per received video stream is recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.BandwidthLimitedResolutionInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of sent frames that are limited in resolution due to bandwidth
+    for a sent video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.BandwidthLimitedResolutionsDisabled"
+    units="disabled resolutions">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    For frames that are limited in resolution due to bandwidth, the average
+    number of disabled resolutions is recorded for a sent video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.BitrateReceivedInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received bits per second for a received video stream. Recorded
+    when a stream is removed. The total number of bytes is divided by the time
+    the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.BitrateSentInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent bits per second for a sent video stream. Recorded when a
+    stream is removed. The total number of bytes is divided by the time the
+    video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.CompleteFramesReceivedPerSecond" units="fps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of complete frames received per second for a received video
+    stream. Recorded when a stream is removed. The total number of frames is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.CpuLimitedResolutionInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of frames that are limited in resolution due to cpu for a sent
+    video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.CurrentDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Average current delay for a received video stream. This is the actual delay
+    imposed on frames (where the goal is to reach the target delay (see
+    WebRTC.Video.TargetDelayInMs)). Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Decoded.Vp8.Qp" units="qp value">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average QP (quantizer value) per frame for a received VP8 video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.DecodedFramesPerSecond" units="fps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of decoded frames per second for a received video stream.
+    Recorded when a stream is removed. The total number of frames is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.DecodeTimeInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average decode time per frame for a received video stream. Recorded when
+    a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.DelayedFramesToRenderer" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of delayed frames to renderer for a received video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.DelayedFramesToRenderer_AvgDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average delay of delayed frames to renderer for a received video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.DiscardedPacketsInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of discarded packets by the jitter buffer due to arriving too
+    late for a received video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.DuplicatedPacketsInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of duplicated packets in the jitter buffer for a received video
+    stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Encoded.Qp" units="qp value">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average QP (quantizer value) per frame for a sent video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Encoder.CodecType" enum="WebRtcVideoCodecs">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Configured video codec for a sent video stream. Recorded when a
+    VideoSendStream is destroyed (for streams whose lifetime is longer than 10
+    seconds).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.EncodeTimeInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average encode time per frame for a sent video stream. Recorded when a
+    stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.EndToEndDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average end-to-end delay per frame for a received video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.FecBitrateReceivedInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received FEC bits per second for a received video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.FecBitrateSentInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent FEC bits per second for a sent video stream. Recorded
+    when a stream is removed. The total number of bytes is divided by the time
+    the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.FirPacketsReceivedPerMinute"
+    units="packets/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received RTCP FIR packets per minute for a sent video stream.
+    Recorded when a stream is removed. The total number of packets is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.FirPacketsSentPerMinute" units="packets/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent RTCP FIR packets per minute for a received video stream.
+    Recorded when a stream is removed. The total number of packets is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.H264DecoderImpl.Event"
+    enum="WebRtcH264DecoderImplEvent">
+  <owner>hbos@chromium.org</owner>
+  <summary>
+    The number of |H264DecoderImpl| events, such as an initialization or
+    decoding error, that have occurred. At most one Init and one Error is
+    reported per |H264DecoderImpl| instance. This is to avoid the same event
+    from being reported multiple times (e.g. if there is an error you might
+    re-initialize or get a decode error every frame which would otherwise
+    pollute the data).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.H264EncoderImpl.Event"
+    enum="WebRtcH264EncoderImplEvent">
+  <owner>hbos@chromium.org</owner>
+  <summary>
+    The number of |H264EncoderImpl| events, such as an initialization or
+    encoding error, that have occurred. At most one Init and one Error is
+    reported per |H264EncoderImpl| instance. This is to avoid the same event
+    from being reported multiple times (e.g. if there is an error you might
+    re-initialize or get an encode error every frame which would otherwise
+    pollute the data).
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.InputFramesPerSecond" units="fps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of incoming frames per second for a sent video stream. Recorded
+    when a stream is removed. The total number of frames is divided by the time
+    the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.InputHeightInPixels" units="pixels">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average input height per frame (for incoming frames to video engine) for
+    a sent video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.InputWidthInPixels" units="pixels">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average input width per frame (for incoming frames to video engine) for
+    a sent video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.JitterBufferDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Average jitter buffer delay for a received video stream. Recorded when a
+    stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.KeyFramesReceivedInPermille" units="permille">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Permille of frames that are key frames for a received video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.KeyFramesSentInPermille" units="permille">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Permille of frames that are key frames for a sent video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.MediaBitrateReceivedInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received media payload bits per second for a received video
+    stream. Recorded when a stream is removed. The total number of bytes is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.MediaBitrateSentInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent media payload bits per second for a sent video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.NackPacketsReceivedPerMinute"
+    units="packets/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received RTCP NACK packets per minute for a sent video stream.
+    Recorded when a stream is removed. The total number of packets is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.NackPacketsSentPerMinute" units="packets/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent RTCP NACK packets per minute for a received video stream.
+    Recorded when a stream is removed. The total number of packets is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.OnewayDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Average delay (network delay (rtt/2) + jitter delay + decode time + render
+    delay) for a received video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.PaddingBitrateReceivedInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received padding bits per second for a received video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.PaddingBitrateSentInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent padding bits per second for a sent video stream. Recorded
+    when a stream is removed. The total number of bytes is divided by the time
+    the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.PliPacketsReceivedPerMinute"
+    units="packets/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received RTCP PLI packets per minute for a sent video stream.
+    Recorded when a stream is removed. The total number of packets is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.PliPacketsSentPerMinute" units="packets/minute">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent RTCP PLI packets per minute for a received video stream.
+    Recorded when a stream is removed. The total number of packets is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.QualityLimitedResolutionDownscales"
+    units="downscales">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    For frames that are downscaled in resolution due to quality, the average
+    number of downscales is recorded for a sent video stream. Recorded when a
+    stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.QualityLimitedResolutionInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of sent frames that are downscaled in resolution due to quality
+    for a sent video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.ReceivedFecPacketsInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of received FEC packets for a received video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.ReceivedHeightInPixels" units="pixels">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average received height per frame for a received video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.ReceivedPacketsLostInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of received packets lost for a received video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.ReceivedWidthInPixels" units="pixels">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average received width per frame for a received video stream. Recorded
+    when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.ReceiveStreamLifetimeInSeconds" units="seconds">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The lifetime of a video receive stream. Recorded when a VideoReceiveStream
+    instance is destroyed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RecoveredMediaPacketsInPercentOfFec" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of recovered media packets from FEC packets for a received video
+    stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RenderFramesPerSecond" units="fps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent frames to the renderer per second for a received video
+    stream. Recorded when a stream is removed. The total number of frames is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RenderSqrtPixelsPerSecond" units="pps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of pixels (sqrt(width*height)) of sent frames to the renderer per
+    second for a received video stream. Recorded when a stream is removed. The
+    total number of pixels is divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RetransmittedBitrateReceivedInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of retransmitted bits per second for a received video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RetransmittedBitrateSentInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of retransmitted bits per second for a sent video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RtpToNtpFreqOffsetInKhz" units="kHz">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The absolute value of the difference between the estimated frequency during
+    RTP timestamp to NTP time conversion and the actual value (i.e. 90 kHz) is
+    measured per received video frame. The max offset during 40 second intervals
+    is stored. The average of these stored offsets per received video stream is
+    recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RtxBitrateReceivedInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of received bits over RTX per second for a received video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.RtxBitrateSentInKbps" units="kbps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent bits over RTX per second for a sent video stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionInPercent"
+    units="%">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Percentage of sent frames that are limited in resolution due to bandwidth
+    for a sent (screen content) video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.BandwidthLimitedResolutionsDisabled"
+    units="disabled resolutions">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    For frames that are limited in resolution due to bandwidth, the average
+    number of disabled resolutions is recorded for a sent (screen content) video
+    stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.BitrateSentInKbps" units="kbps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of sent bits per second for a sent screenshare stream. Recorded
+    when a stream is removed. The total number of bytes is divided by the time
+    the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.EncodeTimeInMs" units="ms">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average encode time per frame for a sent (screen content) video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.FecBitrateSentInKbps" units="kbps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of sent FEC bits per second for a sent screenshare stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.FirPacketsReceivedPerMinute"
+    units="packets/minute">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of received RTCP FIR packets per minute for a sent screenshare
+    stream. Recorded when a stream is removed. The total number of packets is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.FramesPerDrop"
+    units="sent/dropped ratio">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Ratio of sent frames to dropped frames at the encoder. The value is reported
+    when a stream is removed and is calculated as the total number frames sent
+    divided by the number of dropped frames.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.FramesPerOvershoot"
+    units="sent/overshoot ratio">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Ratio of sent frames to number of re-encoded frames (due to target bitrate
+    overshoot). The value is reported when a stream is removed and is calculated
+    as the total number frames sent divided by the number of re-encoded frames.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.InputFramesPerSecond" units="fps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of incoming frames per second for a sent (screen content) video
+    stream. Recorded when a stream is removed. The total number of frames is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.InputHeightInPixels" units="pixels">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average input height per frame (for incoming frames to video engine) for
+    a sent (screen content) video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.InputWidthInPixels" units="pixels">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average input width per frame (for incoming frames to video engine) for
+    a sent (screen content) video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.KeyFramesSentInPermille"
+    units="permille">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Permille of frames that are key frames for a sent (screen content) video
+    stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.Layer0">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Stats for the lower layer (TL0) of a screenshare stream in conference mode.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.Layer1">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Stats for the higher layer (TL1) of a screenshare stream in conference mode.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.MediaBitrateSentInKbps" units="kbps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of sent media payload bits per second for a sent screenshare
+    stream. Recorded when a stream is removed. The total number of bytes is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.NackPacketsReceivedPerMinute"
+    units="packets/minute">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of received RTCP NACK packets per minute for a sent screenshare
+    stream. Recorded when a stream is removed. The total number of packets is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.PaddingBitrateSentInKbps"
+    units="kbps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of sent padding bits per second for a sent screenshare stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.PliPacketsReceivedPerMinute"
+    units="packets/minute">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of received RTCP PLI packets per minute for a sent screenshare
+    stream. Recorded when a stream is removed. The total number of packets is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.QualityLimitedResolutionDownscales"
+    units="downscales">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    For frames that are downscaled in resolution due to quality, the average
+    number of downscales is recorded for a sent (screen content) video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.QualityLimitedResolutionInPercent"
+    units="%">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Percentage of sent frames that are downscaled in resolution due to quality
+    for a sent (screen content) video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.RetransmittedBitrateSentInKbps"
+    units="kbps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of retransmitted bits per second for a sent screenshare stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.RtxBitrateSentInKbps" units="kbps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of sent bits over RTX per second for a sent screenshare stream.
+    Recorded when a stream is removed. The total number of bytes is divided by
+    the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.SendSideDelayInMs" units="ms">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average delay (of average delays) of sent packets for a sent (screen
+    content) video stream. Recorded when a stream is removed. The delay is
+    measured from a frame is input to video engine until a packet is sent to the
+    network. For each sent packet, the average delay of all sent packets over
+    the last second is reported. The average of these reported delays is
+    recorded.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.SendSideDelayMaxInMs" units="ms">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average delay (of max delays) of sent packets for a sent (screen
+    content) video stream. Recorded when a stream is removed. The delay is
+    measured from a frame is input to video engine until a packet is sent to the
+    network. For each sent packet, the maximum delay of all sent packets over
+    the last second is reported. The average of these reported delays is
+    recorded.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.SentFramesPerSecond" units="fps">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The number of sent frames per second for a sent (screen content) video
+    stream. Recorded when a stream is removed. The total number of frames is
+    divided by the time the video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.SentHeightInPixels" units="pixels">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average sent height per frame for a sent (screen content) video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.SentPacketsLostInPercent" units="%">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Percentage of sent packets lost for a sent screenshare stream. Recorded when
+    a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.SentWidthInPixels" units="pixels">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    The average sent width per frame for a sent (screen content) video stream.
+    Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.Screenshare.UniqueNackRequestsReceivedInPercent"
+    units="%">
+  <owner>sprang@chromium.org</owner>
+  <summary>
+    Percentage of unique RTCP NACK requests that are received in response to a
+    sent screenshare stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SendDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average send delay of sent packets for a sent video stream. Recorded
+    when a stream is removed. The delay is measured from a packet is sent to the
+    transport until leaving the socket.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SendSideDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average delay (of average delays) of sent packets for a sent video
+    stream. Recorded when a stream is removed. The delay is measured from a
+    frame is input to video engine until a packet is sent to the network. For
+    each sent packet, the average delay of all sent packets over the last second
+    is reported. The average of these reported delays is recorded.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SendSideDelayMaxInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average delay (of max delays) of sent packets for a sent video stream.
+    Recorded when a stream is removed. The delay is measured from a frame is
+    input to video engine until a packet is sent to the network. For each sent
+    packet, the maximum delay of all sent packets over the last second is
+    reported. The average of these reported delays is recorded.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SendStreamLifetimeInSeconds" units="seconds">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The lifetime of a video send stream. Recorded when a VideoSendStream
+    instance is destroyed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SentFramesPerSecond" units="fps">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The number of sent frames per second for a sent video stream. Recorded when
+    a stream is removed. The total number of frames is divided by the time the
+    video stream exists.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SentHeightInPixels" units="pixels">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average sent height per frame for a sent video stream. Recorded when a
+    stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SentPacketsLostInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of sent packets lost for a sent video stream. Recorded when a
+    stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.SentWidthInPixels" units="pixels">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    The average sent width per frame for a sent video stream. Recorded when a
+    stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.TargetDelayInMs" units="ms">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Average target delay (jitter delay + decode time + render delay) for a
+    received video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.UniqueNackRequestsReceivedInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of unique RTCP NACK requests that are received in response to a
+    sent video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.UniqueNackRequestsSentInPercent" units="%">
+  <owner>asapersson@chromium.org</owner>
+  <summary>
+    Percentage of unique RTCP NACK requests that are sent in response to a
+    received video stream. Recorded when a stream is removed.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.Video.VP8DecoderImpl.TooManyPendingFrames"
+    units="counts">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Counts occurences of if the VP8 software decoder runs out of buffers due to
+    that they are not returned to the buffer pool. See http://crbug/652923 and
+    http://crbug/542522.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.webkitApiCount" enum="JavaScriptAPIName">
+  <owner>perkj@chromium.org</owner>
+  <owner>mcasas@chromium.org</owner>
+  <owner>emircan@chromium.org</owner>
+  <summary>Counts number of calls to WebRTC APIs from JavaScript.</summary>
+</histogram>
+
+<histogram name="WebRTC.webkitApiCountPerSession" enum="JavaScriptAPIName">
+  <owner>perkj@chromium.org</owner>
+  <summary>
+    Counts the number of calls to WebRTC APIs from JavaScript once per session.
+    A session is a crude estimate since its implemented as the lifetime of the
+    render process that called the WebRTC API.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.webkitApiCountUniqueByOrigin" enum="JavaScriptAPIName">
+  <obsolete>
+    Deprecated as of r253828 (27 Feb 2014).
+  </obsolete>
+  <owner>tommi@chromium.org</owner>
+  <summary>
+    Counts number of calls to WebRTC APIs from JavaScript, once per origin per
+    renderer process.
+  </summary>
+</histogram>
+
+<histogram name="WebRTC.WindowCaptureTime" units="ms">
+  <owner>jiayl@chromium.org</owner>
+  <summary>Time for capturing one frame in window capturing.</summary>
+</histogram>
+
+<histogram name="WebShare.ApiCount" enum="WebShareMethod">
+  <owner>mgiuca@chromium.org</owner>
+  <summary>
+    Counts the number of calls to navigator.share. Includes both successful and
+    failed shares.
+  </summary>
+</histogram>
+
+<histogram name="WebShare.ShareOutcome" enum="WebShareOutcome">
+  <owner>mgiuca@chromium.org</owner>
+  <summary>
+    Records the outcome of calls to navigator.share. This will not count any
+    calls that never complete (e.g., if the page closes while the picker is
+    open). Therefore, DO NOT look at the raw percentages of this histogram;
+    instead, compare these numbers with the WebShare.ApiCount.Share total.
+
+    NOTE: At the moment, if the user cancels the picker, its recording will be
+    delayed, and possibly never recorded (https://crbug.com/636274), so that
+    will account for a discrepancy between ShareOutcome and ApiCount.Share.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.Action" enum="WebsiteSettingsAction">
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks actions with the website setting (a.k.a. page info / origin info)
+    bubble, such as opening it up or clicking on the Connection tab.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.Action.HttpsUrl" enum="WebsiteSettingsAction">
+  <obsolete>
+    Deprecated October 2016 in favor of Security.PageInfo.Action.HttpsUrl.Valid,
+    Security.PageInfo.Action.HttpsUrl.Dangerous, and
+    Security.PageInfo.Action.HttpsUrl.Downgraded.
+  </obsolete>
+  <owner>lgarron@chromium.org</owner>
+  <summary>
+    Tracks WebsiteSettings actions that take place on an HTTPS URL. This
+    completely disregards security status.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.Menu.PermissionChanged" enum="ContentType">
+  <owner>miguelg@chromium.org</owner>
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is changed using the
+    content settings menu.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.Menu.PermissionChanged.Allowed"
+    enum="ContentType">
+  <owner>miguelg@chromium.org</owner>
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is set to 'Allowed'
+    using the content settings menu.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.Menu.PermissionChanged.Blocked"
+    enum="ContentType">
+  <owner>miguelg@chromium.org</owner>
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is set to 'Blocked'
+    using the content settings menu.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.Menu.PermissionChanged.Reset"
+    enum="ContentType">
+  <owner>miguelg@chromium.org</owner>
+  <owner>finnur@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is reset to the
+    default value using the content settings menu.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.OriginInfo.PermissionChanged"
+    enum="ContentType">
+  <owner>sashab@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is changed using the
+    Origin Info dialog.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Allowed"
+    enum="ContentType">
+  <owner>sashab@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is set to 'Allowed'
+    using the Origin Info dialog.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.OriginInfo.PermissionChanged.Blocked"
+    enum="ContentType">
+  <owner>sashab@chromium.org</owner>
+  <owner>felt@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is set to 'Blocked'
+    using the Origin Info dialog.
+  </summary>
+</histogram>
+
+<histogram name="WebsiteSettings.PermissionChanged" enum="ContentType">
+  <obsolete>
+    Deprecated 12/2014 in Issue 433776, and replaced by
+    WebsiteSettings.OriginInfo.PermissionChanged.
+  </obsolete>
+  <owner>lgarron@chromium.org</owner>
+  <owner>sashab@chromium.org</owner>
+  <summary>
+    Count of how often a specific content type (permission) is changed using the
+    Website Settings UI.
+  </summary>
+</histogram>
+
+<histogram name="websql.Async.OpenTime.Error" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>
+    The time required to try (and fail) to open a Web SQL database.
+  </summary>
+</histogram>
+
+<histogram name="websql.Async.OpenTime.Success" units="ms">
+  <owner>cmumford@chromium.org</owner>
+  <summary>The time required to successfully open a Web SQL database.</summary>
+</histogram>
+
+<histogram name="websql.OpenDatabase" enum="BooleanSecure">
+  <owner>michaeln@chromium.org</owner>
+  <summary>
+    Counts the number of WebSQL databases opened for secure vs insecure origins.
+  </summary>
+</histogram>
+
+<histogram name="Webstore.ExtensionInstallResult" enum="BooleanSuccess">
+  <owner>jackhou@chromium.org</owner>
+  <summary>
+    The success or failure of all extension installs from the webstore. This
+    includes those initiated by sync.
+  </summary>
+</histogram>
+
+<histogram name="WebstoreWidgetApp.Close" enum="SuggestAppsDialogCloseReason">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Webstore Widget app: the reason why the suggest apps dialog was closed.
+  </summary>
+</histogram>
+
+<histogram name="WebstoreWidgetApp.Install" enum="SuggestAppsDialogInstall">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Webstore Widget app: whether the Webstore item user selected was
+    successfully installed or not.
+  </summary>
+</histogram>
+
+<histogram name="WebstoreWidgetApp.Load" enum="SuggestAppsDialogLoad">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Webstore Widget app: whether the initialization of the dialog succeeded or
+    not.
+  </summary>
+</histogram>
+
+<histogram name="WebstoreWidgetApp.LoadTime" units="ms">
+  <owner>joshwoodward@google.com</owner>
+  <summary>
+    Webstore Widget app: time to load the widget contained in the app. Measured
+    between the moment window appears and the moment all the contents in the app
+    including the Chrome Webstore widget are ready.
+  </summary>
+</histogram>
+
+<histogram name="WebUI.CreatedForUrl" enum="WebUIUrlHashes">
+  <owner>dbeam@chromium.org</owner>
+  <summary>URLs for which Chrome creates WebUIControllers.</summary>
+</histogram>
+
+<histogram name="WebUsb.ChooserClosed" enum="WebUsbChooserClosed">
+  <owner>reillyg@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Records the reason why the WebUSB device chooser was closed.
+  </summary>
+</histogram>
+
+<histogram name="WebUsb.DetectorInitialization" units="ms">
+  <owner>reillyg@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Records the time spent initializing the WebUSB detector module.
+  </summary>
+</histogram>
+
+<histogram name="WebUsb.NotificationClosed" enum="WebUsbNotificationClosed">
+  <owner>reillyg@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Records the reason why the &quot;WebUSB device detected&quot; notification
+    was dismissed.
+  </summary>
+</histogram>
+
+<histogram name="WebUsb.PermissionRevoked" enum="WebUsbPermissionRevoked">
+  <owner>reillyg@chromium.org</owner>
+  <owner>juncai@chromium.org</owner>
+  <summary>
+    Records when the user revokes permission for an origin to connect to a USB
+    device using the WebUSB API.
+  </summary>
+</histogram>
+
+<histogram name="Welcome.SignInPromptResult" enum="WelcomeSignInPromptOutcome">
+  <owner>tmartino@chromium.org</owner>
+  <summary>
+    Records the result of promoting sign-in via the Welcome page.
+  </summary>
+</histogram>
+
+<histogram name="Welcome.Win10.DefaultPromptResult" enum="BooleanDefault">
+  <owner>tmartino@chromium.org</owner>
+  <summary>
+    Records whether or not Chrome was the default browser when the user left the
+    Win10-specific Welcome page.
+  </summary>
+</histogram>
+
+<histogram name="Welcome.Win10.PinnedPromptResult" enum="BooleanPinned">
+  <owner>tmartino@chromium.org</owner>
+  <summary>
+    Records whether or not Chrome was pinned to the taskbar when the user left
+    the Win10-specific Welcome page.
+  </summary>
+</histogram>
+
+<histogram name="Win8.PageLoad" enum="Win8PageLoadType">
+  <owner>zturner@chromium.org</owner>
+  <summary>
+    Count of page loads in each of the 2 different environments (metro/desktop)
+    on Windows 8.
+  </summary>
+</histogram>
+
+<histogram name="WindowManager.AppWindowCountPerLoad">
+  <owner>kuscher@chromium.org</owner>
+  <summary>
+    The number of app windows open when a load completes. This includes windows
+    opened by an app shortcut, or apps opened in a popup. This only counts v1
+    apps.
+  </summary>
+</histogram>
+
+<histogram name="WindowManager.PanelWindowCountPerLoad">
+  <obsolete>
+    Deprecated 4/2013. No longer tracked.
+  </obsolete>
+  <owner>kuscher@chromium.org</owner>
+  <summary>
+    The number of panel windows open when a load completes. Panels are windows
+    docked to the bottom of the OS desktop, which are visible to the user even
+    while the user is interacting with other applications.
+  </summary>
+</histogram>
+
+<histogram name="WindowManager.PopUpWindowCountPerLoad">
+  <owner>kuscher@chromium.org</owner>
+  <summary>
+    The number of popup windows open when a load completes. Popup windows only
+    have one content area (no multiple tabs) and a stripped down toolbar
+    consisting only of a read-only address bar.
+  </summary>
+</histogram>
+
+<histogram name="WindowManager.TabbedWindowCountPerLoad">
+  <owner>kuscher@chromium.org</owner>
+  <summary>
+    The number of tabbed windows open when a load completes. A tabbed window is
+    a normal browser window which can have one or more tabs.
+  </summary>
+</histogram>
+
+<histogram name="Windows.GetVersionExVersion" enum="WindowsVersion">
+  <owner>scottmg@chromium.org</owner>
+  <summary>
+    The Windows version (base::win::Version) as reported by GetVersionEx(). This
+    is queried shortly after startup.
+  </summary>
+</histogram>
+
+<histogram name="Windows.InCompatibilityMode" enum="BooleanCompatibilityMode">
+  <owner>scottmg@chromium.org</owner>
+  <summary>
+    A boolean used to indicate when the Windows version reported by
+    GetVersionEx() and the Windows version reported by VerQueryValue() on
+    kernel32 do not match. This is queried shortly after startup.
+  </summary>
+</histogram>
+
+<histogram name="Windows.IsPinnedToTaskbar" enum="IsPinnedToTaskbarResult">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    Indicates whether Chrome is pinned to the Windows taskbar for the current
+    user. Recorded shortly after startup.
+  </summary>
+</histogram>
+
+<histogram name="Windows.IsPinnedToTaskbar.ProcessError" enum="BooleanError">
+  <owner>pmonette@chromium.org</owner>
+  <summary>
+    Indicates whether a connection error occured between the browser and the
+    shell handler process. This is usually caused by a crash in the utility
+    process. This is logged every time the pinned state is queried.
+  </summary>
+</histogram>
+
+<histogram name="Windows.Kernel32Version" enum="WindowsVersion">
+  <owner>scottmg@chromium.org</owner>
+  <summary>
+    The Windows version (base::win::Version) as reported by VeryQueryValue() on
+    kernel32.dll. This is queried shortly after startup.
+  </summary>
+</histogram>
+
+<histogram name="Windows.ParentProcessNameHash" enum="ProcessNameHash">
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    The 32-bit hash of the lower-case parent process basename (e.g.
+    explorer.exe) of the main Chrome executable. Reported once during startup as
+    part of install verification.
+  </summary>
+</histogram>
+
+<histogram name="Windows.Tablet" enum="BooleanTablet">
+  <owner>zturner@chromium.org</owner>
+  <summary>Count of browser launches from a Windows tablet pc.</summary>
+</histogram>
+
+<histogram name="Windows.Win32kRendererLockdown" enum="BooleanEnabled">
+  <obsolete>
+    Deprecated 10/2016 as this is enabled by default so provides no useful data.
+  </obsolete>
+  <owner>wfh@chromium.org</owner>
+  <summary>
+    Count of browser launches where Win32k renderer lockdown is enabled.
+  </summary>
+</histogram>
+
+<histogram name="WinJumplist.Action" enum="WinJumplistCategory">
+  <owner>noms@chromium.org</owner>
+  <summary>The type of category clicked in the Windows Jumplist</summary>
+</histogram>
+
+<histogram name="WinJumplist.FolderResults" enum="JumplisticonsfolderCategory">
+  <owner>chengx@chromium.org</owner>
+  <summary>
+    This metric is recorded when folders JumpListIcons and JumpListIconsOld get
+    updated. These two folders are updated when tabs are closed, mostly visited
+    URLs get updated, etc. These two folders are updated as follows 1)
+    JumpListIconsOld with its content get deleted; 2) JumpListIcons is moved, 3)
+    A new JumpListIcons folder is created. The status of these three file
+    operations are put together and recorded in this metric. The failure of any
+    of these file operations is suspected to be related to a known issue.
+  </summary>
+</histogram>
+
+<histogram name="WinTimeTicks.FailedToChangeCores" enum="WindowsVersion">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    Incremented each time the TimeTicks field trial runs on a machine with
+    multiple cores, but failed to change thread affinity. Broken down by Windows
+    version.
+  </summary>
+</histogram>
+
+<histogram name="WinTimeTicks.MinResolutionNanoseconds" units="nanoseconds">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The smallest non-zero delta reported by subsequent calls to
+    QueryPerformanceCounter.
+  </summary>
+</histogram>
+
+<histogram name="WinTimeTicks.NonStopTsc">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    True if the CPU's timestamp counter ticks at a constant rate regardless of
+    CPU frequency.
+  </summary>
+</histogram>
+
+<histogram name="WinTimeTicks.TickedBackwards" enum="WindowsVersion">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times the TimeTicks field trial failed because
+    QueryPerformanceCounter ticked backwards. Broken down by Windows version.
+  </summary>
+</histogram>
+
+<histogram name="WinTimeTicks.VersionSuccessful" enum="WindowsVersion">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times the TimeTicks field trial succeeded. Broken down by
+    Windows version.
+  </summary>
+</histogram>
+
+<histogram name="WinTimeTicks.VersionTotal" enum="WindowsVersion">
+  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <summary>
+    The number of times the TimeTicks field trial ran for comparison with
+    WinTimeTicks.VersionSuccess. Broken down by Windows version.
+  </summary>
+</histogram>
+
+<histogram name="WorkerThread.DebuggerTask.Time" units="ms">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>The time taken for running a debugger task on WorkerThread.</summary>
+</histogram>
+
+<histogram name="WorkerThread.ExitCode" enum="WorkerThreadExitCode">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>Records the exit code of WorkerThread.</summary>
+</histogram>
+
+<histogram name="WorkerThread.Task.Time" units="ms">
+  <owner>nhiroki@chromium.org</owner>
+  <summary>The time taken for running a worker task on WorkerThread.</summary>
+</histogram>
+
+<histogram name="WrenchMenu.MenuAction" enum="WrenchMenuAction">
+  <owner>ainslie@chromium.org</owner>
+  <owner>edwardjung@chromium.org</owner>
+  <summary>Number of times that each menu item is clicked.</summary>
+</histogram>
+
+<histogram name="WrenchMenu.OpeningAnimationFrameTimes" units="ms">
+  <owner>kkimlabs@chromium.org</owner>
+  <summary>
+    Frame times of the Android wrench menu opening animation. For example, if
+    the menu opening animation runs exactly at 60fps for a second, then each
+    frame time is 16ms, and a total of 60 values of 16ms are recorded. If the
+    animation is janky, we will see values greater than 16ms in the histogram.
+  </summary>
+</histogram>
+
+<histogram name="WrenchMenu.RecentTabsSubMenu" enum="RecentTabsAction">
+  <owner>rpop@chromium.org</owner>
+  <summary>
+    The number of times each tab or window restore option in the Recent Tabs
+    submenu is clicked.
+  </summary>
+</histogram>
+
+<histogram name="WrenchMenu.TimeToAction">
+  <owner>ainslie@chromium.org</owner>
+  <owner>edwardjung@chromium.org</owner>
+  <summary>
+    The time a user takes to select a menu item after opening the menu.
+  </summary>
+</histogram>
+
+<histogram name="WrenchMenu.TouchDuration" units="ms">
+  <owner>kkimlabs@chromium.org</owner>
+  <summary>
+    Time difference between touch down and touch up on Android wrench button.
+  </summary>
+</histogram>
+
+<histogram name="ZeroSuggest.AllResults">
+  <owner>hfung@chromium.org</owner>
+  <summary>
+    The number of results (either query or URL) from ZeroSuggest. This is set
+    every time a successful response from ZeroSuggest is recieved, which can be
+    every time the user focuses on the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="ZeroSuggest.QueryResults">
+  <owner>hfung@chromium.org</owner>
+  <summary>
+    The number of query results returned from ZeroSuggest. This is set every
+    time a successful response from ZeroSuggest is recieved, which can be every
+    time the user focuses on the omnibox.
+  </summary>
+</histogram>
+
+<histogram name="ZeroSuggest.URLResults">
+  <owner>hfung@chromium.org</owner>
+  <summary>
+    The number of URL results returned from ZeroSuggest. This is set every time
+    a successful response from ZeroSuggest is recieved, which can be every time
+    the user focuses on the omnibox.
+  </summary>
+</histogram>
+
+</histograms>
+
+<!-- Enum types -->
+
+<enums>
+
+<enum name="Abandoned" type="int">
+  <int value="0" label="Finished"/>
+  <int value="1" label="Abandoned"/>
+</enum>
+
+<enum name="AbandonType" type="int">
+  <int value="0" label="Not abandoned"/>
+  <int value="1" label="FinishDoc missing"/>
+  <int value="2" label="FinishAllLoads missing"/>
+  <int value="3" label="FinishAllLoads+FinishDoc missing"/>
+  <int value="4" label="LoadEventStart missing"/>
+  <int value="5" label="LoadEventStart+FinishDoc missing"/>
+  <int value="6" label="LoadEventStart+FinishAllLoads missing"/>
+  <int value="7" label="LoadEventStart+FinishAllLoads+FinishDoc missing"/>
+  <int value="8" label="LoadEventEnd missing"/>
+  <int value="9" label="LoadEventEnd+FinishDoc missing"/>
+  <int value="10" label="LoadEventEnd+FinishAllLoads missing"/>
+  <int value="11" label="LoadEventEnd+FinishAllLoads+FinishDoc missing"/>
+  <int value="12" label="LoadEventEnd+LoadEventStart missing"/>
+  <int value="13" label="LoadEventEnd+LoadEventStart+FinishDoc missing"/>
+  <int value="14" label="LoadEventEnd+LoadEventStart+FinishAllLoads missing"/>
+  <int value="15"
+      label="LoadEventEnd+LoadEventStart+FinishAllLoads+FinishDoc missing"/>
+</enum>
+
+<enum name="AcceleratedFixedRootBackground" type="int">
+  <int value="0" label="ScrolledMainFrame"/>
+  <int value="1" label="ScrolledMainFrameWithAcceleratedFixedRootBackground"/>
+  <int value="2" label="ScrolledMainFrameWithUnacceleratedFixedRootBackground"/>
+</enum>
+
+<enum name="AccessibilityWinAPIEnum" type="int">
+  <summary>
+    Track which Windows accessibility APIs are being called by clients.
+  </summary>
+  <int value="0" label="UMA_API_ACC_DO_DEFAULT_ACTION">accDoDefaultAction</int>
+  <int value="1" label="UMA_API_ACC_HIT_TEST">accHitTest</int>
+  <int value="2" label="UMA_API_ACC_LOCATION">accLocation</int>
+  <int value="3" label="UMA_API_ACC_NAVIGATE">accNavigate</int>
+  <int value="4" label="UMA_API_ACC_SELECT">accSelect</int>
+  <int value="5" label="UMA_API_ADD_SELECTION">addSelection</int>
+  <int value="6" label="UMA_API_CONVERT_RETURNED_ELEMENT">
+    ConvertReturnedElement
+  </int>
+  <int value="7" label="UMA_API_DO_ACTION">doAction</int>
+  <int value="8" label="UMA_API_GET_ACCESSIBLE_AT">get_accessibleAt</int>
+  <int value="9" label="UMA_API_GET_ACC_CHILD">get_accChild</int>
+  <int value="10" label="UMA_API_GET_ACC_CHILD_COUNT">get_accChildCount</int>
+  <int value="11" label="UMA_API_GET_ACC_DEFAULT_ACTION">
+    get_accDefaultAction
+  </int>
+  <int value="12" label="UMA_API_GET_ACC_DESCRIPTION">get_accDescription</int>
+  <int value="13" label="UMA_API_GET_ACC_FOCUS">get_accFocus</int>
+  <int value="14" label="UMA_API_GET_ACC_HELP">get_accHelp</int>
+  <int value="15" label="UMA_API_GET_ACC_HELP_TOPIC">get_accHelpTopic</int>
+  <int value="16" label="UMA_API_GET_ACC_KEYBOARD_SHORTCUT">
+    get_accKeyboardShortcut
+  </int>
+  <int value="17" label="UMA_API_GET_ACC_NAME">get_accName</int>
+  <int value="18" label="UMA_API_GET_ACC_PARENT">get_accParent</int>
+  <int value="19" label="UMA_API_GET_ACC_ROLE">get_accRole</int>
+  <int value="20" label="UMA_API_GET_ACC_SELECTION">get_accSelection</int>
+  <int value="21" label="UMA_API_GET_ACC_STATE">get_accState</int>
+  <int value="22" label="UMA_API_GET_ACC_VALUE">get_accValue</int>
+  <int value="23" label="UMA_API_GET_ANCHOR">get_anchor</int>
+  <int value="24" label="UMA_API_GET_ANCHOR_TARGET">get_anchorTarget</int>
+  <int value="25" label="UMA_API_GET_APP_NAME">get_appName</int>
+  <int value="26" label="UMA_API_GET_APP_VERSION">get_appVersion</int>
+  <int value="27" label="UMA_API_GET_ATTRIBUTES_FOR_NAMES">
+    get_attributesForNames
+  </int>
+  <int value="28" label="UMA_API_GET_CAPTION">get_caption</int>
+  <int value="29" label="UMA_API_GET_CARET_OFFSET">get_caretOffset</int>
+  <int value="30" label="UMA_API_GET_CELL_AT">get_cellAt</int>
+  <int value="31" label="UMA_API_GET_CHARACTER_EXTENTS">
+    get_characterExtents
+  </int>
+  <int value="32" label="UMA_API_GET_CHILD_AT">get_childAt</int>
+  <int value="33" label="UMA_API_GET_CHILD_INDEX">get_childIndex</int>
+  <int value="34" label="UMA_API_GET_CLIPPED_SUBSTRING_BOUNDS">
+    get_clippedSubstringBounds
+  </int>
+  <int value="35" label="UMA_API_GET_COLUMN_DESCRIPTION">
+    get_columnDescription
+  </int>
+  <int value="36" label="UMA_API_GET_COLUMN_EXTENT">get_columnExtent</int>
+  <int value="37" label="UMA_API_GET_COLUMN_EXTENT_AT">get_columnExtentAt</int>
+  <int value="38" label="UMA_API_GET_COLUMN_HEADER">get_columnHeader</int>
+  <int value="39" label="UMA_API_GET_COLUMN_HEADER_CELLS">
+    get_columnHeaderCells
+  </int>
+  <int value="40" label="UMA_API_GET_COLUMN_INDEX">get_columnIndex</int>
+  <int value="41" label="UMA_API_GET_COMPUTED_STYLE">get_computedStyle</int>
+  <int value="42" label="UMA_API_GET_COMPUTED_STYLE_FOR_PROPERTIES">
+    get_computedStyleForProperties
+  </int>
+  <int value="43" label="UMA_API_GET_CURRENT_VALUE">get_currentValue</int>
+  <int value="44" label="UMA_API_GET_DESCRIPTION">get_description</int>
+  <int value="45" label="UMA_API_GET_DOC_TYPE">get_docType</int>
+  <int value="46" label="UMA_API_GET_DOM_TEXT">get_domText</int>
+  <int value="47" label="UMA_API_GET_END_INDEX">get_endIndex</int>
+  <int value="48" label="UMA_API_GET_EXTENDED_ROLE">get_extendedRole</int>
+  <int value="49" label="UMA_API_GET_EXTENDED_STATES">get_extendedStates</int>
+  <int value="50" label="UMA_API_GET_FIRST_CHILD">get_firstChild</int>
+  <int value="51" label="UMA_API_GET_FONT_FAMILY">get_fontFamily</int>
+  <int value="52" label="UMA_API_GET_GROUP_POSITION">get_groupPosition</int>
+  <int value="53" label="UMA_API_GET_HOST_RAW_ELEMENT_PROVIDER">
+    get_HostRawElementProvider
+  </int>
+  <int value="54" label="UMA_API_GET_HYPERLINK">get_hyperlink</int>
+  <int value="55" label="UMA_API_GET_HYPERLINK_INDEX">get_hyperlinkIndex</int>
+  <int value="56" label="UMA_API_GET_IACCESSIBLE_PAIR">
+    GetIAccessiblePair ALT
+  </int>
+  <int value="57" label="UMA_API_GET_IMAGE_POSITION">get_imagePosition</int>
+  <int value="58" label="UMA_API_GET_IMAGE_SIZE">get_imageSize</int>
+  <int value="59" label="UMA_API_GET_INDEX_IN_PARENT">get_indexInParent</int>
+  <int value="60" label="UMA_API_GET_INNER_HTML">get_innerHTML</int>
+  <int value="61" label="UMA_API_GET_IS_COLUMN_SELECTED">
+    get_isColumnSelected
+  </int>
+  <int value="62" label="UMA_API_GET_IS_ROW_SELECTED">get_isRowSelected</int>
+  <int value="63" label="UMA_API_GET_IS_SELECTED">get_isSelected</int>
+  <int value="64" label="UMA_API_GET_KEY_BINDING">get_keyBinding</int>
+  <int value="65" label="UMA_API_GET_LANGUAGE">get_language</int>
+  <int value="66" label="UMA_API_GET_LAST_CHILD">get_lastChild</int>
+  <int value="67" label="UMA_API_GET_LOCALE">get_locale</int>
+  <int value="68" label="UMA_API_GET_LOCALIZED_EXTENDED_ROLE">
+    get_localizedExtendedRole
+  </int>
+  <int value="69" label="UMA_API_GET_LOCALIZED_EXTENDED_STATES">
+    get_localizedExtendedStates
+  </int>
+  <int value="70" label="UMA_API_GET_LOCALIZED_NAME">get_localizedName</int>
+  <int value="71" label="UMA_API_GET_LOCAL_INTERFACE">get_localInterface</int>
+  <int value="72" label="UMA_API_GET_MAXIMUM_VALUE">get_maximumValue</int>
+  <int value="73" label="UMA_API_GET_MIME_TYPE">get_mimeType</int>
+  <int value="74" label="UMA_API_GET_MINIMUM_VALUE">get_minimumValue</int>
+  <int value="75" label="UMA_API_GET_NAME">get_name</int>
+  <int value="76" label="UMA_API_GET_NAMESPACE_URI_FOR_ID">
+    get_nameSpaceURIForID ALT
+  </int>
+  <int value="77" label="UMA_API_GET_NEW_TEXT">get_newText</int>
+  <int value="78" label="UMA_API_GET_NEXT_SIBLING">get_nextSibling</int>
+  <int value="79" label="UMA_API_GET_NODE_INFO">get_nodeInfo</int>
+  <int value="80" label="UMA_API_GET_N_CHARACTERS">get_nCharacters</int>
+  <int value="81" label="UMA_API_GET_N_COLUMNS">get_nColumns</int>
+  <int value="82" label="UMA_API_GET_N_EXTENDED_STATES">
+    get_nExtendedStates
+  </int>
+  <int value="83" label="UMA_API_GET_N_HYPERLINKS">get_nHyperlinks</int>
+  <int value="84" label="UMA_API_GET_N_RELATIONS">get_nRelations</int>
+  <int value="85" label="UMA_API_GET_N_ROWS">get_nRows</int>
+  <int value="86" label="UMA_API_GET_N_SELECTED_CELLS">get_nSelectedCells</int>
+  <int value="87" label="UMA_API_GET_N_SELECTED_CHILDREN">
+    get_nSelectedChildren
+  </int>
+  <int value="88" label="UMA_API_GET_N_SELECTED_COLUMNS">
+    get_nSelectedColumns
+  </int>
+  <int value="89" label="UMA_API_GET_N_SELECTED_ROWS">get_nSelectedRows</int>
+  <int value="90" label="UMA_API_GET_N_SELECTIONS">get_nSelections</int>
+  <int value="91" label="UMA_API_GET_OBJECT_FOR_CHILD">GetObjectForChild</int>
+  <int value="92" label="UMA_API_GET_OFFSET_AT_POINT">get_offsetAtPoint</int>
+  <int value="93" label="UMA_API_GET_OLD_TEXT">get_oldText</int>
+  <int value="94" label="UMA_API_GET_PARENT_NODE">get_parentNode</int>
+  <int value="95" label="UMA_API_GET_PATTERN_PROVIDER">GetPatternProvider</int>
+  <int value="96" label="UMA_API_GET_PREVIOUS_SIBLING">get_previousSibling</int>
+  <int value="97" label="UMA_API_GET_PROPERTY_VALUE">GetPropertyValue</int>
+  <int value="98" label="UMA_API_GET_PROVIDER_OPTIONS">get_ProviderOptions</int>
+  <int value="99" label="UMA_API_GET_RELATION">get_relation</int>
+  <int value="100" label="UMA_API_GET_RELATIONS">get_relations</int>
+  <int value="101" label="UMA_API_GET_ROW_COLUMN_EXTENTS">
+    get_rowColumnExtents
+  </int>
+  <int value="102" label="UMA_API_GET_ROW_COLUMN_EXTENTS_AT_INDEX">
+    get_rowColumnExtentsAtIndex
+  </int>
+  <int value="103" label="UMA_API_GET_ROW_DESCRIPTION">get_rowDescription</int>
+  <int value="104" label="UMA_API_GET_ROW_EXTENT">get_rowExtent</int>
+  <int value="105" label="UMA_API_GET_ROW_EXTENT_AT">get_rowExtentAt</int>
+  <int value="106" label="UMA_API_GET_ROW_HEADER">get_rowHeader</int>
+  <int value="107" label="UMA_API_GET_ROW_HEADER_CELLS">get_rowHeaderCells</int>
+  <int value="108" label="UMA_API_GET_ROW_INDEX">get_rowIndex</int>
+  <int value="109" label="UMA_API_GET_RUNTIME_ID">GetRuntimeId</int>
+  <int value="110" label="UMA_API_GET_SELECTED_CELLS">get_selectedCells</int>
+  <int value="111" label="UMA_API_GET_SELECTED_CHILDREN">
+    get_selectedChildren
+  </int>
+  <int value="112" label="UMA_API_GET_SELECTED_COLUMNS">
+    get_selectedColumns
+  </int>
+  <int value="113" label="UMA_API_GET_SELECTED_ROWS">get_selectedRows</int>
+  <int value="114" label="UMA_API_GET_SELECTION">get_selection</int>
+  <int value="115" label="UMA_API_GET_START_INDEX">get_startIndex</int>
+  <int value="116" label="UMA_API_GET_STATES">get_states</int>
+  <int value="117" label="UMA_API_GET_SUMMARY">get_summary</int>
+  <int value="118" label="UMA_API_GET_TABLE">get_table</int>
+  <int value="119" label="UMA_API_GET_TEXT">get_text</int>
+  <int value="120" label="UMA_API_GET_TEXT_AFTER_OFFSET">
+    get_textAfterOffset
+  </int>
+  <int value="121" label="UMA_API_GET_TEXT_AT_OFFSET">get_textAtOffset</int>
+  <int value="122" label="UMA_API_GET_TEXT_BEFORE_OFFSET">
+    get_textBeforeOffset
+  </int>
+  <int value="123" label="UMA_API_GET_TITLE">get_title</int>
+  <int value="124" label="UMA_API_GET_TOOLKIT_NAME">get_toolkitName</int>
+  <int value="125" label="UMA_API_GET_TOOLKIT_VERSION">get_toolkitVersion</int>
+  <int value="126" label="UMA_API_GET_UNCLIPPED_SUBSTRING_BOUNDS">
+    get_unclippedSubstringBounds
+  </int>
+  <int value="127" label="UMA_API_GET_UNIQUE_ID">get_uniqueID</int>
+  <int value="128" label="UMA_API_GET_URL">get_URL</int>
+  <int value="129" label="UMA_API_GET_VALID">get_valid</int>
+  <int value="130" label="UMA_API_GET_WINDOW_HANDLE">get_windowHandle</int>
+  <int value="131" label="UMA_API_IA2_GET_ATTRIBUTES">get_attributes ALT</int>
+  <int value="132" label="UMA_API_IA2_SCROLL_TO">scrollTo ALT</int>
+  <int value="133" label="UMA_API_IAACTION_GET_DESCRIPTION">
+    get_description ALT
+  </int>
+  <int value="134" label="UMA_API_IATEXT_GET_ATTRIBUTES">
+    get_attributes ALT
+  </int>
+  <int value="135" label="UMA_API_ISIMPLEDOMNODE_GET_ATTRIBUTES">
+    get_attributes ALT
+  </int>
+  <int value="136" label="UMA_API_ISIMPLEDOMNODE_SCROLL_TO">scrollTo ALT</int>
+  <int value="137" label="UMA_API_N_ACTIONS">nActions</int>
+  <int value="138" label="UMA_API_PUT_ALTERNATE_VIEW_MEDIA_TYPES">
+    put_alternateViewMediaTypes
+  </int>
+  <int value="139" label="UMA_API_QUERY_SERVICE">QueryService</int>
+  <int value="140" label="UMA_API_REMOVE_SELECTION">removeSelection</int>
+  <int value="141" label="UMA_API_ROLE">role</int>
+  <int value="142" label="UMA_API_SCROLL_SUBSTRING_TO">scrollSubstringTo</int>
+  <int value="143" label="UMA_API_SCROLL_SUBSTRING_TO_POINT">
+    scrollSubstringToPoint
+  </int>
+  <int value="144" label="UMA_API_SCROLL_TO_POINT">scrollToPoint</int>
+  <int value="145" label="UMA_API_SCROLL_TO_SUBSTRING">scrollToSubstring</int>
+  <int value="146" label="UMA_API_SELECT_COLUMN">selectColumn</int>
+  <int value="147" label="UMA_API_SELECT_ROW">selectRow</int>
+  <int value="148" label="UMA_API_SET_CARET_OFFSET">setCaretOffset</int>
+  <int value="149" label="UMA_API_SET_CURRENT_VALUE">setCurrentValue</int>
+  <int value="150" label="UMA_API_SET_SELECTION">setSelection</int>
+  <int value="151" label="UMA_API_TABLE2_GET_SELECTED_COLUMNS">
+    get_selectedColumns ALT
+  </int>
+  <int value="152" label="UMA_API_TABLE2_GET_SELECTED_ROWS">
+    get_selectedRows ALT
+  </int>
+  <int value="153" label="UMA_API_TABLECELL_GET_COLUMN_INDEX">
+    get_columnIndex ALT
+  </int>
+  <int value="154" label="UMA_API_TABLECELL_GET_IS_SELECTED">
+    get_isSelected ALT
+  </int>
+  <int value="155" label="UMA_API_TABLECELL_GET_ROW_INDEX">
+    get_rowIndex ALT
+  </int>
+  <int value="156" label="UMA_API_UNSELECT_COLUMN">unselectColumn</int>
+  <int value="157" label="UMA_API_UNSELECT_ROW">unselectRow</int>
+</enum>
+
+<enum name="AccountChooserDismissalReason" type="int">
+  <int value="0" label="Canceled"/>
+  <int value="1" label="Credential chosen"/>
+  <int value="2" label="Sign in clicked"/>
+</enum>
+
+<enum name="AccountChooserUsabilityState" type="int">
+  <int value="0" label="Looks OK"/>
+  <int value="1" label="Empty username"/>
+  <int value="2" label="Duplicate usernames"/>
+  <int value="3" label="Empty and duplicate usernames"/>
+</enum>
+
+<enum name="AccountRelation" type="int">
+  <int value="0" label="Empty cookie jar"/>
+  <int value="1" label="No signed in, single signed out match"/>
+  <int value="2" label="No signed in, one of multiple signed out match"/>
+  <int value="3" label="No signed in with signed out, no match"/>
+  <int value="4" label="Single signed in match, no signed out"/>
+  <int value="5" label="Signle signed in match with signed out"/>
+  <int value="6" label="One of multiple signed in match, any signed out"/>
+  <int value="7" label="With signed in, one of signed out match"/>
+  <int value="8" label="With signed in, no match"/>
+</enum>
+
+<enum name="ActionAfterDoubleTap" type="int">
+  <int value="0" label="Navigated Back"/>
+  <int value="1" label="Stopped Navigation"/>
+  <int value="2" label="No Action"/>
+</enum>
+
+<enum name="ActionUponResourceRequest" type="int">
+  <int value="0" label="Load resource"/>
+  <int value="1" label="Revalidate resource"/>
+  <int value="2" label="Use resource from cache"/>
+</enum>
+
+<enum name="ActiveWindowShowType" type="int">
+  <int value="0" label="No Active Window"/>
+  <int value="1" label="Other"/>
+  <int value="2" label="Maximized"/>
+  <int value="3" label="Fullscreen"/>
+  <int value="4" label="Snapped"/>
+  <int value="5" label="Docked"/>
+  <int value="6" label="Pinned"/>
+  <int value="7" label="TrustedPinned"/>
+</enum>
+
+<enum name="ActivityTrackerCollectInitStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Unknown directory"/>
+  <int value="2" label="Get stability file path failed"/>
+  <int value="3" label="Crashpad database init failed"/>
+</enum>
+
+<enum name="ActivityTrackerCollectStatus" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Sucess"/>
+  <int value="2" label="Analyzer creation failed"/>
+  <int value="3" label="Debug file has no data"/>
+  <int value="4" label="Prepare new crash report failed"/>
+  <int value="5" label="Write to minidump failed"/>
+  <int value="6" label="Debug file deletion failed"/>
+  <int value="7" label="Finished writing crash report failed"/>
+</enum>
+
+<enum name="ActivityTrackerRecordInitStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Create stability dir failed"/>
+  <int value="2" label="Get stability file path failed"/>
+</enum>
+
+<enum name="AddressFamily" type="int">
+  <int value="0" label="Unspecified"/>
+  <int value="1" label="IPv4"/>
+  <int value="2" label="IPv6"/>
+</enum>
+
+<enum name="AddSearchProvider" type="int">
+  <int value="0" label="window.external.AddSearchProvider was called"/>
+  <int value="1" label="A confirmation dialog was shown"/>
+  <int value="2" label="The user added a search engine via the dialog"/>
+  <int value="3"
+      label="The user saw the dialog but closed it without adding an engine"/>
+</enum>
+
+<enum name="AffiliationFetchResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Network/server error"/>
+  <int value="2" label="Malformed response"/>
+</enum>
+
+<enum name="AlternateProtocolUsage" type="int">
+  <int value="0" label="ALTERNATE_PROTOCOL_USAGE_NO_RACE"/>
+  <int value="1" label="ALTERNATE_PROTOCOL_USAGE_WON_RACE"/>
+  <int value="2" label="ALTERNATE_PROTOCOL_USAGE_LOST_RACE"/>
+  <int value="3" label="ALTERNATE_PROTOCOL_USAGE_MAPPING_MISSING"/>
+  <int value="4" label="ALTERNATE_PROTOCOL_USAGE_BROKEN"/>
+</enum>
+
+<enum name="AlternativeServiceType" type="int">
+  <int value="0" label="No alternative service"/>
+  <int value="1" label="QUIC, destination same as origin"/>
+  <int value="2" label="QUIC, destination different from origin"/>
+  <int value="3" label="Not QUIC, destination same as origin"/>
+  <int value="4" label="Not QUIC, destination different from origin"/>
+</enum>
+
+<enum name="AndroidActivityId" type="int">
+  <int value="1" label="Unknown"/>
+  <int value="2" label="Main"/>
+  <int value="3" label="Preferences"/>
+  <int value="4" label="WebappActivity"/>
+  <int value="5" label="FullScreenActivity"/>
+</enum>
+
+<enum name="AndroidActivityStopReason" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Chrome sent to background by system back">
+    The user pressed the system back button, sending Chrome to the background.
+  </int>
+  <int value="2" label="Return button closed app">
+    The user hit the return UI button to close the tab and return to the
+    previous app.
+  </int>
+  <int value="3" label="Immediately launched child CustomTabActivity">
+    The Activity immediately launched a CustomTabActivity on top of itself.
+  </int>
+  <int value="4" label="Child CustomTabActivity closed itself">
+    The child CustomTabActivity was closed by the user, so this Activity sent
+    itself to the background to return the user to the previous app.
+  </int>
+  <int value="5" label="Another Chrome Activity took focus">
+    Another of Chrome's Activities (e.g. Settings or Bookmarks) launched and
+    took focus.
+  </int>
+</enum>
+
+<enum name="AndroidActivitySystemBackAction" type="int">
+  <int value="0" label="Nothing happened"/>
+  <int value="1"
+      label="The foreground tab contained a help article and was closed"/>
+  <int value="2"
+      label="Chrome was minimized and the foreground tab was kept open"/>
+  <int value="3"
+      label="Chrome was minimized and the foreground tab was closed"/>
+  <int value="4"
+      label="The foreground tab was closed, but Chrome stayed visible"/>
+  <int value="5" label="Error: No tab is currently being displayed"/>
+  <int value="6" label="User exited the tab switcher"/>
+  <int value="7" label="User exited fullscreen mode"/>
+  <int value="8" label="User navigated backward in the tab's history"/>
+</enum>
+
+<enum name="AndroidArmFpu" type="int">
+  <int value="0" label="No NEON support"/>
+  <int value="1" label="NEON support"/>
+</enum>
+
+<enum name="AndroidDownloadFilterType" type="int">
+  <int value="0" label="All"/>
+  <int value="1" label="Page"/>
+  <int value="2" label="Video"/>
+  <int value="3" label="Audio"/>
+  <int value="4" label="Image"/>
+  <int value="5" label="Document"/>
+  <int value="6" label="Other"/>
+</enum>
+
+<enum name="AndroidEvictionReason" type="int">
+  <int value="0" label="TabUnusedTooLong"/>
+  <int value="1" label="TabUnusedInSession"/>
+  <int value="2" label="LimitOfActiveTabs"/>
+  <int value="3" label="EvictNTabs"/>
+  <int value="4" label="EvictAll"/>
+</enum>
+
+<enum name="AndroidGATTConnectionErrorCodes" type="int">
+  <summary>
+    This list includes all errors from the Bluetooth Specification Version 4.2
+    [Vol 2, Part D] as well as an error from Android's BluetoothGatt (0x101
+    GATT_FAILURE) and an error from Bluedroid's gatt_api.h (0x100 L2CAP
+    connection cancelled).
+  </summary>
+  <int value="0" label="0x00 Success"/>
+  <int value="1" label="0x01 Unknown HCI Command"/>
+  <int value="2" label="0x02 Unknown Connection Identifier"/>
+  <int value="3" label="0x03 Hardware Failure"/>
+  <int value="4" label="0x04 Page Timeout"/>
+  <int value="5" label="0x05 Authentication Failure"/>
+  <int value="6" label="0x06 PIN or Key Missing"/>
+  <int value="7" label="0x07 Memory Capacity Exceeded"/>
+  <int value="8" label="0x08 Connection Timeout"/>
+  <int value="9" label="0x09 Connection Limit Exceeded"/>
+  <int value="10"
+      label="0x0A Synchronous Connection Limit To A Device Exceeded"/>
+  <int value="11" label="0x0B ACL Connection Already Exists"/>
+  <int value="12" label="0x0C Command Disallowed"/>
+  <int value="13" label="0x0D Connection Rejected due to Limited Resources"/>
+  <int value="14" label="0x0E Connection Rejected Due To Security Reasons"/>
+  <int value="15" label="0x0F Connection Rejected due to Unacceptable BD_ADDR"/>
+  <int value="16" label="0x10 Connection Accept Timeout Exceeded"/>
+  <int value="17" label="0x11 Unsupported Feature or Parameter Value"/>
+  <int value="18" label="0x12 Invalid HCI Command Parameters"/>
+  <int value="19" label="0x13 Remote User Terminated Connection"/>
+  <int value="20"
+      label="0x14 Remote Device Terminated Connection due to Low Resources"/>
+  <int value="21"
+      label="0x15 Remote Device Terminated Connection due to Power Off"/>
+  <int value="22" label="0x16 Connection Terminated By Local Host"/>
+  <int value="23" label="0x17 Repeated Attempts"/>
+  <int value="24" label="0x18 Pairing Not Allowed"/>
+  <int value="25" label="0x19 Unknown LMP PDU"/>
+  <int value="26"
+      label="0x1A Unsupported Remote Feature / Unsupported LMP Feature"/>
+  <int value="27" label="0x1B SCO Offset Rejected"/>
+  <int value="28" label="0x1C SCO Interval Rejected"/>
+  <int value="29" label="0x1D SCO Air Mode Rejected"/>
+  <int value="30" label="0x1E Invalid LMP Parameters / Invalid LL Parameters"/>
+  <int value="31" label="0x1F Unspecified Error"/>
+  <int value="32"
+      label="0x20 Unsupported LMP Parameter Value / Unsupported LL Parameter
+             Value"/>
+  <int value="33" label="0x21 Role Change Not Allowed"/>
+  <int value="34" label="0x22 LMP Response Timeout / LL Response Timeout"/>
+  <int value="35" label="0x23 LMP Error Transaction Collision"/>
+  <int value="36" label="0x24 LMP PDU Not Allowed"/>
+  <int value="37" label="0x25 Encryption Mode Not Acceptable"/>
+  <int value="38" label="0x26 Link Key cannot be Changed"/>
+  <int value="39" label="0x27 Requested QoS Not Supported"/>
+  <int value="40" label="0x28 Instant Passed"/>
+  <int value="41" label="0x29 Pairing With Unit Key Not Supported"/>
+  <int value="42" label="0x2A Different Transaction Collision"/>
+  <int value="43" label="0x2B Reserved"/>
+  <int value="44" label="0x2C QoS Unacceptable Parameter"/>
+  <int value="45" label="0x2D QoS Rejected"/>
+  <int value="46" label="0x2E Channel Classification Not Supported"/>
+  <int value="47" label="0x2F Insufficient Security"/>
+  <int value="48" label="0x30 Parameter Out Of Mandatory Range"/>
+  <int value="49" label="0x31 Reserved"/>
+  <int value="50" label="0x32 Role Switch Pending"/>
+  <int value="51" label="0x33 Reserved"/>
+  <int value="52" label="0x34 Reserved Slot Violation"/>
+  <int value="53" label="0x35 Role Switch Failed"/>
+  <int value="54" label="0x36 Extended Inquiry Response Too Large"/>
+  <int value="55" label="0x37 Secure Simple Pairing Not Supported By Host"/>
+  <int value="56" label="0x38 Host Busy - Pairing"/>
+  <int value="57"
+      label="0x39 Connection Rejected due to No Suitable Channel Found"/>
+  <int value="58" label="0x3A Controller Busy"/>
+  <int value="59" label="0x3B Unacceptable Connection Parameters"/>
+  <int value="60" label="0x3C Directed Advertising Timeout"/>
+  <int value="61" label="0x3D Connection Terminated due to MIC Failure"/>
+  <int value="62" label="0x3E Connection Failed to be Established"/>
+  <int value="63" label="0x3F MAC Connection Failed"/>
+  <int value="64"
+      label="0x40 Coarse Clock Adjustment Rejected but Will Try to Adjust
+             Using Clock Dragging"/>
+  <int value="133" label="Application Error 0x85, Bluedroid GATT_ERROR"/>
+  <int value="135" label="Application Error 0x87, Bluedroid GATT_PENDING"/>
+  <int value="256" label="0x100 Bluedroid L2CAP connection cancelled"/>
+  <int value="257" label="0x101 Android GATT Failure"/>
+</enum>
+
+<enum name="AndroidGATTStatusResult" type="int">
+  <summary>
+    This list includes errors from the Bluetooth Specification Version 4.2 Vol
+    3, Part F, Section 3.4.1.1 and Core Specification Supplement Part B. Also
+    Android's BluetoothGatt (0x101 GATT_FAILURE) and an error from Bluedroid's
+    gatt_api.h (0x100 L2CAP connection cancelled).
+  </summary>
+  <int value="0" label="GATT_SUCCESS"/>
+  <int value="1" label="Invalid Handle"/>
+  <int value="2" label="Read Not Permitted"/>
+  <int value="3" label="Write Not Permitted"/>
+  <int value="4" label="Invalid PDU"/>
+  <int value="5" label="Insufficient Authentication"/>
+  <int value="6" label="Request Not Supported"/>
+  <int value="7" label="Invalid Offset"/>
+  <int value="8" label="Insufficient Authorization"/>
+  <int value="9" label="Prepare Queue Full"/>
+  <int value="10" label="Attribute Not Found"/>
+  <int value="11" label="Attribute Not Long"/>
+  <int value="12" label="Insufficient Encryption Key Size"/>
+  <int value="13" label="Invalid Attribute Value Length"/>
+  <int value="14" label="Unlikely Error"/>
+  <int value="15" label="Insufficient Encryption"/>
+  <int value="16" label="Unsupported Group Type"/>
+  <int value="17" label="Insufficient Resources"/>
+  <int value="128" label="Application Error 0x80, 128"/>
+  <int value="129" label="Application Error 0x81, 129"/>
+  <int value="130" label="Application Error 0x82, 130"/>
+  <int value="131" label="Application Error 0x83, 131"/>
+  <int value="132" label="Application Error 0x84, 132"/>
+  <int value="133" label="Application Error 0x85, Bluedroid GATT_ERROR"/>
+  <int value="134" label="Application Error 0x86, 134"/>
+  <int value="135" label="Application Error 0x87, Bluedroid GATT_PENDING"/>
+  <int value="136" label="Application Error 0x88, 136"/>
+  <int value="137" label="Application Error 0x89, 137"/>
+  <int value="138" label="Application Error 0x8A, 138"/>
+  <int value="139" label="Application Error 0x8B, 139"/>
+  <int value="140" label="Application Error 0x8C, 140"/>
+  <int value="141" label="Application Error 0x8D, 141"/>
+  <int value="142" label="Application Error 0x8E, 142"/>
+  <int value="143" label="Application Error 0x8F, 143"/>
+  <int value="144" label="Application Error 0x90, 144"/>
+  <int value="145" label="Application Error 0x91, 145"/>
+  <int value="146" label="Application Error 0x92, 146"/>
+  <int value="147" label="Application Error 0x93, 147"/>
+  <int value="148" label="Application Error 0x94, 148"/>
+  <int value="149" label="Application Error 0x95, 149"/>
+  <int value="150" label="Application Error 0x96, 150"/>
+  <int value="151" label="Application Error 0x97, 151"/>
+  <int value="152" label="Application Error 0x98, 152"/>
+  <int value="153" label="Application Error 0x99, 153"/>
+  <int value="154" label="Application Error 0x9A, 154"/>
+  <int value="155" label="Application Error 0x9B, 155"/>
+  <int value="156" label="Application Error 0x9C, 156"/>
+  <int value="157" label="Application Error 0x9D, 157"/>
+  <int value="158" label="Application Error 0x9E, 158"/>
+  <int value="159" label="Application Error 0x9F, 159"/>
+  <int value="253"
+      label="Client Characteristic Configuration Descriptor Improperly
+             Configured (CSS)"/>
+  <int value="254" label="Procedure Already in Progress (CSS)"/>
+  <int value="255" label="Out of Range (CSS)"/>
+  <int value="256" label="0x100 Bluedroid L2CAP connection cancelled"/>
+  <int value="257" label="GATT_FAILURE"/>
+</enum>
+
+<enum name="AndroidKernelVersion" type="int">
+  <int value="131078" label="2.6"/>
+  <int value="196608" label="3.0"/>
+  <int value="196609" label="3.1"/>
+  <int value="196610" label="3.2"/>
+  <int value="196611" label="3.3"/>
+  <int value="196612" label="3.4"/>
+  <int value="196613" label="3.5"/>
+  <int value="196614" label="3.6"/>
+  <int value="196615" label="3.7"/>
+  <int value="196616" label="3.8"/>
+  <int value="196618" label="3.10"/>
+  <int value="196619" label="3.11"/>
+  <int value="196620" label="3.12"/>
+  <int value="196621" label="3.13"/>
+  <int value="196622" label="3.14"/>
+  <int value="196625" label="3.17"/>
+  <int value="196626" label="3.18"/>
+  <int value="196627" label="3.19"/>
+  <int value="262144" label="4.0"/>
+  <int value="262145" label="4.1"/>
+  <int value="262154" label="4.10"/>
+</enum>
+
+<enum name="AndroidManageSpaceButton" type="int">
+  <int value="0" label="Clear Unimportant Storage"/>
+  <int value="1" label="Manage Site Storage"/>
+  <int value="2" label="Clear App Data"/>
+</enum>
+
+<enum name="AndroidMemoryNotificationBackground" type="int">
+  <int value="0" label="TrimMemoryUiHidden"/>
+  <int value="1" label="TrimMemoryBackground"/>
+  <int value="2" label="TrimMemoryModerate"/>
+  <int value="3" label="TrimMemoryComplete"/>
+</enum>
+
+<enum name="AndroidMemoryNotificationForeground" type="int">
+  <int value="0" label="TrimMemoryRunningModerate"/>
+  <int value="1" label="TrimMemoryRunningLow"/>
+  <int value="2" label="TrimMemoryRunningCritical"/>
+  <int value="3" label="LowMemory"/>
+</enum>
+
+<enum name="AndroidSeccompSandboxStatus" type="int">
+  <int value="0" label="Not Supported"/>
+  <int value="1" label="Detection Failed"/>
+  <int value="2" label="Feature Disabled"/>
+  <int value="3" label="Feature Enabled"/>
+  <int value="4" label="Sandbox Engaged"/>
+</enum>
+
+<enum name="AndroidSeccompStatus" type="int">
+  <int value="0" label="Detection Failed"/>
+  <int value="1" label="Not Supported"/>
+  <int value="2" label="Supported"/>
+</enum>
+
+<enum name="AndroidSigninPromoAction" type="int">
+  <int value="0" label="Promo enabled">
+    The Android signin promo was enabled to show on next startup.
+  </int>
+  <int value="1" label="Promo shown">The Android signin promo was shown.</int>
+  <int value="2" label="Promo declined">
+    User declined the Android signin promo.
+  </int>
+  <int value="3" label="Promo accepted">
+    User completed signin through the Android signin promo flow successfully.
+  </int>
+  <int value="4" label="Promo accepted with advanced settings">
+    User completed signin through the Android signin promo flow successfully and
+    chose to configure sync settings.
+  </int>
+</enum>
+
+<enum name="AndroidTabCloseUndoToastEvent" type="int">
+  <int value="0" label="Undo Shown (Cold)"/>
+  <int value="1" label="Undo Shown (Warm)"/>
+  <int value="2" label="Undo Pressed"/>
+  <int value="3" label="Undos Dismissed (Timeout) (Deprecated)"/>
+  <int value="4" label="Undos Dismissed (Action) (Deprecated)"/>
+</enum>
+
+<enum name="AntiVirusMetricsProviderResult" type="int">
+  <int value="0" label="RESULT_SUCCESS"/>
+  <int value="1" label="RESULT_GENERIC_FAILURE"/>
+  <int value="2" label="RESULT_FAILED_TO_INITIALIZE_COM"/>
+  <int value="3" label="RESULT_FAILED_TO_CREATE_INSTANCE"/>
+  <int value="4" label="RESULT_FAILED_TO_INITIALIZE_PRODUCT_LIST"/>
+  <int value="5" label="RESULT_FAILED_TO_GET_PRODUCT_COUNT"/>
+  <int value="6" label="RESULT_FAILED_TO_GET_ITEM"/>
+  <int value="7" label="RESULT_FAILED_TO_GET_PRODUCT_STATE"/>
+  <int value="8" label="RESULT_PRODUCT_STATE_INVALID"/>
+  <int value="9" label="RESULT_FAILED_TO_GET_PRODUCT_NAME"/>
+  <int value="10" label="RESULT_FAILED_TO_GET_REMEDIATION_PATH"/>
+  <int value="11" label="RESULT_FAILED_TO_CONNECT_TO_WMI"/>
+  <int value="12" label="RESULT_FAILED_TO_SET_SECURITY_BLANKET"/>
+  <int value="13" label="RESULT_FAILED_TO_EXEC_WMI_QUERY"/>
+  <int value="14" label="RESULT_FAILED_TO_ITERATE_RESULTS"/>
+  <int value="15" label="RESULT_WSC_NOT_AVAILABLE"/>
+</enum>
+
+<enum name="AppBannersBeforeInstallEvent" type="int">
+  <int value="1" label="Event created and dispatched"/>
+  <int value="2" label="Showing the banner"/>
+  <int value="3" label="preventDefault() not called"/>
+  <int value="4" label="preventDefault() called"/>
+  <int value="5" label="prompt() called after preventDefault()"/>
+  <int value="6" label="prompt() not called after preventDefault()"/>
+</enum>
+
+<enum name="AppBannersDismissEvent" type="int">
+  <int value="41" label="Error/unknown reason for dismissal"/>
+  <int value="42" label="User opened the application after installing it"/>
+  <int value="43" label="User clicked on the banner"/>
+  <int value="44" label="(Obsolete) User swiped the banner away"/>
+  <int value="45" label="User hit the X button"/>
+  <int value="46" label="User began app install, but it didn't finish in time"/>
+  <int value="47" label="Banner was dismissed for any reason"/>
+</enum>
+
+<enum name="AppBannersDisplayEvent" type="int">
+  <int value="1" label="Banner was requested by the site"/>
+  <int value="2" label="User previously blocked the same banner"/>
+  <int value="3" label="User blocked too many other banners from the site"/>
+  <int value="4" label="Banner created"/>
+  <int value="5" label="User already installed the app"/>
+  <int value="6" label="User ignored the banner last time"/>
+  <int value="7" label="Manifest lacks a service worker"/>
+  <int value="8" label="Site hasn't been visited frequently enough"/>
+  <int value="9" label="Native app banner was requested by the site"/>
+  <int value="10" label="Web app banner was requested by the site"/>
+  <int value="11" label="Native app banner created"/>
+  <int value="12" label="Web app banner created"/>
+</enum>
+
+<enum name="AppBannersInstallableStatusCode" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Renderer exiting"/>
+  <int value="2" label="Renderer called beforeinstallprompt.preventDefault()"/>
+  <int value="3" label="User navigated before the banner was shown"/>
+  <int value="4" label="Site not loaded in main frame"/>
+  <int value="5" label="Site not served from a secure origin"/>
+  <int value="6" label="Site did not provide a manifest link"/>
+  <int value="7" label="Manifest was empty or could not be parsed"/>
+  <int value="8" label="Manifest start_url not valid"/>
+  <int value="9" label="Manifest missing name or short_name"/>
+  <int value="10" label="Manifest display not supported"/>
+  <int value="11" label="Manifest missing suitable icon"/>
+  <int value="12" label="No matching service worker"/>
+  <int value="13" label="Could not select suitable icon to download"/>
+  <int value="14" label="Could not download selected icon"/>
+  <int value="15" label="Downloaded icon was empty"/>
+  <int value="16" label="Application platform not supported on Android"/>
+  <int value="17" label="No native app id specified"/>
+  <int value="18" label="URL and manifest specified different native app ids"/>
+  <int value="19" label="Site is already installed"/>
+  <int value="20" label="Insufficient engagement"/>
+  <int value="21" label="Package name or start_url empty"/>
+  <int value="22" label="Banner was previously blocked by the user"/>
+  <int value="23" label="Banner was previously ignored by the user"/>
+  <int value="24" label="Native app banner shown"/>
+  <int value="25" label="Web app banner shown"/>
+  <int value="26" label="Site eligible, but banner creation failed."/>
+</enum>
+
+<enum name="AppBannersInstallEvent" type="int">
+  <int value="21" label="(Native app) User triggered the app install dialog"/>
+  <int value="22" label="(Native app) User began installing the app"/>
+  <int value="23"
+      label="(Native app) User waited for the app to finish installing"/>
+  <int value="24" label="(Web app) User installed a web app"/>
+</enum>
+
+<enum name="AppBannersUserResponse" type="int">
+  <int value="1" label="Native app banner was accepted by the user"/>
+  <int value="2" label="Web app banner was accepted by the user"/>
+  <int value="3" label="Native app banner was dismissed by the user"/>
+  <int value="4" label="Web app banner was dismissed by the user"/>
+  <int value="5" label="Native app banner was ignored by the user"/>
+  <int value="6" label="Web app banner was ignored by the user"/>
+</enum>
+
+<enum name="AppCacheCheckResponseResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Manifest obsolete"/>
+  <int value="2" label="Response obsolete"/>
+  <int value="3" label="Entry not found"/>
+  <int value="4" label="Read headers error"/>
+  <int value="5" label="Read data error"/>
+  <int value="6" label="Unexpected size"/>
+  <int value="7" label="Check canceled"/>
+</enum>
+
+<enum name="AppCacheErrorSite" type="int">
+  <summary>Identifies the point of failure, see sources.</summary>
+</enum>
+
+<enum name="AppCacheInitResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="SQL Database Error"/>
+  <int value="2" label="Disk Cache Error"/>
+</enum>
+
+<enum name="AppCacheUpdateJobResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="SQL Database Error"/>
+  <int value="2" label="Disk Cache Error"/>
+  <int value="3" label="Quota Error"/>
+  <int value="4" label="Redirect Error"/>
+  <int value="5" label="Manifest Error"/>
+  <int value="6" label="Network Error"/>
+  <int value="7" label="Server Error"/>
+  <int value="8" label="Cancelled"/>
+  <int value="9" label="Security Error"/>
+</enum>
+
+<enum name="AppInfoDialogLaunchOrigin" type="int">
+  <int value="0" label="App List context menu"/>
+  <int value="1" label="Extensions page"/>
+  <int value="2" label="Apps Page context menu"/>
+</enum>
+
+<enum name="AppLaunch" type="int">
+  <int value="0" label="NTP_APPS_MAXIMIZED"/>
+  <int value="1" label="NTP_APPS_COLLAPSED"/>
+  <int value="2" label="NTP_APPS_MENU"/>
+  <int value="3" label="NTP_MOST_VISITED"/>
+  <int value="4" label="NTP_RECENTLY_CLOSED"/>
+  <int value="5" label="BOOKMARK_BAR"/>
+  <int value="6" label="CONTENT_NAVIGATION"/>
+  <int value="7" label="SESSION_RESTORE"/>
+  <int value="8" label="AUTOLAUNCH"/>
+  <int value="9" label="OMNIBOX_APP"/>
+  <int value="10" label="OMNIBOX_LOCATION"/>
+  <int value="11" label="OMNIBOX_INSTANT"/>
+  <int value="12" label="EXTENSION_API"/>
+  <int value="13" label="CMD_LINE_APP"/>
+  <int value="14" label="CMD_LINE_URL"/>
+  <int value="15" label="NTP_WEBSTORE"/>
+  <int value="16" label="NTP_APP_RE_ENABLE"/>
+  <int value="17" label="CMD_LINE_APP_LEGACY"/>
+  <int value="18" label="NTP_WEBSTORE_FOOTER"/>
+  <int value="19" label="NTP_WEBSTORE_PLUS_ICON"/>
+  <int value="20" label="APP_LIST_MAIN"/>
+  <int value="21" label="APP_LIST_SEARCH"/>
+  <int value="22" label="APP_LIST_MAIN_CHROME"/>
+  <int value="23" label="APP_LIST_MAIN_WEBSTORE"/>
+  <int value="24" label="APP_LIST_SEARCH_CHROME"/>
+  <int value="25" label="APP_LIST_SEARCH_WEBSTORE"/>
+</enum>
+
+<enum name="AppLaunchContainer" type="int">
+  <int value="0" label="LAUNCH_CONTAINER_WINDOW"/>
+  <int value="1" label="LAUNCH_CONTAINER_PANEL"/>
+  <int value="2" label="LAUNCH_CONTAINER_TAB"/>
+  <int value="3" label="LAUNCH_CONTAINER_NONE (v2 packaged apps)"/>
+</enum>
+
+<enum name="AppLauncherPromo" type="int">
+  <int value="0" label="Already installed"/>
+  <int value="1" label="Shown"/>
+  <int value="2" label="Dismissed"/>
+  <int value="3" label="Learn more"/>
+</enum>
+
+<enum name="AppLaunchSource" type="int">
+  <int value="0" label="LAUNCH_SOURCE_NONE"/>
+  <int value="1" label="LAUNCH_SOURCE_UNTRACKED"/>
+  <int value="2" label="LAUNCH_SOURCE_APP_LAUNCHER"/>
+  <int value="3" label="LAUNCH_SOURCE_NEW_TAB_PAGE"/>
+  <int value="4" label="LAUNCH_SOURCE_RELOAD"/>
+  <int value="5" label="LAUNCH_SOURCE_RESTART"/>
+  <int value="6" label="LAUNCH_SOURCE_LOAD_AND_LAUNCH"/>
+  <int value="7" label="LAUNCH_SOURCE_COMMAND_LINE"/>
+  <int value="8" label="LAUNCH_SOURCE_FILE_HANDLER"/>
+  <int value="9" label="LAUNCH_SOURCE_URL_HANDLER"/>
+  <int value="10" label="LAUNCH_SOURCE_SYSTEM_TRAY"/>
+  <int value="11" label="LAUNCH_SOURCE_ABOUT_PAGE"/>
+  <int value="12" label="LAUNCH_SOURCE_KEYBOARD"/>
+  <int value="13" label="LAUNCH_SOURCE_EXTENSIONS_PAGE"/>
+  <int value="14" label="LAUNCH_SOURCE_MANAGEMENT_API"/>
+  <int value="15" label="LAUNCH_SOURCE_EPHEMERAL_APP"/>
+  <int value="16" label="LAUNCH_SOURCE_BACKGROUND"/>
+  <int value="17" label="LAUNCH_SOURCE_KIOSK"/>
+  <int value="18" label="LAUNCH_SOURCE_CHROME_INTERNAL"/>
+  <int value="19" label="LAUNCH_SOURCE_TEST"/>
+  <int value="20" label="LAUNCH_SOURCE_INSTALLED_NOTIFICATION"/>
+</enum>
+
+<enum name="AppleScriptCommandEvents" type="int">
+  <int value="0" label="Tab Close"/>
+  <int value="1" label="Tab Copy"/>
+  <int value="2" label="Tab Cut"/>
+  <int value="3" label="Tab Execute Javascript"/>
+  <int value="4" label="Tab Go Back"/>
+  <int value="5" label="Tab Go Forward"/>
+  <int value="6" label="Tab Paste"/>
+  <int value="7" label="Tab Print"/>
+  <int value="8" label="Tab Redo"/>
+  <int value="9" label="Tab Reload"/>
+  <int value="10" label="Tab Save"/>
+  <int value="11" label="Tab Select All"/>
+  <int value="12" label="Tab Stop"/>
+  <int value="13" label="Tab Undo"/>
+  <int value="14" label="Tab View Source"/>
+  <int value="15" label="Window Close"/>
+  <int value="16" label="Window Enter Presentation Mode"/>
+  <int value="17" label="Window Exit Presentation Mode"/>
+</enum>
+
+<enum name="AppListDoodleAction" type="int">
+  <int value="0" label="DOODLE_SHOWN"/>
+  <int value="1" label="DOODLE_CLICKED"/>
+</enum>
+
+<enum name="AppListEnableSource" type="int">
+  <int value="0" label="Not enabled (should never be recorded)"/>
+  <int value="1" label="Packaged app installed from Web Store"/>
+  <int value="2" label="Clicked app launcher link from the Web Store"/>
+  <int value="3" label="Command line flag"/>
+  <int value="4" label="Chrome reinstalled over old, enabled profile"/>
+  <int value="5" label="Second packaged app installed without showing"/>
+</enum>
+
+<enum name="AppListPage" type="int">
+  <int value="0" label="APPS"/>
+  <int value="1" label="SEARCH_RESULTS"/>
+  <int value="2" label="START"/>
+  <int value="3" label="CUSTOM_LAUNCHER_PAGE"/>
+</enum>
+
+<enum name="AppListSearchResult" type="int">
+  <int value="0" label="OMNIBOX"/>
+  <int value="1" label="APP"/>
+  <int value="2" label="WEBSTORE"/>
+  <int value="3" label="SEARCH_WEBSTORE"/>
+  <int value="4" label="SEARCH_PEOPLE"/>
+  <int value="5" label="SUGGESTION"/>
+  <int value="6" label="LAUNCHER_SEARCH_PROVIDER"/>
+</enum>
+
+<enum name="AppListSearchResultDisplayType" type="int">
+  <int value="0" label="NONE"/>
+  <int value="1" label="LIST"/>
+  <int value="2" label="TILE"/>
+  <int value="3" label="RECOMMENDATION"/>
+</enum>
+
+<enum name="AppLoadedInTabSource" type="int">
+  <int value="0" label="SOURCE_APP"/>
+  <int value="1" label="SOURCE_BACKGROUND_PAGE"/>
+</enum>
+
+<enum name="AppLocation" type="int">
+  <int value="0" label="Invalid location"/>
+  <int value="1" label="Internal extension"/>
+  <int value="2" label="Internal extension (loaded via prefs)"/>
+  <int value="3" label="Internal extension (loaded via the registry)"/>
+  <int value="4" label="Unpacked extension"/>
+  <int value="5" label="Component app"/>
+  <int value="6" label="External extension (downloaded via prefs)"/>
+  <int value="7" label="External extension (downloaded via admin policies)"/>
+  <int value="8" label="Command-line extension"/>
+  <int value="9" label="External extension (loaded via prefs and cached)"/>
+  <int value="10" label="Component app (downloaded)"/>
+</enum>
+
+<enum name="AppPromoAction" type="int">
+  <int value="0" label="PROMO_LAUNCH_APP"/>
+  <int value="1" label="PROMO_LAUNCH_WEB_STORE"/>
+  <int value="2" label="PROMO_CLOSE"/>
+  <int value="3" label="PROMO_EXPIRE"/>
+  <int value="4" label="PROMO_SEEN"/>
+</enum>
+
+<enum name="AppsPageDragSource" type="int">
+  <int value="0" label="Same apps pane"/>
+  <int value="1" label="Different apps pane"/>
+  <int value="2" label="Most visited pane"/>
+  <int value="3" label="Bookmarks pane"/>
+  <int value="4" label="Outside of NTP (e.g. bookmarks bar)"/>
+</enum>
+
+<enum name="ArcIntentHandlerAction" type="int">
+  <summary>Defines Arc intent handler actions</summary>
+  <int value="0" label="Error"/>
+  <int value="1" label="Dialog deactivated"/>
+  <int value="2" label="Always"/>
+  <int value="3" label="Just once"/>
+  <int value="4" label="Preferred activity found"/>
+</enum>
+
+<enum name="ArcIntentHandlerDestinationPlatform" type="int">
+  <summary>
+    Defines ARC intent handler platforms to continue the navigation.
+  </summary>
+  <int value="0" label="ARC"/>
+  <int value="1" label="Chrome"/>
+</enum>
+
+<enum name="ArcOptInAction" type="int">
+  <summary>Defines Arc OptIn actions</summary>
+  <int value="0" label="Opted Out"/>
+  <int value="1" label="Opted In"/>
+  <int value="2" label="Notification accepted"/>
+  <int value="3" label="Notification declined"/>
+  <int value="4" label="Notification timed out"/>
+  <int value="5" label="Retry after OptIn failure"/>
+</enum>
+
+<enum name="ArcOptInCancel" type="int">
+  <summary>Defines Arc OptIn cancel reason</summary>
+  <int value="0" label="Canceled by user"/>
+  <int value="1" label="Unclassified failure"/>
+  <int value="2" label="Network failure"/>
+  <int value="3" label="GMS Services are not available"/>
+  <int value="4" label="DEPRECATED: Bad authentication returned by server"/>
+  <int value="5" label="DEPRECATED: GMS Core is not available"/>
+  <int value="6" label="Cloud provision flow failed"/>
+  <int value="7" label="Android Management required"/>
+</enum>
+
+<enum name="ArcProvisioningResult" type="int">
+  <summary>Defines Arc Provisioning success and failure reasons</summary>
+  <int value="0" label="Success"/>
+  <int value="1" label="Unclassified failure"/>
+  <int value="2" label="GMS Network failure"/>
+  <int value="3" label="GMS Services are not available"/>
+  <int value="4" label="GMS Bad authentication returned by server"/>
+  <int value="5" label="GMS check-in was failed"/>
+  <int value="6" label="Cloud provision flow failed"/>
+  <int value="7" label="Mojo version mistmached"/>
+  <int value="8" label="Mojo call timeout"/>
+  <int value="9" label="GMS check-in was timed out"/>
+  <int value="10" label="GMS check-in reported internal error"/>
+  <int value="11" label="GMS core sign in procedure was failed"/>
+  <int value="12" label="GMS core sign in procedure was timed out"/>
+  <int value="13" label="GMS core sign in procedure reporeted internal error"/>
+  <int value="14" label="Cloud provision flow was timed out"/>
+  <int value="15" label="Cloud provision flow reporeted internal error"/>
+  <int value="16" label="ARC instance is stopped before complete provisioning"/>
+  <int value="17" label="Overall sign in timeout"/>
+</enum>
+
+<enum name="AsyncDNSConfigParsePosix" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="RES_INIT_FAILED"/>
+  <int value="2" label="RES_INIT_UNSET"/>
+  <int value="3" label="BAD_ADDRESS"/>
+  <int value="4" label="BAD_EXT_STRUCT"/>
+  <int value="5" label="NULL_ADDRESS"/>
+  <int value="6" label="NO_NAMESERVERS"/>
+  <int value="7" label="MISSING_OPTIONS"/>
+  <int value="8" label="UNHANDLED_OPTIONS"/>
+</enum>
+
+<enum name="AsyncDNSConfigParseWin" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="READ_IPHELPER"/>
+  <int value="2" label="READ_POLICY_SEARCHLIST"/>
+  <int value="3" label="READ_TCPIP_SEARCHLIST"/>
+  <int value="4" label="READ_DOMAIN"/>
+  <int value="5" label="READ_POLICY_DEVOLUTION"/>
+  <int value="6" label="READ_DNSCACHE_DEVOLUTION"/>
+  <int value="7" label="READ_TCPIP_DEVOLUTION"/>
+  <int value="8" label="READ_APPEND_MULTILABEL"/>
+  <int value="9" label="READ_PRIMARY_SUFFIX"/>
+  <int value="10" label="BAD_ADDRESS"/>
+  <int value="11" label="NO_NAMESERVERS"/>
+  <int value="12" label="UNHANDLED_OPTIONS"/>
+</enum>
+
+<enum name="AsyncDNSHostsParseWin" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="UNREADABLE_HOSTS_FILE"/>
+  <int value="2" label="COMPUTER_NAME_FAILED"/>
+  <int value="3" label="IPHELPER_FAILED"/>
+  <int value="4" label="BAD_ADDRESS"/>
+</enum>
+
+<enum name="AsyncDNSNameServersType" type="int">
+  <summary>Type of nameservers in the DNS config.</summary>
+  <int value="0" label="NONE">No nameservers configured.</int>
+  <int value="1" label="GOOGLE_PUBLIC_DNS">
+    All nameservers are Google Public DNS servers.
+  </int>
+  <int value="2" label="PUBLIC">
+    All nameservers have public IP addresses (and aren't Google Public DNS
+    servers).
+  </int>
+  <int value="3" label="PRIVATE">
+    All nameservers have private IP addresses (loopback, link-local, or RFC
+    1918).
+  </int>
+  <int value="4" label="MIXED">
+    Nameservers are a mix of types (Google Public DNS, public, private).
+  </int>
+</enum>
+
+<enum name="AsyncDNSParseResult" type="int">
+  <summary>Results of DnsResponse::ParseToAddressList.</summary>
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="MALFORMED_RESPONSE"/>
+  <int value="2" label="MALFORMED_CNAME"/>
+  <int value="3" label="NAME_MISMATCH"/>
+  <int value="4" label="SIZE_MISMATCH"/>
+  <int value="5" label="CNAME_AFTER_ADDRESS"/>
+  <int value="6" label="ADDRESS_TTL_MISMATCH"/>
+  <int value="7" label="NO_ADDRESSES"/>
+</enum>
+
+<enum name="AsyncDNSPrefDefaultSource" type="int">
+  <int value="0" label="PLATFORM"/>
+  <int value="1" label="FIELD_TRIAL"/>
+  <int value="2" label="HARD_CODED_DEFAULT"/>
+</enum>
+
+<enum name="AsyncDNSPrefSource" type="int">
+  <int value="0" label="MANAGED_PREF"/>
+  <int value="1" label="SUPERVISED_PREF"/>
+  <int value="2" label="EXTENSION_PREF"/>
+  <int value="3" label="COMMAND_LINE_PREF"/>
+  <int value="4" label="USER_PREF"/>
+  <int value="5" label="RECOMMENDED_PREF"/>
+  <int value="6" label="DEFAULT_PREF"/>
+  <int value="7" label="UNKNOWN_PREF"/>
+</enum>
+
+<enum name="AsyncDNSResolveStatus" type="int">
+  <int value="0" label="DNS_SUCCESS">Succeeded with async DNS.</int>
+  <int value="1" label="PROC_SUCCESS">
+    Succeeded with getaddrinfo after async DNS failed.
+  </int>
+  <int value="2" label="FAIL">Both async DNS and getaddrinfo failed.</int>
+  <int value="3" label="SUSPECT_NETBIOS">
+    Same as PROC_SUCCESS except the hostname fits NetBIOS name criteria.
+  </int>
+</enum>
+
+<enum name="AsyncDNSWatchStatus" type="int">
+  <int value="0" label="STARTED">Started.</int>
+  <int value="1" label="FAILED_TO_START_CONFIG">
+    Failed to start watching config.
+  </int>
+  <int value="2" label="FAILED_TO_START_HOSTS">
+    Failed to start watching HOSTS.
+  </int>
+  <int value="3" label="FAILED_CONFIG">Failed during watching config.</int>
+  <int value="4" label="FAILED_HOSTS">Failed during watching HOSTS.</int>
+</enum>
+
+<enum name="AsyncRevalidationResult" type="int">
+  <int value="0" label="LOADED">A new entry was stored in the cache.</int>
+  <int value="1" label="REVALIDATED">
+    The existing cache entry was revalidated.
+  </int>
+  <int value="2" label="NET_ERROR">
+    An error occurred before a response was received.
+  </int>
+  <int value="3" label="READ_ERROR">
+    An error occurred while reading the response body.
+  </int>
+  <int value="4" label="GOT_REDIRECT">A redirect response was received.</int>
+  <int value="5" label="AUTH_FAILED">
+    A request for authentication was received, and no cached credentials were
+    available.
+  </int>
+  <int value="6" label="RESPONSE_TIMEOUT">
+    Timed out before a response was received.
+  </int>
+  <int value="7" label="BODY_TIMEOUT">
+    Timed out while reading the response body.
+  </int>
+</enum>
+
+<enum name="AttachmentServicesResult" type="int">
+  <int value="0" label="Succeeded with MOTW"/>
+  <int value="1" label="Succeeded without MOTW"/>
+  <int value="2" label="Succeeded but file was missing"/>
+  <int value="3" label="Failed to instantiate CLSID_AttachmentServices"/>
+  <int value="4" label="Failed while invoking IAE setter"/>
+  <int value="5" label="Blocked (file exists)"/>
+  <int value="6" label="Blocked (file missing)"/>
+  <int value="7" label="Virus infected (file exists)"/>
+  <int value="8" label="Virus infected (file missing)"/>
+  <int value="9" label="Access denied (file exists)"/>
+  <int value="10" label="Access denied (file missing)"/>
+  <int value="11" label="Other error (file exists)"/>
+  <int value="12" label="Other error (file missing)"/>
+</enum>
+
+<enum name="AudioCodec" type="int">
+  <int value="0" label="kUnknownAudioCodec"/>
+  <int value="1" label="kCodecAAC"/>
+  <int value="2" label="kCodecMP3"/>
+  <int value="3" label="kCodecPCM"/>
+  <int value="4" label="kCodecVorbis"/>
+  <int value="5" label="kCodecFLAC"/>
+  <int value="6" label="kCodecAMR_NB"/>
+  <int value="7" label="kCodecAMR_WB"/>
+  <int value="8" label="kCodecPCM_MULAW"/>
+  <int value="9" label="kCodecGSM_MS"/>
+  <int value="10" label="kCodecPCM_S16BE"/>
+  <int value="11" label="kCodecPCM_S24BE"/>
+  <int value="12" label="kCodecOpus"/>
+  <int value="13" label="kCodecEAC3"/>
+  <int value="14" label="kCodecPCM_ALAW"/>
+  <int value="15" label="kCodecALAC"/>
+  <int value="16" label="kCodecAC3"/>
+</enum>
+
+<enum name="AudioDevicePropertyResult" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Device has changed"/>
+  <int value="2" label="IO stopped abnormally"/>
+  <int value="3" label="Hog mode"/>
+  <int value="4" label="Buffer frame size"/>
+  <int value="5" label="Buffer frame size range"/>
+  <int value="6" label="Stream configuration"/>
+  <int value="7" label="Actual sample rate"/>
+  <int value="8" label="Nominal sample rate"/>
+  <int value="9" label="Device is running somewhere"/>
+  <int value="10" label="Device is running"/>
+  <int value="11" label="Device is alive"/>
+  <int value="12" label="Stream physical format"/>
+  <int value="13" label="Jack is connected"/>
+  <int value="14" label="Processor overload"/>
+  <int value="15" label="Data sources"/>
+  <int value="16" label="Data source"/>
+  <int value="17" label="Volume decibels"/>
+  <int value="18" label="Volume scalar"/>
+  <int value="19" label="Mute"/>
+  <int value="20" label="Plugin"/>
+  <int value="21" label="Uses variable buffer fram sizes"/>
+  <int value="22" label="IO cycle usage"/>
+  <int value="23" label="IO proc stream usage"/>
+  <int value="24" label="Configuration application"/>
+  <int value="25" label="Device UID"/>
+  <int value="26" label="Mode UID"/>
+  <int value="27" label="Transport type"/>
+  <int value="28" label="Related devices"/>
+  <int value="29" label="Clock domain"/>
+  <int value="30" label="Device can be default device"/>
+  <int value="31" label="Device can be default system device"/>
+  <int value="32" label="Latency"/>
+  <int value="33" label="Streams"/>
+  <int value="34" label="Control list"/>
+  <int value="35" label="Safety offset"/>
+  <int value="36" label="Available nominal sample rates"/>
+  <int value="37" label="Icon"/>
+  <int value="38" label="Is hidden"/>
+  <int value="39" label="Preferred channels for stereo"/>
+  <int value="40" label="Preferred channel layout"/>
+  <int value="41" label="Volume range decibels"/>
+  <int value="42" label="Volume scalar to decibels"/>
+  <int value="43" label="Volume decibel to scalar"/>
+  <int value="44" label="Stereo pan"/>
+  <int value="45" label="Stereo pan channels"/>
+  <int value="46" label="Solo"/>
+  <int value="47" label="Phantom power"/>
+  <int value="48" label="Phase invert"/>
+  <int value="49" label="Clip light"/>
+  <int value="50" label="Talkback"/>
+  <int value="51" label="Listenback"/>
+  <int value="52" label="Clock source"/>
+  <int value="53" label="Clock sources"/>
+  <int value="54" label="Sub mute"/>
+</enum>
+
+<enum name="AudioFramesPerBuffer" type="int">
+  <obsolete>
+    Removed from code Sep 2014.
+  </obsolete>
+  <int value="0" label="k160"/>
+  <int value="1" label="k320"/>
+  <int value="2" label="k440"/>
+  <int value="3" label="k480"/>
+  <int value="4" label="k640"/>
+  <int value="5" label="k880"/>
+  <int value="6" label="k960"/>
+  <int value="7" label="k1440"/>
+  <int value="8" label="k1920"/>
+</enum>
+
+<enum name="AudioGlitchResult" type="int">
+  <int value="0" label="No audio glitches"/>
+  <int value="1" label="Audio glitches"/>
+</enum>
+
+<enum name="AudioInputSilenceReport" type="int">
+  <int value="0" label="No measurement"/>
+  <int value="1" label="Only audio"/>
+  <int value="2" label="Only silence"/>
+  <int value="3" label="Audio and silence"/>
+</enum>
+
+<enum name="AudioRendererEvents" type="int">
+  <int value="0" label="Initialized"/>
+  <int value="1" label="Runtime error"/>
+</enum>
+
+<enum name="AudioSampleFormat" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Unsigned 8-bit"/>
+  <int value="2" label="Signed 16-bit"/>
+  <int value="3" label="Signed 32-bit"/>
+  <int value="4" label="Float 32-bit"/>
+  <int value="5" label="Signed 16-bit planar"/>
+  <int value="6" label="Float 32-bit planar"/>
+</enum>
+
+<enum name="AudioSampleRate" type="int">
+  <int value="0" label="8 kHz"/>
+  <int value="1" label="16 kHz"/>
+  <int value="2" label="32 kHz"/>
+  <int value="3" label="48 kHz"/>
+  <int value="4" label="96 kHz"/>
+  <int value="5" label="11.025 kHz"/>
+  <int value="6" label="22.05 kHz"/>
+  <int value="7" label="44.1 kHz"/>
+  <int value="8" label="88.2 kHz"/>
+  <int value="9" label="176.4 kHz"/>
+  <int value="10" label="192 kHz"/>
+  <int value="11" label="24 kHz"/>
+  <int value="12" label="384 kHz"/>
+</enum>
+
+<enum name="AudioThreadStatus" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Started"/>
+  <int value="2" label="Hung"/>
+  <int value="3" label="Recovered"/>
+</enum>
+
+<enum name="AudioTrackProcessingStates" type="int">
+  <int value="0" label="Enabled"/>
+  <int value="1" label="Disabled"/>
+  <int value="2" label="Processing in WebRTC"/>
+</enum>
+
+<enum name="AutocheckoutBubble" type="int">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <int value="0" label="Created"/>
+  <int value="1" label="Accepted"/>
+  <int value="2" label="Dismissed"/>
+  <int value="3" label="Ignored"/>
+  <int value="4" label="Could be displayed"/>
+</enum>
+
+<enum name="AutocheckoutBuyFlow" type="int">
+  <obsolete>
+    Deprecated as of 8/2013.
+  </obsolete>
+  <int value="0" label="Started"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="Missing field mappings"/>
+  <int value="3" label="Missing advance element"/>
+  <int value="4" label="Cannot proceed"/>
+</enum>
+
+<enum name="AutofillCardUploadDecision" type="int">
+  <obsolete>
+    Deprecated as of 2/2016, replaced by AutofillCardUploadDecisionExpanded.
+  </obsolete>
+  <int value="0" label="Upload offered"/>
+  <int value="1" label="Upload not offered, no CVC detected"/>
+  <int value="2" label="Upload not offered, no valid address available"/>
+  <int value="3" label="Upload not offered, get upload details RPC failed"/>
+</enum>
+
+<enum name="AutofillCardUploadDecisionExpanded" type="int">
+  <int value="0" label="Upload offered"/>
+  <int value="1" label="Upload not offered, no CVC detected"/>
+  <int value="2" label="Upload not offered, no address available"/>
+  <int value="3" label="Upload not offered, no name available"/>
+  <int value="4"
+      label="Upload not offered, addresses had conflicting zip codes"/>
+  <int value="5" label="Upload not offered, no zip code available"/>
+  <int value="6" label="Upload not offered, get upload details RPC failed"/>
+  <int value="7"
+      label="Upload not offered, card and/or addresses had conflicting names"/>
+</enum>
+
+<enum name="AutofillCreditCardInfoBar" type="int">
+  <int value="0" label="Shown"/>
+  <int value="1" label="Accepted"/>
+  <int value="2" label="Denied"/>
+  <int value="3" label="Ignored"/>
+</enum>
+
+<enum name="AutofillDeveloperEngagement" type="int">
+  <int value="0" label="Fillable form parsed"/>
+  <int value="1" label="Includes type hints"/>
+</enum>
+
+<enum name="AutofillDialogDismissalState" type="int">
+  <int value="0" label="Submitted, existing data (deprecated)"/>
+  <int value="1" label="Submitted, saved to Wallet"/>
+  <int value="2" label="Submitted, saved locally"/>
+  <int value="3" label="Submitted, no save"/>
+  <int value="4" label="Canceled, no edits"/>
+  <int value="5" label="Canceled, no invalid fields"/>
+  <int value="6" label="Canceled, 1+ invalid fields"/>
+  <int value="7" label="Canceled during sign-in"/>
+  <int value="8" label="Submitted, existing data came from Wallet"/>
+  <int value="9" label="Submitted, existing data came from Autofill"/>
+</enum>
+
+<enum name="AutofillDialogInitialUserState" type="int">
+  <int value="0" label="Not signed in, no Autofill"/>
+  <int value="1" label="Not signed in, has Autofill"/>
+  <int value="2" label="Signed in, no Wallet, no Autofill"/>
+  <int value="3" label="Signed in, no Wallet, has Autofill"/>
+  <int value="4" label="Signed in, has Wallet, no Autofill"/>
+  <int value="5" label="Signed in, ha Wallet, has Autofill"/>
+</enum>
+
+<enum name="AutofillDialogPopupEvent" type="int">
+  <int value="0" label="Popup shown"/>
+  <int value="1" label="Form Autofilled"/>
+</enum>
+
+<enum name="AutofillDialogSecurity" type="int">
+  <int value="0" label="Baseline: Dialog shown"/>
+  <int value="1" label="Credit card over HTTP"/>
+  <int value="2" label="Cross-origin frame"/>
+</enum>
+
+<enum name="AutofillDialogUiEvents" type="int">
+  <int value="0" label="Dialog shown"/>
+  <int value="1" label="Dialog submitted"/>
+  <int value="2" label="Dialog canceled"/>
+  <int value="3"
+      label="Account switched: Wallet-&gt;Autofill (M35+: user actions only)"/>
+  <int value="4" label="Account switched: Autofill-&gt;Wallet"/>
+  <int value="5" label="Account switched: Wallet-&gt;Wallet"/>
+  <int value="6" label="Sign-in UI shown"/>
+  <int value="7" label="Selected different email suggestion"/>
+  <int value="8" label="Selected different billing suggestion"/>
+  <int value="9" label="Selected different cc+billing suggestion"/>
+  <int value="10" label="Selected different shipping suggestion"/>
+  <int value="11" label="Selected different cc suggestion"/>
+  <int value="12" label="Showed edit UI for email"/>
+  <int value="13" label="Showed edit UI for billing"/>
+  <int value="14" label="Showed edit UI for cc+billing"/>
+  <int value="15" label="Showed edit UI for shipping"/>
+  <int value="16" label="Showed edit UI for cc"/>
+  <int value="17" label="Selected 'Add email' suggestion"/>
+  <int value="18" label="Selected 'Add billing' suggestion"/>
+  <int value="19" label="Selected 'Add cc+billing' suggestion"/>
+  <int value="20" label="Selected 'Add shipping' suggestion"/>
+  <int value="21" label="Selected 'Add cc' suggestion"/>
+  <int value="22" label="Account switched: Wallet account added (multilogin)"/>
+</enum>
+
+<enum name="AutofillExperimentId" type="int">
+  <int value="0" label="No Experiment"/>
+  <int value="1" label="Unknown"/>
+  <int value="2" label="ar06"/>
+  <int value="3" label="ar1"/>
+  <int value="4" label="ar2"/>
+  <int value="5" label="ar4"/>
+  <int value="6" label="ar05wlr15"/>
+  <int value="7" label="ar05wlr25"/>
+  <int value="8" label="ar05wlr25fs5"/>
+  <int value="9" label="tbar1"/>
+  <int value="10" label="ar04wr3fs4"/>
+  <int value="11" label="No Server Response"/>
+  <int value="12" label="fp05"/>
+  <int value="13" label="fp025"/>
+  <int value="14" label="fp05cc03"/>
+  <int value="15" label="fp05cco03"/>
+  <int value="16" label="fp05cco03cstd"/>
+  <int value="17" label="fp05cc03e1"/>
+</enum>
+
+<enum name="AutofillFormEvent" type="int">
+  <int value="0" label="Interacted (once)"/>
+  <int value="1" label="Suggestions shown"/>
+  <int value="2" label="Suggestions shown (once)"/>
+  <int value="3" label="Local suggestion filled"/>
+  <int value="4" label="Server suggestion filled"/>
+  <int value="5" label="Masked server card suggestion filled"/>
+  <int value="6" label="Local suggestion filled (once)"/>
+  <int value="7" label="Server suggestion filled (once)"/>
+  <int value="8" label="Masked server card suggestion filled (once)"/>
+  <int value="9" label="Submitted with no suggestion filled (once)"/>
+  <int value="10" label="Submitted with local suggestion filled (once)"/>
+  <int value="11" label="Submitted with server suggestion filled (once)"/>
+  <int value="12"
+      label="Submitted with masked server card suggestion filled (once)"/>
+  <int value="13" label="Masked server card suggestion selected">
+    The user selected a masked server card that triggered an unmask attempt.
+  </int>
+  <int value="14" label="Masked server card suggestion selected (once)">
+    The user selected a masked server card that triggered an unmask attempt at
+    least once.
+  </int>
+  <int value="15"
+      label="About to be submitted with no suggestion filled (once)"/>
+  <int value="16"
+      label="About to be submitted with local suggestion filled (once)"/>
+  <int value="17"
+      label="About to be submitted with server suggestion filled (once)"/>
+  <int value="18"
+      label="About to be submitted with masked server card suggestion filled
+             (once)"/>
+</enum>
+
+<enum name="AutofillFormSubmittedState" type="int">
+  <int value="0" label="Non fillable form or new data"/>
+  <int value="1" label="Fillable form, autofilled all"/>
+  <int value="2" label="Fillable form, autofilled some"/>
+  <int value="3" label="Fillable form, autofilled none, did show suggestions"/>
+  <int value="4"
+      label="Fillable form, autofilled none, did not show suggestions"/>
+</enum>
+
+<enum name="AutofillGetRealPanResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Retriable failure"/>
+  <int value="2" label="Non retriable failure"/>
+  <int value="3" label="Network error"/>
+</enum>
+
+<enum name="AutofillKeyboardAccessoryButtonsIOS" type="int">
+  <int value="0" label="Forms loaded"/>
+  <int value="1" label="Submitted form"/>
+  <int value="2" label="Close button pressed"/>
+  <int value="3" label="Close button pressed (once)"/>
+  <int value="4" label="Next button pressed"/>
+  <int value="5" label="Next button pressed (once)"/>
+  <int value="6" label="Previous button pressed"/>
+  <int value="7" label="Previous button pressed (once)"/>
+</enum>
+
+<enum name="AutofillMacAddressBook" type="int">
+  <int value="0" label="Showed popup entry"/>
+  <int value="1" label="Selected popup entry"/>
+</enum>
+
+<enum name="AutofillProfileAction" type="int">
+  <int value="0" label="Existing profile used"/>
+  <int value="1" label="Existing profile updated"/>
+  <int value="2" label="New profile created"/>
+</enum>
+
+<enum name="AutofillQuality" type="int">
+  <int value="0" label="Submitted"/>
+  <int value="1" label="Autofilled"/>
+  <int value="2" label="Autofill failed"/>
+  <int value="3" label="Heuristic Unknown"/>
+  <int value="4" label="Heuristic Match"/>
+  <int value="5" label="Heuristic Mismatch"/>
+  <int value="6" label="Server Unknown"/>
+  <int value="7" label="Server Match"/>
+  <int value="8" label="Server Mismatch"/>
+</enum>
+
+<enum name="AutofillQueryResult" type="int">
+  <int value="0" label="Sent"/>
+  <int value="1" label="Received"/>
+  <int value="2" label="Parsed"/>
+  <int value="3" label="Response matches local"/>
+  <int value="4" label="Response improves local (nonempty)"/>
+  <int value="5" label="Response improves local (empty)"/>
+</enum>
+
+<enum name="AutofillSaveCreditCardPrompt" type="int">
+  <int value="0" label="Show requested"/>
+  <int value="1" label="Shown"/>
+  <int value="2" label="Ended, invalid legal message"/>
+  <int value="3" label="Ended, user explicitly accepted prompt"/>
+  <int value="4" label="Ended, user explicitly denied prompt"/>
+  <int value="5" label="Ended, navigated away from page while prompt showing"/>
+  <int value="6" label="Ended, navigated away from page while prompt hidden"/>
+  <int value="7" label="Dismissed, user clicked Learn More link"/>
+  <int value="8" label="Dismissed, user clicked a legal message link"/>
+</enum>
+
+<enum name="AutofillScanCreditCardPrompt" type="int">
+  <int value="0" label="Scan card shown"/>
+  <int value="1" label="Scan card selected"/>
+  <int value="2" label="Some other item selected"/>
+</enum>
+
+<enum name="AutofillTypeQuality" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Match"/>
+  <int value="2" label="Mismatch"/>
+</enum>
+
+<enum name="AutofillTypeQualityByFieldType" type="int">
+  <int value="0" label="Ambiguous, Unknown"/>
+  <int value="1" label="Ambiguous, Match"/>
+  <int value="2" label="Ambiguous, Mismatch"/>
+  <int value="3" label="Name, Unknown"/>
+  <int value="4" label="Name, Match"/>
+  <int value="5" label="Name, Mismatch"/>
+  <int value="6" label="Company, Unknown"/>
+  <int value="7" label="Company, Match"/>
+  <int value="8" label="Company, Mismatch"/>
+  <int value="9" label="Addr. line 1, Unknown"/>
+  <int value="10" label="Addr. line 1, Match"/>
+  <int value="11" label="Addr. line 1, Mismatch"/>
+  <int value="12" label="Addr. line 2, Unknown"/>
+  <int value="13" label="Addr. line 2, Match"/>
+  <int value="14" label="Addr. line 2, Mismatch"/>
+  <int value="15" label="City, Unknown"/>
+  <int value="16" label="City, Match"/>
+  <int value="17" label="City, Mismatch"/>
+  <int value="18" label="State, Unknown"/>
+  <int value="19" label="State, Match"/>
+  <int value="20" label="State, Mismatch"/>
+  <int value="21" label="ZIP code, Unknown"/>
+  <int value="22" label="ZIP code, Match"/>
+  <int value="23" label="ZIP code, Mismatch"/>
+  <int value="24" label="Country, Unknown"/>
+  <int value="25" label="Country, Match"/>
+  <int value="26" label="Country, Mismatch"/>
+  <int value="27" label="Phone, Unknown"/>
+  <int value="28" label="Phone, Match"/>
+  <int value="29" label="Phone, Mismatch"/>
+  <int value="30" label="Fax, Unknown"/>
+  <int value="31" label="Fax, Match"/>
+  <int value="32" label="Fax, Mismatch"/>
+  <int value="33" label="Email, Unknown"/>
+  <int value="34" label="Email, Match"/>
+  <int value="35" label="Email, Mismatch"/>
+  <int value="36" label="Credit card: name, Unknown"/>
+  <int value="37" label="Credit card: name, Match"/>
+  <int value="38" label="Credit card: name, Mismatch"/>
+  <int value="39" label="Credit card: number, Unknown"/>
+  <int value="40" label="Credit card: number, Match"/>
+  <int value="41" label="Credit card: number, Mismatch"/>
+  <int value="42" label="Credit card: date, Unknown"/>
+  <int value="43" label="Credit card: date, Match"/>
+  <int value="44" label="Credit card: date, Mismatch"/>
+  <int value="45" label="Credit card: type, Unknown"/>
+  <int value="46" label="Credit card: type, Match"/>
+  <int value="47" label="Credit card: type, Mismatch"/>
+  <int value="48" label="Password, Unknown"/>
+  <int value="49" label="Password, Match"/>
+  <int value="50" label="Password, Mismatch"/>
+  <int value="51" label="Addr. line 3, Unknown"/>
+  <int value="52" label="Addr. line 3, Match"/>
+  <int value="53" label="Addr. line 3, Mismatch"/>
+  <int value="54" label="Username, Unknown"/>
+  <int value="55" label="Username, Match"/>
+  <int value="56" label="Username, Mismatch"/>
+  <int value="57" label="Street Address, Unknown"/>
+  <int value="58" label="Street Address, Match"/>
+  <int value="59" label="Street Address, Mismatch"/>
+  <int value="60" label="Credit Card Verification, Unknown"/>
+  <int value="61" label="Credit Card Verification, Match"/>
+  <int value="62" label="Credit Card Verification, Mismatch"/>
+</enum>
+
+<enum name="AutofillUnmaskPromptEvent" type="int">
+  <int value="0" label="Shown"/>
+  <int value="1" label="Closed with no attempts"/>
+  <int value="2" label="Closed, retriable failure"/>
+  <int value="3" label="Closed, non retriable failure"/>
+  <int value="4" label="Closed, success w/ 0 failures">
+    Closed with successful unmask on the first attempt.
+  </int>
+  <int value="5" label="Closed, success w/ 1+ failures">
+    Closed with successful unmask after failed attempts.
+  </int>
+  <int value="6" label="Card saved locally"/>
+  <int value="7" label="Did opt in of local save"/>
+  <int value="8" label="Local save stayed disabled"/>
+  <int value="9" label="Did opt out of local save"/>
+  <int value="10" label="Local save stayed enabled"/>
+  <int value="11" label="Closed, abandon unmasking"/>
+</enum>
+
+<enum name="AutofillUserHappiness" type="int">
+  <int value="0" label="Forms loaded"/>
+  <int value="1" label="Deprecated 1"/>
+  <int value="2" label="Deprecated 2"/>
+  <int value="3" label="Deprecated 3"/>
+  <int value="4" label="Deprecated 4"/>
+  <int value="5" label="User did type"/>
+  <int value="6" label="Suggestions shown"/>
+  <int value="7" label="Suggestions shown (once)"/>
+  <int value="8" label="User did autofill"/>
+  <int value="9" label="User did autofill (once)"/>
+  <int value="10" label="User edited autofilled field"/>
+  <int value="11" label="User edited autofilled field (once)"/>
+</enum>
+
+<enum name="AutoLaunchState" type="int">
+  <int value="0" label="AUTO_LAUNCH_NONE"/>
+  <int value="1" label="AUTO_LAUNCH_BACKGROUND"/>
+  <int value="2" label="[Deprecated] AUTO_LAUNCH_FOREGROUND"/>
+  <int value="3" label="[Deprecated] AUTO_LAUNCH_FOREGROUND_USELESS"/>
+</enum>
+
+<enum name="AutoplayBlockedReason" type="int">
+  <int value="0" label="Data Saver enabled"/>
+  <int value="1" label="Disabled by setting"/>
+  <int value="2" label="Data Saver and setting"/>
+</enum>
+
+<enum name="AutoplaySource" type="int">
+  <int value="0" label="autoplay attribute"/>
+  <int value="1" label="play() method"/>
+</enum>
+
+<enum name="AutoSigninFirstRun" type="int">
+  <int value="0" label="No action"/>
+  <int value="1" label="Turn off"/>
+  <int value="2" label="Ok, got it"/>
+</enum>
+
+<enum name="BackgroundModeMenuItem" type="int">
+  <int value="0" label="About"/>
+  <int value="1" label="Task manager"/>
+  <int value="2" label="Background client"/>
+  <int value="3" label="Let run in background"/>
+  <int value="4" label="Exit"/>
+</enum>
+
+<enum name="BackgroundSyncResultPattern" type="int">
+  <int value="0" label="Success Foreground"/>
+  <int value="1" label="Success Background"/>
+  <int value="2" label="Failed Foreground"/>
+  <int value="3" label="Failed Background"/>
+</enum>
+
+<enum name="BackgroundSyncStatus" type="int">
+  <int value="0" label="Action completed successfully"/>
+  <int value="1" label="Back-end error"/>
+  <int value="2" label="Registration was not found"/>
+  <int value="3" label="No active service worker"/>
+  <int value="4" label="Action not allowed"/>
+  <int value="5" label="Permission denied"/>
+</enum>
+
+<enum name="BackgroundTracingState" type="int">
+  <int value="0" label="Scenario activation requested"/>
+  <int value="1" label="Scenario successfully activated"/>
+  <int value="2" label="Trace recording enabled"/>
+  <int value="3" label="Running preemptive scenario triggered"/>
+  <int value="4" label="Running reactive scenario triggered"/>
+  <int value="5" label="Trace finalization allowed"/>
+  <int value="6" label="Trace finalization disallowed"/>
+  <int value="7" label="Trace finalization started"/>
+  <int value="8" label="Trace finalization complete"/>
+  <int value="9" label="Scenario activation failed due to lowres clock"/>
+</enum>
+
+<enum name="BackingStoreResults" type="int">
+  <int value="0" label="Unused"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="Failure"/>
+</enum>
+
+<enum name="BadMessageReasonChrome" type="int">
+<!-- Generated from chrome/browser/bad_message.h -->
+
+  <int value="0" label="WRLHH_LOGGING_STOPPED_BAD_STATE"/>
+</enum>
+
+<enum name="BadMessageReasonContent" type="int">
+<!-- Generated from content/browser/bad_message.h -->
+
+  <int value="0" label="NC_IN_PAGE_NAVIGATION"/>
+  <int value="1" label="RFH_CAN_COMMIT_URL_BLOCKED"/>
+  <int value="2" label="RFH_CAN_ACCESS_FILES_OF_PAGE_STATE"/>
+  <int value="3" label="RFH_SANDBOX_FLAGS"/>
+  <int value="4" label="RFH_NO_PROXY_TO_PARENT"/>
+  <int value="5" label="RPH_DESERIALIZATION_FAILED"/>
+  <int value="6" label="RVH_CAN_ACCESS_FILES_OF_PAGE_STATE"/>
+  <int value="7" label="RFH_FILE_CHOOSER_PATH"/>
+  <int value="8" label="RWH_SYNTHETIC_GESTURE"/>
+  <int value="9" label="RWH_FOCUS"/>
+  <int value="10" label="RWH_BLUR"/>
+  <int value="11" label="RWH_SHARED_BITMAP"/>
+  <int value="12" label="RWH_BAD_ACK_MESSAGE"/>
+  <int value="13" label="RWHVA_SHARED_MEMORY"/>
+  <int value="14" label="SERVICE_WORKER_BAD_URL"/>
+  <int value="15" label="WC_INVALID_FRAME_SOURCE"/>
+  <int value="16" label="RWHVM_UNEXPECTED_FRAME_TYPE"/>
+  <int value="17" label="RFPH_DETACH"/>
+  <int value="18" label="DFH_BAD_EMBEDDER_MESSAGE"/>
+  <int value="19" label="NC_AUTO_SUBFRAME"/>
+  <int value="20" label="CSDH_NOT_RECOGNIZED"/>
+  <int value="21" label="DSMF_OPEN_STORAGE"/>
+  <int value="22" label="DSMF_LOAD_STORAGE"/>
+  <int value="23" label="DBMF_INVALID_ORIGIN_ON_OPEN"/>
+  <int value="24" label="DBMF_DB_NOT_OPEN_ON_MODIFY"/>
+  <int value="25" label="DBMF_DB_NOT_OPEN_ON_CLOSE"/>
+  <int value="26" label="DBMF_INVALID_ORIGIN_ON_SQLITE_ERROR"/>
+  <int value="27" label="RDH_INVALID_PRIORITY"/>
+  <int value="28" label="RDH_REQUEST_NOT_TRANSFERRING"/>
+  <int value="29" label="RDH_BAD_DOWNLOAD"/>
+  <int value="30" label="NMF_NO_PERMISSION_SHOW"/>
+  <int value="31" label="NMF_NO_PERMISSION_CLOSE"/>
+  <int value="32" label="NMF_NO_PERMISSION_VERIFY"/>
+  <int value="33" label="MH_INVALID_MIDI_PORT"/>
+  <int value="34" label="MH_SYS_EX_PERMISSION"/>
+  <int value="35" label="ACDH_REGISTER"/>
+  <int value="36" label="ACDH_UNREGISTER"/>
+  <int value="37" label="ACDH_SET_SPAWNING"/>
+  <int value="38" label="ACDH_SELECT_CACHE"/>
+  <int value="39" label="ACDH_SELECT_CACHE_FOR_WORKER"/>
+  <int value="40" label="ACDH_SELECT_CACHE_FOR_SHARED_WORKER"/>
+  <int value="41" label="ACDH_MARK_AS_FOREIGN_ENTRY"/>
+  <int value="42" label="ACDH_PENDING_REPLY_IN_GET_STATUS"/>
+  <int value="43" label="ACDH_GET_STATUS"/>
+  <int value="44" label="ACDH_PENDING_REPLY_IN_START_UPDATE"/>
+  <int value="45" label="ACDH_START_UPDATE"/>
+  <int value="46" label="ACDH_PENDING_REPLY_IN_SWAP_CACHE"/>
+  <int value="47" label="ACDH_SWAP_CACHE"/>
+  <int value="48" label="SWDH_NOT_HANDLED"/>
+  <int value="49" label="SWDH_REGISTER_BAD_URL"/>
+  <int value="50" label="SWDH_REGISTER_NO_HOST"/>
+  <int value="51" label="SWDH_REGISTER_CANNOT"/>
+  <int value="52" label="SWDH_UNREGISTER_BAD_URL"/>
+  <int value="53" label="SWDH_UNREGISTER_NO_HOST"/>
+  <int value="54" label="SWDH_UNREGISTER_CANNOT"/>
+  <int value="55" label="SWDH_GET_REGISTRATION_BAD_URL"/>
+  <int value="56" label="SWDH_GET_REGISTRATION_NO_HOST"/>
+  <int value="57" label="SWDH_GET_REGISTRATION_CANNOT"/>
+  <int value="58" label="SWDH_GET_REGISTRATION_FOR_READY_NO_HOST"/>
+  <int value="59" label="SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS"/>
+  <int value="60" label="SWDH_POST_MESSAGE"/>
+  <int value="61" label="SWDH_PROVIDER_CREATED_NO_HOST"/>
+  <int value="62" label="SWDH_PROVIDER_DESTROYED_NO_HOST"/>
+  <int value="63" label="SWDH_SET_HOSTED_VERSION_NO_HOST"/>
+  <int value="64" label="OBSOLETE_SWDH_SET_HOSTED_VERSION"/>
+  <int value="65" label="SWDH_WORKER_SCRIPT_LOAD_NO_HOST"/>
+  <int value="66" label="SWDH_INCREMENT_WORKER_BAD_HANDLE"/>
+  <int value="67" label="SWDH_DECREMENT_WORKER_BAD_HANDLE"/>
+  <int value="68" label="SWDH_INCREMENT_REGISTRATION_BAD_HANDLE"/>
+  <int value="69" label="SWDH_DECREMENT_REGISTRATION_BAD_HANDLE"/>
+  <int value="70" label="SWDH_TERMINATE_BAD_HANDLE"/>
+  <int value="71" label="FAMF_APPEND_ITEM_TO_BLOB"/>
+  <int value="72" label="FAMF_APPEND_SHARED_MEMORY_TO_BLOB"/>
+  <int value="73" label="FAMF_MALFORMED_STREAM_URL"/>
+  <int value="74" label="FAMF_APPEND_ITEM_TO_STREAM"/>
+  <int value="75" label="FAMF_APPEND_SHARED_MEMORY_TO_STREAM"/>
+  <int value="76" label="IDBDH_CAN_READ_FILE"/>
+  <int value="77" label="IDBDH_GET_OR_TERMINATE"/>
+  <int value="78" label="RFMF_SET_COOKIE_BAD_ORIGIN"/>
+  <int value="79" label="RFMF_GET_COOKIES_BAD_ORIGIN"/>
+  <int value="80" label="SWDH_GET_REGISTRATIONS_NO_HOST"/>
+  <int value="81" label="SWDH_GET_REGISTRATIONS_INVALID_ORIGIN"/>
+  <int value="82" label="AOAH_UNAUTHORIZED_URL"/>
+  <int value="83" label="BDH_INVALID_SERVICE_ID"/>
+  <int value="84" label="RFH_COMMIT_DESERIALIZATION_FAILED"/>
+  <int value="85" label="BDH_INVALID_CHARACTERISTIC_ID"/>
+  <int value="86" label="SWDH_UPDATE_NO_HOST"/>
+  <int value="87" label="SWDH_UPDATE_BAD_REGISTRATION_ID"/>
+  <int value="88" label="SWDH_UPDATE_CANNOT"/>
+  <int value="89" label="SWDH_UNREGISTER_BAD_REGISTRATION_ID"/>
+  <int value="90" label="BDH_INVALID_WRITE_VALUE_LENGTH"/>
+  <int value="91" label="WC_MEMORY_CACHE_RESOURCE_BAD_SECURITY_INFO"/>
+  <int value="92" label="WC_RENDERER_DID_NAVIGATE_BAD_SECURITY_INFO"/>
+  <int value="93" label="OBSOLETE_BDH_DUPLICATE_REQUEST_DEVICE_ID"/>
+  <int value="94" label="CSDH_INVALID_ORIGIN"/>
+  <int value="95" label="RDH_ILLEGAL_ORIGIN"/>
+  <int value="96" label="RDH_UNAUTHORIZED_HEADER_REQUEST"/>
+  <int value="97" label="RDH_INVALID_URL"/>
+  <int value="98" label="BDH_CHARACTERISTIC_ALREADY_SUBSCRIBED"/>
+  <int value="99" label="RFH_OWNER_PROPERTY"/>
+  <int value="100" label="BDH_EMPTY_OR_INVALID_FILTERS"/>
+  <int value="101" label="WC_CONTENT_WITH_CERT_ERRORS_BAD_SECURITY_INFO"/>
+  <int value="102" label="RFMF_RENDERER_FAKED_ITS_OWN_DEATH"/>
+  <int value="103" label="DWNLD_INVALID_SAVABLE_RESOURCE_LINKS_RESPONSE"/>
+  <int value="104" label="DWNLD_INVALID_SERIALIZE_AS_MHTML_RESPONSE"/>
+  <int value="105" label="BDH_DEVICE_NOT_ALLOWED_FOR_ORIGIN"/>
+  <int value="106" label="ACI_WRONG_STORAGE_PARTITION"/>
+  <int value="107" label="RDHI_WRONG_STORAGE_PARTITION"/>
+  <int value="108" label="RDH_INVALID_REQUEST_ID"/>
+  <int value="109" label="BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN"/>
+  <int value="110" label="WSI_UNEXPECTED_ADD_CHANNEL_REQUEST"/>
+  <int value="111" label="WSI_UNEXPECTED_SEND_FRAME"/>
+  <int value="112" label="RFH_UNEXPECTED_LOAD_START"/>
+  <int value="113" label="NMF_INVALID_ARGUMENT"/>
+  <int value="114" label="RFH_INVALID_ORIGIN_ON_COMMIT"/>
+  <int value="115" label="BDH_UUID_REGISTERED"/>
+  <int value="116" label="BDH_CONSTRUCTION_FAILED"/>
+  <int value="117" label="BDH_INVALID_REFCOUNT_OPERATION"/>
+  <int value="118" label="BDH_INVALID_URL_OPERATION"/>
+  <int value="119" label="IDBDH_INVALID_ORIGIN"/>
+  <int value="120" label="RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE"/>
+  <int value="121" label="RFH_FAIL_PROVISIONAL_LOAD_NO_ERROR"/>
+  <int value="122" label="NI_IN_PAGE_NAVIGATION"/>
+  <int value="123" label="RPH_MOJO_PROCESS_ERROR"/>
+  <int value="124" label="DBMF_INVALID_ORIGIN_ON_GET_SPACE"/>
+  <int value="125" label="DBMF_INVALID_ORIGIN_ON_MODIFIED"/>
+  <int value="126" label="DBMF_INVALID_ORIGIN_ON_CLOSED"/>
+  <int value="127" label="WSI_INVALID_HEADER_VALUE"/>
+  <int value="128" label="SWDH_SET_HOSTED_VERSION_INVALID_HOST"/>
+  <int value="129" label="SWDH_SET_HOSTED_VERSION_PROCESS_MISMATCH"/>
+  <int value="130" label="MSDH_INVALID_FRAME_ID"/>
+  <int value="131" label="SDH_INVALID_PORT_RANGE"/>
+  <int value="132" label="SCO_INVALID_ARGUMENT"/>
+  <int value="133" label="RFH_INCONSISTENT_DEVTOOLS_MESSAGE"/>
+  <int value="134" label="DSH_DUPLICATE_CONNECTION_ID"/>
+  <int value="135" label="DSH_NOT_CREATED_SESSION_ID"/>
+  <int value="136" label="DSH_NOT_ALLOCATED_SESSION_ID"/>
+  <int value="137" label="DSH_DELETED_SESSION_ID"/>
+  <int value="138" label="DSH_WRONG_STORAGE_PARTITION"/>
+  <int value="139" label="BDH_DISALLOWED_ORIGIN"/>
+  <int value="140" label="ARH_CREATED_STREAM_WITHOUT_AUTHORIZATION"/>
+  <int value="141" label="MDDH_INVALID_DEVICE_TYPE_REQUEST"/>
+  <int value="142" label="MDDH_UNAUTHORIZED_ORIGIN"/>
+  <int value="143" label="SWDH_ENABLE_NAVIGATION_PRELOAD_NO_HOST"/>
+  <int value="144" label="SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN"/>
+  <int value="145" label="SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID"/>
+  <int value="146" label="RDH_TRANSFERRING_REQUEST_NOT_FOUND"/>
+  <int value="147" label="RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST"/>
+  <int value="148" label="SWDH_GET_NAVIGATION_PRELOAD_STATE_NO_HOST"/>
+  <int value="149" label="SWDH_GET_NAVIGATION_PRELOAD_STATE_INVALID_ORIGIN"/>
+  <int value="150"
+      label="SWDH_GET_NAVIGATION_PRELOAD_STATE_BAD_REGISTRATION_ID"/>
+  <int value="151" label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_NO_HOST"/>
+  <int value="152" label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_INVALID_ORIGIN"/>
+  <int value="153"
+      label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_BAD_REGISTRATION_ID"/>
+  <int value="154" label="SWDH_SET_NAVIGATION_PRELOAD_HEADER_BAD_VALUE"/>
+  <int value="155" label="MDDH_INVALID_SUBSCRIPTION_REQUEST"/>
+  <int value="156" label="MDDH_INVALID_UNSUBSCRIPTION_REQUEST"/>
+  <int value="157" label="AOAH_NONSENSE_DEVICE_ID"/>
+</enum>
+
+<enum name="BadMessageReasonExtensions" type="int">
+<!-- Generated from extensions/browser/bad_message.h -->
+
+  <int value="0" label="EOG_BAD_ORIGIN"/>
+  <int value="1" label="EVG_BAD_ORIGIN"/>
+  <int value="2" label="BH_BLOB_NOT_OWNED"/>
+  <int value="3" label="EH_BAD_EVENT_ID"/>
+  <int value="4" label="AVG_BAD_INST_ID"/>
+  <int value="5" label="AVG_BAD_EXT_ID"/>
+  <int value="6" label="AVG_NULL_AVG"/>
+  <int value="7" label="ESWMF_INVALID_DECREMENT_ACTIVITY"/>
+</enum>
+
+<enum name="BadMessageReasonNaCl" type="int">
+<!-- Generated from components/nacl/browser/bad_message.h -->
+
+  <int value="0" label="NFH_OPEN_EXECUTABLE_BAD_ROUTING_ID"/>
+  <int value="1" label="NHMF_LAUNCH_CONTINUATION_BAD_ROUTING_ID"/>
+  <int value="2" label="NHMF_GET_NEXE_FD_BAD_URL"/>
+</enum>
+
+<enum name="BadMessageReasonPasswordManager" type="int">
+<!-- Generated from components/password_manager/content/browser/bad_message.h -->
+
+  <int value="1" label="CPMD_BAD_ORIGIN_FORMS_PARSED"/>
+  <int value="2" label="CPMD_BAD_ORIGIN_FORMS_RENDERED"/>
+  <int value="3" label="CPMD_BAD_ORIGIN_FORM_SUBMITTED"/>
+  <int value="4" label="CPMD_BAD_ORIGIN_FOCUSED_PASSWORD_FORM_FOUND"/>
+  <int value="5" label="CPMD_BAD_ORIGIN_IN_PAGE_NAVIGATION"/>
+  <int value="6" label="CPMD_BAD_ORIGIN_PASSWORD_NO_LONGER_GENERATED"/>
+  <int value="7" label="CPMD_BAD_ORIGIN_PRESAVE_GENERATED_PASSWORD"/>
+  <int value="8"
+      label="CPMD_BAD_ORIGIN_SAVE_GENERATION_FIELD_DETECTED_BY_CLASSIFIER"/>
+</enum>
+
+<enum name="BadSyncDataReason" type="int">
+  <int value="0" label="Bad extension ID"/>
+  <int value="1" label="Bad version"/>
+  <int value="2" label="Bad update URL"/>
+  <int value="3" label="No ExtensionSpecifics"/>
+  <int value="4" label="Bad disable reasons"/>
+</enum>
+
+<enum name="BaseRelocationType" type="int">
+  <int value="0" label="IMAGE_REL_BASED_ABSOLUTE"/>
+  <int value="1" label="IMAGE_REL_BASED_HIGH"/>
+  <int value="2" label="IMAGE_REL_BASED_LOW"/>
+  <int value="3" label="IMAGE_REL_BASED_HIGHLOW"/>
+  <int value="4" label="IMAGE_REL_BASED_HIGHADJ"/>
+  <int value="5" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_5"/>
+  <int value="6" label="IMAGE_REL_BASED_RESERVED"/>
+  <int value="7" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_7"/>
+  <int value="8" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_8"/>
+  <int value="9" label="IMAGE_REL_BASED_MACHINE_SPECIFIC_9"/>
+  <int value="10" label="IMAGE_REL_BASED_DIR64"/>
+</enum>
+
+<enum name="BatteryInfoSampleResult" type="int">
+  <int value="0" label="Read"/>
+  <int value="1" label="Good"/>
+  <int value="2" label="Bad"/>
+</enum>
+
+<enum name="BatteryStatusNumberBatteries" type="int">
+  <int value="5" label="5+"/>
+</enum>
+
+<enum name="BatteryStatusNumberBatteriesWin" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="0"/>
+  <int value="2" label="1+"/>
+</enum>
+
+<enum name="BiquadFilterType" type="int">
+  <int value="0" label="lowpass"/>
+  <int value="1" label="highpass"/>
+  <int value="2" label="bandpass"/>
+  <int value="3" label="lowshelf"/>
+  <int value="4" label="highshelf"/>
+  <int value="5" label="peaking"/>
+  <int value="6" label="notch"/>
+  <int value="7" label="allpass"/>
+</enum>
+
+<enum name="BlacklistedVideoCaptureDeviceNames" type="int">
+  <int value="0" label="Google GTalk Camera Adapter"/>
+  <int value="1" label="IP Camera"/>
+  <int value="2" label="Cyberlink YouCam Webcam Splitter"/>
+  <int value="3" label="EpocCam Smartphone Wireless Camera"/>
+</enum>
+
+<enum name="BlacklistSetup" type="int">
+  <int value="0" label="Blacklist enabled"/>
+  <int value="1" label="Blacklist ran successfully."/>
+  <int value="2" label="Blacklist failed."/>
+  <int value="3" label="Blacklist thunk setup failed."/>
+  <int value="4" label="Blacklist interception failed."/>
+  <int value="5" label="Blacklist disabled."/>
+</enum>
+
+<enum name="BlobBrokenReason" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="There is not enough memory to store this blob"/>
+  <int value="2" label="File write failed"/>
+  <int value="3" label="Source died in transit"/>
+  <int value="4" label="Blob dereferenced while building"/>
+  <int value="5" label="Referenced blob broken"/>
+</enum>
+
+<enum name="BluetoothAvailability" type="int">
+  <int value="0" label="Unexpected error"/>
+  <int value="1" label="Not available"/>
+  <int value="2" label="Available without LE"/>
+  <int value="3" label="Available with LE"/>
+  <int value="4" label="Available unknown LE"/>
+</enum>
+
+<enum name="BluetoothDiscoveryOutcomes" type="int">
+  <int value="0" label="Success"/>
+  <int value="1"
+      label="Unknown error; used when we could add code to get more detail"/>
+  <int value="2" label="Function not implemented on this platform"/>
+  <int value="3" label="Adapter not present"/>
+  <int value="4" label="Adapter removed since call chain started"/>
+  <int value="5" label="Discovery session not active"/>
+  <int value="6"
+      label="Attempted to remove a discovery session with another pending
+             request"/>
+  <int value="7"
+      label="Active BluetoothDiscoverySession wasn't found in
+             BluetoothAdapter"/>
+  <int value="8" label="Failed without a more specific reason"/>
+  <int value="9" label="(BlueZ) DBus failed to find the adapter"/>
+  <int value="10" label="(BlueZ) DBus didn't return an error code"/>
+  <int value="11" label="(BlueZ) org.bluez.Error.InProgress"/>
+  <int value="12" label="(BlueZ) org.bluez.Error.NotReady"/>
+  <int value="13"
+      label="(BlueZ) org.bluez.Error.Failed inside SetDiscoveryFilter, maybe
+             indicating an unsupported transport"/>
+  <int value="14"
+      label="(BlueZ) org.bluez.Error.NotSupported inside SetDiscoverFilter,
+             indicating a kernel that does not support Start Service
+             Discovery."/>
+</enum>
+
+<enum name="BluetoothGATTErrors" type="int">
+  <obsolete>
+    As of 08/2015 this has been replaced with WebBluetoothGATTOperationOutcome.
+  </obsolete>
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Failed"/>
+  <int value="2" label="In Progress"/>
+  <int value="3" label="Not Paired"/>
+</enum>
+
+<enum name="BluetoothPairingMethod" type="int">
+  <int value="0" label="No user interaction required"/>
+  <int value="1" label="PIN Code requested from user"/>
+  <int value="2" label="Passkey requested from user"/>
+  <int value="3" label="PIN Code entered into device"/>
+  <int value="4" label="Passkey entered into device"/>
+  <int value="5" label="Passkey confirmed on both devices"/>
+</enum>
+
+<enum name="BluetoothPairingResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Connection already in-progress"/>
+  <int value="2" label="Failed for non-specific reason"/>
+  <int value="3" label="Authentication failed"/>
+  <int value="4" label="Authentication canceled"/>
+  <int value="5" label="Authentication rejected"/>
+  <int value="6" label="Authentication timed out"/>
+  <int value="7" label="Unsupported device"/>
+  <int value="8" label="Unknown or unhandler error"/>
+</enum>
+
+<enum name="BluetoothStatus" type="int">
+  <int value="0" label="Disabled"/>
+  <int value="1" label="Enabled"/>
+  <int value="2" label="Unknown"/>
+</enum>
+
+<enum name="BookmarkLaunchLocation" type="int">
+  <int value="0" label="Attached bookmark bar"/>
+  <int value="1" label="Detached (floating) bookmark bar"/>
+  <int value="2" label="Bookmark bar subfolder"/>
+  <int value="3" label="Context menu"/>
+  <int value="4" label="Wrench menu"/>
+  <int value="5" label="Bookmark manager"/>
+  <int value="6" label="Omnibox suggestion"/>
+</enum>
+
+<enum name="BookmarksEntryPoint" type="int">
+  <int value="0" label="Accelerator(Ctrl+D)"/>
+  <int value="1" label="Gesture"/>
+  <int value="2" label="Space or Enter"/>
+  <int value="3" label="Mouse click"/>
+</enum>
+
+<enum name="BookmarksExperimentState" type="int">
+  <int value="0" label="No experiment"/>
+  <int value="1" label="Experiment enabled (sync)"/>
+  <int value="2" label="Experiment disabled (sync opt out)"/>
+  <int value="3" label="Experiment enabled (finch)"/>
+  <int value="4" label="Experiment disabled (finch opt out)"/>
+  <int value="5" label="Experiment disabled (finch but signed in)"/>
+  <int value="6" label="Experiment enabled (sync unknown)"/>
+</enum>
+
+<enum name="BookmarksOpenAction" type="int">
+  <int value="0" label="Open in current tab"/>
+  <int value="1" label="Open in new tab"/>
+  <int value="2" label="Open in incognito tab"/>
+</enum>
+
+<enum name="Boolean" type="int">
+  <int value="0" label="False"/>
+  <int value="1" label="True"/>
+</enum>
+
+<enum name="BooleanAbsent" type="int">
+  <int value="0" label="Not Absent"/>
+  <int value="1" label="Absent"/>
+</enum>
+
+<enum name="BooleanAccepted" type="int">
+  <int value="0" label="Not Accepted"/>
+  <int value="1" label="Accepted"/>
+</enum>
+
+<enum name="BooleanAccountChange" type="int">
+  <int value="0" label="Service"/>
+  <int value="1" label="Broadcast"/>
+</enum>
+
+<enum name="BooleanActivation" type="int">
+  <int value="0" label="Deactivated"/>
+  <int value="1" label="Activated"/>
+</enum>
+
+<enum name="BooleanActive" type="int">
+  <int value="0" label="Inactive"/>
+  <int value="1" label="Active"/>
+</enum>
+
+<enum name="BooleanAttempted" type="int">
+  <int value="0" label="Not Attempted"/>
+  <int value="1" label="Attempted"/>
+</enum>
+
+<enum name="BooleanAvailable" type="int">
+  <int value="0" label="Not Available"/>
+  <int value="1" label="Available"/>
+</enum>
+
+<enum name="BooleanAvoidedNullPointerException" type="int">
+  <int value="0" label="Had NullPointerException"/>
+  <int value="1" label="No exception"/>
+</enum>
+
+<enum name="BooleanBlocked" type="int">
+  <int value="0" label="Not Blocked"/>
+  <int value="1" label="Blocked"/>
+</enum>
+
+<enum name="BooleanBringToForegroundReason" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Notification click (within last 5 seconds)"/>
+</enum>
+
+<enum name="BooleanBroken" type="int">
+  <int value="0" label="Not Broken"/>
+  <int value="1" label="Broken"/>
+</enum>
+
+<enum name="BooleanCacheHit" type="int">
+  <int value="0" label="Miss"/>
+  <int value="1" label="Hit"/>
+</enum>
+
+<enum name="BooleanCanceled" type="int">
+  <int value="0" label="Not Canceled"/>
+  <int value="1" label="Canceled"/>
+</enum>
+
+<enum name="BooleanCanCheckUrl" type="int">
+  <int value="0" label="Skipped"/>
+  <int value="1" label="Can check"/>
+</enum>
+
+<enum name="BooleanCanvasExpanded" type="int">
+  <int value="0" label="Original canvas dimensions were sufficient"/>
+  <int value="1" label="First image frame dimension were needed"/>
+</enum>
+
+<enum name="BooleanChanged" type="int">
+  <int value="0" label="Not changed"/>
+  <int value="1" label="Changed"/>
+</enum>
+
+<enum name="BooleanChecked" type="int">
+  <int value="0" label="Not checked"/>
+  <int value="1" label="Checked"/>
+</enum>
+
+<enum name="BooleanClicked" type="int">
+  <int value="0" label="Not Clicked"/>
+  <int value="1" label="Clicked"/>
+</enum>
+
+<enum name="BooleanCloseTimeout" type="int">
+  <int value="0" label="Closed normally"/>
+  <int value="1" label="Timed out"/>
+</enum>
+
+<enum name="BooleanCommonNameMatch" type="int">
+  <int value="0" label="subjectAltName used"/>
+  <int value="1" label="Common Name used"/>
+</enum>
+
+<enum name="BooleanCompatibilityMode" type="int">
+  <int value="0" label="Not in compatibility mode"/>
+  <int value="1" label="In compatibility mode"/>
+</enum>
+
+<enum name="BooleanCompleted" type="int">
+  <int value="0" label="Not Completed"/>
+  <int value="1" label="Completed"/>
+</enum>
+
+<enum name="BooleanConnected" type="int">
+  <int value="0" label="Not Connected"/>
+  <int value="1" label="Connected"/>
+</enum>
+
+<enum name="BooleanContainedMeCard" type="int">
+  <int value="0" label="Did not contain me card."/>
+  <int value="1" label="Contained me card."/>
+</enum>
+
+<enum name="BooleanCorrupt" type="int">
+  <int value="0" label="Not Corrupt"/>
+  <int value="1" label="Corrupt"/>
+</enum>
+
+<enum name="BooleanCouldFireImmediately" type="int">
+  <int value="0" label="Could not fire immediately"/>
+  <int value="1" label="Could fire immediately"/>
+</enum>
+
+<enum name="BooleanCovered" type="int">
+  <int value="0" label="Not Covered"/>
+  <int value="1" label="Covered"/>
+</enum>
+
+<enum name="BooleanCreated" type="int">
+  <int value="0" label="Not created"/>
+  <int value="1" label="Created"/>
+</enum>
+
+<enum name="BooleanCredentialsLost" type="int">
+  <int value="0" label="Found Credentials"/>
+  <int value="1" label="Missing Credentials"/>
+</enum>
+
+<enum name="BooleanDataReductionProxy" type="int">
+  <int value="0" label="Not Data Reduction Proxy"/>
+  <int value="1" label="Data Reduction Proxy"/>
+</enum>
+
+<enum name="BooleanDefault" type="int">
+  <int value="0" label="Not Default"/>
+  <int value="1" label="Default"/>
+</enum>
+
+<enum name="BooleanDeferred" type="int">
+  <int value="0" label="Not deferred"/>
+  <int value="1" label="Deferred"/>
+</enum>
+
+<enum name="BooleanDelete" type="int">
+  <int value="0" label="Ignored"/>
+  <int value="1" label="Deleted"/>
+</enum>
+
+<enum name="BooleanDeletedOrNot" type="int">
+  <int value="0" label="Not deleted"/>
+  <int value="1" label="Deleted"/>
+</enum>
+
+<enum name="BooleanDeprecatedCiphers" type="int">
+  <int value="0" label="Deprecated ciphers disabled"/>
+  <int value="1" label="Deprecated ciphers enabled"/>
+</enum>
+
+<enum name="BooleanDidEvict" type="int">
+  <int value="0" label="Did not evict"/>
+  <int value="1" label="Did evict"/>
+</enum>
+
+<enum name="BooleanDidFallBack" type="int">
+  <int value="0" label="Did not fall back"/>
+  <int value="1" label="Did fall back"/>
+</enum>
+
+<enum name="BooleanDidScalePage" type="int">
+  <int value="0" label="User did not change scale"/>
+  <int value="1" label="User did change scale"/>
+</enum>
+
+<enum name="BooleanDuplicate" type="int">
+  <int value="0" label="Not Duplicate"/>
+  <int value="1" label="Duplicate"/>
+</enum>
+
+<enum name="BooleanEmpty" type="int">
+  <int value="0" label="Not Empty"/>
+  <int value="1" label="Empty"/>
+</enum>
+
+<enum name="BooleanEnabled" type="int">
+  <int value="0" label="Disabled"/>
+  <int value="1" label="Enabled"/>
+</enum>
+
+<enum name="BooleanEqual" type="int">
+  <int value="0" label="Not Equal"/>
+  <int value="1" label="Equal"/>
+</enum>
+
+<enum name="BooleanError" type="int">
+  <int value="0" label="No Error"/>
+  <int value="1" label="Error"/>
+</enum>
+
+<enum name="BooleanEverWorked" type="int">
+  <int value="0" label="Has never worked"/>
+  <int value="1" label="Has worked at least once"/>
+</enum>
+
+<enum name="BooleanExpired" type="int">
+  <int value="0" label="Unexpired"/>
+  <int value="1" label="Expired"/>
+</enum>
+
+<enum name="BooleanForced" type="int">
+  <int value="0" label="Not forced"/>
+  <int value="1" label="Forced"/>
+</enum>
+
+<enum name="BooleanForceDisabled" type="int">
+  <int value="0" label="Not Force Disabled"/>
+  <int value="1" label="Force Disabled"/>
+</enum>
+
+<enum name="BooleanForemost" type="int">
+  <int value="0" label="Tab was not foremost"/>
+  <int value="1" label="Tab was foremost"/>
+</enum>
+
+<enum name="BooleanFormatChanged" type="int">
+  <int value="0" label="Any Codec Initialized"/>
+  <int value="1" label="Missing FORMAT_CHANGED message"/>
+</enum>
+
+<enum name="BooleanFormManager" type="int">
+  <int value="0" label="Has Form Manager"/>
+  <int value="1" label="Lacks Form Manager"/>
+</enum>
+
+<enum name="BooleanFrameAsOverlay" type="int">
+  <int value="0" label="Frame was not allow_overlay"/>
+  <int value="1" label="Frame was allow_overlay"/>
+</enum>
+
+<enum name="BooleanFromAddressBook" type="int">
+  <int value="0" label="Not From Address Book"/>
+  <int value="1" label="From Address Book"/>
+</enum>
+
+<enum name="BooleanGAIAWebViewFlow" type="int">
+  <int value="0" label="iframe-based flow"/>
+  <int value="1" label="WebView-based flow"/>
+</enum>
+
+<enum name="BooleanHadAddress" type="int">
+  <int value="0" label="Did not have address."/>
+  <int value="1" label="Had address."/>
+</enum>
+
+<enum name="BooleanHadBlankText" type="int">
+  <int value="0" label="Did not have blank text"/>
+  <int value="1" label="Had blank text"/>
+</enum>
+
+<enum name="BooleanHadEmail" type="int">
+  <int value="0" label="Did not have email."/>
+  <int value="1" label="Had email."/>
+</enum>
+
+<enum name="BooleanHadName" type="int">
+  <int value="0" label="Did not have name."/>
+  <int value="1" label="Had name."/>
+</enum>
+
+<enum name="BooleanHadPhoneNumber" type="int">
+  <int value="0" label="Did not have phone number."/>
+  <int value="1" label="Had phone number."/>
+</enum>
+
+<enum name="BooleanHadPredictions" type="int">
+  <int value="0" label="No predictions"/>
+  <int value="1" label="Has predictions"/>
+</enum>
+
+<enum name="BooleanHandshakeConfirmed" type="int">
+  <int value="0" label="Handshake not confirmed"/>
+  <int value="1" label="Handshake confirmed"/>
+</enum>
+
+<enum name="BooleanHardwareAccelerated" type="int">
+  <int value="0" label="Not hardware accelerated"/>
+  <int value="1" label="Hardware accelerated"/>
+</enum>
+
+<enum name="BooleanHasCrc" type="int">
+  <int value="0" label="No CRC"/>
+  <int value="1" label="Has CRC"/>
+</enum>
+
+<enum name="BooleanHasDistilledData" type="int">
+  <int value="0" label="No distilled data"/>
+  <int value="1" label="Has distilled data"/>
+</enum>
+
+<enum name="BooleanHasPath" type="int">
+  <int value="0" label="No path"/>
+  <int value="1" label="Has path"/>
+</enum>
+
+<enum name="BooleanHasSeekPenalty" type="int">
+  <int value="0" label="Has no seek penalty (e.g. is flash memory)"/>
+  <int value="1" label="Has seek penalty (e.g. spinning disk)"/>
+</enum>
+
+<enum name="BooleanHit" type="int">
+  <int value="0" label="Not_reached"/>
+  <int value="1" label="Hit"/>
+</enum>
+
+<enum name="BooleanHttps" type="int">
+  <int value="0" label="HTTP"/>
+  <int value="1" label="HTTPS"/>
+</enum>
+
+<enum name="BooleanIgnored" type="int">
+  <int value="0" label="Not ignored"/>
+  <int value="1" label="Ignored"/>
+</enum>
+
+<enum name="BooleanInappropriateFallback" type="int">
+  <int value="0" label="Handshake successful"/>
+  <int value="1" label="inappropriate_fallback alert"/>
+</enum>
+
+<enum name="BooleanInForeground" type="int">
+  <int value="0" label="Background"/>
+  <int value="1" label="Foreground"/>
+</enum>
+
+<enum name="BooleanInvalid" type="int">
+  <int value="0" label="Valid"/>
+  <int value="1" label="Invalid"/>
+</enum>
+
+<enum name="BooleanIsLastSharedAppInfoRetrieved" type="int">
+  <int value="0" label="Not retrieved"/>
+  <int value="1" label="Retrieved"/>
+</enum>
+
+<enum name="BooleanIsMalware" type="int">
+  <int value="0" label="Not malware"/>
+  <int value="1" label="Is malware"/>
+</enum>
+
+<enum name="BooleanIsMobileOptimized" type="int">
+  <int value="0" label="Not mobile optimized web page"/>
+  <int value="1" label="Mobile optimized web page"/>
+</enum>
+
+<enum name="BooleanIsPhishing" type="int">
+  <int value="0" label="Not phishing"/>
+  <int value="1" label="Is phishing"/>
+</enum>
+
+<enum name="BooleanIsShared" type="int">
+  <int value="0" label="Not Shared"/>
+  <int value="1" label="Is Shared"/>
+</enum>
+
+<enum name="BooleanLoaded" type="int">
+  <int value="0" label="Not loaded"/>
+  <int value="1" label="Loaded"/>
+</enum>
+
+<enum name="BooleanMainFrame" type="int">
+  <int value="0" label="Subframe"/>
+  <int value="1" label="Main frame"/>
+</enum>
+
+<enum name="BooleanMatched" type="int">
+  <int value="0" label="Not matched"/>
+  <int value="1" label="Matched"/>
+</enum>
+
+<enum name="BooleanMatchedBadIp" type="int">
+  <int value="0" label="Not matched"/>
+  <int value="1" label="Matched"/>
+</enum>
+
+<enum name="BooleanMigrated" type="int">
+  <int value="0" label="Not migrated"/>
+  <int value="1" label="Migrated"/>
+</enum>
+
+<enum name="BooleanMissingFromDiskCache" type="int">
+  <int value="0" label="Has data in disk cache"/>
+  <int value="1" label="Missing data in disk cache"/>
+</enum>
+
+<enum name="BooleanNeedsClearing" type="int">
+  <int value="0" label="Doesn't need clearing"/>
+  <int value="1" label="Needs to be clearred"/>
+</enum>
+
+<enum name="BooleanNullStream" type="int">
+  <int value="0" label="Stream is not a nullptr"/>
+  <int value="1" label="Stream is a nullptr"/>
+</enum>
+
+<enum name="BooleanNullVisitor" type="int">
+  <int value="0" label="Connection's visitor is not a nullptr"/>
+  <int value="1" label="Connection's visitor is a nullptr"/>
+</enum>
+
+<enum name="BooleanOnBattery" type="int">
+  <int value="0" label="Not on battery"/>
+  <int value="1" label="On Battery"/>
+</enum>
+
+<enum name="BooleanOrphan" type="int">
+  <int value="0" label="Non-orphan"/>
+  <int value="1" label="Orphan"/>
+</enum>
+
+<enum name="BooleanPanelWasOpen" type="int">
+  <int value="0" label="Panel was closed"/>
+  <int value="1" label="Panel was open"/>
+</enum>
+
+<enum name="BooleanPending" type="int">
+  <int value="0" label="Decided"/>
+  <int value="1" label="Pending"/>
+</enum>
+
+<enum name="BooleanPersisted" type="int">
+  <int value="0" label="Not persisted"/>
+  <int value="1" label="Persisted"/>
+</enum>
+
+<enum name="BooleanPinned" type="int">
+  <int value="0" label="Not Pinned"/>
+  <int value="1" label="Pinned"/>
+</enum>
+
+<enum name="BooleanPopulated" type="int">
+  <int value="0" label="Not populated"/>
+  <int value="1" label="Populated"/>
+</enum>
+
+<enum name="BooleanPreferred" type="int">
+  <int value="0" label="Not Preferred"/>
+  <int value="1" label="Preferred"/>
+</enum>
+
+<enum name="BooleanPresent" type="int">
+  <int value="0" label="Not Present"/>
+  <int value="1" label="Present"/>
+</enum>
+
+<enum name="BooleanProfileSignedIn" type="int">
+  <int value="0" label="Profile was not Signed In"/>
+  <int value="1" label="Profile was Signed In"/>
+</enum>
+
+<enum name="BooleanRaced" type="int">
+  <int value="0" label="Did Not Race"/>
+  <int value="1" label="Raced"/>
+</enum>
+
+<enum name="BooleanRebooted" type="int">
+  <int value="0" label="Has not rebooted"/>
+  <int value="1" label="Rebooted"/>
+</enum>
+
+<enum name="BooleanReceived" type="int">
+  <int value="0" label="Not Received"/>
+  <int value="1" label="Received"/>
+</enum>
+
+<enum name="BooleanRegistered" type="int">
+  <int value="0" label="Not Registered"/>
+  <int value="1" label="Registered"/>
+</enum>
+
+<enum name="BooleanRegistrationIsDuplicate" type="int">
+  <int value="0" label="Registration is not a duplicate"/>
+  <int value="1" label="Registration is a duplicate"/>
+</enum>
+
+<enum name="BooleanReported" type="int">
+  <int value="0" label="Not reported"/>
+  <int value="1" label="Reported"/>
+</enum>
+
+<enum name="BooleanRequested" type="int">
+  <int value="0" label="Not requested"/>
+  <int value="1" label="Requested"/>
+</enum>
+
+<enum name="BooleanReset" type="int">
+  <int value="0" label="Not reset"/>
+  <int value="1" label="Reset"/>
+</enum>
+
+<enum name="BooleanRestoredURL" type="int">
+  <int value="0" label="Default frame src URL"/>
+  <int value="1" label="Different URL"/>
+</enum>
+
+<enum name="BooleanReused" type="int">
+  <int value="0" label="Not Reused"/>
+  <int value="1" label="Reused"/>
+</enum>
+
+<enum name="BooleanRevoked" type="int">
+  <int value="0" label="Not revoked"/>
+  <int value="1" label="Revoked"/>
+</enum>
+
+<enum name="BooleanSecure" type="int">
+  <int value="0" label="Insecure"/>
+  <int value="1" label="Secure"/>
+</enum>
+
+<enum name="BooleanSelected" type="int">
+  <int value="0" label="No selection"/>
+  <int value="1" label="Selected"/>
+</enum>
+
+<enum name="BooleanShareGroup" type="int">
+  <int value="0" label="No share group"/>
+  <int value="1" label="Using share group"/>
+</enum>
+
+<enum name="BooleanShown" type="int">
+  <int value="0" label="Not Shown"/>
+  <int value="1" label="Shown"/>
+</enum>
+
+<enum name="BooleanSkipped" type="int">
+  <int value="0" label="Not skipped"/>
+  <int value="1" label="Skipped"/>
+</enum>
+
+<enum name="BooleanStale" type="int">
+  <int value="0" label="Fresh"/>
+  <int value="1" label="Stale"/>
+</enum>
+
+<enum name="BooleanStartedCompleted" type="int">
+  <int value="0" label="Started"/>
+  <int value="1" label="Completed"/>
+</enum>
+
+<enum name="BooleanStreamed" type="int">
+  <int value="0" label="Not streamed"/>
+  <int value="1" label="Streamed"/>
+</enum>
+
+<enum name="BooleanSuccess" type="int">
+  <int value="0" label="Failure"/>
+  <int value="1" label="Success"/>
+</enum>
+
+<enum name="BooleanSupported" type="int">
+  <int value="0" label="Not Supported"/>
+  <int value="1" label="Supported"/>
+</enum>
+
+<enum name="BooleanSuppressed" type="int">
+  <int value="0" label="No suppressions"/>
+  <int value="1" label="Suppressed"/>
+</enum>
+
+<enum name="BooleanTabDiscard" type="int">
+  <int value="0" label="Memory OK, no discards"/>
+  <int value="1" label="Memory low, tabs discarded"/>
+</enum>
+
+<enum name="BooleanTablet" type="int">
+  <int value="0" label="Non tablet"/>
+  <int value="1" label="Tablet"/>
+</enum>
+
+<enum name="BooleanTerminated" type="int">
+  <int value="0" label="Not terminated"/>
+  <int value="1" label="Terminated"/>
+</enum>
+
+<enum name="BooleanTiled" type="int">
+  <int value="0" label="Not tiled"/>
+  <int value="1" label="Tiled"/>
+</enum>
+
+<enum name="BooleanTimedOut" type="int">
+  <int value="0" label="Did not time out"/>
+  <int value="1" label="Timed out"/>
+</enum>
+
+<enum name="BooleanTooMany" type="int">
+  <int value="0" label="Correct"/>
+  <int value="1" label="Too many"/>
+</enum>
+
+<enum name="BooleanUnknown" type="int">
+  <int value="0" label="Known"/>
+  <int value="1" label="Unknown"/>
+</enum>
+
+<enum name="BooleanUsage" type="int">
+  <int value="0" label="Not Used"/>
+  <int value="1" label="Used"/>
+</enum>
+
+<enum name="BooleanValid" type="int">
+  <int value="0" label="Invalid"/>
+  <int value="1" label="Valid"/>
+</enum>
+
+<enum name="BooleanValidHashSum" type="int">
+  <int value="0" label="Invalid hash sum"/>
+  <int value="1" label="Valid hash sum"/>
+</enum>
+
+<enum name="BooleanValidKeyExists" type="int">
+  <int value="0" label="No Valid Cached Key Found"/>
+  <int value="1" label="Valid Cached Key Found"/>
+</enum>
+
+<enum name="BooleanVirtualContext" type="int">
+  <int value="0" label="Real context encountered"/>
+  <int value="1" label="Virtual context encountered"/>
+</enum>
+
+<enum name="BooleanVisible" type="int">
+  <int value="0" label="Not visible"/>
+  <int value="1" label="Visible"/>
+</enum>
+
+<enum name="BooleanWasFast" type="int">
+  <int value="0" label="Slow"/>
+  <int value="1" label="Fast"/>
+</enum>
+
+<enum name="BooleanWasted" type="int">
+  <int value="0" label="Not wasted"/>
+  <int value="1" label="Wasted"/>
+</enum>
+
+<enum name="BooleanWiped" type="int">
+  <int value="0" label="Re-enabled"/>
+  <int value="1" label="Wiped out"/>
+</enum>
+
+<enum name="BoringSSLReasonCode" type="int">
+  <obsolete>
+    Removed in March 2016.
+  </obsolete>
+  <details>
+    See include/openssl/ssl.h at the corresponding BoringSSL revision for the
+    corresponding values.
+  </details>
+</enum>
+
+<enum name="BrokenAlternateProtocolLocation" type="int">
+  <int value="0" label="HTTP_STREAM_FACTORY_IMPL_JOB"/>
+  <int value="1" label="QUIC_STREAM_FACTORY"/>
+  <int value="2" label="HTTP_STREAM_FACTORY_IMPL_JOB_ALT"/>
+  <int value="3" label="HTTP_STREAM_FACTORY_IMPL_JOB_MAIN"/>
+</enum>
+
+<enum name="BrotliFilterDecodingStatus" type="int">
+  <int value="0" label="In progress"/>
+  <int value="1" label="Done"/>
+  <int value="2" label="Error"/>
+</enum>
+
+<enum name="BrotliFilterErrorCode" type="int">
+  <int value="0" label="NO_ERROR"/>
+  <int value="1" label="FORMAT_EXUBERANT_NIBBLE"/>
+  <int value="2" label="FORMAT_RESERVED"/>
+  <int value="3" label="FORMAT_EXUBERANT_META_NIBBLE"/>
+  <int value="4" label="FORMAT_SIMPLE_HUFFMAN_ALPHABET"/>
+  <int value="5" label="FORMAT_SIMPLE_HUFFMAN_SAME"/>
+  <int value="6" label="FORMAT_CL_SPACE"/>
+  <int value="7" label="FORMAT_HUFFMAN_SPACE"/>
+  <int value="8" label="FORMAT_CONTEXT_MAP_REPEAT"/>
+  <int value="9" label="FORMAT_BLOCK_LENGTH_1"/>
+  <int value="10" label="FORMAT_BLOCK_LENGTH_2"/>
+  <int value="11" label="FORMAT_TRANSFORM"/>
+  <int value="12" label="FORMAT_DICTIONARY"/>
+  <int value="13" label="FORMAT_WINDOW_BITS"/>
+  <int value="14" label="FORMAT_PADDING_1"/>
+  <int value="15" label="FORMAT_PADDING_2"/>
+  <int value="16" label="Reserved (16)"/>
+  <int value="17" label="Reserved (17)"/>
+  <int value="18" label="Reserved (18)"/>
+  <int value="19" label="Reserved (19)"/>
+  <int value="20" label="Reserved (20)"/>
+  <int value="21" label="ALLOC_CONTEXT_MODES"/>
+  <int value="22" label="ALLOC_TREE_GROUPS"/>
+  <int value="23" label="Reserved (23)"/>
+  <int value="24" label="Reserved (24)"/>
+  <int value="25" label="ALLOC_CONTEXT_MAP"/>
+  <int value="26" label="ALLOC_RING_BUFFER_1"/>
+  <int value="27" label="ALLOC_RING_BUFFER_2"/>
+  <int value="28" label="Reserved (28)"/>
+  <int value="29" label="Reserved (29)"/>
+  <int value="30" label="ALLOC_BLOCK_TYPE_TREES"/>
+  <int value="31" label="UNREACHABLE_1"/>
+  <int value="32" label="UNREACHABLE_2"/>
+  <int value="33" label="UNREACHABLE_3"/>
+  <int value="34" label="UNREACHABLE_4"/>
+  <int value="35" label="UNREACHABLE_5"/>
+  <int value="36" label="UNREACHABLE_6"/>
+</enum>
+
+<enum name="BubbleType" type="int">
+  <int value="0" label="Unknown Bubble"/>
+  <int value="1" label="Mock Bubble"/>
+  <int value="10" label="Extension Installed Bubble"/>
+  <int value="20" label="Translate Bubble"/>
+  <int value="30" label="Permissions Bubble"/>
+  <int value="31" label="Chooser Permissions Bubble"/>
+</enum>
+
+<enum name="CacheResult" type="int">
+  <int value="0" label="MEMORY_CACHE_HIT"/>
+  <int value="1" label="DISK_CACHE_HIT"/>
+  <int value="2" label="DISK_CACHE_ENTRY_CORRUPT"/>
+  <int value="3" label="DISK_CACHE_ERROR"/>
+  <int value="4" label="CACHE_MISS"/>
+</enum>
+
+<enum name="CALayerResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Unknown failure"/>
+  <int value="2" label="IOSurface resource not overlay candidate"/>
+  <int value="3" label="StreamVideo resource not overlay candidate"/>
+  <int value="4" label="StreamVideo texture not identity"/>
+  <int value="5" label="Texture resource not overlay candidate"/>
+  <int value="6" label="Texture resource Y flipping not supported"/>
+  <int value="7" label="Tile resource not overlay candidate"/>
+  <int value="8" label="Unsupported quad blend mode"/>
+  <int value="9" label="Unsupported quad transform"/>
+  <int value="10" label="Unsupported quad clipping"/>
+  <int value="11" label="DebugBorder quads not supported"/>
+  <int value="12" label="PictureContent quads not supported"/>
+  <int value="13" label="RenderPass quads not supported"/>
+  <int value="14" label="SurfaceContent quads not supported"/>
+  <int value="15" label="YUVVideo quads not supported"/>
+  <int value="16"
+      label="Different clip settings in a sorting context is not supported."/>
+  <int value="17"
+      label="Different vertex opacities for a single texture is not supported"/>
+  <int value="18" label="RenderPassDrawQuad has a filter scale."/>
+  <int value="19" label="RenderPassDrawQuad has background filters."/>
+  <int value="20" label="RenderPassDrawQuad has a mask."/>
+  <int value="21" label="RenderPassDrawQuad has unconvertable filters."/>
+  <int value="22" label="RenderPassDrawQuad has a sorting context id."/>
+  <int value="23" label="Too many RenderPassDrawQuads."/>
+</enum>
+
+<enum name="CanvasContextType" type="int">
+  <int value="0" label="2d"/>
+  <int value="1" label="(obsolete) webkit-3d"/>
+  <int value="2" label="experimental-webgl"/>
+  <int value="3" label="webgl"/>
+  <int value="4" label="webgl2"/>
+</enum>
+
+<enum name="CanvasContextUsage" type="int">
+  <int value="0" label="CanvasCreated"/>
+  <int value="1" label="GPUAccelerated2DCanvasImageBufferCreated"/>
+  <int value="2" label="DisplayList2DCanvasImageBufferCreated"/>
+  <int value="3" label="Unaccelerated2DCanvasImageBufferCreated"/>
+  <int value="4" label="Accelerated2DCanvasGPUContextLost"/>
+  <int value="5" label="Unaccelerated2DCanvasImageBufferCreationFailed"/>
+  <int value="6" label="GPUAccelerated2DCanvasImageBufferCreationFailed"/>
+  <int value="7" label="DisplayList2DCanvasFallbackToRaster"/>
+  <int value="8" label="GPUAccelerated2DCanvasDeferralDisabled"/>
+  <int value="10" label="GPUAccelerated2DCanvasSurfaceCreationFailed"/>
+</enum>
+
+<enum name="CanvasDisplayListFallbackReason" type="int">
+  <int value="0" label="Unknown (Should not be seen in production)."/>
+  <int value="1" label="Canvas not cleared between consecutive frames."/>
+  <int value="2"
+      label="Canvas state stack too large (unbalanced save/restore?)."/>
+  <int value="3" label="Direct pixel write."/>
+  <int value="4" label="Flush for initial clear."/>
+  <int value="5" label="Flush after drawing from a WebGL canvas."/>
+  <int value="6" label="Acquiring snapshot for getImageData()."/>
+  <int value="7" label="Acquiring snapshot for WebGL texture upload."/>
+  <int value="8"
+      label="Acquiring snapshot for direct painting of canvas contents."/>
+  <int value="9" label="Acquiring snapshot for toDataURL()"/>
+  <int value="10" label="Acquiring snapshot for toBlob()."/>
+  <int value="11" label="Acquiring snapshot for capturing to a stream."/>
+  <int value="12" label="Acquiring snapshot for drawImage() source."/>
+  <int value="13" label="Acquiring snapshot for createPattern()."/>
+  <int value="14" label="Expensive overdraw heuristic."/>
+  <int value="15" label="Drawing a texture-backed pattern."/>
+  <int value="16" label="Drawing a video."/>
+  <int value="17" label="Drawing an animated 2D canvas."/>
+  <int value="18" label="Sub-pixel text anti-aliasing support."/>
+  <int value="19" label="Drawing a texture-backed image."/>
+  <int value="20"
+      label="Calling
+             OffscreenCanvasRenderingContext2D::transferToImageBitmap()."/>
+  <int value="21"
+      label="Acquiring snapshot in unit tests (should not be seen in
+             production)."/>
+  <int value="22" label="Acquiring snapshot for copiedImage()."/>
+  <int value="23" label="Acquiring snapshot for drawImageIntoBuffer()."/>
+</enum>
+
+<enum name="CanvasGPUAccelerated2DCanvasDisableDeferralReason" type="int">
+  <int value="0" label="Unknown (Should not be seen in production)."/>
+  <int value="1" label="Canvas not cleared between consecutive frames."/>
+  <int value="2"
+      label="Canvas state stack too large (unbalanced save/restore?)."/>
+  <int value="3" label="Direct pixel write."/>
+  <int value="4" label="Draw image of animated 2d canvas"/>
+  <int value="5" label="Sub-pixel text anti-aliasing support (expect 0)"/>
+</enum>
+
+<enum name="CanvasHibernationEvent" type="int">
+  <int value="0" label="HibernationScheduled"/>
+  <int value="1"
+      label="HibernationAbortedDueToDestructionWhileHibernatePending"/>
+  <int value="2" label="HibernationAbortedDueToPendingDestruction"/>
+  <int value="3" label="HibernationAbortedDueToVisibilityChange"/>
+  <int value="4" label="HibernationAbortedDueGpuContextLoss"/>
+  <int value="5" label="HibernationAbortedDueToSwitchToUnacceleratedRendering"/>
+  <int value="6" label="HibernationAbortedDueToAllocationFailure"/>
+  <int value="7" label="HibernationEndedNormally"/>
+  <int value="8" label="HibernationEndedWithSwitchToBackgroundRendering"/>
+  <int value="9" label="HibernationEndedWithFallbackToSW"/>
+  <int value="10" label="HibernationEndedWithTeardown"/>
+  <int value="11" label="HibernationAbortedBecauseNoSurface"/>
+</enum>
+
+<enum name="CAPSUpdaterStep" type="int">
+  <obsolete>
+    Deprecated 08/2016 with removal of Chrome Crash Service component.
+  </obsolete>
+  <int value="0" label="CAPS component ready"/>
+  <int value="1" label="CAPS component missing"/>
+  <int value="2" label="CAPS Service failed to start"/>
+  <int value="3" label="CAPS Service started"/>
+</enum>
+
+<enum name="CaptivePortalBlockingPageEvent" type="int">
+  <int value="0" label="SHOW_ALL"/>
+  <int value="1" label="OPEN_LOGIN_PAGE"/>
+</enum>
+
+<enum name="CaptivePortalDetectResult" type="int">
+  <int value="0" label="INTERNET_CONNECTED"/>
+  <int value="1" label="NO_RESPONSE"/>
+  <int value="2" label="BEHIND_CAPTIVE_PORTAL"/>
+  <int value="3" label="NO_RESPONSE_HTTPS_LANDING_URL"/>
+  <int value="4" label="BEHIND_CAPTIVE_PORTAL_HTTPS_LANDING_URL"/>
+  <int value="5" label="NO_RESPONSE_IP_ADDRESS"/>
+  <int value="6" label="BEHIND_CAPTIVE_PORTAL_IP_ADDRESS"/>
+  <int value="7" label="NO_RESPONSE_HTTPS_LANDING_URL_IP_ADDRESS"/>
+  <int value="8" label="BEHIND_CAPTIVE_PORTAL_HTTPS_LANDING_URL_IP_ADDRESS"/>
+</enum>
+
+<enum name="CaptivePortalNotificationStatus" type="int">
+  <int value="0" label="DISPLAYED"/>
+  <int value="1" label="ERROR"/>
+</enum>
+
+<enum name="CaptivePortalNotificationUserAction" type="int">
+  <int value="0" label="CLICKED"/>
+  <int value="1" label="CLOSED"/>
+  <int value="2" label="IGNORED"/>
+</enum>
+
+<enum name="CaptivePortalStatus" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="OFFLINE"/>
+  <int value="2" label="ONLINE"/>
+  <int value="3" label="PORTAL"/>
+  <int value="4" label="PROXY_AUTH_REQUIRED"/>
+</enum>
+
+<enum name="CaptureApiMac" type="int">
+  <obsolete>
+    Deprecated as of 04/2016.
+  </obsolete>
+  <int value="0" label="QTKit used due to Mac OS X previous to 10.7.x Lion"/>
+  <int value="1" label="QTKit forced, on OS X supporting AVFoundation"/>
+  <int value="2" label="QTKit used due to no flag specified"/>
+  <int value="3" label="QTKit used: AVFoundation enabled but failed loading"/>
+  <int value="4" label="AVFoundation is enabled and is loaded succesfully"/>
+</enum>
+
+<enum name="CapturePixelFormat" type="int">
+  <obsolete>
+    Deprecated as of 08/2015.
+  </obsolete>
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="I420"/>
+  <int value="2" label="YUY2"/>
+  <int value="3" label="UYVY"/>
+  <int value="4" label="RGB24"/>
+  <int value="5" label="ARGB"/>
+  <int value="6" label="MJPEG"/>
+  <int value="7" label="NV21"/>
+  <int value="8" label="YV12"/>
+  <int value="9" label="TEXTURE"/>
+</enum>
+
+<enum name="CaptureStartupResult" type="int">
+  <int value="0" label="No data callback"/>
+  <int value="1" label="OK"/>
+  <int value="2" label="Failed to create stream"/>
+  <int value="3" label="Failed to open stream"/>
+  <int value="4" label="Never received any data"/>
+</enum>
+
+<enum name="CastCertificateStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="InvalidCrl"/>
+  <int value="2" label="CertVerificationFailed"/>
+  <int value="3" label="CertRevoked"/>
+</enum>
+
+<enum name="CastOverlayEvents" type="int">
+  <int value="0" label="Created"/>
+  <int value="1" label="Shown"/>
+  <int value="2" label="Clicked"/>
+</enum>
+
+<enum name="CastPlayBackState" type="int">
+  <int value="0" label="YT_PLAYER_SUCCESS"/>
+  <int value="1" label="YT_PLAYER_FAILURE"/>
+  <int value="2" label="DEFAULT_PLAYER_SUCCESS"/>
+  <int value="3" label="DEFAULT_PLAYER_FAILURE"/>
+</enum>
+
+<enum name="CatSixtyFour" type="int">
+  <int value="0" label="Saber-Toothed Cat (&lt;10.6), 32-bit (?)"/>
+  <int value="1" label="Saber-Toothed Cat (&lt;10.6), 64-bit (?)"/>
+  <int value="2" label="Snow Leopard (10.6), 32-bit"/>
+  <int value="3" label="Snow Leopard (10.6), 64-bit"/>
+  <int value="4" label="Lion (10.7), 32-bit (?)"/>
+  <int value="5" label="Lion (10.7), 64-bit"/>
+  <int value="6" label="Mountain Lion (10.8), 32-bit (?)"/>
+  <int value="7" label="Mountain Lion (10.8), 64-bit"/>
+  <int value="8" label="Mavericks (10.9), 32-bit (?)"/>
+  <int value="9" label="Mavericks (10.9), 64-bit"/>
+  <int value="10" label="Saber-Toothed Cat (&lt;10.6), 8-bit (?)"/>
+  <int value="11" label="Snow Leopard (10.6), 8-bit (?)"/>
+  <int value="12" label="Lion (10.7), 8-bit (?)"/>
+  <int value="13" label="Mountain Lion (10.8), 8-bit (?)"/>
+  <int value="14" label="Mavericks (10.9), 8-bit (?)"/>
+  <int value="15" label="Yosemite (10.10), 32-bit (?)"/>
+  <int value="16" label="Yosemite (10.10), 64-bit"/>
+  <int value="17" label="Yosemite (10.10), 8-bit (?)"/>
+  <int value="18" label="FutureCat (&gt;10.10), 32-bit (?)"/>
+  <int value="19" label="FutureCat (&gt;10.10), 64-bit"/>
+  <int value="20" label="FutureCat (&gt;10.10), 8-bit (?)"/>
+</enum>
+
+<enum name="CdmPromiseResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="NotSupportedError"/>
+  <int value="2" label="InvalidStateError"/>
+  <int value="3" label="InvalidAccessError"/>
+  <int value="4" label="QuotaExceededError"/>
+  <int value="5" label="UnknownError"/>
+  <int value="6" label="ClientError"/>
+  <int value="7" label="OutputError"/>
+</enum>
+
+<enum name="CertificateChainPosition" type="int">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <int value="0" label="Root Certificate"/>
+</enum>
+
+<enum name="ChannelLayout" type="int">
+  <int value="0" label="CHANNEL_LAYOUT_NONE"/>
+  <int value="1" label="CHANNEL_LAYOUT_UNSUPPORTED"/>
+  <int value="2" label="CHANNEL_LAYOUT_MONO"/>
+  <int value="3" label="CHANNEL_LAYOUT_STEREO"/>
+  <int value="4" label="CHANNEL_LAYOUT_2_1"/>
+  <int value="5" label="CHANNEL_LAYOUT_SURROUND"/>
+  <int value="6" label="CHANNEL_LAYOUT_4POINT0"/>
+  <int value="7" label="CHANNEL_LAYOUT_2_2"/>
+  <int value="8" label="CHANNEL_LAYOUT_QUAD"/>
+  <int value="9" label="CHANNEL_LAYOUT_5POINT0"/>
+  <int value="10" label="CHANNEL_LAYOUT_5POINT1"/>
+  <int value="11" label="CHANNEL_LAYOUT_5POINT0_BACK"/>
+  <int value="12" label="CHANNEL_LAYOUT_5POINT1_BACK"/>
+  <int value="13" label="CHANNEL_LAYOUT_7POINT0"/>
+  <int value="14" label="CHANNEL_LAYOUT_7POINT1"/>
+  <int value="15" label="CHANNEL_LAYOUT_7POINT1_WIDE"/>
+  <int value="16" label="CHANNEL_LAYOUT_STEREO_DOWNMIX"/>
+  <int value="17" label="CHANNEL_LAYOUT_2POINT1"/>
+  <int value="18" label="CHANNEL_LAYOUT_3_1"/>
+  <int value="19" label="CHANNEL_LAYOUT_4_1"/>
+  <int value="20" label="CHANNEL_LAYOUT_6_0"/>
+  <int value="21" label="CHANNEL_LAYOUT_6_0_FRONT"/>
+  <int value="22" label="CHANNEL_LAYOUT_HEXAGONAL"/>
+  <int value="23" label="CHANNEL_LAYOUT_6_1"/>
+  <int value="24" label="CHANNEL_LAYOUT_6_1_BACK"/>
+  <int value="25" label="CHANNEL_LAYOUT_6_1_FRONT"/>
+  <int value="26" label="CHANNEL_LAYOUT_7_0_FRONT"/>
+  <int value="27" label="CHANNEL_LAYOUT_7_1_WIDE_BACK"/>
+  <int value="28" label="CHANNEL_LAYOUT_OCTAGONAL"/>
+  <int value="29" label="CHANNEL_LAYOUT_DISCRETE"/>
+</enum>
+
+<enum name="CheckCRCResult" type="int">
+  <int value="0" label="Stream was never read to end"/>
+  <int value="1" label="CRC check not done"/>
+  <int value="2" label="CRC check done"/>
+  <int value="3" label="Stream was never read at all"/>
+</enum>
+
+<enum name="ChromeChannelForHistogram" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="CANARY"/>
+  <int value="2" label="DEV"/>
+  <int value="3" label="BETA"/>
+  <int value="4" label="STABLE"/>
+</enum>
+
+<enum name="ChromeDownloadCountType" type="int">
+  <int value="0" label="Initiated by Navigation (Obsolete)"/>
+  <int value="1" label="Initiated by Context Menu (Obsolete)"/>
+  <int value="2" label="Initiated by WebStore Installer (Obsolete)"/>
+  <int value="3" label="Initiated by ImageBurner (Obsolete)"/>
+  <int value="4" label="Blocked by Throttling"/>
+</enum>
+
+<enum name="ChromeDownloadSource" type="int">
+  <int value="0" label="Initiated by Navigation"/>
+  <int value="1" label="Initiated by Context Menu"/>
+  <int value="2" label="Initiated by WebStore Installer"/>
+  <int value="3" label="Initiated by ImageBurner"/>
+  <int value="4" label="Initiated by Plugin Installer"/>
+</enum>
+
+<enum name="ChromeNotifierServiceActionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="First service enabled"/>
+  <int value="2" label="First service disabled"/>
+</enum>
+
+<enum name="ChromeOSColorProfile" type="int">
+  <summary>See ui/display/display_constants.h for the variation.</summary>
+  <int value="0" label="Standard"/>
+  <int value="1" label="Dynamic"/>
+  <int value="2" label="Movie"/>
+  <int value="3" label="Reading"/>
+</enum>
+
+<enum name="ChromeOSMachineIdReason" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Network"/>
+  <int value="2" label="Periodic"/>
+</enum>
+
+<enum name="ChromeOSPlatformVerificationExpiryStatus" type="int">
+  <summary>
+    Possible results of a platform verification expiry check. See
+    chrome/browser/chromeos/attestation/platform_verification.cc.
+  </summary>
+  <int value="0" label="Ok"/>
+  <int value="1" label="Expiring Soon"/>
+  <int value="2" label="Expired"/>
+  <int value="3" label="Invalid PEM Chain"/>
+  <int value="4" label="Invalid X.509"/>
+</enum>
+
+<enum name="ChromeOSPlatformVerificationResult" type="int">
+  <summary>
+    Possible results of a platform verification attempt. See
+    chrome/browser/chromeos/attestation/platform_verification.h.
+  </summary>
+  <int value="0" label="Success"/>
+  <int value="1" label="Internal Error"/>
+  <int value="2" label="Platform Not Verified"/>
+  <int value="3" label="Rejected by User"/>
+  <int value="4" label="Rejected by Policy"/>
+  <int value="5" label="Timeout"/>
+</enum>
+
+<enum name="ChromeOSUserImageId" type="int">
+  <summary>
+    Indices of the default images as defined in
+    chrome/browser/chromeos/login/default_user_images.cc. The last three values
+    are for taken photo, downloaded file and the image previously used by user.
+  </summary>
+  <int value="0" label="Default, Beaker"/>
+  <int value="1" label="Default, Bee"/>
+  <int value="2" label="Default, Briefcase"/>
+  <int value="3" label="Default, Circles"/>
+  <int value="4" label="Default, Cloud"/>
+  <int value="5" label="Default, Cupcake"/>
+  <int value="6" label="Default, Day"/>
+  <int value="7" label="Default, Flower"/>
+  <int value="8" label="Default, Globe"/>
+  <int value="9" label="Default, Hot air"/>
+  <int value="10" label="Default, Ladybug"/>
+  <int value="11" label="Default, Leaf"/>
+  <int value="12" label="Default, Night"/>
+  <int value="13" label="Default, Plane"/>
+  <int value="14" label="Default, Robot body"/>
+  <int value="15" label="Default, Robot head"/>
+  <int value="16" label="Default, Toolbox"/>
+  <int value="17" label="Default, User color"/>
+  <int value="18" label="Default, User enterprise"/>
+  <int value="19" label="Photo taken"/>
+  <int value="20" label="Downloaded file"/>
+  <int value="21" label="Old image"/>
+  <int value="22" label="Profile image"/>
+</enum>
+
+<enum name="ChromiumAndroidLinkerBrowserState" type="int">
+  <int value="0" label="Normal, Random Address Load"/>
+  <int value="1" label="Low memory, Fixed Address Load Success"/>
+  <int value="2" label="Low memory, Fixed Address Load Failure"/>
+</enum>
+
+<enum name="ChromiumAndroidLinkerRendererState" type="int">
+  <int value="0" label="Fixed Address Load Success"/>
+  <int value="1" label="Fixed Address Load Failure"/>
+  <int value="2" label="Fixed Address Load Not Attempted"/>
+</enum>
+
+<enum name="CLD2LanguageCode" type="int">
+  <summary>
+    See Language in third_party/cld_2/src/internal/generated_language.h.
+  </summary>
+  <int value="0" label="ENGLISH"/>
+  <int value="1" label="DANISH"/>
+  <int value="2" label="DUTCH"/>
+  <int value="3" label="FINNISH"/>
+  <int value="4" label="FRENCH"/>
+  <int value="5" label="GERMAN"/>
+  <int value="6" label="HEBREW"/>
+  <int value="7" label="ITALIAN"/>
+  <int value="8" label="JAPANESE"/>
+  <int value="9" label="KOREAN"/>
+  <int value="10" label="NORWEGIAN"/>
+  <int value="11" label="POLISH"/>
+  <int value="12" label="PORTUGUESE"/>
+  <int value="13" label="RUSSIAN"/>
+  <int value="14" label="SPANISH"/>
+  <int value="15" label="SWEDISH"/>
+  <int value="16" label="CHINESE"/>
+  <int value="17" label="CZECH"/>
+  <int value="18" label="GREEK"/>
+  <int value="19" label="ICELANDIC"/>
+  <int value="20" label="LATVIAN"/>
+  <int value="21" label="LITHUANIAN"/>
+  <int value="22" label="ROMANIAN"/>
+  <int value="23" label="HUNGARIAN"/>
+  <int value="24" label="ESTONIAN"/>
+  <int value="25" label="TG_UNKNOWN_LANGUAGE"/>
+  <int value="26" label="UNKNOWN_LANGUAGE"/>
+  <int value="27" label="BULGARIAN"/>
+  <int value="28" label="CROATIAN"/>
+  <int value="29" label="SERBIAN"/>
+  <int value="30" label="IRISH"/>
+  <int value="31" label="GALICIAN"/>
+  <int value="32" label="TAGALOG"/>
+  <int value="33" label="TURKISH"/>
+  <int value="34" label="UKRAINIAN"/>
+  <int value="35" label="HINDI"/>
+  <int value="36" label="MACEDONIAN"/>
+  <int value="37" label="BENGALI"/>
+  <int value="38" label="INDONESIAN"/>
+  <int value="39" label="LATIN"/>
+  <int value="40" label="MALAY"/>
+  <int value="41" label="MALAYALAM"/>
+  <int value="42" label="WELSH"/>
+  <int value="43" label="NEPALI"/>
+  <int value="44" label="TELUGU"/>
+  <int value="45" label="ALBANIAN"/>
+  <int value="46" label="TAMIL"/>
+  <int value="47" label="BELARUSIAN"/>
+  <int value="48" label="JAVANESE"/>
+  <int value="49" label="OCCITAN"/>
+  <int value="50" label="URDU"/>
+  <int value="51" label="BIHARI"/>
+  <int value="52" label="GUJARATI"/>
+  <int value="53" label="THAI"/>
+  <int value="54" label="ARABIC"/>
+  <int value="55" label="CATALAN"/>
+  <int value="56" label="ESPERANTO"/>
+  <int value="57" label="BASQUE"/>
+  <int value="58" label="INTERLINGUA"/>
+  <int value="59" label="KANNADA"/>
+  <int value="60" label="PUNJABI"/>
+  <int value="61" label="SCOTS_GAELIC"/>
+  <int value="62" label="SWAHILI"/>
+  <int value="63" label="SLOVENIAN"/>
+  <int value="64" label="MARATHI"/>
+  <int value="65" label="MALTESE"/>
+  <int value="66" label="VIETNAMESE"/>
+  <int value="67" label="FRISIAN"/>
+  <int value="68" label="SLOVAK"/>
+  <int value="69" label="CHINESE_T"/>
+  <int value="70" label="FAROESE"/>
+  <int value="71" label="SUNDANESE"/>
+  <int value="72" label="UZBEK"/>
+  <int value="73" label="AMHARIC"/>
+  <int value="74" label="AZERBAIJANI"/>
+  <int value="75" label="GEORGIAN"/>
+  <int value="76" label="TIGRINYA"/>
+  <int value="77" label="PERSIAN"/>
+  <int value="78" label="BOSNIAN"/>
+  <int value="79" label="SINHALESE"/>
+  <int value="80" label="NORWEGIAN_N"/>
+  <int value="81" label="X_81"/>
+  <int value="82" label="X_82"/>
+  <int value="83" label="XHOSA"/>
+  <int value="84" label="ZULU"/>
+  <int value="85" label="GUARANI"/>
+  <int value="86" label="SESOTHO"/>
+  <int value="87" label="TURKMEN"/>
+  <int value="88" label="KYRGYZ"/>
+  <int value="89" label="BRETON"/>
+  <int value="90" label="TWI"/>
+  <int value="91" label="YIDDISH"/>
+  <int value="92" label="X_92"/>
+  <int value="93" label="SOMALI"/>
+  <int value="94" label="UIGHUR"/>
+  <int value="95" label="KURDISH"/>
+  <int value="96" label="MONGOLIAN"/>
+  <int value="97" label="ARMENIAN"/>
+  <int value="98" label="LAOTHIAN"/>
+  <int value="99" label="SINDHI"/>
+  <int value="100" label="RHAETO_ROMANCE"/>
+  <int value="101" label="AFRIKAANS"/>
+  <int value="102" label="LUXEMBOURGISH"/>
+  <int value="103" label="BURMESE"/>
+  <int value="104" label="KHMER"/>
+  <int value="105" label="TIBETAN"/>
+  <int value="106" label="DHIVEHI"/>
+  <int value="107" label="CHEROKEE"/>
+  <int value="108" label="SYRIAC"/>
+  <int value="109" label="LIMBU"/>
+  <int value="110" label="ORIYA"/>
+  <int value="111" label="ASSAMESE"/>
+  <int value="112" label="CORSICAN"/>
+  <int value="113" label="INTERLINGUE"/>
+  <int value="114" label="KAZAKH"/>
+  <int value="115" label="LINGALA"/>
+  <int value="116" label="X_116"/>
+  <int value="117" label="PASHTO"/>
+  <int value="118" label="QUECHUA"/>
+  <int value="119" label="SHONA"/>
+  <int value="120" label="TAJIK"/>
+  <int value="121" label="TATAR"/>
+  <int value="122" label="TONGA"/>
+  <int value="123" label="YORUBA"/>
+  <int value="124" label="X_124"/>
+  <int value="125" label="X_125"/>
+  <int value="126" label="X_126"/>
+  <int value="127" label="X_127"/>
+  <int value="128" label="MAORI"/>
+  <int value="129" label="WOLOF"/>
+  <int value="130" label="ABKHAZIAN"/>
+  <int value="131" label="AFAR"/>
+  <int value="132" label="AYMARA"/>
+  <int value="133" label="BASHKIR"/>
+  <int value="134" label="BISLAMA"/>
+  <int value="135" label="DZONGKHA"/>
+  <int value="136" label="FIJIAN"/>
+  <int value="137" label="GREENLANDIC"/>
+  <int value="138" label="HAUSA"/>
+  <int value="139" label="HAITIAN_CREOLE"/>
+  <int value="140" label="INUPIAK"/>
+  <int value="141" label="INUKTITUT"/>
+  <int value="142" label="KASHMIRI"/>
+  <int value="143" label="KINYARWANDA"/>
+  <int value="144" label="MALAGASY"/>
+  <int value="145" label="NAURU"/>
+  <int value="146" label="OROMO"/>
+  <int value="147" label="RUNDI"/>
+  <int value="148" label="SAMOAN"/>
+  <int value="149" label="SANGO"/>
+  <int value="150" label="SANSKRIT"/>
+  <int value="151" label="SISWANT"/>
+  <int value="152" label="TSONGA"/>
+  <int value="153" label="TSWANA"/>
+  <int value="154" label="VOLAPUK"/>
+  <int value="155" label="ZHUANG"/>
+  <int value="156" label="KHASI"/>
+  <int value="157" label="SCOTS"/>
+  <int value="158" label="GANDA"/>
+  <int value="159" label="MANX"/>
+  <int value="160" label="MONTENEGRIN"/>
+  <int value="161" label="AKAN"/>
+  <int value="162" label="IGBO"/>
+  <int value="163" label="MAURITIAN_CREOLE"/>
+  <int value="164" label="HAWAIIAN"/>
+  <int value="165" label="CEBUANO"/>
+  <int value="166" label="EWE"/>
+  <int value="167" label="GA"/>
+  <int value="168" label="HMONG"/>
+  <int value="169" label="KRIO"/>
+  <int value="170" label="LOZI"/>
+  <int value="171" label="LUBA_LULUA"/>
+  <int value="172" label="LUO_KENYA_AND_TANZANIA"/>
+  <int value="173" label="NEWARI"/>
+  <int value="174" label="NYANJA"/>
+  <int value="175" label="OSSETIAN"/>
+  <int value="176" label="PAMPANGA"/>
+  <int value="177" label="PEDI"/>
+  <int value="178" label="RAJASTHANI"/>
+  <int value="179" label="SESELWA"/>
+  <int value="180" label="TUMBUKA"/>
+  <int value="181" label="VENDA"/>
+  <int value="182" label="WARAY_PHILIPPINES"/>
+  <int value="183" label="X_183"/>
+  <int value="184" label="X_184"/>
+  <int value="185" label="X_185"/>
+  <int value="186" label="X_186"/>
+  <int value="187" label="X_187"/>
+  <int value="188" label="X_188"/>
+  <int value="189" label="X_189"/>
+  <int value="190" label="X_190"/>
+  <int value="191" label="X_191"/>
+  <int value="192" label="X_192"/>
+  <int value="193" label="X_193"/>
+  <int value="194" label="X_194"/>
+  <int value="195" label="X_195"/>
+  <int value="196" label="X_196"/>
+  <int value="197" label="X_197"/>
+  <int value="198" label="X_198"/>
+  <int value="199" label="X_199"/>
+  <int value="200" label="X_200"/>
+  <int value="201" label="X_201"/>
+  <int value="202" label="X_202"/>
+  <int value="203" label="X_203"/>
+  <int value="204" label="X_204"/>
+  <int value="205" label="X_205"/>
+  <int value="206" label="X_206"/>
+  <int value="207" label="X_207"/>
+  <int value="208" label="X_208"/>
+  <int value="209" label="X_209"/>
+  <int value="210" label="X_210"/>
+  <int value="211" label="X_211"/>
+  <int value="212" label="X_212"/>
+  <int value="213" label="X_213"/>
+  <int value="214" label="X_214"/>
+  <int value="215" label="X_215"/>
+  <int value="216" label="X_216"/>
+  <int value="217" label="X_217"/>
+  <int value="218" label="X_218"/>
+  <int value="219" label="X_219"/>
+  <int value="220" label="X_220"/>
+  <int value="221" label="X_221"/>
+  <int value="222" label="X_222"/>
+  <int value="223" label="X_223"/>
+  <int value="224" label="X_224"/>
+  <int value="225" label="X_225"/>
+  <int value="226" label="X_226"/>
+  <int value="227" label="X_227"/>
+  <int value="228" label="X_228"/>
+  <int value="229" label="X_229"/>
+  <int value="230" label="X_230"/>
+  <int value="231" label="X_231"/>
+  <int value="232" label="X_232"/>
+  <int value="233" label="X_233"/>
+  <int value="234" label="X_234"/>
+  <int value="235" label="X_235"/>
+  <int value="236" label="X_236"/>
+  <int value="237" label="X_237"/>
+  <int value="238" label="X_238"/>
+  <int value="239" label="X_239"/>
+  <int value="240" label="X_240"/>
+  <int value="241" label="X_241"/>
+  <int value="242" label="X_242"/>
+  <int value="243" label="X_243"/>
+  <int value="244" label="X_244"/>
+  <int value="245" label="X_245"/>
+  <int value="246" label="X_246"/>
+  <int value="247" label="X_247"/>
+  <int value="248" label="X_248"/>
+  <int value="249" label="X_249"/>
+  <int value="250" label="X_250"/>
+  <int value="251" label="X_251"/>
+  <int value="252" label="X_252"/>
+  <int value="253" label="X_253"/>
+  <int value="254" label="X_254"/>
+  <int value="255" label="X_255"/>
+  <int value="256" label="X_256"/>
+  <int value="257" label="X_257"/>
+  <int value="258" label="X_258"/>
+  <int value="259" label="X_259"/>
+  <int value="260" label="X_260"/>
+  <int value="261" label="X_261"/>
+  <int value="262" label="X_262"/>
+  <int value="263" label="X_263"/>
+  <int value="264" label="X_264"/>
+  <int value="265" label="X_265"/>
+  <int value="266" label="X_266"/>
+  <int value="267" label="X_267"/>
+  <int value="268" label="X_268"/>
+  <int value="269" label="X_269"/>
+  <int value="270" label="X_270"/>
+  <int value="271" label="X_271"/>
+  <int value="272" label="X_272"/>
+  <int value="273" label="X_273"/>
+  <int value="274" label="X_274"/>
+  <int value="275" label="X_275"/>
+  <int value="276" label="X_276"/>
+  <int value="277" label="X_277"/>
+  <int value="278" label="X_278"/>
+  <int value="279" label="X_279"/>
+  <int value="280" label="X_280"/>
+  <int value="281" label="X_281"/>
+  <int value="282" label="X_282"/>
+  <int value="283" label="X_283"/>
+  <int value="284" label="X_284"/>
+  <int value="285" label="X_285"/>
+  <int value="286" label="X_286"/>
+  <int value="287" label="X_287"/>
+  <int value="288" label="X_288"/>
+  <int value="289" label="X_289"/>
+  <int value="290" label="X_290"/>
+  <int value="291" label="X_291"/>
+  <int value="292" label="X_292"/>
+  <int value="293" label="X_293"/>
+  <int value="294" label="X_294"/>
+  <int value="295" label="X_295"/>
+  <int value="296" label="X_296"/>
+  <int value="297" label="X_297"/>
+  <int value="298" label="X_298"/>
+  <int value="299" label="X_299"/>
+  <int value="300" label="X_300"/>
+  <int value="301" label="X_301"/>
+  <int value="302" label="X_302"/>
+  <int value="303" label="X_303"/>
+  <int value="304" label="X_304"/>
+  <int value="305" label="X_305"/>
+  <int value="306" label="X_306"/>
+  <int value="307" label="X_307"/>
+  <int value="308" label="X_308"/>
+  <int value="309" label="X_309"/>
+  <int value="310" label="X_310"/>
+  <int value="311" label="X_311"/>
+  <int value="312" label="X_312"/>
+  <int value="313" label="X_313"/>
+  <int value="314" label="X_314"/>
+  <int value="315" label="X_315"/>
+  <int value="316" label="X_316"/>
+  <int value="317" label="X_317"/>
+  <int value="318" label="X_318"/>
+  <int value="319" label="X_319"/>
+  <int value="320" label="X_320"/>
+  <int value="321" label="X_321"/>
+  <int value="322" label="X_322"/>
+  <int value="323" label="X_323"/>
+  <int value="324" label="X_324"/>
+  <int value="325" label="X_325"/>
+  <int value="326" label="X_326"/>
+  <int value="327" label="X_327"/>
+  <int value="328" label="X_328"/>
+  <int value="329" label="X_329"/>
+  <int value="330" label="X_330"/>
+  <int value="331" label="X_331"/>
+  <int value="332" label="X_332"/>
+  <int value="333" label="X_333"/>
+  <int value="334" label="X_334"/>
+  <int value="335" label="X_335"/>
+  <int value="336" label="X_336"/>
+  <int value="337" label="X_337"/>
+  <int value="338" label="X_338"/>
+  <int value="339" label="X_339"/>
+  <int value="340" label="X_340"/>
+  <int value="341" label="X_341"/>
+  <int value="342" label="X_342"/>
+  <int value="343" label="X_343"/>
+  <int value="344" label="X_344"/>
+  <int value="345" label="X_345"/>
+  <int value="346" label="X_346"/>
+  <int value="347" label="X_347"/>
+  <int value="348" label="X_348"/>
+  <int value="349" label="X_349"/>
+  <int value="350" label="X_350"/>
+  <int value="351" label="X_351"/>
+  <int value="352" label="X_352"/>
+  <int value="353" label="X_353"/>
+  <int value="354" label="X_354"/>
+  <int value="355" label="X_355"/>
+  <int value="356" label="X_356"/>
+  <int value="357" label="X_357"/>
+  <int value="358" label="X_358"/>
+  <int value="359" label="X_359"/>
+  <int value="360" label="X_360"/>
+  <int value="361" label="X_361"/>
+  <int value="362" label="X_362"/>
+  <int value="363" label="X_363"/>
+  <int value="364" label="X_364"/>
+  <int value="365" label="X_365"/>
+  <int value="366" label="X_366"/>
+  <int value="367" label="X_367"/>
+  <int value="368" label="X_368"/>
+  <int value="369" label="X_369"/>
+  <int value="370" label="X_370"/>
+  <int value="371" label="X_371"/>
+  <int value="372" label="X_372"/>
+  <int value="373" label="X_373"/>
+  <int value="374" label="X_374"/>
+  <int value="375" label="X_375"/>
+  <int value="376" label="X_376"/>
+  <int value="377" label="X_377"/>
+  <int value="378" label="X_378"/>
+  <int value="379" label="X_379"/>
+  <int value="380" label="X_380"/>
+  <int value="381" label="X_381"/>
+  <int value="382" label="X_382"/>
+  <int value="383" label="X_383"/>
+  <int value="384" label="X_384"/>
+  <int value="385" label="X_385"/>
+  <int value="386" label="X_386"/>
+  <int value="387" label="X_387"/>
+  <int value="388" label="X_388"/>
+  <int value="389" label="X_389"/>
+  <int value="390" label="X_390"/>
+  <int value="391" label="X_391"/>
+  <int value="392" label="X_392"/>
+  <int value="393" label="X_393"/>
+  <int value="394" label="X_394"/>
+  <int value="395" label="X_395"/>
+  <int value="396" label="X_396"/>
+  <int value="397" label="X_397"/>
+  <int value="398" label="X_398"/>
+  <int value="399" label="X_399"/>
+  <int value="400" label="X_400"/>
+  <int value="401" label="X_401"/>
+  <int value="402" label="X_402"/>
+  <int value="403" label="X_403"/>
+  <int value="404" label="X_404"/>
+  <int value="405" label="X_405"/>
+  <int value="406" label="X_406"/>
+  <int value="407" label="X_407"/>
+  <int value="408" label="X_408"/>
+  <int value="409" label="X_409"/>
+  <int value="410" label="X_410"/>
+  <int value="411" label="X_411"/>
+  <int value="412" label="X_412"/>
+  <int value="413" label="X_413"/>
+  <int value="414" label="X_414"/>
+  <int value="415" label="X_415"/>
+  <int value="416" label="X_416"/>
+  <int value="417" label="X_417"/>
+  <int value="418" label="X_418"/>
+  <int value="419" label="X_419"/>
+  <int value="420" label="X_420"/>
+  <int value="421" label="X_421"/>
+  <int value="422" label="X_422"/>
+  <int value="423" label="X_423"/>
+  <int value="424" label="X_424"/>
+  <int value="425" label="X_425"/>
+  <int value="426" label="X_426"/>
+  <int value="427" label="X_427"/>
+  <int value="428" label="X_428"/>
+  <int value="429" label="X_429"/>
+  <int value="430" label="X_430"/>
+  <int value="431" label="X_431"/>
+  <int value="432" label="X_432"/>
+  <int value="433" label="X_433"/>
+  <int value="434" label="X_434"/>
+  <int value="435" label="X_435"/>
+  <int value="436" label="X_436"/>
+  <int value="437" label="X_437"/>
+  <int value="438" label="X_438"/>
+  <int value="439" label="X_439"/>
+  <int value="440" label="X_440"/>
+  <int value="441" label="X_441"/>
+  <int value="442" label="X_442"/>
+  <int value="443" label="X_443"/>
+  <int value="444" label="X_444"/>
+  <int value="445" label="X_445"/>
+  <int value="446" label="X_446"/>
+  <int value="447" label="X_447"/>
+  <int value="448" label="X_448"/>
+  <int value="449" label="X_449"/>
+  <int value="450" label="X_450"/>
+  <int value="451" label="X_451"/>
+  <int value="452" label="X_452"/>
+  <int value="453" label="X_453"/>
+  <int value="454" label="X_454"/>
+  <int value="455" label="X_455"/>
+  <int value="456" label="X_456"/>
+  <int value="457" label="X_457"/>
+  <int value="458" label="X_458"/>
+  <int value="459" label="X_459"/>
+  <int value="460" label="X_460"/>
+  <int value="461" label="X_461"/>
+  <int value="462" label="X_462"/>
+  <int value="463" label="X_463"/>
+  <int value="464" label="X_464"/>
+  <int value="465" label="X_465"/>
+  <int value="466" label="X_466"/>
+  <int value="467" label="X_467"/>
+  <int value="468" label="X_468"/>
+  <int value="469" label="X_469"/>
+  <int value="470" label="X_470"/>
+  <int value="471" label="X_471"/>
+  <int value="472" label="X_472"/>
+  <int value="473" label="X_473"/>
+  <int value="474" label="X_474"/>
+  <int value="475" label="X_475"/>
+  <int value="476" label="X_476"/>
+  <int value="477" label="X_477"/>
+  <int value="478" label="X_478"/>
+  <int value="479" label="X_479"/>
+  <int value="480" label="X_480"/>
+  <int value="481" label="X_481"/>
+  <int value="482" label="X_482"/>
+  <int value="483" label="X_483"/>
+  <int value="484" label="X_484"/>
+  <int value="485" label="X_485"/>
+  <int value="486" label="X_486"/>
+  <int value="487" label="X_487"/>
+  <int value="488" label="X_488"/>
+  <int value="489" label="X_489"/>
+  <int value="490" label="X_490"/>
+  <int value="491" label="X_491"/>
+  <int value="492" label="X_492"/>
+  <int value="493" label="X_493"/>
+  <int value="494" label="X_494"/>
+  <int value="495" label="X_495"/>
+  <int value="496" label="X_496"/>
+  <int value="497" label="X_497"/>
+  <int value="498" label="X_498"/>
+  <int value="499" label="X_499"/>
+  <int value="500" label="X_500"/>
+  <int value="501" label="X_501"/>
+  <int value="502" label="X_502"/>
+  <int value="503" label="X_503"/>
+  <int value="504" label="X_504"/>
+  <int value="505" label="X_505"/>
+  <int value="506" label="NDEBELE"/>
+  <int value="507" label="X_BORK_BORK_BORK"/>
+  <int value="508" label="X_PIG_LATIN"/>
+  <int value="509" label="X_HACKER"/>
+  <int value="510" label="X_KLINGON"/>
+  <int value="511" label="X_ELMER_FUDD"/>
+  <int value="512" label="X_Common"/>
+  <int value="513" label="X_Latin"/>
+  <int value="514" label="X_Greek"/>
+  <int value="515" label="X_Cyrillic"/>
+  <int value="516" label="X_Armenian"/>
+  <int value="517" label="X_Hebrew"/>
+  <int value="518" label="X_Arabic"/>
+  <int value="519" label="X_Syriac"/>
+  <int value="520" label="X_Thaana"/>
+  <int value="521" label="X_Devanagari"/>
+  <int value="522" label="X_Bengali"/>
+  <int value="523" label="X_Gurmukhi"/>
+  <int value="524" label="X_Gujarati"/>
+  <int value="525" label="X_Oriya"/>
+  <int value="526" label="X_Tamil"/>
+  <int value="527" label="X_Telugu"/>
+  <int value="528" label="X_Kannada"/>
+  <int value="529" label="X_Malayalam"/>
+  <int value="530" label="X_Sinhala"/>
+  <int value="531" label="X_Thai"/>
+  <int value="532" label="X_Lao"/>
+  <int value="533" label="X_Tibetan"/>
+  <int value="534" label="X_Myanmar"/>
+  <int value="535" label="X_Georgian"/>
+  <int value="536" label="X_Hangul"/>
+  <int value="537" label="X_Ethiopic"/>
+  <int value="538" label="X_Cherokee"/>
+  <int value="539" label="X_Canadian_Aboriginal"/>
+  <int value="540" label="X_Ogham"/>
+  <int value="541" label="X_Runic"/>
+  <int value="542" label="X_Khmer"/>
+  <int value="543" label="X_Mongolian"/>
+  <int value="544" label="X_Hiragana"/>
+  <int value="545" label="X_Katakana"/>
+  <int value="546" label="X_Bopomofo"/>
+  <int value="547" label="X_Han"/>
+  <int value="548" label="X_Yi"/>
+  <int value="549" label="X_Old_Italic"/>
+  <int value="550" label="X_Gothic"/>
+  <int value="551" label="X_Deseret"/>
+  <int value="552" label="X_Inherited"/>
+  <int value="553" label="X_Tagalog"/>
+  <int value="554" label="X_Hanunoo"/>
+  <int value="555" label="X_Buhid"/>
+  <int value="556" label="X_Tagbanwa"/>
+  <int value="557" label="X_Limbu"/>
+  <int value="558" label="X_Tai_Le"/>
+  <int value="559" label="X_Linear_B"/>
+  <int value="560" label="X_Ugaritic"/>
+  <int value="561" label="X_Shavian"/>
+  <int value="562" label="X_Osmanya"/>
+  <int value="563" label="X_Cypriot"/>
+  <int value="564" label="X_Braille"/>
+  <int value="565" label="X_Buginese"/>
+  <int value="566" label="X_Coptic"/>
+  <int value="567" label="X_New_Tai_Lue"/>
+  <int value="568" label="X_Glagolitic"/>
+  <int value="569" label="X_Tifinagh"/>
+  <int value="570" label="X_Syloti_Nagri"/>
+  <int value="571" label="X_Old_Persian"/>
+  <int value="572" label="X_Kharoshthi"/>
+  <int value="573" label="X_Balinese"/>
+  <int value="574" label="X_Cuneiform"/>
+  <int value="575" label="X_Phoenician"/>
+  <int value="576" label="X_Phags_Pa"/>
+  <int value="577" label="X_Nko"/>
+  <int value="578" label="X_Sundanese"/>
+  <int value="579" label="X_Lepcha"/>
+  <int value="580" label="X_Ol_Chiki"/>
+  <int value="581" label="X_Vai"/>
+  <int value="582" label="X_Saurashtra"/>
+  <int value="583" label="X_Kayah_Li"/>
+  <int value="584" label="X_Rejang"/>
+  <int value="585" label="X_Lycian"/>
+  <int value="586" label="X_Carian"/>
+  <int value="587" label="X_Lydian"/>
+  <int value="588" label="X_Cham"/>
+  <int value="589" label="X_Tai_Tham"/>
+  <int value="590" label="X_Tai_Viet"/>
+  <int value="591" label="X_Avestan"/>
+  <int value="592" label="X_Egyptian_Hieroglyphs"/>
+  <int value="593" label="X_Samaritan"/>
+  <int value="594" label="X_Lisu"/>
+  <int value="595" label="X_Bamum"/>
+  <int value="596" label="X_Javanese"/>
+  <int value="597" label="X_Meetei_Mayek"/>
+  <int value="598" label="X_Imperial_Aramaic"/>
+  <int value="599" label="X_Old_South_Arabian"/>
+  <int value="600" label="X_Inscriptional_Parthian"/>
+  <int value="601" label="X_Inscriptional_Pahlavi"/>
+  <int value="602" label="X_Old_Turkic"/>
+  <int value="603" label="X_Kaithi"/>
+  <int value="604" label="X_Batak"/>
+  <int value="605" label="X_Brahmi"/>
+  <int value="606" label="X_Mandaic"/>
+  <int value="607" label="X_Chakma"/>
+  <int value="608" label="X_Meroitic_Cursive"/>
+  <int value="609" label="X_Meroitic_Hieroglyphs"/>
+  <int value="610" label="X_Miao"/>
+  <int value="611" label="X_Sharada"/>
+  <int value="612" label="X_Sora_Sompeng"/>
+  <int value="613" label="X_Takri"/>
+</enum>
+
+<enum name="CLD3LanguageCode" type="int">
+  <summary>
+    Hash values for the languages supported by CLD3. Each of these values is
+    computed by casting the output of base::HashMetricName(language_string_id)
+    to base::HistogramBase::Sample.
+  </summary>
+  <int value="-2132740958" label="gl"/>
+  <int value="-2112894028" label="haw"/>
+  <int value="-2092490813" label="fa"/>
+  <int value="-2084324285" label="iw"/>
+  <int value="-2070680532" label="hi"/>
+  <int value="-2070250592" label="zu"/>
+  <int value="-2042178987" label="si"/>
+  <int value="-2041104386" label="mi"/>
+  <int value="-2014954614" label="so"/>
+  <int value="-2005166181" label="ja-Latn"/>
+  <int value="-1999171202" label="lv"/>
+  <int value="-1994870905" label="lt"/>
+  <int value="-1855113037" label="vi"/>
+  <int value="-1828586117" label="de"/>
+  <int value="-1823968882" label="zh"/>
+  <int value="-1791051166" label="ha"/>
+  <int value="-1760672594" label="mr"/>
+  <int value="-1696927720" label="la"/>
+  <int value="-1690250140" label="ja"/>
+  <int value="-1566592213" label="hi-Latn"/>
+  <int value="-1532548885" label="pa"/>
+  <int value="-1515310228" label="ps"/>
+  <int value="-1284862637" label="ru"/>
+  <int value="-1273588087" label="kn"/>
+  <int value="-1211529228" label="gd"/>
+  <int value="-1117024738" label="zh-Latn"/>
+  <int value="-1100371650" label="sn"/>
+  <int value="-1048980531" label="ur"/>
+  <int value="-1042449480" label="cy"/>
+  <int value="-1033645590" label="fil"/>
+  <int value="-1025520269" label="az"/>
+  <int value="-1010619188" label="ru-Latn"/>
+  <int value="-1000295094" label="no"/>
+  <int value="-887258309" label="hu"/>
+  <int value="-862298602" label="st"/>
+  <int value="-851607677" label="sm"/>
+  <int value="-838275151" label="xh"/>
+  <int value="-750267977" label="bg"/>
+  <int value="-742603342" label="ca"/>
+  <int value="-740941224" label="ku"/>
+  <int value="-734032818" label="km"/>
+  <int value="-717751759" label="lb"/>
+  <int value="-659007214" label="el"/>
+  <int value="-647197922" label="ceb"/>
+  <int value="-645438410" label="my"/>
+  <int value="-644560085" label="su"/>
+  <int value="-598481752" label="et"/>
+  <int value="-442590807" label="sd"/>
+  <int value="-441493751" label="el-Latn"/>
+  <int value="-426630965" label="ga"/>
+  <int value="-415677801" label="it"/>
+  <int value="-403118581" label="sw"/>
+  <int value="-349113427" label="am"/>
+  <int value="-342591258" label="sq"/>
+  <int value="-226066958" label="bg-Latn"/>
+  <int value="-219674420" label="ta"/>
+  <int value="-181870943" label="bn"/>
+  <int value="-110306666" label="sr"/>
+  <int value="-78164291" label="kk"/>
+  <int value="-74147910" label="en"/>
+  <int value="-35182995" label="fi"/>
+  <int value="-5034744" label="ny"/>
+  <int value="42532257" label="id"/>
+  <int value="64053359" label="eu"/>
+  <int value="114573335" label="es"/>
+  <int value="121688617" label="eo"/>
+  <int value="124739394" label="lo"/>
+  <int value="132594104" label="be"/>
+  <int value="134866094" label="ka"/>
+  <int value="142313505" label="ro"/>
+  <int value="145030010" label="gu"/>
+  <int value="162326141" label="sl"/>
+  <int value="183952636" label="mg"/>
+  <int value="191168946" label="mk"/>
+  <int value="357286655" label="af"/>
+  <int value="461111861" label="mt"/>
+  <int value="462869158" label="hy"/>
+  <int value="470982931" label="sv"/>
+  <int value="522435458" label="hr"/>
+  <int value="526531379" label="ml"/>
+  <int value="538270200" label="uk"/>
+  <int value="596295208" label="bs"/>
+  <int value="673577439" label="cs"/>
+  <int value="796588925" label="yo"/>
+  <int value="804120371" label="jv"/>
+  <int value="873647701" label="th"/>
+  <int value="910795716" label="ne"/>
+  <int value="925733725" label="ms"/>
+  <int value="1092864716" label="ht"/>
+  <int value="1110169461" label="hmn"/>
+  <int value="1119752109" label="te"/>
+  <int value="1140816756" label="ar"/>
+  <int value="1166708194" label="is"/>
+  <int value="1214473765" label="unknown"/>
+  <int value="1311313702" label="pt"/>
+  <int value="1312638242" label="pl"/>
+  <int value="1437205305" label="uz"/>
+  <int value="1482920614" label="yi"/>
+  <int value="1483760478" label="tg"/>
+  <int value="1552733612" label="da"/>
+  <int value="1638257274" label="sk"/>
+  <int value="1670494558" label="ko"/>
+  <int value="1704087523" label="ky"/>
+  <int value="1704315002" label="fr"/>
+  <int value="1717583602" label="co"/>
+  <int value="1754979806" label="fy"/>
+  <int value="1853848431" label="tr"/>
+  <int value="2039992295" label="ig"/>
+  <int value="2087142539" label="mn"/>
+  <int value="2119087611" label="nl"/>
+</enum>
+
+<enum name="ClearDataSiteBlacklistCrossedReason" type="int">
+  <int value="0" label="Durable"/>
+  <int value="1" label="Notifications"/>
+  <int value="2" label="Engagement"/>
+  <int value="3" label="Notifications and Engagement"/>
+  <int value="4" label="Durable and Engagement"/>
+  <int value="5" label="Notifications and Durable"/>
+  <int value="6" label="Notifications, Durable, and Engagement"/>
+  <int value="7" label="Unknown"/>
+</enum>
+
+<enum name="ClearSiteDataParameters" type="int">
+  <int value="0" label="No datatypes"/>
+  <int value="1" label="Cookies"/>
+  <int value="2" label="Storage"/>
+  <int value="3" label="Cookies and Storage"/>
+  <int value="4" label="Cache"/>
+  <int value="5" label="Cookies and Cache"/>
+  <int value="6" label="Storage and Cache"/>
+  <int value="7" label="Cookies, Storage, and Cache"/>
+</enum>
+
+<enum name="ClientAppId" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Gmail"/>
+  <int value="2" label="Facebook"/>
+  <int value="3" label="Plus"/>
+  <int value="4" label="Twitter"/>
+  <int value="5" label="Chrome"/>
+  <int value="6" label="Hangouts"/>
+  <int value="7" label="Messenger"/>
+  <int value="8" label="News"/>
+  <int value="9" label="Line"/>
+  <int value="10" label="Whatsapp"/>
+  <int value="11" label="Gsa"/>
+</enum>
+
+<enum name="ClipboardAction" type="int">
+  <int value="0" label="Write from non-Incognito"/>
+  <int value="1" label="Write from Incognito"/>
+  <int value="2" label="Read Text"/>
+</enum>
+
+<enum name="ClockStates" type="int">
+  <int value="0"
+      label="CLOCK_STATE_UNKNOWN: accuracy of system clock is unknown"/>
+  <int value="1" label="CLOCK_STATE_OK: system clock is roughly accurate"/>
+  <int value="2" label="CLOCK_STATE_PAST: system clock is in the past"/>
+  <int value="3" label="CLOCK_STATE_FUTURE: system clock is in the future"/>
+</enum>
+
+<enum name="CloudImportUserAction" type="int">
+  <int value="0" label="IMPORT_INITIATED"/>
+</enum>
+
+<enum name="CloudPrintAuthEventType" type="int">
+  <int value="0" label="AUTH_EVENT_ROBO_CREATE"/>
+  <int value="1" label="AUTH_EVENT_ROBO_SUCCEEDED"/>
+  <int value="2" label="AUTH_EVENT_ROBO_FAILED"/>
+  <int value="3" label="AUTH_EVENT_ROBO_JSON_ERROR"/>
+  <int value="4" label="AUTH_EVENT_ROBO_AUTH_ERROR"/>
+  <int value="5" label="AUTH_EVENT_AUTH_WITH_TOKEN"/>
+  <int value="6" label="AUTH_EVENT_AUTH_WITH_CODE"/>
+  <int value="7" label="AUTH_EVENT_TOKEN_RESPONSE"/>
+  <int value="8" label="AUTH_EVENT_REFRESH_REQUEST"/>
+  <int value="9" label="AUTH_EVENT_REFRESH_RESPONSE"/>
+  <int value="10" label="AUTH_EVENT_AUTH_ERROR"/>
+  <int value="11" label="AUTH_EVENT_NET_ERROR"/>
+</enum>
+
+<enum name="CloudPrintJobHandlerEventType" type="int">
+  <int value="0" label="JOB_HANDLER_CHECK_FOR_JOBS"/>
+  <int value="1" label="JOB_HANDLER_START"/>
+  <int value="2" label="JOB_HANDLER_PENDING_TASK"/>
+  <int value="3" label="JOB_HANDLER_PRINTER_UPDATE"/>
+  <int value="4" label="JOB_HANDLER_JOB_CHECK"/>
+  <int value="5" label="JOB_HANDLER_JOB_STARTED"/>
+  <int value="6" label="JOB_HANDLER_VALID_TICKET"/>
+  <int value="7" label="JOB_HANDLER_DATA"/>
+  <int value="8" label="JOB_HANDLER_SET_IN_PROGRESS"/>
+  <int value="9" label="JOB_HANDLER_SET_START_PRINTING"/>
+  <int value="10" label="JOB_HANDLER_START_SPOOLING"/>
+  <int value="11" label="JOB_HANDLER_SPOOLED"/>
+  <int value="12" label="JOB_HANDLER_JOB_COMPLETED"/>
+  <int value="13" label="JOB_HANDLER_INVALID_TICKET"/>
+  <int value="14" label="JOB_HANDLER_INVALID_DATA"/>
+</enum>
+
+<enum name="CloudPrintJobStatusType" type="int">
+  <int value="0" label="JOB_SUCCESS"/>
+  <int value="1" label="JOB_DOWNLOAD_FAILED"/>
+  <int value="2" label="JOB_VALIDATE_TICKET_FAILED"/>
+  <int value="3" label="JOB_FAILED"/>
+</enum>
+
+<enum name="CloudPrintNativeJobStatusType" type="int">
+  <int value="0" label="PRINT_JOB_STATUS_INVALID"/>
+  <int value="1" label="PRINT_JOB_STATUS_IN_PROGRESS"/>
+  <int value="2" label="PRINT_JOB_STATUS_ERROR"/>
+  <int value="3" label="PRINT_JOB_STATUS_COMPLETED"/>
+</enum>
+
+<enum name="CloudPrintUrlFetcherRequestType" type="int">
+  <int value="0" label="REQUEST_AUTH_CODE"/>
+  <int value="1" label="REQUEST_REGISTER"/>
+  <int value="2" label="REQUEST_UNREGISTER"/>
+  <int value="3" label="REQUEST_UPDATE_PRINTER"/>
+  <int value="4" label="REQUEST_UPDATE_JOB"/>
+  <int value="5" label="REQUEST_USER_MESSAGE"/>
+  <int value="6" label="REQUEST_TICKET"/>
+  <int value="7" label="REQUEST_DATA"/>
+  <int value="8" label="REQUEST_JOB_FETCH"/>
+</enum>
+
+<enum name="CoalescePotentialPackets" type="int">
+  <int value="0" label="No Advantage"/>
+  <int value="1" label="Header packets Only"/>
+  <int value="30" label="More Than 30"/>
+</enum>
+
+<enum name="CombinedHttpResponseAndNetErrorCode" type="int">
+<!-- Generated from net/base/net_error_list.h -->
+
+  <int value="-806" label="DNS_SORT_ERROR"/>
+  <int value="-805" label="DNS_SEARCH_EMPTY"/>
+  <int value="-804" label="DNS_CACHE_MISS"/>
+  <int value="-803" label="DNS_TIMED_OUT"/>
+  <int value="-802" label="DNS_SERVER_FAILED"/>
+  <int value="-801" label="DNS_SERVER_REQUIRES_TCP"/>
+  <int value="-800" label="DNS_MALFORMED_RESPONSE"/>
+  <int value="-715" label="CHANNEL_ID_IMPORT_FAILED"/>
+  <int value="-714" label="CERT_DATABASE_CHANGED"/>
+  <int value="-713" label="SELF_SIGNED_CERT_GENERATION_FAILED"/>
+  <int value="-712" label="PRIVATE_KEY_EXPORT_FAILED"/>
+  <int value="-711" label="ORIGIN_BOUND_CERT_GENERATION_FAILED"/>
+  <int value="-710" label="KEY_GENERATION_FAILED"/>
+  <int value="-709" label="PKCS12_IMPORT_UNSUPPORTED"/>
+  <int value="-708" label="PKCS12_IMPORT_INVALID_FILE"/>
+  <int value="-707" label="PKCS12_IMPORT_INVALID_MAC"/>
+  <int value="-706" label="IMPORT_SERVER_CERT_FAILED"/>
+  <int value="-705" label="IMPORT_CA_CERT_FAILED"/>
+  <int value="-704" label="IMPORT_CERT_ALREADY_EXISTS"/>
+  <int value="-703" label="IMPORT_CA_CERT_NOT_CA"/>
+  <int value="-702" label="PKCS12_IMPORT_FAILED"/>
+  <int value="-701" label="PKCS12_IMPORT_BAD_PASSWORD"/>
+  <int value="-607" label="FTP_BAD_COMMAND_SEQUENCE"/>
+  <int value="-606" label="FTP_COMMAND_NOT_SUPPORTED"/>
+  <int value="-605" label="FTP_SYNTAX_ERROR"/>
+  <int value="-604" label="FTP_FILE_BUSY"/>
+  <int value="-603" label="FTP_TRANSFER_ABORTED"/>
+  <int value="-602" label="FTP_SERVICE_UNAVAILABLE"/>
+  <int value="-601" label="FTP_FAILED"/>
+  <int value="-503" label="ADD_USER_CERT_FAILED"/>
+  <int value="-502" label="NO_PRIVATE_KEY_FOR_CERT"/>
+  <int value="-501" label="INSECURE_RESPONSE"/>
+  <int value="-410" label="CACHE_AUTH_FAILURE_AFTER_READ"/>
+  <int value="-409" label="CACHE_LOCK_TIMEOUT"/>
+  <int value="-408" label="CACHE_CHECKSUM_MISMATCH"/>
+  <int value="-407" label="CACHE_CHECKSUM_READ_FAILURE"/>
+  <int value="-406" label="CACHE_RACE"/>
+  <int value="-405" label="CACHE_CREATE_FAILURE"/>
+  <int value="-404" label="CACHE_OPEN_FAILURE"/>
+  <int value="-403" label="CACHE_OPERATION_NOT_SUPPORTED"/>
+  <int value="-402" label="CACHE_WRITE_FAILURE"/>
+  <int value="-401" label="CACHE_READ_FAILURE"/>
+  <int value="-400" label="CACHE_MISS"/>
+  <int value="-370" label="INVALID_HTTP_RESPONSE"/>
+  <int value="-369" label="TEMPORARY_BACKOFF"/>
+  <int value="-368" label="ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN"/>
+  <int value="-367" label="PAC_SCRIPT_TERMINATED"/>
+  <int value="-366" label="PROXY_HTTP_1_1_REQUIRED"/>
+  <int value="-365" label="HTTP_1_1_REQUIRED"/>
+  <int value="-364" label="PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION"/>
+  <int value="-363" label="SPDY_COMPRESSION_ERROR"/>
+  <int value="-362" label="SPDY_FRAME_SIZE_ERROR"/>
+  <int value="-361" label="SPDY_FLOW_CONTROL_ERROR"/>
+  <int value="-360" label="SPDY_INADEQUATE_TRANSPORT_SECURITY"/>
+  <int value="-359" label="REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC"/>
+  <int value="-358" label="QUIC_HANDSHAKE_FAILED"/>
+  <int value="-357" label="RESPONSE_HEADERS_TRUNCATED"/>
+  <int value="-356" label="QUIC_PROTOCOL_ERROR"/>
+  <int value="-355" label="INCOMPLETE_CHUNKED_ENCODING"/>
+  <int value="-354" label="CONTENT_LENGTH_MISMATCH"/>
+  <int value="-352" label="SPDY_PING_FAILED"/>
+  <int value="-351" label="SPDY_SERVER_REFUSED_STREAM"/>
+  <int value="-350" label="RESPONSE_HEADERS_MULTIPLE_LOCATION"/>
+  <int value="-349" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION"/>
+  <int value="-348" label="PAC_NOT_IN_DHCP"/>
+  <int value="-347" label="INCOMPLETE_SPDY_HEADERS"/>
+  <int value="-346" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH"/>
+  <int value="-345" label="RESPONSE_BODY_TOO_BIG_TO_DRAIN"/>
+  <int value="-344" label="UNDOCUMENTED_SECURITY_LIBRARY_STATUS"/>
+  <int value="-343" label="MISCONFIGURED_AUTH_ENVIRONMENT"/>
+  <int value="-342" label="UNEXPECTED_SECURITY_LIBRARY_STATUS"/>
+  <int value="-341" label="MISSING_AUTH_CREDENTIALS"/>
+  <int value="-340" label="ENCODING_DETECTION_FAILED"/>
+  <int value="-339" label="UNSUPPORTED_AUTH_SCHEME"/>
+  <int value="-338" label="INVALID_AUTH_CREDENTIALS"/>
+  <int value="-337" label="SPDY_PROTOCOL_ERROR"/>
+  <int value="-336" label="NO_SUPPORTED_PROXIES"/>
+  <int value="-335" label="INVALID_SPDY_STREAM"/>
+  <int value="-334" label="UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT"/>
+  <int value="-333" label="ENCODING_CONVERSION_FAILED"/>
+  <int value="-332" label="SYN_REPLY_NOT_RECEIVED"/>
+  <int value="-331" label="NETWORK_IO_SUSPENDED"/>
+  <int value="-330" label="CONTENT_DECODING_FAILED"/>
+  <int value="-329" label="MALFORMED_IDENTITY"/>
+  <int value="-328" label="REQUEST_RANGE_NOT_SATISFIABLE"/>
+  <int value="-327" label="PAC_SCRIPT_FAILED"/>
+  <int value="-326" label="PAC_STATUS_NOT_OK"/>
+  <int value="-325" label="RESPONSE_HEADERS_TOO_BIG"/>
+  <int value="-324" label="EMPTY_RESPONSE"/>
+  <int value="-323" label="UNEXPECTED_PROXY_AUTH"/>
+  <int value="-322" label="METHOD_NOT_SUPPORTED"/>
+  <int value="-321" label="INVALID_CHUNKED_ENCODING"/>
+  <int value="-320" label="INVALID_RESPONSE"/>
+  <int value="-312" label="UNSAFE_PORT"/>
+  <int value="-311" label="UNSAFE_REDIRECT"/>
+  <int value="-310" label="TOO_MANY_REDIRECTS"/>
+  <int value="-302" label="UNKNOWN_URL_SCHEME"/>
+  <int value="-301" label="DISALLOWED_URL_SCHEME"/>
+  <int value="-300" label="INVALID_URL"/>
+  <int value="-215" label="CERT_END"/>
+  <int value="-214" label="CERTIFICATE_TRANSPARENCY_REQUIRED"/>
+  <int value="-213" label="CERT_VALIDITY_TOO_LONG"/>
+  <int value="-212" label="CERT_NAME_CONSTRAINT_VIOLATION"/>
+  <int value="-211" label="CERT_WEAK_KEY"/>
+  <int value="-210" label="CERT_NON_UNIQUE_NAME"/>
+  <int value="-208" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
+  <int value="-207" label="CERT_INVALID"/>
+  <int value="-206" label="CERT_REVOKED"/>
+  <int value="-205" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
+  <int value="-204" label="CERT_NO_REVOCATION_MECHANISM"/>
+  <int value="-203" label="CERT_CONTAINS_ERRORS"/>
+  <int value="-202" label="CERT_AUTHORITY_INVALID"/>
+  <int value="-201" label="CERT_DATE_INVALID"/>
+  <int value="-200" label="CERT_COMMON_NAME_INVALID"/>
+  <int value="-172" label="SSL_OBSOLETE_CIPHER"/>
+  <int value="-171" label="CT_CONSISTENCY_PROOF_PARSING_FAILED"/>
+  <int value="-170" label="UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH"/>
+  <int value="-169" label="CT_STH_INCOMPLETE"/>
+  <int value="-168" label="CT_STH_PARSING_FAILED"/>
+  <int value="-167" label="SSL_SERVER_CERT_BAD_FORMAT"/>
+  <int value="-166" label="ICANN_NAME_COLLISION"/>
+  <int value="-165" label="SSL_FALLBACK_BEYOND_MINIMUM_VERSION"/>
+  <int value="-164" label="SSL_CLIENT_AUTH_CERT_BAD_FORMAT"/>
+  <int value="-163" label="SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE"/>
+  <int value="-162" label="SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE"/>
+  <int value="-161" label="SOCKET_SET_SEND_BUFFER_SIZE_ERROR"/>
+  <int value="-160" label="SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR"/>
+  <int value="-159" label="SSL_UNRECOGNIZED_NAME_ALERT"/>
+  <int value="-158" label="CT_NO_SCTS_VERIFIED_OK"/>
+  <int value="-157" label="SSL_INAPPROPRIATE_FALLBACK"/>
+  <int value="-156" label="SSL_SERVER_CERT_CHANGED"/>
+  <int value="-154" label="WS_THROTTLE_QUEUE_TOO_LARGE"/>
+  <int value="-153" label="SSL_DECRYPT_ERROR_ALERT"/>
+  <int value="-152" label="ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH"/>
+  <int value="-151" label="CLIENT_AUTH_CERT_TYPE_UNSUPPORTED"/>
+  <int value="-150" label="SSL_PINNED_KEY_NOT_IN_CERT_CHAIN"/>
+  <int value="-149" label="SSL_BAD_PEER_PUBLIC_KEY"/>
+  <int value="-148" label="SSL_HANDSHAKE_NOT_COMPLETED"/>
+  <int value="-147" label="ADDRESS_IN_USE"/>
+  <int value="-145" label="WS_PROTOCOL_ERROR"/>
+  <int value="-143" label="SPDY_SESSION_ALREADY_EXISTS"/>
+  <int value="-142" label="MSG_TOO_BIG"/>
+  <int value="-141" label="SSL_CLIENT_AUTH_SIGNATURE_FAILED"/>
+  <int value="-140" label="HTTPS_PROXY_TUNNEL_RESPONSE"/>
+  <int value="-139" label="TEMPORARILY_THROTTLED"/>
+  <int value="-138" label="NETWORK_ACCESS_DENIED"/>
+  <int value="-137" label="NAME_RESOLUTION_FAILED"/>
+  <int value="-136" label="PROXY_CERTIFICATE_INVALID"/>
+  <int value="-135" label="SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY"/>
+  <int value="-134" label="SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED"/>
+  <int value="-133" label="PRECONNECT_MAX_SOCKET_LIMIT"/>
+  <int value="-131" label="MANDATORY_PROXY_CONFIGURATION_FAILED"/>
+  <int value="-130" label="PROXY_CONNECTION_FAILED"/>
+  <int value="-129" label="SSL_WEAK_SERVER_EPHEMERAL_DH_KEY"/>
+  <int value="-128" label="SSL_UNSAFE_NEGOTIATION"/>
+  <int value="-127" label="PROXY_AUTH_REQUESTED"/>
+  <int value="-126" label="SSL_BAD_RECORD_MAC_ALERT"/>
+  <int value="-125" label="SSL_DECOMPRESSION_FAILURE_ALERT"/>
+  <int value="-124" label="WINSOCK_UNEXPECTED_WRITTEN_BYTES"/>
+  <int value="-123" label="SSL_NO_RENEGOTIATION"/>
+  <int value="-122" label="ALPN_NEGOTIATION_FAILED"/>
+  <int value="-121" label="SOCKS_CONNECTION_HOST_UNREACHABLE"/>
+  <int value="-120" label="SOCKS_CONNECTION_FAILED"/>
+  <int value="-119" label="HOST_RESOLVER_QUEUE_TOO_LARGE"/>
+  <int value="-118" label="CONNECTION_TIMED_OUT"/>
+  <int value="-117" label="BAD_SSL_CLIENT_AUTH_CERT"/>
+  <int value="-116" label="CERT_ERROR_IN_SSL_RENEGOTIATION"/>
+  <int value="-115" label="PROXY_AUTH_UNSUPPORTED"/>
+  <int value="-114" label="SSL_RENEGOTIATION_REQUESTED"/>
+  <int value="-113" label="SSL_VERSION_OR_CIPHER_MISMATCH"/>
+  <int value="-112" label="NO_SSL_VERSIONS_ENABLED"/>
+  <int value="-111" label="TUNNEL_CONNECTION_FAILED"/>
+  <int value="-110" label="SSL_CLIENT_AUTH_CERT_NEEDED"/>
+  <int value="-109" label="ADDRESS_UNREACHABLE"/>
+  <int value="-108" label="ADDRESS_INVALID"/>
+  <int value="-107" label="SSL_PROTOCOL_ERROR"/>
+  <int value="-106" label="INTERNET_DISCONNECTED"/>
+  <int value="-105" label="NAME_NOT_RESOLVED"/>
+  <int value="-104" label="CONNECTION_FAILED"/>
+  <int value="-103" label="CONNECTION_ABORTED"/>
+  <int value="-102" label="CONNECTION_REFUSED"/>
+  <int value="-101" label="CONNECTION_RESET"/>
+  <int value="-100" label="CONNECTION_CLOSED"/>
+  <int value="-27" label="BLOCKED_BY_RESPONSE"/>
+  <int value="-26" label="CONTEXT_SHUT_DOWN"/>
+  <int value="-25" label="UPLOAD_STREAM_REWIND_NOT_SUPPORTED"/>
+  <int value="-24" label="BLOCKED_ENROLLMENT_CHECK_PENDING"/>
+  <int value="-23" label="SOCKET_IS_CONNECTED"/>
+  <int value="-22" label="BLOCKED_BY_ADMINISTRATOR"/>
+  <int value="-21" label="NETWORK_CHANGED"/>
+  <int value="-20" label="BLOCKED_BY_CLIENT"/>
+  <int value="-19" label="FILE_VIRUS_INFECTED"/>
+  <int value="-18" label="FILE_NO_SPACE"/>
+  <int value="-17" label="FILE_PATH_TOO_LONG"/>
+  <int value="-16" label="FILE_EXISTS"/>
+  <int value="-15" label="SOCKET_NOT_CONNECTED"/>
+  <int value="-14" label="UPLOAD_FILE_CHANGED"/>
+  <int value="-13" label="OUT_OF_MEMORY"/>
+  <int value="-12" label="INSUFFICIENT_RESOURCES"/>
+  <int value="-11" label="NOT_IMPLEMENTED"/>
+  <int value="-10" label="ACCESS_DENIED"/>
+  <int value="-9" label="UNEXPECTED"/>
+  <int value="-8" label="FILE_TOO_BIG"/>
+  <int value="-7" label="TIMED_OUT"/>
+  <int value="-6" label="FILE_NOT_FOUND"/>
+  <int value="-5" label="INVALID_HANDLE"/>
+  <int value="-4" label="INVALID_ARGUMENT"/>
+  <int value="-3" label="ABORTED"/>
+  <int value="-2" label="FAILED"/>
+  <int value="-1" label="IO_PENDING"/>
+  <int value="100" label="100: Continue"/>
+  <int value="101" label="101: Switching Protocols"/>
+  <int value="200" label="200: OK"/>
+  <int value="201" label="201: Created"/>
+  <int value="202" label="202: Accepted"/>
+  <int value="203" label="203: Non-Authoritative Information"/>
+  <int value="204" label="204: No Content"/>
+  <int value="205" label="205: Reset Content"/>
+  <int value="206" label="206: Partial Content"/>
+  <int value="300" label="300: Multiple Choices"/>
+  <int value="301" label="301: Moved Permanently"/>
+  <int value="302" label="302: Found"/>
+  <int value="303" label="303: See Other"/>
+  <int value="304" label="304: Not Modified"/>
+  <int value="305" label="305: Use Proxy"/>
+  <int value="306" label="306: (Unused)"/>
+  <int value="307" label="307: Temporary Redirect"/>
+  <int value="400" label="400: Bad Request"/>
+  <int value="401" label="401: Unauthorized"/>
+  <int value="402" label="402: Payment Required"/>
+  <int value="403" label="403: Forbidden"/>
+  <int value="404" label="404: Not Found"/>
+  <int value="405" label="405: Method Not Allowed"/>
+  <int value="406" label="406: Not Acceptable"/>
+  <int value="407" label="407: Proxy Authentication Required"/>
+  <int value="408" label="408: Request Timeout"/>
+  <int value="409" label="409: Conflict"/>
+  <int value="410" label="410: Gone"/>
+  <int value="411" label="411: Length Required"/>
+  <int value="412" label="412: Precondition Failed"/>
+  <int value="413" label="413: Request Entity Too Large"/>
+  <int value="414" label="414: Request-URI Too Long"/>
+  <int value="415" label="415: Unsupported Media Type"/>
+  <int value="416" label="416: Requested Range Not Satisfiable"/>
+  <int value="417" label="417: Expectation Failed"/>
+  <int value="500" label="500: Internal Server Error"/>
+  <int value="501" label="501: Not Implemented"/>
+  <int value="502" label="502: Bad Gateway"/>
+  <int value="503" label="503: Service Unavailable"/>
+  <int value="504" label="504: Gateway Timeout"/>
+  <int value="505" label="505: HTTP Version Not Supported"/>
+</enum>
+
+<enum name="CommittedLoadEvent" type="int">
+  <obsolete>
+    Deprecated in favor of PageLoad.Timing2.NavigationToCommit and
+    PageLoad.AbortTiming.
+  </obsolete>
+  <int value="0" label="Committed load started"/>
+  <int value="1" label="Committed load failed before first layout"/>
+  <int value="2" label="Successful first layout"/>
+</enum>
+
+<enum name="ComponentUpdaterCalls" type="int">
+  <int value="0" label="Install"/>
+  <int value="1" label="Update"/>
+</enum>
+
+<enum name="CompositedScrolling" type="int">
+  <int value="0" label="Is scrollable area"/>
+  <int value="1" label="Needs to be stacking container"/>
+  <int value="2" label="Will use composited scrolling"/>
+</enum>
+
+<enum name="CompositorScrollResult" type="int">
+  <int value="0" label="ScrollOnMainThread"/>
+  <int value="1" label="ScrollStarted"/>
+  <int value="2" label="ScrollIgnored"/>
+  <int value="3" label="ScrollUnknown"/>
+</enum>
+
+<enum name="CompositorType" type="int">
+  <int value="0" label="Software compositor"/>
+  <int value="1" label="GPU compositor"/>
+</enum>
+
+<enum name="CompressibleStringCountType" type="int">
+  <obsolete>
+    Dprecated as of Aug 2016. CompressibleString has been reverted once at
+    https://crrev.com/2227933002.
+  </obsolete>
+  <int value="0" label="Compressed in a background tab"/>
+  <int value="1" label="Decompressed in a background or a foreground tab"/>
+</enum>
+
+<enum name="ComputeCurrentSigninStatus" type="int">
+  <obsolete>
+    Deprecated as of Jun 2016. The enum was added for debugging purpose and is
+    not needed anymore.
+  </obsolete>
+  <int value="0" label="Tried to compute current signin status."/>
+  <int value="1" label="Error: No profiles found."/>
+  <int value="2" label="No opened browser found."/>
+  <int value="3" label="User signed in when the signin status is unknown."/>
+  <int value="4" label="User signed out when the signin status is unknown."/>
+  <int value="5" label="Try to override the status when its valus is error."/>
+</enum>
+
+<enum name="ConnectionDiagnosticsIssue" type="int">
+  <int value="0" label="IP collision detected."/>
+  <int value="1" label="Routing problem detected."/>
+  <int value="2" label="HTTP issues or broken portal."/>
+  <int value="3"
+      label="DNS servers sending invalid responses -- might be misconfigured."/>
+  <int value="4" label="DNS servers pingable but not responding to requests."/>
+  <int value="5" label="No DNS servers configured for this connection."/>
+  <int value="6" label="All configured DNS server addresses are invalid."/>
+  <int value="7" label="No connection issue detected."/>
+  <int value="8" label="Trapped in captive portal."/>
+  <int value="9" label="Gateway issue or upstream connectivity problem."/>
+  <int value="10"
+      label="Gateway appears to be on network, but is not pingable."/>
+  <int value="11"
+      label="Web server appears to be on network, but is not pingable."/>
+  <int value="12" label="No ARP entry for the gateway."/>
+  <int value="13" label="No ARP entry for the webserver."/>
+  <int value="14" label="Internal failure in connection diagnostics."/>
+  <int value="15" label="No neighbor table entry for the gateway."/>
+  <int value="16" label="No neighbor table entry for the web server."/>
+  <int value="17"
+      label="Neighbor table entry for the gateway not in a connected state."/>
+  <int value="18"
+      label="Neighbor table entry for the web server not in a connected
+             state."/>
+  <int value="19" label="Placeholder 1."/>
+  <int value="20" label="Placeholder 2."/>
+  <int value="21" label="Placeholder 3."/>
+  <int value="22" label="Placeholder 4."/>
+</enum>
+
+<enum name="ConnectionFailureReason" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Bad Passphrase"/>
+  <int value="2" label="Bad WEP Key"/>
+  <int value="3" label="Failed to Connect"/>
+  <int value="4" label="DHCP Failure"/>
+  <int value="5" label="DNS Lookup Failure"/>
+  <int value="6" label="EAP Authentication"/>
+  <int value="7" label="EAP Local TLS"/>
+  <int value="8" label="EAP Remote TLS"/>
+  <int value="9" label="Out-of-range"/>
+  <int value="10" label="Pin Missing"/>
+</enum>
+
+<enum name="ConnectionInfo" type="int">
+  <summary>
+    Application protocol used for HTTP response as defined in
+    net::HttpResponseInfo::ConnectionInfo.
+  </summary>
+  <int value="0" label="unknown"/>
+  <int value="1" label="HTTP/1.1"/>
+  <int value="2" label="SPDY/2 (deprecated)"/>
+  <int value="3" label="SPDY/3"/>
+  <int value="4" label="HTTP/2"/>
+  <int value="5" label="QUIC (unknown version)"/>
+  <int value="6" label="HTTP/2 draft-14"/>
+  <int value="7" label="HTTP/2 draft-15"/>
+  <int value="8" label="HTTP/0.9"/>
+  <int value="9" label="HTTP/1.0"/>
+  <int value="10" label="QUIC/32"/>
+  <int value="11" label="QUIC/33"/>
+  <int value="12" label="QUIC/34"/>
+  <int value="13" label="QUIC/35"/>
+  <int value="14" label="QUIC/36"/>
+</enum>
+
+<enum name="ConnectionResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+  <int value="2" label="Aborted"/>
+</enum>
+
+<enum name="ConnectionStatus" type="int">
+  <int value="0" label="Offline"/>
+  <int value="1" label="Connected"/>
+  <int value="2" label="Online"/>
+</enum>
+
+<enum name="ConnectionSubtype" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="NONE"/>
+  <int value="2" label="OTHER"/>
+  <int value="3" label="GSM"/>
+  <int value="4" label="IDEN"/>
+  <int value="5" label="CDMA"/>
+  <int value="6" label="1XRTT"/>
+  <int value="7" label="GPRS"/>
+  <int value="8" label="EDGE"/>
+  <int value="9" label="UMTS"/>
+  <int value="10" label="EVDO_REV_0"/>
+  <int value="11" label="EVDO_REV_A"/>
+  <int value="12" label="HSPA"/>
+  <int value="13" label="EVDO_REV_B"/>
+  <int value="14" label="HSDPA"/>
+  <int value="15" label="HSUPA"/>
+  <int value="16" label="EHRPD"/>
+  <int value="17" label="HSPAP"/>
+  <int value="18" label="LTE"/>
+  <int value="19" label="LTE_ADVANCED"/>
+  <int value="20" label="BLUETOOTH_1_2"/>
+  <int value="21" label="BLUETOOTH_2_1"/>
+  <int value="22" label="BLUETOOTH_3_0"/>
+  <int value="23" label="BLUETOOTH_4_0"/>
+  <int value="24" label="ETHERNET"/>
+  <int value="25" label="FAST_ETHERNET"/>
+  <int value="26" label="GIGABIT_ETHERNET"/>
+  <int value="27" label="10_GIGABIT_ETHERNET"/>
+  <int value="28" label="WIFI_B"/>
+  <int value="29" label="WIFI_G"/>
+  <int value="30" label="WIFI_N"/>
+  <int value="31" label="WIFI_AC"/>
+  <int value="32" label="WIFI_AD"/>
+</enum>
+
+<enum name="ConnectionType" type="int">
+  <obsolete>
+    Removed May 2016.
+  </obsolete>
+  <summary>
+    Connection type as defined in net/base/connection_type_histograms.h
+  </summary>
+  <int value="0" label="Any">Any connection (SSL, HTTP, SPDY, etc.)</int>
+  <int value="1" label="SSL">An SSL connection</int>
+  <int value="2" label="SSL-MD5">
+    An SSL connection with an MD5 certificate in the certificate chain
+    (excluding root)
+  </int>
+  <int value="3" label="SSL-MD2">
+    An SSL connection with an MD2 certificate in the certificate chain
+    (excluding root)
+  </int>
+  <int value="4" label="SSL-MD4">
+    An SSL connection with an MD4 certificate in the certificate chain
+    (excluding root)
+  </int>
+  <int value="5" label="SSL-MD5(CA)">
+    An SSL connection with an MD5 CA certificate in the certificate chain
+    (excluding root)
+  </int>
+  <int value="6" label="SSL-MD2(CA)">
+    An SSL connection with an MD2 CA certificate in the cerfificate chain
+    (excluding root)
+  </int>
+  <int value="7" label="HTTP">An HTTP connection</int>
+  <int value="8" label="SPDY">A SPDY connection</int>
+  <int value="9" label="SSL-2.0">An SSL connection that uses SSL 2.0</int>
+  <int value="10" label="SSL-3.0">An SSL connection that uses SSL 3.0</int>
+  <int value="11" label="TLS-1.0">An SSL connection that uses TLS 1.0</int>
+  <int value="12" label="TLS-1.1">An SSL connection that uses TLS 1.1</int>
+  <int value="13" label="TLS-1.2">An SSL connection that uses TLS 1.2</int>
+</enum>
+
+<enum name="ConnectivityDiagnosticsTestVerdict" type="int">
+  <int value="0" label="NO_PROBLEM"/>
+  <int value="1" label="POTENTIAL_PROBLEM"/>
+  <int value="2" label="PROBLEM"/>
+  <int value="3" label="TEST_FAILURE_OCCURRED"/>
+  <int value="4" label="TEST_NOT_RUN"/>
+</enum>
+
+<enum name="ContentResourceType" type="int">
+  <obsolete>
+    Superseded by ContentResourceType in December 2015 when SUB_RESOURCE was
+    split into RESOURCE_TYPE_SUB_RESOURCE and RESOURCE_TYPE_PLUGIN_RESOURCE, and
+    PING was split into RESOURCE_TYPE_PING and RESOURCE_TYPE_CSP_REPORT.
+  </obsolete>
+  <int value="0" label="MAIN_FRAME"/>
+  <int value="1" label="SUB_FRAME"/>
+  <int value="2" label="STYLESHEET"/>
+  <int value="3" label="SCRIPT"/>
+  <int value="4" label="IMAGE"/>
+  <int value="5" label="FONT_RESOURCE"/>
+  <int value="6" label="SUB_RESOURCE"/>
+  <int value="7" label="OBJECT"/>
+  <int value="8" label="MEDIA"/>
+  <int value="9" label="WORKER"/>
+  <int value="10" label="SHARED_WORKER"/>
+  <int value="11" label="PREFETCH"/>
+  <int value="12" label="FAVICON"/>
+  <int value="13" label="XHR"/>
+  <int value="14" label="PING"/>
+  <int value="15" label="RESOURCE_TYPE_SERVICE_WORKER"/>
+</enum>
+
+<enum name="ContentResourceType2" type="int">
+  <int value="0" label="RESOURCE_TYPE_MAIN_FRAME"/>
+  <int value="1" label="RESOURCE_TYPE_SUB_FRAME"/>
+  <int value="2" label="RESOURCE_TYPE_STYLESHEET"/>
+  <int value="3" label="RESOURCE_TYPE_SCRIPT"/>
+  <int value="4" label="RESOURCE_TYPE_IMAGE"/>
+  <int value="5" label="RESOURCE_TYPE_FONT_RESOURCE"/>
+  <int value="6" label="RESOURCE_TYPE_SUB_RESOURCE"/>
+  <int value="7" label="RESOURCE_TYPE_OBJECT"/>
+  <int value="8" label="RESOURCE_TYPE_MEDIA"/>
+  <int value="9" label="RESOURCE_TYPE_WORKER"/>
+  <int value="10" label="RESOURCE_TYPE_SHARED_WORKER"/>
+  <int value="11" label="RESOURCE_TYPE_PREFETCH"/>
+  <int value="12" label="RESOURCE_TYPE_FAVICON"/>
+  <int value="13" label="RESOURCE_TYPE_XHR"/>
+  <int value="14" label="RESOURCE_TYPE_PING"/>
+  <int value="15" label="RESOURCE_TYPE_SERVICE_WORKER"/>
+  <int value="16" label="RESOURCE_TYPE_CSP_REPORT"/>
+  <int value="17" label="RESOURCE_TYPE_PLUGIN_RESOURCE"/>
+</enum>
+
+<enum name="ContentSetting" type="int">
+  <int value="0" label="DEFAULT"/>
+  <int value="1" label="ALLOW"/>
+  <int value="2" label="BLOCK"/>
+  <int value="3" label="ASK"/>
+  <int value="4" label="SESSION_ONLY"/>
+  <int value="5" label="DETECT_IMPORTANT_CONTENT"/>
+</enum>
+
+<enum name="ContentSettingMixedScriptAction" type="int">
+  <int value="0" label="Displayed shield"/>
+  <int value="1" label="Displayed bubble"/>
+  <int value="2" label="Clicked 'Load unsafe scripts'"/>
+  <int value="3" label="Clicked 'Learn more'"/>
+</enum>
+
+<enum name="ContentSettingPluginsAction" type="int">
+  <int value="0" label="Total number of navigations"/>
+  <int value="1" label="Displayed plugin-blocked icon in Omnibox"/>
+  <int value="2" label="Displayed bubble"/>
+  <int value="3" label="Clicked 'Run all plugins this time'"/>
+  <int value="4" label="Clicked 'Always allow plugins on this origin'"/>
+  <int value="5" label="Clicked 'Manage plugin blocking'"/>
+  <int value="6" label="Clicked 'Learn more'"/>
+</enum>
+
+<enum name="ContentSettingScheme" type="int">
+  <int value="0" label="(wildcard)"/>
+  <int value="1" label="(other)"/>
+  <int value="2" label="http"/>
+  <int value="3" label="https"/>
+  <int value="4" label="file"/>
+  <int value="5" label="chrome-extension"/>
+</enum>
+
+<enum name="ContentSuggestionsCategory" type="int">
+  <int value="0" label="Experimental"/>
+  <int value="1" label="Recent Tabs"/>
+  <int value="2" label="Downloads"/>
+  <int value="3" label="Bookmarks"/>
+  <int value="4" label="Physical Web Pages"/>
+  <int value="5" label="Foreign Tabs"/>
+  <int value="6" label="Articles"/>
+</enum>
+
+<enum name="ContentType" type="int">
+  <int value="-1" label="Invalid setting"/>
+  <int value="0" label="Cookies setting"/>
+  <int value="1" label="Images setting"/>
+  <int value="2" label="JavaScript setting"/>
+  <int value="3" label="Plugins setting"/>
+  <int value="4" label="Popups setting"/>
+  <int value="5" label="Location setting"/>
+  <int value="6" label="Notifications setting"/>
+  <int value="7" label="Auto Select Cert setting"/>
+  <int value="8" label="Fullscreen setting [removed]"/>
+  <int value="9" label="Mouselock setting [removed]"/>
+  <int value="10" label="Mixed Script setting"/>
+  <int value="11" label="Media setting (mic + camera) [removed]"/>
+  <int value="12" label="Media setting (mic)"/>
+  <int value="13" label="Media setting (camera)"/>
+  <int value="14" label="Protocol Handler setting"/>
+  <int value="15" label="PPAPI Broker setting"/>
+  <int value="16" label="Automatic downloads setting"/>
+  <int value="17" label="MIDI sysex setting"/>
+  <int value="18" label="Push messaging setting [removed]"/>
+  <int value="19" label="SSL Certificate Decisions setting"/>
+  <int value="20" label="Metro switch-to-desktop setting [removed]"/>
+  <int value="21"
+      label="Protected media identifier setting (Android/ChromeOS only)"/>
+  <int value="22" label="App banner setting (Android only)"/>
+  <int value="23" label="Site engagement setting"/>
+  <int value="24" label="Durable storage setting"/>
+  <int value="25" label="Key generation setting"/>
+  <int value="26" label="Background sync setting"/>
+</enum>
+
+<enum name="ContextLostReason" type="int">
+  <summary>The reason for losing a GPU context.</summary>
+  <int value="0" label="CONTEXT_INIT_FAILED"/>
+  <int value="1" label="CONTEXT_LOST_GPU_CHANNEL_ERROR"/>
+  <int value="2" label="CONTEXT_PARSE_ERROR_INVALID_SIZE"/>
+  <int value="3" label="CONTEXT_PARSE_ERROR_OUT_OF_BOUNDS"/>
+  <int value="4" label="CONTEXT_PARSE_ERROR_UNKNOWN_COMMAND"/>
+  <int value="5" label="CONTEXT_PARSE_ERROR_INVALID_ARGS"/>
+  <int value="6" label="CONTEXT_PARSE_ERROR_GENERIC_ERROR"/>
+  <int value="7" label="CONTEXT_LOST_GUILTY"/>
+  <int value="8" label="CONTEXT_LOST_INNOCENT"/>
+  <int value="9" label="CONTEXT_LOST_UNKNOWN"/>
+  <int value="10" label="CONTEXT_LOST_OUT_OF_MEMORY"/>
+  <int value="11" label="CONTEXT_LOST_MAKECURRENT_FAILED"/>
+  <int value="12" label="CONTEXT_LOST_INVALID_GPU_MESSAGE"/>
+</enum>
+
+<enum name="ContextMenuOption" type="int">
+  <summary>The item selected from a context menu</summary>
+  <int value="0" label="Open in new tab"/>
+  <int value="1" label="Open in incognito tab"/>
+  <int value="2" label="Copy link address"/>
+  <int value="3" label="Copy email address"/>
+  <int value="4" label="Copy link text"/>
+  <int value="5" label="Save link"/>
+  <int value="6" label="Save image"/>
+  <int value="7" label="Open image"/>
+  <int value="8" label="Open image in new tab"/>
+  <int value="9" label="Copy image"/>
+  <int value="10" label="Copy image URL"/>
+  <int value="11" label="Search by image"/>
+  <int value="12" label="Load images"/>
+  <int value="13" label="Load original image"/>
+  <int value="14" label="Save video"/>
+  <int value="15" label="Open link in a new window"/>
+  <int value="16" label="Print"/>
+  <int value="17" label="Search web for..."/>
+  <int value="18" label="Save media as"/>
+  <int value="19" label="Share image"/>
+  <int value="20" label="Open in new/other window"/>
+  <int value="21" label="Open (JavaScript evaluation)"/>
+  <int value="22" label="Read Later"/>
+</enum>
+
+<enum name="ContextMenuSaveLinkType" type="int">
+  <summary>
+    The content type when user chooses save link context menu option
+  </summary>
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Text"/>
+  <int value="2" label="Image"/>
+  <int value="3" label="Audio"/>
+  <int value="4" label="Video"/>
+  <int value="5" label="Pdf"/>
+</enum>
+
+<enum name="ContextProviderPhase" type="int">
+  <int value="0" label="Acquired"/>
+  <int value="1" label="Released"/>
+</enum>
+
+<enum name="ContextualSearchBarOverlapSeen" type="int">
+  <int value="0" label="Overlap seen from Tap"/>
+  <int value="1" label="Overlap not seen from Tap"/>
+  <int value="2" label="No overlap seen from Tap"/>
+  <int value="3" label="No overlap not seen from Tap"/>
+  <int value="4" label="Overlap seen from Longpress"/>
+  <int value="5" label="Overlap not seen from Longpress"/>
+  <int value="6" label="No overlap seen from Longpress"/>
+  <int value="7" label="No overlap not seen from Longpress"/>
+</enum>
+
+<enum name="ContextualSearchBasePageProtocol" type="int">
+  <int value="0" label="Is HTTP"/>
+  <int value="1" label="Not HTTP"/>
+</enum>
+
+<enum name="ContextualSearchBlacklistSeen" type="int">
+  <int value="0" label="None, Seen"/>
+  <int value="1" label="None, Not Seen"/>
+  <int value="2" label="Number, Seen"/>
+  <int value="3" label="Number, Not Seen"/>
+  <int value="4" label="Determiner, Seen"/>
+  <int value="5" label="Determiner, Not Seen"/>
+  <int value="6" label="Preposition, Seen"/>
+  <int value="7" label="Preposition, Not Seen"/>
+  <int value="8" label="Navigation, Seen"/>
+  <int value="9" label="Navigation, Not Seen"/>
+  <int value="10" label="Misc, Seen"/>
+  <int value="11" label="Misc, Not Seen"/>
+</enum>
+
+<enum name="ContextualSearchEnterClosedStateChange" type="int">
+  <int value="0" label="From Other"/>
+  <int value="1" label="From Peeked (back press)"/>
+  <int value="2" label="From Peeked (base page scroll)"/>
+  <int value="3" label="From Peeked (text select tap)"/>
+  <int value="4" label="From Expanded (back press)"/>
+  <int value="5" label="From Expanded (base page tap)"/>
+  <int value="6" label="From Expanded (fling)"/>
+  <int value="7" label="From Maximized (back press)"/>
+  <int value="8" label="From Maximized (fling)"/>
+  <int value="9" label="From Maximized (tab promotion)"/>
+  <int value="10" label="From Maximized (SERP navigation)"/>
+</enum>
+
+<enum name="ContextualSearchEnterExpandedStateChange" type="int">
+  <int value="0" label="From Other"/>
+  <int value="1" label="From Peeked (search bar tap)"/>
+  <int value="2" label="From Peeked (swipe)"/>
+  <int value="3" label="From Peeked (fling)"/>
+  <int value="4" label="From Maximized (swipe)"/>
+  <int value="5" label="From Maximized (fling)"/>
+</enum>
+
+<enum name="ContextualSearchEnterMaximizedStateChange" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="From Peeked (swipe)"/>
+  <int value="2" label="From Peeked (fling)"/>
+  <int value="3" label="From Expanded (swipe)"/>
+  <int value="4" label="From Expanded (fling)"/>
+  <int value="5" label="From Expanded (SERP navigation)"/>
+</enum>
+
+<enum name="ContextualSearchEnterPeekedStateChange" type="int">
+  <int value="0" label="From Other"/>
+  <int value="1" label="From Closed (text select tap)"/>
+  <int value="2" label="From Closed (text select long press)"/>
+  <int value="3" label="From Peeked (text select tap)"/>
+  <int value="4" label="From Peeked (text select long press)"/>
+  <int value="5" label="From Expanded (search bar tap)"/>
+  <int value="6" label="From Expanded (swipe)"/>
+  <int value="7" label="From Expanded (fling)"/>
+  <int value="8" label="From Maximized (swipe)"/>
+  <int value="9" label="From Maximized (fling)"/>
+</enum>
+
+<enum name="ContextualSearchExitClosedStateChange" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Peek (text select tap)"/>
+  <int value="2" label="Peek (text select long press)"/>
+</enum>
+
+<enum name="ContextualSearchExitExpandedStateChange" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Close (back press)"/>
+  <int value="2" label="Close (base page tap)"/>
+  <int value="3" label="Close (fling)"/>
+  <int value="4" label="Peek (search bar tap)"/>
+  <int value="5" label="Peek (swipe)"/>
+  <int value="6" label="Peek (fling)"/>
+  <int value="7" label="Maximize (swipe)"/>
+  <int value="8" label="Maximize (fling)"/>
+  <int value="9" label="Maximize (SERP navigation)"/>
+</enum>
+
+<enum name="ContextualSearchExitMaximizedStateChange" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Close (back press)"/>
+  <int value="2" label="Close (fling)"/>
+  <int value="3" label="Close (tab promotion)"/>
+  <int value="4" label="Close (SERP navigation)"/>
+  <int value="5" label="Peek (swipe)"/>
+  <int value="6" label="Peek (fling)"/>
+  <int value="7" label="Expand (swipe)"/>
+  <int value="8" label="Expand (fling)"/>
+</enum>
+
+<enum name="ContextualSearchExitPeekedStateChange" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Close (back press)"/>
+  <int value="2" label="Close (base page scroll)"/>
+  <int value="3" label="Close (text select tap)"/>
+  <int value="4" label="Peek (text select tap)"/>
+  <int value="5" label="Peek (text select long press)"/>
+  <int value="6" label="Expand (search bar tap)"/>
+  <int value="7" label="Expand (swipe)"/>
+  <int value="8" label="Expand (fling)"/>
+  <int value="9" label="Maximize (swipe)"/>
+  <int value="10" label="To Maximize (fling)"/>
+</enum>
+
+<enum name="ContextualSearchFirstRunPanelSeen" type="int">
+  <int value="0" label="Seen"/>
+  <int value="1" label="Unseen"/>
+</enum>
+
+<enum name="ContextualSearchIconSpriteAnimated" type="int">
+  <int value="0" label="Animated, seen, from tap"/>
+  <int value="1" label="Animated, not seen, from tap"/>
+  <int value="2" label="Not animated, seen, from tap"/>
+  <int value="3" label="Not animated, not seen, from tap"/>
+  <int value="4" label="Animated, seen, from long press"/>
+  <int value="5" label="Animated, not seen, from long press"/>
+  <int value="6" label="Not animated, seen, from long press"/>
+  <int value="7" label="Not animated, not seen, from long press"/>
+</enum>
+
+<enum name="ContextualSearchLoaded" type="int">
+  <int value="0" label="Partially Loaded"/>
+  <int value="1" label="Fully Loaded"/>
+</enum>
+
+<enum name="ContextualSearchOutcomeByGesture" type="int">
+  <int value="0" label="Enabled, from Tap"/>
+  <int value="1" label="Disabled, from Tap"/>
+  <int value="2" label="Undecided from Tap"/>
+  <int value="3" label="Enabled, from Long-press"/>
+  <int value="4" label="Disabled, from Long-press"/>
+  <int value="5" label="Undecided from Long-press"/>
+</enum>
+
+<enum name="ContextualSearchPeekPromoOutcome" type="int">
+  <summary>The outcome of the Contextual Search Peek Promo.</summary>
+  <int value="0" label="Peek Promo was seen, Panel was opened"/>
+  <int value="1" label="Peek Promo was seen, Panel was not opened"/>
+  <int value="2" label="Peek Promo was not seen, Panel was opened"/>
+  <int value="3" label="Peek Promo was not seen, Panel was not opened"/>
+</enum>
+
+<enum name="ContextualSearchPreferenceState" type="int">
+  <int value="0" label="Uninitialized"/>
+  <int value="1" label="Enabled"/>
+  <int value="2" label="Disabled"/>
+</enum>
+
+<enum name="ContextualSearchPrefetchSummary" type="int">
+  <int value="0" label="Prefetched, partly loaded"/>
+  <int value="1" label="Fully preloaded"/>
+  <int value="2" label="Not prefetched"/>
+</enum>
+
+<enum name="ContextualSearchQuickActionCategory" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Address"/>
+  <int value="2" label="Email"/>
+  <int value="3" label="Event"/>
+  <int value="4" label="Phone"/>
+</enum>
+
+<enum name="ContextualSearchQuickActionIntentResolution" type="int">
+  <int value="0" label="No matching apps or resolve failed"/>
+  <int value="1" label="One matching app"/>
+  <int value="2" label="Multiple matching apps"/>
+</enum>
+
+<enum name="ContextualSearchQuickAnswerSeen" type="int">
+  <int value="0" label="Activated, answered and seen"/>
+  <int value="1" label="Activated and answered but not seen"/>
+  <int value="2" label="Activated, not answered but seen"/>
+  <int value="3" label="Activated, not answered nor seen"/>
+  <int value="4" label="Not activated but seen"/>
+  <int value="5" label="Not activated nor seen"/>
+</enum>
+
+<enum name="ContextualSearchResolvedTermWords" type="int">
+  <int value="0" label="Single Word"/>
+  <int value="1" label="Multi Word"/>
+</enum>
+
+<enum name="ContextualSearchResultsSeen" type="int">
+  <int value="0" label="Seen"/>
+  <int value="1" label="Unseen"/>
+</enum>
+
+<enum name="ContextualSearchSearchRequestStatus" type="int">
+  <int value="0" label="Not Failed"/>
+  <int value="1" label="Failed"/>
+</enum>
+
+<enum name="ContextualSearchSeenByGesture" type="int">
+  <int value="0" label="Seen, from Tap"/>
+  <int value="1" label="Not seen, from Tap"/>
+  <int value="2" label="Seen, from Long-press"/>
+  <int value="3" label="Not seen, from Long-press"/>
+</enum>
+
+<enum name="ContextualSearchSelectionValid" type="int">
+  <int value="0" label="Valid"/>
+  <int value="1" label="Invalid"/>
+</enum>
+
+<enum name="ContextualSearchShouldTranslate" type="int">
+  <summary>
+    Notes when a translation one-box should be forced by Contextual Search.
+  </summary>
+  <int value="0" label="Did force a translation"/>
+  <int value="1" label="Would force a translation (if not disabled)"/>
+</enum>
+
+<enum name="ContextualSearchSuppressionResultsSeen" type="int">
+  <int value="0" label="Seen, heuristic satisfied"/>
+  <int value="1" label="Not seen, heuristic satisfied"/>
+  <int value="2" label="Seen, heuristic not satisfied"/>
+  <int value="3" label="Not seen, heuristic not satisfied"/>
+</enum>
+
+<enum name="ContextualSearchTapSuppression" type="int">
+  <int value="0" label="Tap suppressed"/>
+  <int value="1" label="Tap not suppressed"/>
+</enum>
+
+<enum name="CookieDeleteEquivalent" type="int">
+  <int value="0"
+      label="Attempt to delete an equivalent cookie during a set cookie
+             operation"/>
+  <int value="1" label="Equivalent cookie to delete was found"/>
+  <int value="2"
+      label="Secure cookie was skipped because of strict secure cookies rules"/>
+  <int value="3"
+      label="Secure cookie that was skipped because of strict secure cookie
+             rules would have been deleted in non-strict secure cookie case"/>
+</enum>
+
+<enum name="CookieDeletionCause" type="int">
+  <summary>Reason why a cookie was removed from the cookie store</summary>
+  <int value="0" label="explicit">
+    The user explicitly requested that we delete a cookie
+  </int>
+  <int value="1" label="overwrite">
+    The value of the cookie was overwritten by a new value
+  </int>
+  <int value="2" label="expired">The cookie expiration time passed</int>
+  <int value="3" label="evicted">
+    The cookie was evicted during garbage collection (replaced by
+    domain_evicted/global_evicted below)
+  </int>
+  <int value="4" label="store_dup">
+    The backing store had two copies of the cookie so one was removed (i.e.
+    problems writing the backing store database)
+  </int>
+  <int value="5" label="dont_record">
+    The cookie deletion should not be recorded because it occurred, e.g., during
+    shutdown (the fact that these values showed up in the histogram is a bug,
+    since fixed)
+  </int>
+  <int value="6" label="domain_evicted">
+    The cookie was evicted during per-domain/eTLD+1 garbage collection
+  </int>
+  <int value="7" label="global_evicted">
+    The cookie was evicted during whole store garbage collection.
+  </int>
+  <int value="8" label="domain_evicted_pre_safe">
+    The cookie evicted during per-domain/eTLD+1 garbage collection, and would
+    have been evicted by the global garbage collection process (because they
+    hadn't been accessed recently enough).
+  </int>
+  <int value="9" label="domain_evicted_post_safe">
+    The cookie evicted during per-domain/eTLD+1 garbage collection, and would
+    not have been evicted by global metrics as well (because they had been
+    accessed recently enough to save).
+  </int>
+  <int value="10" label="expired_overwrite">
+    The cookie deletion occurred because the server overwrote it with an already
+    expired cookie (this is a common idiom for server deletions of cookies).
+  </int>
+</enum>
+
+<enum name="CookieOrCacheDeletion" type="int">
+  <int value="0" label="Neither"/>
+  <int value="1" label="Only cookies"/>
+  <int value="2" label="Only cache"/>
+  <int value="3" label="Both"/>
+</enum>
+
+<enum name="CookiePrefix" type="int">
+  <int value="0" label="No special prefix"/>
+  <int value="1" label="Secure prefix"/>
+  <int value="2" label="Host prefix"/>
+</enum>
+
+<enum name="CookieSourceScheme" type="int">
+  <int value="0" label="Secure cookie, source scheme is cryptographic"/>
+  <int value="1" label="Secure cookie, source scheme is not cryptographic"/>
+  <int value="2" label="Not Secure cookie, source scheme is cryptographic"/>
+  <int value="3" label="Not Secure cookie, source scheme is not cryptographic"/>
+</enum>
+
+<enum name="CookieType" type="int">
+  <summary>The type of a cookie when its added to the cookie store.</summary>
+  <int value="0" label="Default"/>
+  <int value="1" label="First-Party-Only"/>
+  <int value="2" label="HttpOnly"/>
+  <int value="3" label="First-Party-Only, HttpOnly"/>
+  <int value="4" label="Secure"/>
+  <int value="5" label="First-Party-Only, Secure"/>
+  <int value="6" label="HttpOnly, Secure"/>
+  <int value="7" label="First-Party-Only, HttpOnly, Secure"/>
+</enum>
+
+<enum name="CorruptExtensionDisabledReason" type="int">
+  <summary>
+    The reason why content verification flagged an extension as corrupted. See
+    ContentVerifyJob::FailureReason in
+    src/extensions/browser/content_verify_job.h.
+  </summary>
+  <int value="0" label="Unknown Reason"/>
+  <int value="1" label="Missing All Hashes"/>
+  <int value="2" label="Missing File Hash"/>
+  <int value="3" label="Hash Mismatch"/>
+</enum>
+
+<enum name="CrashExitCodes" type="int">
+  <int value="1" label="RESULT_CODE_KILLED"/>
+  <int value="2" label="RESULT_CODE_HUNG"/>
+  <int value="3" label="RESULT_CODE_KILLED_BAD_MESSAGE"/>
+  <int value="4" label="RESULT_CODE_INVALID_CMDLINE_URL"/>
+  <int value="5" label="RESULT_CODE_BAD_PROCESS_TYPE"/>
+  <int value="6" label="RESULT_CODE_MISSING_DATA"/>
+  <int value="7" label="RESULT_CODE_SHELL_INTEGRATION_FAILED"/>
+  <int value="8" label="RESULT_CODE_MACHINE_LEVEL_INSTALL_EXISTS"/>
+  <int value="9" label="RESULT_CODE_UNINSTALL_CHROME_ALIVE"/>
+  <int value="10" label="RESULT_CODE_UNINSTALL_USER_CANCEL"/>
+  <int value="11" label="RESULT_CODE_UNINSTALL_DELETE_PROFILE"/>
+  <int value="12" label="RESULT_CODE_UNSUPPORTED_PARAM"/>
+  <int value="13" label="RESULT_CODE_IMPORTER_HUNG"/>
+  <int value="14" label="RESULT_CODE_RESPAWN_FAILED"/>
+  <int value="15" label="RESULT_CODE_NORMAL_EXIT_EXP1"/>
+  <int value="16" label="RESULT_CODE_NORMAL_EXIT_EXP2"/>
+  <int value="17" label="RESULT_CODE_NORMAL_EXIT_EXP3"/>
+  <int value="18" label="RESULT_CODE_NORMAL_EXIT_EXP4"/>
+  <int value="19" label="RESULT_CODE_NORMAL_EXIT_CANCEL"/>
+  <int value="20" label="RESULT_CODE_PROFILE_IN_USE"/>
+  <int value="21" label="RESULT_CODE_PACK_EXTENSION_ERROR"/>
+  <int value="22" label="RESULT_CODE_UNINSTALL_EXTENSION_ERROR"/>
+  <int value="23" label="RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED"/>
+  <int value="25" label="RESULT_CODE_INSTALL_FROM_WEBSTORE_ERROR_2"/>
+  <int value="27" label="RESULT_CODE_EULA_REFUSED"/>
+  <int value="28" label="RESULT_CODE_SXS_MIGRATION_FAILED"/>
+  <int value="29" label="RESULT_CODE_ACTION_DISALLOWED_BY_POLICY"/>
+  <int value="30" label="RESULT_CODE_INVALID_SANDBOX_STATE"/>
+  <int value="258" label="WAIT_TIMEOUT"/>
+  <int value="7006" label="SBOX_FATAL_INTEGRITY"/>
+  <int value="7007" label="SBOX_FATAL_DROPTOKEN"/>
+  <int value="7008" label="SBOX_FATAL_FLUSHANDLES"/>
+  <int value="7009" label="SBOX_FATAL_CACHEDISABLE"/>
+  <int value="7010" label="SBOX_FATAL_CLOSEHANDLES"/>
+  <int value="7011" label="SBOX_FATAL_MITIGATION"/>
+  <int value="7012" label="SBOX_FATAL_MEMORY_EXCEEDED"/>
+  <int value="7013" label="SBOX_FATAL_WARMUP"/>
+  <int value="36862" label="Crashpad_FailedToCaptureProcess"/>
+  <int value="36863" label="Crashpad_HandlerDidNotRespond"/>
+  <int value="85436397" label="Crashpad_SimulatedCrash"/>
+  <int value="529697949" label="CPP_EH_EXCEPTION"/>
+  <int value="533692099" label="STATUS_GUARD_PAGE_VIOLATION"/>
+  <int value="536870904" label="Out of Memory"/>
+  <int value="1073740791" label="STATUS_STACK_BUFFER_OVERRUN"/>
+  <int value="1073740940" label="STATUS_HEAP_CORRUPTION"/>
+  <int value="1073741502" label="STATUS_DLL_INIT_FAILED"/>
+  <int value="1073741510" label="STATUS_CONTROL_C_EXIT"/>
+  <int value="1073741515" label="STATUS_DLL_NOT_FOUND"/>
+  <int value="1073741571" label="STATUS_STACK_OVERFLOW"/>
+  <int value="1073741659" label="STATUS_BAD_IMPERSONATION_LEVEL"/>
+  <int value="1073741674" label="STATUS_PRIVILEGED_INSTRUCTION"/>
+  <int value="1073741675" label="STATUS_INTEGER_OVERFLOW"/>
+  <int value="1073741676" label="STATUS_INTEGER_DIVIDE_BY_ZERO"/>
+  <int value="1073741677" label="STATUS_FLOAT_UNDERFLOW"/>
+  <int value="1073741678" label="STATUS_FLOAT_STACK_CHECK"/>
+  <int value="1073741679" label="STATUS_FLOAT_OVERFLOW"/>
+  <int value="1073741680" label="STATUS_FLOAT_INVALID_OPERATION"/>
+  <int value="1073741681" label="STATUS_FLOAT_INEXACT_RESULT"/>
+  <int value="1073741682" label="STATUS_FLOAT_DIVIDE_BY_ZERO"/>
+  <int value="1073741683" label="STATUS_FLOAT_DENORMAL_OPERAND"/>
+  <int value="1073741684" label="STATUS_ARRAY_BOUNDS_EXCEEDED"/>
+  <int value="1073741783" label="STATUS_INVALID_UNWIND_TARGET"/>
+  <int value="1073741786" label="STATUS_INVALID_DISPOSITION"/>
+  <int value="1073741787" label="STATUS_NONCONTINUABLE_EXCEPTION"/>
+  <int value="1073741790" label="STATUS_ACCESS_DENIED"/>
+  <int value="1073741794" label="STATUS_INVALID_LOCK_SEQUENCE"/>
+  <int value="1073741795" label="STATUS_ILLEGAL_INSTRUCTION"/>
+  <int value="1073741800" label="STATUS_CONFLICTING_ADDRESSES"/>
+  <int value="1073741801" label="STATUS_NO_MEMORY"/>
+  <int value="1073741811" label="STATUS_INVALID_PARAMETER"/>
+  <int value="1073741816" label="STATUS_INVALID_HANDLE"/>
+  <int value="1073741818" label="STATUS_IN_PAGE_ERROR"/>
+  <int value="1073741819" label="STATUS_ACCESS_VIOLATION"/>
+  <int value="1073741829" label="STATUS_SEGMENT_NOTIFICATION"/>
+  <int value="1073741845" label="STATUS_FATAL_APP_EXIT"/>
+  <int value="2147483644" label="STATUS_SINGLE_STEP"/>
+  <int value="2147483645" label="STATUS_BREAKPOINT"/>
+  <int value="2147483646" label="STATUS_DATATYPE_MISALIGNMENT"/>
+</enum>
+
+<enum name="CrashpadExceptionCaptureResult" type="int">
+  <int value="0" label="kSuccess"/>
+  <int value="1" label="kUnexpectedExceptionBehavior"/>
+  <int value="2" label="kFailedDueToSuspendSelf"/>
+  <int value="3" label="kSnapshotFailed"/>
+  <int value="4" label="kExceptionInitializationFailed"/>
+  <int value="5" label="kPrepareNewCrashReportFailed"/>
+  <int value="6" label="kMinidumpWriteFailed"/>
+  <int value="7" label="kFinishWritingCrashReportFailed"/>
+</enum>
+
+<enum name="CrashpadExceptionProcessingState" type="int">
+  <int value="0" label="kStarted"/>
+  <int value="1" label="kFinished"/>
+</enum>
+
+<enum name="CrashpadMacExceptionCodes" type="int">
+  <int value="1" label="EXC_BAD_ACCESS"/>
+  <int value="2" label="EXC_BAD_INSTRUCTION"/>
+  <int value="10" label="EXC_CRASH"/>
+</enum>
+
+<enum name="CrashpadReportPending" type="int">
+  <int value="0" label="kNewlyCreated"/>
+  <int value="1" label="kUserInitiated"/>
+</enum>
+
+<enum name="CrashpadUploadAttemptStatus" type="int">
+  <int value="0" label="Failed"/>
+  <int value="1" label="Succeeded"/>
+</enum>
+
+<enum name="CrashpadUploadSkippedReason" type="int">
+  <int value="0" label="kUploadsDisabled"/>
+  <int value="1" label="kUploadThrottled"/>
+  <int value="2" label="kUnexpectedTime"/>
+  <int value="3" label="kDatabaseError"/>
+  <int value="4" label="kUploadFailed"/>
+</enum>
+
+<enum name="CreatePersistentHistogramResult" type="int">
+  <int value="0" label="Success: Histogram created in persistent space."/>
+  <int value="1" label="Error: Invalid metadata pointer. (coding error)"/>
+  <int value="2" label="Error: Invalid metdata."/>
+  <int value="3" label="Error: Invalid 'ranges' array."/>
+  <int value="4" label="Error: Invalid 'counts' array."/>
+  <int value="5" label="Failed: Allocator is corrupt."/>
+  <int value="6" label="Failed: Allocator is full."/>
+  <int value="7" label="Failed: Allocator failed (unknown error)."/>
+  <int value="8" label="Error: Unknown histogram type."/>
+  <int value="9" label="Error: Allocator has become corrupted."/>
+</enum>
+
+<enum name="CredentialFilteredType" type="int">
+  <int value="0" label="No sync credentials present"/>
+  <int value="1" label="Sync credentials were removed"/>
+</enum>
+
+<enum name="CredentialManagerGetResult" type="int">
+  <int value="0" label="Promise rejected"/>
+  <int value="1" label="Empty credential, auto sign-in disallowed"/>
+  <int value="2" label="Empty credential, empty password store"/>
+  <int value="3" label="Empty credential, multiple matches"/>
+  <int value="4" label="Empty credential, user signed out"/>
+  <int value="5" label="Empty credential, auto sign-in FRE pending"/>
+  <int value="6" label="Empty credential, any other reason"/>
+  <int value="7" label="Account chooser credential"/>
+  <int value="8" label="Auto sign-in"/>
+</enum>
+
+<enum name="CrosBeamformingDeviceState" type="int">
+  <int value="0" label="Default enabled"/>
+  <int value="1" label="User enabled"/>
+  <int value="2" label="Default disabled"/>
+  <int value="3" label="User disabled"/>
+</enum>
+
+<enum name="CrosDisksArchiveType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="ZIP"/>
+  <int value="2" label="RAR"/>
+  <int value="3" label="Tar"/>
+  <int value="4" label="Bzip2-compressed Tar"/>
+  <int value="5" label="Gzip-compressed Tar"/>
+</enum>
+
+<enum name="CrosDisksDeviceMediaType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="USB Drive"/>
+  <int value="2" label="SD Card"/>
+  <int value="3" label="Optical Disc"/>
+  <int value="4" label="Mobile Device"/>
+  <int value="5" label="DVD"/>
+</enum>
+
+<enum name="CrosDisksFilesystemType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Others"/>
+  <int value="2" label="FAT"/>
+  <int value="3" label="exFAT"/>
+  <int value="4" label="NTFS"/>
+  <int value="5" label="HFS+"/>
+  <int value="6" label="Ext2"/>
+  <int value="7" label="Ext3"/>
+  <int value="8" label="Ext4"/>
+  <int value="9" label="ISO9660"/>
+  <int value="10" label="UDF"/>
+</enum>
+
+<enum name="CrosEnableDriveOfflineOutcome" type="int">
+  <int value="0" label="Success: Offline mode enabled"/>
+  <int value="1" label="Failure: Hosted app page timed out"/>
+  <int value="2" label="Failure: Hosted app page load failed"/>
+  <int value="3" label="Failure: Not a regular user account"/>
+  <int value="4" label="Failure: Drive app not installed"/>
+  <int value="5" label="Failure: Background page already exists"/>
+</enum>
+
+<enum name="CrosEventEnum" type="int">
+  <int value="0" label="ModemManagerCommandSendFailure"/>
+  <int value="1" label="HwWatchdogReboot"/>
+  <int value="2" label="Cras.NoCodecsFoundAtBoot"/>
+  <int value="3" label="Chaps.DatabaseCorrupted"/>
+  <int value="4" label="Chaps.DatabaseRepairFailure"/>
+  <int value="5" label="Chaps.DatabaseCreateFailure"/>
+  <int value="6" label="Attestation.OriginSpecificExhausted"/>
+  <int value="7" label="SpringPowerSupply.Original.High"/>
+  <int value="8" label="SpringPowerSupply.Other.High"/>
+  <int value="9" label="SpringPowerSupply.Original.Low"/>
+  <int value="10" label="SpringPowerSupply.ChargerIdle"/>
+  <int value="11" label="TPM.NonZeroDictionaryAttackCounter"/>
+  <int value="12" label="TPM.EarlyResetDuringCommand"/>
+</enum>
+
+<enum name="CrosFirstRunTutorialCompletionType" type="int">
+  <int value="0" label="Was not finished"/>
+  <int value="1" label="Finished with &quot;Got It&quot; button"/>
+  <int value="2" label="Finished with &quot;Keep Exploring&quot; button"/>
+</enum>
+
+<enum name="CrosShelfClickTarget" type="int">
+  <obsolete>
+    Deprecated as of 12/2013. Default pinned apps trial is finished.
+  </obsolete>
+  <int value="0" label="Chrome"/>
+  <int value="1" label="AppLauncher"/>
+  <int value="2" label="Gmail"/>
+  <int value="3" label="Search"/>
+  <int value="4" label="Youtube"/>
+  <int value="5" label="Doc"/>
+  <int value="6" label="Sheets"/>
+  <int value="7" label="Slides"/>
+  <int value="8" label="PlayMusic"/>
+</enum>
+
+<enum name="CrosTPMDictionaryAttackResetStatusEnum" type="int">
+  <int value="0" label="Reset not necessary"/>
+  <int value="1" label="Reset attempt succeeded"/>
+  <int value="2" label="Reset attempt failed"/>
+  <int value="3" label="TPM owner delegate not allowed to reset"/>
+  <int value="4" label="TPM owner delegate does not exist"/>
+  <int value="5" label="Failed to query dictionary attack counter"/>
+</enum>
+
+<enum name="CryptohomeChecksumStatus" type="int">
+  <int value="0" label="Checksum OK"/>
+  <int value="1" label="Checksum does not exist"/>
+  <int value="2" label="Checksum read error"/>
+  <int value="3" label="Checksum mismatch"/>
+  <int value="4" label="Checksum out of sync"/>
+</enum>
+
+<enum name="CryptohomeError" type="int">
+  <int value="1" label="TPM returned TPM_E_FAIL"/>
+  <int value="2" label="TCS key load failed"/>
+  <int value="3" label="TPM dictionary defense lock is running"/>
+  <int value="4" label="Decrypt attempt but TPM key is missing"/>
+  <int value="5" label="Decrypt attempt but TPM is not owned"/>
+  <int value="6" label="Decrypt attempt but TPM is not available"/>
+  <int value="7" label="Decrypt attempt but TPM key is mismatched"/>
+  <int value="8" label="Decrypt attempt with TPM key failed (general)"/>
+  <int value="9" label="Cannot load TPM SRK"/>
+  <int value="10" label="Cannot read TPM SRK public info"/>
+  <int value="11" label="Cannot load cryptohome TPM key"/>
+  <int value="12" label="Cannot read cryptohome TPM key public info"/>
+  <int value="13"
+      label="TPM failed to load a key because of a bad key property"/>
+  <int value="14" label="Failed to load a PKCS #11 token"/>
+  <int value="15" label="Failed to encrypt with cryptohome TPM key"/>
+  <int value="16" label="TSS communication error"/>
+  <int value="17" label="TSS invalid handle"/>
+  <int value="18" label="Keyset wrapped both by TPM and Scrypt"/>
+</enum>
+
+<enum name="CryptohomeMigrationToGaiaId" type="int">
+  <int value="0" label="Not started"/>
+  <int value="1" label="Already migrated"/>
+  <int value="2" label="Success"/>
+  <int value="3" label="Failure"/>
+</enum>
+
+<enum name="CryptohomeTpmResults" type="int">
+  <int value="1" label="TPM Success"/>
+  <int value="2" label="TPM Error Authentication Fail"/>
+  <int value="3" label="TPM Error Bad Parameter"/>
+  <int value="4" label="TPM Error Bad Index"/>
+  <int value="5" label="TPM Error Audit Fail"/>
+  <int value="6" label="TPM Error Clear Disabled"/>
+  <int value="7" label="TPM Error TPM Deactivated"/>
+  <int value="8" label="TPM Error TPM Disabled"/>
+  <int value="9" label="TPM Error Failed"/>
+  <int value="10" label="TPM Error Bad Ordinal"/>
+  <int value="11" label="TPM Error Owner Install Disabled"/>
+  <int value="12" label="TPM Error Invalid KeyHandle"/>
+  <int value="13" label="TPM Error Key Not Found"/>
+  <int value="14" label="TPM Error Bad Encryption Scheme"/>
+  <int value="15" label="TPM Error Migration Authorization Fail"/>
+  <int value="16" label="TPM Error Invalid PCR Info"/>
+  <int value="17" label="TPM Error No Space To Load Key"/>
+  <int value="18" label="TPM Error No SRK"/>
+  <int value="19" label="TPM Error Invalid Encrypted Blob"/>
+  <int value="20" label="TPM Error Owner Already Set"/>
+  <int value="21" label="TPM Error Not Enough TPM Resources"/>
+  <int value="22" label="TPM Error Random String Too Short"/>
+  <int value="23" label="TPM Error TPM Out Of Space"/>
+  <int value="24" label="TPM Error Wrong PCR Value"/>
+  <int value="25" label="TPM Error Bad Parameter Size"/>
+  <int value="26" label="TPM Error No Sha1 Thread"/>
+  <int value="27" label="TPM Error Sha1 Error"/>
+  <int value="28" label="TPM Error TPM Self Test Failed"/>
+  <int value="29" label="TPM Error Second Authorization Failed"/>
+  <int value="30" label="TPM Error Bad Tag"/>
+  <int value="31" label="TPM Error IO Error"/>
+  <int value="32" label="TPM Error Encryption Error"/>
+  <int value="33" label="TPM Error Decryption Error"/>
+  <int value="34" label="TPM Error Invalid Authorization Handle"/>
+  <int value="35" label="TPM Error No Endorsement"/>
+  <int value="36" label="TPM Error Invalid Key Usage"/>
+  <int value="37" label="TPM Error Wrong Entity Type"/>
+  <int value="38" label="TPM Error Invalid Post Init Sequence"/>
+  <int value="39" label="TPM Error Invalid Signature Format"/>
+  <int value="40" label="TPM Error Bad Key Property"/>
+  <int value="41" label="TPM Error Bad Migration"/>
+  <int value="42" label="TPM Error Bad Scheme"/>
+  <int value="43" label="TPM Error Bad Data Size"/>
+  <int value="44" label="TPM Error Bad Mode Parameter"/>
+  <int value="45" label="TPM Error Bad Presence Value"/>
+  <int value="46" label="TPM Error Bad Version"/>
+  <int value="47" label="TPM Error Wrap Transport Not Allowed"/>
+  <int value="48" label="TPM Error Audit Fail Command Unsuccessful"/>
+  <int value="49" label="TPM Error Audit Fail Command Successful"/>
+  <int value="50" label="TPM Error PCR Register Not Resetable"/>
+  <int value="51" label="TPM Error PCR Register Reset Requires Locality"/>
+  <int value="52" label="TPM Error Bad Type Of Identity Blob"/>
+  <int value="53" label="TPM Error Bad Resource Type"/>
+  <int value="54" label="TPM Error Command Available Only In FIPS Mode"/>
+  <int value="55" label="TPM Error Invalid Family Id"/>
+  <int value="56" label="TPM Error No NvRam Permission"/>
+  <int value="57" label="TPM Error Signed Command Required"/>
+  <int value="58" label="TPM Error NvRam Key Not Supported"/>
+  <int value="59" label="TPM Error Authorization Conflict"/>
+  <int value="60" label="TPM Error NvRam Area Locked"/>
+  <int value="61" label="TPM Error Bad Locality"/>
+  <int value="62" label="TPM Error NvRam Area Read Only"/>
+  <int value="63" label="TPM Error NvRam Area No Write Protection"/>
+  <int value="64" label="TPM Error Family Count Mismatch"/>
+  <int value="65" label="TPM Error NvRam Area Write Locked"/>
+  <int value="66" label="TPM Error NvRam Area Bad Attributes"/>
+  <int value="67" label="TPM Error Invalid Structure"/>
+  <int value="68" label="TPM Error Key Under Owner Control"/>
+  <int value="69" label="TPM Error Bad Counter Handle"/>
+  <int value="70" label="TPM Error Not A Full Write"/>
+  <int value="71" label="TPM Error Context Gap"/>
+  <int value="72" label="TPM Error Max NvRam Writes"/>
+  <int value="73" label="TPM Error No Operator"/>
+  <int value="74" label="TPM Error Resource Missing"/>
+  <int value="75" label="TPM Error Delagte Locked"/>
+  <int value="76" label="TPM Error Delegate Family"/>
+  <int value="77" label="TPM Error Delegate Admin"/>
+  <int value="78" label="TPM Error Transport Not Exclusive"/>
+  <int value="79" label="TPM Error Owner Control"/>
+  <int value="80" label="TPM Error DAA Resources Not Available"/>
+  <int value="81" label="TPM Error DAA Input Data0"/>
+  <int value="82" label="TPM Error DAA Input Data1"/>
+  <int value="83" label="TPM Error DAA Issuer Settings"/>
+  <int value="84" label="TPM Error DAA TPM Settings"/>
+  <int value="85" label="TPM Error DAA Stage"/>
+  <int value="86" label="TPM Error DAA Issuer Validity"/>
+  <int value="87" label="TPM Error DAA Wrong W"/>
+  <int value="88" label="TPM Error Bad Handle"/>
+  <int value="89" label="TPM Error Bad Delegate"/>
+  <int value="90" label="TPM Error Bad Context Blob"/>
+  <int value="91" label="TPM Error Too Many Contexts"/>
+  <int value="92" label="TPM Error Migration Authority Signature Fail"/>
+  <int value="93" label="TPM Error Migration Destination Not Authenticated"/>
+  <int value="94" label="TPM Error Bad Migration Source"/>
+  <int value="95" label="TPM Error Bad Migration Authority"/>
+  <int value="96" label="TPM Error Permanent EK"/>
+  <int value="97" label="TPM Error CMK Ticket Bad Signature"/>
+  <int value="98" label="TPM Error No Context Space"/>
+  <int value="99" label="TPM Error TPM Busy Retry Later"/>
+  <int value="100" label="TPM Error Needs Self Test"/>
+  <int value="101" label="TPM Error Doing Self Test"/>
+  <int value="102" label="TPM Error Defend Lock Running"/>
+  <int value="103" label="TPM Error TPM Command Disabled"/>
+  <int value="104" label="TPM Error Unknown Error"/>
+  <int value="105" label="TDDL Error General Fail"/>
+  <int value="106" label="TDDL Error Bad Parameter"/>
+  <int value="107" label="TDDL Error Internal Software Error"/>
+  <int value="108" label="TDDL Error Not Implemented"/>
+  <int value="109" label="TDDL Error Key Not Found In Persistent Storage"/>
+  <int value="110" label="TDDL Error Key Already Registered"/>
+  <int value="111" label="TDDL Error Action Canceled By Request"/>
+  <int value="112" label="TDDL Error Timeout"/>
+  <int value="113" label="TDDL Error Out Of Memory"/>
+  <int value="114" label="TDDL Error Unexpected TPM Output"/>
+  <int value="115" label="TDDL Error Communication Failure"/>
+  <int value="116" label="TDDL Error TPM Unsupported Feature"/>
+  <int value="117" label="TDDL Error Connection To TPM Device Failed"/>
+  <int value="118" label="TDDL Error Device Already Opened"/>
+  <int value="119" label="TDDL Error Bad Tag"/>
+  <int value="120" label="TDDL Error Receive Buffer Too Small"/>
+  <int value="121" label="TDDL Error Command Already Completed"/>
+  <int value="122" label="TDDL Error Command Aborted"/>
+  <int value="123" label="TDDL Error Device Driver Already Closed"/>
+  <int value="124" label="TDDL Error IO Error"/>
+  <int value="125" label="TDDL Error Unknown Error"/>
+  <int value="126" label="TCS Error General Fail"/>
+  <int value="127" label="TCS Error Bad Parameter"/>
+  <int value="128" label="TCS Error Internal Software Error"/>
+  <int value="129" label="TCS Error Not Implemented"/>
+  <int value="130" label="TCS Error Key Not Found In Persistent Storage"/>
+  <int value="131" label="TCS Error Key Already Registered"/>
+  <int value="132" label="TCS Error Action Canceled By Request"/>
+  <int value="133" label="TCS Error Timeout"/>
+  <int value="134" label="TCS Error Out Of Memory"/>
+  <int value="135" label="TCS Error Unexpected TPM Output"/>
+  <int value="136" label="TCS Error Communication Failure"/>
+  <int value="137" label="TCS Error TPM Unsupported Feature"/>
+  <int value="138" label="TCS Error Key Mismatch"/>
+  <int value="139" label="TCS Error Key Load Fail"/>
+  <int value="140" label="TCS Error Key Context Reload Fail"/>
+  <int value="141" label="TCS Error Bad Memory Index"/>
+  <int value="142" label="TCS Error Bad Context Handle"/>
+  <int value="143" label="TCS Error Bad Key Handle"/>
+  <int value="144" label="TCS Error Bad Authorization Handle"/>
+  <int value="145" label="TCS Error Authorization Session Closed By Tpm"/>
+  <int value="146" label="TCS Error Invalid Key"/>
+  <int value="147" label="TCS Error Unknown Error"/>
+  <int value="148" label="TSS Error General Fail"/>
+  <int value="149" label="TSS Error Bad Parameter"/>
+  <int value="150" label="TSS Error Internal Software Error"/>
+  <int value="151" label="TSS Error Not Implemented"/>
+  <int value="152" label="TSS Error Key Not Found In Persistent Storage"/>
+  <int value="153" label="TSS Error Key Already Registered"/>
+  <int value="154" label="TSS Error Action Canceled By Request"/>
+  <int value="155" label="TSS Error Timeout"/>
+  <int value="156" label="TSS Error Out Of Memory"/>
+  <int value="157" label="TSS Error Unexpected TPM Output"/>
+  <int value="158" label="TSS Error Communication Failure"/>
+  <int value="159" label="TSS Error TPM Unsupported Feature"/>
+  <int value="160" label="TSS Error Bad Object Type"/>
+  <int value="161" label="TSS Error Bad Object Init Flag"/>
+  <int value="162" label="TSS Error Invalid Handle"/>
+  <int value="163" label="TSS Error No Core Service Connection"/>
+  <int value="164" label="TSS Error Core Service Connection Fail"/>
+  <int value="165" label="TSS Error Core Service Connection Broken"/>
+  <int value="166" label="TSS Error Invalid Hash Algorithm"/>
+  <int value="167" label="TSS Error Bad Hash Length"/>
+  <int value="168" label="TSS Error Hash Object Has No Value"/>
+  <int value="169" label="TSS Error Silent Context Needs User Input"/>
+  <int value="170" label="TSS Error Bad Attribute Flag"/>
+  <int value="171" label="TSS Error Bad Attribute Sub Flag"/>
+  <int value="172" label="TSS Error Bad Attribute Data"/>
+  <int value="173" label="TSS Error No PCR Registers Set"/>
+  <int value="174" label="TSS Error Key Not Loaded"/>
+  <int value="175" label="TSS Error Key Not Set"/>
+  <int value="176" label="TSS Error Validation Failed"/>
+  <int value="177" label="TSS Error TSP Authorization Required"/>
+  <int value="178" label="TSS Error TSP Multiple Authorization Required"/>
+  <int value="179" label="TSS Error TSP Authorization Failed"/>
+  <int value="180" label="TSS Error TSP Multiple Authorization Failed"/>
+  <int value="181" label="TSS Error Key Has No Migration Policy"/>
+  <int value="182" label="TSS Error Policy Has No Secret"/>
+  <int value="183" label="TSS Error Bad Object Access"/>
+  <int value="184" label="TSS Error Bad Encryption Scheme"/>
+  <int value="185" label="TSS Error Bad Signature Scheme"/>
+  <int value="186" label="TSS Error Encrypted Object Bad Length"/>
+  <int value="187" label="TSS Error Encrypted Object Has No Data"/>
+  <int value="188" label="TSS Error Encrypted Object Bad Type"/>
+  <int value="189" label="TSS Error Bad Key Usage"/>
+  <int value="190" label="TSS Error Verification Failed"/>
+  <int value="191" label="TSS Error No Hash Algorithm Id"/>
+  <int value="192" label="TSS Error NvRam Area Already Exists"/>
+  <int value="193" label="TSS Error NvRam Area Doesn't Exist"/>
+  <int value="194" label="TSS Error Unknown Error"/>
+</enum>
+
+<enum name="CTRequirementCompliance" type="int">
+  <obsolete>
+    Deprecated 1/2016.
+  </obsolete>
+  <int value="0" label="Not Compliant"/>
+  <int value="1" label="Whitelisted"/>
+  <int value="2" label="Has enough SCTs"/>
+</enum>
+
+<enum name="D3D11InitializeResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Error initializing compiler"/>
+  <int value="2" label="Missing DLL dependency"/>
+  <int value="3" label="D3D11CreateDevice returned E_INVALIDARG"/>
+  <int value="4" label="D3D11CreateDevice returned other error"/>
+  <int value="5" label="DXGI version not supported"/>
+  <int value="6" label="Other initialization error"/>
+  <int value="7" label="D3D11CreateDevice returned E_FAIL"/>
+  <int value="8" label="D3D11CreateDevice returned E_NOTIMPL"/>
+  <int value="9" label="D3D11CreateDevice returned E_OUTOFMEMORY"/>
+  <int value="10" label="D3D11CreateDevice returned DXGI_ERROR_INVALID_CALL"/>
+  <int value="11"
+      label="D3D11CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING"/>
+  <int value="12"
+      label="D3D11CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING"/>
+  <int value="13"
+      label="D3D11CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE"/>
+  <int value="14" label="D3D11CreateDevice returned DXGI_ERROR_DEVICE_HUNG"/>
+</enum>
+
+<enum name="D3D9InitializeResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Error initializing compiler"/>
+  <int value="2" label="Missing DLL dependency"/>
+  <int value="3" label="Error creating device"/>
+  <int value="4" label="Shader version not supported"/>
+  <int value="5" label="StretchRect from textures not supported"/>
+  <int value="6" label="Device lost of out-of-memory error"/>
+  <int value="7" label="Other initialization error"/>
+</enum>
+
+<enum name="D3DFeatureLevel" type="int">
+  <int value="0" label="D3D_FEATURE_LEVEL_INVALID"/>
+  <int value="1" label="D3D_FEATURE_LEVEL_9_3"/>
+  <int value="2" label="D3D_FEATURE_LEVEL_10_0"/>
+  <int value="3" label="D3D_FEATURE_LEVEL_10_1"/>
+  <int value="4" label="D3D_FEATURE_LEVEL_11_0"/>
+  <int value="5" label="D3D_FEATURE_LEVEL_11_1"/>
+</enum>
+
+<enum name="D3DHresult" type="int">
+  <int value="-2147467263" label="E_NOTIMPL"/>
+  <int value="-2147467262" label="E_NOINTERFACE"/>
+  <int value="-2147467261" label="E_POINTER"/>
+  <int value="-2147467260" label="E_ABORT"/>
+  <int value="-2147467259" label="E_FAIL"/>
+  <int value="-2147418113" label="E_UNEXPECTED"/>
+  <int value="-2147024891" label="E_ACCESSDENIED"/>
+  <int value="-2147024890" label="E_HANDLE"/>
+  <int value="-2147024882" label="E_OUTOFMEMORY"/>
+  <int value="-2147024809" label="E_INVALIDARG"/>
+  <int value="-2005270527" label="DXGI_ERROR_INVALID_CALL"/>
+  <int value="-2005270526" label="DXGI_ERROR_NOT_FOUND"/>
+  <int value="-2005270525" label="DXGI_ERROR_MORE_DATA"/>
+  <int value="-2005270524" label="DXGI_ERROR_UNSUPPORTED"/>
+  <int value="-2005270523" label="DXGI_ERROR_DEVICE_REMOVED"/>
+  <int value="-2005270522" label="DXGI_ERROR_DEVICE_HUNG"/>
+  <int value="-2005270521" label="DXGI_ERROR_DEVICE_RESET"/>
+  <int value="-2005270518" label="DXGI_ERROR_WAS_STILL_DRAWING"/>
+  <int value="-2005270517" label="DXGI_ERROR_FRAME_STATISTICS_DISJOINT"/>
+  <int value="-2005270516" label="DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE"/>
+  <int value="-2005270496" label="DXGI_ERROR_DRIVER_INTERNAL_ERROR"/>
+  <int value="-2005270495" label="DXGI_ERROR_NONEXCLUSIVE"/>
+  <int value="-2005270494" label="DXGI_ERROR_NOT_CURRENTLY_AVAILABLE"/>
+  <int value="-2005270493" label="DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED"/>
+  <int value="-2005270492" label="DXGI_ERROR_REMOTE_OUTOFMEMORY"/>
+  <int value="-2005270490" label="DXGI_ERROR_ACCESS_LOST"/>
+  <int value="-2005270489" label="DXGI_ERROR_WAIT_TIMEOUT"/>
+  <int value="-2005270488" label="DXGI_ERROR_SESSION_DISCONNECTED"/>
+  <int value="-2005270487" label="DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE"/>
+  <int value="-2005270486" label="DXGI_ERROR_CANNOT_PROTECT_CONTENT"/>
+  <int value="-2005270485" label="DXGI_ERROR_ACCESS_DENIED"/>
+  <int value="-2005270484" label="DXGI_ERROR_NAME_ALREADY_EXISTS"/>
+  <int value="-2005270483" label="DXGI_ERROR_SDK_COMPONENT_MISSING"/>
+</enum>
+
+<enum name="DailyEventIntervalType" type="int">
+  <int value="0" label="First Run"/>
+  <int value="1" label="Day Elapsed"/>
+  <int value="2" label="Clock Changed"/>
+</enum>
+
+<enum name="DangerousFile.Reason" type="int">
+  <int value="0" label="Safe Browsing is not available"/>
+  <int value="1" label="Safe Browsing returns UNKOWN"/>
+  <int value="2" label="Safe Browsing returns SAFE"/>
+</enum>
+
+<enum name="DarkResumeScanRetryResult" type="int">
+  <int value="0" label="Not Connected"/>
+  <int value="1" label="Connected"/>
+</enum>
+
+<enum name="DarkResumeUnmatchedScanResultReceived" type="int">
+  <int value="0" label="False (all scan results match)"/>
+  <int value="1" label="True (at least one unmatched scan result)"/>
+</enum>
+
+<enum name="DarkResumeWakeReason" type="int">
+  <int value="0" label="Unsupported (or not reported)"/>
+  <int value="1" label="Pattern"/>
+  <int value="2" label="Disconnect"/>
+  <int value="3" label="SSID"/>
+</enum>
+
+<enum name="DataChannelCounters" type="int">
+  <int value="0" label="Channel created."/>
+  <int value="1" label="Channel reached Open state."/>
+  <int value="2" label="Channel is reliable."/>
+  <int value="3" label="Channel is ordered."/>
+  <int value="4" label="Channel is negotiated."/>
+</enum>
+
+<enum name="DataReductionProxyAutoLoFiAccuracy" type="int">
+  <int value="0"
+      label="Estimated network quality as slow and was actually slow"/>
+  <int value="1"
+      label="Estimated network quality as slow and was actually not slow"/>
+  <int value="2"
+      label="Estimated network quality as not slow and was actually slow"/>
+  <int value="3"
+      label="Estimated network quality as not slow and was actually not slow"/>
+</enum>
+
+<enum name="DataReductionProxyAutoLoFiRequestHeaderState" type="int">
+  <int value="0" label="Empty to Empty"/>
+  <int value="1" label="Empty to Low"/>
+  <int value="2" label="Low to Empty"/>
+  <int value="3" label="Low to Low"/>
+</enum>
+
+<enum name="DataReductionProxyBypassEventType_Deprecated" type="int">
+  <int value="0" label="Short bypass"/>
+  <int value="1" label="Long bypass"/>
+  <int value="2" label="Bypass due to internal server error"/>
+  <int value="3" label="Bypass due to other error"/>
+  <int value="4" label="Bypass due to missing via header"/>
+  <int value="5" label="Bypass due to 4xx response"/>
+  <int value="6"
+      label="Bypass due to 407 response from proxy without a challenge"/>
+</enum>
+
+<enum name="DataReductionProxyBypassType" type="int">
+  <int value="0"
+      label="Bypass due to explicit instruction for the current request"/>
+  <int value="1"
+      label="Short bypass: Bypass the proxy for less than one minute"/>
+  <int value="2"
+      label="Medium bypass: Bypass the proxy for one to five minutes"/>
+  <int value="3"
+      label="Long bypass: Bypass the proxy for more than five minutes"/>
+  <int value="4" label="Bypass due to a 4xx missing via header"/>
+  <int value="5"
+      label="Bypass due to other missing via header, excluding 4xx errors"/>
+  <int value="6"
+      label="Bypass due to 407 response from proxy without a challenge"/>
+  <int value="7" label="Bypass due to a 500 internal server error"/>
+  <int value="8" label="Bypass because the request URI was too long"/>
+  <int value="9" label="Bypass due to a 503 response"/>
+  <int value="10" label="Bypass due to any network error"/>
+</enum>
+
+<enum name="DataReductionProxyConfigServiceAuthExpiredSessionKey" type="int">
+  <int value="0"
+      label="Current session key does not match the key in the request"/>
+  <int value="1" label="Current session key matches the key in the request"/>
+</enum>
+
+<enum name="DataReductionProxyConfigServiceHTTPRequests" type="int">
+  <int value="0" label="Request did not go through data saver proxy"/>
+  <int value="1" label="Request went through data saver proxy"/>
+</enum>
+
+<enum name="DataReductionProxyEnabledState" type="int">
+  <int value="0" label="Off-to-On"/>
+  <int value="1" label="On-to-Off"/>
+</enum>
+
+<enum name="DataReductionProxyLoFiImplicitOptOutAction" type="int">
+  <int value="0" label="Lo-Fi disabled for the remainder of the session"/>
+  <int value="1" label="Lo-Fi disabled until next opt out epoch"/>
+  <int value="2" label="Next implict opt out epoch, Lo-Fi re-enabled"/>
+</enum>
+
+<enum name="DataReductionProxyLoFiSessionState" type="int">
+  <int value="0" label="Lo-Fi was used"/>
+  <int value="1"
+      label="Lo-Fi was not used because the network quality was always good"/>
+  <int value="2"
+      label="Lo-Fi was not used because the user implicitly permanently opted
+             out"/>
+  <int value="3"
+      label="Lo-Fi was not used because the user implicitly temporarily opted
+             out"/>
+</enum>
+
+<enum name="DataReductionProxyLoFiTransformationType" type="int">
+  <int value="0" label="Pageloads that are lite pages"/>
+  <int value="1"
+      label="Pageloads that requested lite pages, but did not have the
+             transformation"/>
+</enum>
+
+<enum name="DataReductionProxyLoFiUIAction" type="int">
+  <int value="0" label="'Load images' snackbar shown"/>
+  <int value="1" label="'Load images' snackbar clicked"/>
+  <int value="2" label="'Load image' context menu item shown"/>
+  <int value="3" label="'Load image' context menu item clicked"/>
+  <int value="4"
+      label="Pages where the user has clicked 'Load image' at least once"/>
+  <int value="5" label="'Load images' context menu item shown"/>
+  <int value="6" label="'Load images' context menu item clicked"/>
+</enum>
+
+<enum name="DataReductionProxyNetworkChangeEvent" type="int">
+  <int value="0" label="IP Address Change"/>
+  <int value="1" label="Proxy disabled on VPN (deprecated)"/>
+</enum>
+
+<enum name="DataReductionProxyProbeURLFetchResult" type="int">
+  <int value="0" label="Internet disconnected"/>
+  <int value="1" label="Probe failed, proxy disabled"/>
+  <int value="2" label="Probe failed, proxy already disabled"/>
+  <int value="3" label="Probe succeeded, proxy enabled"/>
+  <int value="4" label="Probe succeeded, proxy already enabled"/>
+  <int value="5" label="Probe started, proxy disabled"/>
+</enum>
+
+<enum name="DataReductionProxyPromoAction" type="int">
+  <int value="0" label="Dismissed from first screen"/>
+  <int value="1" label="Dismissed from second screen"/>
+  <int value="2" label="Enabled from first screen"/>
+  <int value="3" label="Enabled from second screen"/>
+</enum>
+
+<enum name="DataReductionProxyProxyPrefMigrationResult" type="int">
+  <int value="0" label="Proxy pref not cleared"/>
+  <int value="1" label="Empty proxy pref was cleared"/>
+  <int value="2" label="System proxy pref was cleared"/>
+  <int value="3" label="Proxy pref containing a DRP was cleared"/>
+  <int value="4"
+      label="Proxy pref containing a *.googlezip.net proxy was cleared"/>
+  <int value="5"
+      label="Proxy pref of an embedded PAC script containing a
+             *.googlezip.net proxy was cleared"/>
+</enum>
+
+<enum name="DataReductionProxyProxySchemeUsed" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="HTTP"/>
+  <int value="2" label="HTTPS"/>
+  <int value="3" label="QUIC"/>
+</enum>
+
+<enum name="DataReductionProxyQuicDefaultAlternativeProxy" type="int">
+  <int value="0" label="QUIC proxy was available"/>
+  <int value="1" label="QUIC proxy was marked as broken"/>
+  <int value="2"
+      label="No supportable QUIC proxy was available in the list of data
+             reduction proxies"/>
+</enum>
+
+<enum name="DataReductionProxyQuicProxyStatus" type="int">
+  <int value="0" label="QUIC proxy was available"/>
+  <int value="1"
+      label="Resolved HTTPS data reduction proxy does not support QUIC"/>
+  <int value="2" label="QUIC proxies have been marked as broken"/>
+</enum>
+
+<enum name="DataReductionProxyResponseProxyServerStatus" type="int">
+  <int value="0" label="Empty proxy server"/>
+  <int value="1" label="DRP proxy server"/>
+  <int value="2" label="Non-DRP proxy server without DRP via header"/>
+  <int value="3" label="Non-DRP proxy server with DRP via header"/>
+</enum>
+
+<enum name="DataReductionProxySettingsConversion" type="int">
+  <int value="0" label="OFF to OFF"/>
+  <int value="1" label="OFF to ON"/>
+  <int value="2" label="ON to OFF"/>
+  <int value="3" label="ON to ON"/>
+</enum>
+
+<enum name="DataReductionProxyStartupState" type="int">
+  <int value="0" label="Proxy not available"/>
+  <int value="1" label="Proxy available but not enabled"/>
+  <int value="2" label="Proxy available and enabled"/>
+</enum>
+
+<enum name="DataReductionProxyStoreStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="NOT_FOUND"/>
+  <int value="2" label="CORRUPTED"/>
+  <int value="3" label="IO_ERROR"/>
+  <int value="4" label="MISC_ERROR"/>
+</enum>
+
+<enum name="DataReductionProxyUIAction" type="int">
+  <int value="0" label="Enabled directly from the Second Run promo"/>
+  <int value="1" label="Enabled then disabled from promo (iOS-only)"/>
+  <int value="2"
+      label="Second Run promo settings link clicked, then enabled from
+             settings"/>
+  <int value="3"
+      label="Second Run promo settings link clicked, but not enabled from
+             settings"/>
+  <int value="4" label="Second Run promo dismissed (proxy not enabled)"/>
+  <int value="5"
+      label="Arrived at settings menu by another path: entered off, exited
+             off"/>
+  <int value="6"
+      label="Arrived at settings menu by another path: entered off, exited on"/>
+  <int value="7"
+      label="Arrived at settings menu by another path: entered on, exited off"/>
+  <int value="8"
+      label="Arrived at settings menu by another path: entered on, exited on"/>
+  <int value="9" label="Enabled directly from the First Run Experience"/>
+  <int value="10" label="Disabled directly from the First Run Experience"/>
+  <int value="11" label="Enabled directly from the Infobar promo"/>
+  <int value="12" label="InfoBar promo dismissed (proxy not enabled)"/>
+  <int value="13"
+      label="Snackbar promo link clicked, but no action was taken (the proxy
+             remained enabled)"/>
+  <int value="14"
+      label="Snackbar promo link clicked, and the proxy was disabled"/>
+  <int value="15" label="Snackbar promo dismissed (no action taken)"/>
+</enum>
+
+<enum name="DataUsageReportSubmissionResult" type="int">
+  <int value="0" label="Successful"/>
+  <int value="1" label="Failed"/>
+  <int value="2" label="Timed out"/>
+  <int value="3" label="Lost"/>
+</enum>
+
+<enum name="DataUsageUIAction" type="int">
+  <int value="0" label="Data use tracking started snackbar shown"/>
+  <int value="1"
+      label="Data use tracking started snackbar 'More' link clicked"/>
+  <int value="2" label="Data use tracking ended snackbar shown"/>
+  <int value="3" label="Data use tracking ended snackbar 'More' link clicked"/>
+  <int value="4" label="Data use tracking ended dialog shown"/>
+  <int value="5"
+      label="Data use tracking ended dialog 'Continue' button clicked"/>
+  <int value="6"
+      label="Data use tracking ended dialog 'Cancel' button clicked"/>
+  <int value="7"
+      label="Data use tracking ended dialog 'Learn more' link clicked"/>
+  <int value="8" label="Data use tracking ended dialog opted out"/>
+</enum>
+
+<enum name="DataUseServices" type="int">
+  <int value="0" label="Not Tagged"/>
+  <int value="1" label="Suggestions"/>
+  <int value="2" label="Translate"/>
+  <int value="3" label="Sync"/>
+  <int value="4" label="Omnibox"/>
+  <int value="5" label="Invalidation"/>
+  <int value="6" label="Rappor"/>
+  <int value="7" label="Variations"/>
+  <int value="8" label="UMA"/>
+  <int value="9" label="Domain Reliability"/>
+  <int value="10" label="Profile Downloader"/>
+  <int value="11" label="Google URL Tracker"/>
+  <int value="12" label="Autofill"/>
+  <int value="13" label="Policy"/>
+  <int value="14" label="Spell Checker"/>
+  <int value="15" label="NTPSnippets"/>
+  <int value="16" label="Safe Browsing"/>
+  <int value="17" label="Data Reduction Proxy"/>
+  <int value="18" label="Precache"/>
+  <int value="19" label="NTPTiles"/>
+  <int value="20" label="Feedback Uploader"/>
+  <int value="21" label="Tracing Uploader"/>
+  <int value="22" label="DOM Distiller"/>
+  <int value="23" label="Cloud Print"/>
+  <int value="24" label="Search Provider Logos"/>
+  <int value="25" label="Update Client"/>
+</enum>
+
+<enum name="DecodedImageOrientation" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Top Left"/>
+  <int value="2" label="Top Right"/>
+  <int value="3" label="Bottom Right"/>
+  <int value="4" label="Bottom Left"/>
+  <int value="5" label="Left Top"/>
+  <int value="6" label="Right Top"/>
+  <int value="7" label="Right Bottom"/>
+  <int value="8" label="Left Bottom"/>
+</enum>
+
+<enum name="DecodedImageType" type="int">
+  <int value="0" label="kImageUnknown"/>
+  <int value="1" label="kImageJPEG"/>
+  <int value="2" label="kImagePNG"/>
+  <int value="3" label="kImageGIF"/>
+  <int value="4" label="kImageWebP"/>
+  <int value="5" label="kImageICO"/>
+  <int value="6" label="kImageBMP"/>
+</enum>
+
+<enum name="DefaultBrowserAsyncAttemptResult" type="int">
+  <obsolete>
+    Deprecated 2015/11. Renamed to SetDefaultAttemptResult.
+  </obsolete>
+  <int value="0" label="Success">No errors encountered.</int>
+  <int value="1" label="Already default">
+    Chrome was already the default web client. This counts as a successful
+    attempt.
+  </int>
+  <int value="2" label="Failure">
+    Chrome was not set as the default web client.
+  </int>
+  <int value="3" label="Abandoned">
+    The attempt was abandoned because the observer was destroyed.
+  </int>
+  <int value="4" label="Launch failure">
+    Failed to launch the process to set Chrome as the default web client
+    asynchronously.
+  </int>
+  <int value="5" label="Other worker">
+    Another worker is already in progress to make Chrome the default web client.
+  </int>
+  <int value="6" label="Retry">
+    The user initiated another attempt while the asynchronous operation was
+    already in progress.
+  </int>
+</enum>
+
+<enum name="DefaultBrowserInfoBarUserInteraction" type="int">
+  <int value="0" label="Accept">
+    The user clicked the &quot;Set as default&quot; button.
+  </int>
+  <int value="1" label="Cancel">
+    The user clicked the &quot;Don't ask again&quot; button.
+  </int>
+  <int value="2" label="Ignore">
+    The user did not interact with the info bar.
+  </int>
+  <int value="3" label="Dismiss">The user explicitly closed the infobar.</int>
+</enum>
+
+<enum name="DefaultBrowserState" type="int">
+  <int value="0" label="Not Default"/>
+  <int value="1" label="Default"/>
+  <int value="2" label="Unknown"/>
+</enum>
+
+<enum name="DefaultSearchChangeOrigin" type="int">
+  <int value="0" label="DSP changed by synced Pref"/>
+  <int value="1" label="DSP changed by Sync ADD"/>
+  <int value="2" label="DSP changed by Sync DELETE"/>
+  <int value="3" label="DSP changed by managed policy switch"/>
+  <int value="4" label="DSP changed unintentionally by Sync"/>
+  <int value="5" label="DSP changed by other non-Sync origin"/>
+  <int value="6" label="DSP changed by Profile Reset feature"/>
+  <int value="7" label="DSP changed by the extension Override Settings API"/>
+  <int value="8" label="DSP set to new engine with no previous value in prefs"/>
+</enum>
+
+<enum name="DefaultWebClientState" type="int">
+  <int value="0" label="Not default">Chrome is not the default web client.</int>
+  <int value="1" label="Is default">Chrome is the default web client.</int>
+  <int value="2" label="Unknown default">
+    Chrome is in a unknown default state.
+  </int>
+</enum>
+
+<enum name="DelayBasedEchoQuality" type="int">
+  <int value="0" label="Good delays">
+    Echo Cancellation quality most likely good.
+  </int>
+  <int value="1" label="Spurious delays">Echo Cancellation may suffer.</int>
+  <int value="2" label="Poor delays">
+    Echo Cancellation likely fails unless user is using headset.
+  </int>
+  <int value="3" label="Invalid delays">Insufficient amount of data.</int>
+</enum>
+
+<enum name="DeprecatedAcceleratorUsage" type="int">
+  <int value="0" label="Deprecated key accelerator is used"/>
+  <int value="1" label="New key accelerator is used"/>
+</enum>
+
+<enum name="DesktopCaptureCounters" type="int">
+  <int value="0" label="Screen capturer created."/>
+  <int value="1" label="Window capturer created."/>
+  <int value="2" label="First screen capture call succeeded."/>
+  <int value="3" label="First screen capture call failed."/>
+  <int value="4" label="First window capture call succeeded."/>
+  <int value="5" label="First window capture call failed."/>
+  <int value="6" label="Tab video capturer created."/>
+  <int value="7" label="Tab audio capturer created."/>
+  <int value="8" label="System loopback audio capturer created."/>
+  <int value="9" label="Screen capturer created together with audio capturer."/>
+  <int value="10" label="Screen capturer created without audio capturer."/>
+  <int value="11" label="Tab capturer created together with audio capturer."/>
+  <int value="12" label="Tab capturer created without audio capturer."/>
+</enum>
+
+<enum name="DesktopSearchRedirectionInfobarCloseAction" type="int">
+  <int value="0" label="Clicked the 'Manage search settings' link"/>
+  <int value="1" label="Clicked the dismiss button"/>
+  <int value="2" label="InfoBar dismissed implicitly (no interaction)"/>
+</enum>
+
+<enum name="DesktopSearchURLAction" type="int">
+  <int value="0" label="No redirection - Feature disabled"/>
+  <int value="1" label="No redirection - Default search engine is Bing"/>
+  <int value="2" label="No redirection - Default search engine is invalid"/>
+  <int value="3" label="Redirection to the default search engine"/>
+</enum>
+
+<enum name="DeviceIdMismatch" type="int">
+  <int value="0" label="BOTH_NONEMPTY"/>
+  <int value="1" label="SYNC_EMPTY"/>
+  <int value="2" label="PREF_EMPTY"/>
+</enum>
+
+<enum name="DeviceOrientationSensorTypeAndroid" type="int">
+  <int value="0" label="Not Available"/>
+  <int value="1" label="ROTATION_VECTOR"/>
+  <int value="2" label="ACCELEROMETER + MAGNETIC_FIELD"/>
+  <int value="3" label="GAME_ROTATION_VECTOR"/>
+</enum>
+
+<enum name="DevicePermissionActions" type="int">
+  <int value="0" label="AllowHttps"/>
+  <int value="1" label="AllowHttp"/>
+  <int value="2" label="Deny"/>
+  <int value="3" label="Cancel"/>
+</enum>
+
+<enum name="DevicesPageEvents" type="int">
+  <int value="0" label="OPENED"/>
+  <int value="1" label="LOG_IN_STARTED_FROM_REGISTER_PROMO"/>
+  <int value="2" label="LOG_IN_STARTED_FROM_DEVICE_LIST_PROMO"/>
+  <int value="3" label="ADD_PRINTER_CLICKED"/>
+  <int value="4" label="REGISTER_CLICKED"/>
+  <int value="5" label="REGISTER_CONFIRMED"/>
+  <int value="6" label="REGISTER_SUCCESS"/>
+  <int value="7" label="REGISTER_CANCEL"/>
+  <int value="8" label="REGISTER_FAILURE"/>
+  <int value="9" label="MANAGE_CLICKED"/>
+  <int value="10" label="REGISTER_CANCEL_ON_PRINTER"/>
+  <int value="11" label="REGISTER_TIMEOUT"/>
+  <int value="12" label="LOG_IN_STARTED_FROM_REGISTER_OVERLAY_PROMO"/>
+</enum>
+
+<enum name="DeviceTechnologyType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Ethernet"/>
+  <int value="2" label="WiFi"/>
+  <int value="3" label="WiMax"/>
+  <int value="4" label="Cellular"/>
+</enum>
+
+<enum name="DevToolsAction" type="int">
+  <int value="1" label="Window docked"/>
+  <int value="2" label="Window undocked"/>
+  <int value="3" label="Scripts breakpoint set"/>
+  <int value="4" label="Timeline started"/>
+  <int value="5" label="CPU profile taken"/>
+  <int value="6" label="Heap profile taken"/>
+  <int value="7" label="Audits started"/>
+  <int value="8" label="Console evaluated"/>
+  <int value="9" label="File saved in workspace"/>
+  <int value="10" label="Device mode enabled"/>
+  <int value="11" label="Animations playback rate changed"/>
+  <int value="12" label="Revision applied"/>
+  <int value="13" label="File system directory content received"/>
+  <int value="14" label="Style rule edited"/>
+  <int value="15" label="Command evaluated in console panel"/>
+  <int value="16" label="DOM properties expanded"/>
+  <int value="17" label="Resized view in responsive mode"/>
+</enum>
+
+<enum name="DevToolsPanel" type="int">
+  <int value="1" label="Elements"/>
+  <int value="2" label="Resources"/>
+  <int value="3" label="Network"/>
+  <int value="4" label="Scripts"/>
+  <int value="5" label="Timeline"/>
+  <int value="6" label="Profiles"/>
+  <int value="7" label="Audits"/>
+  <int value="8" label="Console"/>
+  <int value="9" label="Layers"/>
+  <int value="10" label="Drawer - Console"/>
+  <int value="11" label="Drawer - Animations"/>
+  <int value="12" label="Drawer - Network config"/>
+  <int value="13" label="Drawer - Rendering"/>
+  <int value="14" label="Drawer - Sensors"/>
+  <int value="15" label="Drawer - Search"/>
+  <int value="16" label="Security"/>
+</enum>
+
+<enum name="DevToolsSetting" type="int">
+  <int value="1" label="Elements DOM wrap on"/>
+  <int value="2" label="Elements DOM wrap off"/>
+  <int value="3" label="Console monitor XHR on"/>
+  <int value="4" label="Console monitor XHR off"/>
+  <int value="5" label="Console preserve log on"/>
+  <int value="6" label="Console preserve log off"/>
+  <int value="7" label="Network show large rows on"/>
+  <int value="8" label="Network show large rows off"/>
+</enum>
+
+<enum name="DiagnosticsRecoveryRun" type="int">
+  <int value="0" label="Recovery not run"/>
+  <int value="1" label="Recovery run because of crash"/>
+  <int value="2" label="Recovery run by user"/>
+</enum>
+
+<enum name="DiagnosticsResult" type="int">
+  <int value="0" label="Not run (regular startup)"/>
+  <int value="1" label="Success (crash startup)"/>
+  <int value="2" label="Failure (crash startup)"/>
+  <int value="3" label="Skipped (crash startup)"/>
+</enum>
+
+<enum name="DiagnosticsTestName" type="int">
+  <int value="0" label="Conflicting DLLs Test"/>
+  <int value="1" label="Disk Space Test"/>
+  <int value="2" label="Install Type Test"/>
+  <int value="3" label="JSON Bookmarks Test"/>
+  <int value="4" label="JSON Local State Test"/>
+  <int value="5" label="JSON Preferences Test"/>
+  <int value="6" label="Operating System Test"/>
+  <int value="7" label="Path Dictionaries Test"/>
+  <int value="8" label="Path Local State Test"/>
+  <int value="9" label="Path Resources Test"/>
+  <int value="10" label="Path User Data Test"/>
+  <int value="11" label="Version Test"/>
+  <int value="12" label="SQLite Integrity App Cache Test"/>
+  <int value="13" label="SQLite Integrity Archived History Test (obsolete)"/>
+  <int value="14" label="SQLite Integrity Cookie Test"/>
+  <int value="15" label="SQLite Integrity Database Tracker Test"/>
+  <int value="16" label="SQLite Integrity History Test"/>
+  <int value="17" label="SQLite Integrity Nss Cert Test"/>
+  <int value="18" label="SQLite Integrity Nss Key Test"/>
+  <int value="19" label="SQLite Integrity Thumbnails Test (obsolete)"/>
+  <int value="20" label="SQLite Integrity Web Data Test"/>
+  <int value="21" label="SQLite Integrity Favicons Test"/>
+  <int value="22" label="SQLite Integrity Top Sites Test"/>
+</enum>
+
+<enum name="DifferentPrimaryAccounts" type="int">
+  <int value="0" label="Primary Accounts the same"/>
+  <int value="1" label="(obsolete) Primary Accounts different"/>
+  <int value="2" label="No GAIA account in cookie jar"/>
+  <int value="3" label="Primary accounts present but different"/>
+</enum>
+
+<enum name="DirectoryDatabaseRepairResult" type="int">
+  <int value="0" label="Succeeded"/>
+  <int value="1" label="Failed"/>
+</enum>
+
+<enum name="DirectWriteFontFallbackResult" type="int">
+  <int value="0" label="Failed: no font matched"/>
+  <int value="1" label="Success: mapped from cache"/>
+  <int value="2" label="Success: mapped using IPC"/>
+</enum>
+
+<enum name="DirectWriteFontLoaderType" type="int">
+  <int value="0" label="File: system font directory"/>
+  <int value="1" label="File: outside sandbox whitelist"/>
+  <int value="2" label="Non-file loader"/>
+  <int value="3" label="Font was missing require styles"/>
+</enum>
+
+<enum name="DirectWriteFontProxyError" type="int">
+  <int value="0" label="FindFamily: send failed"/>
+  <int value="1" label="GetFamilyCount: send failed"/>
+  <int value="2" label="CreateEnumeratorFromKey: invalid key"/>
+  <int value="3" label="CreateEnumeratorFromKey: family index out of range"/>
+  <int value="4" label="GetFontFiles: send failed"/>
+  <int value="5" label="FontFileStream: failed to created mapped file"/>
+</enum>
+
+<enum name="DirectWriteLoadFamilyResult" type="int">
+  <int value="0" label="Success: single family"/>
+  <int value="1" label="Success: matched from collection"/>
+  <int value="2" label="Error: multiple families"/>
+  <int value="3" label="Error: no families"/>
+  <int value="4" label="Error: failed to create collection"/>
+</enum>
+
+<enum name="DirectWriteMessageFilterError" type="int">
+  <int value="0" label="OnGetFontFiles: GetFont failed"/>
+  <int value="1" label="OnGetFontFiles: AddFilesForFont failed"/>
+  <int value="2" label="OnGetFontFiles: GetFontFamily failed"/>
+  <int value="3" label="InitializeDirectWrite: GetSystemFontCollection failed"/>
+  <int value="4" label="MapCharacters: could not find family"/>
+  <int value="5" label="AddFilesForFont: create font face failed"/>
+  <int value="6" label="AddFilesForFont: get font file count failed"/>
+  <int value="7" label="AddFilesForFont: get font files failed"/>
+  <int value="8" label="AddFilesForFont: get loader failed"/>
+  <int value="9" label="AddFilesForFont: QueryInterface failed"/>
+  <int value="10" label="AddLocalFile: get reference key failed"/>
+  <int value="11" label="AddLocalFile: get path length failed"/>
+  <int value="12" label="AddLocalFile: get path failed"/>
+</enum>
+
+<enum name="DistillableType" type="int">
+  <int value="0" label="Not distillable"/>
+  <int value="1" label="Non-mobile-friendly distillable"/>
+  <int value="2" label="Mobile-friendly distillable"/>
+</enum>
+
+<enum name="DistillableType2" type="int">
+  <int value="0" label="Non-mobile-friendly, not distillable"/>
+  <int value="1" label="Mobile-friendly, not distillable"/>
+  <int value="2" label="Non-mobile-friendly, distillable"/>
+  <int value="3" label="Mobile-friendly, distillable"/>
+</enum>
+
+<enum name="DistillRejection" type="int">
+  <int value="0" label="Not an article"/>
+  <int value="1" label="Mobile-friendly"/>
+  <int value="2" label="Domain is blacklisted"/>
+  <int value="3" label="Predicted to be short"/>
+  <int value="4" label="Not rejected"/>
+</enum>
+
+<enum name="DllHash" type="int">
+<!-- Generated by chrome_elf/dll_hash/dll_hash_main.cc -->
+
+  <int value="26393601" label="wajam_goblin_64.dll"/>
+  <int value="44551499" label="949ba8b6a9.dll"/>
+  <int value="79515758" label="crdli.dll"/>
+  <int value="114416212" label="virtualcamera.ax"/>
+  <int value="141490347" label="minisp.dll"/>
+  <int value="231333778" label="libapi2hook.dll"/>
+  <int value="272828651" label="activedetect64.dll"/>
+  <int value="295718620" label="cespy.dll"/>
+  <int value="313484566" label="vntsrv.dll"/>
+  <int value="447643466" label="libinject.dll"/>
+  <int value="604217493" label="explorerex.dll"/>
+  <int value="684728064" label="offerswizarddll.dll"/>
+  <int value="685821492" label="smdmf.dll"/>
+  <int value="750761702" label="systemk.dll"/>
+  <int value="777975221" label="activedetect32.dll"/>
+  <int value="803283353" label="lmrn.dll"/>
+  <int value="839518885" label="libinject2.dll"/>
+  <int value="851064219" label="wajam_goblin.dll"/>
+  <int value="888528780" label="ycwebcamerasource.ax"/>
+  <int value="989714890" label="datamngr.dll"/>
+  <int value="1114335935" label="libredir2.dll"/>
+  <int value="1120295191" label="windowsapihookdll64.dll"/>
+  <int value="1148809156" label="chrmxtn.dll"/>
+  <int value="1270622879" label="hk.dll"/>
+  <int value="1409376135" label="windowsapihookdll32.dll"/>
+  <int value="1617407227" label="spappsv32.dll"/>
+  <int value="1671476533" label="crdli64.dll"/>
+  <int value="1680432366" label="virtualCamera.ax"/>
+  <int value="1736709911" label="bitguard.dll"/>
+  <int value="1763208296" label="safetynut.dll"/>
+  <int value="1806942655" label="dpinterface32.dll"/>
+  <int value="1850669228" label="YCWebCameraSource.ax"/>
+  <int value="1979101632" label="bsvc.dll"/>
+  <int value="1996673448" label="scdetour.dll"/>
+  <int value="2060768492" label="libwinhook.dll"/>
+  <int value="2074150225" label="minisp32.dll"/>
+  <int value="2117903235" label="cplushook.dll"/>
+  <int value="2132270559" label="libsvn_tsvn32.dll"/>
+</enum>
+
+<enum name="DNS.AddressListDeltaType" type="int">
+  <int value="0" label="Same addresses in the same order"/>
+  <int value="1" label="Same addresses in a different order"/>
+  <int value="2" label="Some but not all addresses in common"/>
+  <int value="3" label="No addresses in common"/>
+</enum>
+
+<enum name="DNS.HostCache.EraseReason" type="int">
+  <int value="0" label="Entry evicted"/>
+  <int value="1" label="Cache cleared"/>
+  <int value="2" label="Cache destroyed"/>
+</enum>
+
+<enum name="DNS.HostCache.LookupOutcome" type="int">
+  <int value="0" label="Miss (absent)"/>
+  <int value="1" label="Miss (stale when not requested)"/>
+  <int value="2" label="Hit (valid)"/>
+  <int value="3" label="Hit (stale when requested)"/>
+</enum>
+
+<enum name="DNS.HostCache.SetOutcome" type="int">
+  <int value="0" label="Inserted new entry"/>
+  <int value="1" label="Updated valid entry"/>
+  <int value="2" label="Updated stale entry"/>
+</enum>
+
+<enum name="DNS.StaleHostResolverRequestOutcome" type="int">
+  <int value="0"
+      label="Returned synchronously (cache, hosts, IP literal etc.)"/>
+  <int value="1"
+      label="Returned network result; no stale cached result was available."/>
+  <int value="2"
+      label="Returned network result; stale cached result was available."/>
+  <int value="3" label="Returned stale cached result; network was too slow."/>
+  <int value="4" label="Canceled; no stale cached result was available."/>
+  <int value="5" label="Canceled; stale cached result was available."/>
+</enum>
+
+<enum name="DNSEmptyAddressListAndNoError" type="int">
+  <int value="0" label="Error reported or Address List is not empty"/>
+  <int value="1" label="Success reported but Address List is empty"/>
+</enum>
+
+<enum name="DnsProbe.JobResult" type="int">
+  <int value="0" label="SERVERS_UNKNOWN"/>
+  <int value="1" label="SERVERS_CORRECT"/>
+  <int value="2" label="SERVERS_INCORRECT"/>
+  <int value="3" label="SERVERS_FAILING"/>
+  <int value="4" label="SERVERS_UNREACHABLE"/>
+</enum>
+
+<enum name="DnsProbe.ObsoleteProbeResult" type="int">
+  <int value="0" label="INCONCLUSIVE"/>
+  <int value="1" label="NO_INTERNET"/>
+  <int value="2" label="BAD_CONFIG"/>
+  <int value="3" label="NXDOMAIN"/>
+</enum>
+
+<enum name="DnsProbe.ProbeStatus" type="int">
+  <int value="0" label="POSSIBLE"/>
+  <int value="1" label="NOT_RUN"/>
+  <int value="2" label="STARTED"/>
+  <int value="3" label="FINISHED_INCONCLUSIVE"/>
+  <int value="4" label="FINISHED_NO_INTERNET"/>
+  <int value="5" label="FINISHED_BAD_CONFIG"/>
+  <int value="6" label="FINISHED_NXDOMAIN"/>
+</enum>
+
+<enum name="DnsProbe.SystemIsLocalhost" type="int">
+  <int value="0" label="Not just 127.0.0.1">
+    127.0.0.1 was not the only nameserver in the system DNS config.
+  </int>
+  <int value="1" label="Just 127.0.0.1">
+    127.0.0.1 was the only nameserver in the system DNS config.
+  </int>
+</enum>
+
+<enum name="DockedAction" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Dock"/>
+  <int value="2" label="Undock"/>
+  <int value="3" label="Resize"/>
+  <int value="4" label="Reorder"/>
+  <int value="5" label="Evict"/>
+  <int value="6" label="Maximize"/>
+  <int value="7" label="Minimize"/>
+  <int value="8" label="Restore"/>
+  <int value="9" label="Close"/>
+</enum>
+
+<enum name="DockedActionSource" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Mouse"/>
+  <int value="2" label="Touch"/>
+  <int value="3" label="Keyboard"/>
+</enum>
+
+<enum name="DocumentStateForDeferredLoading" type="int">
+  <int value="0" label="Created"/>
+  <int value="1" label="WouldLoadBecauseVisible"/>
+</enum>
+
+<enum name="DocumentStateForDeferredLoadingV2" type="int">
+  <int value="0" label="Created"/>
+  <int value="1" label="WouldLoadOutOfProcess"/>
+  <int value="2" label="WouldLoadDisplayNone"/>
+  <int value="3" label="WouldLoadZeroByZero"/>
+  <int value="4" label="WouldLoadAbove"/>
+  <int value="5" label="WouldLoadLeft"/>
+  <int value="6" label="WouldLoadVisible"/>
+</enum>
+
+<enum name="DocumentStateForDeferredLoadingV3" type="int">
+  <int value="0" label="Created"/>
+  <int value="1" label="WouldLoadOutOfProcess"/>
+  <int value="2" label="WouldLoadDisplayNone"/>
+  <int value="3" label="WouldLoadZeroByZero"/>
+  <int value="4" label="WouldLoadAboveAndLeft"/>
+  <int value="5" label="WouldLoadAbove"/>
+  <int value="6" label="WouldLoadLeft"/>
+  <int value="7" label="WouldLoadVisible"/>
+</enum>
+
+<enum name="DocumentWriteGatedEvaluation" type="int">
+  <int value="0" label="Script too long"/>
+  <int value="1" label="No likely external script write"/>
+  <int value="2" label="Looping construct found"/>
+  <int value="3" label="Script uses popular library"/>
+  <int value="4" label="Script uses non-determinism"/>
+</enum>
+
+<enum name="DomainBoundCerts.GetCertResult" type="int">
+  <int value="0" label="SYNC_SUCCESS"/>
+  <int value="1" label="ASYNC_SUCCESS"/>
+  <int value="2" label="ASYNC_CANCELLED"/>
+  <int value="3" label="ASYNC_FAILURE_KEYGEN"/>
+  <int value="4" label="ASYNC_FAILURE_CREATE_CERT"/>
+  <int value="5" label="ASYNC_FAILURE_EXPORT_KEY"/>
+  <int value="6" label="ASYNC_FAILURE_UNKNOWN"/>
+  <int value="7" label="INVALID_ARGUMENT"/>
+  <int value="8" label="UNSUPPORTED_TYPE"/>
+  <int value="9" label="TYPE_MISMATCH"/>
+  <int value="10" label="WORKER_FAILURE"/>
+</enum>
+
+<enum name="DomainBoundCerts.Support" type="int">
+  <int value="0" label="DISABLED"/>
+  <int value="1" label="CLIENT_ONLY"/>
+  <int value="2" label="CLIENT_AND_SERVER"/>
+  <int value="3" label="CLIENT_NO_ECC">
+    Channel ID was enabled, but the client did not support elliptic curve key
+    generation.
+  </int>
+  <int value="4" label="CLIENT_BAD_SYSTEM_TIME">
+    Channel ID was enabled, but the client had an invalid system time which
+    prevented using it.
+  </int>
+  <int value="5" label="CLIENT_NO_SERVER_BOUND_CERT_SERVICE">
+    The SSLClientSocket was created without a ServerBoundCertService.
+  </int>
+</enum>
+
+<enum name="DomainReliability.BooleanFailover" type="int">
+  <int value="0" label="Used first collector"/>
+  <int value="1" label="Failed over to another collector"/>
+</enum>
+
+<enum name="DoubleGetExperimentMethods" type="int">
+  <int value="0" label="POST"/>
+  <int value="1" label="GET_CACHABLE"/>
+  <int value="2" label="GET_NON_CACHABLE"/>
+</enum>
+
+<enum name="DownEventDestination" type="int">
+  <int value="0" label="Others, everything except browser and apps"/>
+  <int value="1" label="Inside the browser frame"/>
+  <int value="2" label="Regular chrome app, except default note-taking app"/>
+  <int value="3" label="ARC app (android app on Chrome)"/>
+  <int value="4" label="Default note-taking app"/>
+</enum>
+
+<enum name="DownEventFormFactor" type="int">
+  <int value="0" label="Clamshell"/>
+  <int value="1" label="Touchview"/>
+</enum>
+
+<enum name="DownEventSource" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Mouse"/>
+  <int value="2" label="Stylus"/>
+  <int value="3" label="Touch"/>
+</enum>
+
+<enum name="DownloadConnectionSecurity" type="int">
+  <int value="0"
+      label="Final download url and the redirects before it all use https"/>
+  <int value="1" label="Final download url uses http, redirects all use https"/>
+  <int value="2"
+      label="Final download url uses https, but at least one redirect uses
+             http"/>
+  <int value="3"
+      label="Final download url uses http, and at least one redirect uses
+             http"/>
+  <int value="4" label="Final download url uses scheme other than http/https"/>
+</enum>
+
+<enum name="DownloadContentDisposition" type="int">
+  <int value="0" label="Content-Disposition header present"/>
+  <int value="1" label="Valid"/>
+  <int value="2" label="Has disposition-type"/>
+  <int value="3" label="Has unknown disposition-type"/>
+  <int value="4" label="Has 'name' attribute (Obsolete 04/2015)"/>
+  <int value="5" label="Has 'filename' attribute"/>
+  <int value="6" label="Has 'filename*' attribute"/>
+  <int value="7" label="Has non-ASCII strings"/>
+  <int value="8" label="Has percent encoded strings"/>
+  <int value="9" label="Has RFC 2047 encoded strings"/>
+  <int value="10" label="Has 'name' attribute only (Obsolete 04/2015)"/>
+</enum>
+
+<enum name="DownloadContentType" type="int">
+  <int value="0" label="UNRECOGNIZED"/>
+  <int value="1" label="TEXT"/>
+  <int value="2" label="IMAGE"/>
+  <int value="3" label="AUDIO"/>
+  <int value="4" label="VIDEO"/>
+  <int value="5" label="OCTET_STREAM"/>
+  <int value="6" label="PDF"/>
+  <int value="7" label="DOC"/>
+  <int value="8" label="XLS"/>
+  <int value="9" label="PPT"/>
+  <int value="10" label="ARCHIVE"/>
+  <int value="11" label="EXE"/>
+  <int value="12" label="DMG"/>
+  <int value="13" label="CRX"/>
+</enum>
+
+<enum name="DownloadCountType" type="int">
+  <int value="0" label="Initiated by Navigation (Obsolete)"/>
+  <int value="1" label="Initiated by Context Menu (Obsolete)"/>
+  <int value="2" label="Initiated by SavePackage Failure (Obsolete)"/>
+  <int value="3" label="Initiated by Drag-n-drop (Obsolete)"/>
+  <int value="4" label="Initiated by Renderer (Obsolete)"/>
+  <int value="5" label="Initiated and Unthrottled"/>
+  <int value="6" label="Completed"/>
+  <int value="7" label="Cancelled"/>
+  <int value="8" label="Started"/>
+  <int value="9" label="Interrupted"/>
+  <int value="10" label="Calls to AppendDataToFile (Size) (Obsolete 8/2013)"/>
+  <int value="11" label="Calls to AppendDataToFile (Count) (Obsolete 8/2013)"/>
+  <int value="12" label="Interrupted at End of Download"/>
+  <int value="13" label="Attempt to Append to Detached File"/>
+  <int value="14" label="File Missing After Successful Scan (Obsolete 6/2016)"/>
+  <int value="15" label="Supports ranges and strong ETag (Obsolete 11/2013)"/>
+  <int value="16" label="No WebContents at interruption"/>
+  <int value="17" label="Supports ranges and strong validation"/>
+</enum>
+
+<enum name="DownloadDatabaseRecordDroppedType" type="int">
+  <int value="0" label="Bad State"/>
+  <int value="1" label="Bad Danger Type"/>
+  <int value="2" label="Bad ID"/>
+  <int value="3" label="Duplicate ID"/>
+</enum>
+
+<enum name="DownloadDOMEvent" type="int">
+  <int value="0" label="GetDownloads"/>
+  <int value="1" label="OpenFile"/>
+  <int value="2" label="Drag"/>
+  <int value="3" label="SaveDangerous"/>
+  <int value="4" label="DiscardDangerous"/>
+  <int value="5" label="Show"/>
+  <int value="6" label="Pause"/>
+  <int value="7" label="Remove"/>
+  <int value="8" label="Cancel"/>
+  <int value="9" label="ClearAll"/>
+  <int value="10" label="OpenFolder"/>
+  <int value="11" label="Resume"/>
+</enum>
+
+<enum name="DownloadFilePickerResult" type="int">
+  <int value="0" label="SAME"/>
+  <int value="1" label="DIFFERENT_DIR"/>
+  <int value="2" label="DIFFERENT_NAME"/>
+  <int value="3" label="CANCEL"/>
+</enum>
+
+<enum name="DownloadFunctions" type="int">
+  <int value="0" label="download"/>
+  <int value="1" label="search"/>
+  <int value="2" label="pause"/>
+  <int value="3" label="resume"/>
+  <int value="4" label="cancel"/>
+  <int value="5" label="erase"/>
+  <int value="6" label="set_destination"/>
+  <int value="7" label="accept_danger"/>
+  <int value="8" label="show"/>
+  <int value="9" label="drag"/>
+</enum>
+
+<enum name="DownloadImageType" type="int">
+  <int value="0" label="Unrecognized"/>
+  <int value="1" label="GIF"/>
+  <int value="2" label="JPEG"/>
+  <int value="3" label="PNG"/>
+  <int value="4" label="TIFF"/>
+  <int value="5" label="ICON"/>
+  <int value="6" label="WEBP"/>
+</enum>
+
+<enum name="DownloadInterruptedUnknownSizeType" type="int">
+  <int value="0" label="Size Known"/>
+  <int value="1" label="Size Unknown"/>
+</enum>
+
+<enum name="DownloadItem.DangerousFileType" type="int">
+  <int value="0" label="unknown"/>
+  <int value="1" label="ad"/>
+  <int value="2" label="ade"/>
+  <int value="3" label="adp"/>
+  <int value="4" label="ah"/>
+  <int value="5" label="apk"/>
+  <int value="6" label="app"/>
+  <int value="7" label="application"/>
+  <int value="8" label="asp"/>
+  <int value="9" label="asx"/>
+  <int value="10" label="bas"/>
+  <int value="11" label="bash"/>
+  <int value="12" label="bat"/>
+  <int value="13" label="cfg"/>
+  <int value="14" label="chi"/>
+  <int value="15" label="chm"/>
+  <int value="16" label="class"/>
+  <int value="17" label="cmd"/>
+  <int value="18" label="com"/>
+  <int value="19" label="command"/>
+  <int value="20" label="crt"/>
+  <int value="21" label="crx"/>
+  <int value="22" label="csh"/>
+  <int value="23" label="deb"/>
+  <int value="24" label="dex"/>
+  <int value="25" label="dll"/>
+  <int value="26" label="drv"/>
+  <int value="27" label="exe"/>
+  <int value="28" label="fxp"/>
+  <int value="29" label="grp"/>
+  <int value="30" label="hlp"/>
+  <int value="31" label="hta"/>
+  <int value="32" label="htm"/>
+  <int value="33" label="html"/>
+  <int value="34" label="htt"/>
+  <int value="35" label="inf"/>
+  <int value="36" label="ini"/>
+  <int value="37" label="ins"/>
+  <int value="38" label="isp"/>
+  <int value="39" label="jar"/>
+  <int value="40" label="jnlp"/>
+  <int value="41" label="user.js"/>
+  <int value="42" label="js"/>
+  <int value="43" label="jse"/>
+  <int value="44" label="ksh"/>
+  <int value="45" label="lnk"/>
+  <int value="46" label="local"/>
+  <int value="47" label="mad"/>
+  <int value="48" label="maf"/>
+  <int value="49" label="mag"/>
+  <int value="50" label="mam"/>
+  <int value="51" label="manifest"/>
+  <int value="52" label="maq"/>
+  <int value="53" label="mar"/>
+  <int value="54" label="mas"/>
+  <int value="55" label="mat"/>
+  <int value="56" label="mau"/>
+  <int value="57" label="mav"/>
+  <int value="58" label="maw"/>
+  <int value="59" label="mda"/>
+  <int value="60" label="mdb"/>
+  <int value="61" label="mde"/>
+  <int value="62" label="mdt"/>
+  <int value="63" label="mdw"/>
+  <int value="64" label="mdz"/>
+  <int value="65" label="mht"/>
+  <int value="66" label="mhtml"/>
+  <int value="67" label="mmc"/>
+  <int value="68" label="mof"/>
+  <int value="69" label="msc"/>
+  <int value="70" label="msh"/>
+  <int value="71" label="mshxml"/>
+  <int value="72" label="msi"/>
+  <int value="73" label="msp"/>
+  <int value="74" label="mst"/>
+  <int value="75" label="ocx"/>
+  <int value="76" label="ops"/>
+  <int value="77" label="pcd"/>
+  <int value="78" label="pif"/>
+  <int value="79" label="pkg"/>
+  <int value="80" label="pl"/>
+  <int value="81" label="plg"/>
+  <int value="82" label="prf"/>
+  <int value="83" label="prg"/>
+  <int value="84" label="pst"/>
+  <int value="85" label="py"/>
+  <int value="86" label="pyc"/>
+  <int value="87" label="pyw"/>
+  <int value="88" label="rb"/>
+  <int value="89" label="reg"/>
+  <int value="90" label="rpm"/>
+  <int value="91" label="scf"/>
+  <int value="92" label="scr"/>
+  <int value="93" label="sct"/>
+  <int value="94" label="sh"/>
+  <int value="95" label="shar"/>
+  <int value="96" label="shb"/>
+  <int value="97" label="shs"/>
+  <int value="98" label="shtm"/>
+  <int value="99" label="shtml"/>
+  <int value="100" label="spl"/>
+  <int value="101" label="svg"/>
+  <int value="102" label="swf"/>
+  <int value="103" label="sys"/>
+  <int value="104" label="tcsh"/>
+  <int value="105" label="url"/>
+  <int value="106" label="vb"/>
+  <int value="107" label="vbe"/>
+  <int value="108" label="vbs"/>
+  <int value="109" label="vsd"/>
+  <int value="110" label="vsmacros"/>
+  <int value="111" label="vss"/>
+  <int value="112" label="vst"/>
+  <int value="113" label="vsw"/>
+  <int value="114" label="ws"/>
+  <int value="115" label="wsc"/>
+  <int value="116" label="wsf"/>
+  <int value="117" label="wsh"/>
+  <int value="118" label="xbap"/>
+  <int value="119" label="xht"/>
+  <int value="120" label="xhtm"/>
+  <int value="121" label="xhtml"/>
+  <int value="122" label="xml"/>
+  <int value="123" label="xsl"/>
+  <int value="124" label="xslt"/>
+  <int value="125" label="website"/>
+  <int value="126" label="msh1"/>
+  <int value="127" label="msh2"/>
+  <int value="128" label="msh1xml"/>
+  <int value="129" label="msh2xml"/>
+  <int value="130" label="ps1"/>
+  <int value="131" label="ps1xml"/>
+  <int value="132" label="ps2"/>
+  <int value="133" label="ps2xml"/>
+  <int value="134" label="psc1"/>
+  <int value="135" label="psc2"/>
+  <int value="136" label="xnk"/>
+  <int value="137" label="appref-ms"/>
+  <int value="138" label="gadget"/>
+  <int value="139" label="efi"/>
+  <int value="140" label="fon"/>
+  <int value="141" label="partial"/>
+  <int value="142" label="svg"/>
+  <int value="143" label="xml"/>
+  <int value="144" label="xrm_ms"/>
+  <int value="145" label="xsl"/>
+  <int value="146" label="action"/>
+  <int value="147" label="bin"/>
+  <int value="148" label="inx"/>
+  <int value="149" label="ipa"/>
+  <int value="150" label="isu"/>
+  <int value="151" label="job"/>
+  <int value="152" label="out"/>
+  <int value="153" label="pad"/>
+  <int value="154" label="paf"/>
+  <int value="155" label="rgs"/>
+  <int value="156" label="u3p"/>
+  <int value="157" label="vbscript"/>
+  <int value="158" label="workflow"/>
+  <int value="159" label="001"/>
+  <int value="160" label="7z"/>
+  <int value="161" label="ace"/>
+  <int value="162" label="arc"/>
+  <int value="163" label="arj"/>
+  <int value="164" label="b64"/>
+  <int value="165" label="balz"/>
+  <int value="166" label="bhx"/>
+  <int value="167" label="bz"/>
+  <int value="168" label="bz2"/>
+  <int value="169" label="bzip2"/>
+  <int value="170" label="cab"/>
+  <int value="171" label="cpio"/>
+  <int value="172" label="fat"/>
+  <int value="173" label="gz"/>
+  <int value="174" label="gzip"/>
+  <int value="175" label="hfs"/>
+  <int value="176" label="hqx"/>
+  <int value="177" label="iso"/>
+  <int value="178" label="lha"/>
+  <int value="179" label="lpaq1"/>
+  <int value="180" label="lpaq5"/>
+  <int value="181" label="lpaq8"/>
+  <int value="182" label="lzh"/>
+  <int value="183" label="lzma"/>
+  <int value="184" label="mim"/>
+  <int value="185" label="ntfs"/>
+  <int value="186" label="paq8f"/>
+  <int value="187" label="paq8jd"/>
+  <int value="188" label="paq8l"/>
+  <int value="189" label="paq8o"/>
+  <int value="190" label="pea"/>
+  <int value="191" label="quad"/>
+  <int value="192" label="r00"/>
+  <int value="193" label="r01"/>
+  <int value="194" label="r02"/>
+  <int value="195" label="r03"/>
+  <int value="196" label="r04"/>
+  <int value="197" label="r05"/>
+  <int value="198" label="r06"/>
+  <int value="199" label="r07"/>
+  <int value="200" label="r08"/>
+  <int value="201" label="r09"/>
+  <int value="202" label="r10"/>
+  <int value="203" label="r11"/>
+  <int value="204" label="r12"/>
+  <int value="205" label="r13"/>
+  <int value="206" label="r14"/>
+  <int value="207" label="r15"/>
+  <int value="208" label="r16"/>
+  <int value="209" label="r17"/>
+  <int value="210" label="r18"/>
+  <int value="211" label="r19"/>
+  <int value="212" label="r20"/>
+  <int value="213" label="r21"/>
+  <int value="214" label="r22"/>
+  <int value="215" label="r23"/>
+  <int value="216" label="r24"/>
+  <int value="217" label="r25"/>
+  <int value="218" label="r26"/>
+  <int value="219" label="r27"/>
+  <int value="220" label="r28"/>
+  <int value="221" label="r29"/>
+  <int value="222" label="rar"/>
+  <int value="223" label="squashfs"/>
+  <int value="224" label="swm"/>
+  <int value="225" label="tar"/>
+  <int value="226" label="taz"/>
+  <int value="227" label="tbz"/>
+  <int value="228" label="tbz2"/>
+  <int value="229" label="tgz"/>
+  <int value="230" label="tpz"/>
+  <int value="231" label="txz"/>
+  <int value="232" label="tz"/>
+  <int value="233" label="udf"/>
+  <int value="234" label="uu"/>
+  <int value="235" label="uue"/>
+  <int value="236" label="vhd"/>
+  <int value="237" label="vmdk"/>
+  <int value="238" label="wim"/>
+  <int value="239" label="wrc"/>
+  <int value="240" label="xar"/>
+  <int value="241" label="xxe"/>
+  <int value="242" label="xz"/>
+  <int value="243" label="z"/>
+  <int value="244" label="zip"/>
+  <int value="245" label="zipx"/>
+  <int value="246" label="zpaq"/>
+  <int value="247" label="cdr"/>
+  <int value="248" label="dart"/>
+  <int value="249" label="dc42"/>
+  <int value="250" label="diskcopy42"/>
+  <int value="251" label="dmg"/>
+  <int value="252" label="dmgpart"/>
+  <int value="253" label="dvdr"/>
+  <int value="254" label="img"/>
+  <int value="255" label="imgpart"/>
+  <int value="256" label="ndif"/>
+  <int value="257" label="smi"/>
+  <int value="258" label="sparsebundle"/>
+  <int value="259" label="sparseimage"/>
+  <int value="260" label="toast"/>
+  <int value="261" label="udif"/>
+  <int value="262" label="run"/>
+  <int value="263" label="ad"/>
+</enum>
+
+<enum name="DownloadItem.DangerType" type="int">
+  <int value="0" label="NOT_DANGEROUS"/>
+  <int value="1" label="DANGEROUS_FILE"/>
+  <int value="2" label="DANGEROUS_URL"/>
+  <int value="3" label="DANGEROUS_CONTENT"/>
+  <int value="4" label="MAYBE_DANGEROUS_CONTENT"/>
+  <int value="5" label="UNCOMMON_CONTENT"/>
+  <int value="6" label="USER_VALIDATED"/>
+  <int value="7" label="DANGEROUS_HOST"/>
+  <int value="8" label="POTENTIALLY_UNWANTED"/>
+</enum>
+
+<enum name="DownloadOpenMethod" type="int">
+  <int value="0" label="Opened with plaform handler by default"/>
+  <int value="1" label="Opened in browser by default"/>
+  <int value="2" label="Opened with plaform handler by user choice"/>
+</enum>
+
+<enum name="DownloadOriginStateOnResumption" type="int">
+  <int value="0" label="No changes"/>
+  <int value="1" label="New redirects"/>
+  <int value="2" label="New validators"/>
+  <int value="3" label="New redirects + validators"/>
+  <int value="4" label="New Content-Disposition"/>
+  <int value="5" label="New redirects + Content-Disposition"/>
+  <int value="6" label="New validators + Content-Disposition"/>
+  <int value="7" label="New redirects + validators + Content-Disposition"/>
+</enum>
+
+<enum name="DownloadPassKitResult" type="int">
+  <int value="0" label="Successful"/>
+  <int value="1" label="Other Failure"/>
+  <int value="2" label="Unauthorized Failure"/>
+  <int value="3" label="Wrong MIME Type Failure"/>
+</enum>
+
+<enum name="DownloadSavePackageEvent" type="int">
+  <int value="0" label="Started"/>
+  <int value="1" label="Cancelled"/>
+  <int value="2" label="Finished"/>
+  <int value="3" label="Write to already completed file"/>
+  <int value="4" label="Write to already failed file"/>
+</enum>
+
+<enum name="DownloadSource" type="int">
+  <int value="0" label="Initiated by Save Package on Non-HTML content"/>
+  <int value="1" label="Initiated by Drag-and-drop"/>
+  <int value="2" label="Initiated by RPC from Renderer"/>
+  <int value="3" label="Initiated by Save from Pepper"/>
+  <int value="4"
+      label="Initiated by Resumption, manual or automatic (Deprecated)"/>
+  <int value="5" label="Initiated by Manual Resumption"/>
+  <int value="6" label="Initiated by Automatic Resumption"/>
+</enum>
+
+<enum name="DragDropEventSource" type="int">
+  <int value="0" label="Mouse"/>
+  <int value="1" label="Touch"/>
+</enum>
+
+<enum name="DriveApiErrorCode" type="int">
+<!-- Generated from google_apis/drive/drive_api_error_codes.h -->
+
+  <int value="200" label="HTTP_SUCCESS"/>
+  <int value="201" label="HTTP_CREATED"/>
+  <int value="204" label="HTTP_NO_CONTENT"/>
+  <int value="302" label="HTTP_FOUND"/>
+  <int value="304" label="HTTP_NOT_MODIFIED"/>
+  <int value="308" label="HTTP_RESUME_INCOMPLETE"/>
+  <int value="400" label="HTTP_BAD_REQUEST"/>
+  <int value="401" label="HTTP_UNAUTHORIZED"/>
+  <int value="403" label="HTTP_FORBIDDEN"/>
+  <int value="404" label="HTTP_NOT_FOUND"/>
+  <int value="409" label="HTTP_CONFLICT"/>
+  <int value="410" label="HTTP_GONE"/>
+  <int value="411" label="HTTP_LENGTH_REQUIRED"/>
+  <int value="412" label="HTTP_PRECONDITION"/>
+  <int value="500" label="HTTP_INTERNAL_SERVER_ERROR"/>
+  <int value="501" label="HTTP_NOT_IMPLEMENTED"/>
+  <int value="502" label="HTTP_BAD_GATEWAY"/>
+  <int value="503" label="HTTP_SERVICE_UNAVAILABLE"/>
+  <int value="1000" label="DRIVE_PARSE_ERROR"/>
+  <int value="1001" label="DRIVE_FILE_ERROR"/>
+  <int value="1002" label="DRIVE_CANCELLED"/>
+  <int value="1003" label="DRIVE_OTHER_ERROR"/>
+  <int value="1004" label="DRIVE_NO_CONNECTION"/>
+  <int value="1005" label="DRIVE_NOT_READY"/>
+  <int value="1006" label="DRIVE_NO_SPACE"/>
+  <int value="1007" label="DRIVE_RESPONSE_TOO_LARGE"/>
+</enum>
+
+<enum name="DriveCacheDBOpenStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Corrupt database"/>
+  <int value="2" label="Unknown recoverable failure"/>
+  <int value="3" label="Unrecoverable (disk full?) failure"/>
+</enum>
+
+<enum name="DriveEntryKind" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Item"/>
+  <int value="2" label="Site"/>
+  <int value="3" label="Document"/>
+  <int value="4" label="Spereadsheet"/>
+  <int value="5" label="Presentation"/>
+  <int value="6" label="Drawing"/>
+  <int value="7" label="Table"/>
+  <int value="8" label="External app"/>
+  <int value="9" label="Folder"/>
+  <int value="10" label="File"/>
+  <int value="11" label="PDF"/>
+</enum>
+
+<enum name="DriveFileFormat" type="int">
+  <int value="0" label="AAC"/>
+  <int value="1" label="ASF"/>
+  <int value="2" label="AVI"/>
+  <int value="3" label="CSV"/>
+  <int value="4" label="DOC"/>
+  <int value="5" label="DOCX"/>
+  <int value="6" label="FLV"/>
+  <int value="7" label="JPG"/>
+  <int value="8" label="MJPG"/>
+  <int value="9" label="MOV"/>
+  <int value="10" label="MP3"/>
+  <int value="11" label="MP4"/>
+  <int value="12" label="MPG"/>
+  <int value="13" label="OTHER"/>
+  <int value="14" label="PDF"/>
+  <int value="15" label="PPT"/>
+  <int value="16" label="PPTX"/>
+  <int value="17" label="PSD"/>
+  <int value="18" label="RAR"/>
+  <int value="19" label="WMA"/>
+  <int value="20" label="WMV"/>
+  <int value="21" label="XLS"/>
+  <int value="22" label="XLSX"/>
+  <int value="23" label="ZIP"/>
+</enum>
+
+<enum name="DriveMetadataDBInitStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Not found"/>
+  <int value="2" label="Corruption"/>
+  <int value="3" label="IO error"/>
+  <int value="4" label="Failed to open DB for unknown reason"/>
+  <int value="5" label="Incompatible DB format"/>
+  <int value="6" label="DB is broken"/>
+  <int value="7" label="Opened existing DB."/>
+  <int value="8" label="No existing DB was found. Created new DB."/>
+  <int value="9" label="Cannot open existing DB. Created new DB."/>
+</enum>
+
+<enum name="DriveMetadataDBValidityCheckFailureReason" type="int">
+  <int value="0" label="Invalid header"/>
+  <int value="1" label="Broken ID entry"/>
+  <int value="2" label="Broken entry"/>
+  <int value="3" label="Invalid local ID"/>
+  <int value="4" label="Invalid parent ID"/>
+  <int value="5" label="Broken child map"/>
+  <int value="6" label="Child entry count mismatch"/>
+  <int value="7" label="Iterator error"/>
+</enum>
+
+<enum name="DriveUploadProtocol" type="int">
+  <int value="0" label="Resumable"/>
+  <int value="1" label="Multipart"/>
+  <int value="2" label="Batch"/>
+</enum>
+
+<enum name="DTLS_SRTPCryptoSuite" type="int">
+  <summary>
+    DTLS/SRTP crypto suites from the IANA registry as specified at
+    https://tools.ietf.org/html/rfc5764#section-4.1.2
+  </summary>
+  <int value="1" label="SRTP_AES128_CM_SHA1_80"/>
+  <int value="2" label="SRTP_AES128_CM_SHA1_32"/>
+  <int value="5" label="SRTP_NULL_SHA1_80"/>
+  <int value="6" label="SRTP_NULL_SHA1_32"/>
+</enum>
+
+<enum name="DtlsHandshakeError" type="int">
+  <int value="0" label="Incompatible cipher suite"/>
+  <int value="1" label="Unknown error"/>
+</enum>
+
+<enum name="DumpOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+  <int value="2" label="Unknown"/>
+</enum>
+
+<enum name="EAPInnerProtocol" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="NONE"/>
+  <int value="2" label="PEAP-MD5"/>
+  <int value="3" label="PEAP-MSCHAPV2"/>
+  <int value="4" label="TTLS-EAP-MD5"/>
+  <int value="5" label="TTLS-EAP-MSCHAPV2"/>
+  <int value="6" label="TTLS-MSCHAPV2"/>
+  <int value="7" label="TTLS-MSCHAP"/>
+  <int value="8" label="TTLS-PAP"/>
+  <int value="9" label="TTLS-CHAP"/>
+</enum>
+
+<enum name="EAPOuterProtocol" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="LEAP"/>
+  <int value="2" label="PEAP"/>
+  <int value="3" label="TLS"/>
+  <int value="4" label="TTLS"/>
+</enum>
+
+<enum name="EasyUnlockAuthEvent" type="int">
+  <int value="0" label="Smart Lock success"/>
+  <int value="1" label="Smart Lock failure"/>
+  <int value="2" label="Password entry: No pairing"/>
+  <int value="3" label="Password entry: Pairing changed"/>
+  <int value="4" label="Password entry: User hardlock"/>
+  <int value="5" label="Password entry: Service not active"/>
+  <int value="6" label="Password entry: No Bluetooth"/>
+  <int value="7" label="Password entry: Bluetooth connecting"/>
+  <int value="8" label="Password entry: No phone"/>
+  <int value="9" label="Password entry: Phone not authenticated"/>
+  <int value="10" label="Password entry: Phone locked"/>
+  <int value="11" label="Password entry: Phone not lockable"/>
+  <int value="12" label="Password entry: RSSI too low"/>
+  <int value="13" label="Password entry: Phone not supported"/>
+  <int value="14" label="Password entry: Phone authenticated"/>
+  <int value="15" label="Password entry: Tx power too high"/>
+  <int value="16" label="Password entry: Easy sign-in failed"/>
+  <int value="17" label="Password entry: Pairing added"/>
+  <int value="18" label="Password entry: No screenlock state handler"/>
+  <int value="19" label="Password entry: Phone locked and tx power too high"/>
+</enum>
+
+<enum name="EasyUnlockBluetoothType" type="int">
+  <int value="0" label="No adapter"/>
+  <int value="1" label="Normal"/>
+  <int value="2" label="Low energy"/>
+</enum>
+
+<enum name="EasyUnlockButton" type="int">
+  <int value="0" label="Setup app launches"/>
+  <int value="1" label="Find device"/>
+  <int value="2" label="Pair device"/>
+  <int value="3" label="Try out"/>
+  <int value="4" label="Enable"/>
+  <int value="5" label="Disable"/>
+  <int value="6" label="Dismiss ('done')"/>
+</enum>
+
+<enum name="EasyUnlockDeviceIneligibilityReason" type="int">
+  <int value="0" label="Unrecognized reason">
+    The server reported a reason that the client is not aware of. This should
+    only be recorded if the client's list of possible reasons is out of date.
+  </int>
+  <int value="1" label="Unknown">
+    The server returned the value &quot;Unknown&quot;.
+  </int>
+  <int value="2" label="Screen too large"/>
+  <int value="3" label="Phone lacks Bluetooth"/>
+  <int value="4" label="Bad OS version"/>
+  <int value="5" label="Bad software version (GMS Core)"/>
+  <int value="6" label="Auto unlocking not supported"/>
+  <int value="7" label="Invalid credentials"/>
+  <int value="8" label="Device offline"/>
+  <int value="9" label="No recent updates"/>
+</enum>
+
+<enum name="EasyUnlockDeviceModelHash" type="int">
+  <int value="-1829584143" label="Motorola XT1097"/>
+  <int value="-1429808627" label="HTC One"/>
+  <int value="-1168032746" label="Motorola Nexus 6"/>
+  <int value="-617422855" label="LGE Nexus 4"/>
+  <int value="684891985" label="Motorola Moto X"/>
+  <int value="1286382027" label="Motorola XT1095"/>
+  <int value="1412446710" label="Motorola XT1096"/>
+  <int value="1881443083" label="LGE Nexus 5"/>
+</enum>
+
+<enum name="EasyUnlockDidUserManuallyUnlockPhone" type="int">
+  <int value="0" label="Never locked"/>
+  <int value="1" label="Manually unlocked"/>
+</enum>
+
+<enum name="EasyUnlockHasSecureScreenLock" type="int">
+  <int value="0" label="Lacks secure screen lock"/>
+  <int value="1" label="Has secure screen lock"/>
+</enum>
+
+<enum name="EasyUnlockHasTrustAgentEnabled" type="int">
+  <int value="0" label="No trust agents enabled"/>
+  <int value="1" label="1+ trust agents enabled"/>
+</enum>
+
+<enum name="EasyUnlockNotificationEvent" type="int">
+  <int value="0" label="Set up notification shown"/>
+  <int value="1" label="Set up notification clicked"/>
+  <int value="2" label="Try out notification shown"/>
+  <int value="3" label="Try out notification clicked"/>
+</enum>
+
+<enum name="EasyUnlockPromoNotificationEvent" type="int">
+  <int value="0" label="Promo notification shown"/>
+  <int value="1" label="Promo notification clicked"/>
+  <int value="2" label="Promo notification dismissed"/>
+  <int value="3" label="Setup app launched"/>
+  <int value="4" label="Setup completed successfully"/>
+</enum>
+
+<enum name="EasyUnlockRemoteLockScreenState" type="int">
+  <int value="0" label="Unknown state"/>
+  <int value="1" label="Lock screen disabled, trust agent unsupported"/>
+  <int value="2" label="Lock screen disabled, trust agent disabled"/>
+  <int value="3" label="Lock screen disabled, trust agent enabled"/>
+  <int value="4" label="Lock screen enabled, trust agent unsupported"/>
+  <int value="5" label="Lock screen enabled, trust agent disabled"/>
+  <int value="6" label="Lock screen enabled, trust agent enabled"/>
+</enum>
+
+<enum name="EasyUnlockSetupState" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Scan (initial)"/>
+  <int value="2" label="Scan (in progress)"/>
+  <int value="3" label="Scan (error)"/>
+  <int value="4" label="Pairing (initial)"/>
+  <int value="5" label="Pairing (in progress)"/>
+  <int value="6" label="Pairing (error)"/>
+  <int value="7" label="Help"/>
+</enum>
+
+<enum name="EasyUnlockTrialRunEvents" type="int">
+  <int value="0" label="Trial run launched"/>
+  <int value="1" label="User clicked lock icon"/>
+</enum>
+
+<enum name="EasyUnlockUnlockEvent" type="int">
+  <int value="0" label="Screen unlocked (total)"/>
+  <int value="1" label="Screen unlocked (via EasyUnlock)"/>
+</enum>
+
+<enum name="ECDHECurves" type="int">
+  <int value="21" label="P-224"/>
+  <int value="23" label="P-256"/>
+  <int value="24" label="P-384"/>
+  <int value="25" label="P-521"/>
+  <int value="29" label="X25519"/>
+</enum>
+
+<enum name="EGLDisplayType" type="int">
+  <int value="0" label="Default"/>
+  <int value="1" label="SwiftShader"/>
+  <int value="2" label="ANGLE WARP"/>
+  <int value="3" label="ANGLE D3D9"/>
+  <int value="4" label="ANGLE D3D11"/>
+  <int value="5" label="ANGLE OpenGL"/>
+  <int value="6" label="ANGLE OpenGL ES"/>
+</enum>
+
+<enum name="EmbeddedWorkerStartingPhase" type="int">
+  <int value="0" label="NOT_STARTING"/>
+  <int value="1" label="ALLOCATING_PROCESS"/>
+  <int value="2" label="REGISTERING_TO_DEVTOOLS"/>
+  <int value="3" label="SENT_START_WORKER"/>
+  <int value="4" label="SCRIPT_DOWNLOADING"/>
+  <int value="5" label="SCRIPT_LOADED"/>
+  <int value="6" label="SCRIPT_EVALUATED"/>
+  <int value="7" label="THREAD_STARTED"/>
+  <int value="8" label="SCRIPT_READ_STARTED"/>
+  <int value="9" label="SCRIPT_READ_FINISHED"/>
+</enum>
+
+<enum name="EncodingMethod" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="Big5"/>
+  <int value="2" label="EUC-JP"/>
+  <int value="3" label="EUC-KR"/>
+  <int value="4" label="GBK"/>
+  <int value="5" label="IBM866"/>
+  <int value="6" label="ISO-2022-JP"/>
+  <int value="7" label="ISO-8859-10"/>
+  <int value="8" label="ISO-8859-13"/>
+  <int value="9" label="ISO-8859-14"/>
+  <int value="10" label="ISO-8859-15"/>
+  <int value="11" label="ISO-8859-16"/>
+  <int value="12" label="ISO-8859-2"/>
+  <int value="13" label="ISO-8859-3"/>
+  <int value="14" label="ISO-8859-4"/>
+  <int value="15" label="ISO-8859-5"/>
+  <int value="16" label="ISO-8859-6"/>
+  <int value="17" label="ISO-8859-7"/>
+  <int value="18" label="ISO-8859-8"/>
+  <int value="19" label="ISO-8859-8-I"/>
+  <int value="20" label="KOI8-R"/>
+  <int value="21" label="KOI8-U"/>
+  <int value="22" label="Shift_JIS"/>
+  <int value="23" label="UTF-16LE"/>
+  <int value="24" label="UTF-8"/>
+  <int value="25" label="gb18030"/>
+  <int value="26" label="macintosh"/>
+  <int value="27" label="windows-1250"/>
+  <int value="28" label="windows-1251"/>
+  <int value="29" label="windows-1252"/>
+  <int value="30" label="windows-1253"/>
+  <int value="31" label="windows-1254"/>
+  <int value="32" label="windows-1255"/>
+  <int value="33" label="windows-1256"/>
+  <int value="34" label="windows-1257"/>
+  <int value="35" label="windows-1258"/>
+  <int value="36" label="windows-874"/>
+</enum>
+
+<enum name="EnhancedBookmarkViewMode" type="int">
+  <obsolete>
+    Deprecated 9/2015.
+  </obsolete>
+  <int value="0" label="Default view mode"/>
+  <int value="1" label="List view mode"/>
+  <int value="2" label="Grid view mode"/>
+</enum>
+
+<enum name="EnrollmentStatus" type="int">
+  <int value="0" label="Non-managed"/>
+  <int value="1" label="Managed EDU (Deprecated)"/>
+  <int value="2" label="Managed"/>
+  <int value="3" label="Error"/>
+</enum>
+
+<enum name="EnterpriseAttributesTPMConsistencyType" type="int">
+  <int value="0" label="no attributes, other mode, TPM unlocked">
+    valid: machine in pristine state
+  </int>
+  <int value="1" label="locked attributes, other mode, TPM unlocked">
+    rare: install attributes locked but TPM clear (could happen if taking TPM
+    ownership carries over a reboot)
+  </int>
+  <int value="2" label="no attributes, enterprise mode, TPM unlocked">
+    impossible: non-existent install attributes cannot yield enterprise mode
+  </int>
+  <int value="3" label="locked attributes, enterprise mode, TPM unlocked">
+    rare: install attributes locked but TPM clear (could happen if taking TPM
+    ownership carries over a reboot)
+  </int>
+  <int value="4" label="no attributes, other mode, TPM locked">
+    inconsistent: install attributes clear but TPM locked
+  </int>
+  <int value="5" label="locked attributes, other mode, TPM locked">
+    valid: consumer owned
+  </int>
+  <int value="6" label="no attributes, enterprise mode, TPM locked">
+    impossible: non-existent install attributes cannot yield enterprise mode
+  </int>
+  <int value="7" label="locked attributes, enterprise mode, TPM locked">
+    valid: enterprise enrolled
+  </int>
+  <int value="8" label="TPM unreachable">error: cryptohomed unreachable</int>
+</enum>
+
+<enum name="EnterpriseCheckError" type="int">
+  <summary>
+    Defined as DomainCheckErrors in
+    components/policy/core/common/policy_loader_win.cc.
+  </summary>
+  <int value="0" label="Cound not get net join info."/>
+  <int value="1" label="Cound not bind to domain controller."/>
+</enum>
+
+<enum name="EnterpriseDeviceManagementStatus" type="int">
+  <summary>
+    Status codes produced by DeviceManagementService for requests made to the
+    device management server as defined in
+    components/policy/core/common/cloud/cloud_policy_constants.h.
+  </summary>
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="REQUEST_INVALID"/>
+  <int value="2" label="REQUEST_FAILED"/>
+  <int value="3" label="TEMPORARY_UNAVAILABLE"/>
+  <int value="4" label="HTTP_STATUS_ERROR"/>
+  <int value="5" label="RESPONSE_DECODING_ERROR"/>
+  <int value="6" label="SERVICE_MANAGEMENT_NOT_SUPPORTED"/>
+  <int value="7" label="SERVICE_DEVICE_NOT_FOUND"/>
+  <int value="8" label="SERVICE_MANAGEMENT_TOKEN_INVALID"/>
+  <int value="9" label="SERVICE_ACTIVATION_PENDING"/>
+  <int value="10" label="SERVICE_INVALID_SERIAL_NUMBER"/>
+  <int value="11" label="SERVICE_DEVICE_ID_CONFLICT"/>
+  <int value="12" label="SERVICE_MISSING_LICENSES"/>
+  <int value="13" label="SERVICE_DEPROVISIONED"/>
+  <int value="14" label="SERVICE_DOMAIN_MISMATCH"/>
+  <int value="902" label="SERVICE_POLICY_NOT_FOUND"/>
+</enum>
+
+<enum name="EnterpriseDMServerRequestSuccess" type="int">
+  <summary>
+    Number of DeviceManagementServer request retries as defined in
+    components/policy/core/common/cloud/device_management_service.cc.
+  </summary>
+  <int value="0" label="No retries"/>
+  <int value="1" label="1 retry"/>
+  <int value="2" label="2 retries"/>
+  <int value="3" label="3 retries"/>
+  <int value="10" label="Request failed"/>
+  <int value="11" label="Server returned error"/>
+</enum>
+
+<enum name="EnterpriseDMTokenType" type="int">
+  <summary>
+    Result of DMToken operations as defined in
+    components/policy/core/common/cloud/enterprise_metrics.h.
+  </summary>
+  <int value="0" label="Load Succeeded">
+    A cached token was successfully loaded from disk.
+  </int>
+  <int value="1" label="Load Failed">
+    Reading a cached token from disk failed.
+  </int>
+  <int value="2" label="Fetch Requested">
+    A token fetch request was sent to the DM server.
+  </int>
+  <int value="3" label="Fetch Request Failed">
+    The request was invalid, or the HTTP request failed.
+  </int>
+  <int value="4" label="Fetch Server Failed">
+    Error HTTP status received, or the DM server failed in another way.
+  </int>
+  <int value="5" label="Fetch Response Received">
+    A response to the fetch request was received.
+  </int>
+  <int value="6" label="Fetch Bad Response">
+    The response received was invalid. This happens when some expected data was
+    not present in the response.
+  </int>
+  <int value="7" label="Fetch Management Not Supported">
+    DM server reported that management is not supported.
+  </int>
+  <int value="8" label="Fetch Device Not Found">
+    DM server reported that the given device ID was not found.
+  </int>
+  <int value="9" label="Fetch OK">DM token successfully retrieved.</int>
+  <int value="10" label="Store Succeeded">
+    Successfully cached a token to disk.
+  </int>
+  <int value="11" label="Store Failed">Caching a token to disk failed.</int>
+  <int value="12" label="Device ID Conflict">The Device-ID is not unique.</int>
+  <int value="13" label="Invalid Serial">
+    Serial number rejected by DMServer.
+  </int>
+  <int value="14" label="Missing Licenses">
+    No more licenses available for that domain.
+  </int>
+</enum>
+
+<enum name="EnterpriseDomainRegex" type="int">
+  <summary>Which domain regex generated an ICU error.</summary>
+  <int value="0" label="aol"/>
+  <int value="1" label="googlemail"/>
+  <int value="2" label="gmail"/>
+  <int value="3" label="hotmail"/>
+  <int value="4" label="live"/>
+  <int value="5" label="mail.ru"/>
+  <int value="6" label="msn"/>
+  <int value="7" label="qq"/>
+  <int value="8" label="yahoo"/>
+  <int value="9" label="yandex"/>
+</enum>
+
+<enum name="EnterpriseEnrollmentType" type="int">
+  <summary>
+    Result of device enrollment as defined in
+    components/policy/core/common/cloud/enterprise_metrics.h.
+  </summary>
+  <int value="0" label="Cancelled">
+    User pressed 'Cancel' during the enrollment process.
+  </int>
+  <int value="1" label="Started with valid credentials">
+    The user submitted valid credentials (GAIA or registration certificate) to
+    start the enrollment process.
+  </int>
+  <int value="2" label="OAuth fetch: network failed">
+    OAuth token fetch failed: network error.
+  </int>
+  <int value="3" label="Login Failed">
+    OAuth token fetch failed: login error.
+  </int>
+  <int value="4" label="Not Supported">
+    Registration / policy fetch failed: DM server reports management not
+    supported.
+  </int>
+  <int value="5" label="Policy Failed (unused)">
+    UNUSED: Enrollment failed because it failed to apply device policy.
+  </int>
+  <int value="6" label="Other Failed (unused)">
+    UNUSED: Enrollment failed due to an unexpected error. This currently happens
+    when the GAIA auth token is not issued for the DM service, the device cloud
+    policy subsystem isn't initialized, or when fetching GAIA tokens fails for
+    an unknown reason.
+  </int>
+  <int value="7" label="OK">Enrollment was successful.</int>
+  <int value="8" label="Registration/fetch: invalid Serial">
+    Registration / policy fetch failed: DM server reports that the serial number
+    we try to register is not assigned to the domain used.
+  </int>
+  <int value="9" label="Auto-enrollment Started (unused)">
+    UNUSED: Auto-enrollment started automatically after sign-in.
+  </int>
+  <int value="10" label="Auto-enrollment Failed (unused)">
+    UNUSED: Auto-enrollment failed.
+  </int>
+  <int value="11" label="Auto-enrollment Restarted (unused)">
+    UNUSED: Auto-enrollment started again after a failure.
+  </int>
+  <int value="12" label="Auto-enrollment Cancelled (unused)">
+    UNUSED: User opted-out of auto-enrollment.
+  </int>
+  <int value="13" label="Auto-enrollment OK (unused)">
+    UNUSED: Auto-enrollment OK.
+  </int>
+  <int value="14" label="Invalid enrollment mode">
+    Registration failed: DM server returns unknown/disallowed enrollment mode.
+  </int>
+  <int value="15" label="Auto-enrollment not supported (unused)">
+    UNUSED: Auto-enrollment is not supported for the mode supplied by the
+    server.  This presently means trying to auto-enroll in kiosk mode.
+  </int>
+  <int value="16" label="Install attributes timeout">
+    Lockbox initialization took too long to complete.
+  </int>
+  <int value="17" label="Lockbox domain mismatch on re-enrollment">
+    Lockbox error on re-enrollment: domain does not match install attributes.
+  </int>
+  <int value="18" label="Registration/fetch: missing licenses">
+    Registration / policy fetch failed: DM server reports licenses expired or
+    exhausted.
+  </int>
+  <int value="19" label="Robot auth code fetch failed">
+    Failed to fetch device robot authorization code from DM Server.
+  </int>
+  <int value="20" label="Robot refresh token fetch failed">
+    Failed to fetch device robot refresh token from GAIA.
+  </int>
+  <int value="21" label="Robot refresh token store failed">
+    Failed to persist robot account refresh token on device.
+  </int>
+  <int value="22" label="Registration/fetch: deprovisioned device">
+    Registration / policy fetch failed: DM server reports administrator
+    deprovisioned the device.
+  </int>
+  <int value="23" label="Registration/fetch: domain mismatch">
+    Registration / policy fetch failed: DM server reports domain mismatch.
+  </int>
+  <int value="24" label="Triggered">
+    Enrollment has been triggered, the webui login screen has been shown.
+  </int>
+  <int value="25" label="Restarted with valid credentials">
+    The user submitted valid credentials (GAIA or registration certificate) to
+    start the enrollment process for the second (or further) time.
+  </int>
+  <int value="26" label="Store token and ID failed">
+    Failed to store DM token and device ID.
+  </int>
+  <int value="27" label="Error getting FRE state keys">
+    Failed to obtain FRE state keys.
+  </int>
+  <int value="28" label="Error validating policy">
+    Failed to validate policy.
+  </int>
+  <int value="29" label="Error in CloudPolicyStore">
+    Failed due to error in CloudPolicyStore.
+  </int>
+  <int value="30" label="Error locking device (unused)">
+    UNUSED: Failed to lock device.
+  </int>
+  <int value="31" label="Registration/fetch: request payload invalid">
+    Registration / policy fetch failed: DM server reports invalid request
+    payload.
+  </int>
+  <int value="32" label="Registration/fetch: device not found">
+    Registration / policy fetch failed: DM server reports device not found.
+  </int>
+  <int value="33" label="Registration/fetch: DM token invalid">
+    Registration / policy fetch failed: DM server reports DM token invalid.
+  </int>
+  <int value="34" label="Registration/fetch: activation pending">
+    Registration / policy fetch failed: DM server reports activation pending.
+  </int>
+  <int value="35" label="Registration/fetch: device ID conflict">
+    Registration / policy fetch failed: DM server reports device ID conflict.
+  </int>
+  <int value="36" label="Registration/fetch: policy not found">
+    Registration / policy fetch failed: DM server can't find policy.
+  </int>
+  <int value="37" label="Registration/fetch: HTTP request failed">
+    Registration / policy fetch failed: HTTP request failed.
+  </int>
+  <int value="38" label="Registration/fetch: temporary unavailable">
+    Registration / policy fetch failed: DM server reports temporary problem.
+  </int>
+  <int value="39" label="Registration/fetch: HTTP error response">
+    Registration / policy fetch failed: DM server returns non-success HTTP
+    status code.
+  </int>
+  <int value="40" label="Registration/fetch: invalid response">
+    Registration / policy fetch failed: can't decode DM server response.
+  </int>
+  <int value="41" label="OAuth fetch: account not signed up">
+    OAuth token fetch failed: account not signed up.
+  </int>
+  <int value="42" label="OAuth fetch: account deleted">
+    OAuth token fetch failed: account deleted.
+  </int>
+  <int value="43" label="OAuth fetch: account disabled">
+    OAuth token fetch failed: account disabled.
+  </int>
+  <int value="44" label="Re-enrollment: pre-check domain mismatch">
+    Re-enrollment pre-check failed: domain does not match install attributes.
+  </int>
+  <int value="45" label="Lockbox initialization failed">
+    Lockbox backend failed to initialize.
+  </int>
+  <int value="46" label="Lockbox already locked">
+    Lockbox backend (TPM) already locked.
+  </int>
+  <int value="47" label="Lockbox set attribute failed">
+    Lockbox failure setting attributes.
+  </int>
+  <int value="48" label="Lockbox locking failed">
+    Lockbox failure during locking.
+  </int>
+  <int value="49" label="Lockbox inconsistent read back">
+    Lockbox read back is inconsistent.
+  </int>
+  <int value="50" label="Device attributes update failed">
+    Failed to update device attributes.
+  </int>
+  <int value="51" label="Lockbox device mode mismatch">
+    Enrollment mode does not match already locked install attributes.
+  </int>
+  <int value="52" label="Registration certificate fetch fail">
+    A registration certificate could not be obtained from the PCA.
+  </int>
+  <int value="53" label="Cannot sign enrollment request">
+    The request to enroll could not be signed.
+  </int>
+  <int value="54" label="Device identification missing">
+    Device model or serial number missing from VPD.
+  </int>
+</enum>
+
+<enum name="EnterprisePolicies" type="int">
+<!-- Generated from components/policy/resources/policy_templates.json -->
+
+  <int value="1" label="Configure the home page URL"/>
+  <int value="2" label="Use New Tab Page as homepage"/>
+  <int value="3" label="Set Google Chrome as Default Browser"/>
+  <int value="4" label="Application locale"/>
+  <int value="5" label="Enable alternate error pages"/>
+  <int value="6" label="Enable search suggestions"/>
+  <int value="7" label="Enable network prediction"/>
+  <int value="8" label="Disable SPDY protocol"/>
+  <int value="9" label="Enable JavaScript"/>
+  <int value="10" label="Enable Incognito mode"/>
+  <int value="11" label="Disable saving browser history"/>
+  <int value="12" label="Enable printing"/>
+  <int value="13" label="Enable Google Cloud Print proxy"/>
+  <int value="14" label="Enable Safe Browsing"/>
+  <int value="15" label="Enable reporting of usage and crash-related data"/>
+  <int value="16" label="Enable saving passwords to the password manager"/>
+  <int value="17"
+      label="Allow users to show passwords in Password Manager (deprecated)"/>
+  <int value="18" label="Enable AutoFill"/>
+  <int value="19" label="Specify a list of disabled plugins"/>
+  <int value="20" label="Disable synchronization of data with Google"/>
+  <int value="21" label="Choose how to specify proxy server settings"/>
+  <int value="22" label="Choose how to specify proxy server settings"/>
+  <int value="23" label="Address or URL of proxy server"/>
+  <int value="24" label="URL to a proxy .pac file"/>
+  <int value="25" label="Proxy bypass rules"/>
+  <int value="26" label="Supported authentication schemes"/>
+  <int value="27"
+      label="Disable CNAME lookup when negotiating Kerberos authentication"/>
+  <int value="28" label="Include non-standard port in Kerberos SPN"/>
+  <int value="29" label="Authentication server whitelist"/>
+  <int value="30" label="Kerberos delegation server whitelist"/>
+  <int value="31" label="GSSAPI library name"/>
+  <int value="32" label="Configure extension installation blacklist"/>
+  <int value="33" label="Configure extension installation whitelist"/>
+  <int value="34"
+      label="Configure the list of force-installed apps and extensions"/>
+  <int value="35" label="Show Home button on toolbar"/>
+  <int value="36" label="Disable Developer Tools"/>
+  <int value="37" label="Action on startup"/>
+  <int value="38" label="URLs to open on startup"/>
+  <int value="39" label="Block third party cookies"/>
+  <int value="40" label="Enable the default search provider"/>
+  <int value="41" label="Default search provider name"/>
+  <int value="42" label="Default search provider keyword"/>
+  <int value="43" label="Default search provider search URL"/>
+  <int value="44" label="Default search provider suggest URL"/>
+  <int value="45" label="Default search provider instant URL"/>
+  <int value="46" label="Default search provider icon"/>
+  <int value="47" label="Default search provider encodings"/>
+  <int value="48" label="Default cookies setting"/>
+  <int value="49" label="Default images setting"/>
+  <int value="50" label="Default JavaScript setting"/>
+  <int value="51" label="Default plugins setting"/>
+  <int value="52" label="Default popups setting"/>
+  <int value="53" label="Default notification setting"/>
+  <int value="54" label="Default geolocation setting"/>
+  <int value="55" label="Disable support for 3D graphics APIs"/>
+  <int value="56" label="Refresh rate for user policy"/>
+  <int value="57" label="Default HTML renderer for Google Chrome Frame"/>
+  <int value="58"
+      label="Always render the following URL patterns in Google Chrome Frame"/>
+  <int value="59"
+      label="Always render the following URL patterns in the host browser"/>
+  <int value="60"
+      label="Allow Google Chrome Frame to handle the listed content types"/>
+  <int value="61" label="Enable lock when the device become idle or suspended"/>
+  <int value="62" label="Enable Instant"/>
+  <int value="63" label="Set user data directory"/>
+  <int value="64" label="Set download directory"/>
+  <int value="65" label="Clear site data on browser shutdown (deprecated)"/>
+  <int value="66" label="Specify whether the plugin finder should be disabled"/>
+  <int value="67" label="Block cookies on these sites"/>
+  <int value="68" label="Allow session only cookies on these sites"/>
+  <int value="69" label="Allow images on these sites"/>
+  <int value="70" label="Block images on these sites"/>
+  <int value="71" label="Allow JavaScript on these sites"/>
+  <int value="72" label="Block JavaScript on these sites"/>
+  <int value="73" label="Allow plugins on these sites"/>
+  <int value="74" label="Block plugins on these sites"/>
+  <int value="75" label="Allow popups on these sites"/>
+  <int value="76" label="Block popups on these sites"/>
+  <int value="77" label="Allow cookies on these sites"/>
+  <int value="78" label="Specify a list of enabled plugins"/>
+  <int value="79"
+      label="Specify a list of plugins that the user can enable or disable"/>
+  <int value="80" label="Enable Translate"/>
+  <int value="81" label="Allow running plugins that are outdated"/>
+  <int value="82" label="Enable Bookmark Bar"/>
+  <int value="83" label="Enables or disables bookmark editing"/>
+  <int value="84" label="Allow invocation of file selection dialogs"/>
+  <int value="85" label="Disable URL protocol schemes"/>
+  <int value="86" label="Always runs plugins that require authorization"/>
+  <int value="87" label="Set Google Chrome Frame user data directory"/>
+  <int value="88" label="Set disk cache directory"/>
+  <int value="89" label="Cross-origin HTTP Basic Auth prompts"/>
+  <int value="90" label="Refresh rate for Device Policy"/>
+  <int value="91" label="Release channel"/>
+  <int value="92"
+      label="Maximal number of concurrent connections to the proxy server"/>
+  <int value="93" label="Incognito mode availability"/>
+  <int value="94" label="Enable firewall traversal from remote access client"/>
+  <int value="95" label="Enable firewall traversal from remote access host"/>
+  <int value="96"
+      label="Prevent app promotions from appearing on the new tab page"/>
+  <int value="97" label="Import bookmarks from default browser on first run"/>
+  <int value="98"
+      label="Import browsing history from default browser on first run"/>
+  <int value="99" label="Import of homepage from default browser on first run"/>
+  <int value="100"
+      label="Import search engines from default browser on first run"/>
+  <int value="101"
+      label="Import saved passwords from default browser on first run"/>
+  <int value="102"
+      label="Automatically select client certificates for these sites"/>
+  <int value="103" label="Block access to a list of URLs"/>
+  <int value="104" label="Allows access to a list of URLs"/>
+  <int value="105" label="Allow notifications on these sites"/>
+  <int value="106" label="Block notifications on these sites"/>
+  <int value="107" label="User-level network configuration"/>
+  <int value="108" label="Device-level network configuration"/>
+  <int value="109"
+      label="Enable submission of documents to Google Cloud Print"/>
+  <int value="110" label="Set disk cache size in bytes"/>
+  <int value="111" label="Set media disk cache size in bytes"/>
+  <int value="112" label="Enterprise web store URL (deprecated)"/>
+  <int value="113" label="Enterprise web store name (deprecated)"/>
+  <int value="114"
+      label="Enable TLS domain-bound certificates extension (deprecated)"/>
+  <int value="115"
+      label="Enable reporting memory info (JS heap size) to page (deprecated)"/>
+  <int value="116" label="Proxy settings"/>
+  <int value="117" label="Disable Print Preview (deprecated)"/>
+  <int value="118" label="Disable TLS False Start"/>
+  <int value="119" label="Report OS and firmware version"/>
+  <int value="120" label="Report device activity times"/>
+  <int value="121" label="Report device boot mode"/>
+  <int value="122" label="Login user white list"/>
+  <int value="123" label="Allow creation of new user accounts"/>
+  <int value="124" label="Enable guest mode"/>
+  <int value="125" label="Show usernames on login screen"/>
+  <int value="126" label="Enable data roaming"/>
+  <int value="127" label="Enable metrics reporting"/>
+  <int value="128" label="Wipe user data on sign-out"/>
+  <int value="129" label="Whether online OCSP/CRL checks are performed"/>
+  <int value="130" label="Timeout until idle user log-out is executed"/>
+  <int value="131" label="Duration of the idle log-out warning message"/>
+  <int value="132"
+      label="Screen saver to be used on the sign-in screen in retail mode"/>
+  <int value="133"
+      label="Duration of inactivity before the screen saver is shown on the
+             sign-in screen in retail mode"/>
+  <int value="134"
+      label="Whether the release channel should be configurable by the user"/>
+  <int value="135" label="List of AppPack extensions"/>
+  <int value="136" label="Disables Auto Update"/>
+  <int value="137" label="Load specified urls on demo login"/>
+  <int value="138"
+      label="Continue running background apps when Google Chrome is closed"/>
+  <int value="139" label="Disables Drive in the Google Chrome OS Files app"/>
+  <int value="140"
+      label="Disables Google Drive over cellular connections in the Google
+             Chrome OS Files app"/>
+  <int value="141"
+      label="Additional command line parameters for Google Chrome"/>
+  <int value="142" label="Target Auto Update Version"/>
+  <int value="143" label="Report device location"/>
+  <int value="144" label="List of pinned apps to show in the launcher"/>
+  <int value="145" label="Auto update scatter factor"/>
+  <int value="146" label="Connection types allowed for updates"/>
+  <int value="147"
+      label="Restrict which users are allowed to sign in to Google Chrome"/>
+  <int value="148"
+      label="Configure extension, app, and user script install sources"/>
+  <int value="149" label="Default mediastream setting"/>
+  <int value="150"
+      label="Disable proceeding from the Safe Browsing warning page"/>
+  <int value="151" label="Enable or disable spell checking web service"/>
+  <int value="152" label="Disable mounting of external storage"/>
+  <int value="153" label="Disable taking screenshots"/>
+  <int value="154"
+      label="Configure the required domain name for remote access hosts"/>
+  <int value="155"
+      label="Enable two-factor authentication for remote access hosts"/>
+  <int value="156"
+      label="Configure the TalkGadget prefix for remote access hosts"/>
+  <int value="157" label="Enable curtaining of remote access hosts"/>
+  <int value="158" label="Timezone"/>
+  <int value="159" label="Allow playing audio"/>
+  <int value="160" label="Allow or deny audio capture"/>
+  <int value="161"
+      label="List of alternate URLs for the default search provider"/>
+  <int value="162" label="Force SafeSearch"/>
+  <int value="163" label="Device-local accounts"/>
+  <int value="164" label="Add a logout button to the system tray"/>
+  <int value="165" label="Use built-in DNS client"/>
+  <int value="166" label="Control shelf auto-hiding"/>
+  <int value="167" label="Allow or deny video capture"/>
+  <int value="168" label="Configure allowed app/extension types"/>
+  <int value="169" label="Set the display name for device-local accounts"/>
+  <int value="170" label="Limit the session length"/>
+  <int value="171"
+      label="Parameter controlling search term placement for the default
+             search provider"/>
+  <int value="172" label="Screen dim delay when running on AC power"/>
+  <int value="173" label="Screen off delay when running on AC power"/>
+  <int value="174" label="Screen lock delay when running on AC power"/>
+  <int value="175" label="Idle delay when running on AC power"/>
+  <int value="176" label="Screen dim delay when running on battery power"/>
+  <int value="177" label="Screen off delay when running on battery power"/>
+  <int value="178" label="Screen lock delay when running on battery power"/>
+  <int value="179" label="Idle delay when running on battery power"/>
+  <int value="180" label="Action to take when the idle delay is reached"/>
+  <int value="181" label="Action to take when the user closes the lid"/>
+  <int value="182"
+      label="Specify whether audio activity affects power management"/>
+  <int value="183"
+      label="Specify whether video activity affects power management"/>
+  <int value="184"
+      label="Percentage by which to scale the idle delay in presentation mode
+             (deprecated)"/>
+  <int value="185"
+      label="Allow users to redeem offers through Chrome OS Registration"/>
+  <int value="186" label="Set the Terms of Service for a device-local account"/>
+  <int value="187" label="Enable deleting browser and download history"/>
+  <int value="188" label="Show accessibility options in system tray menu"/>
+  <int value="189"
+      label="Hide the web store from the New Tab Page and app launcher"/>
+  <int value="190" label="Allows sign in to Google Chrome"/>
+  <int value="191"
+      label="System wide flags to be applied on Google Chrome start-up"/>
+  <int value="192" label="Limit device uptime by automatically rebooting"/>
+  <int value="193" label="Automatically reboot after update"/>
+  <int value="194" label="Public session for auto-login"/>
+  <int value="195" label="Public session auto-login timer"/>
+  <int value="196"
+      label="Set the restriction on the fetching of the Variations seed"/>
+  <int value="197" label="Idle warning delay when running on AC power"/>
+  <int value="198" label="Idle warning delay when running on battery power"/>
+  <int value="199"
+      label="Set the restriction on the fetching of the Variations seed"/>
+  <int value="200" label="Enable remote attestation for the user"/>
+  <int value="201"
+      label="Extensions allowed to to use the remote attestation API"/>
+  <int value="202" label="Enable bailout keyboard shortcut for auto-login"/>
+  <int value="203" label="Allow screen wake locks"/>
+  <int value="204" label="Default behavior for sites not in any content pack"/>
+  <int value="205" label="Managed user manual exception hosts"/>
+  <int value="206" label="Managed user manual exception URLs"/>
+  <int value="207" label="Enable remote attestation for the device"/>
+  <int value="208"
+      label="URLs that will be granted access to audio capture devices
+             without prompt"/>
+  <int value="209"
+      label="URLs that will be granted access to video capture devices
+             without prompt"/>
+  <int value="210"
+      label="Percentage by which to scale the screen dim delay if the user
+             becomes active after dimming"/>
+  <int value="211" label="Enable large cursor"/>
+  <int value="212" label="Enable spoken feedback"/>
+  <int value="213" label="Enable high contrast mode"/>
+  <int value="214" label="Set screen magnifier type"/>
+  <int value="215"
+      label="Set default state of the large cursor on the login screen"/>
+  <int value="216"
+      label="Set the default state of spoken feedback on the login screen"/>
+  <int value="217"
+      label="Set the default state of high contrast mode on the login screen"/>
+  <int value="218"
+      label="Set the default screen magnifier type enabled on the login
+             screen"/>
+  <int value="219" label="Enable supervised users"/>
+  <int value="220"
+      label="Percentage by which to scale the screen dim delay in
+             presentation mode"/>
+  <int value="221" label="Suppress the Google Chrome Frame turndown prompt"/>
+  <int value="222"
+      label="Action to take when the idle delay is reached while running on
+             battery power"/>
+  <int value="223" label="Enable creation of supervised users"/>
+  <int value="224" label="Report device network interfaces"/>
+  <int value="225" label="Power management on the login screen"/>
+  <int value="226"
+      label="Action to take when the idle delay is reached while running on
+             AC power"/>
+  <int value="227" label="Managed Bookmarks"/>
+  <int value="228" label="Maximum fetch delay after a policy invalidation"/>
+  <int value="229"
+      label="Parameter providing search-by-image feature for the default
+             search provider"/>
+  <int value="230" label="Parameters for search URL which uses POST"/>
+  <int value="231" label="Parameters for suggest URL which uses POST"/>
+  <int value="232" label="Parameters for instant URL which uses POST"/>
+  <int value="233" label="Parameters for image URL which uses POST"/>
+  <int value="234"
+      label="Enable or disable PIN-less authentication for remote access
+             hosts"/>
+  <int value="235"
+      label="Whether online OCSP/CRL checks are required for local trust
+             anchors"/>
+  <int value="236" label="Use 24 hour clock by default"/>
+  <int value="237" label="Default search provider new tab page URL"/>
+  <int value="238" label="Skip the meta tag check in Google Chrome Frame"/>
+  <int value="239"
+      label="Enable the use of remote attestation for content protection for
+             the device"/>
+  <int value="240" label="Allow fullscreen mode"/>
+  <int value="241" label="Enable the data compression proxy feature"/>
+  <int value="242" label="Auto update p2p enabled"/>
+  <int value="243" label="Allow autoupdate downloads via HTTP"/>
+  <int value="244" label="Control the user behavior in a multiprofile session"/>
+  <int value="245" label="Ephemeral profile"/>
+  <int value="246"
+      label="Selects the strategy used to free up disk space during automatic
+             clean-up (deprecated)"/>
+  <int value="247" label="Wait for initial user activity"/>
+  <int value="248" label="Report device users"/>
+  <int value="249" label="User avatar image"/>
+  <int value="250" label="Enable network configuration prompt when offline"/>
+  <int value="251" label="Configure native messaging blacklist"/>
+  <int value="252" label="Configure native messaging whitelist"/>
+  <int value="253"
+      label="Allow user-level Native Messaging hosts (installed without admin
+             permissions)."/>
+  <int value="254"
+      label="Limit the time for which a user authenticated via SAML can log
+             in offline"/>
+  <int value="255" label="Enable on-screen keyboard"/>
+  <int value="256"
+      label="Set default state of the on-screen keyboard on the login screen"/>
+  <int value="257" label="Allow gnubby authentication for remote access hosts"/>
+  <int value="258"
+      label="Power management settings when the user becomes idle"/>
+  <int value="259" label="Screen lock delays"/>
+  <int value="260" label="Media keys default to function keys"/>
+  <int value="261" label="Enable WPAD optimization"/>
+  <int value="262" label="Wallpaper image"/>
+  <int value="263"
+      label="Enable the use of relay servers by the remote access host"/>
+  <int value="264"
+      label="Restrict the UDP port range used by the remote access host"/>
+  <int value="265" label="Enables the old web-based signin"/>
+  <int value="266" label="Block developer mode"/>
+  <int value="267" label="Show the apps shortcut in the bookmark bar"/>
+  <int value="268" label="Register protocol handlers"/>
+  <int value="269" label="Enable virtual keyboard"/>
+  <int value="270"
+      label="Enable deprecated web platform features for a limited time"/>
+  <int value="271" label="Transfer SAML IdP cookies during login"/>
+  <int value="272" label="Allows Smart Lock to be used"/>
+  <int value="273" label="Enable network prediction"/>
+  <int value="274" label="Set the recommended locales for a public session"/>
+  <int value="275" label="Enable guest mode in browser"/>
+  <int value="276" label="Enable add person in profile manager"/>
+  <int value="277"
+      label="Import autofill form data from default browser on first run"/>
+  <int value="278" label="Extension management settings"/>
+  <int value="279" label="Minimum SSL version enabled"/>
+  <int value="280" label="Minimum TLS version to fallback to"/>
+  <int value="281" label="Enable Touch to Search"/>
+  <int value="282" label="Force Google SafeSearch"/>
+  <int value="283" label="Force YouTube Safety Mode"/>
+  <int value="284" label="Automatic reboot on device shutdown"/>
+  <int value="285"
+      label="Requires that the name of the local user and the remote access
+             host owner match"/>
+  <int value="286"
+      label="URL where remote access clients should obtain their
+             authentication token"/>
+  <int value="287"
+      label="URL for validating remote access client authentication token"/>
+  <int value="288"
+      label="Client certificate for connecting to
+             RemoteAccessHostTokenValidationUrl"/>
+  <int value="289"
+      label="Policy overrides for Debug builds of the remote access host"/>
+  <int value="290" label="Report hardware status"/>
+  <int value="291" label="Report information about active kiosk sessions"/>
+  <int value="292" label="Frequency of device status report uploads"/>
+  <int value="293"
+      label="Send network packets to the management server to monitor online
+             status"/>
+  <int value="294" label="Frequency of monitoring network packets"/>
+  <int value="295" label="Captive portal authentication ignores proxy"/>
+  <int value="296" label="Set Apps and Extensions cache size (in bytes)"/>
+  <int value="297" label="Enable domain name autocomplete during user sign in"/>
+  <int value="298" label="Maximize the first browser window on first run"/>
+  <int value="299"
+      label="Allow users to opt in to Safe Browsing extended reporting"/>
+  <int value="300" label="Allow proceeding from the SSL warning page"/>
+  <int value="301" label="Allows QUIC protocol"/>
+  <int value="302" label="Key Permissions"/>
+  <int value="303"
+      label="Enable showing the welcome page on the first browser launch
+             following OS upgrade."/>
+  <int value="304" label="Use hardware acceleration when available"/>
+  <int value="305" label="Account type for HTTP Negotiate authentication"/>
+  <int value="306" label="Send system logs to the management server"/>
+  <int value="307"
+      label="Make Unified Desktop available and turn on by default."/>
+  <int value="308" label="Default printer selection rules"/>
+  <int value="309" label="Allow Dinosaur Easter Egg Game"/>
+  <int value="310" label="Whether RC4 cipher suites in TLS are enabled"/>
+  <int value="311"
+      label="Set default display rotation, reapplied on every reboot"/>
+  <int value="312" label="Enable the supervised user content provider"/>
+  <int value="313" label="Default key generation setting"/>
+  <int value="314" label="Allow key generation on these sites"/>
+  <int value="315" label="Block key generation on these sites"/>
+  <int value="316"
+      label="Configure the required domain name for remote access clients"/>
+  <int value="317" label="Enable ARC"/>
+  <int value="318" label="Configure ARC"/>
+  <int value="319"
+      label="Allow the auto launched with zero delay kiosk app to control
+             Google Chrome OS version"/>
+  <int value="320" label="Control use of the Web Bluetooth API"/>
+  <int value="321" label="Configure the login authentication behavior"/>
+  <int value="322" label="Whitelist of USB detachable devices"/>
+  <int value="323" label="Allow bluetooth on device"/>
+  <int value="324" label="Suppress the unsupported OS warning"/>
+  <int value="325"
+      label="Enable queries to Quirks Server for hardware profiles"/>
+  <int value="326" label="Configure the automatic timezone detection method"/>
+  <int value="327" label="Enables ending processes in Task Manager"/>
+  <int value="328"
+      label="URLs that will be granted access to video capture devices on
+             SAML login pages"/>
+  <int value="329" label="Permit locking the screen"/>
+  <int value="330" label="Set certificate availability for ARC-apps"/>
+  <int value="331" label="Define domains allowed to access Google Apps"/>
+  <int value="332" label="Enable PAC URL stripping (for https://)"/>
+  <int value="333" label="Enables cast"/>
+  <int value="334" label="Whether DHE cipher suites in TLS are enabled"/>
+  <int value="335"
+      label="Disable Certificate Transparency enforcement for a list of URLs"/>
+  <int value="336"
+      label="Configure the list of installed apps on the login screen"/>
+  <int value="337" label="Enable Android Backup Service"/>
+  <int value="338" label="Show content suggestions on the New Tab page"/>
+  <int value="339"
+      label="Restrict the range of local UDP ports used by WebRTC"/>
+  <int value="340"
+      label="Whether SHA-1 signed certificates issued by local trust anchors
+             are allowed"/>
+  <int value="341" label="Set an external source of URL restrictions"/>
+  <int value="342" label="Enables component updates in Google Chrome."/>
+  <int value="343" label="Treat external storage devices as read-only."/>
+  <int value="344"
+      label="Allow remote users to interact with elevated windows in remote
+             assistance sessions"/>
+  <int value="345" label="Enables HTTP/0.9 support on non-default ports"/>
+  <int value="346" label="Enables force sign in for Google Chrome."/>
+  <int value="347" label="Always Open PDF files externally"/>
+  <int value="348" label="Force minimum YouTube Restricted Mode"/>
+  <int value="349" label="Report information about status of Android"/>
+  <int value="350" label="Native Printing"/>
+  <int value="351" label="Enables throttling network bandwidth"/>
+  <int value="352" label="Configure allowed quick unlock modes."/>
+  <int value="353"
+      label="Sets how often user has to enter password to use quick unlock."/>
+</enum>
+
+<enum name="EnterprisePolicyInvalidations" type="int">
+  <summary>
+    Defined as PolicyInvalidationType in
+    components/policy/core/common/cloud/enterprise_metrics.h.
+  </summary>
+  <int value="0" label="No payload; not expired"/>
+  <int value="1" label="Payload; not expired"/>
+  <int value="3" label="No payload; expired"/>
+  <int value="4" label="Payload; expired"/>
+</enum>
+
+<enum name="EnterprisePolicyKeyVerification" type="int">
+  <summary>
+    Defined as MetricPolicyKeyVerification in
+    components/policy/core/common/cloud/cloud_policy_validator.cc.
+  </summary>
+  <int value="0" label="Key missing">Client has no verification key.</int>
+  <int value="1" label="Signature missing">
+    The Policy being verified has no key signature (e.g. policy fetched before
+    the server supported the verification key).
+  </int>
+  <int value="2" label="Verification failed">
+    The key signature did not match the expected value (in theory, this should
+    only happen after key rotation or if the policy cached on disk has been
+    modified).
+  </int>
+  <int value="3" label="Verification succeeded">
+    Key verification succeeded.
+  </int>
+</enum>
+
+<enum name="EnterprisePolicyLoadStatus" type="int">
+  <summary>
+    Status codes produced by the policy loaders that pull policy settings from
+    the platform-specific management infrastructure, such as Windows Group
+    Policy.  Defined as PolicyLoadStatus in
+    components/policy/core/common/policy_load_status.h.
+  </summary>
+  <int value="0" label="STARTED">
+    Policy load attempt started. This gets logged for each policy load attempt
+    to get a baseline on the number of requests, and an arbitrary number of the
+    below status codes may get added in addition.
+  </int>
+  <int value="1" label="QUERY_FAILED">
+    System failed to determine whether there's policy.
+  </int>
+  <int value="2" label="NO_POLICY">No policy present.</int>
+  <int value="3" label="INACCCESSIBLE">
+    Data inaccessible, such as non-local policy file.
+  </int>
+  <int value="4" label="MISSING">
+    Data missing, such as policy file not present.
+  </int>
+  <int value="5" label="WOW64_REDIRECTION_DISABLED">
+    Trying with Wow64 redirection disabled.
+  </int>
+  <int value="6" label="READ_ERROR">
+    Data read error, for example file reading errors.
+  </int>
+  <int value="7" label="TOO_BIG">Data too large to process.</int>
+  <int value="8" label="PARSE_ERROR">Parse error.</int>
+</enum>
+
+<enum name="EnterprisePolicyRefresh" type="int">
+  <summary>
+    Defined as MetricPolicyRefresh in
+    components/policy/core/common/cloud/enterprise_metrics.h.
+  </summary>
+  <int value="0" label="Changed"/>
+  <int value="1" label="Changed; Invalidations disabled"/>
+  <int value="2" label="Unchanged"/>
+  <int value="3" label="Invalidated; Changed"/>
+  <int value="4" label="Invalidated; Unchanged"/>
+</enum>
+
+<enum name="EnterprisePolicyType" type="int">
+  <summary>
+    Result of Policy operations as defined as MetricPolicy in
+    components/policy/core/common/cloud/enterprise_metrics.h.
+  </summary>
+  <int value="0" label="Load Succeeded">
+    A cached policy was successfully loaded from disk.
+  </int>
+  <int value="1" label="Load Failed">
+    Reading a cached policy from disk failed.
+  </int>
+  <int value="2" label="Fetch Requested">
+    A policy fetch request was sent to the DM server.
+  </int>
+  <int value="3" label="Fetch Request Failed">
+    The request was invalid, or the HTTP request failed.
+  </int>
+  <int value="4" label="Fetch Server Failed">
+    Error HTTP status received, or the DM server failed in another way.
+  </int>
+  <int value="5" label="Fetch Not Found">
+    Policy not found for the given user or device.
+  </int>
+  <int value="6" label="Fetch Invalid Token">
+    DM server didn't accept the token used in the request.
+  </int>
+  <int value="7" label="Fetch Response Received">
+    A response to the policy fetch request was received.
+  </int>
+  <int value="8" label="Fetch Bad Response">
+    The policy response message didn't contain a policy, or other data was
+    missing.
+  </int>
+  <int value="9" label="Fetch Invalid Policy">Failed to decode the policy.</int>
+  <int value="10" label="Fetch Bad Signature">
+    The device policy was rejected because its signature was invalid.
+  </int>
+  <int value="11" label="Fetch Timestamp In Future">
+    Rejected policy because its timestamp is in the future.
+  </int>
+  <int value="12" label="Fetch Non Enterprise Device">
+    Device policy rejected because the device is not managed.
+  </int>
+  <int value="13" label="Fetch User Mismatch">
+    The policy was provided for a username that is different from the device
+    owner, and the policy was rejected.
+  </int>
+  <int value="14" label="Fetch Other Failed">
+    The policy was rejected for another reason. Currently this can happen only
+    for device policies, when the SignedSettings fail to store or retrieve a
+    stored policy.
+  </int>
+  <int value="15" label="Fetch OK">The fetched policy was accepted.</int>
+  <int value="16" label="Fetch Not Modified">
+    The policy just fetched didn't have any changes compared to the cached
+    policy.
+  </int>
+  <int value="17" label="Store Succeeded">
+    Successfully cached a policy to disk.
+  </int>
+  <int value="18" label="Store Failed">Caching a policy to disk failed.</int>
+</enum>
+
+<enum name="ErrorCodesGetAdaptersAddresses" type="int">
+  <int value="8" label="ERROR_NOT_ENOUGH_MEMORY"/>
+  <int value="87" label="ERROR_INVALID_PARAMETER"/>
+  <int value="111" label="ERROR_BUFFER_OVERFLOW"/>
+  <int value="232" label="ERROR_NO_DATA"/>
+  <int value="1228" label="ERROR_ADDRESS_NOT_ASSOCIATED"/>
+</enum>
+
+<enum name="ErrorCodesGetaddrinfo_All" type="int">
+  <int value="1" label="EAI_BADFLAGS(L)"/>
+  <int value="2" label="EAI_NONAME(L) EAI_AGAIN(M)"/>
+  <int value="3" label="EAI_AGAIN(L) EAI_BADFLAGS(M)"/>
+  <int value="4" label="EAI_FAIL"/>
+  <int value="5" label="EAI_NODATA(L) EAI_FAMILY(M)"/>
+  <int value="6" label="WSA_INVALID_HANDLE EAI_FAMILY(L) EAI_MEMORY(M)"/>
+  <int value="7" label="EAI_SOCKTYPE(L) EAI_NODATA(M)"/>
+  <int value="8" label="WSA_NOT_ENOUGH_MEMORY EAI_SERVICE(L) EAI_NONAME(M)"/>
+  <int value="9" label="EAI_ADDRFAMILY EAI_SERVICE(M)"/>
+  <int value="10" label="EAI_MEMORY(L) EAI_SOCKTYPE(L)"/>
+  <int value="11" label="EAI_SYSTEM"/>
+  <int value="12" label="EAI_OVERFLOW"/>
+  <int value="10022" label="WSAEINVAL"/>
+  <int value="10044" label="WSAESOCKTNOSUPPORT"/>
+  <int value="10047" label="WSAEAFNOSUPPORT"/>
+  <int value="10093" label="WSANOTINITIALISED"/>
+  <int value="10109" label="WSA_TYPE_NOT_FOUND"/>
+  <int value="11001" label="WSA_HOST_NOT_FOUND"/>
+  <int value="11002" label="WSATRY_AGAIN"/>
+  <int value="11003" label="WSA_ANO_RECOVERY"/>
+  <int value="11004" label="WSANO_DATA"/>
+</enum>
+
+<enum name="ErrorCodesGetaddrinfo_Linux" type="int">
+  <int value="1" label="EAI_BADFLAGS"/>
+  <int value="2" label="EAI_NONAME"/>
+  <int value="3" label="EAI_AGAIN"/>
+  <int value="4" label="EAI_FAIL"/>
+  <int value="5" label="EAI_NODATA"/>
+  <int value="6" label="EAI_FAMILY"/>
+  <int value="7" label="EAI_SOCKTYPE"/>
+  <int value="8" label="EAI_SERVICE"/>
+  <int value="9" label="EAI_ADDRFAMILY"/>
+  <int value="10" label="EAI_MEMORY"/>
+  <int value="11" label="EAI_SYSTEM"/>
+  <int value="12" label="EAI_OVERFLOW"/>
+</enum>
+
+<enum name="ErrorCodesGetaddrinfo_Mac" type="int">
+  <int value="1" label="EAI_ADDRFAMILY"/>
+  <int value="2" label="EAI_AGAIN"/>
+  <int value="3" label="EAI_BADFLAGS"/>
+  <int value="4" label="EAI_FAIL"/>
+  <int value="5" label="EAI_FAMILY"/>
+  <int value="6" label="EAI_MEMORY"/>
+  <int value="7" label="EAI_NODATA"/>
+  <int value="8" label="EAI_NONAME"/>
+  <int value="9" label="EAI_SERVICE"/>
+  <int value="10" label="EAI_SOCKTYPE"/>
+  <int value="11" label="EAI_SYSTEM"/>
+  <int value="12" label="EAI_BADHINTS"/>
+  <int value="13" label="EAI_PROTOCOL"/>
+  <int value="14" label="EAI_OVERFLOW"/>
+</enum>
+
+<enum name="ErrorCodesGetaddrinfo_Win" type="int">
+  <int value="6" label="WSA_INVALID_HANDLE"/>
+  <int value="8" label="WSA_NOT_ENOUGH_MEMORY or EAI_SERVICE"/>
+  <int value="10022" label="WSAEINVAL"/>
+  <int value="10044" label="WSAESOCKTNOSUPPORT"/>
+  <int value="10047" label="WSAEAFNOSUPPORT"/>
+  <int value="10093" label="WSANOTINITIALISED"/>
+  <int value="10109" label="WSA_TYPE_NOT_FOUND"/>
+  <int value="11001" label="WSA_HOST_NOT_FOUND"/>
+  <int value="11002" label="WSATRY_AGAIN"/>
+  <int value="11003" label="WSA_ANO_RECOVERY"/>
+  <int value="11004" label="WSANO_DATA"/>
+</enum>
+
+<enum name="ErrorPageButton" type="int">
+  <int value="0" label="NO_BUTTON"/>
+  <int value="1" label="RELOAD_BUTTON"/>
+  <int value="2" label="SHOW_SAVED_COPY_BUTTON"/>
+  <int value="3" label="MORE_BUTTON"/>
+  <int value="4" label="EASTER_EGG"/>
+  <int value="5" label="SHOW_CACHED_COPY_BUTTON"/>
+  <int value="6" label="SHOW_CACHED_PAGE_BUTTON"/>
+</enum>
+
+<enum name="ErrorPageUnexpectedStates" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="NON_ERROR_PAGE_URL"/>
+  <int value="2" label="NO_ERROR_INFO"/>
+  <int value="3" label="NON_ERROR_PAGE_URL_AND_NO_ERROR_INFO"/>
+</enum>
+
+<enum name="EVCTCompliance" type="int">
+  <int value="0" label="EV policy does not apply"/>
+  <int value="1" label="Compliant because certificate is whitelisted"/>
+  <int value="2" label="Compliant because SCTs satisfy CT policy"/>
+  <int value="3" label="Not compliant because there are not enough SCTs"/>
+  <int value="4"
+      label="Not compliant because there are not diverse enough SCTs"/>
+  <int value="5" label="Not compliant because the build is not timely"/>
+</enum>
+
+<enum name="EventHitTest" type="int">
+  <int value="0" label="Miss, not found in cache."/>
+  <int value="1" label="Miss, explicitly avoided."/>
+  <int value="2" label="Miss, validity region matches; type doesn't."/>
+  <int value="3" label="Hit, exact point."/>
+  <int value="4" label="Hit, region matched."/>
+</enum>
+
+<enum name="EventHitTestValidity" type="int">
+  <int value="0" label="Valid, exact match."/>
+  <int value="1" label="Valid, region match."/>
+  <int value="2" label="Incorrect, exact match (rect query)."/>
+  <int value="3" label="Incorrect, exact match (point query)."/>
+  <int value="4" label="Incorrect, region match (rect query)."/>
+  <int value="5" label="Incorrect, region match (point query)."/>
+</enum>
+
+<enum name="EventHitTestValidityScore" type="int">
+  <int value="0" label="Nothing matched."/>
+  <int value="1" label="Over widget matched."/>
+  <int value="2" label="Scrollbar matched."/>
+  <int value="4" label="URL element matched."/>
+  <int value="8" label="Local point matched."/>
+  <int value="16" label="Point in inner frame matched."/>
+  <int value="32" label="Inner pseudo node matched."/>
+  <int value="64" label="Inner node matched."/>
+  <int value="128" label="Request type matched."/>
+</enum>
+
+<enum name="EventResultType" type="int">
+  <int value="0" label="Passive"/>
+  <int value="1" label="Uncancelable"/>
+  <int value="2" label="Suppressed"/>
+  <int value="3" label="Cancelable and not canceled"/>
+  <int value="4" label="Cancelable and canceled"/>
+  <int value="5" label="Forced Non-Blocking"/>
+</enum>
+
+<enum name="EventTimestampValidity" type="int">
+  <int value="0" label="Invalid time base"/>
+  <int value="1" label="Valid time base"/>
+</enum>
+
+<enum name="EVWhitelistStatus" type="int">
+  <int value="0" label="Not present"/>
+  <int value="1" label="Invalid"/>
+  <int value="2" label="Valid"/>
+</enum>
+
+<enum name="ExecutionPhase" type="int">
+  <int value="0" label="UNINITIALIZED_PHASE"/>
+  <int value="100" label="START_METRICS_RECORDING"/>
+  <int value="200" label="CREATE_PROFILE"/>
+  <int value="300" label="STARTUP_TIMEBOMB_ARM"/>
+  <int value="400" label="THREAD_WATCHER_START"/>
+  <int value="500" label="MAIN_MESSAGE_LOOP_RUN"/>
+  <int value="600" label="SHUTDOWN_TIMEBOMB_ARM"/>
+  <int value="700" label="SHUTDOWN_COMPLETE"/>
+</enum>
+
+<enum name="ExpectCTHeaderResult" type="int">
+  <int value="0" label="EXPECT_CT_HEADER_BAD_VALUE"/>
+  <int value="1" label="EXPECT_CT_HEADER_BUILD_NOT_TIMELY"/>
+  <int value="2" label="EXPECT_CT_HEADER_PRIVATE_ROOT"/>
+  <int value="3" label="EXPECT_CT_HEADER_COMPLIANCE_DETAILS_UNAVAILABLE"/>
+  <int value="4" label="EXPECT_CT_HEADER_COMPLIED"/>
+  <int value="5" label="EXPECT_CT_HEADER_NOT_PRELOADED"/>
+  <int value="6" label="EXPECT_CT_HEADER_PROCESSED"/>
+</enum>
+
+<enum name="ExtensionBackgroundPageType" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Persistent"/>
+  <int value="2" label="Event Page"/>
+</enum>
+
+<enum name="ExtensionBubbleAction" type="int">
+  <int value="0" label="Learn more"/>
+  <int value="1" label="Execute"/>
+  <int value="2" label="Dismiss by user action"/>
+  <int value="3" label="Dismiss by deactivation"/>
+</enum>
+
+<enum name="ExtensionCreationFlags" type="int">
+  <int value="0" label="REQUIRE_KEY"/>
+  <int value="1" label="REQUIRE_MODERN_MANIFEST_VERSION"/>
+  <int value="2" label="ALLOW_FILE_ACCESS"/>
+  <int value="3" label="FROM_WEBSTORE"/>
+  <int value="4" label="FROM_BOOKMARK"/>
+  <int value="5" label="FOLLOW_SYMLINKS_ANYWHERE"/>
+  <int value="6" label="ERROR_ON_PRIVATE_KEY"/>
+  <int value="7" label="WAS_INSTALLED_BY_DEFAULT"/>
+  <int value="8" label="REQUIRE_PERMISSIONS_CONSENT"/>
+  <int value="9" label="IS_EPHEMERAL_DEPRECATED"/>
+  <int value="10" label="WAS_INSTALLED_BY_OEM"/>
+</enum>
+
+<enum name="ExtensionDisabledUIUserResponse" type="int">
+  <int value="0" label="IGNORED"/>
+  <int value="1" label="REENABLE"/>
+  <int value="2" label="UNINSTALL"/>
+</enum>
+
+<enum name="ExtensionDisableReason" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="USER_ACTION"/>
+  <int value="2" label="PERMISSIONS_INCREASE"/>
+  <int value="4" label="RELOAD"/>
+  <int value="8" label="UNSUPPORTED_REQUIREMENT"/>
+  <int value="16" label="SIDELOAD_WIPEOUT"/>
+  <int value="32" label="UNKNOWN_FROM_SYNC"/>
+  <int value="64" label="DEPRECATED_PERMISSIONS_CONSENT"/>
+  <int value="128" label="DEPRECATED_KNOWN_DISABLED"/>
+  <int value="256" label="NOT_VERIFIED"/>
+  <int value="512" label="GREYLIST"/>
+  <int value="1024" label="CORRUPTED"/>
+  <int value="2048" label="REMOTE_INSTALL"/>
+  <int value="4096" label="INACTIVE_EPHEMERAL_APP_DEPRECATED"/>
+  <int value="8192" label="EXTERNAL_EXTENSION"/>
+  <int value="16384" label="UPDATE_REQUIRED_BY_POLICY"/>
+  <int value="32768" label="CUSTODIAN_APPROVAL_REQUIRED"/>
+</enum>
+
+<enum name="ExtensionEvents" type="int">
+<!-- Generated from extensions/browser/extension_event_histogram_value.h -->
+
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="FOR_TEST"/>
+  <int value="2" label="ACCESSIBILITY_PRIVATE_ON_INTRODUCE_CHROME_VOX"/>
+  <int value="3" label="ACTIVITY_LOG_PRIVATE_ON_EXTENSION_ACTIVITY"/>
+  <int value="4" label="ALARMS_ON_ALARM"/>
+  <int value="5" label="APP_CURRENT_WINDOW_INTERNAL_ON_ALPHA_ENABLED_CHANGED"/>
+  <int value="6" label="APP_CURRENT_WINDOW_INTERNAL_ON_BOUNDS_CHANGED"/>
+  <int value="7" label="APP_CURRENT_WINDOW_INTERNAL_ON_CLOSED"/>
+  <int value="8" label="APP_CURRENT_WINDOW_INTERNAL_ON_FULLSCREENED"/>
+  <int value="9" label="APP_CURRENT_WINDOW_INTERNAL_ON_MAXIMIZED"/>
+  <int value="10" label="APP_CURRENT_WINDOW_INTERNAL_ON_MINIMIZED"/>
+  <int value="11" label="APP_CURRENT_WINDOW_INTERNAL_ON_RESTORED"/>
+  <int value="12"
+      label="APP_CURRENT_WINDOW_INTERNAL_ON_WINDOW_SHOWN_FOR_TESTS"/>
+  <int value="13" label="APP_RUNTIME_ON_EMBED_REQUESTED"/>
+  <int value="14" label="APP_RUNTIME_ON_LAUNCHED"/>
+  <int value="15" label="APP_RUNTIME_ON_RESTARTED"/>
+  <int value="16" label="APP_WINDOW_ON_BOUNDS_CHANGED"/>
+  <int value="17" label="APP_WINDOW_ON_CLOSED"/>
+  <int value="18" label="APP_WINDOW_ON_FULLSCREENED"/>
+  <int value="19" label="APP_WINDOW_ON_MAXIMIZED"/>
+  <int value="20" label="APP_WINDOW_ON_MINIMIZED"/>
+  <int value="21" label="APP_WINDOW_ON_RESTORED"/>
+  <int value="22" label="DELETED_AUDIO_MODEM_ON_RECEIVED"/>
+  <int value="23" label="DELETED_AUDIO_MODEM_ON_TRANSMIT_FAIL"/>
+  <int value="24" label="AUDIO_ON_DEVICE_CHANGED"/>
+  <int value="25" label="AUDIO_ON_DEVICES_CHANGED"/>
+  <int value="26" label="AUDIO_ON_LEVEL_CHANGED"/>
+  <int value="27" label="AUDIO_ON_MUTE_CHANGED"/>
+  <int value="28" label="AUTOFILL_PRIVATE_ON_ADDRESS_LIST_CHANGED"/>
+  <int value="29" label="AUTOFILL_PRIVATE_ON_CREDIT_CARD_LIST_CHANGED"/>
+  <int value="30" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_EVENT"/>
+  <int value="31" label="AUTOMATION_INTERNAL_ON_ACCESSIBILITY_TREE_DESTROYED"/>
+  <int value="32" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_VALUE_CHANGED"/>
+  <int value="33" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_VALUE_CHANGED"/>
+  <int value="34" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_ADDED"/>
+  <int value="35" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_CHANGED"/>
+  <int value="36" label="BLUETOOTH_LOW_ENERGY_ON_SERVICE_REMOVED"/>
+  <int value="37" label="BLUETOOTH_ON_ADAPTER_STATE_CHANGED"/>
+  <int value="38" label="BLUETOOTH_ON_DEVICE_ADDED"/>
+  <int value="39" label="BLUETOOTH_ON_DEVICE_CHANGED"/>
+  <int value="40" label="BLUETOOTH_ON_DEVICE_REMOVED"/>
+  <int value="41" label="BLUETOOTH_PRIVATE_ON_PAIRING"/>
+  <int value="42" label="BLUETOOTH_SOCKET_ON_ACCEPT"/>
+  <int value="43" label="BLUETOOTH_SOCKET_ON_ACCEPT_ERROR"/>
+  <int value="44" label="BLUETOOTH_SOCKET_ON_RECEIVE"/>
+  <int value="45" label="BLUETOOTH_SOCKET_ON_RECEIVE_ERROR"/>
+  <int value="46" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_ENTER"/>
+  <int value="47" label="BOOKMARK_MANAGER_PRIVATE_ON_DRAG_LEAVE"/>
+  <int value="48" label="BOOKMARK_MANAGER_PRIVATE_ON_DROP"/>
+  <int value="49" label="BOOKMARK_MANAGER_PRIVATE_ON_META_INFO_CHANGED"/>
+  <int value="50" label="BOOKMARKS_ON_CHANGED"/>
+  <int value="51" label="BOOKMARKS_ON_CHILDREN_REORDERED"/>
+  <int value="52" label="BOOKMARKS_ON_CREATED"/>
+  <int value="53" label="BOOKMARKS_ON_IMPORT_BEGAN"/>
+  <int value="54" label="BOOKMARKS_ON_IMPORT_ENDED"/>
+  <int value="55" label="BOOKMARKS_ON_MOVED"/>
+  <int value="56" label="BOOKMARKS_ON_REMOVED"/>
+  <int value="57" label="BRAILLE_DISPLAY_PRIVATE_ON_DISPLAY_STATE_CHANGED"/>
+  <int value="58" label="BRAILLE_DISPLAY_PRIVATE_ON_KEY_EVENT"/>
+  <int value="59" label="BROWSER_ACTION_ON_CLICKED"/>
+  <int value="60" label="CAST_STREAMING_RTP_STREAM_ON_ERROR"/>
+  <int value="61" label="CAST_STREAMING_RTP_STREAM_ON_STARTED"/>
+  <int value="62" label="CAST_STREAMING_RTP_STREAM_ON_STOPPED"/>
+  <int value="63" label="COMMANDS_ON_COMMAND"/>
+  <int value="64" label="CONTEXT_MENUS_INTERNAL_ON_CLICKED"/>
+  <int value="65" label="CONTEXT_MENUS_ON_CLICKED"/>
+  <int value="66" label="COOKIES_ON_CHANGED"/>
+  <int value="67" label="DELETED_COPRESENCE_ON_MESSAGES_RECEIVED"/>
+  <int value="68" label="DELETED_COPRESENCE_ON_STATUS_UPDATED"/>
+  <int value="69" label="DELETED_COPRESENCE_PRIVATE_ON_CONFIG_AUDIO"/>
+  <int value="70" label="DELETED_COPRESENCE_PRIVATE_ON_DECODE_SAMPLES_REQUEST"/>
+  <int value="71" label="DELETED_COPRESENCE_PRIVATE_ON_ENCODE_TOKEN_REQUEST"/>
+  <int value="72" label="DEBUGGER_ON_DETACH"/>
+  <int value="73" label="DEBUGGER_ON_EVENT"/>
+  <int value="74" label="DECLARATIVE_CONTENT_ON_PAGE_CHANGED"/>
+  <int value="75" label="DECLARATIVE_WEB_REQUEST_ON_MESSAGE"/>
+  <int value="76" label="DECLARATIVE_WEB_REQUEST_ON_REQUEST"/>
+  <int value="77" label="DEVELOPER_PRIVATE_ON_ITEM_STATE_CHANGED"/>
+  <int value="78" label="DEVELOPER_PRIVATE_ON_PROFILE_STATE_CHANGED"/>
+  <int value="79" label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_ADDED"/>
+  <int value="80"
+      label="DEVTOOLS_INSPECTED_WINDOW_ON_RESOURCE_CONTENT_COMMITTED"/>
+  <int value="81" label="DEVTOOLS_NETWORK_ON_NAVIGATED"/>
+  <int value="82" label="DEVTOOLS_NETWORK_ON_REQUEST_FINISHED"/>
+  <int value="83" label="DOWNLOADS_ON_CHANGED"/>
+  <int value="84" label="DOWNLOADS_ON_CREATED"/>
+  <int value="85" label="DOWNLOADS_ON_DETERMINING_FILENAME"/>
+  <int value="86" label="DOWNLOADS_ON_ERASED"/>
+  <int value="87" label="EASY_UNLOCK_PRIVATE_ON_START_AUTO_PAIRING"/>
+  <int value="88" label="EASY_UNLOCK_PRIVATE_ON_USER_INFO_UPDATED"/>
+  <int value="89" label="EXPERIENCE_SAMPLING_PRIVATE_ON_DECISION"/>
+  <int value="90" label="EXPERIENCE_SAMPLING_PRIVATE_ON_DISPLAYED"/>
+  <int value="91" label="EXPERIMENTAL_DEVTOOLS_CONSOLE_ON_MESSAGE_ADDED"/>
+  <int value="92" label="EXTENSION_ON_REQUEST"/>
+  <int value="93" label="EXTENSION_ON_REQUEST_EXTERNAL"/>
+  <int value="94" label="EXTENSION_OPTIONS_INTERNAL_ON_CLOSE"/>
+  <int value="95" label="EXTENSION_OPTIONS_INTERNAL_ON_LOAD"/>
+  <int value="96" label="EXTENSION_OPTIONS_INTERNAL_ON_PREFERRED_SIZE_CHANGED"/>
+  <int value="97" label="FEEDBACK_PRIVATE_ON_FEEDBACK_REQUESTED"/>
+  <int value="98" label="FILE_BROWSER_HANDLER_ON_EXECUTE"/>
+  <int value="99" label="FILE_MANAGER_PRIVATE_ON_COPY_PROGRESS"/>
+  <int value="100" label="FILE_MANAGER_PRIVATE_ON_DEVICE_CHANGED"/>
+  <int value="101" label="FILE_MANAGER_PRIVATE_ON_DIRECTORY_CHANGED"/>
+  <int value="102"
+      label="FILE_MANAGER_PRIVATE_ON_DRIVE_CONNECTION_STATUS_CHANGED"/>
+  <int value="103" label="FILE_MANAGER_PRIVATE_ON_DRIVE_SYNC_ERROR"/>
+  <int value="104" label="FILE_MANAGER_PRIVATE_ON_FILE_TRANSFERS_UPDATED"/>
+  <int value="105" label="FILE_MANAGER_PRIVATE_ON_MOUNT_COMPLETED"/>
+  <int value="106" label="FILE_MANAGER_PRIVATE_ON_PREFERENCES_CHANGED"/>
+  <int value="107" label="FILE_SYSTEM_ON_VOLUME_LIST_CHANGED"/>
+  <int value="108" label="FILE_SYSTEM_PROVIDER_ON_ABORT_REQUESTED"/>
+  <int value="109" label="FILE_SYSTEM_PROVIDER_ON_ADD_WATCHER_REQUESTED"/>
+  <int value="110" label="FILE_SYSTEM_PROVIDER_ON_CLOSE_FILE_REQUESTED"/>
+  <int value="111" label="FILE_SYSTEM_PROVIDER_ON_CONFIGURE_REQUESTED"/>
+  <int value="112" label="FILE_SYSTEM_PROVIDER_ON_COPY_ENTRY_REQUESTED"/>
+  <int value="113" label="FILE_SYSTEM_PROVIDER_ON_CREATE_DIRECTORY_REQUESTED"/>
+  <int value="114" label="FILE_SYSTEM_PROVIDER_ON_CREATE_FILE_REQUESTED"/>
+  <int value="115" label="FILE_SYSTEM_PROVIDER_ON_DELETE_ENTRY_REQUESTED"/>
+  <int value="116" label="FILE_SYSTEM_PROVIDER_ON_GET_METADATA_REQUESTED"/>
+  <int value="117" label="FILE_SYSTEM_PROVIDER_ON_MOUNT_REQUESTED"/>
+  <int value="118" label="FILE_SYSTEM_PROVIDER_ON_MOVE_ENTRY_REQUESTED"/>
+  <int value="119" label="FILE_SYSTEM_PROVIDER_ON_OPEN_FILE_REQUESTED"/>
+  <int value="120" label="FILE_SYSTEM_PROVIDER_ON_READ_DIRECTORY_REQUESTED"/>
+  <int value="121" label="FILE_SYSTEM_PROVIDER_ON_READ_FILE_REQUESTED"/>
+  <int value="122" label="FILE_SYSTEM_PROVIDER_ON_REMOVE_WATCHER_REQUESTED"/>
+  <int value="123" label="FILE_SYSTEM_PROVIDER_ON_TRUNCATE_REQUESTED"/>
+  <int value="124" label="FILE_SYSTEM_PROVIDER_ON_UNMOUNT_REQUESTED"/>
+  <int value="125" label="FILE_SYSTEM_PROVIDER_ON_WRITE_FILE_REQUESTED"/>
+  <int value="126" label="FONT_SETTINGS_ON_DEFAULT_FIXED_FONT_SIZE_CHANGED"/>
+  <int value="127" label="FONT_SETTINGS_ON_DEFAULT_FONT_SIZE_CHANGED"/>
+  <int value="128" label="FONT_SETTINGS_ON_FONT_CHANGED"/>
+  <int value="129" label="FONT_SETTINGS_ON_MINIMUM_FONT_SIZE_CHANGED"/>
+  <int value="130" label="GCD_PRIVATE_ON_DEVICE_REMOVED"/>
+  <int value="131" label="GCD_PRIVATE_ON_DEVICE_STATE_CHANGED"/>
+  <int value="132" label="GCM_ON_MESSAGE"/>
+  <int value="133" label="GCM_ON_MESSAGES_DELETED"/>
+  <int value="134" label="GCM_ON_SEND_ERROR"/>
+  <int value="135" label="HANGOUTS_PRIVATE_ON_HANGOUT_REQUESTED_DEPRECATED"/>
+  <int value="136" label="HID_ON_DEVICE_ADDED"/>
+  <int value="137" label="HID_ON_DEVICE_REMOVED"/>
+  <int value="138" label="HISTORY_ON_VISITED"/>
+  <int value="139" label="HISTORY_ON_VISIT_REMOVED"/>
+  <int value="140" label="HOTWORD_PRIVATE_ON_DELETE_SPEAKER_MODEL"/>
+  <int value="141" label="HOTWORD_PRIVATE_ON_ENABLED_CHANGED"/>
+  <int value="142" label="HOTWORD_PRIVATE_ON_FINALIZE_SPEAKER_MODEL"/>
+  <int value="143" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_REQUESTED"/>
+  <int value="144" label="HOTWORD_PRIVATE_ON_HOTWORD_SESSION_STOPPED"/>
+  <int value="145" label="HOTWORD_PRIVATE_ON_HOTWORD_TRIGGERED"/>
+  <int value="146" label="HOTWORD_PRIVATE_ON_MICROPHONE_STATE_CHANGED"/>
+  <int value="147" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_EXISTS"/>
+  <int value="148" label="HOTWORD_PRIVATE_ON_SPEAKER_MODEL_SAVED"/>
+  <int value="149" label="IDENTITY_ON_SIGN_IN_CHANGED"/>
+  <int value="150" label="IDENTITY_PRIVATE_ON_WEB_FLOW_REQUEST"/>
+  <int value="151" label="IDLE_ON_STATE_CHANGED"/>
+  <int value="152" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_INSERTED"/>
+  <int value="153" label="IMAGE_WRITER_PRIVATE_ON_DEVICE_REMOVED"/>
+  <int value="154" label="IMAGE_WRITER_PRIVATE_ON_WRITE_COMPLETE"/>
+  <int value="155" label="IMAGE_WRITER_PRIVATE_ON_WRITE_ERROR"/>
+  <int value="156" label="IMAGE_WRITER_PRIVATE_ON_WRITE_PROGRESS"/>
+  <int value="157" label="INPUT_IME_ON_ACTIVATE"/>
+  <int value="158" label="INPUT_IME_ON_BLUR"/>
+  <int value="159" label="INPUT_IME_ON_CANDIDATE_CLICKED"/>
+  <int value="160" label="INPUT_IME_ON_DEACTIVATED"/>
+  <int value="161" label="INPUT_IME_ON_FOCUS"/>
+  <int value="162" label="INPUT_IME_ON_INPUT_CONTEXT_UPDATE"/>
+  <int value="163" label="INPUT_IME_ON_KEY_EVENT"/>
+  <int value="164" label="INPUT_IME_ON_MENU_ITEM_ACTIVATED"/>
+  <int value="165" label="INPUT_IME_ON_RESET"/>
+  <int value="166" label="INPUT_IME_ON_SURROUNDING_TEXT_CHANGED"/>
+  <int value="167" label="INPUT_METHOD_PRIVATE_ON_CHANGED"/>
+  <int value="168" label="INPUT_METHOD_PRIVATE_ON_COMPOSITION_BOUNDS_CHANGED"/>
+  <int value="169" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_CHANGED"/>
+  <int value="170" label="INPUT_METHOD_PRIVATE_ON_DICTIONARY_LOADED"/>
+  <int value="171" label="INSTANCE_ID_ON_TOKEN_REFRESH"/>
+  <int value="172" label="DELETED_LOCATION_ON_LOCATION_ERROR"/>
+  <int value="173" label="DELETED_LOCATION_ON_LOCATION_UPDATE"/>
+  <int value="174" label="LOG_PRIVATE_ON_CAPTURED_EVENTS"/>
+  <int value="175" label="MANAGEMENT_ON_DISABLED"/>
+  <int value="176" label="MANAGEMENT_ON_ENABLED"/>
+  <int value="177" label="MANAGEMENT_ON_INSTALLED"/>
+  <int value="178" label="MANAGEMENT_ON_UNINSTALLED"/>
+  <int value="179" label="MDNS_ON_SERVICE_LIST"/>
+  <int value="180" label="MEDIA_GALLERIES_ON_GALLERY_CHANGED"/>
+  <int value="181" label="MEDIA_GALLERIES_ON_SCAN_PROGRESS"/>
+  <int value="182" label="MEDIA_PLAYER_PRIVATE_ON_NEXT_TRACK"/>
+  <int value="183" label="MEDIA_PLAYER_PRIVATE_ON_PREV_TRACK"/>
+  <int value="184" label="MEDIA_PLAYER_PRIVATE_ON_TOGGLE_PLAY_STATE"/>
+  <int value="185" label="NETWORKING_CONFIG_ON_CAPTIVE_PORTAL_DETECTED"/>
+  <int value="186" label="NETWORKING_PRIVATE_ON_DEVICE_STATE_LIST_CHANGED"/>
+  <int value="187" label="NETWORKING_PRIVATE_ON_NETWORK_LIST_CHANGED"/>
+  <int value="188" label="NETWORKING_PRIVATE_ON_NETWORKS_CHANGED"/>
+  <int value="189" label="NETWORKING_PRIVATE_ON_PORTAL_DETECTION_COMPLETED"/>
+  <int value="190" label="NOTIFICATION_PROVIDER_ON_CLEARED"/>
+  <int value="191" label="NOTIFICATION_PROVIDER_ON_CREATED"/>
+  <int value="192" label="NOTIFICATION_PROVIDER_ON_UPDATED"/>
+  <int value="193" label="NOTIFICATIONS_ON_BUTTON_CLICKED"/>
+  <int value="194" label="NOTIFICATIONS_ON_CLICKED"/>
+  <int value="195" label="NOTIFICATIONS_ON_CLOSED"/>
+  <int value="196" label="NOTIFICATIONS_ON_PERMISSION_LEVEL_CHANGED"/>
+  <int value="197" label="NOTIFICATIONS_ON_SHOW_SETTINGS"/>
+  <int value="198" label="OMNIBOX_ON_INPUT_CANCELLED"/>
+  <int value="199" label="OMNIBOX_ON_INPUT_CHANGED"/>
+  <int value="200" label="OMNIBOX_ON_INPUT_ENTERED"/>
+  <int value="201" label="OMNIBOX_ON_INPUT_STARTED"/>
+  <int value="202" label="PAGE_ACTION_ON_CLICKED"/>
+  <int value="203"
+      label="PASSWORDS_PRIVATE_ON_PASSWORD_EXCEPTIONS_LIST_CHANGED"/>
+  <int value="204" label="PASSWORDS_PRIVATE_ON_PLAINTEXT_PASSWORD_RETRIEVED"/>
+  <int value="205" label="PASSWORDS_PRIVATE_ON_SAVED_PASSWORDS_LIST_CHANGED"/>
+  <int value="206" label="PERMISSIONS_ON_ADDED"/>
+  <int value="207" label="PERMISSIONS_ON_REMOVED"/>
+  <int value="208" label="PRINTER_PROVIDER_ON_GET_CAPABILITY_REQUESTED"/>
+  <int value="209" label="PRINTER_PROVIDER_ON_GET_PRINTERS_REQUESTED"/>
+  <int value="210" label="PRINTER_PROVIDER_ON_GET_USB_PRINTER_INFO_REQUESTED"/>
+  <int value="211" label="PRINTER_PROVIDER_ON_PRINT_REQUESTED"/>
+  <int value="212" label="PROCESSES_ON_CREATED"/>
+  <int value="213" label="PROCESSES_ON_EXITED"/>
+  <int value="214" label="PROCESSES_ON_UNRESPONSIVE"/>
+  <int value="215" label="PROCESSES_ON_UPDATED"/>
+  <int value="216" label="PROCESSES_ON_UPDATED_WITH_MEMORY"/>
+  <int value="217" label="PROXY_ON_PROXY_ERROR"/>
+  <int value="218" label="RUNTIME_ON_BROWSER_UPDATE_AVAILABLE"/>
+  <int value="219" label="RUNTIME_ON_CONNECT"/>
+  <int value="220" label="RUNTIME_ON_CONNECT_EXTERNAL"/>
+  <int value="221" label="RUNTIME_ON_INSTALLED"/>
+  <int value="222" label="RUNTIME_ON_MESSAGE"/>
+  <int value="223" label="RUNTIME_ON_MESSAGE_EXTERNAL"/>
+  <int value="224" label="RUNTIME_ON_RESTART_REQUIRED"/>
+  <int value="225" label="RUNTIME_ON_STARTUP"/>
+  <int value="226" label="RUNTIME_ON_SUSPEND"/>
+  <int value="227" label="RUNTIME_ON_SUSPEND_CANCELED"/>
+  <int value="228" label="RUNTIME_ON_UPDATE_AVAILABLE"/>
+  <int value="229" label="SEARCH_ENGINES_PRIVATE_ON_SEARCH_ENGINES_CHANGED"/>
+  <int value="230" label="SERIAL_ON_RECEIVE"/>
+  <int value="231" label="SERIAL_ON_RECEIVE_ERROR"/>
+  <int value="232" label="SESSIONS_ON_CHANGED"/>
+  <int value="233" label="SETTINGS_PRIVATE_ON_PREFS_CHANGED"/>
+  <int value="234" label="SIGNED_IN_DEVICES_ON_DEVICE_INFO_CHANGE"/>
+  <int value="235" label="SOCKETS_TCP_ON_RECEIVE"/>
+  <int value="236" label="SOCKETS_TCP_ON_RECEIVE_ERROR"/>
+  <int value="237" label="SOCKETS_TCP_SERVER_ON_ACCEPT"/>
+  <int value="238" label="SOCKETS_TCP_SERVER_ON_ACCEPT_ERROR"/>
+  <int value="239" label="SOCKETS_UDP_ON_RECEIVE"/>
+  <int value="240" label="SOCKETS_UDP_ON_RECEIVE_ERROR"/>
+  <int value="241" label="STORAGE_ON_CHANGED"/>
+  <int value="242" label="STREAMS_PRIVATE_ON_EXECUTE_MIME_TYPE_HANDLER"/>
+  <int value="243" label="SYNC_FILE_SYSTEM_ON_FILE_STATUS_CHANGED"/>
+  <int value="244" label="SYNC_FILE_SYSTEM_ON_SERVICE_STATUS_CHANGED"/>
+  <int value="245" label="SYSTEM_DISPLAY_ON_DISPLAY_CHANGED"/>
+  <int value="246" label="SYSTEM_INDICATOR_ON_CLICKED"/>
+  <int value="247" label="SYSTEM_PRIVATE_ON_BRIGHTNESS_CHANGED"/>
+  <int value="248" label="SYSTEM_PRIVATE_ON_SCREEN_UNLOCKED"/>
+  <int value="249" label="SYSTEM_PRIVATE_ON_VOLUME_CHANGED"/>
+  <int value="250" label="SYSTEM_PRIVATE_ON_WOKE_UP"/>
+  <int value="251" label="SYSTEM_STORAGE_ON_ATTACHED"/>
+  <int value="252" label="SYSTEM_STORAGE_ON_DETACHED"/>
+  <int value="253" label="TAB_CAPTURE_ON_STATUS_CHANGED"/>
+  <int value="254" label="TABS_ON_ACTIVATED"/>
+  <int value="255" label="TABS_ON_ACTIVE_CHANGED"/>
+  <int value="256" label="TABS_ON_ATTACHED"/>
+  <int value="257" label="TABS_ON_CREATED"/>
+  <int value="258" label="TABS_ON_DETACHED"/>
+  <int value="259" label="TABS_ON_HIGHLIGHT_CHANGED"/>
+  <int value="260" label="TABS_ON_HIGHLIGHTED"/>
+  <int value="261" label="TABS_ON_MOVED"/>
+  <int value="262" label="TABS_ON_REMOVED"/>
+  <int value="263" label="TABS_ON_REPLACED"/>
+  <int value="264" label="TABS_ON_SELECTION_CHANGED"/>
+  <int value="265" label="TABS_ON_UPDATED"/>
+  <int value="266" label="TABS_ON_ZOOM_CHANGE"/>
+  <int value="267" label="TERMINAL_PRIVATE_ON_PROCESS_OUTPUT"/>
+  <int value="268" label="TEST_ON_MESSAGE"/>
+  <int value="269" label="TTS_ENGINE_ON_PAUSE"/>
+  <int value="270" label="TTS_ENGINE_ON_RESUME"/>
+  <int value="271" label="TTS_ENGINE_ON_SPEAK"/>
+  <int value="272" label="TTS_ENGINE_ON_STOP"/>
+  <int value="273" label="USB_ON_DEVICE_ADDED"/>
+  <int value="274" label="USB_ON_DEVICE_REMOVED"/>
+  <int value="275" label="VIRTUAL_KEYBOARD_PRIVATE_ON_BOUNDS_CHANGED"/>
+  <int value="276" label="VIRTUAL_KEYBOARD_PRIVATE_ON_TEXT_INPUT_BOX_FOCUSED"/>
+  <int value="277" label="VPN_PROVIDER_ON_CONFIG_CREATED"/>
+  <int value="278" label="VPN_PROVIDER_ON_CONFIG_REMOVED"/>
+  <int value="279" label="VPN_PROVIDER_ON_PACKET_RECEIVED"/>
+  <int value="280" label="VPN_PROVIDER_ON_PLATFORM_MESSAGE"/>
+  <int value="281" label="VPN_PROVIDER_ON_UI_EVENT"/>
+  <int value="282" label="WALLPAPER_PRIVATE_ON_WALLPAPER_CHANGED_BY_3RD_PARTY"/>
+  <int value="283" label="WEB_NAVIGATION_ON_BEFORE_NAVIGATE"/>
+  <int value="284" label="WEB_NAVIGATION_ON_COMMITTED"/>
+  <int value="285" label="WEB_NAVIGATION_ON_COMPLETED"/>
+  <int value="286" label="WEB_NAVIGATION_ON_CREATED_NAVIGATION_TARGET"/>
+  <int value="287" label="WEB_NAVIGATION_ON_DOM_CONTENT_LOADED"/>
+  <int value="288" label="WEB_NAVIGATION_ON_ERROR_OCCURRED"/>
+  <int value="289" label="WEB_NAVIGATION_ON_HISTORY_STATE_UPDATED"/>
+  <int value="290" label="WEB_NAVIGATION_ON_REFERENCE_FRAGMENT_UPDATED"/>
+  <int value="291" label="WEB_NAVIGATION_ON_TAB_REPLACED"/>
+  <int value="292" label="WEB_REQUEST_ON_AUTH_REQUIRED"/>
+  <int value="293" label="WEB_REQUEST_ON_BEFORE_REDIRECT"/>
+  <int value="294" label="WEB_REQUEST_ON_BEFORE_REQUEST"/>
+  <int value="295" label="WEB_REQUEST_ON_BEFORE_SEND_HEADERS"/>
+  <int value="296" label="WEB_REQUEST_ON_COMPLETED"/>
+  <int value="297" label="WEB_REQUEST_ON_ERROR_OCCURRED"/>
+  <int value="298" label="WEB_REQUEST_ON_HEADERS_RECEIVED"/>
+  <int value="299" label="WEB_REQUEST_ON_RESPONSE_STARTED"/>
+  <int value="300" label="WEB_REQUEST_ON_SEND_HEADERS"/>
+  <int value="301" label="WEBRTC_AUDIO_PRIVATE_ON_SINKS_CHANGED"/>
+  <int value="302" label="WEBSTORE_ON_DOWNLOAD_PROGRESS"/>
+  <int value="303" label="WEBSTORE_ON_INSTALL_STAGE_CHANGED"/>
+  <int value="304" label="WEBSTORE_WIDGET_PRIVATE_ON_SHOW_WIDGET"/>
+  <int value="305" label="WEBVIEW_TAG_CLOSE"/>
+  <int value="306" label="WEBVIEW_TAG_CONSOLEMESSAGE"/>
+  <int value="307" label="WEBVIEW_TAG_CONTENTLOAD"/>
+  <int value="308" label="WEBVIEW_TAG_DIALOG"/>
+  <int value="309" label="WEBVIEW_TAG_EXIT"/>
+  <int value="310" label="WEBVIEW_TAG_FINDUPDATE"/>
+  <int value="311" label="WEBVIEW_TAG_LOADABORT"/>
+  <int value="312" label="WEBVIEW_TAG_LOADCOMMIT"/>
+  <int value="313" label="WEBVIEW_TAG_LOADREDIRECT"/>
+  <int value="314" label="WEBVIEW_TAG_LOADSTART"/>
+  <int value="315" label="WEBVIEW_TAG_LOADSTOP"/>
+  <int value="316" label="WEBVIEW_TAG_NEWWINDOW"/>
+  <int value="317" label="WEBVIEW_TAG_PERMISSIONREQUEST"/>
+  <int value="318" label="WEBVIEW_TAG_RESPONSIVE"/>
+  <int value="319" label="WEBVIEW_TAG_SIZECHANGED"/>
+  <int value="320" label="WEBVIEW_TAG_UNRESPONSIVE"/>
+  <int value="321" label="WEBVIEW_TAG_ZOOMCHANGE"/>
+  <int value="322" label="WINDOWS_ON_CREATED"/>
+  <int value="323" label="WINDOWS_ON_FOCUS_CHANGED"/>
+  <int value="324" label="WINDOWS_ON_REMOVED"/>
+  <int value="325" label="FILE_SYSTEM_PROVIDER_ON_EXECUTE_ACTION_REQUESTED"/>
+  <int value="326" label="FILE_SYSTEM_PROVIDER_ON_GET_ACTIONS_REQUESTED"/>
+  <int value="327" label="LAUNCHER_SEARCH_PROVIDER_ON_QUERY_STARTED"/>
+  <int value="328" label="LAUNCHER_SEARCH_PROVIDER_ON_QUERY_ENDED"/>
+  <int value="329" label="LAUNCHER_SEARCH_PROVIDER_ON_OPEN_RESULT"/>
+  <int value="330" label="CHROME_WEB_VIEW_INTERNAL_ON_CLICKED"/>
+  <int value="331" label="WEB_VIEW_INTERNAL_CONTEXT_MENUS"/>
+  <int value="332" label="CONTEXT_MENUS"/>
+  <int value="333" label="TTS_ON_EVENT"/>
+  <int value="334" label="LAUNCHER_PAGE_ON_TRANSITION_CHANGED"/>
+  <int value="335" label="LAUNCHER_PAGE_ON_POP_SUBPAGE"/>
+  <int value="336" label="DIAL_ON_DEVICE_LIST"/>
+  <int value="337" label="DIAL_ON_ERROR"/>
+  <int value="338" label="CAST_CHANNEL_ON_MESSAGE"/>
+  <int value="339" label="CAST_CHANNEL_ON_ERROR"/>
+  <int value="340" label="SCREENLOCK_PRIVATE_ON_CHANGED"/>
+  <int value="341" label="SCREENLOCK_PRIVATE_ON_AUTH_ATTEMPTED"/>
+  <int value="342" label="TYPES_CHROME_SETTING_ON_CHANGE"/>
+  <int value="343" label="TYPES_PRIVATE_CHROME_DIRECT_SETTING_ON_CHANGE"/>
+  <int value="344" label="WEB_VIEW_INTERNAL_ON_MESSAGE"/>
+  <int value="345" label="EXTENSION_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
+  <int value="346" label="RUNTIME_ON_REQUEST"/>
+  <int value="347" label="RUNTIME_ON_REQUEST_EXTERNAL"/>
+  <int value="348" label="CHROME_WEB_VIEW_INTERNAL_ON_CONTEXT_MENU_SHOW"/>
+  <int value="349" label="WEB_VIEW_INTERNAL_ON_BEFORE_REQUEST"/>
+  <int value="350" label="WEB_VIEW_INTERNAL_ON_BEFORE_SEND_HEADERS"/>
+  <int value="351" label="WEB_VIEW_INTERNAL_ON_CLOSE"/>
+  <int value="352" label="WEB_VIEW_INTERNAL_ON_COMPLETED"/>
+  <int value="353" label="WEB_VIEW_INTERNAL_ON_CONSOLE_MESSAGE"/>
+  <int value="354" label="WEB_VIEW_INTERNAL_ON_CONTENT_LOAD"/>
+  <int value="355" label="WEB_VIEW_INTERNAL_ON_DIALOG"/>
+  <int value="356" label="WEB_VIEW_INTERNAL_ON_DROP_LINK"/>
+  <int value="357" label="WEB_VIEW_INTERNAL_ON_EXIT"/>
+  <int value="358" label="WEB_VIEW_INTERNAL_ON_EXIT_FULLSCREEN"/>
+  <int value="359" label="WEB_VIEW_INTERNAL_ON_FIND_REPLY"/>
+  <int value="360" label="WEB_VIEW_INTERNAL_ON_FRAME_NAME_CHANGED"/>
+  <int value="361" label="WEB_VIEW_INTERNAL_ON_HEADERS_RECEIVED"/>
+  <int value="362" label="WEB_VIEW_INTERNAL_ON_LOAD_ABORT"/>
+  <int value="363" label="WEB_VIEW_INTERNAL_ON_LOAD_COMMIT"/>
+  <int value="364" label="WEB_VIEW_INTERNAL_ON_LOAD_PROGRESS"/>
+  <int value="365" label="WEB_VIEW_INTERNAL_ON_LOAD_REDIRECT"/>
+  <int value="366" label="WEB_VIEW_INTERNAL_ON_LOAD_START"/>
+  <int value="367" label="WEB_VIEW_INTERNAL_ON_LOAD_STOP"/>
+  <int value="368" label="WEB_VIEW_INTERNAL_ON_NEW_WINDOW"/>
+  <int value="369" label="WEB_VIEW_INTERNAL_ON_PERMISSION_REQUEST"/>
+  <int value="370" label="WEB_VIEW_INTERNAL_ON_RESPONSE_STARTED"/>
+  <int value="371" label="WEB_VIEW_INTERNAL_ON_RESPONSIVE"/>
+  <int value="372" label="WEB_VIEW_INTERNAL_ON_SIZE_CHANGED"/>
+  <int value="373" label="WEB_VIEW_INTERNAL_ON_UNRESPONSIVE"/>
+  <int value="374" label="WEB_VIEW_INTERNAL_ON_ZOOM_CHANGE"/>
+  <int value="375" label="GUEST_VIEW_INTERNAL_ON_RESIZE"/>
+  <int value="376" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_ADDED"/>
+  <int value="377" label="LANGUAGE_SETTINGS_PRIVATE_ON_INPUT_METHOD_REMOVED"/>
+  <int value="378"
+      label="LANGUAGE_SETTINGS_PRIVATE_ON_SPELLCHECK_DICTIONARIES_CHANGED"/>
+  <int value="379"
+      label="LANGUAGE_SETTINGS_PRIVATE_ON_CUSTOM_DICTIONARY_CHANGED"/>
+  <int value="380" label="CAST_DEVICES_PRIVATE_ON_UPDATE_DEVICES_REQUESTED"/>
+  <int value="381" label="CAST_DEVICES_PRIVATE_ON_START_CAST"/>
+  <int value="382" label="CAST_DEVICES_PRIVATE_ON_STOP_CAST"/>
+  <int value="383" label="CERTIFICATEPROVIDER_ON_CERTIFICATES_REQUESTED"/>
+  <int value="384" label="CERTIFICATEPROVIDER_ON_SIGN_DIGEST_REQUESTED"/>
+  <int value="385" label="WEB_VIEW_INTERNAL_ON_AUTH_REQUIRED"/>
+  <int value="386" label="WEB_VIEW_INTERNAL_ON_BEFORE_REDIRECT"/>
+  <int value="387" label="WEB_VIEW_INTERNAL_ON_ERROR_OCCURRED"/>
+  <int value="388" label="WEB_VIEW_INTERNAL_ON_SEND_HEADERS"/>
+  <int value="389" label="EASY_UNLOCK_PRIVATE_ON_CONNECTION_STATUS_CHANGED"/>
+  <int value="390" label="EASY_UNLOCK_PRIVATE_ON_DATA_RECEIVED"/>
+  <int value="391" label="EASY_UNLOCK_PRIVATE_ON_SEND_COMPLETED"/>
+  <int value="392" label="DISPLAY_SOURCE_ON_SINKS_UPDATED"/>
+  <int value="393" label="INPUT_IME_ON_COMPOSITION_BOUNDS_CHANGED"/>
+  <int value="394" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ACTIVATION_CHANGED"/>
+  <int value="395" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_LIST_CHANGED"/>
+  <int value="396" label="INPUT_METHOD_PRIVATE_ON_IME_MENU_ITEMS_CHANGED"/>
+  <int value="397" label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_READ_REQUEST"/>
+  <int value="398"
+      label="BLUETOOTH_LOW_ENERGY_ON_CHARACTERISTIC_WRITE_REQUEST"/>
+  <int value="399" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_READ_REQUEST"/>
+  <int value="400" label="BLUETOOTH_LOW_ENERGY_ON_DESCRIPTOR_WRITE_REQUEST"/>
+  <int value="401" label="ACCESSIBILITY_PRIVATE_ON_ACCESSIBILITY_GESTURE"/>
+  <int value="402" label="QUICK_UNLOCK_PRIVATE_ON_ACTIVE_MODES_CHANGED"/>
+  <int value="403" label="CLIPBOARD_ON_CLIPBOARD_DATA_CHANGED"/>
+  <int value="404" label="VIRTUAL_KEYBOARD_PRIVATE_ON_KEYBOARD_CLOSED"/>
+</enum>
+
+<enum name="ExtensionFileWriteResult" type="int">
+  <obsolete>
+    Deprecated 10/2013.
+  </obsolete>
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="CANT_CREATE_TEMP_CRX"/>
+  <int value="2" label="CANT_WRITE_CRX_DATA"/>
+  <int value="3" label="CANT_READ_CRX_FILE"/>
+</enum>
+
+<enum name="ExtensionFromWebstoreInconcistencyEnum" type="int">
+  <int value="0" label="Non-webstore update URL"/>
+  <int value="1" label="External install location"/>
+</enum>
+
+<enum name="ExtensionFunctions" type="int">
+<!-- Generated from extensions/browser/extension_function_histogram_value.h -->
+
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="WEBNAVIGATION_GETALLFRAMES"/>
+  <int value="2" label="BROWSINGDATA_REMOVEWEBSQL"/>
+  <int value="3" label="ALARMS_CREATE"/>
+  <int value="4" label="FILEMANAGERPRIVATEINTERNAL_REMOVEFILEWATCH"/>
+  <int value="5" label="COOKIES_GET"/>
+  <int value="6" label="FONTSETTINGS_GETMINIMUMFONTSIZE"/>
+  <int value="7" label="CHROMEOSINFOPRIVATE_GET"/>
+  <int value="8" label="BOOKMARKMANAGERPRIVATE_CUT"/>
+  <int value="9" label="TABS_CAPTUREVISIBLETAB"/>
+  <int value="10" label="MANAGEMENT_SETENABLED"/>
+  <int value="11" label="HISTORY_DELETEALL"/>
+  <int value="12" label="STORAGE_GET"/>
+  <int value="13" label="SOCKET_SETKEEPALIVE"/>
+  <int value="14" label="DOWNLOADS_CANCEL"/>
+  <int value="15" label="BOOKMARKS_CREATE"/>
+  <int value="16" label="BOOKMARKS_UPDATE"/>
+  <int value="17" label="FILEMANAGERPRIVATE_GETDRIVEFILES"/>
+  <int value="18" label="TERMINALPRIVATE_ONTERMINALRESIZE"/>
+  <int value="19" label="DELETED_FILEMANAGERPRIVATE_REQUESTDIRECTORYREFRESH"/>
+  <int value="20" label="BLUETOOTH_GETADAPTERSTATE"/>
+  <int value="21" label="FILEMANAGERPRIVATEINTERNAL_CANCELFILETRANSFERS"/>
+  <int value="22" label="FILEMANAGERPRIVATEINTERNAL_PINDRIVEFILE"/>
+  <int value="23" label="SOCKET_WRITE"/>
+  <int value="24" label="OMNIBOX_SETDEFAULTSUGGESTION"/>
+  <int value="25" label="TTS_SPEAK"/>
+  <int value="26" label="WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS"/>
+  <int value="27" label="BROWSINGDATA_REMOVEHISTORY"/>
+  <int value="28" label="DELETED_FILEMANAGERPRIVATE_ISFULLSCREEN"/>
+  <int value="29" label="AUTOTESTPRIVATE_LOGOUT"/>
+  <int value="30" label="EXPERIMENTAL_HISTORY_GETMOSTVISITED"/>
+  <int value="31" label="DELETED_BLUETOOTH_DISCONNECT"/>
+  <int value="32" label="DELETED_BLUETOOTH_SETOUTOFBANDPAIRINGDATA"/>
+  <int value="33" label="BOOKMARKMANAGERPRIVATE_CANPASTE"/>
+  <int value="34" label="AUTOTESTPRIVATE_RESTART"/>
+  <int value="35" label="USB_CLAIMINTERFACE"/>
+  <int value="36" label="MEDIAPLAYERPRIVATE_SETWINDOWHEIGHT"/>
+  <int value="37" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSINFO"/>
+  <int value="38" label="HISTORY_GETVISITS"/>
+  <int value="39" label="SOCKET_BIND"/>
+  <int value="40" label="TABS_MOVE"/>
+  <int value="41" label="SOCKET_DISCONNECT"/>
+  <int value="42" label="FILESYSTEM_GETWRITABLEENTRY"/>
+  <int value="43" label="SYNCFILESYSTEM_REQUESTFILESYSTEM"/>
+  <int value="44" label="COMMANDS_GETALL"/>
+  <int value="45" label="EXPERIMENTAL_DISCOVERY_REMOVESUGGESTION"/>
+  <int value="46" label="VIRTUALKEYBOARDPRIVATE_SENDKEYEVENT"/>
+  <int value="47" label="BOOKMARKMANAGERPRIVATE_GETSUBTREE"/>
+  <int value="48" label="DELETED_EXPERIMENTAL_RLZ_RECORDPRODUCTEVENT"/>
+  <int value="49" label="BOOKMARKS_GETRECENT"/>
+  <int value="50" label="APP_CURRENTWINDOWINTERNAL_SETBOUNDS"/>
+  <int value="51" label="CLOUDPRINTPRIVATE_SETUPCONNECTOR"/>
+  <int value="52" label="SERIAL_SETCONTROLSIGNALS"/>
+  <int value="53" label="DELETED_FILEMANAGERPRIVATE_SETLASTMODIFIED"/>
+  <int value="54" label="IDLE_SETDETECTIONINTERVAL"/>
+  <int value="55" label="FILEMANAGERPRIVATEINTERNAL_GETFILETASKS"/>
+  <int value="56" label="WEBSTOREPRIVATE_GETSTORELOGIN"/>
+  <int value="57" label="SYSTEMPRIVATE_GETINCOGNITOMODEAVAILABILITY"/>
+  <int value="58" label="IDLTEST_SENDARRAYBUFFERVIEW"/>
+  <int value="59" label="SOCKET_SETNODELAY"/>
+  <int value="60" label="APP_CURRENTWINDOWINTERNAL_SHOW"/>
+  <int value="61" label="WEBSTOREPRIVATE_GETBROWSERLOGIN"/>
+  <int value="62" label="EXPERIMENTAL_IDENTITY_GETAUTHTOKEN"/>
+  <int value="63" label="DELETED_SYSTEMINFO_DISPLAY_GETDISPLAYINFO"/>
+  <int value="64" label="BROWSINGDATA_REMOVEPLUGINDATA"/>
+  <int value="65" label="SOCKET_LISTEN"/>
+  <int value="66" label="MEDIAGALLERIES_GETMEDIAFILESYSTEMS"/>
+  <int value="67" label="DOWNLOADS_OPEN"/>
+  <int value="68" label="TABS_EXECUTESCRIPT"/>
+  <int value="69" label="SYNCFILESYSTEM_GETUSAGEANDQUOTA"/>
+  <int value="70" label="INPUTMETHODPRIVATE_GET"/>
+  <int value="71" label="USB_CLOSEDEVICE"/>
+  <int value="72" label="TTS_STOP"/>
+  <int value="73" label="DELETED_SERIAL_GETPORTS"/>
+  <int value="74" label="DELETED_FILEMANAGERPRIVATE_CLEARDRIVECACHE"/>
+  <int value="75" label="SERIAL_GETCONTROLSIGNALS"/>
+  <int value="76" label="DELETED_DEVELOPERPRIVATE_ENABLE"/>
+  <int value="77" label="FILEMANAGERPRIVATEINTERNAL_GETENTRYPROPERTIES"/>
+  <int value="78" label="USB_FINDDEVICES"/>
+  <int value="79" label="BOOKMARKMANAGERPRIVATE_DROP"/>
+  <int value="80" label="DELETED_FILEMANAGERPRIVATE_GETFILETRANSFERS"/>
+  <int value="81" label="INPUT_IME_SETMENUITEMS"/>
+  <int value="82" label="BOOKMARKS_EXPORT"/>
+  <int value="83" label="HISTORY_SEARCH"/>
+  <int value="84" label="TTSENGINE_SENDTTSEVENT"/>
+  <int value="85" label="ACCESSIBILITY_PRIVATE_GETALERTSFORTAB"/>
+  <int value="86" label="BOOKMARKS_IMPORT"/>
+  <int value="87" label="SYNCFILESYSTEM_DELETEFILESYSTEM"/>
+  <int value="88" label="DEBUGGER_SENDCOMMAND"/>
+  <int value="89" label="DEBUGGER_DETACH"/>
+  <int value="90" label="METRICSPRIVATE_RECORDSMALLCOUNT"/>
+  <int value="91" label="APP_CURRENTWINDOWINTERNAL_MINIMIZE"/>
+  <int value="92" label="DEVELOPERPRIVATE_AUTOUPDATE"/>
+  <int value="93" label="DNS_RESOLVE"/>
+  <int value="94" label="DELETED_EXPERIMENTAL_SYSTEMINFO_MEMORY_GET"/>
+  <int value="95" label="HISTORY_ADDURL"/>
+  <int value="96" label="TABS_GET"/>
+  <int value="97" label="BROWSERACTION_SETBADGETEXT"/>
+  <int value="98" label="TABS_RELOAD"/>
+  <int value="99" label="WINDOWS_CREATE"/>
+  <int value="100" label="DEVELOPERPRIVATE_LOADUNPACKED"/>
+  <int value="101" label="DELETED_DOWNLOADS_SETDESTINATION"/>
+  <int value="102" label="DELETED_EXPERIMENTAL_PROCESSES_GETPROCESSIDFORTAB"/>
+  <int value="103" label="BOOKMARKS_GETCHILDREN"/>
+  <int value="104" label="BROWSERACTION_GETTITLE"/>
+  <int value="105" label="TERMINALPRIVATE_OPENTERMINALPROCESS"/>
+  <int value="106" label="DELETED_SERIAL_CLOSE"/>
+  <int value="107" label="CONTEXTMENUS_REMOVE"/>
+  <int value="108" label="FILESYSTEM_REQUESTFILESYSTEM"/>
+  <int value="109" label="ECHOPRIVATE_GETREGISTRATIONCODE"/>
+  <int value="110" label="TABS_GETCURRENT"/>
+  <int value="111" label="FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE"/>
+  <int value="112" label="MEDIAPLAYERPRIVATE_CLOSEWINDOW"/>
+  <int value="113" label="WEBREQUESTINTERNAL_ADDEVENTLISTENER"/>
+  <int value="114" label="CLOUDPRINTPRIVATE_GETPRINTERS"/>
+  <int value="115" label="STORAGE_SET"/>
+  <int value="116" label="FONTSETTINGS_GETDEFAULTFONTSIZE"/>
+  <int value="117" label="EXTENSION_SETUPDATEURLDATA"/>
+  <int value="118" label="DELETED_SERIAL_WRITE"/>
+  <int value="119" label="IDLE_QUERYSTATE"/>
+  <int value="120" label="DELETED_EXPERIMENTAL_RLZ_GETACCESSPOINTRLZ"/>
+  <int value="121" label="WEBSTOREPRIVATE_SETSTORELOGIN"/>
+  <int value="122" label="DELETED_PAGEACTIONS_ENABLEFORTAB"/>
+  <int value="123" label="COOKIES_SET"/>
+  <int value="124" label="CONTENTSETTINGS_SET"/>
+  <int value="125" label="CONTEXTMENUS_REMOVEALL"/>
+  <int value="126" label="TABS_INSERTCSS"/>
+  <int value="127" label="WEBREQUEST_HANDLERBEHAVIORCHANGED"/>
+  <int value="128" label="INPUT_IME_SETCURSORPOSITION"/>
+  <int value="129" label="OMNIBOX_SENDSUGGESTIONS"/>
+  <int value="130" label="SYSTEMINDICATOR_ENABLE"/>
+  <int value="131" label="EVENTS_GETRULES"/>
+  <int value="132" label="BOOKMARKMANAGERPRIVATE_COPY"/>
+  <int value="133" label="SOCKET_RECVFROM"/>
+  <int value="134" label="TABS_GETALLINWINDOW"/>
+  <int value="135" label="CONTEXTMENUS_UPDATE"/>
+  <int value="136" label="BOOKMARKS_SEARCH"/>
+  <int value="137" label="EXPERIMENTAL_APP_CLEARALLNOTIFICATIONS"/>
+  <int value="138" label="DELETED_BLUETOOTH_GETLOCALOUTOFBANDPAIRINGDATA"/>
+  <int value="139" label="SYSTEMPRIVATE_GETUPDATESTATUS"/>
+  <int value="140" label="FONTSETTINGS_CLEARMINIMUMFONTSIZE"/>
+  <int value="141" label="DELETED_FILEMANAGERPRIVATE_GETFILELOCATIONS"/>
+  <int value="142" label="EXPERIMENTAL_DISCOVERY_SUGGEST"/>
+  <int value="143" label="FILEMANAGERPRIVATEINTERNAL_SETDEFAULTTASK"/>
+  <int value="144" label="BROWSERACTION_GETBADGETEXT"/>
+  <int value="145" label="APP_CURRENTWINDOWINTERNAL_HIDE"/>
+  <int value="146" label="SOCKET_CONNECT"/>
+  <int value="147" label="BOOKMARKS_GETSUBTREE"/>
+  <int value="148" label="HISTORY_DELETEURL"/>
+  <int value="149"
+      label="DELETED_EXPERIMENTAL_MEDIAGALLERIES_ASSEMBLEMEDIAFILE"/>
+  <int value="150" label="BOOKMARKMANAGERPRIVATE_STARTDRAG"/>
+  <int value="151" label="BROWSINGDATA_REMOVEPASSWORDS"/>
+  <int value="152" label="DOWNLOADS_DRAG"/>
+  <int value="153" label="INPUT_IME_SETCOMPOSITION"/>
+  <int value="154" label="METRICSPRIVATE_RECORDUSERACTION"/>
+  <int value="155" label="USB_RELEASEINTERFACE"/>
+  <int value="156" label="PAGEACTION_GETPOPUP"/>
+  <int value="157" label="DELETED_SCRIPTBADGE_GETATTENTION"/>
+  <int value="158" label="FONTSETTINGS_GETFONTLIST"/>
+  <int value="159" label="PERMISSIONS_CONTAINS"/>
+  <int value="160" label="DELETED_SCRIPTBADGE_GETPOPUP"/>
+  <int value="161" label="ACCESSIBILITY_PRIVATE_GETFOCUSEDCONTROL"/>
+  <int value="162" label="DEVELOPERPRIVATE_GETSTRINGS"/>
+  <int value="163" label="METRICSPRIVATE_RECORDMEDIUMCOUNT"/>
+  <int value="164" label="MANAGEMENT_GET"/>
+  <int value="165" label="PERMISSIONS_GETALL"/>
+  <int value="166" label="DOWNLOADS_SHOW"/>
+  <int value="167" label="DELETED_EXPERIMENTAL_RLZ_CLEARPRODUCTSTATE"/>
+  <int value="168" label="TABS_REMOVE"/>
+  <int value="169" label="MANAGEMENT_GETPERMISSIONWARNINGSBYID"/>
+  <int value="170" label="WINDOWS_GET"/>
+  <int value="171" label="FILEMANAGERPRIVATEINTERNAL_EXECUTETASK"/>
+  <int value="172" label="TTS_GETVOICES"/>
+  <int value="173" label="MANAGEMENT_GETALL"/>
+  <int value="174" label="MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST"/>
+  <int value="175" label="APP_CURRENTWINDOWINTERNAL_CLEARATTENTION"/>
+  <int value="176" label="AUTOTESTPRIVATE_SHUTDOWN"/>
+  <int value="177" label="FONTSETTINGS_CLEARDEFAULTFONTSIZE"/>
+  <int value="178" label="BOOKMARKS_GETTREE"/>
+  <int value="179" label="FILEMANAGERPRIVATE_SELECTFILES"/>
+  <int value="180" label="RUNTIME_GETBACKGROUNDPAGE"/>
+  <int value="181" label="DELETED_EXPERIMENTAL_RECORD_REPLAYURLS"/>
+  <int value="182" label="WEBSTOREPRIVATE_COMPLETEINSTALL"/>
+  <int value="183" label="DELETED_EXPERIMENTAL_SPEECHINPUT_START"/>
+  <int value="184" label="COOKIES_GETALL"/>
+  <int value="185" label="DOWNLOADS_GETFILEICON"/>
+  <int value="186" label="PAGEACTION_GETTITLE"/>
+  <int value="187" label="BROWSINGDATA_REMOVE"/>
+  <int value="188" label="DELETED_SERIAL_OPEN"/>
+  <int value="189" label="FILESYSTEM_GETDISPLAYPATH"/>
+  <int value="190" label="FILEMANAGERPRIVATE_FORMATVOLUME"/>
+  <int value="191" label="BOOKMARKS_GET"/>
+  <int value="192" label="DELETED_MANAGEDMODEPRIVATE_GET"/>
+  <int value="193" label="ALARMS_CLEAR"/>
+  <int value="194" label="SYNCFILESYSTEM_GETFILESYNCSTATUS"/>
+  <int value="195" label="SOCKET_GETINFO"/>
+  <int value="196" label="WEBSTOREPRIVATE_INSTALLBUNDLE"/>
+  <int value="197" label="BROWSERACTION_ENABLE"/>
+  <int value="198" label="METRICSPRIVATE_RECORDMEDIUMTIME"/>
+  <int value="199" label="PAGEACTION_SETTITLE"/>
+  <int value="200" label="CLOUDPRINTPRIVATE_GETHOSTNAME"/>
+  <int value="201" label="CONTENTSETTINGS_GETRESOURCEIDENTIFIERS"/>
+  <int value="202" label="SOCKET_CREATE"/>
+  <int value="203" label="DEVELOPERPRIVATE_RELOAD"/>
+  <int value="204" label="FILEMANAGERPRIVATE_GETVOLUMEMETADATALIST"/>
+  <int value="205" label="APP_RUNTIME_POSTINTENTRESPONSE"/>
+  <int value="206" label="DELETED_MANAGEDMODEPRIVATE_SETPOLICY"/>
+  <int value="207" label="WEBSTOREPRIVATE_BEGININSTALLWITHMANIFEST3"/>
+  <int value="208" label="WALLPAPERPRIVATE_SETWALLPAPER"/>
+  <int value="209" label="USB_CONTROLTRANSFER"/>
+  <int value="210" label="DELETED_EXPERIMENTAL_SPEECHINPUT_STOP"/>
+  <int value="211" label="USB_BULKTRANSFER"/>
+  <int value="212" label="DELETED_FILEMANAGERPRIVATE_GETVOLUMEMETADATA"/>
+  <int value="213" label="PAGECAPTURE_SAVEASMHTML"/>
+  <int value="214" label="EXTENSION_ISALLOWEDINCOGNITOACCESS"/>
+  <int value="215" label="BROWSINGDATA_REMOVEAPPCACHE"/>
+  <int value="216" label="APP_CURRENTWINDOWINTERNAL_DRAWATTENTION"/>
+  <int value="217" label="METRICSPRIVATE_RECORDCOUNT"/>
+  <int value="218" label="USB_INTERRUPTTRANSFER"/>
+  <int value="219" label="TYPES_CHROMESETTING_CLEAR"/>
+  <int value="220" label="INPUT_IME_COMMITTEXT"/>
+  <int value="221" label="IDLTEST_SENDARRAYBUFFER"/>
+  <int value="222" label="WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS"/>
+  <int value="223" label="SOCKET_ACCEPT"/>
+  <int value="224" label="WEBNAVIGATION_GETFRAME"/>
+  <int value="225" label="EXPERIMENTAL_POWER_RELEASEKEEPAWAKE"/>
+  <int value="226" label="APP_CURRENTWINDOWINTERNAL_SETICON"/>
+  <int value="227" label="PUSHMESSAGING_GETCHANNELID"/>
+  <int value="228" label="EXPERIMENTAL_INFOBARS_SHOW"/>
+  <int value="229" label="INPUT_IME_SETCANDIDATEWINDOWPROPERTIES"/>
+  <int value="230" label="METRICSPRIVATE_RECORDPERCENTAGE"/>
+  <int value="231" label="TYPES_CHROMESETTING_GET"/>
+  <int value="232" label="WINDOWS_GETLASTFOCUSED"/>
+  <int value="233" label="DELETED_MANAGEDMODEPRIVATE_GETPOLICY"/>
+  <int value="234" label="STORAGE_CLEAR"/>
+  <int value="235" label="STORAGE_GETBYTESINUSE"/>
+  <int value="236" label="TABS_QUERY"/>
+  <int value="237" label="PAGEACTION_SETPOPUP"/>
+  <int value="238" label="DEVELOPERPRIVATE_INSPECT"/>
+  <int value="239" label="DOWNLOADS_SEARCH"/>
+  <int value="240" label="FONTSETTINGS_CLEARFONT"/>
+  <int value="241" label="WINDOWS_UPDATE"/>
+  <int value="242" label="BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS"/>
+  <int value="243" label="SERIAL_FLUSH"/>
+  <int value="244" label="BROWSERACTION_SETTITLE"/>
+  <int value="245" label="BOOKMARKMANAGERPRIVATE_CANEDIT"/>
+  <int value="246" label="WALLPAPERPRIVATE_SETCUSTOMWALLPAPER"/>
+  <int value="247" label="BOOKMARKS_REMOVE"/>
+  <int value="248" label="INPUT_IME_SETCANDIDATES"/>
+  <int value="249" label="TERMINALPRIVATE_CLOSETERMINALPROCESS"/>
+  <int value="250" label="HISTORY_DELETERANGE"/>
+  <int value="251" label="IDLTEST_GETARRAYBUFFER"/>
+  <int value="252" label="TERMINALPRIVATE_SENDINPUT"/>
+  <int value="253" label="TABS_HIGHLIGHT"/>
+  <int value="254" label="BLUETOOTH_STARTDISCOVERY"/>
+  <int value="255" label="FILEMANAGERPRIVATE_SELECTFILE"/>
+  <int value="256" label="WINDOWS_GETCURRENT"/>
+  <int value="257" label="DEBUGGER_ATTACH"/>
+  <int value="258" label="WALLPAPERPRIVATE_SAVETHUMBNAIL"/>
+  <int value="259" label="INPUT_IME_KEYEVENTHANDLED"/>
+  <int value="260" label="FONTSETTINGS_SETDEFAULTFONTSIZE"/>
+  <int value="261" label="RUNTIME_REQUESTUPDATECHECK"/>
+  <int value="262" label="PAGEACTION_SETICON"/>
+  <int value="263" label="BROWSERACTION_SETBADGEBACKGROUNDCOLOR"/>
+  <int value="264" label="DEVELOPERPRIVATE_GETITEMSINFO"/>
+  <int value="265" label="BLUETOOTH_STOPDISCOVERY"/>
+  <int value="266" label="COOKIES_REMOVE"/>
+  <int value="267" label="DELETED_EXPERIMENTAL_RLZ_SENDFINANCIALPING"/>
+  <int value="268" label="TABCAPTURE_GETCAPTUREDTABS"/>
+  <int value="269" label="WINDOWS_REMOVE"/>
+  <int value="270" label="WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST"/>
+  <int value="271" label="BROWSERACTION_GETBADGEBACKGROUNDCOLOR"/>
+  <int value="272" label="DELETED_PAGEACTIONS_DISABLEFORTAB"/>
+  <int value="273" label="DELETED_DEVELOPERPRIVATE_ALLOWFILEACCESS"/>
+  <int value="274" label="FILEMANAGERPRIVATE_REMOVEMOUNT"/>
+  <int value="275" label="DELETED_BLUETOOTH_CONNECT"/>
+  <int value="276" label="TABCAPTURE_CAPTURE"/>
+  <int value="277" label="NOTIFICATIONS_CREATE"/>
+  <int value="278" label="TABS_DUPLICATE"/>
+  <int value="279" label="DELETED_BLUETOOTH_WRITE"/>
+  <int value="280" label="PAGEACTION_SHOW"/>
+  <int value="281" label="WALLPAPERPRIVATE_GETTHUMBNAIL"/>
+  <int value="282" label="DOWNLOADS_PAUSE"/>
+  <int value="283" label="PERMISSIONS_REQUEST"/>
+  <int value="284" label="TOPSITES_GET"/>
+  <int value="285" label="BROWSINGDATA_REMOVEDOWNLOADS"/>
+  <int value="286" label="BROWSINGDATA_REMOVELOCALSTORAGE"/>
+  <int value="287" label="FILEBROWSERHANDLERINTERNAL_SELECTFILE"/>
+  <int value="288" label="INPUT_IME_UPDATEMENUITEMS"/>
+  <int value="289" label="FILEMANAGERPRIVATE_GETSTRINGS"/>
+  <int value="290" label="CONTENTSETTINGS_GET"/>
+  <int value="291" label="FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE"/>
+  <int value="292" label="EXPERIMENTAL_APP_NOTIFY"/>
+  <int value="293" label="METRICSPRIVATE_RECORDLONGTIME"/>
+  <int value="294" label="SOCKET_READ"/>
+  <int value="295" label="DELETED_EXPERIMENTAL_PROCESSES_TERMINATE"/>
+  <int value="296" label="METRICSPRIVATE_RECORDTIME"/>
+  <int value="297" label="BOOKMARKMANAGERPRIVATE_GETSTRINGS"/>
+  <int value="298" label="USB_ISOCHRONOUSTRANSFER"/>
+  <int value="299" label="PERMISSIONS_REMOVE"/>
+  <int value="300" label="MANAGEMENT_UNINSTALL"/>
+  <int value="301" label="I18N_GETACCEPTLANGUAGES"/>
+  <int value="302" label="MANAGEMENT_LAUNCHAPP"/>
+  <int value="303" label="INPUT_IME_CLEARCOMPOSITION"/>
+  <int value="304" label="ALARMS_GETALL"/>
+  <int value="305" label="DIAL_DISCOVERNOW"/>
+  <int value="306" label="TYPES_CHROMESETTING_SET"/>
+  <int value="307" label="BROWSERACTION_SETICON"/>
+  <int value="308" label="ACCESSIBILITY_PRIVATE_SETACCESSIBILITYENABLED"/>
+  <int value="309" label="DELETED_FILEMANAGERPRIVATE_VIEWFILES"/>
+  <int value="310" label="DELETED_BLUETOOTH_GETSERVICES"/>
+  <int value="311" label="TABS_UPDATE"/>
+  <int value="312" label="BROWSINGDATA_REMOVEFORMDATA"/>
+  <int value="313" label="DELETED_FILEMANAGERPRIVATE_RELOADDRIVE"/>
+  <int value="314" label="ALARMS_GET"/>
+  <int value="315" label="BROWSINGDATA_REMOVEINDEXEDDB"/>
+  <int value="316" label="FILEMANAGERPRIVATEINTERNAL_ADDFILEWATCH"/>
+  <int value="317" label="CONTENTSETTINGS_CLEAR"/>
+  <int value="318" label="FILEMANAGERPRIVATE_GETPREFERENCES"/>
+  <int value="319" label="BOOKMARKMANAGERPRIVATE_PASTE"/>
+  <int value="320" label="FILESYSTEM_ISWRITABLEENTRY"/>
+  <int value="321" label="USB_SETINTERFACEALTERNATESETTING"/>
+  <int value="322" label="FONTSETTINGS_SETMINIMUMFONTSIZE"/>
+  <int value="323" label="BROWSERACTION_GETPOPUP"/>
+  <int value="324" label="SOCKET_DESTROY"/>
+  <int value="325" label="BLUETOOTH_GETDEVICES"/>
+  <int value="326" label="ALARMS_CLEARALL"/>
+  <int value="327" label="FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE"/>
+  <int value="328" label="FILEMANAGERPRIVATEINTERNAL_ZIPSELECTION"/>
+  <int value="329" label="SYSTEMINDICATOR_DISABLE"/>
+  <int value="330" label="DELETED_SCRIPTBADGE_SETPOPUP"/>
+  <int value="331" label="EXTENSION_ISALLOWEDFILESCHEMEACCESS"/>
+  <int value="332" label="EXPERIMENTAL_IDENTITY_LAUNCHWEBAUTHFLOW"/>
+  <int value="333" label="FILEMANAGERPRIVATE_GETDRIVECONNECTIONSTATE"/>
+  <int value="334" label="TABS_DETECTLANGUAGE"/>
+  <int value="335" label="METRICSPRIVATE_RECORDVALUE"/>
+  <int value="336" label="BOOKMARKMANAGERPRIVATE_SORTCHILDREN"/>
+  <int value="337" label="DELETED_SERIAL_READ"/>
+  <int value="338" label="APP_CURRENTWINDOWINTERNAL_MAXIMIZE"/>
+  <int value="339" label="EXPERIMENTAL_DISCOVERY_CLEARALLSUGGESTIONS"/>
+  <int value="340" label="DELETED_MANAGEDMODEPRIVATE_ENTER"/>
+  <int value="341" label="DELETED_FILEMANAGERPRIVATE_TRANSFERFILE"/>
+  <int value="342" label="BROWSERACTION_SETPOPUP"/>
+  <int value="343" label="TABS_GETSELECTED"/>
+  <int value="344" label="FONTSETTINGS_GETFONT"/>
+  <int value="345" label="DELETED_BLUETOOTH_READ"/>
+  <int value="346" label="WEBREQUESTINTERNAL_EVENTHANDLED"/>
+  <int value="347" label="EVENTS_ADDRULES"/>
+  <int value="348" label="CONTEXTMENUS_CREATE"/>
+  <int value="349" label="MEDIAPLAYERPRIVATE_GETPLAYLIST"/>
+  <int value="350" label="DOWNLOADS_ERASE"/>
+  <int value="351" label="DELETED_EXPERIMENTAL_RECORD_CAPTUREURLS"/>
+  <int value="352" label="TTS_ISSPEAKING"/>
+  <int value="353" label="BOOKMARKS_REMOVETREE"/>
+  <int value="354" label="FILEMANAGERPRIVATE_SEARCHDRIVE"/>
+  <int value="355" label="DELETED_EXPERIMENTAL_SYSTEMINFO_CPU_GET"/>
+  <int value="356" label="FILEMANAGERPRIVATE_SETPREFERENCES"/>
+  <int value="357" label="FONTSETTINGS_SETFONT"/>
+  <int value="358" label="SOCKET_GETNETWORKLIST"/>
+  <int value="359" label="BOOKMARKS_MOVE"/>
+  <int value="360" label="WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS"/>
+  <int value="361" label="STORAGE_REMOVE"/>
+  <int value="362" label="AUTOTESTPRIVATE_LOGINSTATUS"/>
+  <int value="363" label="TABS_CREATE"/>
+  <int value="364" label="FILEMANAGERPRIVATE_CANCELDIALOG"/>
+  <int value="365" label="BROWSINGDATA_REMOVECOOKIES"/>
+  <int value="366" label="FILESYSTEM_CHOOSEENTRY"/>
+  <int value="367" label="MEDIAPLAYERPRIVATE_PLAY"/>
+  <int value="368" label="WEBSTOREPRIVATE_GETWEBGLSTATUS"/>
+  <int value="369" label="SOCKET_SENDTO"/>
+  <int value="370" label="BROWSINGDATA_REMOVEFILESYSTEMS"/>
+  <int value="371" label="WALLPAPERPRIVATE_GETSTRINGS"/>
+  <int value="372" label="BROWSINGDATA_REMOVECACHE"/>
+  <int value="373" label="BOOKMARKMANAGERPRIVATE_RECORDLAUNCH"/>
+  <int value="374" label="BROWSERACTION_DISABLE"/>
+  <int value="375" label="DELETED_EXPERIMENTAL_SPEECHINPUT_ISRECORDING"/>
+  <int value="376" label="APP_WINDOW_CREATE"/>
+  <int value="377" label="RUNTIME_RELOAD"/>
+  <int value="378" label="EXPERIMENTAL_POWER_REQUESTKEEPAWAKE"/>
+  <int value="379" label="SYSTEMINDICATOR_SETICON"/>
+  <int value="380" label="FILEMANAGERPRIVATE_ADDMOUNT"/>
+  <int value="381" label="APP_CURRENTWINDOWINTERNAL_FOCUS"/>
+  <int value="382" label="EVENTS_REMOVERULES"/>
+  <int value="383" label="DOWNLOADS_DOWNLOAD"/>
+  <int value="384" label="WINDOWS_GETALL"/>
+  <int value="385" label="DELETED_FILEMANAGERPRIVATE_TOGGLEFULLSCREEN"/>
+  <int value="386" label="APP_CURRENTWINDOWINTERNAL_RESTORE"/>
+  <int value="387" label="DELETED_WEBSOCKETPROXYPRIVATE_GETPASSPORTFORTCP"/>
+  <int value="388" label="PAGEACTION_HIDE"/>
+  <int value="389" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GET"/>
+  <int value="390" label="DOWNLOADS_ACCEPTDANGER"/>
+  <int value="391" label="DELETED_WEBSOCKETPROXYPRIVATE_GETURLFORTCP"/>
+  <int value="392" label="FILEMANAGERPRIVATE_GETSIZESTATS"/>
+  <int value="393" label="DOWNLOADS_RESUME"/>
+  <int value="394" label="COOKIES_GETALLCOOKIESTORES"/>
+  <int value="395" label="DELETED_MEDIAGALLERIESPRIVATE_ADDGALLERYWATCH"/>
+  <int value="396" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEGALLERYWATCH"/>
+  <int value="397" label="DELETED_WEBVIEW_EXECUTESCRIPT"/>
+  <int value="398" label="NOTIFICATIONS_UPDATE"/>
+  <int value="399" label="NOTIFICATIONS_CLEAR"/>
+  <int value="400" label="DELETED_SESSIONRESTORE_GETRECENTLYCLOSED"/>
+  <int value="401" label="DELETED_SESSIONRESTORE_RESTORE"/>
+  <int value="402" label="MANAGEMENT_UNINSTALLSELF"/>
+  <int value="403" label="ECHOPRIVATE_GETOOBETIMESTAMP"/>
+  <int value="404" label="FILEMANAGERPRIVATEINTERNAL_VALIDATEPATHNAMELENGTH"/>
+  <int value="405" label="BROWSINGDATA_SETTINGS"/>
+  <int value="406" label="WEBSTOREPRIVATE_GETISLAUNCHERENABLED"/>
+  <int value="407" label="NETWORKINGPRIVATE_GETPROPERTIES"/>
+  <int value="408" label="NETWORKINGPRIVATE_GETVISIBLENETWORKS"/>
+  <int value="409" label="NETWORKINGPRIVATE_STARTCONNECT"/>
+  <int value="410" label="NETWORKINGPRIVATE_STARTDISCONNECT"/>
+  <int value="411" label="DELETED_MEDIAGALLERIESPRIVATE_GETALLGALLERYWATCH"/>
+  <int value="412" label="DELETED_MEDIAGALLERIESPRIVATE_REMOVEALLGALLERYWATCH"/>
+  <int value="413" label="FILEMANAGERPRIVATE_SEARCHDRIVEMETADATA"/>
+  <int value="414" label="DELETED_ECHOPRIVATE_CHECKALLOWREDEEMOFFERS"/>
+  <int value="415" label="DELETED_MEDIAGALLERIESPRIVATE_EJECTDEVICE"/>
+  <int value="416" label="FILEMANAGERPRIVATE_LOGOUTUSERFORREAUTHENTICATION"/>
+  <int value="417" label="DEVELOPERPRIVATE_CHOOSEPATH"/>
+  <int value="418" label="DEVELOPERPRIVATE_PACKDIRECTORY"/>
+  <int value="419" label="NETWORKINGPRIVATE_VERIFYDESTINATION"/>
+  <int value="420" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTCREDENTIALS"/>
+  <int value="421" label="NETWORKINGPRIVATE_VERIFYANDENCRYPTDATA"/>
+  <int value="422" label="DEVELOPERPRIVATE_RESTART"/>
+  <int value="423" label="DELETED_DEVELOPERPRIVATE_ALLOWINCOGNITO"/>
+  <int value="424" label="INPUT_IME_DELETESURROUNDINGTEXT"/>
+  <int value="425" label="DELETED_FILEMANAGERPRIVATE_OPENNEWWINDOW"/>
+  <int value="426" label="CLOUDPRINTPRIVATE_GETCLIENTID"/>
+  <int value="427" label="ECHOPRIVATE_GETUSERCONSENT"/>
+  <int value="428" label="SYNCFILESYSTEM_SETCONFLICTRESOLUTIONPOLICY"/>
+  <int value="429" label="SYNCFILESYSTEM_GETCONFLICTRESOLUTIONPOLICY"/>
+  <int value="430" label="NETWORKINGPRIVATE_SETPROPERTIES"/>
+  <int value="431" label="NETWORKINGPRIVATE_GETSTATE"/>
+  <int value="432" label="POWER_REQUESTKEEPAWAKE"/>
+  <int value="433" label="POWER_RELEASEKEEPAWAKE"/>
+  <int value="434" label="WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT"/>
+  <int value="435" label="DOWNLOADSINTERNAL_DETERMINEFILENAME"/>
+  <int value="436" label="SYNCFILESYSTEM_GETFILESYNCSTATUSES"/>
+  <int value="437" label="DELETED_MEDIAGALLERIESPRIVATE_GETHANDLERS"/>
+  <int value="438" label="WALLPAPERPRIVATE_RESETWALLPAPER"/>
+  <int value="439" label="DEVELOPERPRIVATE_PERMISSIONS"/>
+  <int value="440" label="WEBSTOREPRIVATE_ENABLEAPPLAUNCHER"/>
+  <int value="441" label="APP_CURRENTWINDOWINTERNAL_FULLSCREEN"/>
+  <int value="442" label="DEVELOPERPRIVATE_LOADUNPACKEDCROS"/>
+  <int value="443" label="NETWORKINGPRIVATE_REQUESTNETWORKSCAN"/>
+  <int value="444" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEMACHINEKEY"/>
+  <int value="445" label="ENTERPRISE_PLATFORMKEYSPRIVATE_CHALLENGEUSERKEY"/>
+  <int value="446" label="DEVELOPERPRIVATE_LOADPROJECTTOSYNCFS"/>
+  <int value="447" label="DEVELOPERPRIVATE_GETPROJECTSINFO"/>
+  <int value="448" label="DEVELOPERPRIVATE_LOADPROJECT"/>
+  <int value="449" label="COMMANDLINEPRIVATE_HASSWITCH"/>
+  <int value="450" label="NETWORKINGPRIVATE_GETMANAGEDPROPERTIES"/>
+  <int value="451" label="DELETED_LOCATION_WATCHLOCATION"/>
+  <int value="452" label="DELETED_LOCATION_CLEARWATCH"/>
+  <int value="453" label="DELETED_BLUETOOTH_ADDPROFILE"/>
+  <int value="454" label="DELETED_BLUETOOTH_REMOVEPROFILE"/>
+  <int value="455" label="DELETED_BLUETOOTH_GETPROFILES"/>
+  <int value="456" label="EXPERIMENTAL_IDENTITY_REMOVECACHEDAUTHTOKEN"/>
+  <int value="457" label="AUDIO_GETINFO"/>
+  <int value="458" label="AUDIO_SETACTIVEDEVICES"/>
+  <int value="459" label="AUDIO_SETPROPERTIES"/>
+  <int value="460" label="USB_RESETDEVICE"/>
+  <int value="461" label="SOCKET_MULTICAST_JOIN_GROUP"/>
+  <int value="462" label="SOCKET_MULTICAST_LEAVE_GROUP"/>
+  <int value="463" label="SOCKET_MULTICAST_SET_TIME_TO_LIVE"/>
+  <int value="464" label="SOCKET_MULTICAST_SET_LOOPBACK_MODE"/>
+  <int value="465" label="SOCKET_MULTICAST_GET_JOINED_GROUPS"/>
+  <int value="466" label="ACCESSIBILITY_PRIVATE_SETNATIVEACCESSIBILITYENABLED"/>
+  <int value="467" label="RUNTIME_GETPLATFORMINFO"/>
+  <int value="468" label="DELETED_WEBVIEW_INSERTCSS"/>
+  <int value="469" label="METRICSPRIVATE_GETISCRASHRECORDINGENABLED"/>
+  <int value="470" label="DELETED_IDENTITYPRIVATE_GETSTRINGS"/>
+  <int value="471" label="NOTIFICATIONS_GET_ALL"/>
+  <int value="472" label="USB_LISTINTERFACES"/>
+  <int value="473" label="FILESYSTEM_RETAINENTRY"/>
+  <int value="474" label="FILESYSTEM_ISRESTORABLE"/>
+  <int value="475" label="FILESYSTEM_RESTOREENTRY"/>
+  <int value="476" label="RUNTIME_SETUNINSTALLURL"/>
+  <int value="477" label="INPUTMETHODPRIVATE_STARTIME"/>
+  <int value="478" label="MUSICMANAGERPRIVATE_GETDEVICEID"/>
+  <int value="479" label="TTS_PAUSE"/>
+  <int value="480" label="TTS_RESUME"/>
+  <int value="481" label="DELETED_SYSTEMINFO_CPU_GET"/>
+  <int value="482" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_ADDWATCH"/>
+  <int value="483" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEWATCH"/>
+  <int value="484" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_GETALLWATCH"/>
+  <int value="485"
+      label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_REMOVEALLWATCH"/>
+  <int value="486" label="DELETED_SYSTEMINFO_MEMORY_GET"/>
+  <int value="487" label="ACTIVITYLOGPRIVATE_GETEXTENSIONACTIVITIES"/>
+  <int value="488" label="RUNTIME_GETPACKAGEDIRECTORYENTRY"/>
+  <int value="489" label="DELETED_SYSTEMINFO_DISPLAY_SETDISPLAYPROPERTIES"/>
+  <int value="490" label="FEEDBACKPRIVATE_GETUSEREMAIL"/>
+  <int value="491" label="FEEDBACKPRIVATE_GETSYSTEMINFORMATION"/>
+  <int value="492" label="FEEDBACKPRIVATE_SENDFEEDBACK"/>
+  <int value="493" label="VIRTUALKEYBOARDPRIVATE_INSERTTEXT"/>
+  <int value="494" label="DIAGNOSTICS_SENDPACKET"/>
+  <int value="495" label="METRICSPRIVATE_GETFIELDTRIAL"/>
+  <int value="496" label="FILEMANAGERPRIVATE_ZOOM"/>
+  <int value="497" label="DELETED_WEBVIEW_GO"/>
+  <int value="498" label="WEBSTOREPRIVATE_ISININCOGNITOMODEFUNCTION"/>
+  <int value="499" label="FILEMANAGERPRIVATE_REQUESTACCESSTOKEN"/>
+  <int value="500" label="DELETED_WEBVIEW_STOP"/>
+  <int value="501" label="DELETED_WEBVIEW_RELOAD"/>
+  <int value="502" label="DELETED_WEBVIEW_TERMINATE"/>
+  <int value="503" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_GET"/>
+  <int value="504" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_SET"/>
+  <int value="505" label="TYPES_PRIVATE_CHROMEDIRECTSETTING_CLEAR"/>
+  <int value="506" label="DELETED_EXPERIMENTAL_SYSTEMINFO_STORAGE_EJECTDEVICE"/>
+  <int value="507" label="SYSTEM_CPU_GETINFO"/>
+  <int value="508" label="BOOKMARKMANAGERPRIVATE_REMOVETREES"/>
+  <int value="509" label="SYSTEM_DISPLAY_GETINFO"/>
+  <int value="510" label="SYSTEM_DISPLAY_SETDISPLAYPROPERTIES"/>
+  <int value="511" label="SYSTEM_MEMORY_GETINFO"/>
+  <int value="512" label="FILEMANAGERPRIVATEINTERNAL_GETSHAREURL"/>
+  <int value="513" label="SYSTEM_STORAGE_GETINFO"/>
+  <int value="514" label="SYSTEM_STORAGE_EJECTDEVICE"/>
+  <int value="515" label="DELETED_SYSTEM_STORAGE_ADDAVAILABLECAPACITYWATCH"/>
+  <int value="516" label="DELETED_SYSTEM_STORAGE_REMOVEAVAILABLECAPACITYWATCH"/>
+  <int value="517"
+      label="DELETED_SYSTEM_STORAGE_GETALLAVAILABLECAPACITYWATCHES"/>
+  <int value="518"
+      label="DELETED_SYSTEM_STORAGE_REMOVEALLAVAILABLECAPACITYWATCHES"/>
+  <int value="519" label="DOWNLOADS_REMOVEFILE"/>
+  <int value="520" label="DOWNLOADS_SHOWDEFAULTFOLDER"/>
+  <int value="521" label="INFOBARS_SHOW"/>
+  <int value="522" label="DOWNLOADS_SETSHELFENABLED"/>
+  <int value="523" label="IMAGEWRITER_WRITEFROMURL"/>
+  <int value="524" label="IMAGEWRITER_WRITEFROMFILE"/>
+  <int value="525" label="IMAGEWRITER_CANCELWRITE"/>
+  <int value="526" label="IMAGEWRITER_DESTROYPARTITIONS"/>
+  <int value="527" label="FEEDBACKPRIVATE_GETSTRINGS"/>
+  <int value="528" label="LOGPRIVATE_GETHISTORICAL"/>
+  <int value="529" label="VIRTUALKEYBOARDPRIVATE_MOVECURSOR"/>
+  <int value="530" label="METRICSPRIVATE_GETVARIATIONPARAMS"/>
+  <int value="531" label="DELETED_WEBVIEW_SETPERMISSION"/>
+  <int value="532" label="DESKTOPCAPTURE_CHOOSEDESKTOPMEDIA"/>
+  <int value="533" label="APP_CURRENTWINDOWINTERNAL_SETSHAPE"/>
+  <int value="534" label="PROCESSES_GETPROCESSINFO"/>
+  <int value="535" label="PROCESSES_GETPROCESSIDFORTAB"/>
+  <int value="536" label="PROCESSES_TERMINATE"/>
+  <int value="537" label="SOCKETS_UDP_CREATE"/>
+  <int value="538" label="SOCKETS_UDP_UPDATE"/>
+  <int value="539" label="SOCKETS_UDP_BIND"/>
+  <int value="540" label="SOCKETS_UDP_SEND"/>
+  <int value="541" label="SOCKETS_UDP_CLOSE"/>
+  <int value="542" label="SOCKETS_UDP_GETINFO"/>
+  <int value="543" label="SOCKETS_UDP_GETSOCKETS"/>
+  <int value="544" label="SOCKETS_UDP_JOINGROUP"/>
+  <int value="545" label="SOCKETS_UDP_LEAVEGROUP"/>
+  <int value="546" label="SOCKETS_UDP_SETMULTICASTTIMETOLIVE"/>
+  <int value="547" label="SOCKETS_UDP_SETMULTICASTLOOPBACKMODE"/>
+  <int value="548" label="SOCKETS_UDP_GETJOINEDGROUPS"/>
+  <int value="549" label="SIGNED_IN_DEVICES_GET"/>
+  <int value="550" label="AUTOTESTPRIVATE_SIMULATEASANMEMORYBUG"/>
+  <int value="551" label="DELETED_WEBVIEW_CLEARDATA"/>
+  <int value="552" label="SESSIONS_GETRECENTLYCLOSED"/>
+  <int value="553" label="SESSIONS_GETDEVICES"/>
+  <int value="554" label="SESSIONS_RESTORE"/>
+  <int value="555" label="SYNCFILESYSTEM_GETSERVICESTATUS"/>
+  <int value="556" label="ECHOPRIVATE_SETOFFERINFO"/>
+  <int value="557" label="ECHOPRIVATE_GETOFFERINFO"/>
+  <int value="558" label="DEVELOPERPRIVATE_ISPROFILEMANAGED"/>
+  <int value="559" label="DELETED_FILEMANAGERPRIVATE_INSTALLWEBSTOREITEM"/>
+  <int value="560" label="FILEMANAGERPRIVATEINTERNAL_STARTCOPY"/>
+  <int value="561" label="FILEMANAGERPRIVATE_CANCELCOPY"/>
+  <int value="562" label="NETWORKINGPRIVATE_CREATENETWORK"/>
+  <int value="563" label="BRAILLEDISPLAYPRIVATE_GETDISPLAYSTATE"/>
+  <int value="564" label="BRAILLEDISPLAYPRIVATE_WRITEDOTS"/>
+  <int value="565" label="USB_GETDEVICES"/>
+  <int value="566" label="USB_REQUESTACCESS"/>
+  <int value="567" label="USB_OPENDEVICE"/>
+  <int value="568" label="ACTIVITYLOGPRIVATE_DELETEDATABASE"/>
+  <int value="569" label="ACTIVITYLOGPRIVATE_DELETEURLS"/>
+  <int value="570" label="FILEMANAGERPRIVATE_REQUESTWEBSTOREACCESSTOKEN"/>
+  <int value="571" label="IMAGEWRITER_LISTREMOVABLESTORAGEDEVICES"/>
+  <int value="572" label="WALLPAPER_SETWALLPAPER"/>
+  <int value="573" label="VIRTUALKEYBOARDPRIVATE_HIDEKEYBOARD"/>
+  <int value="574" label="AUTOTESTPRIVATE_LOCKSCREEN"/>
+  <int value="575" label="WEBRTCLOGGINGPRIVATE_SETMETADATA"/>
+  <int value="576" label="WEBRTCLOGGINGPRIVATE_START"/>
+  <int value="577" label="WEBRTCLOGGINGPRIVATE_SETUPLOADONRENDERCLOSE"/>
+  <int value="578" label="WEBRTCLOGGINGPRIVATE_STOP"/>
+  <int value="579" label="WEBRTCLOGGINGPRIVATE_UPLOAD"/>
+  <int value="580" label="WEBRTCLOGGINGPRIVATE_DISCARD"/>
+  <int value="581" label="DELETED_WEBVIEW_OVERRIDEUSERAGENT"/>
+  <int value="582" label="DELETED_PRINCIPALSPRIVATE_SHOWAVATARBUBBLE"/>
+  <int value="583" label="DELETED_PRINCIPALSPRIVATE_SIGNOUT"/>
+  <int value="584" label="CAST_CHANNEL_OPEN"/>
+  <int value="585" label="CAST_CHANNEL_SEND"/>
+  <int value="586" label="CAST_CHANNEL_CLOSE"/>
+  <int value="587" label="RUNTIME_RESTART"/>
+  <int value="588" label="DESKTOPCAPTURE_CANCELCHOOSEDESKTOPMEDIA"/>
+  <int value="589" label="APP_CURRENTWINDOWINTERNAL_SETALWAYSONTOP"/>
+  <int value="590" label="SOCKETS_TCP_CREATE"/>
+  <int value="591" label="SOCKETS_TCP_UPDATE"/>
+  <int value="592" label="SOCKETS_TCP_SETPAUSED"/>
+  <int value="593" label="SOCKETS_TCP_SETKEEPALIVE"/>
+  <int value="594" label="SOCKETS_TCP_SETNODELAY"/>
+  <int value="595" label="SOCKETS_TCP_CONNECT"/>
+  <int value="596" label="SOCKETS_TCP_DISCONNECT"/>
+  <int value="597" label="SOCKETS_TCP_SEND"/>
+  <int value="598" label="SOCKETS_TCP_CLOSE"/>
+  <int value="599" label="SOCKETS_TCP_GETINFO"/>
+  <int value="600" label="SOCKETS_TCP_GETSOCKETS"/>
+  <int value="601" label="NETWORKINGPRIVATE_GETENABLEDNETWORKTYPES"/>
+  <int value="602" label="NETWORKINGPRIVATE_ENABLENETWORKTYPE"/>
+  <int value="603" label="NETWORKINGPRIVATE_DISABLENETWORKTYPE"/>
+  <int value="604" label="SOCKETS_TCP_SERVER_CREATE"/>
+  <int value="605" label="SOCKETS_TCP_SERVER_UPDATE"/>
+  <int value="606" label="SOCKETS_TCP_SERVER_SETPAUSED"/>
+  <int value="607" label="SOCKETS_TCP_SERVER_LISTEN"/>
+  <int value="608" label="SOCKETS_TCP_SERVER_DISCONNECT"/>
+  <int value="609" label="SOCKETS_TCP_SERVER_CLOSE"/>
+  <int value="610" label="SOCKETS_TCP_SERVER_GETINFO"/>
+  <int value="611" label="SOCKETS_TCP_SERVER_GETSOCKETS"/>
+  <int value="612" label="SYSTEM_STORAGE_GETAVAILABLECAPACITY"/>
+  <int value="613" label="BROWSERACTION_OPEN_POPUP"/>
+  <int value="614" label="WEBRTC_AUDIO_PRIVATE_GET_SINKS"/>
+  <int value="615" label="WEBRTC_AUDIO_PRIVATE_GET_ACTIVE_SINK"/>
+  <int value="616" label="WEBRTC_AUDIO_PRIVATE_SET_ACTIVE_SINK"/>
+  <int value="617" label="WEBRTC_AUDIO_PRIVATE_GET_ASSOCIATED_SINK"/>
+  <int value="618" label="VIRTUALKEYBOARDPRIVATE_KEYBOARDLOADED"/>
+  <int value="619" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINWIDTH"/>
+  <int value="620" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMINHEIGHT"/>
+  <int value="621" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXWIDTH"/>
+  <int value="622" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETMAXHEIGHT"/>
+  <int value="623" label="SYSTEMPRIVATE_GETAPIKEY"/>
+  <int value="624" label="CHROMEOSINFOPRIVATE_SET"/>
+  <int value="625" label="BOOKMARKMANAGERPRIVATE_GETMETAINFO"/>
+  <int value="626" label="BOOKMARKMANAGERPRIVATE_SETMETAINFO"/>
+  <int value="627" label="FILESYSTEMPROVIDER_MOUNT"/>
+  <int value="628" label="AUTOTESTPRIVATE_GETEXTENSIONSINFO"/>
+  <int value="629" label="SCREENLOCKPRIVATE_GETLOCKED"/>
+  <int value="630" label="SCREENLOCKPRIVATE_SETLOCKED"/>
+  <int value="631" label="SCREENLOCKPRIVATE_SHOWMESSAGE"/>
+  <int value="632" label="FEEDBACKPRIVATE_GETHISTOGRAMS"/>
+  <int value="633" label="SYSTEM_NETWORK_GETNETWORKINTERFACES"/>
+  <int value="634" label="SERIAL_GETDEVICES"/>
+  <int value="635" label="SERIAL_UPDATE"/>
+  <int value="636" label="SERIAL_SETPAUSED"/>
+  <int value="637" label="SERIAL_GETINFO"/>
+  <int value="638" label="SERIAL_GETCONNECTIONS"/>
+  <int value="639" label="SERIAL_SEND"/>
+  <int value="640" label="GCM_REGISTER"/>
+  <int value="641" label="GCM_SEND"/>
+  <int value="642" label="SERIAL_CONNECT"/>
+  <int value="643" label="SERIAL_DISCONNECT"/>
+  <int value="644"
+      label="DELETED_MEDIAGALLERIES_GETALLMEDIAFILESYSTEMMETADATA"/>
+  <int value="645" label="FIRSTRUNPRIVATE_GETLOCALIZEDSTRINGS"/>
+  <int value="646" label="FIRSTRUNPRIVATE_LAUNCHTUTORIAL"/>
+  <int value="647" label="SOCKETS_UDP_SETPAUSED"/>
+  <int value="648" label="DELETED_WEBVIEW_CAPTUREVISIBLEREGION"/>
+  <int value="649" label="MEDIAGALLERIES_GETMETADATA"/>
+  <int value="650" label="INPUT_IME_SENDKEYEVENTS"/>
+  <int value="651" label="VIRTUALKEYBOARDPRIVATE_LOCKKEYBOARD"/>
+  <int value="652" label="SCREENLOCKPRIVATE_SHOWCUSTOMICON"/>
+  <int value="653" label="INPUT_IME_HIDEINPUTVIEW"/>
+  <int value="654" label="BOOKMARKMANAGERPRIVATE_UNDO"/>
+  <int value="655" label="BOOKMARKMANAGERPRIVATE_REDO"/>
+  <int value="656" label="BOOKMARKMANAGERPRIVATE_UNDOINFO"/>
+  <int value="657" label="BOOKMARKMANAGERPRIVATE_REDOINFO"/>
+  <int value="658" label="MEDIAGALLERIES_ADDUSERSELECTEDFOLDER"/>
+  <int value="659"
+      label="DELETED_PREFERENCESPRIVATE_GETSYNCCATEGORIESWITHOUTPASSPHRASE"/>
+  <int value="660" label="DELETED_READINGLISTPRIVATE_ADDENTRY"/>
+  <int value="661" label="DELETED_READINGLISTPRIVATE_REMOVEENTRY"/>
+  <int value="662" label="DELETED_READINGLISTPRIVATE_GETENTRIES"/>
+  <int value="663" label="DELETED_MEDIAGALLERIES_STARTMEDIASCAN"/>
+  <int value="664" label="DELETED_MEDIAGALLERIES_CANCELMEDIASCAN"/>
+  <int value="665" label="DELETED_MEDIAGALLERIES_ADDSCANRESULTS"/>
+  <int value="666" label="LOGPRIVATE_STARTNETINTERNALSWATCH"/>
+  <int value="667" label="LOGPRIVATE_STOPNETINTERNALSWATCH"/>
+  <int value="668" label="FILEMANAGERPRIVATE_GETPROFILES"/>
+  <int value="669" label="DELETED_FILEMANAGERPRIVATE_VISITDESKTOP"/>
+  <int value="670" label="VIRTUALKEYBOARDPRIVATE_GETKEYBOARDCONFIG"/>
+  <int value="671" label="HID_GETDEVICES"/>
+  <int value="672" label="HID_CONNECT"/>
+  <int value="673" label="HID_DISCONNECT"/>
+  <int value="674" label="HID_RECEIVE"/>
+  <int value="675" label="HID_SEND"/>
+  <int value="676" label="HID_RECEIVEFEATUREREPORT"/>
+  <int value="677" label="HID_SENDFEATUREREPORT"/>
+  <int value="678" label="HOTWORDPRIVATE_SETENABLED"/>
+  <int value="679" label="HOTWORDPRIVATE_GETSTATUS"/>
+  <int value="680" label="DELETED_APP_CURRENTWINDOWINTERNAL_SETBADGEICON"/>
+  <int value="681" label="DELETED_APP_CURRENTWINDOWINTERNAL_CLEARBADGE"/>
+  <int value="682" label="DELETED_WEBVIEW_SETZOOM"/>
+  <int value="683" label="DELETED_WEBVIEW_GETZOOM"/>
+  <int value="684" label="DEVELOPERPRIVATE_REQUESTFILESOURCE"/>
+  <int value="685" label="DEVELOPERPRIVATE_OPENDEVTOOLS"/>
+  <int value="686" label="ACTIVITYLOGPRIVATE_DELETEACTIVITIES"/>
+  <int value="687" label="NETWORKINGPRIVATE_SETWIFITDLSENABLEDSTATE"/>
+  <int value="688" label="NETWORKINGPRIVATE_GETWIFITDLSSTATUS"/>
+  <int value="689" label="SCREENLOCKPRIVATE_HIDECUSTOMICON"/>
+  <int value="690" label="SCREENLOCKPRIVATE_SETAUTHTYPE"/>
+  <int value="691" label="SCREENLOCKPRIVATE_GETAUTHTYPE"/>
+  <int value="692" label="SCREENLOCKPRIVATE_ACCEPTAUTHATTEMPT"/>
+  <int value="693" label="DELETED_WEBVIEW_FIND"/>
+  <int value="694" label="DELETED_WEBVIEW_STOPFINDING"/>
+  <int value="695" label="DELETED_WEBVIEW_CONTEXTMENUSCREATE"/>
+  <int value="696" label="DELETED_WEBVIEW_CONTEXTMENUSUPDATE"/>
+  <int value="697" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVE"/>
+  <int value="698" label="DELETED_WEBVIEW_CONTEXTMENUSREMOVEALL"/>
+  <int value="699" label="AUTOMATIONINTERNAL_ENABLETAB"/>
+  <int value="700" label="APP_CURRENTWINDOWINTERNAL_SETSIZECONSTRAINTS"/>
+  <int value="701" label="BLUETOOTH_GETDEVICE"/>
+  <int value="702" label="GCM_UNREGISTER"/>
+  <int value="703" label="FILEMANAGERPRIVATEINTERNAL_REQUESTDRIVESHARE"/>
+  <int value="704" label="METRICSPRIVATE_RECORDSPARSEVALUE"/>
+  <int value="705" label="HOTWORDPRIVATE_SETAUDIOLOGGINGENABLED"/>
+  <int value="706" label="BLUETOOTHPRIVATE_SETADAPTERSTATE"/>
+  <int value="707" label="DELETED_BLUETOOTHPRIVATE_ENABLEPAIRING"/>
+  <int value="708" label="DELETED_BLUETOOTHPRIVATE_DISABLEPAIRING"/>
+  <int value="709" label="BLUETOOTHPRIVATE_SETPAIRINGRESPONSE"/>
+  <int value="710" label="NETWORKINGPRIVATE_GETCAPTIVEPORTALSTATUS"/>
+  <int value="711" label="AUTOMATIONINTERNAL_PERFORMACTION"/>
+  <int value="712" label="DELETED_BLUETOOTH_UPDATE_SOCKET"/>
+  <int value="713" label="DELETED_BLUETOOTH_SET_SOCKET_PAUSED"/>
+  <int value="714" label="DELETED_BLUETOOTH_GET_SOCKET"/>
+  <int value="715" label="DELETED_BLUETOOTH_GET_SOCKETS"/>
+  <int value="716" label="FILESYSTEMPROVIDER_UNMOUNT"/>
+  <int value="717" label="FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDSUCCESS"/>
+  <int value="718"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_UNMOUNTREQUESTEDERROR"/>
+  <int value="719"
+      label="DELETED_MEDIAGALLERIES_DROPPERMISSIONFORMEDIAFILESYSTEM"/>
+  <int value="720" label="WEBCAMPRIVATE_SET"/>
+  <int value="721" label="WEBCAMPRIVATE_RESET"/>
+  <int value="722" label="WEBCAMPRIVATE_GET"/>
+  <int value="723" label="BLUETOOTHLOWENERGY_GETSERVICE"/>
+  <int value="724" label="BLUETOOTHLOWENERGY_GETSERVICES"/>
+  <int value="725" label="BLUETOOTHLOWENERGY_GETCHARACTERISTIC"/>
+  <int value="726" label="BLUETOOTHLOWENERGY_GETCHARACTERISTICS"/>
+  <int value="727" label="BLUETOOTHLOWENERGY_GETINCLUDEDSERVICES"/>
+  <int value="728" label="BLUETOOTHLOWENERGY_GETDESCRIPTOR"/>
+  <int value="729" label="BLUETOOTHLOWENERGY_GETDESCRIPTORS"/>
+  <int value="730" label="BLUETOOTHLOWENERGY_READCHARACTERISTICVALUE"/>
+  <int value="731" label="BLUETOOTHLOWENERGY_WRITECHARACTERISTICVALUE"/>
+  <int value="732" label="BLUETOOTHLOWENERGY_READDESCRIPTORVALUE"/>
+  <int value="733" label="BLUETOOTHLOWENERGY_WRITEDESCRIPTORVALUE"/>
+  <int value="734" label="BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO"/>
+  <int value="735" label="BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO"/>
+  <int value="736" label="BLUETOOTHSOCKET_CREATE"/>
+  <int value="737" label="BLUETOOTHSOCKET_UPDATE"/>
+  <int value="738" label="BLUETOOTHSOCKET_SETPAUSED"/>
+  <int value="739" label="BLUETOOTHSOCKET_LISTENUSINGRFCOMM"/>
+  <int value="740" label="BLUETOOTHSOCKET_LISTENUSINGINSECURERFCOMM"/>
+  <int value="741" label="BLUETOOTHSOCKET_LISTENUSINGL2CAP"/>
+  <int value="742" label="BLUETOOTHSOCKET_CONNECT"/>
+  <int value="743" label="BLUETOOTHSOCKET_DISCONNECT"/>
+  <int value="744" label="BLUETOOTHSOCKET_CLOSE"/>
+  <int value="745" label="BLUETOOTHSOCKET_SEND"/>
+  <int value="746" label="BLUETOOTHSOCKET_GETINFO"/>
+  <int value="747" label="BLUETOOTHSOCKET_GETSOCKETS"/>
+  <int value="748" label="DELETED_WEBSTOREPRIVATE_SIGNINFUNCTION"/>
+  <int value="749" label="DELETED_SHELL_CREATEWINDOW"/>
+  <int value="750"
+      label="FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDSUCCESS"/>
+  <int value="751"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_GETMETADATAREQUESTEDERROR"/>
+  <int value="752" label="BROWSER_OPENTAB"/>
+  <int value="753" label="MANAGEMENT_CREATEAPPSHORTCUT"/>
+  <int value="754" label="DELETED_WEBVIEW_SHOWCONTEXTMENU"/>
+  <int value="755" label="WEBRTCLOGGINGPRIVATE_STARTRTPDUMP"/>
+  <int value="756" label="WEBRTCLOGGINGPRIVATE_STOPRTPDUMP"/>
+  <int value="757" label="AUTOMATIONINTERNAL_ENABLEDESKTOP"/>
+  <int value="758" label="HOTWORDPRIVATE_SETHOTWORDSESSIONSTATE"/>
+  <int value="759" label="HOTWORDPRIVATE_NOTIFYHOTWORDRECOGNITION"/>
+  <int value="760"
+      label="FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDSUCCESS"/>
+  <int value="761"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READDIRECTORYREQUESTEDERROR"/>
+  <int value="762" label="DELETED_LEDGER_BATCHEXECUTE"/>
+  <int value="763"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDSUCCESS"/>
+  <int value="764"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_OPENFILEREQUESTEDERROR"/>
+  <int value="765"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDSUCCESS"/>
+  <int value="766"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_CLOSEFILEREQUESTEDERROR"/>
+  <int value="767" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_GETINITIALDATA"/>
+  <int value="768"
+      label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_UPDATENOTIFICATION"/>
+  <int value="769" label="DELETED_SYNCEDNOTIFICATIONSPRIVATE_SETRENDERCONTEXT"/>
+  <int value="770" label="IDENTITY_GETACCOUNTS"/>
+  <int value="771" label="FILEMANAGERPRIVATE_RESOLVEISOLATEDENTRIES"/>
+  <int value="772" label="FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDSUCCESS"/>
+  <int value="773"
+      label="DELETED_FILESYSTEMPROVIDERINTERNAL_READFILEREQUESTEDERROR"/>
+  <int value="774" label="NETWORKINGPRIVATE_GETNETWORKS"/>
+  <int value="775" label="DELETED_WEBVIEW_SETNAME"/>
+  <int value="776" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GENERATEKEY"/>
+  <int value="777" label="PLATFORMKEYSINTERNAL_SIGN"/>
+  <int value="778" label="ENTERPRISE_PLATFORMKEYSINTERNAL_GETTOKENS"/>
+  <int value="779" label="ENTERPRISE_PLATFORMKEYS_GETCERTIFICATES"/>
+  <int value="780" label="ENTERPRISE_PLATFORMKEYS_IMPORTCERTIFICATE"/>
+  <int value="781" label="ENTERPRISE_PLATFORMKEYS_REMOVECERTIFICATE"/>
+  <int value="782" label="FILEMANAGERPRIVATE_OPENINSPECTOR"/>
+  <int value="783" label="STREAMSPRIVATE_ABORT"/>
+  <int value="784" label="MANAGEMENT_SETLAUNCHTYPE"/>
+  <int value="785" label="MANAGEMENT_GENERATEAPPFORLINK"/>
+  <int value="786" label="DELETED_GUESTVIEWINTERNAL_ALLOCATEINSTANCEID"/>
+  <int value="787" label="DELETED_WEBVIEW_NAVIGATE"/>
+  <int value="788" label="INPUTMETHODPRIVATE_GETCURRENTINPUTMETHOD"/>
+  <int value="789" label="INPUTMETHODPRIVATE_SETCURRENTINPUTMETHOD"/>
+  <int value="790" label="INPUTMETHODPRIVATE_GETINPUTMETHODS"/>
+  <int value="791" label="IDENTITY_GETPROFILEUSERINFO"/>
+  <int value="792" label="VIRTUALKEYBOARDPRIVATE_OPENSETTINGS"/>
+  <int value="793" label="BLUETOOTHLOWENERGY_CONNECT"/>
+  <int value="794" label="BLUETOOTHLOWENERGY_DISCONNECT"/>
+  <int value="795" label="WEBSTOREPRIVATE_GETEPHEMERALAPPSENABLED"/>
+  <int value="796" label="WEBSTOREPRIVATE_LAUNCHEPHEMERALAPP"/>
+  <int value="797" label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDERROR"/>
+  <int value="798"
+      label="FILESYSTEMPROVIDERINTERNAL_OPERATIONREQUESTEDSUCCESS"/>
+  <int value="799" label="GUESTVIEWINTERNAL_CREATEGUEST"/>
+  <int value="800" label="WEBVIEWINTERNAL_CAPTUREVISIBLEREGION"/>
+  <int value="801" label="WEBVIEWINTERNAL_CONTEXTMENUSCREATE"/>
+  <int value="802" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVE"/>
+  <int value="803" label="WEBVIEWINTERNAL_CONTEXTMENUSREMOVEALL"/>
+  <int value="804" label="WEBVIEWINTERNAL_CONTEXTMENUSUPDATE"/>
+  <int value="805" label="WEBVIEWINTERNAL_CLEARDATA"/>
+  <int value="806" label="WEBVIEWINTERNAL_EXECUTESCRIPT"/>
+  <int value="807" label="WEBVIEWINTERNAL_FIND"/>
+  <int value="808" label="WEBVIEWINTERNAL_GETZOOM"/>
+  <int value="809" label="WEBVIEWINTERNAL_GO"/>
+  <int value="810" label="WEBVIEWINTERNAL_INSERTCSS"/>
+  <int value="811" label="WEBVIEWINTERNAL_NAVIGATE"/>
+  <int value="812" label="WEBVIEWINTERNAL_OVERRIDEUSERAGENT"/>
+  <int value="813" label="WEBVIEWINTERNAL_RELOAD"/>
+  <int value="814" label="WEBVIEWINTERNAL_SETNAME"/>
+  <int value="815" label="WEBVIEWINTERNAL_SETPERMISSION"/>
+  <int value="816" label="WEBVIEWINTERNAL_SETZOOM"/>
+  <int value="817" label="WEBVIEWINTERNAL_SHOWCONTEXTMENU"/>
+  <int value="818" label="WEBVIEWINTERNAL_STOP"/>
+  <int value="819" label="WEBVIEWINTERNAL_STOPFINDING"/>
+  <int value="820" label="WEBVIEWINTERNAL_TERMINATE"/>
+  <int value="821" label="BLUETOOTHLOWENERGY_STARTCHARACTERISTICNOTIFICATIONS"/>
+  <int value="822" label="BLUETOOTHLOWENERGY_STOPCHARACTERISTICNOTIFICATIONS"/>
+  <int value="823" label="GCDPRIVATE_GETCLOUDDEVICELIST"/>
+  <int value="824" label="GCDPRIVATE_QUERYFORNEWLOCALDEVICES"/>
+  <int value="825" label="GCDPRIVATE_PREFETCHWIFIPASSWORD"/>
+  <int value="826" label="GCDPRIVATE_ESTABLISHSESSION"/>
+  <int value="827" label="GCDPRIVATE_SENDMESSAGE"/>
+  <int value="828" label="GCDPRIVATE_CONFIRMCODE"/>
+  <int value="829" label="GCDPRIVATE_TERMINATESESSION"/>
+  <int value="830" label="TABS_SETZOOM"/>
+  <int value="831" label="TABS_GETZOOM"/>
+  <int value="832" label="TABS_SETZOOMSETTINGS"/>
+  <int value="833" label="TABS_GETZOOMSETTINGS"/>
+  <int value="834" label="GCDPRIVATE_GETCOMMANDDEFINITIONS"/>
+  <int value="835" label="GCDPRIVATE_INSERTCOMMAND"/>
+  <int value="836" label="GCDPRIVATE_GETCOMMAND"/>
+  <int value="837" label="GCDPRIVATE_CANCELCOMMAND"/>
+  <int value="838" label="GCDPRIVATE_GETCOMMANDSLIST"/>
+  <int value="839" label="APPVIEWINTERNAL_ATTACHFRAME"/>
+  <int value="840" label="APPVIEWINTERNAL_DENYREQUEST"/>
+  <int value="841" label="FILEMANAGERPRIVATEINTERNAL_GETDOWNLOADURL"/>
+  <int value="842" label="EASYUNLOCKPRIVATE_PERFORMECDHKEYAGREEMENT"/>
+  <int value="843" label="EASYUNLOCKPRIVATE_GENERATEECP256KEYPAIR"/>
+  <int value="844" label="EASYUNLOCKPRIVATE_CREATESECUREMESSAGE"/>
+  <int value="845" label="EASYUNLOCKPRIVATE_UNWRAPSECUREMESSAGE"/>
+  <int value="846" label="LOGPRIVATE_STARTEVENTRECODER"/>
+  <int value="847" label="LOGPRIVATE_STOPEVENTRECODER"/>
+  <int value="848" label="LOGPRIVATE_DUMPLOGS"/>
+  <int value="849" label="SOCKET_SECURE"/>
+  <int value="850" label="SOCKETS_TCP_SECURE"/>
+  <int value="851" label="EXPERIENCESAMPLINGPRIVATE_GETBROWSERINFO"/>
+  <int value="852" label="EASYUNLOCKPRIVATE_SEEKBLUETOOTHDEVICEBYADDRESS"/>
+  <int value="853" label="EASYUNLOCKPRIVATE_GETSTRINGS"/>
+  <int value="854" label="NOTIFICATIONPROVIDER_SENDONCLEAR"/>
+  <int value="855" label="NOTIFICATIONPROVIDER_NOTIFYONCLEARED"/>
+  <int value="856" label="NOTIFICATIONPROVIDER_NOTIFYONCLICKED"/>
+  <int value="857" label="NOTIFICATIONPROVIDER_NOTIFYONBUTTONCLICKED"/>
+  <int value="858" label="NOTIFICATIONPROVIDER_NOTIFYONPERMISSIONLEVELCHANGED"/>
+  <int value="859" label="NOTIFICATIONPROVIDER_NOTIFYONSHOWSETTINGS"/>
+  <int value="860" label="NOTIFICATIONPROVIDER_GETNOTIFIER"/>
+  <int value="861" label="NOTIFICATIONPROVIDER_GETALLNOTIFIERS"/>
+  <int value="862" label="GCDPRIVATE_GETPREFETCHEDWIFINAMELIST"/>
+  <int value="863" label="GUESTVIEWINTERNAL_SETAUTOSIZE"/>
+  <int value="864" label="DELETED_COPRESENCEPRIVATE_SENDFOUND"/>
+  <int value="865" label="DELETED_COPRESENCEPRIVATE_SENDSAMPLES"/>
+  <int value="866" label="DELETED_COPRESENCEPRIVATE_SENDDETECT"/>
+  <int value="867" label="DELETED_COPRESENCEPRIVATE_SENDINITIALIZED"/>
+  <int value="868" label="DELETED_COPRESENCE_EXECUTE"/>
+  <int value="869" label="DELETED_COPRESENCE_SETAPIKEY"/>
+  <int value="870" label="FILESYSTEM_OBSERVEDIRECTORY"/>
+  <int value="871" label="FILESYSTEM_UNOBSERVEENTRY"/>
+  <int value="872" label="FILESYSTEM_GETOBSERVEDENTRIES"/>
+  <int value="873" label="BROWSINGDATA_REMOVESERVICEWORKERS"/>
+  <int value="874" label="USBPRIVATE_GETDEVICES"/>
+  <int value="875" label="USBPRIVATE_GETDEVICEINFO"/>
+  <int value="876" label="EASYUNLOCKPRIVATE_UPDATESCREENLOCKSTATE"/>
+  <int value="877" label="CAST_CHANNEL_GETLOGS"/>
+  <int value="878" label="EASYUNLOCKPRIVATE_SETPERMITACCESS"/>
+  <int value="879" label="EASYUNLOCKPRIVATE_GETPERMITACCESS"/>
+  <int value="880" label="EASYUNLOCKPRIVATE_CLEARPERMITACCESS"/>
+  <int value="881" label="EASYUNLOCKPRIVATE_SETREMOTEDEVICES"/>
+  <int value="882" label="EASYUNLOCKPRIVATE_GETREMOTEDEVICES"/>
+  <int value="883" label="FILESYSTEMPROVIDER_GETALL"/>
+  <int value="884"
+      label="EASYUNLOCKPRIVATE_CONNECTTOBLUETOOTHSERVICEINSECURELY"/>
+  <int value="885" label="MEDIAGALLERIES_ADDGALLERYWATCH"/>
+  <int value="886" label="MEDIAGALLERIES_REMOVEGALLERYWATCH"/>
+  <int value="887" label="DELETED_MEDIAGALLERIES_GETALLGALLERYWATCH"/>
+  <int value="888" label="DELETED_MEDIAGALLERIES_REMOVEALLGALLERYWATCH"/>
+  <int value="889" label="MANAGEMENT_GETSELF"/>
+  <int value="890" label="APP_CURRENTWINDOWINTERNAL_SETVISIBLEONALLWORKSPACES"/>
+  <int value="891" label="EASYUNLOCKPRIVATE_GETSIGNINCHALLENGE"/>
+  <int value="892" label="EASYUNLOCKPRIVATE_TRYSIGNINSECRET"/>
+  <int value="893" label="ACCESSIBILITY_PRIVATE_SETFOCUSRING"/>
+  <int value="894" label="USB_GETCONFIGURATION"/>
+  <int value="895" label="WEBVIEWINTERNAL_SETALLOWTRANSPARENCY"/>
+  <int value="896" label="EASYUNLOCKPRIVATE_GETUSERINFO"/>
+  <int value="897" label="HOTWORDPRIVATE_GETLAUNCHSTATE"/>
+  <int value="898" label="HOTWORDPRIVATE_SETHOTWORDALWAYSONSEARCHENABLED"/>
+  <int value="899" label="WEBVIEWINTERNAL_LOADDATAWITHBASEURL"/>
+  <int value="900" label="GUESTVIEWINTERNAL_DESTROYGUEST"/>
+  <int value="901" label="DELETED_COPRESENCESOCKET_CREATEPEER"/>
+  <int value="902" label="DELETED_COPRESENCESOCKET_DESTROYPEER"/>
+  <int value="903" label="DELETED_COPRESENCESOCKET_SEND"/>
+  <int value="904" label="DELETED_COPRESENCESOCKET_DISCONNECT"/>
+  <int value="905" label="DELETED_BOOKMARKMANAGERPRIVATE_SETVERSION"/>
+  <int value="906" label="FILESYSTEMPROVIDER_NOTIFY"/>
+  <int value="907" label="USB_GETUSERSELECTEDDEVICES"/>
+  <int value="908" label="INPUTMETHODPRIVATE_GETINPUTMETHODCONFIG"/>
+  <int value="909" label="WALLPAPERPRIVATE_GETSYNCSETTING"/>
+  <int value="910" label="DELETED_COPRESENCE_SETAUTHTOKEN"/>
+  <int value="911" label="CAST_CHANNEL_SETAUTHORITYKEYS"/>
+  <int value="912" label="HOTWORDPRIVATE_STARTTRAINING"/>
+  <int value="913" label="HOTWORDPRIVATE_FINALIZESPEAKERMODEL"/>
+  <int value="914" label="HOTWORDPRIVATE_STOPTRAINING"/>
+  <int value="915" label="GCDPRIVATE_STARTPAIRING"/>
+  <int value="916" label="VPNPROVIDER_CREATECONFIG"/>
+  <int value="917" label="VPNPROVIDER_DESTROYCONFIG"/>
+  <int value="918" label="VPNPROVIDER_SETPARAMETERS"/>
+  <int value="919" label="VPNPROVIDER_SENDPACKET"/>
+  <int value="920" label="VPNPROVIDER_NOTIFYCONNECTIONSTATECHANGED"/>
+  <int value="921" label="DOCUMENT_SCAN_SCAN"/>
+  <int value="922" label="DELETED_EASYUNLOCKPRIVATE_GETUSERIMAGE"/>
+  <int value="923" label="HOTWORDPRIVATE_NOTIFYSPEAKERMODELSAVED"/>
+  <int value="924" label="HOTWORDPRIVATE_GETLOCALIZEDSTRINGS"/>
+  <int value="925" label="HOTWORDPRIVATE_SETAUDIOHISTORYENABLED"/>
+  <int value="926" label="HOTWORDPRIVATE_GETAUDIOHISTORYENABLED"/>
+  <int value="927"
+      label="DELETED_APP_CURRENTWINDOWINTERNAL_SETINTERCEPTALLKEYS"/>
+  <int value="928" label="LAUNCHERPAGE_PUSHSUBPAGE"/>
+  <int value="929" label="LAUNCHERPAGE_SHOW"/>
+  <int value="930" label="AUTOTESTPRIVATE_SETTOUCHPADSENSITIVITY"/>
+  <int value="931" label="AUTOTESTPRIVATE_SETTAPTOCLICK"/>
+  <int value="932" label="AUTOTESTPRIVATE_SETTHREEFINGERCLICK"/>
+  <int value="933" label="AUTOTESTPRIVATE_SETTAPDRAGGING"/>
+  <int value="934" label="AUTOTESTPRIVATE_SETNATURALSCROLL"/>
+  <int value="935" label="AUTOTESTPRIVATE_SETMOUSESENSITIVITY"/>
+  <int value="936" label="AUTOTESTPRIVATE_SETPRIMARYBUTTONRIGHT"/>
+  <int value="937" label="DELETED_COPRESENCEENDPOINTS_CREATELOCALENDPOINT"/>
+  <int value="938" label="DELETED_COPRESENCEENDPOINTS_DESTROYLOCALENDPOINT"/>
+  <int value="939" label="DELETED_COPRESENCEENDPOINTS_SEND"/>
+  <int value="940" label="INLINE_INSTALL_PRIVATE_INSTALL"/>
+  <int value="941" label="LAUNCHERPAGE_SETENABLED"/>
+  <int value="942" label="DELETED_CRYPTOTOKENPRIVATE_REQUESTPERMISSION"/>
+  <int value="943" label="BLUETOOTHPRIVATE_DISCONNECTALL"/>
+  <int value="944" label="FILEMANAGERPRIVATEINTERNAL_GETMIMETYPE"/>
+  <int value="945" label="USB_SETCONFIGURATION"/>
+  <int value="946" label="EASYUNLOCKPRIVATE_GETCONNECTIONINFO"/>
+  <int value="947" label="FILEMANAGERPRIVATEINTERNAL_COMPUTECHECKSUM"/>
+  <int value="948" label="PRINTERPROVIDERINTERNAL_REPORTPRINTRESULT"/>
+  <int value="949" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERCAPABILITY"/>
+  <int value="950" label="PRINTERPROVIDERINTERNAL_REPORTPRINTERS"/>
+  <int value="951" label="FILESYSTEMPROVIDER_GET"/>
+  <int value="952" label="FILEMANAGERPRIVATE_SEARCHFILESBYHASHES"/>
+  <int value="953" label="EASYUNLOCKPRIVATE_SHOWERRORBUBBLE"/>
+  <int value="954" label="EXTENSIONVIEWINTERNAL_NAVIGATE"/>
+  <int value="955" label="NETWORKING_CONFIG_SETNETWORKFILTER"/>
+  <int value="956" label="NETWORKING_CONFIG_FINISHAUTHENTICATION"/>
+  <int value="957" label="PLATFORMKEYSINTERNAL_SELECTCLIENTCERTIFICATES"/>
+  <int value="958" label="CRYPTOTOKENPRIVATE_CANORIGINASSERTAPPID"/>
+  <int value="959" label="EASYUNLOCKPRIVATE_SETAUTOPAIRINGRESULT"/>
+  <int value="960" label="FILEMANAGERPRIVATE_ISUMAENABLED"/>
+  <int value="961" label="WEBVIEWINTERNAL_SETALLOWSCALING"/>
+  <int value="962" label="PLATFORMKEYSINTERNAL_GETPUBLICKEY"/>
+  <int value="963" label="RUNTIME_OPENOPTIONSPAGE"/>
+  <int value="964" label="DELETED_AUDIOMODEM_TRANSMIT"/>
+  <int value="965" label="DELETED_AUDIOMODEM_STOPTRANSMIT"/>
+  <int value="966" label="DELETED_AUDIOMODEM_RECEIVE"/>
+  <int value="967" label="DELETED_AUDIOMODEM_STOPRECEIVE"/>
+  <int value="968" label="WEBRTCLOGGINGPRIVATE_STORE"/>
+  <int value="969" label="WEBRTCLOGGINGPRIVATE_UPLOADSTORED"/>
+  <int value="970" label="FILEMANAGERPRIVATEINTERNAL_SETENTRYTAG"/>
+  <int value="971" label="INPUTMETHODPRIVATE_FETCHALLDICTIONARYWORDS"/>
+  <int value="972" label="INPUTMETHODPRIVATE_ADDWORDTODICTIONARY"/>
+  <int value="973"
+      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDINSTALL"/>
+  <int value="974" label="PRINTERPROVIDERINTERNAL_GETPRINTDATA"/>
+  <int value="975" label="VIRTUALKEYBOARDPRIVATE_SETMODE"/>
+  <int value="976" label="NETWORKINGPRIVATE_STARTACTIVATE"/>
+  <int value="977" label="FILEMANAGERPRIVATE_GRANTACCESS"/>
+  <int value="978" label="DEVELOPERPRIVATE_GETEXTENSIONSINFO"/>
+  <int value="979" label="DEVELOPERPRIVATE_GETEXTENSIONINFO"/>
+  <int value="980" label="FILEMANAGERPRIVATE_ENABLEEXTERNALFILESCHEME"/>
+  <int value="981" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCONFIGURATION"/>
+  <int value="982" label="DEVELOPERPRIVATE_DELETEEXTENSIONERRORS"/>
+  <int value="983" label="FILEMANAGERPRIVATE_ISPIEXLOADERENABLED"/>
+  <int value="984" label="HOTWORDPRIVATE_SPEAKERMODELEXISTSRESULT"/>
+  <int value="985" label="SETTINGSPRIVATE_SETPREF"/>
+  <int value="986" label="DELETED_SETTINGSPRIVATE_SETDOUBLEPREF"/>
+  <int value="987" label="DELETED_SETTINGSPRIVATE_SETSTRINGPREF"/>
+  <int value="988" label="DELETED_SETTINGSPRIVATE_SETURLPREF"/>
+  <int value="989" label="SETTINGSPRIVATE_GETALLPREFS"/>
+  <int value="990" label="SETTINGSPRIVATE_GETPREF"/>
+  <int value="991" label="NETWORKINGPRIVATE_FORGETNETWORK"/>
+  <int value="992" label="EASYUNLOCKPRIVATE_HIDEERRORBUBBLE"/>
+  <int value="993" label="WEBVIEWINTERNAL_SETZOOMMODE"/>
+  <int value="994" label="WEBVIEWINTERNAL_GETZOOMMODE"/>
+  <int value="995" label="LAUNCHERSEARCHPROVIDER_SETSEARCHRESULTS"/>
+  <int value="996" label="DATAREDUCTIONPROXY_CLEARDATASAVINGS"/>
+  <int value="997" label="BLUETOOTHPRIVATE_SETDISCOVERYFILTER"/>
+  <int value="998" label="FILESYSTEM_GETVOLUMELIST"/>
+  <int value="999" label="NETWORKINGPRIVATE_GETDEVICESTATES"/>
+  <int value="1000" label="DEVELOPERPRIVATE_GETPROFILECONFIGURATION"/>
+  <int value="1001" label="DEVELOPERPRIVATE_UPDATEPROFILECONFIGURATION"/>
+  <int value="1002" label="SOCKETS_UDP_SETBROADCAST"/>
+  <int value="1003" label="FILEMANAGERPRIVATE_GETPROVIDINGEXTENSIONS"/>
+  <int value="1004" label="WEBVIEWINTERNAL_ADDCONTENTSCRIPTS"/>
+  <int value="1005" label="WEBVIEWINTERNAL_REMOVECONTENTSCRIPTS"/>
+  <int value="1006" label="DEVELOPERPRIVATE_REPAIREXTENSION"/>
+  <int value="1007" label="DEVELOPERPRIVATE_SHOWOPTIONS"/>
+  <int value="1008" label="DEVELOPERPRIVATE_SHOWPATH"/>
+  <int value="1009" label="FILEMANAGERPRIVATE_ADDPROVIDEDFILESYSTEM"/>
+  <int value="1010" label="FILEMANAGERPRIVATE_CONFIGUREVOLUME"/>
+  <int value="1011" label="DELETED_SEARCHENGINESPRIVATE_GETSEARCHENGINES"/>
+  <int value="1012"
+      label="DELETED_SEARCHENGINESPRIVATE_SETSELECTEDSEARCHENGINE"/>
+  <int value="1013" label="AUTOFILLPRIVATE_SAVEADDRESS"/>
+  <int value="1014" label="AUTOFILLPRIVATE_GETADDRESSCOMPONENTS"/>
+  <int value="1015" label="AUTOFILLPRIVATE_SAVECREDITCARD"/>
+  <int value="1016" label="AUTOFILLPRIVATE_REMOVEENTRY"/>
+  <int value="1017" label="AUTOFILLPRIVATE_VALIDATEPHONENUMBERS"/>
+  <int value="1018" label="AUTOFILLPRIVATE_MASKCREDITCARD"/>
+  <int value="1019" label="INSTANCEID_GETID"/>
+  <int value="1020" label="INSTANCEID_GETCREATIONTIME"/>
+  <int value="1021" label="INSTANCEID_GETTOKEN"/>
+  <int value="1022" label="INSTANCEID_DELETETOKEN"/>
+  <int value="1023" label="INSTANCEID_DELETEID"/>
+  <int value="1024" label="GCDPRIVATE_GETDEVICEINFO"/>
+  <int value="1025" label="DELETED_SEARCHENGINESPRIVATE_GETHOTWORDSTATE"/>
+  <int value="1026" label="DELETED_SEARCHENGINESPRIVATE_ADDOTHERSEARCHENGINE"/>
+  <int value="1027" label="DELETED_SEARCHENGINESPRIVATE_REMOVESEARCHENGINE"/>
+  <int value="1028" label="DELETED_SEARCHENGINESPRIVATE_UPDATESEARCHENGINE"/>
+  <int value="1029" label="DELETED_SEARCHENGINESPRIVATE_OPTINTOHOTWORDING"/>
+  <int value="1030" label="WEBSTOREWIDGETPRIVATE_INSTALLWEBSTOREITEM"/>
+  <int value="1031" label="WEBSTOREWIDGETPRIVATE_GETSTRINGS"/>
+  <int value="1032" label="WEBRTCDESKTOPCAPTUREPRIVATE_CHOOSEDESKTOPMEDIA"/>
+  <int value="1033"
+      label="WEBRTCDESKTOPCAPTUREPRIVATE_CANCELCHOOSEDESKTOPMEDIA"/>
+  <int value="1034" label="BLUETOOTHLOWENERGY_REGISTERADVERTISEMENT"/>
+  <int value="1035" label="BLUETOOTHLOWENERGY_UNREGISTERADVERTISEMENT"/>
+  <int value="1036"
+      label="DELETED_PASSWORDSPRIVATE_CANPASSWORDACCOUNTBEMANAGED"/>
+  <int value="1037" label="PASSWORDSPRIVATE_REMOVESAVEDPASSWORD"/>
+  <int value="1038" label="PASSWORDSPRIVATE_REMOVEPASSWORDEXCEPTION"/>
+  <int value="1039" label="PASSWORDSPRIVATE_REQUESTPLAINTEXTPASSWORD"/>
+  <int value="1040" label="LAUNCHERPAGE_HIDE"/>
+  <int value="1041" label="PLATFORMKEYS_VERIFYTLSSERVERCERTIFICATE"/>
+  <int value="1042" label="DEVELOPERPRIVATE_SETSHORTCUTHANDLINGSUSPENDED"/>
+  <int value="1043" label="DEVELOPERPRIVATE_UPDATEEXTENSIONCOMMAND"/>
+  <int value="1044" label="INPUTMETHODPRIVATE_GETENCRYPTSYNCENABLED"/>
+  <int value="1045" label="USERSPRIVATE_GETWHITELISTEDUSERS"/>
+  <int value="1046" label="USERSPRIVATE_ADDWHITELISTEDUSER"/>
+  <int value="1047" label="USERSPRIVATE_REMOVEWHITELISTEDUSER"/>
+  <int value="1048" label="USERSPRIVATE_ISCURRENTUSEROWNER"/>
+  <int value="1049" label="USERSPRIVATE_ISWHITELISTMANAGED"/>
+  <int value="1050" label="PRINTERPROVIDERINTERNAL_REPORTUSBPRINTERINFO"/>
+  <int value="1051" label="WEBCAMPRIVATE_OPENSERIALWEBCAM"/>
+  <int value="1052" label="WEBCAMPRIVATE_CLOSEWEBCAM"/>
+  <int value="1053" label="SERIAL_SETBREAK"/>
+  <int value="1054" label="SERIAL_CLEARBREAK"/>
+  <int value="1055" label="EXTENSIONVIEWINTERNAL_LOADSRC"/>
+  <int value="1056" label="EXTENSIONVIEWINTERNAL_PARSESRC"/>
+  <int value="1057" label="HID_GETUSERSELECTEDDEVICES"/>
+  <int value="1058"
+      label="FILESYSTEMPROVIDERINTERNAL_GETACTIONSREQUESTEDSUCCESS"/>
+  <int value="1059"
+      label="DASHBOARDPRIVATE_SHOWPERMISSIONPROMPTFORDELEGATEDBUNDLEINSTALL"/>
+  <int value="1060" label="FILEMANAGERPRIVATEINTERNAL_GETCUSTOMACTIONS"/>
+  <int value="1061" label="FILEMANAGERPRIVATEINTERNAL_EXECUTECUSTOMACTION"/>
+  <int value="1062" label="MDNS_FORCEDISCOVERY"/>
+  <int value="1063" label="LANGUAGESETTINGSPRIVATE_GETLANGUAGELIST"/>
+  <int value="1064" label="DELETED_LANGUAGESETTINGSPRIVATE_SETLANGUAGELIST"/>
+  <int value="1065"
+      label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKDICTIONARYSTATUS"/>
+  <int value="1066" label="LANGUAGESETTINGSPRIVATE_GETSPELLCHECKWORDS"/>
+  <int value="1067" label="LANGUAGESETTINGSPRIVATE_GETTRANSLATETARGETLANGUAGE"/>
+  <int value="1068" label="LANGUAGESETTINGSPRIVATE_GETINPUTMETHODLISTS"/>
+  <int value="1069" label="LANGUAGESETTINGSPRIVATE_ADDINPUTMETHOD"/>
+  <int value="1070" label="LANGUAGESETTINGSPRIVATE_REMOVEINPUTMETHOD"/>
+  <int value="1071" label="FILEMANAGERPRIVATE_CANCELALLFILETRANSFERS"/>
+  <int value="1072" label="NETWORKINGPRIVATE_UNLOCKCELLULARSIM"/>
+  <int value="1073" label="NETWORKINGPRIVATE_SETCELLULARSIMSTATE"/>
+  <int value="1074" label="ENTERPRISE_DEVICEATTRIBUTES_GETDIRECTORYDEVICEID"/>
+  <int value="1075" label="CASTDEVICESPRIVATE_UPDATEDEVICES"/>
+  <int value="1076" label="SYSTEM_DISPLAY_ENABLEUNIFIEDDESKTOP"/>
+  <int value="1077" label="BROWSINGDATA_REMOVECACHESTORAGE"/>
+  <int value="1078" label="VIRTUALKEYBOARDPRIVATE_SETKEYBOARDSTATE"/>
+  <int value="1079" label="VIRTUALKEYBOARDPRIVATE_SETHOTRODKEYBOARD"/>
+  <int value="1080" label="CERTIFICATEPROVIDERINTERNAL_REPORTSIGNATURE"/>
+  <int value="1081" label="CERTIFICATEPROVIDERINTERNAL_REPORTCERTIFICATES"/>
+  <int value="1082" label="BLUETOOTHPRIVATE_PAIR"/>
+  <int value="1083" label="EASYUNLOCKPRIVATE_FINDSETUPCONNECTION"/>
+  <int value="1084" label="RESOURCESPRIVATE_GETSTRINGS"/>
+  <int value="1085" label="USB_GETCONFIGURATIONS"/>
+  <int value="1086" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONSTATUS"/>
+  <int value="1087" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONDISCONNECT"/>
+  <int value="1088" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONSEND"/>
+  <int value="1089" label="DATAREDUCTIONPROXY_GETDATAUSAGE"/>
+  <int value="1090" label="EASYUNLOCKPRIVATE_SETUPCONNECTIONGETDEVICEADDRESS"/>
+  <int value="1091" label="TABCAPTURE_CAPTUREOFFSCREENTAB"/>
+  <int value="1092" label="LANGUAGESETTINGSPRIVATE_ADDSPELLCHECKWORD"/>
+  <int value="1093" label="LANGUAGESETTINGSPRIVATE_REMOVESPELLCHECKWORD"/>
+  <int value="1094" label="SETTINGSPRIVATE_GETDEFAULTZOOMFUNCTION"/>
+  <int value="1095" label="SETTINGSPRIVATE_SETDEFAULTZOOMFUNCTION"/>
+  <int value="1096" label="BLUETOOTHPRIVATE_CONNECT"/>
+  <int value="1097" label="BLUETOOTHPRIVATE_FORGETDEVICE"/>
+  <int value="1098" label="DISPLAYSOURCE_GETAVAILABLESINKS"/>
+  <int value="1099" label="DISPLAYSOURCE_REQUESTAUTHENTICATION"/>
+  <int value="1100" label="WEBRTCLOGGINGPRIVATE_STARTAUDIODEBUGRECORDINGS"/>
+  <int value="1101" label="WEBRTCLOGGINGPRIVATE_STOPAUDIODEBUGRECORDINGS"/>
+  <int value="1102" label="TERMINALPRIVATE_ACKOUTPUT"/>
+  <int value="1103" label="INPUT_IME_CREATEWINDOW"/>
+  <int value="1104" label="INPUTMETHODPRIVATE_SETXKBLAYOUT"/>
+  <int value="1105" label="ACCESSIBILITY_PRIVATE_SETKEYBOARDLISTENER"/>
+  <int value="1106" label="INPUT_IME_ACTIVATE"/>
+  <int value="1107" label="INPUT_IME_DEACTIVATE"/>
+  <int value="1108" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEMACHINEKEY"/>
+  <int value="1109" label="ENTERPRISE_PLATFORMKEYS_CHALLENGEUSERKEY"/>
+  <int value="1110" label="INPUTMETHODPRIVATE_NOTIFYIMEMENUITEMACTIVATED"/>
+  <int value="1111" label="INPUT_IME_SHOWWINDOW"/>
+  <int value="1112" label="INPUT_IME_HIDEWINDOW"/>
+  <int value="1113" label="INPUTMETHODPRIVATE_SHOWINPUTVIEW"/>
+  <int value="1114" label="WALLPAPERPRIVATE_RECORDWALLPAPERUMA"/>
+  <int value="1115" label="AUTOTESTPRIVATE_GETVISIBLENOTIFICATIONS"/>
+  <int value="1116" label="WEBRTCLOGGINGPRIVATE_STARTRTCEVENTLOGGING"/>
+  <int value="1117" label="WEBRTCLOGGINGPRIVATE_STOPRTCEVENTLOGGING"/>
+  <int value="1118" label="PASSWORDSPRIVATE_GETSAVEDPASSWORDLIST"/>
+  <int value="1119" label="PASSWORDSPRIVATE_GETPASSWORDEXCEPTIONLIST"/>
+  <int value="1120" label="INPUTMETHODPRIVATE_OPENOPTIONSPAGE"/>
+  <int value="1121" label="FEEDBACKPRIVATE_LOGSRTPROMPTRESULT"/>
+  <int value="1122" label="BLUETOOTHLOWENERGY_CREATESERVICE"/>
+  <int value="1123" label="BLUETOOTHLOWENERGY_CREATECHARACTERISTIC"/>
+  <int value="1124" label="BLUETOOTHLOWENERGY_CREATEDESCRIPTOR"/>
+  <int value="1125" label="BLUETOOTHLOWENERGY_REGISTERSERVICE"/>
+  <int value="1126" label="BLUETOOTHLOWENERGY_UNREGISTERSERVICE"/>
+  <int value="1127" label="BLUETOOTHLOWENERGY_SENDREQUESTRESPONSE"/>
+  <int value="1128"
+      label="BLUETOOTHLOWENERGY_NOTIFYCHARACTERISTICVALUECHANGED"/>
+  <int value="1129" label="BLUETOOTHLOWENERGY_REMOVESERVICE"/>
+  <int value="1130" label="AUTOFILLPRIVATE_GETADDRESSLIST"/>
+  <int value="1131" label="AUTOFILLPRIVATE_GETCREDITCARDLIST"/>
+  <int value="1132" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONSTART"/>
+  <int value="1133" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONADJUST"/>
+  <int value="1134" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONRESET"/>
+  <int value="1135" label="SYSTEM_DISPLAY_OVERSCANCALIBRATIONCOMPLETE"/>
+  <int value="1136" label="AUTOFILLPRIVATE_GETCOUNTRYLIST"/>
+  <int value="1137" label="RUNTIME_RESTARTAFTERDELAY"/>
+  <int value="1138" label="SYSTEM_DISPLAY_SETDISPLAYLAYOUT"/>
+  <int value="1139" label="SYSTEM_DISPLAY_GETDISPLAYLAYOUT"/>
+  <int value="1140" label="QUICKUNLOCKPRIVATE_SETMODES"/>
+  <int value="1141" label="QUICKUNLOCKPRIVATE_GETACTIVEMODES"/>
+  <int value="1142" label="QUICKUNLOCKPRIVATE_GETAVAILABLEMODES"/>
+  <int value="1143" label="WEBSTOREPRIVATE_ISPENDINGCUSTODIANAPPROVAL"/>
+  <int value="1144" label="TABS_DISCARD"/>
+  <int value="1145" label="LANGUAGESETTINGSPRIVATE_ENABLELANGUAGE"/>
+  <int value="1146" label="LANGUAGESETTINGSPRIVATE_DISABLELANGUAGE"/>
+  <int value="1147" label="FILEMANAGERPRIVATEINTERNAL_GETDIRECTORYSIZE"/>
+  <int value="1148" label="BLUETOOTHLOWENERGY_SETADVERTISINGINTERVAL"/>
+</enum>
+
+<enum name="ExtensionIconState" type="int">
+  <int value="0" label="DISABLED"/>
+  <int value="1" label="VISIBLE"/>
+  <int value="2" label="OVERFLOWED"/>
+</enum>
+
+<enum name="ExtensionInstallCause" type="int">
+  <int value="0" label="INSTALL_CAUSE_UNSET"/>
+  <int value="1" label="INSTALL_CAUSE_USER_DOWNLOAD"/>
+  <int value="2" label="INSTALL_CAUSE_UPDATE"/>
+  <int value="3" label="INSTALL_CAUSE_EXTERNAL_FILE"/>
+  <int value="4" label="INSTALL_CAUSE_AUTOMATION"/>
+</enum>
+
+<enum name="ExtensionInstallPromptExperimentLinkAction" type="int">
+  <int value="0" label="Link is shown"/>
+  <int value="1" label="Link is not shown"/>
+  <int value="2" label="Link is clicked"/>
+</enum>
+
+<enum name="ExtensionInstallPromptType" type="int">
+  <int value="0" label="Install prompt"/>
+  <int value="1" label="Inline install prompt"/>
+  <int value="2" label="Bundle install prompt"/>
+  <int value="3" label="Re-enable prompt"/>
+  <int value="4" label="Permissions prompt"/>
+  <int value="5" label="External install prompt"/>
+  <int value="6" label="Post install permissions prompt"/>
+  <int value="7" label="Launch prompt"/>
+  <int value="8" label="Remote install prompt"/>
+</enum>
+
+<enum name="ExtensionInstallVerifierGetSignatureResult" type="int">
+  <int value="0" label="No signature (network error, etc)"/>
+  <int value="1" label="Invalid signature"/>
+  <int value="2" label="Valid signature"/>
+</enum>
+
+<enum name="ExtensionInstallVerifierInitResult" type="int">
+  <int value="0" label="No value in prefs"/>
+  <int value="1" label="Pref present but parsing failed"/>
+  <int value="2" label="Invalid signature"/>
+  <int value="3" label="Valid signature"/>
+</enum>
+
+<enum name="ExtensionInstallVerifierMustRemainDisabled" type="int">
+  <int value="0" label="VERIFIED"/>
+  <int value="1" label="NOT_EXTENSION"/>
+  <int value="2" label="UNPACKED"/>
+  <int value="3" label="ENTERPRISE_POLICY_ALLOWED"/>
+  <int value="4" label="FORCED_NOT_VERIFIED"/>
+  <int value="5" label="NOT_FROM_STORE"/>
+  <int value="6" label="NO_SIGNATURE"/>
+  <int value="7" label="NOT_VERIFIED_BUT_NOT_ENFORCING"/>
+  <int value="8" label="NOT_VERIFIED"/>
+  <int value="9" label="NOT_VERIFIED_BUT_INSTALL_TIME_NEWER_THAN_SIGNATURE"/>
+  <int value="10" label="NOT_VERIFIED_BUT_UNKNOWN_ID"/>
+  <int value="11" label="COMPONENT"/>
+</enum>
+
+<enum name="ExtensionInstallVerifierStatus" type="int">
+  <int value="0" label="NONE"/>
+  <int value="1" label="BOOTSTRAP"/>
+  <int value="2" label="ENFORCE"/>
+  <int value="3" label="ENFORCE_STRICT"/>
+</enum>
+
+<enum name="ExtensionLaunchType" type="int">
+  <int value="0" label="PINNED"/>
+  <int value="1" label="REGULAR"/>
+  <int value="2" label="FULLSCREEN"/>
+</enum>
+
+<enum name="ExtensionLocation" type="int">
+  <int value="0" label="INVALID"/>
+  <int value="1" label="INTERNAL"/>
+  <int value="2" label="EXTERNAL_PREF"/>
+  <int value="3" label="EXTERNAL_REGISTRY"/>
+  <int value="4" label="LOAD"/>
+  <int value="5" label="COMPONENT"/>
+  <int value="6" label="EXTERNAL_PREF_DOWNLOAD"/>
+  <int value="7" label="EXTERNAL_POLICY_DOWNLOAD"/>
+  <int value="8" label="COMMAND_LINE"/>
+  <int value="9" label="EXTERNAL_POLICY"/>
+  <int value="10" label="EXTERNAL_COMPONENT"/>
+</enum>
+
+<enum name="ExtensionNotificationType" type="int">
+  <int value="0" label="NOTIFICATION_TYPE_SIMPLE"/>
+  <int value="1" label="NOTIFICATION_TYPE_BASE_FORMAT"/>
+  <int value="2" label="NOTIFICATION_TYPE_IMAGE"/>
+  <int value="3" label="NOTIFICATION_TYPE_MULTIPLE"/>
+  <int value="4" label="NOTIFICATION_TYPE_PROGRESS"/>
+</enum>
+
+<enum name="ExtensionPermission" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="NONE"/>
+  <int value="2" label="BOOKMARKS"/>
+  <int value="3" label="GEOLOCATION"/>
+  <int value="4" label="BROWSING_HISTORY"/>
+  <int value="5" label="TABS"/>
+  <int value="6" label="MANAGEMENT"/>
+  <int value="7" label="DEBUGGER"/>
+  <int value="8" label="1_HOST"/>
+  <int value="9" label="2_HOSTS"/>
+  <int value="10" label="3_HOSTS"/>
+  <int value="11" label="4_OR_MORE_HOSTS"/>
+  <int value="12" label="ALL_HOSTS"/>
+  <int value="13" label="FULL_ACCESS"/>
+  <int value="14" label="CLIPBOARD"/>
+  <int value="15" label="TTS_ENGINE"/>
+  <int value="16" label="CONTENT_SETTINGS"/>
+  <int value="17" label="PRIVACY"/>
+  <int value="18" label="MANAGED_MODE"/>
+  <int value="19" label="INPUT"/>
+  <int value="20" label="AUDIO_CAPTURE"/>
+  <int value="21" label="VIDEO_CAPTURE"/>
+  <int value="22" label="DOWNLOADS"/>
+  <int value="23" label="FILE_SYSTEM_WRITE"/>
+  <int value="24" label="ALL_MEDIA_GALLERIES"/>
+  <int value="25" label="SERIAL"/>
+  <int value="26" label="SOCKET_ANY_HOST"/>
+  <int value="27" label="SOCKET_DOMAIN_HOSTS"/>
+  <int value="28" label="SOCKET_SPECIFIC_HOSTS"/>
+</enum>
+
+<enum name="ExtensionPermission2" type="int">
+<!-- Generated from extensions/common/permissions/permission_message.h -->
+
+  <int value="0" label="kUnknown"/>
+  <int value="1" label="kNone"/>
+  <int value="2" label="kBookmarks"/>
+  <int value="3" label="kGeolocation"/>
+  <int value="4" label="kBrowsingHistory"/>
+  <int value="5" label="kTabs"/>
+  <int value="6" label="kManagement"/>
+  <int value="7" label="kDebugger"/>
+  <int value="8" label="kDesktopCapture"/>
+  <int value="9" label="kHid"/>
+  <int value="10" label="kHosts1"/>
+  <int value="11" label="kHosts2"/>
+  <int value="12" label="kHosts3"/>
+  <int value="13" label="kHosts4OrMore"/>
+  <int value="14" label="kHostsAll"/>
+  <int value="15" label="kFullAccess"/>
+  <int value="16" label="kClipboard"/>
+  <int value="17" label="kTtsEngine"/>
+  <int value="18" label="kContentSettings"/>
+  <int value="19" label="kPrivacy"/>
+  <int value="20" label="kSupervisedUser"/>
+  <int value="21" label="kInput"/>
+  <int value="22" label="kAudioCapture"/>
+  <int value="23" label="kVideoCapture"/>
+  <int value="24" label="kDownloads"/>
+  <int value="25" label="kDeleted_FileSystemWrite"/>
+  <int value="26" label="kMediaGalleriesAllGalleriesRead"/>
+  <int value="27" label="kSerial"/>
+  <int value="28" label="kSocketAnyHost"/>
+  <int value="29" label="kSocketDomainHosts"/>
+  <int value="30" label="kSocketSpecificHosts"/>
+  <int value="31" label="kBluetooth"/>
+  <int value="32" label="kUsb"/>
+  <int value="33" label="kSystemIndicator"/>
+  <int value="34" label="kUsbDevice"/>
+  <int value="35" label="kMediaGalleriesAllGalleriesCopyTo"/>
+  <int value="36" label="kSystemInfoDisplay"/>
+  <int value="37" label="kNativeMessaging"/>
+  <int value="38" label="kSyncFileSystem"/>
+  <int value="39" label="kAudio"/>
+  <int value="40" label="kFavicon"/>
+  <int value="41" label="kMusicManagerPrivate"/>
+  <int value="42" label="kWebConnectable"/>
+  <int value="43" label="kActivityLogPrivate"/>
+  <int value="44" label="kBluetoothDevices"/>
+  <int value="45" label="kDownloadsOpen"/>
+  <int value="46" label="kNetworkingPrivate"/>
+  <int value="47" label="kDeclarativeWebRequest"/>
+  <int value="48" label="kFileSystemDirectory"/>
+  <int value="49" label="kFileSystemWriteDirectory"/>
+  <int value="50" label="kSignedInDevices"/>
+  <int value="51" label="kWallpaper"/>
+  <int value="52" label="kNetworkState"/>
+  <int value="53" label="kHomepage"/>
+  <int value="54" label="kSearchProvider"/>
+  <int value="55" label="kStartupPages"/>
+  <int value="56" label="kMediaGalleriesAllGalleriesDelete"/>
+  <int value="57" label="kScreenlockPrivate"/>
+  <int value="58" label="kOverrideBookmarksUI"/>
+  <int value="59" label="kAutomation"/>
+  <int value="60" label="kAccessibilityFeaturesModify"/>
+  <int value="61" label="kAccessibilityFeaturesRead"/>
+  <int value="62" label="kBluetoothPrivate"/>
+  <int value="63" label="kIdentityEmail"/>
+  <int value="64" label="kExperienceSamplingPrivate"/>
+  <int value="65" label="kCopresence"/>
+  <int value="66" label="kTopSites"/>
+  <int value="67" label="kU2fDevices"/>
+  <int value="68" label="kDocumentScan"/>
+  <int value="69" label="kNetworkingConfig"/>
+  <int value="70" label="kPlatformKeys"/>
+  <int value="71" label="kMDns"/>
+  <int value="72" label="kVpnProvider"/>
+  <int value="73" label="kHosts1ReadOnly"/>
+  <int value="74" label="kHosts2ReadOnly"/>
+  <int value="75" label="kHosts3ReadOnly"/>
+  <int value="76" label="kHosts4OrMoreReadOnly"/>
+  <int value="77" label="kHostsAllReadOnly"/>
+  <int value="78" label="kDeleted_InterceptAllKeys"/>
+  <int value="79" label="kSettingsPrivate"/>
+  <int value="80" label="kPrinterProvider"/>
+  <int value="81" label="kSearchEnginesPrivate"/>
+  <int value="82" label="kAutofillPrivate"/>
+  <int value="83" label="kPasswordsPrivate"/>
+  <int value="84" label="kUsersPrivate"/>
+</enum>
+
+<enum name="ExtensionPermission3" type="int">
+<!-- Generated from extensions/common/permissions/api_permission.h -->
+
+  <int value="0" label="kInvalid"/>
+  <int value="1" label="kUnknown"/>
+  <int value="2" label="kAccessibilityFeaturesModify"/>
+  <int value="3" label="kAccessibilityFeaturesRead"/>
+  <int value="4" label="kAccessibilityPrivate"/>
+  <int value="5" label="kActiveTab"/>
+  <int value="6" label="kActivityLogPrivate"/>
+  <int value="7" label="kAlarms"/>
+  <int value="8" label="kAlphaEnabled"/>
+  <int value="9" label="kAlwaysOnTopWindows"/>
+  <int value="10" label="kAppView"/>
+  <int value="11" label="kAudio"/>
+  <int value="12" label="kAudioCapture"/>
+  <int value="13" label="kAudioModem"/>
+  <int value="14" label="kAutofillPrivate"/>
+  <int value="15" label="kAutomation"/>
+  <int value="16" label="kAutoTestPrivate"/>
+  <int value="17" label="kBackground"/>
+  <int value="18" label="kBluetoothPrivate"/>
+  <int value="19" label="kBookmark"/>
+  <int value="20" label="kBookmarkManagerPrivate"/>
+  <int value="21" label="kBrailleDisplayPrivate"/>
+  <int value="22" label="kBrowser"/>
+  <int value="23" label="kBrowsingData"/>
+  <int value="24" label="kCast"/>
+  <int value="25" label="kCastStreaming"/>
+  <int value="26" label="kChromeosInfoPrivate"/>
+  <int value="27" label="kClipboardRead"/>
+  <int value="28" label="kClipboardWrite"/>
+  <int value="29" label="kCloudPrintPrivate"/>
+  <int value="30" label="kCommandLinePrivate"/>
+  <int value="31" label="kCommandsAccessibility"/>
+  <int value="32" label="kContentSettings"/>
+  <int value="33" label="kContextMenus"/>
+  <int value="34" label="kCookie"/>
+  <int value="35" label="kCopresence"/>
+  <int value="36" label="kCopresencePrivate"/>
+  <int value="37" label="kCryptotokenPrivate"/>
+  <int value="38" label="kDataReductionProxy"/>
+  <int value="39" label="kDiagnostics"/>
+  <int value="40" label="kDial"/>
+  <int value="41" label="kDebugger"/>
+  <int value="42" label="kDeclarative"/>
+  <int value="43" label="kDeclarativeContent"/>
+  <int value="44" label="kDeclarativeWebRequest"/>
+  <int value="45" label="kDesktopCapture"/>
+  <int value="46" label="kDesktopCapturePrivate"/>
+  <int value="47" label="kDeveloperPrivate"/>
+  <int value="48" label="kDevtools"/>
+  <int value="49" label="kDns"/>
+  <int value="50" label="kDocumentScan"/>
+  <int value="51" label="kDownloads"/>
+  <int value="52" label="kDownloadsInternal"/>
+  <int value="53" label="kDownloadsOpen"/>
+  <int value="54" label="kDownloadsShelf"/>
+  <int value="55" label="kEasyUnlockPrivate"/>
+  <int value="56" label="kEchoPrivate"/>
+  <int value="57" label="kEmbeddedExtensionOptions"/>
+  <int value="58" label="kEnterprisePlatformKeys"/>
+  <int value="59" label="kEnterprisePlatformKeysPrivate"/>
+  <int value="60" label="kExperienceSamplingPrivate"/>
+  <int value="61" label="kExperimental"/>
+  <int value="62" label="kExtensionView"/>
+  <int value="63" label="kExternallyConnectableAllUrls"/>
+  <int value="64" label="kFeedbackPrivate"/>
+  <int value="65" label="kFileBrowserHandler"/>
+  <int value="66" label="kFileBrowserHandlerInternal"/>
+  <int value="67" label="kFileManagerPrivate"/>
+  <int value="68" label="kFileSystem"/>
+  <int value="69" label="kFileSystemDirectory"/>
+  <int value="70" label="kFileSystemProvider"/>
+  <int value="71" label="kFileSystemRequestFileSystem"/>
+  <int value="72" label="kFileSystemRetainEntries"/>
+  <int value="73" label="kFileSystemWrite"/>
+  <int value="74" label="kDeleted_FileSystemWriteDirectory"/>
+  <int value="75" label="kFirstRunPrivate"/>
+  <int value="76" label="kFontSettings"/>
+  <int value="77" label="kFullscreen"/>
+  <int value="78" label="kGcdPrivate"/>
+  <int value="79" label="kGcm"/>
+  <int value="80" label="kGeolocation"/>
+  <int value="81" label="kHid"/>
+  <int value="82" label="kHistory"/>
+  <int value="83" label="kHomepage"/>
+  <int value="84" label="kHotwordPrivate"/>
+  <int value="85" label="kIdentity"/>
+  <int value="86" label="kIdentityEmail"/>
+  <int value="87" label="kIdentityPrivate"/>
+  <int value="88" label="kIdltest"/>
+  <int value="89" label="kIdle"/>
+  <int value="90" label="kImeWindowEnabled"/>
+  <int value="91" label="kInlineInstallPrivate"/>
+  <int value="92" label="kInput"/>
+  <int value="93" label="kInputMethodPrivate"/>
+  <int value="94" label="kDeleted_InterceptAllKeys"/>
+  <int value="95" label="kLauncherSearchProvider"/>
+  <int value="96" label="kLocation"/>
+  <int value="97" label="kLogPrivate"/>
+  <int value="98" label="kManagement"/>
+  <int value="99" label="kMediaGalleries"/>
+  <int value="100" label="kMediaPlayerPrivate"/>
+  <int value="101" label="kMediaRouterPrivate"/>
+  <int value="102" label="kMetricsPrivate"/>
+  <int value="103" label="kMDns"/>
+  <int value="104" label="kMusicManagerPrivate"/>
+  <int value="105" label="kNativeMessaging"/>
+  <int value="106" label="kNetworkingConfig"/>
+  <int value="107" label="kNetworkingPrivate"/>
+  <int value="108" label="kNotificationProvider"/>
+  <int value="109" label="kNotifications"/>
+  <int value="110" label="kOverrideEscFullscreen"/>
+  <int value="111" label="kPageCapture"/>
+  <int value="112" label="kPointerLock"/>
+  <int value="113" label="kPlatformKeys"/>
+  <int value="114" label="kPlugin"/>
+  <int value="115" label="kPower"/>
+  <int value="116" label="kPreferencesPrivate"/>
+  <int value="117" label="kDeleted_PrincipalsPrivate"/>
+  <int value="118" label="kPrinterProvider"/>
+  <int value="119" label="kPrivacy"/>
+  <int value="120" label="kProcesses"/>
+  <int value="121" label="kProxy"/>
+  <int value="122" label="kImageWriterPrivate"/>
+  <int value="123" label="kDeleted_ReadingListPrivate"/>
+  <int value="124" label="kRtcPrivate"/>
+  <int value="125" label="kSearchProvider"/>
+  <int value="126" label="kSearchEnginesPrivate"/>
+  <int value="127" label="kSerial"/>
+  <int value="128" label="kSessions"/>
+  <int value="129" label="kSettingsPrivate"/>
+  <int value="130" label="kSignedInDevices"/>
+  <int value="131" label="kSocket"/>
+  <int value="132" label="kStartupPages"/>
+  <int value="133" label="kStorage"/>
+  <int value="134" label="kStreamsPrivate"/>
+  <int value="135" label="kSyncFileSystem"/>
+  <int value="136" label="kSystemPrivate"/>
+  <int value="137" label="kSystemDisplay"/>
+  <int value="138" label="kSystemStorage"/>
+  <int value="139" label="kTab"/>
+  <int value="140" label="kTabCapture"/>
+  <int value="141" label="kTabCaptureForTab"/>
+  <int value="142" label="kTerminalPrivate"/>
+  <int value="143" label="kTopSites"/>
+  <int value="144" label="kTts"/>
+  <int value="145" label="kTtsEngine"/>
+  <int value="146" label="kUnlimitedStorage"/>
+  <int value="147" label="kU2fDevices"/>
+  <int value="148" label="kUsb"/>
+  <int value="149" label="kUsbDevice"/>
+  <int value="150" label="kVideoCapture"/>
+  <int value="151" label="kVirtualKeyboardPrivate"/>
+  <int value="152" label="kVpnProvider"/>
+  <int value="153" label="kWallpaper"/>
+  <int value="154" label="kWallpaperPrivate"/>
+  <int value="155" label="kWebcamPrivate"/>
+  <int value="156" label="kWebConnectable"/>
+  <int value="157" label="kWebNavigation"/>
+  <int value="158" label="kWebRequest"/>
+  <int value="159" label="kWebRequestBlocking"/>
+  <int value="160" label="kWebrtcAudioPrivate"/>
+  <int value="161" label="kWebrtcDesktopCapturePrivate"/>
+  <int value="162" label="kWebrtcLoggingPrivate"/>
+  <int value="163" label="kWebstorePrivate"/>
+  <int value="164" label="kWebstoreWidgetPrivate"/>
+  <int value="165" label="kWebView"/>
+  <int value="166" label="kWindowShape"/>
+  <int value="167" label="kScreenlockPrivate"/>
+  <int value="168" label="kSystemCpu"/>
+  <int value="169" label="kSystemMemory"/>
+  <int value="170" label="kSystemNetwork"/>
+  <int value="171" label="kSystemInfoCpu"/>
+  <int value="172" label="kSystemInfoMemory"/>
+  <int value="173" label="kBluetooth"/>
+  <int value="174" label="kBluetoothDevices"/>
+  <int value="175" label="kFavicon"/>
+  <int value="176" label="kFullAccess"/>
+  <int value="177" label="kHostReadOnly"/>
+  <int value="178" label="kHostReadWrite"/>
+  <int value="179" label="kHostsAll"/>
+  <int value="180" label="kHostsAllReadOnly"/>
+  <int value="181" label="kMediaGalleriesAllGalleriesCopyTo"/>
+  <int value="182" label="kMediaGalleriesAllGalleriesDelete"/>
+  <int value="183" label="kMediaGalleriesAllGalleriesRead"/>
+  <int value="184" label="kNetworkState"/>
+  <int value="185" label="kOverrideBookmarksUI"/>
+  <int value="186" label="kShouldWarnAllHosts"/>
+  <int value="187" label="kSocketAnyHost"/>
+  <int value="188" label="kSocketDomainHosts"/>
+  <int value="189" label="kSocketSpecificHosts"/>
+  <int value="190" label="kDeleted_UsbDeviceList"/>
+  <int value="191" label="kUsbDeviceUnknownProduct"/>
+  <int value="192" label="kUsbDeviceUnknownVendor"/>
+  <int value="193" label="kUsersPrivate"/>
+  <int value="194" label="kPasswordsPrivate"/>
+  <int value="195" label="kLanguageSettingsPrivate"/>
+  <int value="196" label="kEnterpriseDeviceAttributes"/>
+  <int value="197" label="kCertificateProvider"/>
+  <int value="198" label="kResourcesPrivate"/>
+  <int value="199" label="kDisplaySource"/>
+  <int value="200" label="kClipboard"/>
+</enum>
+
+<enum name="ExtensionServiceVerifyAllSuccess" type="int">
+  <int value="0" label="VERIFY_ALL_BOOTSTRAP_SUCCESS"/>
+  <int value="1" label="VERIFY_ALL_BOOTSTRAP_FAILURE"/>
+  <int value="2" label="VERIFY_ALL_NON_BOOTSTRAP_SUCCESS"/>
+  <int value="3" label="VERIFY_ALL_NON_BOOTSTRAP_FAILURE"/>
+</enum>
+
+<enum name="ExtensionType" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="EXTENSION"/>
+  <int value="2" label="THEME"/>
+  <int value="3" label="USER_SCRIPT"/>
+  <int value="4" label="HOSTED_APP"/>
+  <int value="5" label="LEGACY_PACKAGED_APP"/>
+  <int value="6" label="PLATFORM_APP"/>
+</enum>
+
+<enum name="ExtensionUninstallDialogAction" type="int">
+  <int value="0" label="Uninstall only"/>
+  <int value="1" label="Uninstall and report abuse"/>
+  <int value="2" label="Dialog canceled"/>
+</enum>
+
+<enum name="ExtensionUninstallSource" type="int">
+  <int value="0" label="Testing"/>
+  <int value="1" label="Context menu"/>
+  <int value="2" label="Permissions increase"/>
+  <int value="3" label="Storage threshold exceeded"/>
+  <int value="4" label="App list"/>
+  <int value="5" label="App info dialog"/>
+  <int value="6" label="Chrome apps page"/>
+  <int value="7" label="Chrome extensions page"/>
+  <int value="8" label="Extension"/>
+</enum>
+
+<enum name="ExtensionUnpackFailureReason" type="int">
+  <summary>
+    Reasons the sandboxed extension unpacker can fail.  See enum FailureReason
+    in src/chrome/browser/extensions/sandboxed_extension_unpacker.h .
+  </summary>
+  <int value="0" label="COULD_NOT_GET_TEMP_DIRECTORY"/>
+  <int value="1" label="COULD_NOT_CREATE_TEMP_DIRECTORY"/>
+  <int value="2" label="FAILED_TO_COPY_EXTENSION_FILE_TO_TEMP_DIRECTORY"/>
+  <int value="3" label="COULD_NOT_GET_SANDBOX_FRIENDLY_PATH"/>
+  <int value="4" label="COULD_NOT_LOCALIZE_EXTENSION"/>
+  <int value="5" label="INVALID_MANIFEST"/>
+  <int value="6" label="UNPACKER_CLIENT_FAILED"/>
+  <int value="7" label="UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL"/>
+  <int value="8" label="CRX_FILE_NOT_READABLE"/>
+  <int value="9" label="CRX_HEADER_INVALID"/>
+  <int value="10" label="CRX_MAGIC_NUMBER_INVALID"/>
+  <int value="11" label="CRX_VERSION_NUMBER_INVALID"/>
+  <int value="12" label="CRX_EXCESSIVELY_LARGE_KEY_OR_SIGNATURE"/>
+  <int value="13" label="CRX_ZERO_KEY_LENGTH"/>
+  <int value="14" label="CRX_ZERO_SIGNATURE_LENGTH"/>
+  <int value="15" label="CRX_PUBLIC_KEY_INVALID"/>
+  <int value="16" label="CRX_SIGNATURE_INVALID"/>
+  <int value="17" label="CRX_SIGNATURE_VERIFICATION_INITIALIZATION_FAILED"/>
+  <int value="18" label="CRX_SIGNATURE_VERIFICATION_FAILED"/>
+  <int value="19" label="ERROR_SERIALIZING_MANIFEST_JSON"/>
+  <int value="20" label="ERROR_SAVING_MANIFEST_JSON"/>
+  <int value="21" label="COULD_NOT_READ_IMAGE_DATA_FROM_DISK"/>
+  <int value="22" label="DECODED_IMAGES_DO_NOT_MATCH_THE_MANIFEST"/>
+  <int value="23" label="INVALID_PATH_FOR_BROWSER_IMAGE"/>
+  <int value="24" label="ERROR_REMOVING_OLD_IMAGE_FILE"/>
+  <int value="25" label="INVALID_PATH_FOR_BITMAP_IMAGE"/>
+  <int value="26" label="ERROR_RE_ENCODING_THEME_IMAGE"/>
+  <int value="27" label="ERROR_SAVING_THEME_IMAGE"/>
+  <int value="28" label="COULD_NOT_READ_CATALOG_DATA_FROM_DISK"/>
+  <int value="29" label="INVALID_CATALOG_DATA"/>
+  <int value="30" label="INVALID_PATH_FOR_CATALOG"/>
+  <int value="31" label="ERROR_SERIALIZING_CATALOG"/>
+  <int value="32" label="ERROR_SAVING_CATALOG"/>
+  <int value="33" label="CRX_HASH_VERIFICATION_FAILED"/>
+</enum>
+
+<enum name="ExternalDeviceAction" type="int">
+  <int value="0" label="Import to Drive"/>
+  <int value="1" label="View files"/>
+  <int value="2" label="View files (automatically)"/>
+  <int value="3" label="Watch video"/>
+  <int value="4" label="Error"/>
+  <int value="5" label="Close (no action)"/>
+</enum>
+
+<enum name="ExternalDisplayOpenResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failed with EACCES (incorrect permission on device)"/>
+  <int value="2" label="Failed with ENOENT (device missing)"/>
+  <int value="3" label="Failed for some other reason"/>
+</enum>
+
+<enum name="ExternalDisplayReceiveResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="ioctl() to I2C device failed"/>
+  <int value="2" label="Bad message checksum"/>
+  <int value="3" label="Bad message address"/>
+  <int value="4" label="Bad message length"/>
+  <int value="5" label="Bad command code in message"/>
+  <int value="6" label="Bad result code in message"/>
+  <int value="7" label="Bad feature index in message"/>
+  <int value="8" label="Maximum value of 0 in message"/>
+</enum>
+
+<enum name="ExternalDisplaySendResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="ioctl() to I2C device failed"/>
+</enum>
+
+<enum name="ExternalItemState" type="int">
+  <int value="0" label="DEPRECATED_DISABLED"/>
+  <int value="1" label="DEPRECATED_ENABLED"/>
+  <int value="2" label="DISABLED (in webstore)"/>
+  <int value="3" label="ENABLED (in webstore)"/>
+  <int value="4" label="DISABLED (not in webstore)"/>
+  <int value="5" label="ENABLED (not in webstore)"/>
+  <int value="6" label="UNINSTALLED (in webstore)"/>
+  <int value="7" label="UNINSTALLED (not in webstore)"/>
+</enum>
+
+<enum name="ExternallyConditionalizedType" type="int">
+  <int value="0" label="Cache entry requires validation"/>
+  <int value="1" label="Cache entry usable"/>
+  <int value="2" label="Cache entry validators don't match request"/>
+</enum>
+
+<enum name="Exynos5250LotIdEnum" type="int">
+  <int value="0" label="Fused device"/>
+  <int value="1" label="Generic unfused device"/>
+  <int value="2" label="Unfused; lot ID NZVPU"/>
+  <int value="3" label="Unfused; lot ID NZVR7"/>
+</enum>
+
+<enum name="FallbackDNSTestResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+</enum>
+
+<enum name="FallbackSSLVersion" type="int">
+  <int value="0" label="FALLBACK_NONE">SSL version fallback did not occur.</int>
+  <int value="1" label="FALLBACK_SSL3">Fell back on SSL 3.0.</int>
+  <int value="2" label="FALLBACK_TLS1">Fell back on TLS 1.0.</int>
+  <int value="3" label="FALLBACK_TLS1_1">Fell back on TLS 1.1.</int>
+</enum>
+
+<enum name="FaultTolerantHeap" type="int">
+  <int value="0" label="FTH_OFF">FTH is completely off.</int>
+  <int value="1" label="FTH_HKLM">FTH is enabled in HKLM.</int>
+  <int value="2" label="FTH_HKCU">FTH is enabled in HKCU.</int>
+  <int value="3" label="FTH_HKCU_HKLM">FTH is enabled in HKCU and HKLM.</int>
+  <int value="4" label="FTH_ACLAYERS">AcLayers.dll is loaded.</int>
+  <int value="5" label="FTH_ACLAYERS_HKLM">
+    AcLayers.dll is loaded and FTH is enabled in HKLM.
+  </int>
+  <int value="6" label="FTH_ACLAYERS_HKCU">
+    AcLayers.dll is loaded and FTH is enabled in HKCU.
+  </int>
+  <int value="7" label="FTH_ACLAYERS_HKCU_HKLM">
+    AcLayers.dll is loaded and FTH is enabled in HKCU and HKLM.
+  </int>
+  <int value="8" label="FTH_ACXTRNAL">AcXtrnal is loaded.</int>
+  <int value="9" label="FTH_ACXTRNAL_HKLM">
+    AcXtrnal is loaded and FTH is enabled in HKLM.
+  </int>
+  <int value="10" label="FTH_ACXTRNAL_HKCU">
+    AcXtrnal is loaded and FTH is enabled in HKCU.
+  </int>
+  <int value="11" label="FTH_ACXTRNAL_HKCU_HKLM">
+    AcXtrnal is loaded and FTH is enabled in HKCU and HKLM.
+  </int>
+  <int value="12" label="FTH_ACXTRNAL_ACLAYERS">
+    AcXtrmal and AcLayers.dll are loaded.
+  </int>
+  <int value="13" label="FTH_ACXTRNAL_ACLAYERS_HKLM">
+    AcXtrmal and AcLayers.dll are loaded and FTH is enabled in HKLM.
+  </int>
+  <int value="14" label="FTH_ACXTRNAL_ACLAYERS_HKCU">
+    AcXtrmal and AcLayers.dll are loaded and FTH is enabled in HKCU.
+  </int>
+  <int value="15" label="FTH_ACXTRNAL_ACLAYERS_HKCU_HKLM">
+    AcXtrmal and AcLayers.dll are loaded and FTH is enabled in HKCU and HKLM.
+  </int>
+</enum>
+
+<enum name="FeatureObserver" type="int">
+<!-- Generated from third_party/WebKit/Source/core/frame/UseCounter.h -->
+
+  <int value="0" label="OBSOLETE_PageDestruction"/>
+  <int value="1" label="LegacyNotifications"/>
+  <int value="2" label="MultipartMainResource"/>
+  <int value="3" label="PrefixedIndexedDB"/>
+  <int value="4" label="WorkerStart"/>
+  <int value="5" label="SharedWorkerStart"/>
+  <int value="6" label="LegacyWebAudio"/>
+  <int value="7" label="WebAudioStart"/>
+  <int value="8" label="PrefixedContentSecurityPolicy"/>
+  <int value="9" label="UnprefixedIndexedDB"/>
+  <int value="10" label="OpenWebDatabase"/>
+  <int value="11" label="LegacyHTMLNotifications"/>
+  <int value="12" label="LegacyTextNotifications"/>
+  <int value="13" label="UnprefixedRequestAnimationFrame"/>
+  <int value="14" label="PrefixedRequestAnimationFrame"/>
+  <int value="15" label="ContentSecurityPolicy"/>
+  <int value="16" label="ContentSecurityPolicyReportOnly"/>
+  <int value="17" label="PrefixedContentSecurityPolicyReportOnly"/>
+  <int value="18" label="PrefixedTransitionEndEvent"/>
+  <int value="19" label="UnprefixedTransitionEndEvent"/>
+  <int value="20" label="PrefixedAndUnprefixedTransitionEndEvent"/>
+  <int value="21" label="AutoFocusAttribute"/>
+  <int value="22" label="DeprecatedAutoSaveAttribute"/>
+  <int value="23" label="DataListElement"/>
+  <int value="24" label="FormAttribute"/>
+  <int value="25" label="IncrementalAttribute"/>
+  <int value="26" label="InputTypeColor"/>
+  <int value="27" label="InputTypeDate"/>
+  <int value="28" label="InputTypeDateTime"/>
+  <int value="29" label="InputTypeDateTimeFallback"/>
+  <int value="30" label="InputTypeDateTimeLocal"/>
+  <int value="31" label="InputTypeEmail"/>
+  <int value="32" label="InputTypeMonth"/>
+  <int value="33" label="InputTypeNumber"/>
+  <int value="34" label="InputTypeRange"/>
+  <int value="35" label="InputTypeSearch"/>
+  <int value="36" label="InputTypeTel"/>
+  <int value="37" label="InputTypeTime"/>
+  <int value="38" label="InputTypeURL"/>
+  <int value="39" label="InputTypeWeek"/>
+  <int value="40" label="InputTypeWeekFallback"/>
+  <int value="41" label="ListAttribute"/>
+  <int value="42" label="MaxAttribute"/>
+  <int value="43" label="MinAttribute"/>
+  <int value="44" label="PatternAttribute"/>
+  <int value="45" label="PlaceholderAttribute"/>
+  <int value="46" label="PrecisionAttribute"/>
+  <int value="47" label="PrefixedDirectoryAttribute"/>
+  <int value="48" label="PrefixedSpeechAttribute"/>
+  <int value="49" label="RequiredAttribute"/>
+  <int value="50" label="ResultsAttribute"/>
+  <int value="51" label="StepAttribute"/>
+  <int value="52" label="PageVisits"/>
+  <int value="53" label="HTMLMarqueeElement"/>
+  <int value="54" label="Unused: CSSOverflowMarquee"/>
+  <int value="55" label="Reflection"/>
+  <int value="56" label="CursorVisibility"/>
+  <int value="57" label="PrefixedStorageInfo"/>
+  <int value="58" label="XFrameOptions"/>
+  <int value="59" label="XFrameOptionsSameOrigin"/>
+  <int value="60" label="XFrameOptionsSameOriginWithBadAncestorChain"/>
+  <int value="61" label="DeprecatedFlexboxWebContent"/>
+  <int value="62" label="DeprecatedFlexboxChrome"/>
+  <int value="63" label="DeprecatedFlexboxChromeExtension"/>
+  <int value="64" label="SVGTRefElement"/>
+  <int value="65" label="UnprefixedPerformanceTimeline"/>
+  <int value="66" label="PrefixedPerformanceTimeline"/>
+  <int value="67" label="UnprefixedUserTiming"/>
+  <int value="68" label="PrefixedUserTiming"/>
+  <int value="69" label="WindowEvent"/>
+  <int value="70" label="ContentSecurityPolicyWithBaseElement"/>
+  <int value="71" label="PrefixedMediaAddKey"/>
+  <int value="72" label="PrefixedMediaGenerateKeyRequest"/>
+  <int value="73" label="WebAudioLooping"/>
+  <int value="74" label="DocumentClear"/>
+  <int value="75" label="PrefixedTransitionMediaFeature"/>
+  <int value="76" label="SVGFontElement"/>
+  <int value="77" label="XMLDocument"/>
+  <int value="78" label="XSLProcessingInstruction"/>
+  <int value="79" label="XSLTProcessor"/>
+  <int value="80" label="SVGSwitchElement"/>
+  <int value="81" label="PrefixedDocumentRegister"/>
+  <int value="82" label="HTMLShadowElementOlderShadowRoot"/>
+  <int value="83" label="DocumentAll"/>
+  <int value="84" label="FormElement"/>
+  <int value="85" label="DemotedFormElement"/>
+  <int value="86" label="CaptureAttributeAsEnum"/>
+  <int value="87" label="ShadowDOMPrefixedPseudo"/>
+  <int value="88" label="ShadowDOMPrefixedCreateShadowRoot"/>
+  <int value="89" label="ShadowDOMPrefixedShadowRoot"/>
+  <int value="90" label="SVGAnimationElement"/>
+  <int value="91" label="KeyboardEventKeyLocation"/>
+  <int value="92" label="CaptureEvents"/>
+  <int value="93" label="ReleaseEvents"/>
+  <int value="94" label="CSSDisplayRunIn"/>
+  <int value="95" label="CSSDisplayCompact"/>
+  <int value="96" label="LineClamp"/>
+  <int value="97" label="SubFrameBeforeUnloadRegistered"/>
+  <int value="98" label="SubFrameBeforeUnloadFired"/>
+  <int value="99" label="CSSPseudoElementPrefixedDistributed"/>
+  <int value="100" label="TextReplaceWholeText"/>
+  <int value="101" label="PrefixedShadowRootConstructor"/>
+  <int value="102" label="ConsoleMarkTimeline"/>
+  <int value="103" label="CSSPseudoElementUserAgentCustomPseudo"/>
+  <int value="104" label="DocumentTypeEntities"/>
+  <int value="105" label="DocumentTypeInternalSubset"/>
+  <int value="106" label="DocumentTypeNotations"/>
+  <int value="107" label="ElementGetAttributeNode"/>
+  <int value="108" label="ElementSetAttributeNode"/>
+  <int value="109" label="ElementRemoveAttributeNode"/>
+  <int value="110" label="ElementGetAttributeNodeNS"/>
+  <int value="111" label="DocumentCreateAttribute"/>
+  <int value="112" label="DocumentCreateAttributeNS"/>
+  <int value="113" label="DocumentCreateCDATASection"/>
+  <int value="114" label="DocumentInputEncoding"/>
+  <int value="115" label="DocumentXMLEncoding"/>
+  <int value="116" label="DocumentXMLStandalone"/>
+  <int value="117" label="DocumentXMLVersion"/>
+  <int value="118" label="NodeIsSameNode"/>
+  <int value="119" label="NodeIsSupported"/>
+  <int value="120" label="NodeNamespaceURI"/>
+  <int value="121" label="NodePrefix"/>
+  <int value="122" label="NodeLocalName"/>
+  <int value="123" label="NavigatorProductSub"/>
+  <int value="124" label="NavigatorVendor"/>
+  <int value="125" label="NavigatorVendorSub"/>
+  <int value="126" label="FileError"/>
+  <int value="127" label="DocumentCharset"/>
+  <int value="128" label="PrefixedAnimationEndEvent"/>
+  <int value="129" label="UnprefixedAnimationEndEvent"/>
+  <int value="130" label="PrefixedAndUnprefixedAnimationEndEvent"/>
+  <int value="131" label="PrefixedAnimationStartEvent"/>
+  <int value="132" label="UnprefixedAnimationStartEvent"/>
+  <int value="133" label="PrefixedAndUnprefixedAnimationStartEvent"/>
+  <int value="134" label="PrefixedAnimationIterationEvent"/>
+  <int value="135" label="UnprefixedAnimationIterationEvent"/>
+  <int value="136" label="PrefixedAndUnprefixedAnimationIterationEvent"/>
+  <int value="137" label="EventReturnValue"/>
+  <int value="138" label="SVGSVGElement"/>
+  <int value="139" label="SVGAnimateColorElement"/>
+  <int value="140" label="InsertAdjacentText"/>
+  <int value="141" label="InsertAdjacentElement"/>
+  <int value="142" label="HasAttributes"/>
+  <int value="143" label="DOMSubtreeModifiedEvent"/>
+  <int value="144" label="DOMNodeInsertedEvent"/>
+  <int value="145" label="DOMNodeRemovedEvent"/>
+  <int value="146" label="DOMNodeRemovedFromDocumentEvent"/>
+  <int value="147" label="DOMNodeInsertedIntoDocumentEvent"/>
+  <int value="148" label="DOMCharacterDataModifiedEvent"/>
+  <int value="149" label="DocumentAllTags"/>
+  <int value="150" label="DocumentAllLegacyCall"/>
+  <int value="151" label="HTMLAppletElementLegacyCall"/>
+  <int value="152" label="HTMLEmbedElementLegacyCall"/>
+  <int value="153" label="HTMLObjectElementLegacyCall"/>
+  <int value="154" label="BeforeLoadEvent"/>
+  <int value="155" label="GetMatchedCSSRules"/>
+  <int value="156" label="SVGFontInCSS"/>
+  <int value="157" label="ScrollTopBodyNotQuirksMode"/>
+  <int value="158" label="ScrollLeftBodyNotQuirksMode"/>
+  <int value="159" label="AttributeIsId"/>
+  <int value="160" label="AttributeOwnerElement"/>
+  <int value="161" label="AttributeSetPrefix"/>
+  <int value="162" label="AttributeSpecified"/>
+  <int value="163" label="BeforeLoadEventInIsolatedWorld"/>
+  <int value="164" label="PrefixedAudioDecodedByteCount"/>
+  <int value="165" label="PrefixedVideoDecodedByteCount"/>
+  <int value="166" label="PrefixedVideoSupportsFullscreen"/>
+  <int value="167" label="PrefixedVideoDisplayingFullscreen"/>
+  <int value="168" label="PrefixedVideoEnterFullscreen"/>
+  <int value="169" label="PrefixedVideoExitFullscreen"/>
+  <int value="170" label="PrefixedVideoEnterFullScreen"/>
+  <int value="171" label="PrefixedVideoExitFullScreen"/>
+  <int value="172" label="PrefixedVideoDecodedFrameCount"/>
+  <int value="173" label="PrefixedVideoDroppedFrameCount"/>
+  <int value="174" label="SourceElementCandidate"/>
+  <int value="175" label="SourceElementNonMatchingMedia"/>
+  <int value="176" label="PrefixedElementRequestFullscreen"/>
+  <int value="177" label="PrefixedElementRequestFullScreen"/>
+  <int value="178" label="BarPropLocationbar"/>
+  <int value="179" label="BarPropMenubar"/>
+  <int value="180" label="BarPropPersonalbar"/>
+  <int value="181" label="BarPropScrollbars"/>
+  <int value="182" label="BarPropStatusbar"/>
+  <int value="183" label="BarPropToolbar"/>
+  <int value="184" label="InputTypeEmailMultiple"/>
+  <int value="185" label="InputTypeEmailMaxLength"/>
+  <int value="186" label="InputTypeEmailMultipleMaxLength"/>
+  <int value="187" label="TextTrackCueConstructor"/>
+  <int value="188" label="CSSStyleDeclarationPropertyName"/>
+  <int value="189" label="CSSStyleDeclarationFloatPropertyName"/>
+  <int value="190" label="InputTypeText"/>
+  <int value="191" label="InputTypeTextMaxLength"/>
+  <int value="192" label="InputTypePassword"/>
+  <int value="193" label="InputTypePasswordMaxLength"/>
+  <int value="194" label="SVGInstanceRoot"/>
+  <int value="195" label="ShowModalDialog"/>
+  <int value="196" label="PrefixedPageVisibility"/>
+  <int value="197" label="HTMLFrameElementLocation"/>
+  <int value="198" label="CSSStyleSheetInsertRuleOptionalArg"/>
+  <int value="199" label="CSSWebkitRegionAtRule"/>
+  <int value="200" label="DocumentBeforeUnloadRegistered"/>
+  <int value="201" label="DocumentBeforeUnloadFired"/>
+  <int value="202" label="DocumentUnloadRegistered"/>
+  <int value="203" label="DocumentUnloadFired"/>
+  <int value="204" label="SVGLocatableNearestViewportElement"/>
+  <int value="205" label="SVGLocatableFarthestViewportElement"/>
+  <int value="206" label="IsIndexElement"/>
+  <int value="207" label="HTMLHeadElementProfile"/>
+  <int value="208" label="OverflowChangedEvent"/>
+  <int value="209" label="SVGPointMatrixTransform"/>
+  <int value="210" label="HTMLHtmlElementManifest"/>
+  <int value="211" label="DOMFocusInOutEvent"/>
+  <int value="212" label="FileGetLastModifiedDate"/>
+  <int value="213" label="HTMLElementInnerText"/>
+  <int value="214" label="HTMLElementOuterText"/>
+  <int value="215" label="ReplaceDocumentViaJavaScriptURL"/>
+  <int value="216" label="ElementSetAttributeNodeNS"/>
+  <int value="217" label="ElementPrefixedMatchesSelector"/>
+  <int value="218" label="DOMImplementationCreateCSSStyleSheet"/>
+  <int value="219" label="CSSStyleSheetRules"/>
+  <int value="220" label="CSSStyleSheetAddRule"/>
+  <int value="221" label="CSSStyleSheetRemoveRule"/>
+  <int value="222" label="InitMessageEvent"/>
+  <int value="223" label="PrefixedInitMessageEvent"/>
+  <int value="224" label="ElementSetPrefix"/>
+  <int value="225" label="CSSStyleDeclarationGetPropertyCSSValue"/>
+  <int value="226" label="SVGElementGetPresentationAttribute"/>
+  <int value="227" label="REMOVEDAttrUsedAsNodeParameter"/>
+  <int value="228" label="REMOVEDAttrUsedAsNodeReceiver"/>
+  <int value="229" label="PrefixedMediaCancelKeyRequest"/>
+  <int value="230" label="DOMImplementationHasFeature"/>
+  <int value="231" label="DOMImplementationHasFeatureReturnFalse"/>
+  <int value="232" label="CanPlayTypeKeySystem"/>
+  <int value="233" label="PrefixedDevicePixelRatioMediaFeature"/>
+  <int value="234" label="PrefixedMaxDevicePixelRatioMediaFeature"/>
+  <int value="235" label="PrefixedMinDevicePixelRatioMediaFeature"/>
+  <int value="236" label="PrefixedTransform2dMediaFeature"/>
+  <int value="237" label="PrefixedTransform3dMediaFeature"/>
+  <int value="238" label="PrefixedAnimationMediaFeature"/>
+  <int value="239" label="PrefixedViewModeMediaFeature"/>
+  <int value="240" label="PrefixedStorageQuota"/>
+  <int value="241" label="ContentSecurityPolicyReportOnlyInMeta"/>
+  <int value="242" label="PrefixedMediaSourceOpen"/>
+  <int value="243" label="ResetReferrerPolicy"/>
+  <int value="244" label="CaseInsensitiveAttrSelectorMatch"/>
+  <int value="245" label="CaptureAttributeAsBoolean"/>
+  <int value="246" label="FormNameAccessForImageElement"/>
+  <int value="247" label="FormNameAccessForPastNamesMap"/>
+  <int value="248" label="FormAssociationByParser"/>
+  <int value="249" label="HTMLSourceElementMedia"/>
+  <int value="250" label="SVGSVGElementInDocument"/>
+  <int value="251" label="SVGDocumentRootElement"/>
+  <int value="252" label="DocumentCreateEventOptionalArgument"/>
+  <int value="253" label="MediaErrorEncrypted"/>
+  <int value="254" label="EventSourceURL"/>
+  <int value="255" label="WebSocketURL"/>
+  <int value="256" label="UnsafeEvalBlocksCSSOM"/>
+  <int value="257" label="WorkerSubjectToCSP"/>
+  <int value="258" label="WorkerAllowedByChildBlockedByScript"/>
+  <int value="259" label="HTMLMediaElementControllerNotNull"/>
+  <int value="260" label="DeprecatedWebKitGradient"/>
+  <int value="261" label="DeprecatedWebKitLinearGradient"/>
+  <int value="262" label="DeprecatedWebKitRepeatingLinearGradient"/>
+  <int value="263" label="DeprecatedWebKitRadialGradient"/>
+  <int value="264" label="DeprecatedWebKitRepeatingRadialGradient"/>
+  <int value="265" label="PrefixedGetImageDataHD"/>
+  <int value="266" label="PrefixedPutImageDataHD"/>
+  <int value="267" label="PrefixedImageSmoothingEnabled (obsolete)"/>
+  <int value="268" label="UnprefixedImageSmoothingEnabled"/>
+  <int value="269" label="ShadowRootApplyAuthorStyles"/>
+  <int value="270" label="PromiseConstructor"/>
+  <int value="271" label="PromiseCast"/>
+  <int value="272" label="PromiseReject"/>
+  <int value="273" label="PromiseResolve"/>
+  <int value="274" label="TextAutosizing"/>
+  <int value="275" label="TextAutosizingLayout"/>
+  <int value="276" label="HTMLAnchorElementPingAttribute"/>
+  <int value="277" label="JavascriptExhaustedMemory"/>
+  <int value="278" label="InsertAdjacentHTML"/>
+  <int value="279" label="SVGClassName"/>
+  <int value="280" label="HTMLAppletElement"/>
+  <int value="281" label="HTMLMediaElementSeekToFragmentStart"/>
+  <int value="282" label="HTMLMediaElementPauseAtFragmentEnd"/>
+  <int value="283" label="PrefixedWindowURL"/>
+  <int value="284" label="PrefixedWorkerURL"/>
+  <int value="285" label="WindowOrientation"/>
+  <int value="286" label="DOMStringListContains"/>
+  <int value="287" label="DocumentCaptureEvents"/>
+  <int value="288" label="DocumentReleaseEvents"/>
+  <int value="289" label="WindowCaptureEvents"/>
+  <int value="290" label="WindowReleaseEvents"/>
+  <int value="291" label="PrefixedGamepad"/>
+  <int value="292" label="ElementAnimateKeyframeListEffectObjectTiming"/>
+  <int value="293" label="ElementAnimateKeyframeListEffectDoubleTiming"/>
+  <int value="294" label="ElementAnimateKeyframeListEffectNoTiming"/>
+  <int value="295" label="DocumentXPathCreateExpression"/>
+  <int value="296" label="DocumentXPathCreateNSResolver"/>
+  <int value="297" label="DocumentXPathEvaluate"/>
+  <int value="298" label="AttrGetValue"/>
+  <int value="299" label="AttrSetValue"/>
+  <int value="300" label="AnimationConstructorKeyframeListEffectObjectTiming"/>
+  <int value="301" label="AnimationConstructorKeyframeListEffectDoubleTiming"/>
+  <int value="302" label="AnimationConstructorKeyframeListEffectNoTiming"/>
+  <int value="303" label="AttrSetValueWithElement"/>
+  <int value="304" label="PrefixedCancelAnimationFrame"/>
+  <int value="305" label="PrefixedCancelRequestAnimationFrame"/>
+  <int value="306" label="NamedNodeMapGetNamedItem"/>
+  <int value="307" label="NamedNodeMapSetNamedItem"/>
+  <int value="308" label="NamedNodeMapRemoveNamedItem"/>
+  <int value="309" label="NamedNodeMapItem"/>
+  <int value="310" label="NamedNodeMapGetNamedItemNS"/>
+  <int value="311" label="NamedNodeMapSetNamedItemNS"/>
+  <int value="312" label="NamedNodeMapRemoveNamedItemNS"/>
+  <int value="313" label="OpenWebDatabaseInWorker"/>
+  <int value="314" label="OpenWebDatabaseSyncInWorker"/>
+  <int value="315" label="PrefixedAllowFullscreenAttribute"/>
+  <int value="316" label="XHRProgressEventPosition"/>
+  <int value="317" label="XHRProgressEventTotalSize"/>
+  <int value="318" label="PrefixedDocumentIsFullscreen"/>
+  <int value="319" label="PrefixedDocumentFullScreenKeyboardInputAllowed"/>
+  <int value="320" label="PrefixedDocumentCurrentFullScreenElement"/>
+  <int value="321" label="PrefixedDocumentCancelFullScreen"/>
+  <int value="322" label="PrefixedDocumentFullscreenEnabled"/>
+  <int value="323" label="PrefixedDocumentFullscreenElement"/>
+  <int value="324" label="PrefixedDocumentExitFullscreen"/>
+  <int value="325" label="SVGForeignObjectElement"/>
+  <int value="326" label="PrefixedElementRequestPointerLock"/>
+  <int value="327" label="SelectionSetPosition"/>
+  <int value="328" label="AnimationFinishEvent"/>
+  <int value="329" label="SVGSVGElementInXMLDocument"/>
+  <int value="330" label="CanvasRenderingContext2DSetAlpha"/>
+  <int value="331" label="CanvasRenderingContext2DSetCompositeOperation"/>
+  <int value="332" label="CanvasRenderingContext2DSetLineWidth"/>
+  <int value="333" label="CanvasRenderingContext2DSetLineCap"/>
+  <int value="334" label="CanvasRenderingContext2DSetLineJoin"/>
+  <int value="335" label="CanvasRenderingContext2DSetMiterLimit"/>
+  <int value="336" label="CanvasRenderingContext2DClearShadow"/>
+  <int value="337" label="CanvasRenderingContext2DSetStrokeColor"/>
+  <int value="338" label="CanvasRenderingContext2DSetFillColor"/>
+  <int value="339" label="CanvasRenderingContext2DDrawImageFromRect"/>
+  <int value="340" label="CanvasRenderingContext2DSetShadow"/>
+  <int value="341" label="PrefixedPerformanceClearResourceTimings"/>
+  <int value="342" label="PrefixedPerformanceSetResourceTimingBufferSize"/>
+  <int value="343" label="EventSrcElement"/>
+  <int value="344" label="EventCancelBubble"/>
+  <int value="345" label="EventPath"/>
+  <int value="346" label="EventClipboardData"/>
+  <int value="347" label="NodeIteratorDetach"/>
+  <int value="348" label="AttrNodeValue"/>
+  <int value="349" label="AttrTextContent"/>
+  <int value="350" label="EventGetReturnValueTrue"/>
+  <int value="351" label="EventGetReturnValueFalse"/>
+  <int value="352" label="EventSetReturnValueTrue"/>
+  <int value="353" label="EventSetReturnValueFalse"/>
+  <int value="354" label="NodeIteratorExpandEntityReferences"/>
+  <int value="355" label="TreeWalkerExpandEntityReferences"/>
+  <int value="356" label="WindowOffscreenBuffering"/>
+  <int value="357" label="WindowDefaultStatus"/>
+  <int value="358" label="WindowDefaultstatus"/>
+  <int value="359" label="PrefixedConvertPointFromPageToNode"/>
+  <int value="360" label="PrefixedConvertPointFromNodeToPage"/>
+  <int value="361" label="PrefixedTransitionEventConstructor"/>
+  <int value="362" label="PrefixedMutationObserverConstructor"/>
+  <int value="363" label="PrefixedIDBCursorConstructor"/>
+  <int value="364" label="PrefixedIDBDatabaseConstructor"/>
+  <int value="365" label="PrefixedIDBFactoryConstructor"/>
+  <int value="366" label="PrefixedIDBIndexConstructor"/>
+  <int value="367" label="PrefixedIDBKeyRangeConstructor"/>
+  <int value="368" label="PrefixedIDBObjectStoreConstructor"/>
+  <int value="369" label="PrefixedIDBRequestConstructor"/>
+  <int value="370" label="PrefixedIDBTransactionConstructor"/>
+  <int value="371" label="NotificationPermission"/>
+  <int value="372" label="RangeDetach"/>
+  <int value="373" label="DocumentImportNodeOptionalArgument"/>
+  <int value="374" label="HTMLTableElementVspace"/>
+  <int value="375" label="HTMLTableElementHspace"/>
+  <int value="376" label="PrefixedDocumentExitPointerLock"/>
+  <int value="377" label="PrefixedDocumentPointerLockElement"/>
+  <int value="378" label="PrefixedTouchRadiusX"/>
+  <int value="379" label="PrefixedTouchRadiusY"/>
+  <int value="380" label="PrefixedTouchRotationAngle"/>
+  <int value="381" label="PrefixedTouchForce"/>
+  <int value="382" label="PrefixedMouseEventMovementX"/>
+  <int value="383" label="PrefixedMouseEventMovementY"/>
+  <int value="384" label="PrefixedWheelEventDirectionInvertedFromDevice"/>
+  <int value="385" label="PrefixedWheelEventInit"/>
+  <int value="386" label="PrefixedFileRelativePath"/>
+  <int value="387" label="DocumentCaretRangeFromPoint"/>
+  <int value="388" label="DocumentGetCSSCanvasContext"/>
+  <int value="389" label="ElementScrollIntoViewIfNeeded"/>
+  <int value="390" label="ElementScrollByLines"/>
+  <int value="391" label="ElementScrollByPages"/>
+  <int value="392" label="RangeCompareNode"/>
+  <int value="393" label="RangeExpand"/>
+  <int value="394" label="HTMLFrameElementWidth"/>
+  <int value="395" label="HTMLFrameElementHeight"/>
+  <int value="396" label="HTMLImageElementX"/>
+  <int value="397" label="HTMLImageElementY"/>
+  <int value="398" label="HTMLOptionsCollectionRemoveElement"/>
+  <int value="399" label="HTMLPreElementWrap"/>
+  <int value="400" label="SelectionBaseNode"/>
+  <int value="401" label="SelectionBaseOffset"/>
+  <int value="402" label="SelectionExtentNode"/>
+  <int value="403" label="SelectionExtentOffset"/>
+  <int value="404" label="SelectionType"/>
+  <int value="405" label="SelectionModify"/>
+  <int value="406" label="SelectionSetBaseAndExtent"/>
+  <int value="407" label="SelectionEmpty"/>
+  <int value="408" label="SVGFEMorphologyElementSetRadius"/>
+  <int value="409" label="VTTCue"/>
+  <int value="410" label="VTTCueRender"/>
+  <int value="411" label="VTTCueRenderVertical"/>
+  <int value="412" label="VTTCueRenderSnapToLinesFalse"/>
+  <int value="413" label="VTTCueRenderLineNotAuto"/>
+  <int value="414" label="VTTCueRenderPositionNot50"/>
+  <int value="415" label="VTTCueRenderSizeNot100"/>
+  <int value="416" label="VTTCueRenderAlignNotMiddle"/>
+  <int value="417" label="ElementRequestPointerLock"/>
+  <int value="418" label="VTTCueRenderRtl"/>
+  <int value="419" label="PostMessageFromSecureToInsecure"/>
+  <int value="420" label="PostMessageFromInsecureToSecure"/>
+  <int value="421" label="DocumentExitPointerLock"/>
+  <int value="422" label="DocumentPointerLockElement"/>
+  <int value="423" label="MixedContentFont"/>
+  <int value="424" label="PrefixedCursorZoomIn"/>
+  <int value="425" label="PrefixedCursorZoomOut"/>
+  <int value="426" label="CSSCharsetRuleEncoding"/>
+  <int value="427" label="DocumentSetCharset"/>
+  <int value="428" label="DocumentDefaultCharset"/>
+  <int value="429" label="TextEncoderConstructor"/>
+  <int value="430" label="TextEncoderEncode"/>
+  <int value="431" label="TextDecoderConstructor"/>
+  <int value="432" label="TextDecoderDecode"/>
+  <int value="433" label="FocusInOutEvent"/>
+  <int value="434" label="MouseEventMovementX"/>
+  <int value="435" label="MouseEventMovementY"/>
+  <int value="436" label="MixedContentTextTrack"/>
+  <int value="437" label="MixedContentRaw"/>
+  <int value="438" label="MixedContentImage"/>
+  <int value="439" label="MixedContentMedia"/>
+  <int value="440" label="DocumentFonts"/>
+  <int value="441" label="MixedContentFormsSubmitted"/>
+  <int value="442" label="FormsSubmitted"/>
+  <int value="443" label="TextInputEventOnInputObsolete"/>
+  <int value="444" label="TextInputEventOnTextAreaObsolete"/>
+  <int value="445" label="TextInputEventOnContentEditableObsolete"/>
+  <int value="446" label="TextInputEventOnNotNodeObsolete"/>
+  <int value="447" label="WebkitBeforeTextInsertedOnInputObsolete"/>
+  <int value="448" label="WebkitBeforeTextInsertedOnTextAreaObsolete"/>
+  <int value="449" label="WebkitBeforeTextInsertedOnContentEditableObsolete"/>
+  <int value="450" label="WebkitBeforeTextInsertedOnNotNodeObsolete"/>
+  <int value="451" label="WebkitEditableContentChangedOnInputObsolete"/>
+  <int value="452" label="WebkitEditableContentChangedOnTextAreaObsolete"/>
+  <int value="453"
+      label="WebkitEditableContentChangedOnContentEditableObsolete"/>
+  <int value="454" label="WebkitEditableContentChangedOnNotNodeObsolete"/>
+  <int value="455" label="HTMLImports"/>
+  <int value="456" label="ElementCreateShadowRoot"/>
+  <int value="457" label="DocumentRegisterElement"/>
+  <int value="458" label="EditingAppleInterchangeNewline"/>
+  <int value="459" label="EditingAppleConvertedSpace"/>
+  <int value="460" label="EditingApplePasteAsQuotation"/>
+  <int value="461" label="EditingAppleStyleSpanClass"/>
+  <int value="462" label="EditingAppleTabSpanClass"/>
+  <int value="463" label="HTMLImportsAsyncAttribute"/>
+  <int value="464" label="FontFaceSetReady"/>
+  <int value="465" label="XMLHttpRequestSynchronous"/>
+  <int value="466" label="CSSSelectorPseudoUnresolved"/>
+  <int value="467" label="CSSSelectorPseudoShadow"/>
+  <int value="468" label="CSSSelectorPseudoContent"/>
+  <int value="469" label="CSSSelectorPseudoHost"/>
+  <int value="470" label="CSSSelectorPseudoHostContext"/>
+  <int value="471" label="CSSDeepCombinator"/>
+  <int value="472" label="SyncXHRWithCredentials"/>
+  <int value="473" label="UseAsm"/>
+  <int value="474" label="KeyEventNotAllowedInFullScreen"/>
+  <int value="475" label="DOMWindowOpen"/>
+  <int value="476" label="DOMWindowOpenFeatures"/>
+  <int value="477" label="LegacyFullScreenErrorExemption"/>
+  <int value="478" label="MediaStreamTrackGetSources"/>
+  <int value="479" label="AspectRatioFlexItem"/>
+  <int value="480" label="DetailsElement"/>
+  <int value="481" label="DialogElement"/>
+  <int value="482" label="MapElement"/>
+  <int value="483" label="MeterElement"/>
+  <int value="484" label="ProgressElement"/>
+  <int value="485" label="VideoFullscreenAllowedExemption"/>
+  <int value="488" label="WebKitPoint"/>
+  <int value="489" label="HTMLPreElementWidth"/>
+  <int value="490" label="PrefixedHTMLElementDropzone"/>
+  <int value="491" label="WheelEventWheelDeltaX"/>
+  <int value="492" label="WheelEventWheelDeltaY"/>
+  <int value="493" label="WheelEventWheelDelta"/>
+  <int value="494" label="SendBeacon"/>
+  <int value="495" label="SendBeaconQuotaExceeded"/>
+  <int value="501" label="SVGSMILElementInDocument"/>
+  <int value="502" label="MouseEventOffsetX"/>
+  <int value="503" label="MouseEventOffsetY"/>
+  <int value="504" label="MouseEventX"/>
+  <int value="505" label="MouseEventY"/>
+  <int value="506" label="MouseEventFromElement"/>
+  <int value="507" label="MouseEventToElement"/>
+  <int value="508" label="RequestFileSystem"/>
+  <int value="509" label="RequestFileSystemWorker"/>
+  <int value="510" label="RequestFileSystemSyncWorker"/>
+  <int value="511" label="UIEventLayerX"/>
+  <int value="512" label="UIEventLayerY"/>
+  <int value="513" label="UIEventPageX"/>
+  <int value="514" label="UIEventPageY"/>
+  <int value="515" label="BgPropertiesFixed"/>
+  <int value="516" label="HTMLImageElementComposite"/>
+  <int value="517" label="DevToolsConsoleTimeline"/>
+  <int value="518" label="DevToolsConsoleProfile"/>
+  <int value="519" label="SVGStyleElementTitle"/>
+  <int value="520" label="PictureSourceSrc"/>
+  <int value="521" label="Picture"/>
+  <int value="522" label="Sizes"/>
+  <int value="523" label="SrcsetXDescriptor"/>
+  <int value="524" label="SrcsetWDescriptor"/>
+  <int value="525" label="SelectionContainsNode"/>
+  <int value="526" label="MediaStreamEnded"/>
+  <int value="527" label="MixedContentPrivateIPInPublicWebsitePassive"/>
+  <int value="528" label="MixedContentPrivateIPInPublicWebsiteActive"/>
+  <int value="529" label="XMLExternalResourceLoad"/>
+  <int value="530" label="MixedContentPrivateHostnameInPublicHostname"/>
+  <int value="531" label="LegacyProtocolEmbeddedAsSubresource"/>
+  <int value="532" label="RequestedSubresourceWithEmbeddedCredentials"/>
+  <int value="533" label="NotificationCreated"/>
+  <int value="534" label="NotificationClosed"/>
+  <int value="535" label="NotificationPermissionRequested"/>
+  <int value="536" label="MediaStreamLabel"/>
+  <int value="537" label="MediaStreamStop"/>
+  <int value="538" label="ConsoleTimeline"/>
+  <int value="539" label="ConsoleTimelineEnd"/>
+  <int value="540" label="SRIElementWithMatchingIntegrityAttribute"/>
+  <int value="541" label="SRIElementWithNonMatchingIntegrityAttribute"/>
+  <int value="542" label="SRIElementWithUnparsableIntegrityAttribute"/>
+  <int value="543" label="SRIElementWithIntegrityAttributeAndInsecureOrigin"/>
+  <int value="544" label="SRIElementWithIntegrityAttributeAndInsecureResource"/>
+  <int value="545" label="V8Animation_StartTime_AttributeGetter"/>
+  <int value="546" label="V8Animation_StartTime_AttributeSetter"/>
+  <int value="547" label="V8Animation_CurrentTime_AttributeGetter"/>
+  <int value="548" label="V8Animation_CurrentTime_AttributeSetter"/>
+  <int value="549" label="V8Animation_PlaybackRate_AttributeGetter"/>
+  <int value="550" label="V8Animation_PlaybackRate_AttributeSetter"/>
+  <int value="551" label="V8Animation_PlayState_AttributeGetter"/>
+  <int value="552" label="V8Animation_Finish_Method"/>
+  <int value="553" label="V8Animation_Play_Method"/>
+  <int value="554" label="V8Animation_Pause_Method"/>
+  <int value="555" label="V8Animation_Reverse_Method"/>
+  <int value="556" label="BreakIterator"/>
+  <int value="557" label="ScreenOrientationAngle"/>
+  <int value="558" label="ScreenOrientationType"/>
+  <int value="559" label="ScreenOrientationLock"/>
+  <int value="560" label="ScreenOrientationUnlock"/>
+  <int value="561" label="GeolocationSecureOrigin"/>
+  <int value="562" label="GeolocationInsecureOrigin"/>
+  <int value="563" label="NotificationSecureOrigin"/>
+  <int value="564" label="NotificationInsecureOrigin"/>
+  <int value="565" label="NotificationShowEvent"/>
+  <int value="566" label="CSSXGetComputedStyleQueries"/>
+  <int value="567" label="SVG1DOM"/>
+  <int value="568" label="SVGPathSegDOM"/>
+  <int value="569" label="SVGTransformListConsolidate"/>
+  <int value="570" label="SVGAnimatedTransformListBaseVal"/>
+  <int value="571" label="QuotedAnimationName"/>
+  <int value="572" label="QuotedKeyframesRule"/>
+  <int value="573" label="SrcsetDroppedCandidate"/>
+  <int value="574" label="WindowPostMessage"/>
+  <int value="575" label="WindowPostMessageWithLegacyTargetOriginArgument"/>
+  <int value="576" label="RenderRuby"/>
+  <int value="577" label="CanvasRenderingContext2DCompositeOperationDarker"/>
+  <int value="578" label="ScriptElementWithInvalidTypeHasSrc"/>
+  <int value="579" label="TimelineStart"/>
+  <int value="580" label="ElementBaseURIFromXMLBase"/>
+  <int value="581"
+      label="XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload"/>
+  <int value="582" label="CSSSelectorPseudoScrollbar"/>
+  <int value="583" label="CSSSelectorPseudoScrollbarButton"/>
+  <int value="584" label="CSSSelectorPseudoScrollbarThumb"/>
+  <int value="585" label="CSSSelectorPseudoScrollbarTrack"/>
+  <int value="586" label="CSSSelectorPseudoScrollbarTrackPiece"/>
+  <int value="587" label="LangAttribute"/>
+  <int value="588" label="LangAttributeOnHTML"/>
+  <int value="589" label="LangAttributeOnBody"/>
+  <int value="590" label="LangAttributeDoesNotMatchToUILocale"/>
+  <int value="591" label="InputTypeSubmit"/>
+  <int value="592" label="InputTypeSubmitWithValue"/>
+  <int value="593" label="SetReferrerPolicy"/>
+  <int value="594" label="DOMImplementationHasFeatureReturnFalseInternal"/>
+  <int value="595" label="MouseEventWhich"/>
+  <int value="596" label="UIEventCharCode"/>
+  <int value="597" label="UIEventKeyCode"/>
+  <int value="598" label="UIEventWhich"/>
+  <int value="599" label="TextWholeText"/>
+  <int value="600" label="AttrChildAccess"/>
+  <int value="601" label="AttrChildChange"/>
+  <int value="602" label="DocumentGetOverrideStyle"/>
+  <int value="603" label="NotificationCloseEvent"/>
+  <int value="604" label="CSSKeyframesRuleAppendRule"/>
+  <int value="605" label="CSSKeyframesRuleInsertRule"/>
+  <int value="606" label="StyleMedia"/>
+  <int value="607" label="StyleMediaType"/>
+  <int value="608" label="StyleMediaMatchMedium"/>
+  <int value="609" label="MixedContentPresent"/>
+  <int value="610" label="MixedContentBlockable"/>
+  <int value="611" label="MixedContentAudio"/>
+  <int value="612" label="MixedContentDownload"/>
+  <int value="613" label="MixedContentFavicon"/>
+  <int value="614" label="MixedContentImage"/>
+  <int value="615" label="MixedContentInternal"/>
+  <int value="616" label="MixedContentPlugin"/>
+  <int value="617" label="MixedContentPrefetch"/>
+  <int value="618" label="MixedContentVideo"/>
+  <int value="619" label="CORSCredentialedNullOriginAccessAllowed"/>
+  <int value="620" label="AudioListenerDopplerFactor"/>
+  <int value="621" label="AudioListenerSpeedOfSound"/>
+  <int value="622" label="AudioListenerSetVelocity"/>
+  <int value="623" label="ShadowRootGetElementsByClassName"/>
+  <int value="624" label="ShadowRootGetElementsByTagName"/>
+  <int value="625" label="ShadowRootGetElementsByTagNameNS"/>
+  <int value="626" label="SVGSMILAnimationInImage"/>
+  <int value="627" label="CSSSelectorPseudoFullScreenDocument"/>
+  <int value="628" label="CSSSelectorPseudoFullScreenAncestor"/>
+  <int value="629" label="CSSSelectorPseudoFullScreen"/>
+  <int value="630" label="WebKitCSSMatrix"/>
+  <int value="631" label="AudioContextCreateAnalyser"/>
+  <int value="632" label="AudioContextCreateBiquadFilter"/>
+  <int value="633" label="AudioContextCreateBufferSource"/>
+  <int value="634" label="AudioContextCreateChannelMerger"/>
+  <int value="635" label="AudioContextCreateChannelSplitter"/>
+  <int value="636" label="AudioContextCreateConvolver"/>
+  <int value="637" label="AudioContextCreateDelay"/>
+  <int value="638" label="AudioContextCreateDynamicsCompressor"/>
+  <int value="639" label="AudioContextCreateGain"/>
+  <int value="640" label="AudioContextCreateMediaElementSource"/>
+  <int value="641" label="AudioContextCreateMediaStreamDestination"/>
+  <int value="642" label="AudioContextCreateMediaStreamSource"/>
+  <int value="643" label="AudioContextCreateOscillator"/>
+  <int value="644" label="AudioContextCreatePanner"/>
+  <int value="645" label="AudioContextCreatePeriodicWave"/>
+  <int value="646" label="AudioContextCreateScriptProcessor"/>
+  <int value="647" label="AudioContextCreateStereoPanner"/>
+  <int value="648" label="AudioContextCreateWaveShaper"/>
+  <int value="649" label="AudioContextDecodeAudioData"/>
+  <int value="650" label="AudioContextResume"/>
+  <int value="651" label="AudioContextSuspend"/>
+  <int value="652" label="AudioContext"/>
+  <int value="653" label="OfflineAudioContext"/>
+  <int value="654" label="PrefixedAudioContext"/>
+  <int value="655" label="PrefixedOfflineAudioContext"/>
+  <int value="656" label="AddEventListenerNoArguments"/>
+  <int value="657" label="AddEventListenerOneArgument"/>
+  <int value="658" label="RemoveEventListenerNoArguments"/>
+  <int value="659" label="RemoveEventListenerOneArgument"/>
+  <int value="660" label="SRIElementWithNonMatchingIntegrityType"/>
+  <int value="661"
+      label="MixedContentInNonHTTPSFrameThatRestrictsMixedContent"/>
+  <int value="662"
+      label="MixedContentInSecureFrameThatDoesNotRestrictMixedContent"/>
+  <int value="663" label="MixedContentWebSocket"/>
+  <int value="664" label="SyntheticKeyframesInCompositedCSSAnimation"/>
+  <int value="665" label="MixedContentFormPresent"/>
+  <int value="666" label="GetUserMediaInsecureOrigin"/>
+  <int value="667" label="GetUserMediaSecureOrigin"/>
+  <int value="668" label="DeviceMotionInsecureOrigin"/>
+  <int value="669" label="DeviceMotionSecureOrigin"/>
+  <int value="670" label="DeviceOrientationInsecureOrigin"/>
+  <int value="671" label="DeviceOrientationSecureOrigin"/>
+  <int value="672" label="SandboxViaIFrame"/>
+  <int value="673" label="SandboxViaCSP"/>
+  <int value="674" label="BlockedSniffingImageToScript"/>
+  <int value="675" label="Fetch"/>
+  <int value="676" label="FetchBodyStream"/>
+  <int value="677" label="XMLHttpRequestAsynchronous"/>
+  <int value="678" label="AudioBufferSourceBufferOnce"/>
+  <int value="679" label="WhiteSpacePreFromXMLSpace"/>
+  <int value="680" label="WhiteSpaceNowrapFromXMLSpace"/>
+  <int value="681" label="SVGElementXmlbase"/>
+  <int value="682" label="SVGElementXmllang"/>
+  <int value="683" label="SVGElementXmlspace"/>
+  <int value="684" label="WindowMoveResizeMissingArguments"/>
+  <int value="685" label="SVGSVGElementForceRedraw"/>
+  <int value="686" label="SVGSVGElementSuspendRedraw"/>
+  <int value="687" label="SVGSVGElementUnsuspendRedraw"/>
+  <int value="688" label="SVGSVGElementUnsuspendRedrawAll"/>
+  <int value="689" label="AudioContextClose"/>
+  <int value="690" label="ServiceWorkerClientPostMessage"/>
+  <int value="691" label="CSSZoomNotEqualToOne"/>
+  <int value="692" label="SVGGraphicsElementGetTransformToElement"/>
+  <int value="693" label="ServiceWorkerClientsGetAll"/>
+  <int value="694" label="ClientRectListItem"/>
+  <int value="695" label="WindowClientInformation"/>
+  <int value="696" label="WindowFind"/>
+  <int value="697" label="WindowScreenLeft"/>
+  <int value="698" label="WindowScreenTop"/>
+  <int value="699" label="V8Animation_Cancel_Method"/>
+  <int value="700" label="V8Animation_Onfinish_AttributeGetter"/>
+  <int value="701" label="V8Animation_Onfinish_AttributeSetter"/>
+  <int value="702" label="ElementOffsetParent"/>
+  <int value="703" label="ElementOffsetTop"/>
+  <int value="704" label="ElementOffsetLeft"/>
+  <int value="705" label="ElementOffsetWidth"/>
+  <int value="706" label="ElementOffsetHeight"/>
+  <int value="707" label="V8Window_WebKitAnimationEvent_ConstructorGetter"/>
+  <int value="708" label="V8Window_WebKitAnimationEvent_AttributeSetter"/>
+  <int value="709" label="ResourceLoadedAfterRedirectWithCSP"/>
+  <int value="710" label="CryptoGetRandomValues"/>
+  <int value="711" label="SubtleCryptoEncrypt"/>
+  <int value="712" label="SubtleCryptoDecrypt"/>
+  <int value="713" label="SubtleCryptoSign"/>
+  <int value="714" label="SubtleCryptoVerify"/>
+  <int value="715" label="SubtleCryptoDigest"/>
+  <int value="716" label="SubtleCryptoGenerateKey"/>
+  <int value="717" label="SubtleCryptoImportKey"/>
+  <int value="718" label="SubtleCryptoExportKey"/>
+  <int value="719" label="SubtleCryptoDeriveBits"/>
+  <int value="720" label="SubtleCryptoDeriveKey"/>
+  <int value="721" label="SubtleCryptoWrapKey"/>
+  <int value="722" label="SubtleCryptoUnwrapKey"/>
+  <int value="723" label="CryptoAlgorithmAesCbc"/>
+  <int value="724" label="CryptoAlgorithmHmac"/>
+  <int value="725" label="CryptoAlgorithmRsaSsaPkcs1v1_5"/>
+  <int value="726" label="CryptoAlgorithmSha1"/>
+  <int value="727" label="CryptoAlgorithmSha256"/>
+  <int value="728" label="CryptoAlgorithmSha384"/>
+  <int value="729" label="CryptoAlgorithmSha512"/>
+  <int value="730" label="CryptoAlgorithmAesGcm"/>
+  <int value="731" label="CryptoAlgorithmRsaOaep"/>
+  <int value="732" label="CryptoAlgorithmAesCtr"/>
+  <int value="733" label="CryptoAlgorithmAesKw"/>
+  <int value="734" label="CryptoAlgorithmRsaPss"/>
+  <int value="735" label="CryptoAlgorithmEcdsa"/>
+  <int value="736" label="CryptoAlgorithmEcdh"/>
+  <int value="737" label="CryptoAlgorithmHkdf"/>
+  <int value="738" label="CryptoAlgorithmPbkdf2"/>
+  <int value="739" label="DocumentSetDomain"/>
+  <int value="740" label="UpgradeInsecureRequestsEnabled"/>
+  <int value="741" label="UpgradeInsecureRequestsUpgradedRequest"/>
+  <int value="742" label="DocumentDesignMode"/>
+  <int value="743" label="GlobalCacheStorage"/>
+  <int value="744" label="NetInfo"/>
+  <int value="745" label="BackgroundSync"/>
+  <int value="746" label="TabStopProperty"/>
+  <int value="747" label="TabStopAttribute"/>
+  <int value="748" label="LegacyConst"/>
+  <int value="749" label="SVGFilterRes"/>
+  <int value="750" label="V8Permissions_Query_Method"/>
+  <int value="751" label="LegacyCSSValueIntrinsic"/>
+  <int value="752" label="LegacyCSSValueMinIntrinsic"/>
+  <int value="753" label="WebkitCanvas"/>
+  <int value="754" label="V8HTMLInputElement_Autocapitalize_AttributeGetter"/>
+  <int value="755" label="V8HTMLInputElement_Autocapitalize_AttributeSetter"/>
+  <int value="756"
+      label="V8HTMLTextAreaElement_Autocapitalize_AttributeGetter"/>
+  <int value="757"
+      label="V8HTMLTextAreaElement_Autocapitalize_AttributeSetter"/>
+  <int value="758" label="SVGHrefBaseVal"/>
+  <int value="759" label="SVGHrefAnimVal"/>
+  <int value="760" label="V8CSSRuleList_Item_Method"/>
+  <int value="761" label="V8MediaList_Item_Method"/>
+  <int value="762" label="V8StyleSheetList_Item_Method"/>
+  <int value="763" label="StyleSheetListAnonymousNamedGetter"/>
+  <int value="764" label="AutocapitalizeAttribute"/>
+  <int value="765" label="FullscreenSecureOrigin"/>
+  <int value="766" label="FullscreenInsecureOrigin"/>
+  <int value="767" label="DialogInSandboxedContext"/>
+  <int value="768" label="SVGSMILAnimationInImageRegardlessOfCache"/>
+  <int value="769" label="PushSubscriptionId"/>
+  <int value="770" label="EncryptedMediaSecureOrigin"/>
+  <int value="771" label="EncryptedMediaInsecureOrigin"/>
+  <int value="772" label="PerformanceFrameTiming"/>
+  <int value="773" label="V8Element_Animate_Method"/>
+  <int value="774"
+      label="V8SVGSVGElement_PixelUnitToMillimeterX_AttributeGetter"/>
+  <int value="775"
+      label="V8SVGSVGElement_PixelUnitToMillimeterY_AttributeGetter"/>
+  <int value="776"
+      label="V8SVGSVGElement_ScreenPixelToMillimeterX_AttributeGetter"/>
+  <int value="777"
+      label="V8SVGSVGElement_ScreenPixelToMillimeterY_AttributeGetter"/>
+  <int value="778" label="V8SVGSVGElement_GetElementById_Method"/>
+  <int value="779" label="ElementCreateShadowRootMultiple"/>
+  <int value="780" label="V8MessageChannel_Constructor"/>
+  <int value="781" label="V8MessagePort_PostMessage_Method"/>
+  <int value="782" label="V8MessagePort_Start_Method"/>
+  <int value="783" label="V8MessagePort_Close_Method"/>
+  <int value="784" label="MessagePortsTransferred"/>
+  <int value="785" label="CSSKeyframesRuleAnonymousIndexedGetter"/>
+  <int value="786" label="V8Screen_AvailLeft_AttributeGetter"/>
+  <int value="787" label="V8Screen_AvailTop_AttributeGetter"/>
+  <int value="788" label="ObjectObserve"/>
+  <int value="789" label="V8SVGAnimationElement_HasExtension_Method"/>
+  <int value="790" label="V8SVGCursorElement_HasExtension_Method"/>
+  <int value="791"
+      label="V8SVGFEConvolveMatrixElement_PreserveAlpha_AttributeGetter"/>
+  <int value="792" label="V8SVGFilterElement_FilterResX_AttributeGetter"/>
+  <int value="793" label="V8SVGFilterElement_FilterResY_AttributeGetter"/>
+  <int value="794" label="V8SVGFilterElement_SetFilterRes_Method"/>
+  <int value="795" label="V8SVGGraphicsElement_HasExtension_Method"/>
+  <int value="796" label="V8SVGMaskElement_HasExtension_Method"/>
+  <int value="797" label="V8SVGPatternElement_HasExtension_Method"/>
+  <int value="798" label="V8SVGStyleElement_Disabled_AttributeGetter"/>
+  <int value="799" label="V8SVGStyleElement_Disabled_AttributeSetter"/>
+  <int value="800"
+      label="ElementCreateShadowRootMultipleWithUserAgentShadowRoot"/>
+  <int value="801" label="InputTypeFileSecureOrigin"/>
+  <int value="802" label="InputTypeFileInsecureOrigin"/>
+  <int value="803" label="V8HashChangeEvent_InitHashChangeEvent_Method"/>
+  <int value="804" label="ElementAttachShadow"/>
+  <int value="805" label="V8KeyboardEvent_KeyIdentifier_AttributeGetter"/>
+  <int value="806"
+      label="V8SecurityPolicyViolationEvent_DocumentURI_AttributeGetter"/>
+  <int value="807"
+      label="V8SecurityPolicyViolationEvent_BlockedURI_AttributeGetter"/>
+  <int value="808"
+      label="V8SecurityPolicyViolationEvent_StatusCode_AttributeGetter"/>
+  <int value="809" label="HTMLLinkElementDisabled"/>
+  <int value="810" label="V8HTMLLinkElement_Disabled_AttributeGetter"/>
+  <int value="811" label="V8HTMLLinkElement_Disabled_AttributeSetter"/>
+  <int value="812" label="V8HTMLStyleElement_Disabled_AttributeGetter"/>
+  <int value="813" label="V8HTMLStyleElement_Disabled_AttributeSetter"/>
+  <int value="814" label="V8FileReader_ReadAsBinaryString_Method"/>
+  <int value="815" label="V8FileReaderSync_ReadAsBinaryString_Method"/>
+  <int value="816" label="V8DOMError_Constructor"/>
+  <int value="817" label="V8DOMError_Name_AttributeGetter"/>
+  <int value="818" label="V8DOMError_Message_AttributeGetter"/>
+  <int value="819" label="V8FileReader_Error_AttributeGetter"/>
+  <int value="820" label="V8IDBRequest_Error_AttributeGetter"/>
+  <int value="821" label="V8IDBTransaction_Error_AttributeGetter"/>
+  <int value="822" label="V8DOMStringList_Item_Method"/>
+  <int value="823" label="V8Location_AncestorOrigins_AttributeGetter"/>
+  <int value="824" label="V8IDBDatabase_ObjectStoreNames_AttributeGetter"/>
+  <int value="825" label="V8IDBObjectStore_IndexNames_AttributeGetter"/>
+  <int value="826" label="V8IDBTransaction_ObjectStoreNames_AttributeGetter"/>
+  <int value="827" label="V8Navigator_GetStorageUpdates_Method"/>
+  <int value="828" label="V8TextTrackCueList_Item_Method"/>
+  <int value="829" label="V8TextTrackList_Item_Method"/>
+  <int value="830" label="TextInputFired"/>
+  <int value="831" label="V8TextEvent_Data_AttributeGetter"/>
+  <int value="832" label="V8TextEvent_InitTextEvent_Method"/>
+  <int value="833" label="V8SVGSVGElement_UseCurrentView_AttributeGetter"/>
+  <int value="834" label="V8SVGSVGElement_CurrentView_AttributeGetter"/>
+  <int value="835" label="ClientHintsDPR"/>
+  <int value="836" label="ClientHintsResourceWidth"/>
+  <int value="837" label="ClientHintsViewportWidth"/>
+  <int value="838" label="SRIElementIntegrityAttributeButIneligible"/>
+  <int value="839" label="FormDataAppendFile"/>
+  <int value="840" label="FormDataAppendFileWithFilename"/>
+  <int value="841" label="FormDataAppendBlob"/>
+  <int value="842" label="FormDataAppendBlobWithFilename"/>
+  <int value="843" label="FormDataAppendNull"/>
+  <int value="844" label="HTMLDocumentCreateAttributeNameNotLowercase"/>
+  <int value="845"
+      label="NonHTMLElementSetAttributeNodeFromHTMLDocumentNameNotLowercase"/>
+  <int value="846" label="DOMStringList_Item_AttributeGetter_IndexedDB"/>
+  <int value="847" label="DOMStringList_Item_AttributeGetter_Location"/>
+  <int value="848" label="DOMStringList_Contains_Method_IndexedDB"/>
+  <int value="849" label="DOMStringList_Contains_Method_Location"/>
+  <int value="850" label="NavigatorVibrate"/>
+  <int value="851" label="NavigatorVibrateSubFrame"/>
+  <int value="852" label="PermissionStatusStatus"/>
+  <int value="853" label="V8XPathEvaluator_Constructor"/>
+  <int value="854" label="V8XPathEvaluator_CreateExpression_Method"/>
+  <int value="855" label="V8XPathEvaluator_CreateNSResolver_Method"/>
+  <int value="856" label="V8XPathEvaluator_Evaluate_Method"/>
+  <int value="857" label="RequestMIDIAccess"/>
+  <int value="858" label="V8MouseEvent_LayerX_AttributeGetter"/>
+  <int value="859" label="V8MouseEvent_LayerY_AttributeGetter"/>
+  <int value="860" label="InnerTextWithShadowTree"/>
+  <int value="861" label="SelectionToStringWithShadowTree"/>
+  <int value="862" label="WindowFindWithShadowTree"/>
+  <int value="863" label="V8CompositionEvent_InitCompositionEvent_Method"/>
+  <int value="864" label="V8CustomEvent_InitCustomEvent_Method"/>
+  <int value="865" label="V8DeviceMotionEvent_InitDeviceMotionEvent_Method"/>
+  <int value="866"
+      label="V8DeviceOrientationEvent_InitDeviceOrientationEvent_Method"/>
+  <int value="867" label="V8Event_InitEvent_Method"/>
+  <int value="868" label="V8KeyboardEvent_InitKeyboardEvent_Method"/>
+  <int value="869" label="V8MouseEvent_InitMouseEvent_Method"/>
+  <int value="870" label="V8MutationEvent_InitMutationEvent_Method"/>
+  <int value="871" label="V8StorageEvent_InitStorageEvent_Method"/>
+  <int value="872" label="V8TouchEvent_InitTouchEvent_Method"/>
+  <int value="873" label="V8UIEvent_InitUIEvent_Method"/>
+  <int value="874" label="V8Document_CreateTouch_Method"/>
+  <int value="875" label="V8HTMLFrameElement_GetSVGDocument_Method"/>
+  <int value="876" label="RequestFileSystemNonWebbyOrigin"/>
+  <int value="877" label="V8Console_Memory_AttributeGetter"/>
+  <int value="878" label="V8Console_Memory_AttributeSetter"/>
+  <int value="879" label="V8MemoryInfo_TotalJSHeapSize_AttributeGetter"/>
+  <int value="880" label="V8MemoryInfo_UsedJSHeapSize_AttributeGetter"/>
+  <int value="881" label="V8MemoryInfo_JSHeapSizeLimit_AttributeGetter"/>
+  <int value="882" label="V8Performance_Timing_AttributeGetter"/>
+  <int value="883" label="V8Performance_Navigation_AttributeGetter"/>
+  <int value="884" label="V8Performance_Memory_AttributeGetter"/>
+  <int value="885" label="V8SharedWorker_WorkerStart_AttributeGetter"/>
+  <int value="886" label="HTMLKeygenElement"/>
+  <int value="887" label="V8SVGElement_OffsetParent_AttributeGetter"/>
+  <int value="888" label="V8SVGElement_OffsetTop_AttributeGetter"/>
+  <int value="889" label="V8SVGElement_OffsetLeft_AttributeGetter"/>
+  <int value="890" label="V8SVGElement_OffsetWidth_AttributeGetter"/>
+  <int value="891" label="V8SVGElement_OffsetHeight_AttributeGetter"/>
+  <int value="892" label="HTMLMediaElementPreloadNone"/>
+  <int value="893" label="HTMLMediaElementPreloadMetadata"/>
+  <int value="894" label="HTMLMediaElementPreloadAuto"/>
+  <int value="895" label="HTMLMediaElementPreloadDefault"/>
+  <int value="896" label="MixedContentBlockableAllowed"/>
+  <int value="897" label="PseudoBeforeAfterForInputElement"/>
+  <int value="898" label="V8Permissions_Revoke_Method"/>
+  <int value="899" label="LinkRelDnsPrefetch"/>
+  <int value="900" label="LinkRelPreconnect"/>
+  <int value="901" label="LinkRelPreload"/>
+  <int value="902" label="LinkHeaderDnsPrefetch"/>
+  <int value="903" label="LinkHeaderPreconnect"/>
+  <int value="904" label="ClientHintsMetaAcceptCH"/>
+  <int value="905" label="HTMLElementDeprecatedWidth"/>
+  <int value="906" label="ClientHintsContentDPR"/>
+  <int value="907" label="ElementAttachShadowOpen"/>
+  <int value="908" label="ElementAttachShadowClosed"/>
+  <int value="909" label="AudioParamSetValueAtTime"/>
+  <int value="910" label="AudioParamLinearRampToValueAtTime"/>
+  <int value="911" label="AudioParamExponentialRampToValueAtTime"/>
+  <int value="912" label="AudioParamSetTargetAtTime"/>
+  <int value="913" label="AudioParamSetValueCurveAtTime"/>
+  <int value="914" label="AudioParamCancelScheduledValues"/>
+  <int value="915" label="V8Permissions_Request_Method"/>
+  <int value="916" label="LinkRelSubresource"/>
+  <int value="917" label="LinkRelPrefetch"/>
+  <int value="918" label="LinkRelPrerender"/>
+  <int value="919" label="LinkRelNext"/>
+  <int value="920" label="PrefixedPerformanceResourceTimingBufferFull"/>
+  <int value="921" label="CSSValuePrefixedMinContent"/>
+  <int value="922" label="CSSValuePrefixedMaxContent"/>
+  <int value="923" label="CSSValuePrefixedFitContent"/>
+  <int value="924" label="CSSValuePrefixedFillAvailable"/>
+  <int value="925" label="FetchAPIRequestContext"/>
+  <int value="926" label="PresentationDefaultRequest"/>
+  <int value="927" label="PresentationAvailabilityChangeEventListener"/>
+  <int value="928" label="PresentationRequestConstructor"/>
+  <int value="929" label="PresentationRequestStart"/>
+  <int value="930" label="PresentationRequestReconnect"/>
+  <int value="931" label="PresentationRequestGetAvailability"/>
+  <int value="932" label="PresentationRequestConnectionAvailableEventListener"/>
+  <int value="933" label="PresentationConnectionTerminate"/>
+  <int value="934" label="PresentationConnectionSend"/>
+  <int value="935" label="PresentationConnectionStateChangeEventListener"/>
+  <int value="936" label="PresentationConnectionMessageEventListener"/>
+  <int value="937" label="CSSAnimationsStackedNeutralKeyframe"/>
+  <int value="938" label="ReadingCheckedInClickHandler"/>
+  <int value="939" label="FlexboxIntrinsicSizeAlgorithmIsDifferent"/>
+  <int value="940" label="HTMLImportsHasStyleSheets"/>
+  <int value="941" label="WebkitTextInClipProperty"/>
+  <int value="942" label="WebkitTextInColorProperty"/>
+  <int value="943" label="HeaderValueNotMatchingRFC7230"/>
+  <int value="944" label="ClipPathOfPositionedElement"/>
+  <int value="945" label="ClipCssOfPositionedElement"/>
+  <int value="946" label="NetInfoType"/>
+  <int value="947" label="NetInfoDownlinkMax"/>
+  <int value="948" label="NetInfoOnChange"/>
+  <int value="949" label="NetInfoOnTypeChange"/>
+  <int value="950" label="V8Window_Alert_Method"/>
+  <int value="951" label="V8Window_Confirm_Method"/>
+  <int value="952" label="V8Window_Prompt_Method"/>
+  <int value="953" label="V8Window_Print_Method"/>
+  <int value="954" label="V8Window_RequestIdleCallback_Method"/>
+  <int value="955" label="FlexboxPercentagePaddingVertical"/>
+  <int value="956" label="FlexboxPercentageMarginVertical"/>
+  <int value="957" label="BackspaceNavigatedBack"/>
+  <int value="958" label="BackspaceNavigatedBackAfterFormInteraction"/>
+  <int value="959" label="CSPSourceWildcardWouldMatchExactHost"/>
+  <int value="960" label="CredentialManagerGet"/>
+  <int value="961" label="CredentialManagerGetWithUI"/>
+  <int value="962" label="CredentialManagerGetWithoutUI"/>
+  <int value="963" label="CredentialManagerStore"/>
+  <int value="964" label="CredentialManagerRequireUserMediation"/>
+  <int value="965" label="RequestAutocomplete"/>
+  <int value="966" label="BlockableMixedContentInSubframeBlocked"/>
+  <int value="967" label="AddEventListenerThirdArgumentIsObject"/>
+  <int value="968" label="RemoveEventListenerThirdArgumentIsObject"/>
+  <int value="969" label="CSSAtRuleCharset"/>
+  <int value="970" label="CSSAtRuleFontFace"/>
+  <int value="971" label="CSSAtRuleImport"/>
+  <int value="972" label="CSSAtRuleKeyframes"/>
+  <int value="973" label="CSSAtRuleMedia"/>
+  <int value="974" label="CSSAtRuleNamespace"/>
+  <int value="975" label="CSSAtRulePage"/>
+  <int value="976" label="CSSAtRuleSupports"/>
+  <int value="977" label="CSSAtRuleViewport"/>
+  <int value="978" label="CSSAtRuleWebkitKeyframes"/>
+  <int value="979" label="V8HTMLFieldSetElement_Elements_AttributeGetter"/>
+  <int value="980" label="HTMLMediaElementPreloadForcedNone"/>
+  <int value="981" label="ExternalAddSearchProvider"/>
+  <int value="982" label="ExternalIsSearchProviderInstalled"/>
+  <int value="983" label="V8Permissions_RequestAll_Method"/>
+  <int value="984" label="BluetoothDeviceInstanceId"/>
+  <int value="985" label="HTMLLabelElementFormIDLAttribute"/>
+  <int value="986" label="HTMLLabelElementFormContentAttribute"/>
+  <int value="987" label="DeviceOrientationAbsoluteInsecureOrigin"/>
+  <int value="988" label="DeviceOrientationAbsoluteSecureOrigin"/>
+  <int value="989" label="FontFaceConstructor"/>
+  <int value="990" label="ServiceWorkerControlledPage"/>
+  <int value="991" label="MeterElementWithContinuousCapacityAppearance"/>
+  <int value="992" label="MeterElementWithDiscreteCapacityAppearance"/>
+  <int value="993" label="MeterElementWithMeterAppearance"/>
+  <int value="994" label="MeterElementWithNoneAppearance"/>
+  <int value="995" label="MeterElementWithRatingAppearance"/>
+  <int value="996" label="MeterElementWithRelevancyAppearance"/>
+  <int value="997" label="SelectionAnchorNode"/>
+  <int value="998" label="SelectionAnchorOffset"/>
+  <int value="999" label="SelectionFocusNode"/>
+  <int value="1000" label="SelectionFocusOffset"/>
+  <int value="1001" label="SelectionIsCollapsed"/>
+  <int value="1002" label="SelectionRangeCount"/>
+  <int value="1003" label="SelectionGetRangeAt"/>
+  <int value="1004" label="SelectionAddRange"/>
+  <int value="1005" label="SelectionRemoveAllRanges"/>
+  <int value="1006" label="SelectionCollapse"/>
+  <int value="1007" label="SelectionCollapseToStart"/>
+  <int value="1008" label="SelectionCollapseToEnd"/>
+  <int value="1009" label="SelectionExtend"/>
+  <int value="1010" label="SelectionSelectAllChildren"/>
+  <int value="1011" label="SelectionDeleteDromDocument"/>
+  <int value="1012" label="SelectionDOMString"/>
+  <int value="1013" label="InputTypeRangeVerticalAppearance"/>
+  <int value="1014" label="CSSFilterReference"/>
+  <int value="1015" label="CSSFilterGrayscale"/>
+  <int value="1016" label="CSSFilterSepia"/>
+  <int value="1017" label="CSSFilterSaturate"/>
+  <int value="1018" label="CSSFilterHueRotate"/>
+  <int value="1019" label="CSSFilterInvert"/>
+  <int value="1020" label="CSSFilterOpacity"/>
+  <int value="1021" label="CSSFilterBrightness"/>
+  <int value="1022" label="CSSFilterContrast"/>
+  <int value="1023" label="CSSFilterBlur"/>
+  <int value="1024" label="CSSFilterDropShadow"/>
+  <int value="1025" label="BackgroundSyncRegister"/>
+  <int value="1026" label="BorderImageWithBorderStyleNone"/>
+  <int value="1027" label="ExecCommandOnInputOrTextarea"/>
+  <int value="1028" label="V8History_ScrollRestoration_AttributeGetter"/>
+  <int value="1029" label="V8History_ScrollRestoration_AttributeSetter"/>
+  <int value="1030" label="SVG1DOMFilter"/>
+  <int value="1031" label="OfflineAudioContextStartRendering"/>
+  <int value="1032" label="OfflineAudioContextSuspend"/>
+  <int value="1033" label="OfflineAudioContextResume"/>
+  <int value="1034" label="AttrCloneNode"/>
+  <int value="1035" label="SVG1DOMPaintServer"/>
+  <int value="1036" label="SVGSVGElementFragmentSVGView"/>
+  <int value="1037" label="SVGSVGElementFragmentSVGViewElement"/>
+  <int value="1038" label="PresentationConnectionClose"/>
+  <int value="1039" label="SVG1DOMShape"/>
+  <int value="1040" label="SVG1DOMText"/>
+  <int value="1041" label="RTCPeerConnectionConstructorConstraints"/>
+  <int value="1042" label="RTCPeerConnectionConstructorCompliant"/>
+  <int value="1043"
+      label="RTCPeerConnectionCreateOfferLegacyNoFailureCallback"/>
+  <int value="1044" label="RTCPeerConnectionCreateOfferLegacyFailureCallback"/>
+  <int value="1045" label="RTCPeerConnectionCreateOfferLegacyConstraints"/>
+  <int value="1046" label="RTCPeerConnectionCreateOfferLegacyOfferOptions"/>
+  <int value="1047" label="RTCPeerConnectionCreateOfferLegacyCompliant"/>
+  <int value="1048"
+      label="RTCPeerConnectionCreateAnswerLegacyNoFailureCallback"/>
+  <int value="1049" label="RTCPeerConnectionCreateAnswerLegacyFailureCallback"/>
+  <int value="1050" label="RTCPeerConnectionCreateAnswerLegacyConstraints"/>
+  <int value="1051" label="RTCPeerConnectionCreateAnswerLegacyCompliant"/>
+  <int value="1052"
+      label="RTCPeerConnectionSetLocalDescriptionLegacyNoSuccessCallback"/>
+  <int value="1053"
+      label="RTCPeerConnectionSetLocalDescriptionLegacyNoFailureCallback"/>
+  <int value="1054"
+      label="RTCPeerConnectionSetLocalDescriptionLegacyCompliant"/>
+  <int value="1055"
+      label="RTCPeerConnectionSetRemoteDescriptionLegacyNoSuccessCallback"/>
+  <int value="1056"
+      label="RTCPeerConnectionSetRemoteDescriptionLegacyNoFailureCallback"/>
+  <int value="1057"
+      label="RTCPeerConnectionSetRemoteDescriptionLegacyCompliant"/>
+  <int value="1058" label="RTCPeerConnectionGetStatsLegacyNonCompliant"/>
+  <int value="1059" label="NodeFilterIsFunction"/>
+  <int value="1060" label="NodeFilterIsObject"/>
+  <int value="1061" label="TextEncoderUTF16"/>
+  <int value="1062" label="CSSSelectorInternalPseudoListBox"/>
+  <int value="1063" label="CSSSelectorInternalMediaControlsCastButton"/>
+  <int value="1064" label="CSSSelectorInternalMediaControlsOverlayCastButton"/>
+  <int value="1065" label="CSSSelectorInternalPseudoSpatialNavigationFocus"/>
+  <int value="1066" label="SameOriginTextScript"/>
+  <int value="1067" label="SameOriginApplicationScript"/>
+  <int value="1068" label="SameOriginOtherScript"/>
+  <int value="1069" label="CrossOriginTextScript"/>
+  <int value="1070" label="CrossOriginApplicationScript"/>
+  <int value="1071" label="CrossOriginOtherScript"/>
+  <int value="1072" label="SVG1DOMSVGTests"/>
+  <int value="1073" label="V8SVGViewElement_ViewTarget_AttributeGetter"/>
+  <int value="1074" label="DisableRemotePlaybackAttribute"/>
+  <int value="1075" label="V8SloppyMode"/>
+  <int value="1076" label="V8StrictMode"/>
+  <int value="1077" label="V8StrongMode"/>
+  <int value="1078" label="AudioNodeConnectToAudioNode"/>
+  <int value="1079" label="AudioNodeConnectToAudioParam"/>
+  <int value="1080" label="AudioNodeDisconnectFromAudioNode"/>
+  <int value="1081" label="AudioNodeDisconnectFromAudioParam"/>
+  <int value="1082" label="V8CSSFontFaceRule_Style_AttributeGetter"/>
+  <int value="1083" label="SelectionCollapseNull"/>
+  <int value="1084" label="SelectionSetBaseAndExtentNull"/>
+  <int value="1085" label="V8SVGSVGElement_CreateSVGNumber_Method"/>
+  <int value="1086" label="V8SVGSVGElement_CreateSVGLength_Method"/>
+  <int value="1087" label="V8SVGSVGElement_CreateSVGAngle_Method"/>
+  <int value="1088" label="V8SVGSVGElement_CreateSVGPoint_Method"/>
+  <int value="1089" label="V8SVGSVGElement_CreateSVGMatrix_Method"/>
+  <int value="1090" label="V8SVGSVGElement_CreateSVGRect_Method"/>
+  <int value="1091" label="V8SVGSVGElement_CreateSVGTransform_Method"/>
+  <int value="1092"
+      label="V8SVGSVGElement_CreateSVGTransformFromMatrix_Method"/>
+  <int value="1093" label="FormNameAccessForNonDescendantImageElement"/>
+  <int value="1094" label="FormControlsCollectionNameAccessForImageElement"/>
+  <int value="1095" label="V8SVGSVGElement_Viewport_AttributeGetter"/>
+  <int value="1096" label="V8RegExpPrototypeStickyGetter"/>
+  <int value="1097" label="V8RegExpPrototypeToString"/>
+  <int value="1098"
+      label="V8InputDeviceCapabilities_FiresTouchEvents_AttributeGetter"/>
+  <int value="1099" label="DataElement"/>
+  <int value="1100" label="TimeElement"/>
+  <int value="1101" label="SVG1DOMUriReference"/>
+  <int value="1102" label="SVG1DOMZoomAndPan"/>
+  <int value="1103" label="V8SVGGraphicsElement_Transform_AttributeGetter"/>
+  <int value="1104" label="MenuItemElement"/>
+  <int value="1105" label="MenuItemCloseTag"/>
+  <int value="1106" label="SVG1DOMMarkerElement"/>
+  <int value="1107" label="SVG1DOMUseElement"/>
+  <int value="1108" label="SVG1DOMMaskElement"/>
+  <int value="1109" label="V8SVGAElement_Target_AttributeGetter"/>
+  <int value="1110" label="V8SVGClipPathElement_ClipPathUnits_AttributeGetter"/>
+  <int value="1111" label="SVG1DOMFitToViewBox"/>
+  <int value="1112" label="SVG1DOMCursorElement"/>
+  <int value="1113" label="V8SVGPathElement_PathLength_AttributeGetter"/>
+  <int value="1114" label="SVG1DOMSVGElement"/>
+  <int value="1115" label="SVG1DOMImageElement"/>
+  <int value="1116" label="SVG1DOMForeignObjectElement"/>
+  <int value="1117" label="AudioContextCreateIIRFilter"/>
+  <int value="1118" label="CSSSelectorPseudoSlotted"/>
+  <int value="1119" label="MediaDevicesEnumerateDevices"/>
+  <int value="1120" label="NonSecureSharedWorkerAccessedFromSecureContext"/>
+  <int value="1121" label="SecureSharedWorkerAccessedFromNonSecureContext"/>
+  <int value="1122" label="NonCSSStyleSheetType"/>
+  <int value="1123" label="EventComposedPath"/>
+  <int value="1124" label="LinkHeaderPreload"/>
+  <int value="1125" label="MouseWheelEvent"/>
+  <int value="1126" label="WheelEvent"/>
+  <int value="1127" label="MouseWheelAndWheelEvent"/>
+  <int value="1128" label="BodyScrollsInAdditionToViewport"/>
+  <int value="1129" label="DocumentDesignModeEnabeld"/>
+  <int value="1130" label="ContentEditableTrue"/>
+  <int value="1131" label="ContentEditableTrueOnHTML"/>
+  <int value="1132" label="ContentEditablePlainTextOnly"/>
+  <int value="1133" label="V8RegExpPrototypeUnicodeGetter"/>
+  <int value="1134" label="V8IntlV8Parse"/>
+  <int value="1135" label="V8IntlPattern"/>
+  <int value="1136" label="V8IntlResolved"/>
+  <int value="1137" label="V8PromiseChain"/>
+  <int value="1138" label="V8PromiseAccept"/>
+  <int value="1139" label="V8PromiseDefer"/>
+  <int value="1140" label="EventComposed"/>
+  <int value="1141" label="GeolocationInsecureOriginIframe"/>
+  <int value="1142" label="GeolocationSecureOriginIframe"/>
+  <int value="1143" label="RequestMIDIAccessIframe"/>
+  <int value="1144" label="GetUserMediaInsecureOriginIframe"/>
+  <int value="1145" label="GetUserMediaSecureOriginIframe"/>
+  <int value="1146" label="ElementRequestPointerLockIframe"/>
+  <int value="1147" label="NotificationAPIInsecureOriginIframe"/>
+  <int value="1148" label="NotificationAPISecureOriginIframe"/>
+  <int value="1149" label="WebSocket"/>
+  <int value="1150" label="MediaStreamConstraintsNameValue"/>
+  <int value="1151" label="MediaStreamConstraintsFromDictionary"/>
+  <int value="1152" label="MediaStreamConstraintsConformant"/>
+  <int value="1153" label="CSSSelectorIndirectAdjacent"/>
+  <int value="1154" label="NodeRootNode (obsolete)"/>
+  <int value="1155" label="BluetoothDeviceConnectGATT"/>
+  <int value="1156" label="CreateImageBitmap"/>
+  <int value="1157" label="PresentationConnectionConnectEventListener"/>
+  <int value="1158" label="PresentationConnectionCloseEventListener"/>
+  <int value="1159" label="PresentationConnectionTerminateEventListener"/>
+  <int value="1160" label="DocumentCreateEventFontFaceSetLoadEvent"/>
+  <int value="1161" label="DocumentCreateEventMediaQueryListEvent"/>
+  <int value="1162" label="DocumentCreateEventAnimationEvent"/>
+  <int value="1163" label="DocumentCreateEventAnimationPlayerEvent"/>
+  <int value="1164" label="DocumentCreateEventApplicationCacheErrorEvent"/>
+  <int value="1165" label="DocumentCreateEventAutocompleteErrorEvent"/>
+  <int value="1166" label="DocumentCreateEventBeforeUnloadEvent"/>
+  <int value="1167" label="DocumentCreateEventClipboardEvent"/>
+  <int value="1168" label="DocumentCreateEventCompositionEvent"/>
+  <int value="1169" label="DocumentCreateEventDragEvent"/>
+  <int value="1170" label="DocumentCreateEventErrorEvent"/>
+  <int value="1171" label="DocumentCreateEventFocusEvent"/>
+  <int value="1172" label="DocumentCreateEventHashChangeEvent"/>
+  <int value="1173" label="DocumentCreateEventMutationEvent"/>
+  <int value="1174" label="DocumentCreateEventPageTransitionEvent"/>
+  <int value="1175" label="DocumentCreateEventPointerEvent"/>
+  <int value="1176" label="DocumentCreateEventPopStateEvent"/>
+  <int value="1177" label="DocumentCreateEventProgressEvent"/>
+  <int value="1178" label="DocumentCreateEventPromiseRejectionEvent"/>
+  <int value="1179" label="DocumentCreateEventRelatedEvent"/>
+  <int value="1180" label="DocumentCreateEventResourceProgressEvent"/>
+  <int value="1181" label="DocumentCreateEventSecurityPolicyViolationEvent"/>
+  <int value="1182" label="DocumentCreateEventTextEvent"/>
+  <int value="1183" label="DocumentCreateEventTransitionEvent"/>
+  <int value="1184" label="DocumentCreateEventWheelEvent"/>
+  <int value="1185" label="DocumentCreateEventMediaKeyEvent"/>
+  <int value="1186" label="DocumentCreateEventTrackEvent"/>
+  <int value="1187" label="DocumentCreateEventWebKitAnimationEvent"/>
+  <int value="1188" label="DocumentCreateEventMutationEvents"/>
+  <int value="1189" label="DocumentCreateEventOrientationEvent"/>
+  <int value="1190" label="DocumentCreateEventSVGEvents"/>
+  <int value="1191" label="DocumentCreateEventWebKitTransitionEvent"/>
+  <int value="1192" label="DocumentCreateEventBeforeInstallPromptEvent"/>
+  <int value="1193" label="DocumentCreateEventSyncEvent"/>
+  <int value="1194" label="DocumentCreateEventDeviceLightEvent"/>
+  <int value="1195" label="DocumentCreateEventDeviceMotionEvent"/>
+  <int value="1196" label="DocumentCreateEventDeviceOrientationEvent"/>
+  <int value="1197" label="DocumentCreateEventMediaEncryptedEvent"/>
+  <int value="1198" label="DocumentCreateEventMediaKeyMessageEvent"/>
+  <int value="1199" label="DocumentCreateEventGamepadEvent"/>
+  <int value="1200" label="DocumentCreateEventGeofencingEvent"/>
+  <int value="1201" label="DocumentCreateEventIDBVersionChangeEvent"/>
+  <int value="1202" label="DocumentCreateEventBlobEvent"/>
+  <int value="1203" label="DocumentCreateEventMediaStreamEvent"/>
+  <int value="1204" label="DocumentCreateEventMediaStreamTrackEvent"/>
+  <int value="1205" label="DocumentCreateEventRTCDTMFToneChangeEvent"/>
+  <int value="1206" label="DocumentCreateEventRTCDataChannelEvent"/>
+  <int value="1207" label="DocumentCreateEventRTCIceCandidateEvent"/>
+  <int value="1208" label="DocumentCreateEventServicePortConnectEvent"/>
+  <int value="1209" label="DocumentCreateEventNotificationEvent"/>
+  <int value="1210"
+      label="DocumentCreateEventPresentationConnectionAvailableEvent"/>
+  <int value="1211"
+      label="DocumentCreateEventPresentationConnectionCloseEvent"/>
+  <int value="1212" label="DocumentCreateEventPushEvent"/>
+  <int value="1213" label="DocumentCreateEventExtendableEvent"/>
+  <int value="1214" label="DocumentCreateEventExtendableMessageEvent"/>
+  <int value="1215" label="DocumentCreateEventFetchEvent"/>
+  <int value="1216" label="DocumentCreateEventInstallEvent"/>
+  <int value="1217" label="DocumentCreateEventServiceWorkerMessageEvent"/>
+  <int value="1218" label="DocumentCreateEventSpeechRecognitionError"/>
+  <int value="1219" label="DocumentCreateEventSpeechRecognitionEvent"/>
+  <int value="1220" label="DocumentCreateEventSpeechSynthesisEvent"/>
+  <int value="1221" label="DocumentCreateEventStorageEvent"/>
+  <int value="1222" label="DocumentCreateEventAudioProcessingEvent"/>
+  <int value="1223" label="DocumentCreateEventOfflineAudioCompletionEvent"/>
+  <int value="1224" label="DocumentCreateEventWebGLContextEvent"/>
+  <int value="1225" label="DocumentCreateEventMIDIConnectionEvent"/>
+  <int value="1226" label="DocumentCreateEventMIDIMessageEvent"/>
+  <int value="1227" label="DocumentCreateEventCloseEvent"/>
+  <int value="1228" label="DocumentCreateEventKeyboardEvents"/>
+  <int value="1229" label="HTMLMediaElement"/>
+  <int value="1230" label="HTMLMediaElementInDocument"/>
+  <int value="1231" label="HTMLMediaElementControlsAttribute"/>
+  <int value="1232" label="SVGZoomEvent"/>
+  <int value="1233" label="V8Animation_Oncancel_AttributeGetter"/>
+  <int value="1234" label="V8Animation_Oncancel_AttributeSetter"/>
+  <int value="1235" label="V8HTMLCommentInExternalScript"/>
+  <int value="1236" label="V8HTMLComment"/>
+  <int value="1237" label="V8SloppyModeBlockScopedFunctionRedefinition"/>
+  <int value="1238" label="V8ForInInitializer"/>
+  <int value="1239" label="V8Animation_Id_AttributeGetter"/>
+  <int value="1240" label="V8Animation_Id_AttributeSetter"/>
+  <int value="1241" label="MediaStreamOnEnded"/>
+  <int value="1242" label="DocumentCreateEventInputEvent"/>
+  <int value="1243" label="WebAnimationHyphenatedProperty"/>
+  <int value="1244"
+      label="FormControlsCollectionReturnsRadioNodeListForFieldSet"/>
+  <int value="1245" label="ApplicationCacheManifestSelectInsecureOrigin"/>
+  <int value="1246" label="ApplicationCacheManifestSelectSecureOrigin"/>
+  <int value="1247" label="ApplicationCacheAPIInsecureOrigin"/>
+  <int value="1248" label="ApplicationCacheAPISecureOrigin"/>
+  <int value="1249" label="CSSAtRuleApply"/>
+  <int value="1250" label="CSSSelectorPseudoAny"/>
+  <int value="1251" label="PannerNodeSetVelocity"/>
+  <int value="1252" label="DocumentAllItemNoArguments"/>
+  <int value="1253" label="DocumentAllItemNamed"/>
+  <int value="1254" label="DocumentAllItemIndexed"/>
+  <int value="1255" label="DocumentAllItemIndexedWithNonNumber"/>
+  <int value="1256" label="DocumentAllLegacyCallNoArguments"/>
+  <int value="1257" label="DocumentAllLegacyCallNamed"/>
+  <int value="1258" label="DocumentAllLegacyCallIndexed"/>
+  <int value="1259" label="DocumentAllLegacyCallIndexedWithNonNumber"/>
+  <int value="1260" label="DocumentAllLegacyCallTwoArguments"/>
+  <int value="1261" label="HTMLLabelElementFormIsDifferentFromControlForm"/>
+  <int value="1262" label="HTMLLabelElementHasNoControlAndFormIsAncestor"/>
+  <int value="1263" label="HTMLLabelElementControlForNonFormAssociatedElement"/>
+  <int value="1264" label="PatternAttributeUnicodeFlagIsIncompatible"/>
+  <int value="1265" label="HTMLMediaElementLoadNetworkEmptyNotPaused"/>
+  <int value="1266" label="EventRelatedTargetScoped"/>
+  <int value="1267" label="V8Window_WebkitSpeechGrammar_ConstructorGetter"/>
+  <int value="1268" label="V8Window_WebkitSpeechGrammarList_ConstructorGetter"/>
+  <int value="1269" label="V8Window_WebkitSpeechRecognition_ConstructorGetter"/>
+  <int value="1270"
+      label="V8Window_WebkitSpeechRecognitionError_ConstructorGetter"/>
+  <int value="1271"
+      label="V8Window_WebkitSpeechRecognitionEvent_ConstructorGetter"/>
+  <int value="1272" label="V8Window_SpeechSynthesis_AttributeGetter"/>
+  <int value="1273" label="V8IDBFactory_WebkitGetDatabaseNames_Method"/>
+  <int value="1274" label="ImageDocument"/>
+  <int value="1275" label="ScriptPassesCSPDynamic"/>
+  <int value="1276" label="ScriptPassesCSPNonce"/>
+  <int value="1277" label="CSPWithStrictDynamic"/>
+  <int value="1278" label="ScrollAnchored"/>
+  <int value="1279" label="AddEventListenerFourArguments"/>
+  <int value="1280" label="RemoveEventListenerFourArguments"/>
+  <int value="1281" label="InvalidReportUriDirectiveInMetaCSP"/>
+  <int value="1282" label="InvalidSandboxDirectiveInMetaCSP"/>
+  <int value="1283" label="InvalidFrameAncestorsDirectiveInMetaCSP"/>
+  <int value="1284" label="TouchDragUserGestureUsed"/>
+  <int value="1285" label="TouchDragUserGestureUsedCrossOrigin"/>
+  <int value="1286" label="DocumentCreateEventForeignFetchEvent"/>
+  <int value="1287" label="SVGCalcModeDiscrete"/>
+  <int value="1288" label="SVGCalcModeLinear"/>
+  <int value="1289" label="SVGCalcModePaced"/>
+  <int value="1290" label="SVGCalcModeSpline"/>
+  <int value="1291" label="FormSubmissionStarted"/>
+  <int value="1292" label="FormValidationStarted"/>
+  <int value="1293" label="FormValidationAbortedSubmission"/>
+  <int value="1294" label="FormValidationShowedMessage"/>
+  <int value="1295" label="WebAnimationsEasingAsFunctionLinear"/>
+  <int value="1296" label="WebAnimationsEasingAsFunctionOther"/>
+  <int value="1297" label="V8Document_Images_AttributeGetter"/>
+  <int value="1298" label="V8Document_Embeds_AttributeGetter"/>
+  <int value="1299" label="V8Document_Plugins_AttributeGetter"/>
+  <int value="1300" label="V8Document_Links_AttributeGetter"/>
+  <int value="1301" label="V8Document_Forms_AttributeGetter"/>
+  <int value="1302" label="V8Document_Scripts_AttributeGetter"/>
+  <int value="1303" label="V8Document_Anchors_AttributeGetter"/>
+  <int value="1304" label="V8Document_Applets_AttributeGetter"/>
+  <int value="1305" label="XMLHttpRequestCrossOriginWithCredentials"/>
+  <int value="1306" label="MediaStreamTrackRemote"/>
+  <int value="1307" label="V8Node_IsConnected_AttributeGetter"/>
+  <int value="1308" label="ShadowRootDelegatesFocus"/>
+  <int value="1309" label="MixedShadowRootV0AndV1"/>
+  <int value="1310" label="ImageDocumentInFrame"/>
+  <int value="1311" label="MediaDocument"/>
+  <int value="1312" label="MediaDocumentInFrame"/>
+  <int value="1313" label="PluginDocument"/>
+  <int value="1314" label="PluginDocumentInFrame"/>
+  <int value="1315" label="SinkDocument"/>
+  <int value="1316" label="SinkDocumentInFrame"/>
+  <int value="1317" label="TextDocument"/>
+  <int value="1318" label="TextDocumentInFrame"/>
+  <int value="1319" label="ViewSourceDocument"/>
+  <int value="1320" label="FileAPINativeLineEndings"/>
+  <int value="1321" label="PointerEventAttributeCount"/>
+  <int value="1322" label="CompositedReplication"/>
+  <int value="1323" label="EncryptedMediaAllSelectedContentTypesHaveCodecs"/>
+  <int value="1324" label="EncryptedMediaAllSelectedContentTypesMissingCodecs"/>
+  <int value="1325" label="V8DataTransferItem_WebkitGetAsEntry_Method"/>
+  <int value="1326" label="V8HTMLInputElement_WebkitEntries_AttributeGetter"/>
+  <int value="1327"
+      label="Entry_Filesystem_AttributeGetter_IsolatedFileSystem"/>
+  <int value="1328" label="Entry_GetMetadata_Method_IsolatedFileSystem"/>
+  <int value="1329" label="Entry_MoveTo_Method_IsolatedFileSystem"/>
+  <int value="1330" label="Entry_CopyTo_Method_IsolatedFileSystem"/>
+  <int value="1331" label="Entry_Remove_Method_IsolatedFileSystem"/>
+  <int value="1332" label="Entry_GetParent_Method_IsolatedFileSystem"/>
+  <int value="1333" label="Entry_ToURL_Method_IsolatedFileSystem"/>
+  <int value="1334" label="During_Microtask_Alert"/>
+  <int value="1335" label="During_Microtask_Confirm"/>
+  <int value="1336" label="During_Microtask_Print"/>
+  <int value="1337" label="During_Microtask_Prompt"/>
+  <int value="1338" label="During_Microtask_SyncXHR"/>
+  <int value="1339" label="URLMethodCreateObjectURLServiceWorker"/>
+  <int value="1340" label="URLMethodRevokeObjectURLServiceWorker"/>
+  <int value="1341" label="DocumentCreateEventPaymentRequestUpdateEvent"/>
+  <int value="1342" label="CredentialManagerGetReturnedCredential"/>
+  <int value="1343" label="GeolocationInsecureOriginDeprecatedNotRemoved"/>
+  <int value="1344"
+      label="GeolocationInsecureOriginIframeDeprecatedNotRemoved"/>
+  <int value="1345" label="ProgressElementWithNoneAppearance"/>
+  <int value="1346" label="ProgressElementWithProgressBarAppearance"/>
+  <int value="1347" label="PointerEventAddListenerCount"/>
+  <int value="1348" label="EventCancelBubbleAffected"/>
+  <int value="1349" label="EventCancelBubbleWasChangedToTrue"/>
+  <int value="1350" label="EventCancelBubbleWasChangedToFalse"/>
+  <int value="1351" label="CSSValueAppearanceNone"/>
+  <int value="1352" label="CSSValueAppearanceNotNone"/>
+  <int value="1353" label="CSSValueAppearanceOthers"/>
+  <int value="1354" label="CSSValueAppearanceButton"/>
+  <int value="1355" label="CSSValueAppearanceCaret"/>
+  <int value="1356" label="CSSValueAppearanceCheckbox"/>
+  <int value="1357" label="CSSValueAppearanceMenulist"/>
+  <int value="1358" label="CSSValueAppearanceMenulistButton"/>
+  <int value="1359" label="CSSValueAppearanceListbox"/>
+  <int value="1360" label="CSSValueAppearanceRadio"/>
+  <int value="1361" label="CSSValueAppearanceSearchField"/>
+  <int value="1362" label="CSSValueAppearanceTextField"/>
+  <int value="1363" label="AudioContextCreatePannerAutomated"/>
+  <int value="1364" label="PannerNodeSetPosition"/>
+  <int value="1365" label="PannerNodeSetOrientation"/>
+  <int value="1366" label="AudioListenerSetPosition"/>
+  <int value="1367" label="AudioListenerSetOrientation"/>
+  <int value="1368" label="IntersectionObserver_Constructor"/>
+  <int value="1369" label="DurableStoragePersist"/>
+  <int value="1370" label="DurableStoragePersisted"/>
+  <int value="1371" label="DurableStorageEstimate"/>
+  <int value="1372" label="UntrustedEventDefaultHandled"/>
+  <int value="1373" label="FixedRasterScaleBlurryContent"/>
+  <int value="1374" label="FixedRasterScalePotentialPerformanceRegression"/>
+  <int value="1375" label="CSSDeepCombinatorAndShadow"/>
+  <int value="1376" label="OpacityWithPreserve3DQuirk"/>
+  <int value="1377" label="CSSSelectorPseudoReadOnly"/>
+  <int value="1378" label="CSSSelectorPseudoReadWrite"/>
+  <int value="1379" label="UnloadHandler_Navigation"/>
+  <int value="1380" label="TouchStartUserGestureUtilized"/>
+  <int value="1381" label="TouchMoveUserGestureUtilized"/>
+  <int value="1382" label="TouchEndDuringScrollUserGestureUtilized"/>
+  <int value="1383" label="CSSSelectorPseudoDefined"/>
+  <int value="1384" label="RTCPeerConnectionAddIceCandidatePromise"/>
+  <int value="1385" label="RTCPeerConnectionAddIceCandidateLegacy"/>
+  <int value="1386" label="RTCIceCandidateDefaultSdpMLineIndex"/>
+  <int value="1387" label="DocumentCreateEventSensorErrorEvent"/>
+  <int value="1388" label="DocumentCreateEventSensorReadingEvent"/>
+  <int value="1389" label="MediaStreamConstraintsOldAndNew"/>
+  <int value="1390" label="V8ArrayProtectorDirtied"/>
+  <int value="1391" label="V8ArraySpeciesModified"/>
+  <int value="1392" label="V8ArrayPrototypeConstructorModified"/>
+  <int value="1393" label="V8ArrayInstanceProtoModified"/>
+  <int value="1394" label="V8ArrayInstanceConstructorModified"/>
+  <int value="1395" label="V8LegacyFunctionDeclaration"/>
+  <int value="1396" label="V8RegExpPrototypeSourceGetter"/>
+  <int value="1397" label="V8RegExpPrototypeOldFlagGetter"/>
+  <int value="1398" label="V8DecimalWithLeadingZeroInStrictMode"/>
+  <int value="1399" label="OBSOLETE_FormSubmissionNotInDocumentTree"/>
+  <int value="1400" label="GetUserMediaPrefixed"/>
+  <int value="1401" label="GetUserMediaLegacy"/>
+  <int value="1402" label="GetUserMediaPromise"/>
+  <int value="1403" label="CSSFilterFunctionNoArguments"/>
+  <int value="1404" label="V8LegacyDateParser"/>
+  <int value="1405" label="OpenSearchInsecureOriginInsecureTarget"/>
+  <int value="1406" label="OpenSearchInsecureOriginSecureTarget"/>
+  <int value="1407" label="OpenSearchSecureOriginInsecureTarget"/>
+  <int value="1408" label="OpenSearchSecureOriginSecureTarget"/>
+  <int value="1409" label="RegisterProtocolHandlerSecureOrigin"/>
+  <int value="1410" label="RegisterProtocolHandlerInsecureOrigin"/>
+  <int value="1411" label="CrossOriginWindowAlert"/>
+  <int value="1412" label="CrossOriginWindowConfirm"/>
+  <int value="1413" label="CrossOriginWindowPrompt"/>
+  <int value="1414" label="CrossOriginWindowPrint"/>
+  <int value="1415" label="MediaStreamOnActive"/>
+  <int value="1416" label="MediaStreamOnInactive"/>
+  <int value="1417" label="AddEventListenerPassiveTrue"/>
+  <int value="1418" label="AddEventListenerPassiveFalse"/>
+  <int value="1419" label="CSPReferrerDirective"/>
+  <int value="1420" label="DocumentOpen"/>
+  <int value="1421" label="ElementRequestPointerLockInShadow"/>
+  <int value="1422" label="ShadowRootPointerLockElement"/>
+  <int value="1423" label="DocumentPointerLockElementInV0Shadow"/>
+  <int value="1424" label="TextAreaMaxLength"/>
+  <int value="1425" label="TextAreaMinLength"/>
+  <int value="1426" label="TopNavigationFromSubFrame"/>
+  <int value="1427" label="PrefixedElementRequestFullscreenInShadow"/>
+  <int value="1428" label="MediaSourceAbortRemove"/>
+  <int value="1429" label="MediaSourceDurationTruncatingBuffered"/>
+  <int value="1430" label="AudioContextCrossOriginIframe"/>
+  <int value="1431" label="PointerEventSetCapture"/>
+  <int value="1432" label="PointerEventDispatch"/>
+  <int value="1433" label="MIDIMessageEventReceivedTime"/>
+  <int value="1434" label="SummaryElementWithDisplayBlockAuthorRule"/>
+  <int value="1435" label="V8MediaStream_Active_AttributeGetter"/>
+  <int value="1436" label="BeforeInstallPromptEvent"/>
+  <int value="1437" label="BeforeInstallPromptEventUserChoice"/>
+  <int value="1438" label="BeforeInstallPromptEventPreventDefault"/>
+  <int value="1439" label="BeforeInstallPromptEventPrompt"/>
+  <int value="1440" label="ExecCommandAltersHTMLStructure"/>
+  <int value="1441" label="SecureContextCheckPassed"/>
+  <int value="1442" label="SecureContextCheckFailed"/>
+  <int value="1443" label="SecureContextCheckForSandboxedOriginPassed"/>
+  <int value="1444" label="SecureContextCheckForSandboxedOriginFailed"/>
+  <int value="1445" label="V8DefineGetterOrSetterWouldThrow"/>
+  <int value="1446" label="V8FunctionConstructorReturnedUndefined"/>
+  <int value="1447" label="V8BroadcastChannel_Constructor"/>
+  <int value="1448" label="V8BroadcastChannel_PostMessage_Method"/>
+  <int value="1449" label="V8BroadcastChannel_Close_Method"/>
+  <int value="1450" label="TouchStartFired"/>
+  <int value="1451" label="MouseDownFired"/>
+  <int value="1452" label="PointerDownFired"/>
+  <int value="1453" label="PointerDownFiredForTouch"/>
+  <int value="1454" label="PointerEventDispatchPointerDown"/>
+  <int value="1455" label="SVGSMILBeginOrEndEventValue"/>
+  <int value="1456" label="SVGSMILBeginOrEndSyncbaseValue"/>
+  <int value="1457" label="SVGSMILElementInsertedAfterLoad"/>
+  <int value="1458" label="V8VisualViewport_ScrollLeft_AttributeGetter"/>
+  <int value="1459" label="V8VisualViewport_ScrollTop_AttributeGetter"/>
+  <int value="1460" label="V8VisualViewport_PageX_AttributeGetter"/>
+  <int value="1461" label="V8VisualViewport_PageY_AttributeGetter"/>
+  <int value="1462" label="V8VisualViewport_ClientWidth_AttributeGetter"/>
+  <int value="1463" label="V8VisualViewport_ClientHeight_AttributeGetter"/>
+  <int value="1464" label="V8VisualViewport_Scale_AttributeGetter"/>
+  <int value="1465" label="VisualViewportScrollFired"/>
+  <int value="1466" label="VisualViewportResizeFired"/>
+  <int value="1467" label="NodeGetRootNode"/>
+  <int value="1468" label="SlotChangeEventAddListener"/>
+  <int value="1469" label="CSSValueAppearanceButtonRendered"/>
+  <int value="1470" label="CSSValueAppearanceButtonForAnchor"/>
+  <int value="1471" label="CSSValueAppearanceButtonForButton"/>
+  <int value="1472" label="CSSValueAppearanceButtonForOtherButtons"/>
+  <int value="1473" label="CSSValueAppearanceTextFieldRendered"/>
+  <int value="1474" label="CSSValueAppearanceTextFieldForSearch"/>
+  <int value="1475" label="CSSValueAppearanceTextFieldForTextField"/>
+  <int value="1476" label="RTCPeerConnectionGetStats"/>
+  <int value="1477" label="SVGSMILAnimationAppliedEffect"/>
+  <int value="1478" label="PerformanceResourceTimingSizes"/>
+  <int value="1479" label="EventSourceDocument"/>
+  <int value="1480" label="EventSourceWorker"/>
+  <int value="1481" label="SingleOriginInTimingAllowOrigin"/>
+  <int value="1482" label="MultipleOriginsInTimingAllowOrigin"/>
+  <int value="1483" label="StarInTimingAllowOrigin"/>
+  <int value="1484" label="SVGSMILAdditiveAnimation"/>
+  <int value="1485" label="SendBeaconWithNonSimpleContentType"/>
+  <int value="1486" label="ChromeLoadTimesRequestTime"/>
+  <int value="1487" label="ChromeLoadTimesStartLoadTime"/>
+  <int value="1488" label="ChromeLoadTimesCommitLoadTime"/>
+  <int value="1489" label="ChromeLoadTimesFinishDocumentLoadTime"/>
+  <int value="1490" label="ChromeLoadTimesFinishLoadTime"/>
+  <int value="1491" label="ChromeLoadTimesFirstPaintTime"/>
+  <int value="1492" label="ChromeLoadTimesFirstPaintAfterLoadTime"/>
+  <int value="1493" label="ChromeLoadTimesNavigationType"/>
+  <int value="1494" label="ChromeLoadTimesWasFetchedViaSpdy"/>
+  <int value="1495" label="ChromeLoadTimesWasNpnNegotiated"/>
+  <int value="1496" label="ChromeLoadTimesNpnNegotiatedProtocol"/>
+  <int value="1497" label="ChromeLoadTimesWasAlternateProtocolAvailable"/>
+  <int value="1498" label="ChromeLoadTimesConnectionInfo"/>
+  <int value="1499" label="ChromeLoadTimesUnknown"/>
+  <int value="1500" label="SVGViewElement"/>
+  <int value="1501" label="WebShareShare"/>
+  <int value="1502" label="AuxclickAddListenerCount"/>
+  <int value="1503" label="HTMLCanvasElement"/>
+  <int value="1504" label="SVGSMILAnimationElementTiming"/>
+  <int value="1505" label="SVGSMILBeginEndAnimationElement"/>
+  <int value="1506" label="SVGSMILPausing"/>
+  <int value="1507" label="SVGSMILCurrentTime"/>
+  <int value="1508" label="HTMLBodyElementOnSelectionChangeAttribute"/>
+  <int value="1509" label="ForeignFetchInterception"/>
+  <int value="1510" label="MapNameMatchingStrict"/>
+  <int value="1511" label="MapNameMatchingASCIICaseless"/>
+  <int value="1512" label="MapNameMatchingUnicodeLower"/>
+  <int value="1513" label="RadioNameMatchingStrict"/>
+  <int value="1514" label="RadioNameMatchingASCIICaseless"/>
+  <int value="1515" label="RadioNameMatchingCaseFolding"/>
+  <int value="1516" label="NavigatorPointerEnabled"/>
+  <int value="1517" label="InputSelectionGettersThrow"/>
+  <int value="1518" label="DocumentCreateEventVRDisplayEvent"/>
+  <int value="1519" label="UsbGetDevices"/>
+  <int value="1520" label="UsbRequestDevice"/>
+  <int value="1521" label="UsbDeviceOpen"/>
+  <int value="1522" label="UsbDeviceClose"/>
+  <int value="1523" label="UsbDeviceSelectConfiguration"/>
+  <int value="1524" label="UsbDeviceClaimInterface"/>
+  <int value="1525" label="UsbDeviceReleaseInterface"/>
+  <int value="1526" label="UsbDeviceSelectAlternateInterface"/>
+  <int value="1527" label="UsbDeviceControlTransferIn"/>
+  <int value="1528" label="UsbDeviceControlTransferOut"/>
+  <int value="1529" label="UsbDeviceClearHalt"/>
+  <int value="1530" label="UsbDeviceTransferIn"/>
+  <int value="1531" label="UsbDeviceTransferOut"/>
+  <int value="1532" label="UsbDeviceIsochronousTransferIn"/>
+  <int value="1533" label="UsbDeviceIsochronousTransferOut"/>
+  <int value="1534" label="UsbDeviceReset"/>
+  <int value="1535" label="PointerEnterLeaveFired"/>
+  <int value="1536" label="PointerOverOutFired"/>
+  <int value="1537" label="PointerEnterLeaveFiredWhileCaptured"/>
+  <int value="1538" label="PointerOverOutFiredWhileCaptured"/>
+  <int value="1539" label="DraggableAttribute"/>
+  <int value="1540" label="CleanScriptElementWithNonce"/>
+  <int value="1541" label="PotentiallyInjectedScriptElementWithNonce"/>
+  <int value="1542" label="PendingStylesheetAddedAfterBodyStarted"/>
+  <int value="1543" label="UntrustedMouseDownEventDispatchedToSelect"/>
+  <int value="1544" label="BlockedSniffingAudioToScript"/>
+  <int value="1545" label="BlockedSniffingVideoToScript"/>
+  <int value="1546" label="BlockedSniffingCSVToScript"/>
+  <int value="1547" label="MetaSetCookie"/>
+  <int value="1548" label="MetaRefresh"/>
+  <int value="1549" label="MetaSetCookieWhenCSPBlocksInlineScript"/>
+  <int value="1550" label="MetaRefreshWhenCSPBlocksInlineScript"/>
+  <int value="1551" label="MiddleClickAutoscrollStart"/>
+  <int value="1552" label="ClipCssOfFixedPositionElement"/>
+  <int value="1553" label="RTCPeerConnectionCreateOfferOptionsOfferToReceive"/>
+  <int value="1554" label="DragAndDropScrollStart"/>
+  <int value="1555"
+      label="PresentationConnectionListConnectionAvailableEventListener"/>
+  <int value="1556" label="WebAudioAutoplayCrossOriginIframe"/>
+  <int value="1557" label="ScriptInvalidTypeOrLanguage"/>
+  <int value="1558" label="VRGetDisplays"/>
+  <int value="1559" label="VRPresent"/>
+  <int value="1560" label="VRDeprecatedGetPose"/>
+  <int value="1561" label="WebAudioAnalyserNode"/>
+  <int value="1562" label="WebAudioAudioBuffer"/>
+  <int value="1563" label="WebAudioAudioBufferSourceNode"/>
+  <int value="1564" label="WebAudioBiquadFilterNode"/>
+  <int value="1565" label="WebAudioChannelMergerNode"/>
+  <int value="1566" label="WebAudioChannelSplitterNode"/>
+  <int value="1567" label="WebAudioConvolverNode"/>
+  <int value="1568" label="WebAudioDelayNode"/>
+  <int value="1569" label="WebAudioDynamicsCompressorNode"/>
+  <int value="1570" label="WebAudioGainNode"/>
+  <int value="1571" label="WebAudioIIRFilterNode"/>
+  <int value="1572" label="WebAudioMediaElementAudioSourceNode"/>
+  <int value="1573" label="WebAudioOscillatorNode"/>
+  <int value="1574" label="WebAudioPannerNode"/>
+  <int value="1575" label="WebAudioPeriodicWave"/>
+  <int value="1576" label="WebAudioStereoPannerNode"/>
+  <int value="1577" label="WebAudioWaveShaperNode"/>
+  <int value="1578" label="CSSZoomReset"/>
+  <int value="1579" label="CSSZoomDocument"/>
+  <int value="1580" label="PaymentAddressCareOf"/>
+  <int value="1581" label="XSSAuditorBlockedScript"/>
+  <int value="1582" label="XSSAuditorBlockedEntirePage"/>
+  <int value="1583" label="XSSAuditorDisabled"/>
+  <int value="1584" label="XSSAuditorEnabledFilter"/>
+  <int value="1585" label="XSSAuditorEnabledBlock"/>
+  <int value="1586" label="XSSAuditorInvalid"/>
+  <int value="1587" label="SVGCursorElement"/>
+  <int value="1588" label="SVGCursorElementHasClient"/>
+  <int value="1589" label="TextInputEventOnInput"/>
+  <int value="1590" label="TextInputEventOnTextArea"/>
+  <int value="1591" label="TextInputEventOnContentEditable"/>
+  <int value="1592" label="TextInputEventOnNotNode"/>
+  <int value="1593" label="WebkitBeforeTextInsertedOnInput"/>
+  <int value="1594" label="WebkitBeforeTextInsertedOnTextArea"/>
+  <int value="1595" label="WebkitBeforeTextInsertedOnContentEditable"/>
+  <int value="1596" label="WebkitBeforeTextInsertedOnNotNode"/>
+  <int value="1597" label="WebkitEditableContentChangedOnInput"/>
+  <int value="1598" label="WebkitEditableContentChangedOnTextArea"/>
+  <int value="1599" label="WebkitEditableContentChangedOnContentEditable"/>
+  <int value="1600" label="WebkitEditableContentChangedOnNotNode"/>
+  <int value="1601"
+      label="V8NavigatorUserMediaError_ConstraintName_AttributeGetter"/>
+  <int value="1602" label="V8HTMLMediaElement_SrcObject_AttributeGetter"/>
+  <int value="1603" label="V8HTMLMediaElement_SrcObject_AttributeSetter"/>
+  <int value="1604" label="CreateObjectURLBlob"/>
+  <int value="1605" label="CreateObjectURLMediaSource"/>
+  <int value="1606" label="CreateObjectURLMediaStream"/>
+  <int value="1607" label="DocumentCreateTouchWindowNull"/>
+  <int value="1608" label="DocumentCreateTouchWindowWrongType"/>
+  <int value="1609" label="DocumentCreateTouchTargetNull"/>
+  <int value="1610" label="DocumentCreateTouchTargetWrongType"/>
+  <int value="1611" label="DocumentCreateTouchLessThanSevenArguments"/>
+  <int value="1612" label="DocumentCreateTouchMoreThanSevenArguments"/>
+  <int value="1613" label="EncryptedMediaCapabilityProvided"/>
+  <int value="1614" label="EncryptedMediaCapabilityNotProvided"/>
+  <int value="1615" label="LongTaskObserver"/>
+  <int value="1616" label="CSSMotionInEffect"/>
+  <int value="1617" label="CSSOffsetInEffect"/>
+  <int value="1618" label="VRGetDisplaysInsecureOrigin"/>
+  <int value="1619" label="VRRequestPresent"/>
+  <int value="1620" label="VRRequestPresentInsecureOrigin"/>
+  <int value="1621" label="VRDeprecatedFieldOfView"/>
+  <int value="1622" label="VideoInCanvas"/>
+  <int value="1623" label="HiddenAutoplayedVideoInCanvas"/>
+  <int value="1624" label="OffscreenCanvas"/>
+  <int value="1625" label="GamepadPose"/>
+  <int value="1626" label="GamepadHand"/>
+  <int value="1627" label="GamepadDisplayId"/>
+  <int value="1628" label="GamepadButtonTouched"/>
+  <int value="1629" label="GamepadPoseHasOrientation"/>
+  <int value="1630" label="GamepadPoseHasPosition"/>
+  <int value="1631" label="GamepadPosePosition"/>
+  <int value="1632" label="GamepadPoseLinearVelocity"/>
+  <int value="1633" label="GamepadPoseLinearAcceleration"/>
+  <int value="1634" label="GamepadPoseOrientation"/>
+  <int value="1635" label="GamepadPoseAngularVelocity"/>
+  <int value="1636" label="GamepadPoseAngularAcceleration"/>
+  <int value="1637" label="DeprecatedBluetoothDeviceUUIDsAttribute"/>
+  <int value="1638" label="V8RTCDataChannel_MaxRetransmitTime_AttributeGetter"/>
+  <int value="1639" label="V8RTCDataChannel_MaxRetransmits_AttributeGetter"/>
+  <int value="1640" label="V8RTCDataChannel_Reliable_AttributeGetter"/>
+  <int value="1641" label="V8RTCPeerConnection_AddStream_Method"/>
+  <int value="1642" label="V8RTCPeerConnection_CreateDTMFSender_Method"/>
+  <int value="1643" label="V8RTCPeerConnection_GetLocalStreams_Method"/>
+  <int value="1644" label="V8RTCPeerConnection_GetRemoteStreams_Method"/>
+  <int value="1645" label="V8RTCPeerConnection_GetStreamById_Method"/>
+  <int value="1646" label="V8RTCPeerConnection_RemoveStream_Method"/>
+  <int value="1647" label="V8RTCPeerConnection_UpdateIce_Method"/>
+  <int value="1648"
+      label="RTCPeerConnectionCreateDataChannelMaxRetransmitTime"/>
+  <int value="1649" label="RTCPeerConnectionCreateDataChannelMaxRetransmits"/>
+  <int value="1650" label="AudioContextCreateConstantSource"/>
+  <int value="1651" label="WebAudioConstantSourceNode"/>
+  <int value="1652" label="LoopbackEmbeddedInSecureContext"/>
+  <int value="1653" label="LoopbackEmbeddedInNonSecureContext"/>
+  <int value="1654" label="BlinkMacSystemFont"/>
+  <int value="1655" label="RTCConfigurationIceTransportsNone"/>
+  <int value="1656" label="RTCIceServerURL"/>
+  <int value="1657" label="RTCIceServerURLs"/>
+  <int value="1658" label="OffscreenCanvasTransferToImageBitmap2D"/>
+  <int value="1659" label="OffscreenCanvasTransferToImageBitmapWebGL"/>
+  <int value="1660" label="OffscreenCanvasCommit2D"/>
+  <int value="1661" label="OffscreenCanvasCommitWebGL"/>
+  <int value="1662" label="RTCConfigurationIceTransportPolicy"/>
+  <int value="1663" label="RTCConfigurationIceTransportPolicyNone"/>
+  <int value="1664" label="RTCConfigurationIceTransports"/>
+  <int value="1665" label="DocumentFullscreenElementInV0Shadow"/>
+  <int value="1666" label="ScriptWithCSPBypassingSchemeParserInserted"/>
+  <int value="1667" label="ScriptWithCSPBypassingSchemeNotParserInserted"/>
+  <int value="1668" label="DocumentCreateElement2ndArgStringHandling"/>
+  <int value="1669" label="V8MediaRecorder_Start_Method"/>
+  <int value="1670" label="WebBluetoothRequestDevice"/>
+  <int value="1671" label="UnitlessPerspectiveInPerspectiveProperty"/>
+  <int value="1672" label="UnitlessPerspectiveInTransformProperty"/>
+  <int value="1673" label="V8RTCSessionDescription_Type_AttributeGetter"/>
+  <int value="1674" label="V8RTCSessionDescription_Type_AttributeSetter"/>
+  <int value="1675" label="V8RTCSessionDescription_Sdp_AttributeGetter"/>
+  <int value="1676" label="V8RTCSessionDescription_Sdp_AttributeSetter"/>
+  <int value="1677" label="RTCSessionDescriptionInitNoType"/>
+  <int value="1678" label="RTCSessionDescriptionInitNoSdp"/>
+  <int value="1679" label="HTMLMediaElementPreloadForcedMetadata"/>
+  <int value="1680" label="GenericSensorStart"/>
+  <int value="1681" label="GenericSensorStop"/>
+  <int value="1682" label="TouchEventPreventedNoTouchAction"/>
+  <int value="1683"
+      label="TouchEventPreventedForcedDocumentPassiveNoTouchAction"/>
+  <int value="1684" label="V8Event_StopPropagation_Method"/>
+  <int value="1685" label="V8Event_StopImmediatePropagation_Method"/>
+  <int value="1686" label="ImageCaptureConstructor"/>
+  <int value="1687" label="V8Document_RootScroller_AttributeGetter"/>
+  <int value="1688" label="V8Document_RootScroller_AttributeSetter"/>
+  <int value="1689" label="CustomElementRegistryDefine"/>
+  <int value="1690" label="LinkHeaderServiceWorker"/>
+  <int value="1691" label="CSSShadowPiercingDescendantCombinator"/>
+</enum>
+
+<enum name="FetchRequestMode" type="int">
+  <int value="0" label="SameOrigin"/>
+  <int value="1" label="NoCORS"/>
+  <int value="2" label="CORS"/>
+  <int value="3" label="CORSWithForcedPreflight"/>
+  <int value="4" label="Navigate"/>
+</enum>
+
+<enum name="FFmpegCodecHashes" type="int">
+  <int value="-2140893972" label="bfi"/>
+  <int value="-2126016986" label="vp3"/>
+  <int value="-2112225664" label="pcm_s32be"/>
+  <int value="-2100141199" label="loco"/>
+  <int value="-2095396703" label="v408"/>
+  <int value="-2093680186" label="amv"/>
+  <int value="-2089660750" label="h263"/>
+  <int value="-2087604036" label="adpcm_ima_smjpeg"/>
+  <int value="-2077566827" label="musepack8"/>
+  <int value="-2057234831" label="8svx_exp"/>
+  <int value="-2039593792" label="targa"/>
+  <int value="-2026984418" label="dirac"/>
+  <int value="-2024394607" label="adpcm_ima_ws"/>
+  <int value="-2022450851" label="sunrast"/>
+  <int value="-2013419814" label="dsd_lsbf_planar"/>
+  <int value="-2002502337" label="tiff"/>
+  <int value="-1978772551" label="dvaudio"/>
+  <int value="-1956356936" label="wmavoice"/>
+  <int value="-1936051434" label="h261"/>
+  <int value="-1935659465" label="text"/>
+  <int value="-1929182263" label="rl2"/>
+  <int value="-1920776714" label="a64_multi5"/>
+  <int value="-1920272933" label="mlp"/>
+  <int value="-1913457333" label="smackvideo"/>
+  <int value="-1910182388" label="dds"/>
+  <int value="-1877492821" label="ws_vqa"/>
+  <int value="-1868061100" label="avrp"/>
+  <int value="-1866047250" label="brender_pix_deprecated"/>
+  <int value="-1861192281" label="c93"/>
+  <int value="-1859416370" label="mts2"/>
+  <int value="-1855199147" label="adpcm_yamaha"/>
+  <int value="-1854941320" label="tgq"/>
+  <int value="-1848915146" label="adpcm_ima_iss"/>
+  <int value="-1847740489" label="flac"/>
+  <int value="-1847405305" label="qdmc"/>
+  <int value="-1837462345" label="bmv_video"/>
+  <int value="-1787878546" label="adpcm_afc"/>
+  <int value="-1782518388" label="adpcm_vima_deprecated"/>
+  <int value="-1769822834" label="vmdaudio"/>
+  <int value="-1754427880" label="frwu"/>
+  <int value="-1746405263" label="none"/>
+  <int value="-1746190470" label="adpcm_ima_amv"/>
+  <int value="-1742178896" label="cinepak"/>
+  <int value="-1722959117" label="cook"/>
+  <int value="-1694324852" label="adpcm_ima_rad"/>
+  <int value="-1653946850" label="mp3on4"/>
+  <int value="-1638592334" label="msmpeg4v3"/>
+  <int value="-1625425962" label="dpx"/>
+  <int value="-1620040130" label="vp6"/>
+  <int value="-1596796424" label="pcm_f32le"/>
+  <int value="-1580836816" label="cdxl"/>
+  <int value="-1578877775" label="twinvq"/>
+  <int value="-1570048110" label="mace3"/>
+  <int value="-1558356361" label="paf_audio"/>
+  <int value="-1546633359" label="dss_sp"/>
+  <int value="-1538621442" label="tak"/>
+  <int value="-1535770868" label="mov_text"/>
+  <int value="-1532420090" label="dvb_teletext"/>
+  <int value="-1518326441" label="cpia"/>
+  <int value="-1516599706" label="stl"/>
+  <int value="-1510953689" label="ulti"/>
+  <int value="-1495077719" label="wavesynth"/>
+  <int value="-1493473944" label="mp1"/>
+  <int value="-1488471023" label="aac_latm"/>
+  <int value="-1471896197" label="adpcm_4xm"/>
+  <int value="-1458812472" label="vble"/>
+  <int value="-1452408746" label="bin_data"/>
+  <int value="-1437754593" label="tqi"/>
+  <int value="-1398094744" label="brender_pix"/>
+  <int value="-1396201900" label="lagarith"/>
+  <int value="-1394735166" label="s302m"/>
+  <int value="-1366158780" label="mvc2"/>
+  <int value="-1346295474" label="dfa"/>
+  <int value="-1335819014" label="adpcm_ea_r3"/>
+  <int value="-1333697928" label="rv10"/>
+  <int value="-1328796639" label="pcm_s32le_planar_deprecated"/>
+  <int value="-1326344691" label="wmalossless"/>
+  <int value="-1276285619" label="subviewer1"/>
+  <int value="-1267322736" label="evrc"/>
+  <int value="-1253653962" label="cljr"/>
+  <int value="-1249151864" label="westwood_snd1"/>
+  <int value="-1234201101" label="xan_dpcm"/>
+  <int value="-1228141376" label="aic"/>
+  <int value="-1217250068" label="pcm_u24le"/>
+  <int value="-1216801956" label="kmvc"/>
+  <int value="-1216327014" label="ansi"/>
+  <int value="-1212214965" label="svq3"/>
+  <int value="-1205406239" label="mpeg4"/>
+  <int value="-1192008277" label="flashsv"/>
+  <int value="-1181422407" label="gif"/>
+  <int value="-1156009526" label="wmv1"/>
+  <int value="-1153001952" label="eia_608"/>
+  <int value="-1150003992" label="nellymoser"/>
+  <int value="-1147304270" label="pgm"/>
+  <int value="-1146321910" label="adpcm_sbpro_4"/>
+  <int value="-1124358604" label="qdraw"/>
+  <int value="-1094512964" label="hevc"/>
+  <int value="-1082894560" label="y41p"/>
+  <int value="-1069291012" label="roq"/>
+  <int value="-1055791926" label="wmv2"/>
+  <int value="-1052495685" label="adpcm_ea_xas"/>
+  <int value="-1050536726" label="fic"/>
+  <int value="-1050267191" label="theora"/>
+  <int value="-1047975380" label="aura"/>
+  <int value="-1038298513" label="iac"/>
+  <int value="-1033247386" label="pcm_u24be"/>
+  <int value="-1030131048" label="ra_288"/>
+  <int value="-1011667768" label="sgirle"/>
+  <int value="-1010059925" label="cdgraphics"/>
+  <int value="-993429906" label="webp_deprecated"/>
+  <int value="-991743010" label="pictor"/>
+  <int value="-986254855" label="qtrle"/>
+  <int value="-984524901" label="wmapro"/>
+  <int value="-982785322" label="roq_dpcm"/>
+  <int value="-967736249" label="idf"/>
+  <int value="-963536204" label="tmv"/>
+  <int value="-961342190" label="truespeech"/>
+  <int value="-955936385" label="qdm2"/>
+  <int value="-937993216" label="cyuv"/>
+  <int value="-908137771" label="mss2"/>
+  <int value="-898663359" label="paf_video"/>
+  <int value="-891450332" label="qcelp"/>
+  <int value="-881893142" label="paf_video_deprecated"/>
+  <int value="-878761755" label="alac"/>
+  <int value="-872951009" label="vp7"/>
+  <int value="-870965910" label="mszh"/>
+  <int value="-868148645" label="ttf"/>
+  <int value="-853586131" label="eac3"/>
+  <int value="-839127813" label="adpcm_adx"/>
+  <int value="-820705472" label="timed_id3"/>
+  <int value="-816209197" label="vima"/>
+  <int value="-815578090" label="ssa"/>
+  <int value="-804708185" label="vb"/>
+  <int value="-799004205" label="thp"/>
+  <int value="-792737437" label="mjpeg"/>
+  <int value="-781332453" label="xbm"/>
+  <int value="-780629337" label="adpcm_ima_oki"/>
+  <int value="-777478450" label="iff_byterun1"/>
+  <int value="-776406198" label="hdmv_pgs_subtitle"/>
+  <int value="-773314651" label="adpcm_thp_le"/>
+  <int value="-755809410" label="xface"/>
+  <int value="-750906124" label="sonic"/>
+  <int value="-746782512" label="nuv"/>
+  <int value="-728484627" label="vp6f"/>
+  <int value="-711076000" label="ilbc"/>
+  <int value="-693682032" label="png"/>
+  <int value="-665301881" label="kgv1"/>
+  <int value="-651841063" label="musepack7"/>
+  <int value="-644671397" label="pcm_s16le"/>
+  <int value="-644168765" label="dvvideo"/>
+  <int value="-630356729" label="paf_audio_deprecated"/>
+  <int value="-624149477" label="mad"/>
+  <int value="-606142900" label="microdvd"/>
+  <int value="-605150423" label="jacosub"/>
+  <int value="-600721750" label="pcm_s16le_planar"/>
+  <int value="-597857853" label="fraps"/>
+  <int value="-594775425" label="tdsc"/>
+  <int value="-583421433" label="pcm_zork"/>
+  <int value="-573567800" label="ffvhuff"/>
+  <int value="-558754697" label="dxtory"/>
+  <int value="-547412719" label="a64_multi"/>
+  <int value="-530757209" label="iff_ilbm"/>
+  <int value="-522844891" label="tta"/>
+  <int value="-515467965" label="yop"/>
+  <int value="-483644003" label="mvc1"/>
+  <int value="-478544739" label="mxpeg"/>
+  <int value="-469833042" label="sgi"/>
+  <int value="-462654404" label="pbm"/>
+  <int value="-450113811" label="vp8"/>
+  <int value="-449164482" label="smv"/>
+  <int value="-434097103" label="8svx_fib"/>
+  <int value="-431043877" label="rv30"/>
+  <int value="-418117523" label="exr_deprecated"/>
+  <int value="-414733739" label="hevc_deprecated"/>
+  <int value="-411871512" label="4xm"/>
+  <int value="-351638235" label="mace6"/>
+  <int value="-335532805" label="v308"/>
+  <int value="-321063470" label="cavs"/>
+  <int value="-312812574" label="dsicinaudio"/>
+  <int value="-305868762" label="ptx"/>
+  <int value="-302658824" label="dxa"/>
+  <int value="-302292845" label="atrac1"/>
+  <int value="-268375107" label="indeo2"/>
+  <int value="-262604522" label="qpeg"/>
+  <int value="-259187129" label="interplay_dpcm"/>
+  <int value="-235472313" label="pjs"/>
+  <int value="-197551526" label="vp7_deprecated"/>
+  <int value="-195649673" label="mmvideo"/>
+  <int value="-194494447" label="sanm"/>
+  <int value="-179123055" label="hnm4video"/>
+  <int value="-166593824" label="bintext"/>
+  <int value="-153142813" label="adpcm_ima_qt"/>
+  <int value="-135875472" label="pcm_s24le_planar"/>
+  <int value="-108909529" label="adpcm_ea"/>
+  <int value="-96441857" label="escape124"/>
+  <int value="-92926716" label="indeo3"/>
+  <int value="-92742166" label="adpcm_swf"/>
+  <int value="-85419673" label="dvb_subtitle"/>
+  <int value="-83742388" label="metasound"/>
+  <int value="-81607027" label="speex"/>
+  <int value="-65839877" label="amr_nb"/>
+  <int value="-50131597" label="avui"/>
+  <int value="-41854216" label="msrle"/>
+  <int value="-35300163" label="pam"/>
+  <int value="-30500564" label="rv20"/>
+  <int value="-27780731" label="h263i"/>
+  <int value="-23682808" label="mjpegb"/>
+  <int value="-21755362" label="adpcm_sbpro_3"/>
+  <int value="-19624220" label="msmpeg4v1"/>
+  <int value="123753" label="bethsoftvid"/>
+  <int value="5678717" label="adpcm_vima"/>
+  <int value="6153938" label="ffv1"/>
+  <int value="60024993" label="sol_dpcm"/>
+  <int value="73149662" label="escape130_deprecated"/>
+  <int value="76029796" label="mss1"/>
+  <int value="86453097" label="utvideo"/>
+  <int value="87186225" label="vmdvideo"/>
+  <int value="95607943" label="alias_pix"/>
+  <int value="98199414" label="wmv3image"/>
+  <int value="113741725" label="shorten"/>
+  <int value="132664538" label="gsm_ms"/>
+  <int value="136569655" label="adpcm_ima_ea_eacs"/>
+  <int value="146059120" label="adpcm_ima_dk3"/>
+  <int value="173919536" label="dsd_msbf_planar"/>
+  <int value="174382442" label="g729"/>
+  <int value="180797897" label="xsub"/>
+  <int value="197903705" label="yuv4"/>
+  <int value="197942357" label="mdec"/>
+  <int value="212901544" label="pcm_f64le"/>
+  <int value="227190580" label="adpcm_ea_r1"/>
+  <int value="231296785" label="jpegls"/>
+  <int value="242042871" label="vc1image"/>
+  <int value="250226160" label="pcm_s8"/>
+  <int value="254320798" label="pcm_dvd"/>
+  <int value="265862349" label="binkaudio_rdft"/>
+  <int value="278236230" label="webp"/>
+  <int value="284053917" label="sp5x"/>
+  <int value="287849834" label="msvideo1"/>
+  <int value="294769071" label="pcm_s16be_planar"/>
+  <int value="309105352" label="bmp"/>
+  <int value="309392554" label="dsd_msbf"/>
+  <int value="311400023" label="zlib"/>
+  <int value="317095520" label="adpcm_ima_apc"/>
+  <int value="342736256" label="avrn"/>
+  <int value="343186566" label="rpza"/>
+  <int value="347789448" label="vplayer"/>
+  <int value="396111544" label="otf"/>
+  <int value="412600562" label="pcm_u16be"/>
+  <int value="429618670" label="jv"/>
+  <int value="441761537" label="indeo4"/>
+  <int value="445373194" label="tiertexseqvideo"/>
+  <int value="453915988" label="adpcm_ima_ea_sead"/>
+  <int value="461173543" label="smackaudio"/>
+  <int value="463008496" label="dvd_subtitle"/>
+  <int value="465125740" label="realtext"/>
+  <int value="486681814" label="8bps"/>
+  <int value="489448448" label="vc1"/>
+  <int value="491790310" label="vcr1"/>
+  <int value="500576677" label="hap"/>
+  <int value="503945275" label="motionpixels"/>
+  <int value="525499602" label="vmnc"/>
+  <int value="552661632" label="adpcm_xa"/>
+  <int value="558339021" label="jpeg2000"/>
+  <int value="563328753" label="4gv"/>
+  <int value="565711017" label="pcm_s24le"/>
+  <int value="567624278" label="asv2"/>
+  <int value="573633387" label="pcm_f64be"/>
+  <int value="579930439" label="cmv"/>
+  <int value="580364763" label="txd"/>
+  <int value="588676310" label="pcm_s8_planar"/>
+  <int value="603287142" label="mpl2"/>
+  <int value="610300309" label="v210x"/>
+  <int value="634747673" label="avs"/>
+  <int value="640012049" label="adpcm_ms"/>
+  <int value="648238710" label="xan_wc3"/>
+  <int value="695230495" label="aura2"/>
+  <int value="722738593" label="escape130"/>
+  <int value="724570383" label="rawvideo"/>
+  <int value="726397522" label="wmv3"/>
+  <int value="746742638" label="truehd"/>
+  <int value="747771882" label="dts"/>
+  <int value="753949422" label="indeo5"/>
+  <int value="781916095" label="ayuv"/>
+  <int value="789960893" label="bmv_audio"/>
+  <int value="802192292" label="adpcm_ima_dk4"/>
+  <int value="814609554" label="ralf"/>
+  <int value="816220395" label="apng"/>
+  <int value="820788836" label="subviewer"/>
+  <int value="855521935" label="smvjpeg"/>
+  <int value="856849194" label="tgv"/>
+  <int value="865955000" label="smc"/>
+  <int value="903853106" label="012v"/>
+  <int value="913577987" label="wmav2"/>
+  <int value="944040689" label="ppm"/>
+  <int value="944980366" label="idcin"/>
+  <int value="946455966" label="aasc"/>
+  <int value="948849813" label="adpcm_ima_wav"/>
+  <int value="949116467" label="binkvideo"/>
+  <int value="949591507" label="vp9"/>
+  <int value="972771007" label="mpeg2video"/>
+  <int value="973601133" label="hq_hqa"/>
+  <int value="981942659" label="opus"/>
+  <int value="997031855" label="truemotion2"/>
+  <int value="997190932" label="atrac3p"/>
+  <int value="997732996" label="xwd"/>
+  <int value="1001166722" label="xan_wc4"/>
+  <int value="1008492983" label="msmpeg4v2"/>
+  <int value="1020187009" label="rv40"/>
+  <int value="1022607787" label="ape"/>
+  <int value="1033850553" label="snow"/>
+  <int value="1034034342" label="sipr"/>
+  <int value="1041617024" label="tak_deprecated"/>
+  <int value="1049882649" label="binkaudio_dct"/>
+  <int value="1053922807" label="g723_1"/>
+  <int value="1066477861" label="vorbis"/>
+  <int value="1077386855" label="cscd"/>
+  <int value="1098721511" label="g2m"/>
+  <int value="1127772984" label="imc"/>
+  <int value="1138712147" label="ac3"/>
+  <int value="1139877352" label="dnxhd"/>
+  <int value="1158772651" label="anm"/>
+  <int value="1165132763" label="opus_deprecated"/>
+  <int value="1194572884" label="g2m_deprecated"/>
+  <int value="1210249397" label="avc"/>
+  <int value="1213003867" label="hdmv_text_subtitle"/>
+  <int value="1236695157" label="pcm_s32le_planar"/>
+  <int value="1244283551" label="mpeg1video"/>
+  <int value="1246598929" label="flic"/>
+  <int value="1251286213" label="dxv"/>
+  <int value="1258259575" label="pcm_lxf"/>
+  <int value="1271374381" label="wmav1"/>
+  <int value="1294385179" label="mp3"/>
+  <int value="1299068647" label="truemotion1"/>
+  <int value="1310993795" label="zerocodec"/>
+  <int value="1311566537" label="flv1"/>
+  <int value="1312943731" label="zmbv"/>
+  <int value="1313131096" label="h264"/>
+  <int value="1318324895" label="pcm_bluray"/>
+  <int value="1333708519" label="pcm_u8"/>
+  <int value="1366148173" label="adpcm_g726le"/>
+  <int value="1375054610" label="aac"/>
+  <int value="1395029615" label="adpcm_ea_maxis_xa"/>
+  <int value="1397947482" label="dsd_lsbf"/>
+  <int value="1411832541" label="pcm_f32be"/>
+  <int value="1413182900" label="dvd_nav_packet"/>
+  <int value="1462568683" label="srt"/>
+  <int value="1467359000" label="msa1"/>
+  <int value="1468951708" label="comfortnoise"/>
+  <int value="1469210692" label="mp2"/>
+  <int value="1483758205" label="celt"/>
+  <int value="1502256638" label="vp5"/>
+  <int value="1525492969" label="asv1"/>
+  <int value="1526182480" label="klv"/>
+  <int value="1535518292" label="pcm_s24le_planar_deprecated"/>
+  <int value="1536086449" label="pcx"/>
+  <int value="1550758811" label="mpegvideo_xvmc"/>
+  <int value="1565855078" label="adpcm_ea_r2"/>
+  <int value="1567457517" label="adpcm_g722"/>
+  <int value="1571821879" label="dsicinvideo"/>
+  <int value="1578202877" label="h263p"/>
+  <int value="1603330014" label="r10k"/>
+  <int value="1622843532" label="adpcm_sbpro_2"/>
+  <int value="1626738193" label="mp3adu"/>
+  <int value="1636940385" label="targa_y216"/>
+  <int value="1647791075" label="adpcm_g726"/>
+  <int value="1651871844" label="svq1"/>
+  <int value="1656834662" label="voxware"/>
+  <int value="1671488988" label="adpcm_ct"/>
+  <int value="1681362983" label="webvtt"/>
+  <int value="1681507854" label="exr"/>
+  <int value="1704161151" label="pcm_u32be"/>
+  <int value="1724507916" label="ra_144"/>
+  <int value="1729587546" label="pgmyuv"/>
+  <int value="1730373804" label="pcm_alaw"/>
+  <int value="1741236466" label="subrip"/>
+  <int value="1771307928" label="flashsv2"/>
+  <int value="1789213623" label="wavpack"/>
+  <int value="1804125128" label="pcm_s24be"/>
+  <int value="1813293157" label="hqx"/>
+  <int value="1818519290" label="sonicls"/>
+  <int value="1822179743" label="pcm_s24daud"/>
+  <int value="1823608208" label="pcm_mulaw"/>
+  <int value="1827051583" label="adpcm_thp"/>
+  <int value="1834381325" label="adpcm_dtk"/>
+  <int value="1854844146" label="tscc"/>
+  <int value="1890319788" label="mp4als"/>
+  <int value="1896040704" label="cllc"/>
+  <int value="1913299765" label="vixl"/>
+  <int value="1947892273" label="prores"/>
+  <int value="1951984033" label="v210"/>
+  <int value="1961440145" label="vp6a"/>
+  <int value="1965599083" label="sami"/>
+  <int value="1981484138" label="pcm_u32le"/>
+  <int value="1997862473" label="interplayvideo"/>
+  <int value="2002251246" label="tscc2"/>
+  <int value="2005720882" label="atrac3"/>
+  <int value="2026594607" label="ass"/>
+  <int value="2032395845" label="pcm_u16le"/>
+  <int value="2041774878" label="huffyuv"/>
+  <int value="2047102762" label="sanm_deprecated"/>
+  <int value="2053719989" label="r210"/>
+  <int value="2071582326" label="xbin"/>
+  <int value="2080704511" label="pcm_s16be"/>
+  <int value="2084073402" label="ljpeg"/>
+  <int value="2086226415" label="pcm_s32le"/>
+  <int value="2086394367" label="gsm"/>
+  <int value="2100540076" label="amr_wb"/>
+  <int value="2118960502" label="mimic"/>
+  <int value="2128505640" label="wnv1"/>
+  <int value="2146164868" label="v410"/>
+</enum>
+
+<enum name="FFmpegCodecs" type="int">
+  <obsolete>
+    deprecated Sep 15 2015 in favor of FFmpegCodecHashes
+  </obsolete>
+  <int value="0" label="NONE"/>
+  <int value="1" label="MPEG1VIDEO"/>
+  <int value="2" label="MPEG2VIDEO"/>
+  <int value="3" label="MPEG2VIDEO_XVMC"/>
+  <int value="4" label="H261"/>
+  <int value="5" label="H263"/>
+  <int value="6" label="RV10"/>
+  <int value="7" label="RV20"/>
+  <int value="8" label="MJPEG"/>
+  <int value="9" label="MJPEGB"/>
+  <int value="10" label="LJPEG"/>
+  <int value="11" label="SP5X"/>
+  <int value="12" label="JPEGLS"/>
+  <int value="13" label="MPEG4"/>
+  <int value="14" label="RAWVIDEO"/>
+  <int value="15" label="MSMPEG4V1"/>
+  <int value="16" label="MSMPEG4V2"/>
+  <int value="17" label="MSMPEG4V3"/>
+  <int value="18" label="WMV1"/>
+  <int value="19" label="WMV2"/>
+  <int value="20" label="H263P"/>
+  <int value="21" label="H263I"/>
+  <int value="22" label="FLV1"/>
+  <int value="23" label="SVQ1"/>
+  <int value="24" label="SVQ3"/>
+  <int value="25" label="DVVIDEO"/>
+  <int value="26" label="HUFFYUV"/>
+  <int value="27" label="CYUV"/>
+  <int value="28" label="H264"/>
+  <int value="29" label="INDEO3"/>
+  <int value="30" label="VP3"/>
+  <int value="31" label="THEORA"/>
+  <int value="32" label="ASV1"/>
+  <int value="33" label="ASV2"/>
+  <int value="34" label="FFV1"/>
+  <int value="35" label="4XM"/>
+  <int value="36" label="VCR1"/>
+  <int value="37" label="CLJR"/>
+  <int value="38" label="MDEC"/>
+  <int value="39" label="ROQ"/>
+  <int value="40" label="INTERPLAY_VIDEO"/>
+  <int value="41" label="XAN_WC3"/>
+  <int value="42" label="XAN_WC4"/>
+  <int value="43" label="RPZA"/>
+  <int value="44" label="CINEPAK"/>
+  <int value="45" label="WS_VQA"/>
+  <int value="46" label="MSRLE"/>
+  <int value="47" label="MSVIDEO1"/>
+  <int value="48" label="IDCIN"/>
+  <int value="49" label="8BPS"/>
+  <int value="50" label="SMC"/>
+  <int value="51" label="FLIC"/>
+  <int value="52" label="TRUEMOTION1"/>
+  <int value="53" label="VMDVIDEO"/>
+  <int value="54" label="MSZH"/>
+  <int value="55" label="ZLIB"/>
+  <int value="56" label="QTRLE"/>
+  <int value="57" label="SNOW"/>
+  <int value="58" label="TSCC"/>
+  <int value="59" label="ULTI"/>
+  <int value="60" label="QDRAW"/>
+  <int value="61" label="VIXL"/>
+  <int value="62" label="QPEG"/>
+  <int value="63" label="PNG"/>
+  <int value="64" label="PPM"/>
+  <int value="65" label="PBM"/>
+  <int value="66" label="PGM"/>
+  <int value="67" label="PGMYUV"/>
+  <int value="68" label="PAM"/>
+  <int value="69" label="FFVHUFF"/>
+  <int value="70" label="RV30"/>
+  <int value="71" label="RV40"/>
+  <int value="72" label="VC1"/>
+  <int value="73" label="WMV3"/>
+  <int value="74" label="LOCO"/>
+  <int value="75" label="WNV1"/>
+  <int value="76" label="AASC"/>
+  <int value="77" label="INDEO2"/>
+  <int value="78" label="FRAPS"/>
+  <int value="79" label="TRUEMOTION2"/>
+  <int value="80" label="BMP"/>
+  <int value="81" label="CSCD"/>
+  <int value="82" label="MMVIDEO"/>
+  <int value="83" label="ZMBV"/>
+  <int value="84" label="AVS"/>
+  <int value="85" label="SMACKVIDEO"/>
+  <int value="86" label="NUV"/>
+  <int value="87" label="KMVC"/>
+  <int value="88" label="FLASHSV"/>
+  <int value="89" label="CAVS"/>
+  <int value="90" label="JPEG2000"/>
+  <int value="91" label="VMNC"/>
+  <int value="92" label="VP5"/>
+  <int value="93" label="VP6"/>
+  <int value="94" label="VP6F"/>
+  <int value="95" label="TARGA"/>
+  <int value="96" label="DSICINVIDEO"/>
+  <int value="97" label="TIERTEXSEQVIDEO"/>
+  <int value="98" label="TIFF"/>
+  <int value="99" label="GIF"/>
+  <int value="100" label="DXA"/>
+  <int value="101" label="DNXHD"/>
+  <int value="102" label="THP"/>
+  <int value="103" label="SGI"/>
+  <int value="104" label="C93"/>
+  <int value="105" label="BETHSOFTVID"/>
+  <int value="106" label="PTX"/>
+  <int value="107" label="TXD"/>
+  <int value="108" label="VP6A"/>
+  <int value="109" label="AMV"/>
+  <int value="110" label="VB"/>
+  <int value="111" label="PCX"/>
+  <int value="112" label="SUNRAST"/>
+  <int value="113" label="INDEO4"/>
+  <int value="114" label="INDEO5"/>
+  <int value="115" label="MIMIC"/>
+  <int value="116" label="RL2"/>
+  <int value="117" label="ESCAPE124"/>
+  <int value="118" label="DIRAC"/>
+  <int value="119" label="BFI"/>
+  <int value="120" label="CMV"/>
+  <int value="121" label="MOTIONPIXELS"/>
+  <int value="122" label="TGV"/>
+  <int value="123" label="TGQ"/>
+  <int value="124" label="TQI"/>
+  <int value="125" label="AURA"/>
+  <int value="126" label="AURA2"/>
+  <int value="127" label="V210X"/>
+  <int value="128" label="TMV"/>
+  <int value="129" label="V210"/>
+  <int value="130" label="DPX"/>
+  <int value="131" label="MAD"/>
+  <int value="132" label="FRWU"/>
+  <int value="133" label="FLASHSV2"/>
+  <int value="134" label="CDGRAPHICS"/>
+  <int value="135" label="R210"/>
+  <int value="136" label="ANM"/>
+  <int value="137" label="BINKVIDEO"/>
+  <int value="138" label="IFF_ILBM"/>
+  <int value="139" label="IFF_BYTERUN1"/>
+  <int value="140" label="KGV1"/>
+  <int value="141" label="YOP"/>
+  <int value="142" label="VP8"/>
+  <int value="143" label="PICTOR"/>
+  <int value="144" label="ANSI"/>
+  <int value="145" label="A64_MULTI"/>
+  <int value="146" label="A64_MULTI5"/>
+  <int value="147" label="R10K"/>
+  <int value="148" label="MXPEG"/>
+  <int value="149" label="LAGARITH"/>
+  <int value="150" label="PRORES"/>
+  <int value="151" label="JV"/>
+  <int value="152" label="DFA"/>
+  <int value="153" label="WMV3IMAGE"/>
+  <int value="154" label="VC1IMAGE"/>
+  <int value="155" label="UTVIDEO"/>
+  <int value="156" label="BMV_VIDEO"/>
+  <int value="157" label="VBLE"/>
+  <int value="158" label="DXTORY"/>
+  <int value="159" label="V410"/>
+  <int value="160" label="XWD"/>
+  <int value="161" label="CDXL"/>
+  <int value="162" label="XBM"/>
+  <int value="163" label="ZEROCODEC"/>
+  <int value="164" label="MSS1"/>
+  <int value="165" label="MSA1"/>
+  <int value="166" label="TSCC2"/>
+  <int value="167" label="MTS2"/>
+  <int value="168" label="CLLC"/>
+  <int value="169" label="MSS2"/>
+  <int value="170" label="VP9"/>
+  <int value="65536" label="PCM_S16LE"/>
+  <int value="65537" label="PCM_S16BE"/>
+  <int value="65538" label="PCM_U16LE"/>
+  <int value="65539" label="PCM_U16BE"/>
+  <int value="65540" label="PCM_S8"/>
+  <int value="65541" label="PCM_U8"/>
+  <int value="65542" label="PCM_MULAW"/>
+  <int value="65543" label="PCM_ALAW"/>
+  <int value="65544" label="PCM_S32LE"/>
+  <int value="65545" label="PCM_S32BE"/>
+  <int value="65546" label="PCM_U32LE"/>
+  <int value="65547" label="PCM_U32BE"/>
+  <int value="65548" label="PCM_S24LE"/>
+  <int value="65549" label="PCM_S24BE"/>
+  <int value="65550" label="PCM_U24LE"/>
+  <int value="65551" label="PCM_U24BE"/>
+  <int value="65552" label="PCM_S24DAUD"/>
+  <int value="65553" label="PCM_ZORK"/>
+  <int value="65554" label="PCM_S16LE_PLANAR"/>
+  <int value="65555" label="PCM_DVD"/>
+  <int value="65556" label="PCM_F32BE"/>
+  <int value="65557" label="PCM_F32LE"/>
+  <int value="65558" label="PCM_F64BE"/>
+  <int value="65559" label="PCM_F64LE"/>
+  <int value="65560" label="PCM_BLURAY"/>
+  <int value="65561" label="PCM_LXF"/>
+  <int value="65562" label="S302M"/>
+  <int value="65563" label="PCM_S8_PLANAR"/>
+  <int value="69632" label="ADPCM_IMA_QT"/>
+  <int value="69633" label="ADPCM_IMA_WAV"/>
+  <int value="69634" label="ADPCM_IMA_DK3"/>
+  <int value="69635" label="ADPCM_IMA_DK4"/>
+  <int value="69636" label="ADPCM_IMA_WS"/>
+  <int value="69637" label="ADPCM_IMA_SMJPEG"/>
+  <int value="69638" label="ADPCM_MS"/>
+  <int value="69639" label="ADPCM_4XM"/>
+  <int value="69640" label="ADPCM_XA"/>
+  <int value="69641" label="ADPCM_ADX"/>
+  <int value="69642" label="ADPCM_EA"/>
+  <int value="69643" label="ADPCM_G726"/>
+  <int value="69644" label="ADPCM_CT"/>
+  <int value="69645" label="ADPCM_SWF"/>
+  <int value="69646" label="ADPCM_YAMAHA"/>
+  <int value="69647" label="ADPCM_SBPRO_4"/>
+  <int value="69648" label="ADPCM_SBPRO_3"/>
+  <int value="69649" label="ADPCM_SBPRO_2"/>
+  <int value="69650" label="ADPCM_THP"/>
+  <int value="69651" label="ADPCM_IMA_AMV"/>
+  <int value="69652" label="ADPCM_EA_R1"/>
+  <int value="69653" label="ADPCM_EA_R3"/>
+  <int value="69654" label="ADPCM_EA_R2"/>
+  <int value="69655" label="ADPCM_IMA_EA_SEAD"/>
+  <int value="69656" label="ADPCM_IMA_EA_EACS"/>
+  <int value="69657" label="ADPCM_EA_XAS"/>
+  <int value="69658" label="ADPCM_EA_MAXIS_XA"/>
+  <int value="69659" label="ADPCM_IMA_ISS"/>
+  <int value="69660" label="ADPCM_G722"/>
+  <int value="69661" label="ADPCM_IMA_APC"/>
+  <int value="73728" label="AMR_NB"/>
+  <int value="73729" label="AMR_WB"/>
+  <int value="77824" label="RA_144"/>
+  <int value="77825" label="RA_288"/>
+  <int value="81920" label="ROQ_DPCM"/>
+  <int value="81921" label="INTERPLAY_DPCM"/>
+  <int value="81922" label="XAN_DPCM"/>
+  <int value="81923" label="SOL_DPCM"/>
+  <int value="86016" label="MP2"/>
+  <int value="86017" label="MP3"/>
+  <int value="86018" label="AAC"/>
+  <int value="86019" label="AC3"/>
+  <int value="86020" label="DTS"/>
+  <int value="86021" label="VORBIS"/>
+  <int value="86022" label="DVAUDIO"/>
+  <int value="86023" label="WMAV1"/>
+  <int value="86024" label="WMAV2"/>
+  <int value="86025" label="MACE3"/>
+  <int value="86026" label="MACE6"/>
+  <int value="86027" label="VMDAUDIO"/>
+  <int value="86028" label="FLAC"/>
+  <int value="86029" label="MP3ADU"/>
+  <int value="86030" label="MP3ON4"/>
+  <int value="86031" label="SHORTEN"/>
+  <int value="86032" label="ALAC"/>
+  <int value="86033" label="WESTWOOD_SND1"/>
+  <int value="86034" label="GSM"/>
+  <int value="86035" label="QDM2"/>
+  <int value="86036" label="COOK"/>
+  <int value="86037" label="TRUESPEECH"/>
+  <int value="86038" label="TTA"/>
+  <int value="86039" label="SMACKAUDIO"/>
+  <int value="86040" label="QCELP"/>
+  <int value="86041" label="WAVPACK"/>
+  <int value="86042" label="DSICINAUDIO"/>
+  <int value="86043" label="IMC"/>
+  <int value="86044" label="MUSEPACK7"/>
+  <int value="86045" label="MLP"/>
+  <int value="86046" label="GSM_MS"/>
+  <int value="86047" label="ATRAC3"/>
+  <int value="86048" label="VOXWARE"/>
+  <int value="86049" label="APE"/>
+  <int value="86050" label="NELLYMOSER"/>
+  <int value="86051" label="MUSEPACK8"/>
+  <int value="86052" label="SPEEX"/>
+  <int value="86053" label="WMAVOICE"/>
+  <int value="86054" label="WMAPRO"/>
+  <int value="86055" label="WMALOSSLESS"/>
+  <int value="86056" label="ATRAC3P"/>
+  <int value="86057" label="EAC3"/>
+  <int value="86058" label="SIPR"/>
+  <int value="86059" label="MP1"/>
+  <int value="86060" label="TWINVQ"/>
+  <int value="86061" label="TRUEHD"/>
+  <int value="86062" label="MP4ALS"/>
+  <int value="86063" label="ATRAC1"/>
+  <int value="86064" label="BINKAUDIO_RDFT"/>
+  <int value="86065" label="BINKAUDIO_DCT"/>
+  <int value="86066" label="AAC_LATM"/>
+  <int value="86067" label="QDMC"/>
+  <int value="86068" label="CELT"/>
+  <int value="86069" label="G723_1"/>
+  <int value="86070" label="G729"/>
+  <int value="86071" label="8SVX_EXP"/>
+  <int value="86072" label="8SVX_FIB"/>
+  <int value="86073" label="BMV_AUDIO"/>
+  <int value="86074" label="RALF"/>
+  <int value="86075" label="IAC"/>
+  <int value="86076" label="ILBC"/>
+  <int value="86077" label="OPUS_DEPRECATED"/>
+  <int value="86078" label="COMFORT_NOISE"/>
+  <int value="86079" label="TAK_DEPRECATED"/>
+  <int value="94208" label="DVD_SUBTITLE"/>
+  <int value="94209" label="DVB_SUBTITLE"/>
+  <int value="94210" label="TEXT"/>
+  <int value="94211" label="XSUB"/>
+  <int value="94212" label="SSA"/>
+  <int value="94213" label="MOV_TEXT"/>
+  <int value="94214" label="HDMV_PGS_SUBTITLE"/>
+  <int value="94215" label="DVB_TELETEXT"/>
+  <int value="94216" label="SRT"/>
+  <int value="98304" label="TTF"/>
+  <int value="102400" label="PROBE"/>
+  <int value="131072" label="MPEG2TS"/>
+  <int value="131073" label="MPEG4SYSTEMS"/>
+  <int value="135168" label="FFMETADATA"/>
+  <int value="4665933" label="G2M"/>
+  <int value="4801606" label="IDF"/>
+  <int value="5198918" label="OTF"/>
+  <int value="407917392" label="PCM_S24LE_PLANAR"/>
+  <int value="542135120" label="PCM_S32LE_PLANAR"/>
+  <int value="808530518" label="012V"/>
+  <int value="809850962" label="EXR"/>
+  <int value="944985688" label="8SVX_RAW"/>
+  <int value="1095123744" label="ADPCM_AFC"/>
+  <int value="1096176208" label="AVRP"/>
+  <int value="1096176238" label="AVRN"/>
+  <int value="1096176969" label="AVUI"/>
+  <int value="1096373590" label="AYUV"/>
+  <int value="1112557912" label="BRENDER_PIX"/>
+  <int value="1112823892" label="BINTEXT"/>
+  <int value="1129335105" label="CPIA"/>
+  <int value="1160852272" label="ESCAPE130"/>
+  <int value="1179014995" label="FFWAVESYNTH"/>
+  <int value="1211250229" label="HEVC"/>
+  <int value="1246975298" label="JACOSUB"/>
+  <int value="1263294017" label="SMPTE_KLV"/>
+  <int value="1297108018" label="MPL2"/>
+  <int value="1297498929" label="MVC1"/>
+  <int value="1297498930" label="MVC2"/>
+  <int value="1330333984" label="ADPCM_IMA_OKI"/>
+  <int value="1330664787" label="OPUS"/>
+  <int value="1346455105" label="PAF_AUDIO"/>
+  <int value="1346455126" label="PAF_VIDEO"/>
+  <int value="1347637264" label="PCM_S16BE_PLANAR"/>
+  <int value="1349012051" label="PJS"/>
+  <int value="1381259348" label="REALTEXT"/>
+  <int value="1396788553" label="SAMI"/>
+  <int value="1396788813" label="SANM"/>
+  <int value="1397180754" label="SGIRLE"/>
+  <int value="1397706307" label="SONIC"/>
+  <int value="1397706316" label="SONIC_LS"/>
+  <int value="1397909872" label="SUBRIP"/>
+  <int value="1398953521" label="SUBVIEWER1"/>
+  <int value="1400201814" label="SUBVIEWER"/>
+  <int value="1412575542" label="TARGA_Y216"/>
+  <int value="1446195256" label="V308"/>
+  <int value="1446260792" label="V408"/>
+  <int value="1447644481" label="VIMA"/>
+  <int value="1448111218" label="VPLAYER"/>
+  <int value="1465275476" label="WEBVTT"/>
+  <int value="1480739150" label="XBIN"/>
+  <int value="1480999235" label="XFACE"/>
+  <int value="1496592720" label="Y41P"/>
+  <int value="1498764852" label="YUV4"/>
+  <int value="1664495672" label="EIA_608"/>
+  <int value="1833195076" label="MICRODVD"/>
+  <int value="1936029283" label="EVRC"/>
+  <int value="1936944502" label="SMV"/>
+  <int value="1950507339" label="TAK"/>
+</enum>
+
+<enum name="FFmpegColorRanges" type="int">
+  <int value="0" label="UNSPECIFIED"/>
+  <int value="1" label="MPEG"/>
+  <int value="2" label="JPEG"/>
+</enum>
+
+<enum name="FileDialogType" type="int">
+  <int value="0" label="Select folder"/>
+  <int value="1" label="Upload folder"/>
+  <int value="2" label="Save as file"/>
+  <int value="3" label="Open file"/>
+  <int value="4" label="Open multiple files"/>
+  <int value="5" label="Full page"/>
+  <int value="6" label="Error"/>
+</enum>
+
+<enum name="FileManagerVolumeType" type="int">
+  <int value="0" label="Google Drive"/>
+  <int value="1" label="Download Folder"/>
+  <int value="2" label="Removable Disk"/>
+  <int value="3" label="Archive File"/>
+  <int value="4" label="FileSystemProvider API"/>
+  <int value="5" label="MTP (Media Transfer Protocol) Device"/>
+</enum>
+
+<enum name="FileMetricsProviderAccessResult" type="int">
+  <int value="0" label="File was mapped."/>
+  <int value="1" label="File doesn't exist."/>
+  <int value="2" label="File not modified."/>
+  <int value="3" label="File is invalid (e.g. directory or zero-size)."/>
+  <int value="4" label="File could not be memory-mapped by system."/>
+  <int value="5" label="File has invalid contents."/>
+  <int value="6" label="File could not be exclusively opened."/>
+</enum>
+
+<enum name="FileSystemDatabaseInitResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Corruption"/>
+  <int value="2" label="IO Error"/>
+  <int value="3" label="Unknown Error"/>
+</enum>
+
+<enum name="FileSystemErrors" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Incognito"/>
+  <int value="2" label="Invalid Schema"/>
+  <int value="3" label="Create Directory Error"/>
+  <int value="4" label="Not Found"/>
+  <int value="5" label="Unknown Error"/>
+</enum>
+
+<enum name="FileType" type="int">
+  <int value="0" label="other"/>
+  <int value="1" label=".doc"/>
+  <int value="2" label=".docx"/>
+  <int value="3" label=".odt"/>
+  <int value="4" label=".rtf"/>
+  <int value="5" label=".pdf"/>
+  <int value="6" label=".ppt"/>
+  <int value="7" label=".pptx"/>
+  <int value="8" label=".odp"/>
+  <int value="9" label=".xls"/>
+  <int value="10" label=".xlsx"/>
+  <int value="11" label=".ods"/>
+  <int value="12" label=".csv"/>
+  <int value="13" label=".odf"/>
+  <int value="14" label=".rar"/>
+  <int value="15" label=".asf"/>
+  <int value="16" label=".wma"/>
+  <int value="17" label=".wmv"/>
+  <int value="18" label=".mov"/>
+  <int value="19" label=".mpg"/>
+  <int value="20" label=".log"/>
+</enum>
+
+<enum name="FirstMeaningfulPaintSignalStatus" type="int">
+  <int value="0" label="No input, network active"/>
+  <int value="1" label="Had input, network active"/>
+  <int value="2" label="No input, network stable"/>
+  <int value="3" label="Had input, network stable"/>
+</enum>
+
+<enum name="FirstMeaningfulPaintStatus" type="int">
+  <int value="0" label="Recorded successfully"/>
+  <int value="1" label="The page was backgrounded"/>
+  <int value="2" label="User left the page before network stable"/>
+  <int value="3" label="Not recorded because of user interaction"/>
+  <int value="4" label="User left the page before first contentful paint"/>
+</enum>
+
+<enum name="FlashNavigateUsageType" type="int">
+  <int value="0" label="Rejected because of Authorization header."/>
+  <int value="1" label="Rejected because of Cache-Control header."/>
+  <int value="2" label="Rejected because of Content-Encoding header."/>
+  <int value="3" label="Rejected because of Content-MD5 header."/>
+  <int value="4" label="Rejected because of Content-Type header."/>
+  <int value="5" label="Rejected because of Expires header."/>
+  <int value="6" label="Rejected because of From header."/>
+  <int value="7" label="Rejected because of If-Match header."/>
+  <int value="8" label="Rejected because of If-None-Match header."/>
+  <int value="9" label="Rejected because of If-Range header."/>
+  <int value="10" label="Rejected because of If-Unmodified-Since header."/>
+  <int value="11" label="Rejected because of Pragma header."/>
+  <int value="12" label="Rejected because of Referer header."/>
+  <int value="13"
+      label="Rejected because of other headers (e.g., custom headers)."/>
+  <int value="14" label="The total number of rejected navigate requests."/>
+  <int value="15" label="The total number of navigate requests."/>
+</enum>
+
+<enum name="FlashTinyContentSize" type="int">
+  <int value="0" label="1x1 or smaller"/>
+  <int value="1" label="5x5 or smaller"/>
+  <int value="2" label="10x10 or smaller"/>
+  <int value="3" label="Large"/>
+</enum>
+
+<enum name="FlashUsage" type="int">
+  <int value="0" label="Started NPAPI Flash at least once">
+    Number of browser processes that have started at least one NPAPI Flash
+    process during their lifetime.
+  </int>
+  <int value="1" label="Started PPAPI Flash at least once">
+    Number of browser processes that have started at least one PPAPI Flash
+    process during their lifetime.
+  </int>
+  <int value="2" label="Started browser process">
+    Total number of browser processes.
+  </int>
+</enum>
+
+<enum name="FontDisplayValue" type="int">
+  <int value="0" label="auto"/>
+  <int value="1" label="block"/>
+  <int value="2" label="swap"/>
+  <int value="3" label="fallback"/>
+  <int value="4" label="optional"/>
+</enum>
+
+<enum name="FormDataDeserializationStatus" type="int">
+  <int value="0" label="Login database success"/>
+  <int value="1" label="Login database failure"/>
+  <int value="2" label="Libsecret success"/>
+  <int value="3" label="Libsecret failure"/>
+  <int value="4" label="GNOME success"/>
+  <int value="5" label="GNOME failure"/>
+</enum>
+
+<enum name="FramebustPermissions" type="int">
+  <int value="0" label="Only permitted for framebusting, no user gesture"/>
+  <int value="1" label="Only permitted for framebusting, user gesture"/>
+  <int value="2" label="Allowed navigation, no user gesture"/>
+  <int value="3" label="Allowed navigation, user gesture"/>
+</enum>
+
+<enum name="FtpDataConnectionError" type="int">
+  <int value="0">Data connection successful</int>
+  <int value="1">Local firewall blocked the connection</int>
+  <int value="2">Connection timed out</int>
+  <int value="3">
+    Connection has been established, but then got broken (either reset or
+    aborted)
+  </int>
+  <int value="4">Connection has been refused</int>
+  <int value="20">Other kind of error</int>
+</enum>
+
+<enum name="FtpServerType" type="int">
+  <obsolete>
+    Deprecated 2012-11-13. No longer generated.
+  </obsolete>
+  <summary>
+    Old FTP server type as previously defined in
+    net/ftp/ftp_server_type_histograms.h
+  </summary>
+  <int value="0" label="Unknown">
+    Unknown (could be a server we don't support, a broken server, or a security
+    attack)
+  </int>
+  <int value="1" label="/bin/ls">Server using /bin/ls -l and variants</int>
+  <int value="2" label="/bin/dls">Server using /bin/dls</int>
+  <int value="3" label="EPLF">Server using EPLF format</int>
+  <int value="4" label="WinNT">
+    WinNT server configured for old style listing
+  </int>
+  <int value="5" label="VMS">VMS (including variants)</int>
+  <int value="6" label="IBM VM">IBM VM/CMS, VM/ESA, z/VM formats</int>
+  <int value="7" label="OS/2">OS/2 FTP Server</int>
+  <int value="8" label="win16">
+    win16 hosts: SuperTCP or NetManage Chameleon
+  </int>
+</enum>
+
+<enum name="FtpServerType2" type="int">
+  <summary>
+    FTP server type as defined in net/ftp/ftp_server_type_histograms.h
+  </summary>
+  <int value="0" label="Unknown"/>
+  <int value="1" label="/bin/ls"/>
+  <int value="2" label="Windows"/>
+  <int value="3" label="VMS"/>
+  <int value="4" label="Netware">
+    Obsolete, no longer detected or supported.
+  </int>
+  <int value="5" label="OS/2">Obsolete, no longer detected or supported.</int>
+</enum>
+
+<enum name="GaiaSessionRestoreOutcome" type="int">
+  <int value="0" label="Undefined"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="OAuth2 tokens cannot be fetched"/>
+  <int value="3" label="No local OAuth2 refresh token found"/>
+  <int value="4" label="OAuthLogin call failed"/>
+  <int value="5" label="MergeSession call failed"/>
+  <int value="6" label="ListAccounts call failed"/>
+  <int value="7" label="No restore needed, fresh cookies found"/>
+  <int value="8" label="Overflow"/>
+</enum>
+
+<enum name="Gamma" type="int">
+  <int value="0" label="GammaLinear"/>
+  <int value="1" label="GammaSRGB"/>
+  <int value="2" label="Gamma2Dot2"/>
+  <int value="3" label="GammaNonStandard"/>
+  <int value="4" label="GammaNull"/>
+  <int value="5" label="GammaFail"/>
+  <int value="6" label="GammaInvalid"/>
+  <int value="7" label="GammaExponent"/>
+  <int value="8" label="GammaTable"/>
+  <int value="9" label="GammaParametric"/>
+  <int value="10" label="GammaNamed"/>
+</enum>
+
+<enum name="GarbageCollectionReason" type="int">
+  <int value="0" label="kUnknown"/>
+  <int value="1" label="kAllocationFailure"/>
+  <int value="2" label="kAllocationLimit"/>
+  <int value="3" label="kContextDisposal"/>
+  <int value="4" label="kCountersExtension"/>
+  <int value="5" label="kDebugger"/>
+  <int value="6" label="kDeserializer"/>
+  <int value="7" label="kExternalMemoryPressure"/>
+  <int value="8" label="kFinalizeMarkingViaStackGuard"/>
+  <int value="9" label="kFinalizeMarkingViaTask"/>
+  <int value="10" label="kFullHashtable"/>
+  <int value="11" label="kHeapProfiler"/>
+  <int value="12" label="kIdleTask"/>
+  <int value="13" label="kLastResort"/>
+  <int value="14" label="kLowMemoryNotification"/>
+  <int value="15" label="kMakeHeapIterable"/>
+  <int value="16" label="kMemoryPressure"/>
+  <int value="17" label="kMemoryReducer"/>
+  <int value="18" label="kRuntime"/>
+  <int value="19" label="kSamplingProfiler"/>
+  <int value="20" label="kSnapshotCreator"/>
+  <int value="21" label="kTesting"/>
+</enum>
+
+<enum name="GATTCharacteristicHash" type="int">
+<!-- Hash values can be produced using tool: bluetooth_metrics_hash (Only built via GN, not GYP) -->
+
+  <int value="1615384" label="alert_notification_control_point"/>
+  <int value="4531384" label="date_of_birth"/>
+  <int value="22829753" label="barometric_pressure_trend"/>
+  <int value="33030714" label="scan_refresh"/>
+  <int value="36624371"
+      label="Anki OVERDRIVE cars; be15bee0-6186-407e-8381-0bd89c4d8df4"/>
+  <int value="40437408" label="gender"/>
+  <int value="64893984" label="local_east_coordinate.xml"/>
+  <int value="67768539" label="alert_category_id_bit_mask"/>
+  <int value="79560451" label="sc_control_point"/>
+  <int value="84948752"
+      label="Eddystone Config ADV Slot Data;
+             a3c8750a-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="87432554"
+      label="Parrot Drone; 9a66fd54-0800-9191-11e4-012d1540cb8e"/>
+  <int value="89070880" label="blood_pressure_measurement"/>
+  <int value="102699400" label="cycling_power_feature"/>
+  <int value="107355463"
+      label="konashi analogRead2; 229b300a-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="111826224"
+      label="micro:bit client requirements;
+             e95d23c4-251d-470a-a062-fa1922dfa9a8"/>
+  <int value="121100653"
+      label="Parrot Drone; 9a66fd22-0800-9191-11e4-012d1540cb8e"/>
+  <int value="145478270" label="glucose_feature"/>
+  <int value="162705488" label="manufacturer_name_string"/>
+  <int value="164418508" label="weight_measurement"/>
+  <int value="177223896" label="report_map"/>
+  <int value="193202136"
+      label="Anki OVERDRIVE cars; be15bee1-6186-407e-8381-0bd89c4d8df4"/>
+  <int value="203698195"
+      label="micro:bit event; e95d9775-251d-470a-a062-fa1922dfa9a8"/>
+  <int value="203846063" label="ff0c"/>
+  <int value="205016416" label="body_composition_measurement"/>
+  <int value="235785246" label="irradiance"/>
+  <int value="248349383" label="csc_measurement"/>
+  <int value="254703207" label="true_wind_speed"/>
+  <int value="257107525" label="intermediate_temperature"/>
+  <int value="259169368" label="cgm_measurement"/>
+  <int value="261747886" label="battery_level"/>
+  <int value="282925453" label="time_with_dst"/>
+  <int value="289588334" label="supported_unread_alert_category"/>
+  <int value="294481931"
+      label="Wahoo Kickr trainer; a026e005-0a7d-4ab3-97fa-f1500f9feb8b"/>
+  <int value="296670902" label="heart_rate_control_point"/>
+  <int value="298186521" label="alert_category_id"/>
+  <int value="307449363" label="plx_features"/>
+  <int value="310983691" label="cycling_power_measurement"/>
+  <int value="312578485" label="navigation"/>
+  <int value="314022771"
+      label="Remote Lego; 8d8ba32b-96be-4590-910b-c756c5222c9f"/>
+  <int value="318124766"
+      label="Remote Lego; fa10e4de-259e-4d23-9f59-45a9c66802ca"/>
+  <int value="333947401" label="temperature_measurement"/>
+  <int value="338768495" label="ringer_setting"/>
+  <int value="339742946" label="hid_information"/>
+  <int value="358854697" label="bond_management_feature"/>
+  <int value="359765018"
+      label="micro:bit client event; e95d5404-251d-470a-a062-fa1922dfa9a8"/>
+  <int value="361317539" label="language"/>
+  <int value="363167947" label="blood_pressure_feature"/>
+  <int value="364021976"
+      label="nRF candy machine; b6c31338-6c07-453e-961a-d8a8a41bf368"/>
+  <int value="368068304"
+      label="MiP Robot; Magic Blue Bulb; 0000ffe9-0000-1000-8000-00805f9b34fb"/>
+  <int value="371778276"
+      label="micro:bit requirements; e95db84c-251d-470a-a062-fa1922dfa9a8"/>
+  <int value="372306057"
+      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333330001"/>
+  <int value="404638811"
+      label="konashi pwmParameter; 229b3005-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="405569435" label="boot_keyboard_output_report"/>
+  <int value="409618715" label="cycling_power_vector"/>
+  <int value="416059854"
+      label="konashi uartRxNotification; 229b3013-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="419477741" label="body_composition_feature"/>
+  <int value="440009071"
+      label="konashi pwmDuty; 229b3006-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="469191968" label="Playbulb Candle Color; fffc"/>
+  <int value="473092981"
+      label="Eddystone Config Advertising Interval;
+             a3c87503-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="486368335" label="location_name"/>
+  <int value="508191605"
+      label="Parrot Drone; 9a66fb1b-0800-9191-11e4-012d1540cb8e"/>
+  <int value="511033835"
+      label="konashi hardwareLowBatteryNotification;
+             229b3015-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="512543326" label="date_of_threshold_assessment"/>
+  <int value="517791580"
+      label="Sphero Robot; 22bb746f-2bbf-7554-2d6f-726568705327"/>
+  <int value="531135021" label="cgm_specific_ops_control_point"/>
+  <int value="540054581" label="magnetic_declination"/>
+  <int value="546162499"
+      label="Eddystone Config EID Identity Key;
+             a3c87509-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="546355367" label="firmware_revision_string"/>
+  <int value="549702960" label="humidity"/>
+  <int value="557034058" label="cycling_power_control_point"/>
+  <int value="557040382" label="hardware_revision_string"/>
+  <int value="561260257" label="analog"/>
+  <int value="580555542"
+      label="Remote Lego; 2ac1fdb2-d971-4595-8e32-e8c5d80edf5f"/>
+  <int value="589575132"
+      label="Sphero Robot; 22bb746f-2bbd-7554-2d6f-726568705327"/>
+  <int value="589741087" label="model_number_string"/>
+  <int value="625191771"
+      label="Parrot Drone; 9a66fa0a-0800-9191-11e4-012d1540cb8e"/>
+  <int value="638602429" label="new_alert"/>
+  <int value="640013977"
+      label="konashi uartBaudRate; 229b3011-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="642925692" label="anaerobic_heart_rate_lower_limit"/>
+  <int value="650507215" label="aerobic_heart_rate_lower_limit"/>
+  <int value="653904148" label="cgm_session_run_time"/>
+  <int value="675543714" label="aerobic_threshold"/>
+  <int value="682327952"
+      label="Parrot Drone; 9a66fa0b-0800-9191-11e4-012d1540cb8e"/>
+  <int value="685669143"
+      label="Parrot Drone; 9a66fa0c-0800-9191-11e4-012d1540cb8e"/>
+  <int value="689682673" label="unread_alert_status"/>
+  <int value="710863194" label="dew_point"/>
+  <int value="713208266" label="apparent_wind_direction"/>
+  <int value="724796397" label="weight"/>
+  <int value="735462059"
+      label="konashi uartConfig; 229b3010-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="747671909" label="reference_time_information"/>
+  <int value="747737913"
+      label="konashi pioOutput; 229b3002-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="752820597" label="boot_mouse_input_report"/>
+  <int value="762835818" label="tx_power_level"/>
+  <int value="765862810" label="cgm_session_start_time"/>
+  <int value="777276843"
+      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333330003"/>
+  <int value="786588903"
+      label="Parrot Drone; 9a66fd53-0800-9191-11e4-012d1540cb8e"/>
+  <int value="788890283"
+      label="Eddystone Config Factory reset;
+             a3c8750b-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="797118889" label="time_source"/>
+  <int value="839366223" label="user_index"/>
+  <int value="842908520" label="rsc_measurement"/>
+  <int value="845003775"
+      label="Remote Lego; aad03b81-f2ea-47db-ae1e-7c2f9e86e93e"/>
+  <int value="845212855"
+      label="Elite trainer; 347b0011-7635-408b-8918-8ff3949ce592"/>
+  <int value="851655329"
+      label="konashi analogRead0; 229b3008-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="859809200" label="resting_heart_rate"/>
+  <int value="867296114" label="gust_factor"/>
+  <int value="868427891" label="local_north_coordinate"/>
+  <int value="868892960" label="heat_index"/>
+  <int value="873660243" label="body_sensor_location"/>
+  <int value="893588698" label="scan_interval_window"/>
+  <int value="893850387"
+      label="Parrot Drone; 9a66fd23-0800-9191-11e4-012d1540cb8e"/>
+  <int value="910416910"
+      label="nRF UART RX; nrf52-Quadcopter;
+             6e400003-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="917477908" label="software_revision_string"/>
+  <int value="918961501" label="plx_spot_check_measurement"/>
+  <int value="922434244" label="ln_feature"/>
+  <int value="928099812" label="system_id"/>
+  <int value="928491064" label="last_name"/>
+  <int value="941113050"
+      label="konashi i2cReadParameter; 229b300e-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="947971228" label="temperature_type"/>
+  <int value="951656105"
+      label="Eddystone Config Remain Connectable;
+             a3c8750c-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="962656991"
+      label="Eddystone Config Public ECDH Key;
+             a3c87508-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="976761505" label="local_time_information"/>
+  <int value="987658962" label="glucose_measurement"/>
+  <int value="1002619180" label="exact_time_256"/>
+  <int value="1025676359" label="dst_offset"/>
+  <int value="1050948662"
+      label="nRF UART TX; nrf52-Quadcopter;
+             6e400002-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="1061486494" label="anaerobic_heart_rate_upper_limit"/>
+  <int value="1070539317"
+      label="konashi pioSetting; 229b3000-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1072163984" label="gap.reconnection_address"/>
+  <int value="1077684177"
+      label="Parrot Drone; 9a66fd52-0800-9191-11e4-012d1540cb8e"/>
+  <int value="1100640868" label="day_of_week"/>
+  <int value="1115558005"
+      label="konashi hardwareReset; 229b3014-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1117053056"
+      label="Remote Lego; 7baf8dca-2bfc-47fb-af29-042fccc180eb"/>
+  <int value="1125104414" label="gap.central_address_resolution_support"/>
+  <int value="1134538374" label="hip_circumference"/>
+  <int value="1136624215" label="maximum_recommended_heart_rate"/>
+  <int value="1136682523" label="date_time"/>
+  <int value="1154699367"
+      label="konashi uartTx; 229b3012-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1161713439" label="Playbulb Candle Effect; fffb"/>
+  <int value="1167525145" label="alert_status"/>
+  <int value="1183399370" label="magnetic_flux_density_3D"/>
+  <int value="1186677690"
+      label="Eddystone Config Advertised Tx Power;
+             a3c87505-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="1193066711" label="uv_index"/>
+  <int value="1214133688" label="vo2_max"/>
+  <int value="1217613737" label="three_zone_heart_rate_limits"/>
+  <int value="1225369773"
+      label="DOTTI; Makeblock mBot; 0000fff3-0000-1000-8000-00805f9b34fb"/>
+  <int value="1227844535" label="floor_number"/>
+  <int value="1237083013" label="first_name"/>
+  <int value="1243630465"
+      label="Sphero Robot; 22bb746f-2ba1-7554-2d6f-726568705327"/>
+  <int value="1245615057" label="pnp_id"/>
+  <int value="1254532025" label="user_control_point"/>
+  <int value="1288236137" label="hid_control_point"/>
+  <int value="1307935876"
+      label="Tacx trainer; 6e40fec3-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="1320278204"
+      label="Eddystone Config Radio Tx Power;
+             a3c87504-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="1329901812"
+      label="Eddystone Config Lock State;
+             a3c87506-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="1333242790" label="longitude"/>
+  <int value="1334750659"
+      label="konashi i2cWrite; 229b300d-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1358488787"
+      label="sport_type_for_aerobic_and_anaerobic_thresholds"/>
+  <int value="1359562687"
+      label="PowerUp RC plane; 75b64e51-f184-4ed1-921a-476090d80ba7"/>
+  <int value="1370497910" label="position_quality"/>
+  <int value="1370779343" label="apparent_wind_speed"/>
+  <int value="1399905251" label="elevation"/>
+  <int value="1403230035"
+      label="konashi analogDrive; 229b3007-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1403795440" label="time_update_control_point"/>
+  <int value="1407679683" label="location_and_speed"/>
+  <int value="1409077916"
+      label="ieee_11073-20601_regulatory_certification_data_list"/>
+  <int value="1418868404"
+      label="gap.peripheral_preferred_connection_parameters"/>
+  <int value="1419696114" label="record_access_control_point"/>
+  <int value="1426243900" label="time_update_state"/>
+  <int value="1443769073"
+      label="Parrot Drone; 9a66fb0e-0800-9191-11e4-012d1540cb8e"/>
+  <int value="1445812935" label="current_time"/>
+  <int value="1448457670" label="cgm_feature"/>
+  <int value="1479031407" label="five_zone_heart_rate_limits"/>
+  <int value="1480262218" label="height"/>
+  <int value="1482584061"
+      label="konashi pioPullUp; 229b3001-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1501299347"
+      label="nRF candy machine; a6c31338-6c07-453e-961a-d8a8a41bf368"/>
+  <int value="1502604093" label="serial_number_string"/>
+  <int value="1511396316" label="ln_control_point"/>
+  <int value="1511953014"
+      label="Eddystone Config Capabilities;
+             a3c87501-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="1521362289" label="indoor_positioning_configuration"/>
+  <int value="1536163565"
+      label="Remote Lego; e0af3340-022e-47e1-a263-d68887dc41d4"/>
+  <int value="1537284424"
+      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333330002"/>
+  <int value="1541435682" label="fat_burn_heart_rate_upper_limit"/>
+  <int value="1542101224" label="plx_continuous_measurent"/>
+  <int value="1547112406"
+      label="Eddystone Config Active Slot;
+             a3c87502-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="1548291582"
+      label="konashi analogRead1; 229b3009-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1556918420" label="supported_new_alert_category"/>
+  <int value="1562359952" label="bond_management_control_point"/>
+  <int value="1581120657"
+      label="Parrot Drone; 9a66fb1c-0800-9191-11e4-012d1540cb8e"/>
+  <int value="1594190447" label="anaerobic_threshold"/>
+  <int value="1594284383" label="time_accuracy"/>
+  <int value="1599786113" label="sensor_location"/>
+  <int value="1650767660" label="protocol_mode"/>
+  <int value="1655824245" label="pressure"/>
+  <int value="1658559118" label="digital"/>
+  <int value="1669829174"
+      label="Purple Eye; 00005200-0000-1000-8000-00805f9b34fb"/>
+  <int value="1676607014"
+      label="konashi i2cConfig; 229b300b-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1704141710" label="true_wind_direction"/>
+  <int value="1732815395" label="alert_level"/>
+  <int value="1735563923" label="rsc_feature"/>
+  <int value="1748731133" label="intermediate_blood_pressure"/>
+  <int value="1774994865" label="day_date_time"/>
+  <int value="1777827929" label="heart_rate_measurement"/>
+  <int value="1778752264" label="magnetic_flux_density_2D"/>
+  <int value="1794935269"
+      label="Sphero Robot; 22bb746f-2bb2-7554-2d6f-726568705327"/>
+  <int value="1807818076" label="rainfall"/>
+  <int value="1811011331" label="report"/>
+  <int value="1813165113" label="fat_burn_heart_rate_lower_limit"/>
+  <int value="1814120610"
+      label="Elgato Avea Bulb; f815e811-456c-6761-746f-4d756e696368"/>
+  <int value="1822663159" label="altitude"/>
+  <int value="1826219951" label="measurement_interval"/>
+  <int value="1834634616"
+      label="konashi i2cStartStop; 229b300c-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1844236489"
+      label="Elite trainer; 347b0010-7635-408b-8918-8ff3949ce592"/>
+  <int value="1847017753"
+      label="konashi pwmConfig; 229b3004-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1855704654" label="latitude"/>
+  <int value="1863022784"
+      label="Parrot Drone; 9a66fd24-0800-9191-11e4-012d1540cb8e"/>
+  <int value="1865494132"
+      label="konashi i2cRead; 229b300f-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="1875571028"
+      label="PowerUp RC plane; 75b64e51-f185-4ed1-921a-476090d80ba7"/>
+  <int value="1881531610" label="descriptor_value_changed"/>
+  <int value="1899652799" label="pollen_concentration"/>
+  <int value="1904364134" label="aerobic_heart_rate_upper_limit"/>
+  <int value="1936155204" label="gap.device_name"/>
+  <int value="1940300093"
+      label="Tacx trainer; 6e40fec2-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="1954594648" label="temperature"/>
+  <int value="1970019437" label="gap.peripheral_privacy_flag"/>
+  <int value="1981651466" label="wind_chill"/>
+  <int value="1999174392" label="glucose_measurement_context"/>
+  <int value="2000824522" label="waist_circumference"/>
+  <int value="2010182602" label="csc_feature"/>
+  <int value="2022949018" label="cgm_status"/>
+  <int value="2025615830" label="aggregate"/>
+  <int value="2025816471"
+      label="Eddystone Config Unlock; a3c87507-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="2031294873" label="uncertainty"/>
+  <int value="2041423305" label="email_address"/>
+  <int value="2042267197" label="age"/>
+  <int value="2047173546" label="boot_keyboard_input_report"/>
+  <int value="2049531548"
+      label="nrf52-Quadcopter; 6e400004-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="2055293976"
+      label="Remote Lego; b394673e-dea0-4044-a189-86f1c85ce22e"/>
+  <int value="2083994430" label="two_zone_heart_rate_limit"/>
+  <int value="2084445069" label="ringer_control_point"/>
+  <int value="2091220203"
+      label="konashi pioInputNotification;
+             229b3003-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="2091531878" label="weight_scale_feature"/>
+  <int value="2101185135" label="time_zone"/>
+  <int value="2105952193" label="heart_rate_max"/>
+  <int value="2110830087"
+      label="Printer; 00002af1-0000-1000-8000-00805f9b34fb"/>
+  <int value="2118566262" label="database_change_increment"/>
+  <int value="2125906618" label="gap.appearance"/>
+  <int value="2140490935" label="gatt.service_changed"/>
+</enum>
+
+<enum name="GATTServiceHash" type="int">
+<!-- Hash values can be produced using tool: bluetooth_metrics_hash (Only built via GN, not GYP) -->
+
+  <int value="7464675" label="pulse_oximeter"/>
+  <int value="26695985" label="fe20"/>
+  <int value="35226455" label="fe44"/>
+  <int value="35347197" label="fe26"/>
+  <int value="41430862" label="fea8"/>
+  <int value="44208286" label="fe29"/>
+  <int value="46512116" label="fe03"/>
+  <int value="47251880" label="fe8c"/>
+  <int value="48328546" label="febf"/>
+  <int value="48912332"
+      label="micro:bit event; e95d93af-251d-470a-a062-fa1922dfa9a8"/>
+  <int value="56938056" label="feb9"/>
+  <int value="62669585" label="feff"/>
+  <int value="70653353" label="fe37"/>
+  <int value="81094401" label="link_loss"/>
+  <int value="85709298" label="fe38"/>
+  <int value="91953454" label="fe7b"/>
+  <int value="109066436" label="Printer; 18f0"/>
+  <int value="117033282" label="fe1e"/>
+  <int value="119232939" label="fe16"/>
+  <int value="124193922"
+      label="nrf52-Quadcopter; 6e400020-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="126220948" label="fec4"/>
+  <int value="130754956" label="fe0d"/>
+  <int value="134110769" label="fecf"/>
+  <int value="141942246" label="fe1d"/>
+  <int value="152492105" label="fe5f"/>
+  <int value="169501939" label="fe4d"/>
+  <int value="199936534" label="fe3c"/>
+  <int value="214038522" label="fed3"/>
+  <int value="217781951" label="human_interface_device"/>
+  <int value="219286671" label="fe04"/>
+  <int value="221983129" label="fe66"/>
+  <int value="228594985" label="fe21"/>
+  <int value="229725863"
+      label="Juggglow; 624e957f-cb42-4cd6-bacc-84aeb898f69b"/>
+  <int value="239745754" label="fe22"/>
+  <int value="252638028" label="fe9c"/>
+  <int value="253001319" label="fe84"/>
+  <int value="267848299" label="fe3e"/>
+  <int value="270670950" label="fe62"/>
+  <int value="272218751" label="automation_io"/>
+  <int value="273356483" label="fe68"/>
+  <int value="278860884" label="fe5c"/>
+  <int value="289754407" label="fe01"/>
+  <int value="291870040" label="fe6d"/>
+  <int value="295205583" label="fe27"/>
+  <int value="310654399" label="fe54"/>
+  <int value="314884784" label="fe65"/>
+  <int value="315044617" label="fea9"/>
+  <int value="321399472" label="fe86"/>
+  <int value="335078161"
+      label="Dotti; MiP Robot; 0000fff0-0000-1000-8000-00805f9b34fb"/>
+  <int value="336095190" label="fe1c"/>
+  <int value="337129282" label="fe73"/>
+  <int value="347254994" label="feb6"/>
+  <int value="350589357" label="fe8e"/>
+  <int value="353919198" label="fe41"/>
+  <int value="367801999" label="fe19"/>
+  <int value="381944619" label="continuous_glucose_monitoring"/>
+  <int value="393442080" label="fe47"/>
+  <int value="404751265" label="fe34"/>
+  <int value="406443827" label="fe08"/>
+  <int value="406667138" label="fe1b"/>
+  <int value="408422717" label="fe12"/>
+  <int value="411422080" label="feaf"/>
+  <int value="428955508" label="fed8"/>
+  <int value="436040838" label="fe49"/>
+  <int value="442258066" label="fec6"/>
+  <int value="448479874" label="fe13"/>
+  <int value="452749537" label="fe6f"/>
+  <int value="486403409" label="fe7e"/>
+  <int value="493187195"
+      label="Insight cards; 13630000-aeb9-10cf-ef69-81e145a91113"/>
+  <int value="499379297" label="fe0c"/>
+  <int value="517314925" label="fe0e"/>
+  <int value="534472233" label="feea"/>
+  <int value="535574137" label="feb1"/>
+  <int value="540487861"
+      label="Parrot Drone; 9a66fd21-0800-9191-11e4-012d1540cb8e"/>
+  <int value="547028880" label="fed0"/>
+  <int value="547268186"
+      label="Parrot Drone; 9a66fb00-0800-9191-11e4-012d1540cb8e"/>
+  <int value="547391938" label="feee"/>
+  <int value="563178896" label="fec8"/>
+  <int value="572734315"
+      label="Sphero Robot; 22bb746f-2bb0-7554-2d6f-726568705327"/>
+  <int value="587509991" label="feba"/>
+  <int value="593291030" label="fe80"/>
+  <int value="593725623" label="fef8"/>
+  <int value="594122172" label="health_thermometer"/>
+  <int value="598801180" label="fe64"/>
+  <int value="599398840" label="feb4"/>
+  <int value="601952480"
+      label="PowerUp RC plane; 75b64e51-f181-4ed1-921a-476090d80ba7"/>
+  <int value="603143198" label="fef5"/>
+  <int value="604112254" label="fee4"/>
+  <int value="617434027" label="fe59"/>
+  <int value="621358948" label="fec7"/>
+  <int value="633977000" label="fedf"/>
+  <int value="634740644"
+      label="Purple Eye; 00005100-0000-1000-8000-00805f9b34fb"/>
+  <int value="642914459" label="fe3d"/>
+  <int value="643543662" label="fefe"/>
+  <int value="661885353"
+      label="Remote Lego; 40480f29-7bad-4ea5-8bf8-499405c9b324"/>
+  <int value="675211143" label="fe4a"/>
+  <int value="677930586" label="fe11"/>
+  <int value="683753134" label="fe82"/>
+  <int value="684646659" label="febb"/>
+  <int value="687580695" label="fe7a"/>
+  <int value="687720133" label="fe91"/>
+  <int value="688383299" label="fe1f"/>
+  <int value="690691504" label="bond_management"/>
+  <int value="695100933" label="fed4"/>
+  <int value="702341883" label="fed5"/>
+  <int value="703883979" label="fe87"/>
+  <int value="706159123" label="fe32"/>
+  <int value="712814660"
+      label="Eddystone-URL Beacon Configuration;
+             ee0c2080-8786-40ba-ab96-99b91ac981d8"/>
+  <int value="739317418" label="fe05"/>
+  <int value="741183887" label="fe78"/>
+  <int value="749323131" label="fece"/>
+  <int value="762562796" label="fe5e"/>
+  <int value="775377708" label="fe2b"/>
+  <int value="780195705" label="fead"/>
+  <int value="786171562" label="fe0a"/>
+  <int value="803680658" label="fea3"/>
+  <int value="805645044" label="glucose"/>
+  <int value="807272540" label="fe1a"/>
+  <int value="817497010" label="fe18"/>
+  <int value="836214784" label="cycling_power"/>
+  <int value="841972234" label="feeb"/>
+  <int value="869059214" label="next_dst_change"/>
+  <int value="869682406" label="fe60"/>
+  <int value="876407493" label="location_and_navigation"/>
+  <int value="878416856" label="fe85"/>
+  <int value="879242624"
+      label="nRF candy machine; a6c31337-6c07-453e-961a-d8a8a41bf368"/>
+  <int value="882315332" label="fe55"/>
+  <int value="889111031" label="fecd"/>
+  <int value="890629650" label="running_speed_and_cadence"/>
+  <int value="901700952" label="fedd"/>
+  <int value="902817086" label="fea2"/>
+  <int value="918911989" label="fed1"/>
+  <int value="931929648" label="Mi Band; fee0"/>
+  <int value="935427983" label="fed7"/>
+  <int value="936179325" label="feb5"/>
+  <int value="939739701" label="fe8f"/>
+  <int value="939958322" label="febc"/>
+  <int value="940942235" label="feef"/>
+  <int value="953202155" label="fe8d"/>
+  <int value="959163825"
+      label="Elgato Avea Bulb; f815e810-456c-6761-746f-4d756e696368"/>
+  <int value="960854785" label="fe53"/>
+  <int value="961193127" label="feb8"/>
+  <int value="963656436" label="fe77"/>
+  <int value="978815669"
+      label="CoolBeans Serial; a495ff10-c5b1-4b44-b512-1370f02d74de"/>
+  <int value="1001310815" label="fe75"/>
+  <int value="1024550252" label="feda"/>
+  <int value="1029767622" label="internet_protocol_support"/>
+  <int value="1035129135" label="fe74"/>
+  <int value="1044298649" label="fe99"/>
+  <int value="1045265631"
+      label="Elite trainer; 347b0001-7635-408b-8918-8ff3949ce592"/>
+  <int value="1047979067" label="fe17"/>
+  <int value="1054370387" label="fef9"/>
+  <int value="1061554458" label="feaa"/>
+  <int value="1067649821" label="fe3f"/>
+  <int value="1079263879" label="fe06"/>
+  <int value="1085187782" label="feae"/>
+  <int value="1088150526" label="feb2"/>
+  <int value="1091337779" label="fefb"/>
+  <int value="1096286291" label="fed6"/>
+  <int value="1102290958" label="fe56"/>
+  <int value="1103440256" label="fee9"/>
+  <int value="1107293675" label="cycling_speed_and_cadence"/>
+  <int value="1107743017" label="fe00"/>
+  <int value="1108163795" label="fec0"/>
+  <int value="1108885324" label="fe48"/>
+  <int value="1122138707" label="fed2"/>
+  <int value="1122276223" label="fe67"/>
+  <int value="1122861451" label="Playbulb Candle; ff02"/>
+  <int value="1132318862" label="fe6a"/>
+  <int value="1133574029" label="fede"/>
+  <int value="1134418737" label="fed9"/>
+  <int value="1146291045" label="fe2e"/>
+  <int value="1155522736" label="fea0"/>
+  <int value="1181418959" label="feca"/>
+  <int value="1185484517" label="fe02"/>
+  <int value="1188875912" label="phone_alert_status"/>
+  <int value="1204532270" label="fea1"/>
+  <int value="1205730714" label="fe81"/>
+  <int value="1213218283" label="feb7"/>
+  <int value="1219993345" label="device_information"/>
+  <int value="1225001939" label="fe6c"/>
+  <int value="1235220658" label="fe6e"/>
+  <int value="1236903028" label="fe9d"/>
+  <int value="1239202871" label="generic_attribute"/>
+  <int value="1244946418" label="fe61"/>
+  <int value="1250531601" label="fe15"/>
+  <int value="1257014053" label="fe33"/>
+  <int value="1262008705" label="fef2"/>
+  <int value="1265172773" label="indoor_positioning"/>
+  <int value="1265779630" label="fe7d"/>
+  <int value="1275725183" label="febe"/>
+  <int value="1276692887" label="fe09"/>
+  <int value="1280998251" label="blood_pressure"/>
+  <int value="1289827687" label="fe7c"/>
+  <int value="1293391247" label="fea4"/>
+  <int value="1295501517" label="fef3"/>
+  <int value="1300474367" label="fe70"/>
+  <int value="1300496660" label="fe23"/>
+  <int value="1327498374"
+      label="nRF UART; 6e400001-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="1344502489" label="fe92"/>
+  <int value="1352591424" label="fe2d"/>
+  <int value="1357782294" label="fe90"/>
+  <int value="1357850359" label="fefc"/>
+  <int value="1359442507"
+      label="Physical Web Light Switch; ba42561b-b1d2-440a-8d04-0cefb43faece"/>
+  <int value="1362860533" label="fe9a"/>
+  <int value="1366014117" label="fe2c"/>
+  <int value="1369789354" label="current_time"/>
+  <int value="1376579922" label="fef0"/>
+  <int value="1377872916" label="fe51"/>
+  <int value="1380007534" label="fe96"/>
+  <int value="1382767841" label="fe93"/>
+  <int value="1394327958" label="fe24"/>
+  <int value="1398099241" label="user_data"/>
+  <int value="1402127045" label="fef4"/>
+  <int value="1415105941" label="scan_parameters"/>
+  <int value="1416866355" label="fe3b"/>
+  <int value="1422100109"
+      label="Sphero Robot; 22bb746f-2ba0-7554-2d6f-726568705327"/>
+  <int value="1424865940" label="alert_notification"/>
+  <int value="1432421356" label="fe14"/>
+  <int value="1433847022" label="fefa"/>
+  <int value="1465794357" label="feb0"/>
+  <int value="1482395712"
+      label="Bleno Pizza Example; 13333333-3333-3333-3333-333333333337"/>
+  <int value="1484296385" label="fe30"/>
+  <int value="1513113754" label="fe39"/>
+  <int value="1515793787" label="fef1"/>
+  <int value="1545945606"
+      label="Parrot Drone; 9a66fa00-0800-9191-11e4-012d1540cb8e"/>
+  <int value="1548928839" label="fec5"/>
+  <int value="1549672811"
+      label="nRF candy machine; b6c31337-6c07-453e-961a-d8a8a41bf368"/>
+  <int value="1553614739" label="fe6b"/>
+  <int value="1563543855" label="fe72"/>
+  <int value="1569655226" label="generic_access"/>
+  <int value="1573199922" label="fe71"/>
+  <int value="1578535968"
+      label="Makeblock mBot; 0000ffe1-0000-1000-8000-00805f9b34fb"/>
+  <int value="1594426590" label="fe4e"/>
+  <int value="1600490722" label="fe46"/>
+  <int value="1604724337" label="fe88"/>
+  <int value="1606985074" label="feed"/>
+  <int value="1607594729" label="fe0f"/>
+  <int value="1618872680" label="fe9b"/>
+  <int value="1631386264" label="fefd"/>
+  <int value="1635890706" label="fe9e"/>
+  <int value="1637021391" label="fe95"/>
+  <int value="1638012344" label="fe97"/>
+  <int value="1648320092" label="fe7f"/>
+  <int value="1651126525" label="fe25"/>
+  <int value="1651610232" label="fe52"/>
+  <int value="1660904097" label="immediate_alert"/>
+  <int value="1663141542" label="battery_service"/>
+  <int value="1671670551" label="fe5a"/>
+  <int value="1673238799" label="fee3"/>
+  <int value="1680929515" label="fe79"/>
+  <int value="1681595304" label="fe4b"/>
+  <int value="1682716946" label="fe45"/>
+  <int value="1694516494" label="fe31"/>
+  <int value="1696287138" label="weight_scale"/>
+  <int value="1701893879" label="feac"/>
+  <int value="1706666451" label="fea7"/>
+  <int value="1712085581"
+      label="MiP Robot; Magic Blue Bulb; 0000ffe5-0000-1000-8000-00805f9b34fb"/>
+  <int value="1714031075" label="fe10"/>
+  <int value="1724509641" label="fe8b"/>
+  <int value="1729966097"
+      label="Anki OVERDRIVE cars; be15beef-6186-407e-8381-0bd89c4d8df4"/>
+  <int value="1753170093" label="environmental_sensing"/>
+  <int value="1763555668" label="fe76"/>
+  <int value="1779377938" label="fe5d"/>
+  <int value="1784351685" label="feab"/>
+  <int value="1788143374" label="feb3"/>
+  <int value="1788905945" label="fedb"/>
+  <int value="1789684919" label="fe36"/>
+  <int value="1805849785" label="fe98"/>
+  <int value="1808789304" label="fe3a"/>
+  <int value="1821803686" label="TI SensorTag Simple Keys; ffe0"/>
+  <int value="1823176820" label="body_composition"/>
+  <int value="1826466999" label="fee1"/>
+  <int value="1829698279" label="fe0b"/>
+  <int value="1833458622" label="fe42"/>
+  <int value="1844072312" label="fe40"/>
+  <int value="1849709266" label="fec3"/>
+  <int value="1855849484"
+      label="iHealth Edge; 636f6d2e-6a69-7561-6e2e-414d56313100"/>
+  <int value="1891274929" label="fee2"/>
+  <int value="1891804450" label="fe58"/>
+  <int value="1905398969" label="fee6"/>
+  <int value="1915568448" label="fe89"/>
+  <int value="1922068523" label="fef6"/>
+  <int value="1922152740" label="fe8a"/>
+  <int value="1922853101" label="fe28"/>
+  <int value="1925022679" label="fe57"/>
+  <int value="1940012814" label="fe2a"/>
+  <int value="1942373991"
+      label="Eddystone-URL Beacon Configuration v2;
+             a3c87500-8ed3-4bdf-8a39-a01bebede295"/>
+  <int value="1946977319" label="fec1"/>
+  <int value="1953707948" label="fe9f"/>
+  <int value="1960388103" label="fecb"/>
+  <int value="1969478137" label="fe63"/>
+  <int value="1970234661" label="reference_time_update"/>
+  <int value="1971997463" label="fe07"/>
+  <int value="1976176123" label="fe4c"/>
+  <int value="1983035069" label="fec9"/>
+  <int value="1984351068" label="fea6"/>
+  <int value="2016025023" label="febd"/>
+  <int value="2017827114" label="fe4f"/>
+  <int value="2018026941"
+      label="konashi; 229bff00-03fb-40da-98a7-b0def65c2d4b"/>
+  <int value="2021054861"
+      label="Tacx trainer; 6e40fec1-b5a3-f393-e0a9-e50e24dcca9e"/>
+  <int value="2022676622" label="fe35"/>
+  <int value="2051635436" label="fe50"/>
+  <int value="2055825405" label="fedc"/>
+  <int value="2058080782" label="fecc"/>
+  <int value="2061595680" label="fea5"/>
+  <int value="2069612985" label="fee5"/>
+  <int value="2070392722" label="fec2"/>
+  <int value="2075745564" label="heart_rate"/>
+  <int value="2081534039" label="fe83"/>
+  <int value="2086529225" label="tx_power"/>
+  <int value="2097896377" label="fee8"/>
+  <int value="2100033855" label="fef7"/>
+  <int value="2107223399" label="fee7"/>
+  <int value="2108894990" label="fe2f"/>
+  <int value="2110412550" label="fe43"/>
+  <int value="2113887919" label="fe5b"/>
+  <int value="2115271248" label="fe94"/>
+  <int value="2124678180"
+      label="Parrot Drone; 9a66fd51-0800-9191-11e4-012d1540cb8e"/>
+  <int value="2132514937" label="feec"/>
+  <int value="2136716957" label="fe69"/>
+</enum>
+
+<enum name="GCMCheckinRequestStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="URL fetching failed"/>
+  <int value="2" label="HTTP bad request"/>
+  <int value="3" label="HTTP unauthorized"/>
+  <int value="4" label="HTTP not OK"/>
+  <int value="5" label="Response parsing failed"/>
+  <int value="6" label="Zero ID or token"/>
+</enum>
+
+<enum name="GCMConnectionResetReason" type="int">
+  <int value="0" label="Login failure"/>
+  <int value="1" label="Close command"/>
+  <int value="2" label="Heartbeat failure"/>
+  <int value="3" label="Socket failure"/>
+  <int value="4" label="Network change"/>
+  <int value="5" label="New heartbeat interval"/>
+</enum>
+
+<enum name="GCMDecryptionResult" type="int">
+  <int value="0" label="Success (message unencrypted)"/>
+  <int value="1" label="Success (message decrypted)"/>
+  <int value="2" label="Failure (invalid Encryption HTTP header)"/>
+  <int value="3" label="Failure (invalid Crypto-Key HTTP header)"/>
+  <int value="4" label="Failure (no keying material available)"/>
+  <int value="5" label="Failure (unable to compute the shared secret)"/>
+  <int value="6" label="Failure (unable to decrypt using AES-GCM)"/>
+</enum>
+
+<enum name="GCMEndpoints" type="int">
+  <int value="0" label="mtalk.google.com:5228"/>
+  <int value="1" label="mtalk.google.com:443"/>
+</enum>
+
+<enum name="GCMInvalidationsIncomingMessageStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="GCM message's content missing or empty"/>
+  <int value="2" label="Base64Decode failed"/>
+  <int value="3" label="Parsing protobuf failed"/>
+</enum>
+
+<enum name="GCMInvalidationsOutgoingMessageStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Message was discarded"/>
+  <int value="2" label="Access token request failed"/>
+  <int value="3" label="HTTP Post failed"/>
+</enum>
+
+<enum name="GCMLoadStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Reloading open store"/>
+  <int value="2" label="Store open failed"/>
+  <int value="3" label="Loading device credentials failed"/>
+  <int value="4" label="Loading registrations failed"/>
+  <int value="5" label="Loading incoming messages failed"/>
+  <int value="6" label="Loading outgoing messages failed"/>
+  <int value="7" label="Loading last checkin info failed"/>
+  <int value="8" label="Loading gservice settings failed"/>
+  <int value="9" label="Loading account mapping failed"/>
+  <int value="10" label="Loading last token time failed"/>
+  <int value="11" label="Loading heartbeat intervals failed"/>
+  <int value="12" label="Loading Instance ID data failed"/>
+  <int value="13" label="Store does not exist"/>
+</enum>
+
+<enum name="GCMOutgoingMessageTTLCategory" type="int">
+  <int value="0" label="Zero"/>
+  <int value="1" label="Less than or equal to 1 minute"/>
+  <int value="2" label="Less than or equal to 1 hour"/>
+  <int value="3" label="Less than or equal to 1 day"/>
+  <int value="4" label="Less than or equal to 1 week"/>
+  <int value="5" label="More than 1 week but less than maximum"/>
+  <int value="6" label="Default or maximium time"/>
+</enum>
+
+<enum name="GcmReceiverStatus" type="int">
+  <obsolete>
+    Deprecated as of 01/2016. The error has been fixed by GCM. (crbug/580367)
+  </obsolete>
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="ERROR_SECURITY_EXCEPTION"/>
+</enum>
+
+<enum name="GCMRegistrationRequestStatus" type="int">
+  <int value="0" label="Success (this is not logged currently)"/>
+  <int value="1" label="Invalid parameters"/>
+  <int value="2" label="Invalid sender"/>
+  <int value="3" label="Authentication failed"/>
+  <int value="4" label="Device registration error"/>
+  <int value="5" label="Unknown error"/>
+  <int value="6" label="URL fetching failed"/>
+  <int value="7" label="HTTP not OK"/>
+  <int value="8" label="No response body"/>
+  <int value="9" label="Reached maximum number of retries"/>
+  <int value="10" label="Response parsing failed"/>
+  <int value="11" label="Internal server error"/>
+  <int value="12" label="Quota exceeded"/>
+  <int value="13" label="Device has too many registrations"/>
+</enum>
+
+<enum name="GCMResetStoreError" type="int">
+  <int value="0" label="Destroying store failed"/>
+  <int value="1" label="Infinite store reset"/>
+</enum>
+
+<enum name="GCMSendMessageStatus" type="int">
+  <int value="0" label="Message queued"/>
+  <int value="1" label="Message sent to the server, ACK received"/>
+  <int value="2" label="Message not saved, exceeded app queue size"/>
+  <int value="3" label="Message not saved, exceeded total queue size"/>
+  <int value="4" label="Message too large to send"/>
+  <int value="5" label="Message has zero TTL and no open connection"/>
+  <int value="6" label="Message TTL exceeded"/>
+</enum>
+
+<enum name="GCMUnregistrationRequestStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="URL fetching failed"/>
+  <int value="2" label="No response body"/>
+  <int value="3" label="Response parsing failed"/>
+  <int value="4" label="Incorrect App Id"/>
+  <int value="5" label="Invalid parameters"/>
+  <int value="6" label="Service unavailable"/>
+  <int value="7" label="Internal server error"/>
+  <int value="8" label="HTTP reponse code not OK"/>
+  <int value="9" label="Unknown error"/>
+  <int value="10" label="Reached maximum number of retries"/>
+  <int value="11" label="Device registration error"/>
+</enum>
+
+<enum name="GCMUpstreamMessageStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Message size limit exceeded"/>
+  <int value="2" label="Access token request failed"/>
+  <int value="3" label="Send request failed"/>
+</enum>
+
+<enum name="GCReason" type="int">
+  <int value="0" label="Idle GC"/>
+  <int value="1" label="Precise GC"/>
+  <int value="2" label="Conservative GC"/>
+  <int value="3" label="Forced GC for testing"/>
+  <int value="4" label="Memory pressure GC"/>
+  <int value="5" label="Page navigation GC"/>
+</enum>
+
+<enum name="GDataAuthResult" type="int">
+  <int value="0" label="FAILURE"/>
+  <int value="1" label="SUCCESS"/>
+  <int value="2" label="NO_CONNECTION"/>
+</enum>
+
+<enum name="GDataEntryKind" type="int">
+  <obsolete>
+    Deprecated 9/2012, and replaced by DriveEntryKind
+  </obsolete>
+  <int value="0" label="UNKNOWN"/>
+  <int value="4097" label="ITEM"/>
+  <int value="4098" label="SITE"/>
+  <int value="8449" label="DOCUMENT"/>
+  <int value="8450" label="SPEREADSHEET"/>
+  <int value="8451" label="PRESENTATION"/>
+  <int value="8452" label="DRAWING"/>
+  <int value="8453" label="TABLE"/>
+  <int value="8705" label="EXTERNAL_APP"/>
+  <int value="16385" label="FOLDER"/>
+  <int value="32769" label="FILE"/>
+  <int value="32770" label="PDF"/>
+</enum>
+
+<enum name="GeolocationInfoBarDelegateAndroidEvent" type="int">
+  <obsolete>
+    Deprecated 9/2014, and replaced by PermissionAction.
+  </obsolete>
+  <int value="0" label="User allowed the page to use geolocation">
+    For the Android platform the count for this event should be exactly the same
+    as the corresponding event in the GeolocationInfoBarDelegateEvent enum.
+  </int>
+  <int value="1" label="User opened geolocation settings"/>
+</enum>
+
+<enum name="GeolocationInfoBarDelegateEvent" type="int">
+  <obsolete>
+    Deprecated 9/2014, and replaced by PermissionAction.
+  </obsolete>
+  <int value="0" label="The bar was created"/>
+  <int value="1" label="User allowed use of geolocation"/>
+  <int value="2" label="User denied use of geolocation"/>
+  <int value="3" label="User dismissed the bar"/>
+  <int value="4" label="User clicked on link"/>
+  <int value="5" label="User ignored the bar"/>
+</enum>
+
+<enum name="GeopositionErrorCode" type="int">
+  <int value="0" label="There was no error"/>
+  <int value="1" label="User denied use of geolocation"/>
+  <int value="2" label="Geoposition could not be determined"/>
+  <int value="3" label="Timeout"/>
+</enum>
+
+<enum name="GestureActionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Omnibox pinch"/>
+  <int value="2" label="Omnibox scroll"/>
+  <int value="3" label="Tabstrip pinch"/>
+  <int value="4" label="Tabstrip scroll"/>
+  <int value="5" label="Bezel scroll"/>
+  <int value="6" label="Desktop scroll"/>
+  <int value="7" label="Desktop pinch"/>
+  <int value="8" label="Webpage pinch"/>
+  <int value="9" label="Webpage scroll"/>
+  <int value="10" label="Webpage tap"/>
+  <int value="11" label="Tabstrip tap"/>
+  <int value="12" label="Bezel down"/>
+  <int value="13" label="Tab switched tap"/>
+  <int value="14" label="Active tab tap"/>
+  <int value="15" label="Tab close button tap"/>
+  <int value="16" label="New tab button tap"/>
+  <int value="17" label="Top edge of window tap"/>
+  <int value="18" label="Window size button tap"/>
+  <int value="19" label="Area surrounding tabstrip tap"/>
+  <int value="20" label="Window resized double tap"/>
+</enum>
+
+<enum name="GestureMergeState" type="int">
+  <int value="0" label="Neither token had a gesture"/>
+  <int value="1" label="Only the old token had a gesture"/>
+  <int value="2" label="Only the new token had a gesture"/>
+  <int value="3" label="Both tokens had a gesture"/>
+</enum>
+
+<enum name="GesturePredictionResult" type="int">
+  <int value="0" label="Gesture occured and was predicted"/>
+  <int value="1" label="Gesture occured but was not predicted"/>
+  <int value="2" label="Gesture predicted but didn't occur"/>
+</enum>
+
+<enum name="GetOutputDeviceInfoCacheHit" type="int">
+  <int value="0" label="Miss: no cached sink found">
+    Output parmeters for a device are requested, and there is no corresponding
+    sink cached; new sink is created and cached.
+  </int>
+  <int value="1" label="Miss: cannot lookup by session id">
+    If session id is used to specify a device, we always have to create and
+    cache a new sink.
+  </int>
+  <int value="2" label="Hit">
+    Output parmeters for a device are requested, and there is a corresponding
+    sink cached.
+  </int>
+</enum>
+
+<enum name="GetPerfDataOutcome" type="int">
+  <int value="0" label="Success.">
+    Perf data was collected, parsed and attached to the UMA protobuf
+    successfully.
+  </int>
+  <int value="1" label="No perf data ready to be uploaded.">
+    Could not add perf data to the UMA protobuf because no perf data was ready
+    to be uploaded.
+  </int>
+  <int value="2" label="Collection timer triggered but have data already.">
+    Perf timer triggered but the perf provider already had a perf data proto to
+    be added to the UMA protobuf.
+  </int>
+  <int value="3"
+      label="Collection timer triggered but incognito window active.">
+    Perf timer triggered but an incognito window was open.
+  </int>
+  <int value="4" label="Incognito window launched during collection.">
+    Perf data was collected but an incognito window was opened during the
+    collection.
+  </int>
+  <int value="5" label="Protobuf returned by debugd not deserialized.">
+    Perf data was collected and sent to Chrome as a serialized protobuf but it
+    could not be deserialized by Chrome.
+  </int>
+  <int value="6" label="Illegal data returned by debugd.">
+    The perf data sent back to Chrome by debugd is invalid.
+  </int>
+  <int value="7" label="Already collecting.">
+    A perf data collection was already active.
+  </int>
+</enum>
+
+<enum name="GetUserDataTempDirResult" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="CANT_GET_PARENT_PATH"/>
+  <int value="2" label="CANT_GET_UDT_PATH"/>
+  <int value="3" label="NOT_A_DIRECTORY"/>
+  <int value="4" label="CANT_CREATE_DIR"/>
+  <int value="5" label="CANT_WRITE_TO_PATH"/>
+  <int value="6" label="UNSET"/>
+</enum>
+
+<enum name="GLError" type="int">
+  <int value="0" label="0x0000 - GL_NO_ERROR"/>
+  <int value="1280" label="0x0500 - GL_INVALID_ENUM"/>
+  <int value="1281" label="0x0501 - GL_INVALID_VALUE"/>
+  <int value="1282" label="0x0502 - GL_INVALID_OPERATION"/>
+  <int value="1285" label="0x0505 - GL_OUT_OF_MEMORY"/>
+  <int value="1286" label="0x0506 - GL_INVALID_FRAMEBUFFER_OPERATION"/>
+</enum>
+
+<enum name="GoogleCaptchaEvent" type="int">
+  <int value="0" label="Google CAPTCHA shown"/>
+  <int value="1" label="Google CAPTCHA solved"/>
+</enum>
+
+<enum name="GoogleNowCardTypeId" type="int">
+  <summary>
+    Represents a card type ID. See cardTypeId in
+    chrome/browser/resources/google_now/background.js.
+  </summary>
+  <int value="1" label="Frequent Place"/>
+  <int value="7" label="Weather"/>
+  <int value="12" label="Flight Status"/>
+  <int value="13" label="Sport Score"/>
+  <int value="14" label="Calendar"/>
+  <int value="19" label="Public Alert"/>
+  <int value="21" label="Stock Quote List"/>
+  <int value="23" label="Package Tracking"/>
+  <int value="27" label="Birthday"/>
+  <int value="43" label="Reminder"/>
+</enum>
+
+<enum name="GoogleNowEvent" type="int">
+  <summary>
+    Events in Google Now component extension. See GoogleNowEvent in
+    chrome/browser/resources/google_now/background.js.
+  </summary>
+  <int value="0" label="REQUEST_FOR_CARDS_TOTAL"/>
+  <int value="1" label="REQUEST_FOR_CARDS_SUCCESS"/>
+  <int value="2" label="CARDS_PARSE_SUCCESS"/>
+  <int value="3" label="DISMISS_REQUEST_TOTAL"/>
+  <int value="4" label="DISMISS_REQUEST_SUCCESS"/>
+  <int value="5" label="LOCATION_REQUEST"/>
+  <int value="6" label="DELETED_LOCATION_UPDATE"/>
+  <int value="7" label="EXTENSION_START"/>
+  <int value="8" label="DELETED_SHOW_WELCOME_TOAST"/>
+  <int value="9" label="STOPPED"/>
+  <int value="10" label="DELETED_USER_SUPPRESSED"/>
+  <int value="11" label="SIGNED_OUT"/>
+  <int value="12" label="NOTIFICATION_DISABLED"/>
+  <int value="13" label="GOOGLE_NOW_DISABLED"/>
+</enum>
+
+<enum name="GooglePlayServicesConnectionResult" type="int">
+  <summary>
+    Results of attempting a connection to Google Play Services. See Javadoc for
+    com.google.android.gms.common.ConnectionResult at
+    http://developer.android.com/reference for more information.
+  </summary>
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="SERVICE_MISSING"/>
+  <int value="2" label="SERVICE_VERSION_UPDATE_REQUIRED"/>
+  <int value="3" label="SERVICE_DISABLED"/>
+  <int value="4" label="SIGN_IN_REQUIRED"/>
+  <int value="5" label="INVALID_ACCOUNT"/>
+  <int value="6" label="RESOLUTION_REQUIRED"/>
+  <int value="7" label="NETWORK_ERROR"/>
+  <int value="8" label="INTERNAL_ERROR"/>
+  <int value="9" label="SERVICE_INVALID"/>
+  <int value="10" label="DEVELOPER_ERROR"/>
+  <int value="11" label="LICENSE_CHECK_FAILED"/>
+  <int value="12" label="DATE_INVALID"/>
+  <int value="13" label="CANCELED"/>
+  <int value="14" label="TIMEOUT"/>
+  <int value="15" label="INTERRUPTED"/>
+  <int value="16" label="API_UNAVAILABLE"/>
+  <int value="17" label="SIGN_IN_FAILED"/>
+  <int value="18" label="SERVICE_UPDATING"/>
+  <int value="1500" label="DRIVE_EXTERNAL_STORAGE_REQUIRED"/>
+</enum>
+
+<enum name="GooglePlayServicesErrorHandlerAction" type="int">
+  <summary>
+    Types of action taken in response to Google Play Services user-recoverable
+    errors. See subclasses of UserRecoverableErrorHandler in
+    org.chromium.chrome.browser.externalauth.ExternalAuthUtils for more
+    information.
+  </summary>
+  <int value="0" label="SILENT"/>
+  <int value="1" label="SYSTEM_NOTIFICATION"/>
+  <int value="2" label="MODAL_DIALOG"/>
+  <int value="3" label="IGNORED_AS_REDUNDANT"/>
+</enum>
+
+<enum name="GoogleServiceAuthError" type="int">
+  <int value="0" label="NONE"/>
+  <int value="1" label="INVALID_GAIA_CREDENTIALS"/>
+  <int value="2" label="USER_NOT_SIGNED_UP"/>
+  <int value="3" label="CONNECTION_FAILED"/>
+  <int value="4" label="CAPTCHA_REQUIRED"/>
+  <int value="5" label="ACCOUNT_DELETED"/>
+  <int value="6" label="ACCOUNT_DISABLED"/>
+  <int value="7" label="SERVICE_UNAVAILABLE"/>
+  <int value="8" label="TWO_FACTOR"/>
+  <int value="9" label="REQUEST_CANCELED"/>
+  <int value="10" label="HOSTED_NOT_ALLOWED (deprecated)"/>
+  <int value="11" label="UNEXPECTED_SERVICE_RESPONSE"/>
+  <int value="12" label="SERVICE_ERROR"/>
+  <int value="13" label="WEB_LOGIN_REQUIRED"/>
+</enum>
+
+<enum name="GoogleUpdateAfterItemClickedActions" type="int">
+  <int value="0" label="Updated"/>
+  <int value="1" label="Not updated"/>
+</enum>
+
+<enum name="GoogleUpdateErrorCode" type="int">
+  <int value="0" label="GOOGLE_UPDATE_NO_ERROR"/>
+  <int value="1" label="CANNOT_UPGRADE_CHROME_IN_THIS_DIRECTORY"/>
+  <int value="2" label="GOOGLE_UPDATE_JOB_SERVER_CREATION_FAILED"/>
+  <int value="3" label="GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND"/>
+  <int value="4" label="GOOGLE_UPDATE_ONDEMAND_CLASS_REPORTED_ERROR"/>
+  <int value="5" label="GOOGLE_UPDATE_GET_RESULT_CALL_FAILED"/>
+  <int value="6" label="GOOGLE_UPDATE_GET_VERSION_INFO_FAILED"/>
+  <int value="7" label="GOOGLE_UPDATE_ERROR_UPDATING"/>
+  <int value="8" label="GOOGLE_UPDATE_DISABLED_BY_POLICY"/>
+  <int value="9" label="GOOGLE_UPDATE_DISABLED_BY_POLICY_AUTO_ONLY"/>
+</enum>
+
+<enum name="GoogleUpdateInfoBarActions" type="int">
+  <int value="0" label="Clicked close"/>
+  <int value="1" label="Clicked to update appears successful"/>
+  <int value="2" label="Clicked to update but failed"/>
+  <int value="3" label="InfoBar dismissed implicitly (no interaction)"/>
+</enum>
+
+<enum name="GoogleUpdateMenuItemActions" type="int">
+  <int value="0" label="Not clicked"/>
+  <int value="1" label="Clicked, intent launched"/>
+  <int value="2" label="Clicked, intent failed"/>
+</enum>
+
+<enum name="GoogleUpdateUpgradeStatus" type="int">
+  <int value="0" label="UPGRADE_STARTED"/>
+  <int value="1" label="UPGRADE_CHECK_STARTED"/>
+  <int value="2" label="UPGRADE_IS_AVAILABLE"/>
+  <int value="3" label="UPGRADE_SUCCESSFUL"/>
+  <int value="4" label="UPGRADE_ALREADY_UP_TO_DATE"/>
+  <int value="5" label="UPGRADE_ERROR"/>
+</enum>
+
+<enum name="GpuImageDecodeState" type="int">
+  <int value="0" label="Wasted, once"/>
+  <int value="1" label="Used, once"/>
+  <int value="2" label="Wasted, relocked"/>
+  <int value="3" label="Used, relocked"/>
+</enum>
+
+<enum name="GPUProcessLaunchCauses" type="int">
+  <summary>
+    Causes for the GPU Process to be launched. From:
+    content/common/gpu/gpu_process_launch_causes.h
+  </summary>
+  <int value="0" label="about:gpucrash">
+    CAUSE_FOR_GPU_LAUNCH_ABOUT_GPUCRASH
+  </int>
+  <int value="1" label="about:gpuhang">CAUSE_FOR_GPU_LAUNCH_ABOUT_GPUHANG</int>
+  <int value="2" label="GpuDataManager RequestCompleteGpuInfoIfNeeded">
+    CAUSE_FOR_GPU_LAUNCH_GPUDATAMANAGER_REQUESTCOMPLETEGPUINFOIFNEEDED
+  </int>
+  <int value="3" label="RenderWidgetFullScreenPepper CreateContext">
+    CAUSE_FOR_GPU_LAUNCH_RENDERWIDGETFULLSCREENPEPPER_CREATECONTEXT
+  </int>
+  <int value="4" label="WebGraphicsContext3DCommandBufferImpl Initialize">
+    CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE
+  </int>
+  <int value="5" label="NoLaunch">CAUSE_FOR_GPU_LAUNCH_NO_LAUNCH</int>
+  <int value="6" label="VideoDecodeAccelerator Initialize">
+    CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE
+  </int>
+  <int value="7" label="Pepper PlatformContext3DImpl Initialize">
+    CAUSE_FOR_GPU_LAUNCH_PEPPERPLATFORMCONTEXT3DIMPL_INITIALIZE
+  </int>
+  <int value="8" label="Browser Startup">
+    CAUSE_FOR_GPU_LAUNCH_BROWSER_STARTUP
+  </int>
+  <int value="9" label="Canvas 2D">CAUSE_FOR_GPU_LAUNCH_CANVAS_2D</int>
+  <int value="10" label="Pepper VideoEncodeAccelerator Initialize">
+    CAUSE_FOR_GPU_LAUNCH_PEPPERVIDEOENCODERACCELERATOR_INITIALIZE
+  </int>
+  <int value="11" label="GpuMemoryBuffer allocate">
+    CAUSE_FOR_GPU_LAUNCH_GPU_MEMORY_BUFFER_ALLOCATE
+  </int>
+  <int value="12" label="JpegDecodeAccelerator Initialize">
+    CAUSE_FOR_GPU_LAUNCH_JPEGDECODEACCELERATOR_INITIALIZE
+  </int>
+  <int value="13" label="Mojo Setup">CAUSE_FOR_GPU_LAUNCH_MOJO_SETUP</int>
+  <int value="14" label="Get Gpu Service Registry">
+    CAUSE_FOR_GPU_LAUNCH_GET_GPU_SERVICE_REGISTRY
+  </int>
+  <int value="15" label="Browser shared main thread context">
+    CAUSE_FOR_GPU_LAUNCH_BROWSER_SHARED_MAIN_THREAD_CONTEXT
+  </int>
+  <int value="16" label="Renderer shared main thread context">
+    CAUSE_FOR_GPU_LAUNCH_RENDERER_SHARED_MAIN_THREAD_CONTEXT
+  </int>
+  <int value="17" label="WebGL context">CAUSE_FOR_GPU_LAUNCH_WEBGL_CONTEXT</int>
+  <int value="18" label="Shared worker thread context">
+    CAUSE_FOR_GPU_LAUNCH_SHARED_WORKER_THREAD_CONTEXT
+  </int>
+  <int value="19" label="Renderer verify GPU compositing">
+    CAUSE_FOR_GPU_LAUNCH_RENDERER_VERIFY_GPU_COMPOSITING
+  </int>
+  <int value="20" label="Display compositor context">
+    CAUSE_FOR_GPU_LAUNCH_DISPLAY_COMPOSITOR_CONTEXT
+  </int>
+  <int value="21" label="Media worker context">
+    CAUSE_FOR_GPU_LAUNCH_MEDIA_CONTEXT
+  </int>
+</enum>
+
+<enum name="GzipEncodingFixupResult" type="int">
+  <int value="0" label="Gzip encoding left as-is"/>
+  <int value="1" label="MIME type indicated GZIP content"/>
+  <int value="2" label="Explicit download with GZIP filename extension"/>
+  <int value="3" label="Unhandled MIME type with a GZIP filename extension"/>
+</enum>
+
+<enum name="HadFormInteraction" type="int">
+  <int value="0" label="No form interaction"/>
+  <int value="1" label="Observed form interaction"/>
+</enum>
+
+<enum name="HIDContinueScenarioType" type="int">
+  <summary>Possible detected devices combination on leaving dialog</summary>
+  <int value="0" label="Pointing device only detected."/>
+  <int value="1" label="Keyboard device only detected."/>
+  <int value="2" label="Both devices, pointing and keyboard, detected."/>
+</enum>
+
+<enum name="HistogramActivityReport" type="int">
+  <int value="0" label="Reports created"/>
+  <int value="1" label="Histograms created"/>
+  <int value="2" label="Histograms found by look-up"/>
+  <int value="3" label="Logarithmic histograms created"/>
+  <int value="4" label="Linear histograms created"/>
+  <int value="5" label="Boolean histograms created"/>
+  <int value="6" label="Custom histograms created"/>
+  <int value="7" label="Sparse histograms created"/>
+  <int value="8" label="UMA-targeted histograms created"/>
+  <int value="9" label="UMA-stability histograms created"/>
+  <int value="10" label="Persistent histograms created"/>
+</enum>
+
+<enum name="HistoryFaviconsRecoveryEnum" type="int">
+  <summary>Error states noted in thumbnail_database.cc recovery code.</summary>
+  <int value="0" label="RECOVERY_EVENT_RECOVERED">Successful recovery.</int>
+  <int value="1" label="RECOVERY_EVENT_FAILED_SCOPER">
+    sql::Recovery failed init.
+  </int>
+  <int value="2" label="RECOVERY_EVENT_FAILED_META_VERSION_ERROR">
+    Query failed against recovery meta table.
+  </int>
+  <int value="3" label="RECOVERY_EVENT_FAILED_META_VERSION_NONE">
+    No version row in recovery meta table.
+  </int>
+  <int value="4" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION6">
+    Recovery meta table has version 6.
+  </int>
+  <int value="5" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION5">
+    Recovery meta table has version 5.
+  </int>
+  <int value="6" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION">
+    Recovery meta table has an unexpected version.
+  </int>
+  <int value="7" label="RECOVERY_EVENT_FAILED_RECOVER_META">
+    Failed to create recovery meta table.
+  </int>
+  <int value="8" label="RECOVERY_EVENT_FAILED_META_INSERT">
+    Failed to copy recovery meta table.
+  </int>
+  <int value="9" label="RECOVERY_EVENT_FAILED_INIT">
+    Failed to init target schema.
+  </int>
+  <int value="10" label="RECOVERY_EVENT_FAILED_RECOVER_FAVICONS">
+    Failed to create recovery favicons table.
+  </int>
+  <int value="11" label="RECOVERY_EVENT_FAILED_FAVICONS_INSERT">
+    Failed to copy recovery favicons table.
+  </int>
+  <int value="12" label="RECOVERY_EVENT_FAILED_RECOVER_FAVICON_BITMAPS">
+    Failed to create recovery favicon_bitmaps table.
+  </int>
+  <int value="13" label="RECOVERY_EVENT_FAILED_FAVICON_BITMAPS_INSERT">
+    Failed to copy recovery favicon_bitmaps table.
+  </int>
+  <int value="14" label="RECOVERY_EVENT_FAILED_RECOVER_ICON_MAPPING">
+    Failed to create recovery icon_mapping table.
+  </int>
+  <int value="15" label="RECOVERY_EVENT_FAILED_ICON_MAPPING_INSERT">
+    Failed to copy recovery icon_mapping table.
+  </int>
+  <int value="16" label="RECOVERY_EVENT_RECOVERED_VERSION6">
+    Successful recovery of version 6 database.
+  </int>
+  <int value="17" label="RECOVERY_EVENT_FAILED_META_INIT">
+    Failed sql::MetaTable::Init().
+  </int>
+  <int value="18" label="RECOVERY_EVENT_FAILED_META_VERSION">
+    Failed sql::Recovery::SetupMeta() or GetMetaVersionNumber().
+  </int>
+  <int value="19" label="RECOVERY_EVENT_DEPRECATED">
+    Recovery found deprecated version and razed.
+  </int>
+  <int value="20" label="RECOVERY_EVENT_FAILED_V5_INITSCHEMA">
+    Failed v5 recovery loading schema.
+  </int>
+  <int value="21" label="RECOVERY_EVENT_FAILED_V5_AUTORECOVER_FAVICONS">
+    Failed v5 recovery on favicons.
+  </int>
+  <int value="22" label="RECOVERY_EVENT_FAILED_V5_AUTORECOVER_ICON_MAPPING">
+    Failed v5 recovery on icon_mapping.
+  </int>
+  <int value="23" label="RECOVERY_EVENT_RECOVERED_VERSION5">
+    Successful recovery of version 6 database.
+  </int>
+  <int value="24" label="RECOVERY_EVENT_FAILED_AUTORECOVER_FAVICONS">
+    Failed v6/7 recovery on favicons.
+  </int>
+  <int value="25" label="RECOVERY_EVENT_FAILED_AUTORECOVER_FAVICON_BITMAPS">
+    Failed v6/7 recovery on favicon_bitmaps.
+  </int>
+  <int value="26" label="RECOVERY_EVENT_FAILED_AUTORECOVER_ICON_MAPPING">
+    Failed v6/7 recovery on icon_mapping.
+  </int>
+  <int value="27" label="RECOVERY_EVENT_FAILED_COMMIT">
+    Failed sql::Recovery::Recovered().
+  </int>
+</enum>
+
+<enum name="HistoryPageView" type="int">
+  <int value="0" label="History"/>
+  <int value="1" label="Grouped Week"/>
+  <int value="2" label="Grouped Month"/>
+  <int value="3" label="Synced Tabs"/>
+  <int value="4" label="Signin Promo"/>
+</enum>
+
+<enum name="HistoryTopSitesRecoveryEnum" type="int">
+  <summary>Error states noted in top_sites_database.cc recovery code.</summary>
+  <int value="0" label="RECOVERY_EVENT_RECOVERED">Successful recovery.</int>
+  <int value="1" label="RECOVERY_EVENT_DEPRECATED">
+    Recovery found deprecated version and razed.
+  </int>
+  <int value="2" label="RECOVERY_EVENT_FAILED_SCOPER">
+    sql::Recovery failed init.
+  </int>
+  <int value="3" label="RECOVERY_EVENT_FAILED_META_VERSION">
+    Failed sql::Recovery::SetupMeta() or GetMetaVersionNumber().
+  </int>
+  <int value="4" label="RECOVERY_EVENT_FAILED_META_WRONG_VERSION">
+    Recovery meta table has an unexpected version.
+  </int>
+  <int value="5" label="RECOVERY_EVENT_FAILED_META_INIT">
+    Failed sql::MetaTable::Init().
+  </int>
+  <int value="6" label="RECOVERY_EVENT_FAILED_SCHEMA_INIT">
+    Failed to init target schema.
+  </int>
+  <int value="7" label="RECOVERY_EVENT_FAILED_AUTORECOVER_THUMBNAILS">
+    Failed recovery on thumbnails table.
+  </int>
+  <int value="8" label="RECOVERY_EVENT_FAILED_COMMIT">
+    Failure from sql::Recovery::Recovered().
+  </int>
+  <int value="9" label="RECOVERY_EVENT_INVARIANT_RANK">
+    Rows were deleted because |url_rank| and |last_forced| didn't agree.  Does
+    not prevent recovery.
+  </int>
+  <int value="10" label="RECOVERY_EVENT_INVARIANT_REDIRECT">
+    Rows were deleted because |redirects| did not contain |url|.  Does not
+    prevent recovery.
+  </int>
+  <int value="11" label="RECOVERY_EVENT_INVARIANT_CONTIGUOUS">
+    |url_rank| was renumbered due to missing rows.  Does not prevent recovery.
+  </int>
+</enum>
+
+<enum name="HotwordAvailability" type="int">
+  <int value="0" label="Unavailable -- reason may be unknown"/>
+  <int value="1" label="Available"/>
+  <int value="2" label="Pending download"/>
+  <int value="3" label="Disabled"/>
+</enum>
+
+<enum name="HotwordError" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Generic error"/>
+  <int value="2" label="NaCl error"/>
+  <int value="3" label="Microphone error"/>
+</enum>
+
+<enum name="HotwordMediaStreamResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Unknown error"/>
+  <int value="2" label="NotSupportedError"/>
+  <int value="3" label="PermissionDeniedError"/>
+  <int value="4" label="ConstraintNotSatisfiedError"/>
+  <int value="5" label="OverconstrainedError"/>
+  <int value="6" label="NotFoundError"/>
+  <int value="7" label="AbortError"/>
+  <int value="8" label="SourceUnavailableError"/>
+  <int value="9" label="PermissionDismissedError"/>
+  <int value="10" label="InvalidStateError"/>
+  <int value="11" label="DevicesNotFoundError"/>
+  <int value="12" label="InvalidSecurityOriginError"/>
+</enum>
+
+<enum name="HotwordNaClMessageTimeout" type="int">
+  <int value="0" label="REQUEST_MODEL"/>
+  <int value="1" label="MODEL_LOADED"/>
+  <int value="2" label="READY_FOR_AUDIO"/>
+  <int value="3" label="STOPPED"/>
+  <int value="4" label="HOTWORD_DETECTED"/>
+  <int value="5" label="MS_CONFIGURED"/>
+</enum>
+
+<enum name="HotwordNaClPluginLoadResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Unknown error"/>
+  <int value="2" label="Module crash"/>
+  <int value="3" label="Module not found"/>
+</enum>
+
+<enum name="HotwordPrefState" type="int">
+  <int value="0" label="Preference not set"/>
+  <int value="1" label="'Classic' hotwording enabled"/>
+  <int value="2" label="Hotwording disabled"/>
+  <int value="3" label="Always-on hotwording enabled"/>
+</enum>
+
+<enum name="HotwordTriggerSource" type="int">
+  <int value="0" label="Launcher (except when always-on is enabled)"/>
+  <int value="1" label="NTP or google.com"/>
+  <int value="2" label="Always-On"/>
+  <int value="3" label="Training Mode"/>
+</enum>
+
+<enum name="Hresult" type="int">
+  <int value="-2147467262" label="E_NOINTERFACE"/>
+  <int value="-2147467259" label="E_FAIL"/>
+  <int value="-2147417848" label="RPC_E_DISCONNECTED"/>
+  <int value="-2147221164" label="REGDB_E_CLASSNOTREG"/>
+  <int value="-2147219455" label="GOOPDATE_E_NO_NETWORK"/>
+  <int value="-2147219437" label="GOOPDATE_E_APP_UPDATE_DISABLED_BY_POLICY"/>
+  <int value="-2147219198" label="GOOPDATEINSTALL_E_INSTALLER_FAILED"/>
+  <int value="-2147024894" label="ERROR_FILE_NOT_FOUND"/>
+  <int value="-2147024893" label="ERROR_PATH_NOT_FOUND"/>
+  <int value="-2147024891" label="ERROR_ACCESS_DENIED"/>
+  <int value="-2147024703" label="ERROR_BAD_EXE_FORMAT"/>
+  <int value="-2147024110" label="ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY"/>
+  <int value="-2147023838" label="ERROR_SERVICE_DISABLED"/>
+  <int value="-2147023673" label="ERROR_CANCELLED"/>
+  <int value="-2147023504" label="ERROR_FILE_CORRUPT"/>
+  <int value="-2147023436" label="ERROR_TIMEOUT"/>
+  <int value="-2147023179" label="RPC_S_UNKNOWN_IF"/>
+  <int value="-2147023174" label="RPC_S_SERVER_UNAVAILABLE"/>
+  <int value="-2147012894" label="WININET_E_TIMEOUT"/>
+  <int value="-2147012889" label="WININET_E_NAME_NOT_RESOLVED"/>
+  <int value="-2147012867" label="WININET_E_CANNOT_CONNECT"/>
+  <int value="-2147012866" label="WININET_E_CONNECTION_ABORTED"/>
+  <int value="-2147009295" label="ERROR_INSTALL_PACKAGE_NOT_FOUND"/>
+  <int value="-2146959355" label="CO_E_SERVER_EXEC_FAILURE"/>
+  <int value="-1606219753" label="GOOPDATE_E_NON_BLOCKING_CALL_PENDING"/>
+  <int value="-1606219747" label="GOOPDATE_E_APP_USING_EXTERNAL_UPDATER"/>
+</enum>
+
+<enum name="HttpAuthCount" type="int">
+  <int value="0" label="Basic Start"/>
+  <int value="1" label="Basic Reject"/>
+  <int value="2" label="Digest Start"/>
+  <int value="3" label="Digest Reject"/>
+  <int value="4" label="NTLM Start"/>
+  <int value="5" label="NTLM Reject"/>
+  <int value="6" label="Negotiate Start"/>
+  <int value="7" label="Negotiate Reject"/>
+</enum>
+
+<enum name="HttpAuthPromptType" type="int">
+  <int value="0" label="Main frame with interstitial">
+    Auth prompt displayed over a blank interstitial
+  </int>
+  <int value="1" label="Main frame without interstitial">
+    Auth prompt displayed for the main frame, without a blank interstitial
+  </int>
+  <int value="2" label="Same origin subresource">
+    Auth prompt displayed for a subresource from the same origin
+  </int>
+  <int value="3" label="Cross origin subresource">
+    Auth prompt displayed for a subresource from a different origin
+  </int>
+</enum>
+
+<enum name="HttpAuthResource" type="int">
+  <int value="0" label="Top Page Allowed"/>
+  <int value="1" label="Same-domain Sub-resource Allowed"/>
+  <int value="2" label="Cross-domain Sub-resource Blocked"/>
+  <int value="3" label="Cross-domain Sub-resource Allowed"/>
+</enum>
+
+<enum name="HttpAuthTarget" type="int">
+  <int value="0" label="Basic Proxy"/>
+  <int value="1" label="Basic Secure Proxy"/>
+  <int value="2" label="Basic Server"/>
+  <int value="3" label="Basic Secure Server"/>
+  <int value="4" label="Digest Proxy"/>
+  <int value="5" label="Digest Secure Proxy"/>
+  <int value="6" label="Digest Server"/>
+  <int value="7" label="Digest Secure Server"/>
+  <int value="8" label="NTLM Proxy"/>
+  <int value="9" label="NTLM Secure Proxy"/>
+  <int value="10" label="NTLM Server"/>
+  <int value="11" label="NTLM Secure Server"/>
+  <int value="12" label="Negotiate Proxy"/>
+  <int value="13" label="Negotiate Secure Proxy"/>
+  <int value="14" label="Negotiate Server"/>
+  <int value="15" label="Negotiate Secure Server"/>
+</enum>
+
+<enum name="HttpCachePattern" type="int">
+  <int value="0" label="Undefined"/>
+  <int value="1" label="Not Covered"/>
+  <int value="2" label="Not Cached"/>
+  <int value="3" label="Used"/>
+  <int value="4" label="Validated"/>
+  <int value="5" label="Updated"/>
+  <int value="6" label="CantConditionalize"/>
+</enum>
+
+<enum name="HttpCacheValidationCause" type="int">
+  <int value="0" label="Undefined"/>
+  <int value="1" label="Vary Mismatch"/>
+  <int value="2" label="Validate Flag"/>
+  <int value="3" label="Stale Resource"/>
+  <int value="4" label="Zero Freshness"/>
+</enum>
+
+<enum name="HttpHeaderParserEvent" type="int">
+  <int value="0" label="PARSER_INVOKED"/>
+  <int value="1" label="HTTP_09_RESPONSE"/>
+  <int value="2" label="ALLOWED_TRUNCATED_HEADERS"/>
+  <int value="3" label="SKIPPED_WS_PREFIX"/>
+  <int value="4" label="SKIPPED_NON_WS_PREFIX"/>
+  <int value="5" label="HTTP_09_RESPONSE_OVER_HTTP"/>
+  <int value="6" label="HTTP_09_RESPONSE_OVER_SSL"/>
+  <int value="7" label="HEADER_HTTP_09_ON_REUSED_SOCKET"/>
+</enum>
+
+<enum name="HttpPipelineStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Redirected"/>
+  <int value="2" label="Certificate error"/>
+  <int value="3" label="Bad HTTP response code"/>
+  <int value="4" label="Network error"/>
+  <int value="5" label="Response too large"/>
+  <int value="6" label="Response too small"/>
+  <int value="7" label="Response content mismatch"/>
+  <int value="8" label="Bad HTTP version"/>
+  <int value="9" label="Corrupt stats response"/>
+</enum>
+
+<enum name="HttpResponseCode" type="int">
+  <int value="100" label="100: Continue"/>
+  <int value="101" label="101: Switching Protocols"/>
+  <int value="200" label="200: OK"/>
+  <int value="201" label="201: Created"/>
+  <int value="202" label="202: Accepted"/>
+  <int value="203" label="203: Non-Authoritative Information"/>
+  <int value="204" label="204: No Content"/>
+  <int value="205" label="205: Reset Content"/>
+  <int value="206" label="206: Partial Content"/>
+  <int value="300" label="300: Multiple Choices"/>
+  <int value="301" label="301: Moved Permanently"/>
+  <int value="302" label="302: Found"/>
+  <int value="303" label="303: See Other"/>
+  <int value="304" label="304: Not Modified"/>
+  <int value="305" label="305: Use Proxy"/>
+  <int value="306" label="306: (Unused)"/>
+  <int value="307" label="307: Temporary Redirect"/>
+  <int value="400" label="400: Bad Request"/>
+  <int value="401" label="401: Unauthorized"/>
+  <int value="402" label="402: Payment Required"/>
+  <int value="403" label="403: Forbidden"/>
+  <int value="404" label="404: Not Found"/>
+  <int value="405" label="405: Method Not Allowed"/>
+  <int value="406" label="406: Not Acceptable"/>
+  <int value="407" label="407: Proxy Authentication Required"/>
+  <int value="408" label="408: Request Timeout"/>
+  <int value="409" label="409: Conflict"/>
+  <int value="410" label="410: Gone"/>
+  <int value="411" label="411: Length Required"/>
+  <int value="412" label="412: Precondition Failed"/>
+  <int value="413" label="413: Request Entity Too Large"/>
+  <int value="414" label="414: Request-URI Too Long"/>
+  <int value="415" label="415: Unsupported Media Type"/>
+  <int value="416" label="416: Requested Range Not Satisfiable"/>
+  <int value="417" label="417: Expectation Failed"/>
+  <int value="500" label="500: Internal Server Error"/>
+  <int value="501" label="501: Not Implemented"/>
+  <int value="502" label="502: Bad Gateway"/>
+  <int value="503" label="503: Service Unavailable"/>
+  <int value="504" label="504: Gateway Timeout"/>
+  <int value="505" label="505: HTTP Version Not Supported"/>
+</enum>
+
+<enum name="HttpServerPropertiesUpdatePrefsLocation" type="int">
+  <int value="0" label="SUPPORTS_SPDY"/>
+  <int value="1" label="HTTP_11_REQUIRED"/>
+  <int value="2" label="SET_ALTERNATIVE_SERVICE"/>
+  <int value="3" label="MARK_ALTERNATIVE_SERVICE_BROKEN"/>
+  <int value="4" label="MARK_ALTERNATIVE_SERVICE_RECENTLY_BROKEN"/>
+  <int value="5" label="CONFIRM_ALTERNATIVE_SERVICE"/>
+  <int value="6" label="CLEAR_ALTERNATIVE_SERVICE"/>
+  <int value="7" label="SET_SPDY_SETTING"/>
+  <int value="8" label="CLEAR_SPDY_SETTINGS"/>
+  <int value="9" label="CLEAR_ALL_SPDY_SETTINGS"/>
+  <int value="10" label="SET_SUPPORTS_QUIC"/>
+  <int value="11" label="SET_SERVER_NETWORK_STATS"/>
+  <int value="12" label="DETECTED_CORRUPTED_PREFS"/>
+</enum>
+
+<enum name="HttpSocketType" type="int">
+  <int value="0" label="UNUSED">newly connected socket</int>
+  <int value="1" label="UNUSED_IDLE">
+    connected unused socket (idle prior to use)
+  </int>
+  <int value="2" label="REUSED_IDLE">previously used (keep-alive?) socket</int>
+</enum>
+
+<enum name="HttpStatusLineStatus" type="int">
+  <int value="0" label="OK">Spec-compliant status line</int>
+  <int value="1" label="EMPTY">Empty status line</int>
+  <int value="2" label="NOT_HTTP">Incorrect protocol name</int>
+  <int value="3" label="HTTP_CASE_MISMATCH">Protocol name not uppercase</int>
+  <int value="4" label="HTTP_NO_VERSION">Protocol version missing</int>
+  <int value="5" label="INVALID_VERSION">Protocol version invalid</int>
+  <int value="6" label="MULTI_DIGIT_VERSION">
+    Protocol version number is multiple digits
+  </int>
+  <int value="7" label="UNKNOWN_VERSION">Unknown but valid-looking version</int>
+  <int value="8" label="EXPLICIT_0_9">Explicitly specified HTTP/0.9</int>
+  <int value="9" label="MISSING_STATUS_CODE">Missing status code</int>
+  <int value="10" label="INVALID_STATUS_CODE">Invalid status code</int>
+  <int value="11" label="STATUS_CODE_TRAILING">
+    Trailing characters after status code
+  </int>
+  <int value="12" label="MISSING_REASON_PHRASE">Missing reason phrase</int>
+  <int value="13" label="REASON_DISALLOWED_CHARACTER">
+    Disallowed character in reason phrase
+  </int>
+  <int value="14" label="EXCESS_WHITESPACE">
+    Excess whitespace separating protocol version and status code
+  </int>
+  <int value="15" label="RESERVED_STATUS_CODE">
+    Status code from reserved ranges (0xx or 6xx-9xx)
+  </int>
+</enum>
+
+<enum name="IceCandidatePairTypes" type="int">
+  <int value="0" label="host_host"/>
+  <int value="1" label="host_srflx"/>
+  <int value="2" label="host_relay"/>
+  <int value="3" label="host_prflx"/>
+  <int value="4" label="srflx_host"/>
+  <int value="5" label="srflx_srflx"/>
+  <int value="6" label="srflx_relay"/>
+  <int value="7" label="srflx_prflx"/>
+  <int value="8" label="relay_host"/>
+  <int value="9" label="relay_srflx"/>
+  <int value="10" label="relay_relay"/>
+  <int value="11" label="relay_prflx"/>
+  <int value="12" label="prflx_host"/>
+  <int value="13" label="prflx_srflx"/>
+  <int value="14" label="prflx_relay"/>
+  <int value="15" label="host(private)_host(private)"/>
+  <int value="16" label="host(private)_host(public)"/>
+  <int value="17" label="host(public)_host(private)"/>
+  <int value="18" label="host(public)_host(public)"/>
+</enum>
+
+<enum name="IceConnectionStates" type="int">
+  <int value="0" label="IceConnectionNew"/>
+  <int value="1" label="IceConnectionChecking"/>
+  <int value="2" label="IceConnectionConnected"/>
+  <int value="3" label="IceconnectionCompleted"/>
+  <int value="4" label="IceconnectionFailed"/>
+  <int value="5" label="IceconnectionDisconnected"/>
+  <int value="6" label="IceconnectionClosed"/>
+</enum>
+
+<enum name="IceRegatheringReason" type="int">
+  <int value="0" label="NetworkChange"/>
+  <int value="1" label="NetworkFailure"/>
+</enum>
+
+<enum name="IceRestartState" type="int">
+  <int value="0" label="Connecting"/>
+  <int value="1" label="Connected"/>
+  <int value="2" label="Disconnected"/>
+</enum>
+
+<enum name="IDBContextForcedCloseReason" type="int">
+  <int value="0" label="DeleteOrigin">
+    A request was made to delete the data for an origin.
+  </int>
+  <int value="1" label="BackingStoreFailure">
+    An unrecoverable error occurred accessing the backing store.
+  </int>
+  <int value="2" label="InternalsPage">
+    A forced close was requested from the indexeddb-internals page.
+  </int>
+</enum>
+
+<enum name="IDBKeyPathType" type="int">
+  <int value="0" label="None">No key path.</int>
+  <int value="1" label="String">Key path is a string.</int>
+  <int value="2" label="Array">Key path is an array of strings.</int>
+</enum>
+
+<enum name="IDBLevelDBBackingStoreInternalErrorType" type="int">
+  <int value="0" label="IDBLevelDBBackingStoreReadError">
+    IndexedDB encountered an error attempting to read or decode a value from the
+    leveldb backing store, indicative of corruption or I/O error. Unused as of
+    M26.
+  </int>
+  <int value="1" label="IDBLevelDBBackingStoreWriteError">
+    IndexeDB encountered an error attempting to write or commit a value to the
+    leveldb backing store, indicative of I/O error. Unused as of M26.
+  </int>
+  <int value="2" label="IDBLevelDBBackingStoreConsistencyError">
+    IndexedDB encountered a consistency error in the leveldb backing store,
+    indicative of corruption or an coding error. Unused as of M26.
+  </int>
+  <int value="3" label="FindKeyInIndex"/>
+  <int value="4" label="GetIDBDatabaseMetaData"/>
+  <int value="5" label="GetIndexes"/>
+  <int value="6" label="GetKeyGeneratorCurrentNumber"/>
+  <int value="7" label="GetObjectStores"/>
+  <int value="8" label="GetRecord"/>
+  <int value="9" label="KeyExistsInObjectStore"/>
+  <int value="10" label="LoadCurrentRow"/>
+  <int value="11" label="SetupMetadata"/>
+  <int value="12" label="GetPrimaryKeyViaIndex"/>
+  <int value="13" label="KeyExistsInIndex"/>
+  <int value="14" label="VersionExists"/>
+  <int value="15" label="DeleteObjectStore"/>
+  <int value="16" label="SetMaxObjectStoreId"/>
+  <int value="17" label="SetMaxIndexId"/>
+  <int value="18" label="GetNewDatabaseId"/>
+  <int value="19" label="GetNewVersionNumber"/>
+  <int value="20" label="CreateIDBDatabaseMetaData"/>
+  <int value="21" label="DeleteDatabase"/>
+  <int value="22" label="TransactionCommit"/>
+  <int value="23" label="GetDatabaseNames"/>
+  <int value="24" label="ReadBlobJournal"/>
+  <int value="25" label="DecodeBlobJournal"/>
+  <int value="26" label="GetBlobKeyGeneratorCurrentNumber"/>
+  <int value="27" label="GetBlobInfoForRecord"/>
+</enum>
+
+<enum name="IDBLevelDBBackingStoreOpenResult" type="int">
+  <int value="0" label="OpenMemorySuccess">
+    An in-memory backing store was opened successfully.
+  </int>
+  <int value="1" label="OpenSuccess">
+    An on-disk backing store was opened successfully.
+  </int>
+  <int value="2" label="OpenFailedDirectory">
+    An on-disk backing store could not be opened or created because the
+    directory could not be opened or created. Cleanup will not be attempted.
+  </int>
+  <int value="3" label="OpenFailedUnknownSchema">
+    An on-disk backing store was opened but had an unknown schema version, due
+    to corruption or reverting to a previous version of Chrome. Cleanup will be
+    attempted.
+  </int>
+  <int value="4" label="OpenCleanupDestroyFailed">
+    An on-disk backing store failed to open; cleanup was attempted but the
+    database could not be destroyed.
+  </int>
+  <int value="5" label="OpenCleanupReopenFailed">
+    An on-disk backing store failed to open; cleanup was attempted but
+    re-opening the database failed.
+  </int>
+  <int value="6" label="OpenCleanupReopenSuccess">
+    An on-disk backing store failed to open; cleanup was attempted and the
+    database was then opened successfully.
+  </int>
+  <int value="7" label="OpenFailedIOErrCheckingSchema">
+    An on-disk backing store was opened but leveldb failed to read the schema
+    version.
+  </int>
+  <int value="8" label="OpenFailedUnknownErr"/>
+  <int value="9" label="OpenMemoryFailed">
+    An in-memory backing store failed to open.
+  </int>
+  <int value="10" label="OpenNonASCII">
+    A database with non-ascii characters in its path was opened (with either
+    success or failure).
+  </int>
+  <int value="11" label="OpenAttemptDiskFull">
+    An open failed on a machine with a full disk. No cleanup was attempted.
+  </int>
+  <int value="12" label="OpenAttemptPathTooLong">
+    Open failed because either a path component or the overall path was too
+    long.
+  </int>
+  <int value="13" label="OpenAttemptNoRecovery">
+    An open attempt failed with an I/O error that doesn't necessitate a recovery
+    attempt.
+  </int>
+  <int value="14" label="OpenAttemptPriorCorruption">
+    The corrupted open database was deleted.
+  </int>
+  <int value="15" label="OpenCleanupBlobJournalFailed">
+    Open failed because the blob journal could not be cleaned up.
+  </int>
+</enum>
+
+<enum name="IdleSocketFate" type="int">
+  <int value="0" label="Reuse: Reused">
+    Reusing an idle socket that is previously used.
+  </int>
+  <int value="1" label="Reuse: Unused">
+    Reusing an idle socket that is not previously used.
+  </int>
+  <int value="2" label="Reuse: Unusable">
+    Reusing an idle socket and found it unusable.
+  </int>
+  <int value="3" label="Release: Unusable">
+    When releasing the socket to the pool, found it unusable.
+  </int>
+  <int value="4" label="CleanUp: Forced">
+    Cleaning up the idle socket is forced.
+  </int>
+  <int value="5" label="CleanUp: TimedOutReused">
+    Cleaning up a timed-out, reused idle socket.
+  </int>
+  <int value="6" label="CleanUp: TimedOutUnused">
+    Cleaning up a timed-out, unused idle socket.
+  </int>
+  <int value="7" label="CleanUp: Unusable">
+    Cleaning up an unusable idle socket.
+  </int>
+  <int value="8" label="CloseOne">
+    Socket is closed usually when per-origin socket limit is reached.
+  </int>
+</enum>
+
+<enum name="IdleTaskStatus" type="int">
+  <int value="0" label="IdleTaskNotStarted"/>
+  <int value="1" label="IdleTaskStarted"/>
+  <int value="2" label="IdleTaskCompleted"/>
+  <int value="3" label="IdleTaskFailed"/>
+  <int value="4" label="IdleTaskSwitchedToMainThreadTask"/>
+  <int value="5" label="IdleTaskNotSupported"/>
+</enum>
+
+<enum name="IMECommitType" type="int">
+  <obsolete>
+    Deprecated 03/2015, and replaced by IMECommitType2.
+  </obsolete>
+  <int value="0" label="X -&gt; X(0)">
+    Types X, commits X as the top suggestion.
+  </int>
+  <int value="1" label="X -&gt; Y(0)">
+    Types X, commits Y as the top suggestion.
+  </int>
+  <int value="2" label="X -&gt; X(1)">
+    Types X, commits X as the non-top suggestion.
+  </int>
+  <int value="3" label="X -&gt; Y(1)">
+    Types X, commits Y as the non-top suggestion.
+  </int>
+  <int value="4" label="Prediction">Commits a prediction suggestion.</int>
+  <int value="5" label="Revert">
+    Reverts the previous auto-corrected and committed word.
+  </int>
+</enum>
+
+<enum name="IMECommitType2" type="int">
+  <int value="0" label="X -&gt; X(0)">
+    Types X, commits X as the top suggestion.
+  </int>
+  <int value="1" label="X -&gt; Y(0)">
+    Types X, commits Y as the top suggestion.
+  </int>
+  <int value="2" label="X -&gt; X(1)">
+    Types X, commits X as the 2nd suggestion.
+  </int>
+  <int value="3" label="X -&gt; Y(1)">
+    Types X, commits Y as the 2nd suggestion.
+  </int>
+  <int value="4" label="X -&gt; X(2)">
+    Types X, commits X as the 3rd/other suggestion.
+  </int>
+  <int value="5" label="X -&gt; Y(2)">
+    Types X, commits Y as the 3rd/other suggestion.
+  </int>
+  <int value="6" label="Prediction">Commits a prediction suggestion.</int>
+  <int value="7" label="Revert">
+    Reverts the previous auto-corrected and committed word.
+  </int>
+  <int value="8" label="Voice">The commit is triggered by voice input.</int>
+</enum>
+
+<enum name="IMECorrectionLevel" type="int">
+  <int value="0" label="Off"/>
+  <int value="1" label="Modest"/>
+  <int value="2" label="Aggressive"/>
+</enum>
+
+<enum name="IMEGestureTypingEvent" type="int">
+  <int value="0" label="Typed">A word was typed with a gesture.</int>
+  <int value="1" label="Deleted">
+    A gesture-typed word was deleted after being typed.
+  </int>
+  <int value="2" label="Replaced 0">
+    A gesture-typed word was replaced by the first suggestion.
+  </int>
+  <int value="3" label="Replaced 1">
+    A gesture-typed word was replaced by the second suggestion.
+  </int>
+  <int value="4" label="Replaced 2">
+    A gesture-typed word was replaced by the third suggestion.
+  </int>
+</enum>
+
+<enum name="IMERegisterProxyView" type="int">
+  <int value="0" label="Success">Success in registering ProxyView to IMM</int>
+  <int value="1" label="Failure">Failure in registering ProxyView to IMM</int>
+  <int value="2" label="DetectionFailure">Failure in detecting the result</int>
+  <int value="3" label="ReplicaInputConnection">
+    ReplicaInputConnection was used instead
+  </int>
+</enum>
+
+<enum name="IMESwitchType" type="int">
+  <int value="0" label="By tray menu">IME switches by tray menu</int>
+  <int value="1" label="By accelerator">IME switches by accelerator</int>
+</enum>
+
+<enum name="IMEVKLayout" type="int">
+  <int value="0" label="Compact"/>
+  <int value="1" label="CompactSymbol"/>
+  <int value="2" label="CompactMore"/>
+  <int value="3" label="Full"/>
+  <int value="4" label="A11y"/>
+  <int value="5" label="Handwriting"/>
+  <int value="6" label="Emoji"/>
+</enum>
+
+<enum name="ImportantSitesReason" type="int">
+  <int value="0" label="Engagement"/>
+  <int value="1" label="Durable"/>
+  <int value="2" label="Bookmarks"/>
+  <int value="3" label="Home Screen"/>
+  <int value="4" label="Notifications"/>
+</enum>
+
+<enum name="ImporterType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="IMPORTER_METRICS_IE">IE (Windows-only)</int>
+  <int value="2" label="IMPORTER_METRICS_FIREFOX2">Firefox 2</int>
+  <int value="3" label="IMPORTER_METRICS_FIREFOX3">Firefox 3 (and later)</int>
+  <int value="4" label="IMPORTER_METRICS_SAFARI">Safari (Mac-only)</int>
+  <int value="5" label="IMPORTER_METRICS_GOOGLE_TOOLBAR5">Google Toolbar</int>
+  <int value="6" label="IMPORTER_METRICS_BOOKMARKS_FILE">
+    A bookmarks.html file
+  </int>
+  <int value="7" label="IMPORTER_METRICS_EDGE">Edge (Windows-only)</int>
+</enum>
+
+<enum name="IncidentType" type="int">
+  <int value="1" label="TrackedPreference"/>
+  <int value="2" label="BinaryIntegrity"/>
+  <int value="3" label="BlacklistLoad"/>
+  <int value="4" label="OmniboxInteraction"/>
+  <int value="5" label="VariationsSeedSignature"/>
+  <int value="6" label="ResourceRequest"/>
+  <int value="7" label="SuspiciousModule"/>
+</enum>
+
+<enum name="Inconsistencies" type="int">
+  <int value="1" label="RangeChecksum"/>
+  <int value="2" label="BucketOrder"/>
+  <int value="3" label="RangeChecksum BucketOrder"/>
+  <int value="4" label="CountHigh"/>
+  <int value="5" label="CountHigh RangeChecksum"/>
+  <int value="6" label="CountHigh BucketOrder"/>
+  <int value="7" label="CountHigh RangeChecksum BucketOrder"/>
+  <int value="8" label="CountLow"/>
+  <int value="9" label="CountLow RangeChecksum"/>
+  <int value="10" label="CountLow BucketOrder"/>
+  <int value="11" label="CountLow RangeChecksum BucketOrder"/>
+</enum>
+
+<enum name="IndexedDatabaseMethods" type="int">
+  <int value="0" label="CreateObjectStore()"/>
+  <int value="1" label="DeleteObjectStore()"/>
+  <int value="2" label="Transaction()"/>
+  <int value="3" label="DeleteDatabase()"/>
+  <int value="4" label="Open()"/>
+</enum>
+
+<enum name="InfoBarIdentifier" type="int">
+  <int value="-1" label="INVALID"/>
+  <int value="0" label="TEST_INFOBAR"/>
+  <int value="1" label="APP_BANNER_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="2" label="APP_BANNER_INFOBAR_DELEGATE_DESKTOP"/>
+  <int value="3" label="ANDROID_DOWNLOAD_MANAGER_OVERWRITE_INFOBAR_DELEGATE"/>
+  <int value="4" label="CHROME_DOWNLOAD_MANAGER_OVERWRITE_INFOBAR_DELEGATE"/>
+  <int value="5" label="DOWNLOAD_REQUEST_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="6" label="FULLSCREEN_INFOBAR_DELEGATE"/>
+  <int value="7" label="HUNG_PLUGIN_INFOBAR_DELEGATE"/>
+  <int value="8" label="HUNG_RENDERER_INFOBAR_DELEGATE"/>
+  <int value="9" label="MEDIA_STREAM_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="10" label="MEDIA_THROTTLE_INFOBAR_DELEGATE"/>
+  <int value="11" label="REQUEST_QUOTA_INFOBAR_DELEGATE"/>
+  <int value="12" label="DEV_TOOLS_CONFIRM_INFOBAR_DELEGATE"/>
+  <int value="13" label="EXTENSION_DEV_TOOLS_INFOBAR_DELEGATE"/>
+  <int value="14" label="INCOGNITO_CONNECTABILITY_INFOBAR_DELEGATE"/>
+  <int value="15" label="THEME_INSTALLED_INFOBAR_DELEGATE"/>
+  <int value="16" label="GEOLOCATION_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="17" label="THREE_D_API_INFOBAR_DELEGATE"/>
+  <int value="18" label="INSECURE_CONTENT_INFOBAR_DELEGATE"/>
+  <int value="19" label="MIDI_PERMISSION_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="20" label="PROTECTED_MEDIA_IDENTIFIER_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="21" label="NACL_INFOBAR_DELEGATE"/>
+  <int value="22"
+      label="OBSOLETE_DATA_REDUCTION_PROXY_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="23" label="NOTIFICATION_PERMISSION_INFOBAR_DELEGATE"/>
+  <int value="24" label="AUTO_SIGNIN_FIRST_RUN_INFOBAR_DELEGATE"/>
+  <int value="25" label="GENERATED_PASSWORD_SAVED_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="26" label="SAVE_PASSWORD_INFOBAR_DELEGATE"/>
+  <int value="27" label="PEPPER_BROKER_INFOBAR_DELEGATE"/>
+  <int value="28" label="PERMISSION_UPDATE_INFOBAR_DELEGATE"/>
+  <int value="29" label="DURABLE_STORAGE_PERMISSION_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="30" label="NPAPI_REMOVAL_INFOBAR_DELEGATE"/>
+  <int value="31" label="OUTDATED_PLUGIN_INFOBAR_DELEGATE"/>
+  <int value="32" label="PLUGIN_METRO_MODE_INFOBAR_DELEGATE"/>
+  <int value="33" label="RELOAD_PLUGIN_INFOBAR_DELEGATE"/>
+  <int value="34" label="PLUGIN_OBSERVER"/>
+  <int value="35" label="SSL_ADD_CERTIFICATE"/>
+  <int value="36" label="SSL_ADD_CERTIFICATE_INFOBAR_DELEGATE"/>
+  <int value="37" label="POPUP_BLOCKED_INFOBAR_DELEGATE"/>
+  <int value="38" label="CHROME_SELECT_FILE_POLICY"/>
+  <int value="39" label="KEYSTONE_PROMOTION_INFOBAR_DELEGATE"/>
+  <int value="40" label="COLLECTED_COOKIES_INFOBAR_DELEGATE"/>
+  <int value="41" label="INSTALLATION_ERROR_INFOBAR_DELEGATE"/>
+  <int value="42" label="ALTERNATE_NAV_INFOBAR_DELEGATE"/>
+  <int value="43" label="BAD_FLAGS_PROMPT"/>
+  <int value="44" label="DEFAULT_BROWSER_INFOBAR_DELEGATE"/>
+  <int value="45" label="GOOGLE_API_KEYS_INFOBAR_DELEGATE"/>
+  <int value="46" label="OBSOLETE_SYSTEM_INFOBAR_DELEGATE"/>
+  <int value="47" label="SESSION_CRASHED_INFOBAR_DELEGATE"/>
+  <int value="48" label="WEBSITE_SETTINGS_INFOBAR_DELEGATE"/>
+  <int value="49" label="AUTOFILL_CC_INFOBAR_DELEGATE"/>
+  <int value="50" label="TRANSLATE_INFOBAR_DELEGATE"/>
+  <int value="51" label="IOS_CHROME_SAVE_PASSWORD_INFOBAR_DELEGATE"/>
+  <int value="52" label="NATIVE_APP_INSTALLER_INFOBAR_DELEGATE"/>
+  <int value="53" label="NATIVE_APP_LAUNCHER_INFOBAR_DELEGATE"/>
+  <int value="54" label="NATIVE_APP_OPEN_POLICY_INFOBAR_DELEGATE"/>
+  <int value="55" label="RE_SIGN_IN_INFOBAR_DELEGATE"/>
+  <int value="56" label="SHOW_PASSKIT_ERROR_INFOBAR_DELEGATE"/>
+  <int value="57" label="READER_MODE_INFOBAR_DELEGATE"/>
+  <int value="58" label="SYNC_ERROR_INFOBAR_DELEGATE"/>
+  <int value="59" label="UPGRADE_INFOBAR_DELEGATE"/>
+  <int value="60" label="CHROME_WINDOW_ERROR"/>
+  <int value="61" label="CONFIRM_DANGEROUS_DOWNLOAD"/>
+  <int value="62" label="WINDOWS_DESKTOP_SEARCH_INFOBAR_DELEGATE"/>
+  <int value="63" label="UPDATE_PASSWORD_INFOBAR_DELEGATE"/>
+  <int value="64" label="DATA_REDUCTION_PROMO_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="65" label="AUTOFILL_CC_ASSIST_INFOBAR_DELEGATE"/>
+  <int value="66" label="SUBRESOURCE_FILTER_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="67" label="INSTANT_APPS_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="68" label="DATA_REDUCTION_PROXY_PREVIEW_INFOBAR_DELEGATE"/>
+  <int value="69" label="SCREEN_CAPTURE_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="70" label="GROUPED_PERMISSION_INFOBAR_DELEGATE_ANDROID"/>
+  <int value="71" label="OFFLINE_PAGE_INFOBAR_DELEGATE"/>
+  <int value="72" label="SEARCH_GEOLOCATION_DISCLOSURE_INFOBAR_DELEGATE"/>
+</enum>
+
+<enum name="InfoBarResponse" type="int">
+  <int value="0" label="No Response selected"/>
+  <int value="1" label="Save Password"/>
+  <int value="2" label="Never for this site (blacklist / exception)"/>
+  <int value="3" label="InfoBar dismissed by clicking the 'X'"/>
+</enum>
+
+<enum name="InjectedAdType" type="int">
+  <int value="0" label="Invalid"/>
+  <int value="1" label="IFrame"/>
+  <int value="2" label="Embed"/>
+  <int value="3" label="Anchor"/>
+  <int value="4" label="Script"/>
+</enum>
+
+<enum name="InputMethodCategory" type="int">
+  <int value="0" label="Unkown"/>
+  <int value="1" label="XKB">XKeyboard</int>
+  <int value="2" label="Chinese"/>
+  <int value="3" label="Japanese"/>
+  <int value="4" label="Korean"/>
+  <int value="5" label="M17n">Multilingualization</int>
+  <int value="6" label="T13n">Transliteration</int>
+</enum>
+
+<enum name="InputMethodID" type="int">
+  <int value="109700" label="xkb:am:phonetic:arm">
+    Armenian Phonetic keyboard
+  </int>
+  <int value="109800" label="xkb:be::fra">Belgian keyboard</int>
+  <int value="109801" label="xkb:be::ger">Belgian keyboard</int>
+  <int value="109802" label="xkb:be::nld">Belgian keyboard</int>
+  <int value="109803" label="xkb:bg::bul">Bulgarian keyboard</int>
+  <int value="109804" label="xkb:bg:phonetic:bul">
+    Bulgarian Phonetic keyboard
+  </int>
+  <int value="109805" label="xkb:br::por">Brazilian keyboard</int>
+  <int value="109806" label="xkb:by::bel">Belarusian keyboard</int>
+  <int value="109900" label="xkb:ca::fra">Canadian French keyboard</int>
+  <int value="109901" label="xkb:ca:eng:eng">Canadian English keyboard</int>
+  <int value="109902" label="xkb:ca:multix:fra">
+    Canadian Multilingual keyboard
+  </int>
+  <int value="109903" label="xkb:ch::ger">Swiss keyboard</int>
+  <int value="109904" label="xkb:ch:fr:fra">Swiss French keyboard</int>
+  <int value="109905" label="xkb:cz::cze">Czech keyboard</int>
+  <int value="109906" label="xkb:cz:qwerty:cze">Czech QWERTY keyboard</int>
+  <int value="110000" label="xkb:de::ger">German keyboard</int>
+  <int value="110001" label="xkb:de:neo:ger">German NEO 2 keyboard</int>
+  <int value="110002" label="xkb:dk::dan">Danish keyboard</int>
+  <int value="110100" label="xkb:ee::est">Estonian keyboard</int>
+  <int value="110101" label="xkb:es::spa">Spanish keyboard</int>
+  <int value="110102" label="xkb:es:cat:cat">Catalan keyboard</int>
+  <int value="110200" label="xkb:fi::fin">Finnish keyboard</int>
+  <int value="110201" label="xkb:fr::fra">French keyboard</int>
+  <int value="110300" label="xkb:gb:dvorak:eng">UK Dvorak keyboard</int>
+  <int value="110301" label="xkb:gb:extd:eng">UK keyboard</int>
+  <int value="110302" label="xkb:ge::geo">Georgian keyboard</int>
+  <int value="110303" label="xkb:gr::gre">Greek keyboard</int>
+  <int value="110400" label="xkb:hr::scr">Croatian keyboard</int>
+  <int value="110401" label="xkb:hu::hun">Hungarian keyboard</int>
+  <int value="110500" label="xkb:ie::ga">Irish keyboard</int>
+  <int value="110501" label="xkb:il::heb">Hebrew keyboard</int>
+  <int value="110502" label="xkb:is::ice">Icelandic keyboard</int>
+  <int value="110503" label="xkb:it::ita">Italian keyboard</int>
+  <int value="110600" label="xkb:jp::jpn">Japanese keyboard</int>
+  <int value="110800" label="xkb:latam::spa">Latin American keyboard</int>
+  <int value="110801" label="xkb:lt::lit">Lithuanian keyboard</int>
+  <int value="110802" label="xkb:lv:apostrophe:lav">Latvian keyboard</int>
+  <int value="110900" label="xkb:mn::mon">Mongolian keyboard</int>
+  <int value="111000" label="xkb:no::nob">Norwegian keyboard</int>
+  <int value="111200" label="xkb:pl::pol">Polish keyboard</int>
+  <int value="111201" label="xkb:pt::por">Portuguese keyboard</int>
+  <int value="111400" label="xkb:ro::rum">Romanian keyboard</int>
+  <int value="111401" label="xkb:ro:std:rum">Romanian Standard keyboard</int>
+  <int value="111402" label="xkb:rs::srp">Serbian keyboard</int>
+  <int value="111403" label="xkb:ru::rus">Russian keyboard</int>
+  <int value="111404" label="xkb:ru:phonetic:rus">
+    Russian Phonetic keyboard
+  </int>
+  <int value="111500" label="xkb:se::swe">Swedish keyboard</int>
+  <int value="111501" label="xkb:si::slv">Slovenian keyboard</int>
+  <int value="111502" label="xkb:sk::slo">Slovakian keyboard</int>
+  <int value="111600" label="xkb:tr::tur">Turkish keyboard</int>
+  <int value="111700" label="xkb:ua::ukr">Ukrainian keyboard</int>
+  <int value="111701" label="xkb:us::eng">US keyboard</int>
+  <int value="111702" label="xkb:us::fil">US keyboard</int>
+  <int value="111703" label="xkb:us::ind">US keyboard</int>
+  <int value="111704" label="xkb:us::msa">US keyboard</int>
+  <int value="111705" label="xkb:us:altgr-intl:eng">US Extended keyboard</int>
+  <int value="111706" label="xkb:us:colemak:eng">US Colemak keyboard</int>
+  <int value="111707" label="xkb:us:dvorak:eng">US Dvorak keyboard</int>
+  <int value="111708" label="xkb:us:intl:eng">US International keyboard</int>
+  <int value="111709" label="xkb:us:intl:nld">US International keyboard</int>
+  <int value="111710" label="xkb:us:intl:por">US International keyboard</int>
+  <int value="209700" label="zh-hant-t-i0-array-1992">Array input method</int>
+  <int value="209900" label="zh-hant-t-i0-cangjie-1987">
+    Cangjie input method
+  </int>
+  <int value="209901" label="zh-hant-t-i0-cangjie-1987-x-m0-simplified">
+    Quick input method
+  </int>
+  <int value="210000" label="zh-hant-t-i0-dayi-1988">Dayi input method</int>
+  <int value="211200" label="zh-hant-t-i0-pinyin">
+    Traditional Pinyin input method
+  </int>
+  <int value="211201" label="zh-t-i0-pinyin">Pinyin input method</int>
+  <int value="211700" label="zh-hant-t-i0-und">Zhuyin input method</int>
+  <int value="211900" label="zh-t-i0-wubi-1986">Wubi input method</int>
+  <int value="310600" label="nacl_mozc_jp">
+    Google Japanese Input (for Japanese keyboard)
+  </int>
+  <int value="311700" label="nacl_mozc_us">
+    Google Japanese Input (for US keyboard)
+  </int>
+  <int value="405000" label="hangul_2set">Hangul 2 Set</int>
+  <int value="405100" label="hangul_3set390">Hangul 3 Set (390)</int>
+  <int value="405101" label="hangul_3setfinal">Hangul 3 Set (Final)</int>
+  <int value="405102" label="hangul_3setnoshift">Hangul 3 Set (No Shift)</int>
+  <int value="409700" label="hangul_ahnmatae">Hangul Ahnmatae</int>
+  <int value="411400" label="hangul_romaja">Hangul Romaja</int>
+  <int value="509700" label="vkd_ar">Arabic keyboard</int>
+  <int value="509800" label="vkd_bn_phone">Bengali keyboard (Phonetic)</int>
+  <int value="509900" label="vkd_ckb_ar">
+    Sorani Kurdish Arabic-based keyboard
+  </int>
+  <int value="509901" label="vkd_ckb_en">
+    Sorani Kurdish English-based keyboard
+  </int>
+  <int value="510000" label="vkd_deva_phone">
+    Devanagari keyboard (Phonetic)
+  </int>
+  <int value="510100" label="vkd_ethi">Ethiopic keyboard</int>
+  <int value="510200" label="vkd_fa">Persian keyboard</int>
+  <int value="510300" label="vkd_gu_phone">Gujarati keyboard (Phonetic)</int>
+  <int value="510700" label="vkd_km">Khmer keyboard</int>
+  <int value="510701" label="vkd_kn_phone">Kannada keyboard (Phonetic)</int>
+  <int value="510800" label="vkd_lo">Lao keyboard</int>
+  <int value="510900" label="vkd_ml_phone">Malayalam keyboard (Phonetic)</int>
+  <int value="510901" label="vkd_my">Myanmar keyboard</int>
+  <int value="510902" label="vkd_my_myansan">Myanmar Myansan keyboard</int>
+  <int value="511000" label="vkd_ne_inscript">Nepali keyboard (InScript)</int>
+  <int value="511001" label="vkd_ne_phone">Nepali keyboard (Phonetic)</int>
+  <int value="511500" label="vkd_si">Sinhala keyboard</int>
+  <int value="511600" label="vkd_ta_inscript">Tamil keyboard (InScript)</int>
+  <int value="511601" label="vkd_ta_itrans">Tamil keyboard (itrans)</int>
+  <int value="511602" label="vkd_ta_phone">Tamil keyboard (Phonetic)</int>
+  <int value="511603" label="vkd_ta_tamil99">Tamil keyboard (Tamil99)</int>
+  <int value="511604" label="vkd_ta_typewriter">
+    Tamil keyboard (Typewriter)
+  </int>
+  <int value="511605" label="vkd_te_phone">Telugu keyboard (Phonetic)</int>
+  <int value="511606" label="vkd_th">Thai keyboard (Kedmanee)</int>
+  <int value="511607" label="vkd_th_pattajoti">Thai keyboard (Pattachote)</int>
+  <int value="511608" label="vkd_th_tis">Thai keyboard (TIS 820-2531)</int>
+  <int value="511800" label="vkd_vi_tcvn">Vietnamese keyboard (TCVN)</int>
+  <int value="511801" label="vkd_vi_telex">Vietnamese keyboard (Telex)</int>
+  <int value="511802" label="vkd_vi_viqr">Vietnamese keyboard (VIQR)</int>
+  <int value="511803" label="vkd_vi_vni">Vietnamese keyboard (VNI)</int>
+  <int value="609700" label="am-t-i0-und">Transliteration Amharic</int>
+  <int value="609701" label="ar-t-i0-und">Transliteration Arabic</int>
+  <int value="609800" label="bn-t-i0-und">Transliteration Bengali</int>
+  <int value="609801" label="braille">Braille Keyboard</int>
+  <int value="610100" label="el-t-i0-und">Transliteration Greek</int>
+  <int value="610200" label="fa-t-i0-und">Transliteration Persian</int>
+  <int value="610300" label="gu-t-i0-und">Transliteration Gujarati</int>
+  <int value="610400" label="he-t-i0-und">Transliteration Hebrew</int>
+  <int value="610401" label="hi-t-i0-und">Transliteration Hindi</int>
+  <int value="610700" label="kn-t-i0-und">Transliteration Kannada</int>
+  <int value="610900" label="ml-t-i0-und">Transliteration Malayalam</int>
+  <int value="610901" label="mr-t-i0-und">Transliteration Marathi</int>
+  <int value="611000" label="ne-t-i0-und">Transliteration Nepali</int>
+  <int value="611100" label="or-t-i0-und">Transliteration Oriya</int>
+  <int value="611200" label="pa-t-i0-und">Transliteration Punjabi</int>
+  <int value="611500" label="sa-t-i0-und">Transliteration Sanskrit</int>
+  <int value="611501" label="sr-t-i0-und">Transliteration Serbian</int>
+  <int value="611600" label="ta-t-i0-und">Transliteration Tamil</int>
+  <int value="611601" label="te-t-i0-und">Transliteration Telugu</int>
+  <int value="611602" label="ti-t-i0-und">Transliteration Tigrinya</int>
+  <int value="611700" label="ur-t-i0-und">Transliteration Urdu</int>
+</enum>
+
+<enum name="InputMethodID2" type="int">
+  <int value="-2082426075" label="xkb:cz:qwerty:cze">Czech QWERTY keyboard</int>
+  <int value="-2039513744" label="xkb:ru::rus">Russian keyboard</int>
+  <int value="-2004968165" label="xkb:gb:dvorak:eng">UK Dvorak keyboard</int>
+  <int value="-2004834194" label="xkb:ca:multix:fra">
+    Canadian Multilingual keyboard
+  </int>
+  <int value="-1992142310" label="xkb:dk::dan">Danish keyboard</int>
+  <int value="-1972379678" label="vkd_deva_phone">
+    Devanagari keyboard (Phonetic)
+  </int>
+  <int value="-1957398030" label="ta-t-i0-und">Tamil transliteration</int>
+  <int value="-1955862460" label="xkb:ro::rum">Romanian keyboard</int>
+  <int value="-1951732875" label="xkb:be::nld">Belgian keyboard</int>
+  <int value="-1931838225" label="zh-hant-t-i0-cangjie-1987-x-m0-simplified">
+    Quick input method
+  </int>
+  <int value="-1899483055" label="vkd_my">Myanmar keyboard</int>
+  <int value="-1856842164" label="xkb:ge::geo">Georgian keyboard</int>
+  <int value="-1856063724" label="vkd_km">Khmer keyboard</int>
+  <int value="-1749961581" label="vkd_ta_inscript">
+    Tamil keyboard (InScript)
+  </int>
+  <int value="-1710145174" label="xkb:am:phonetic:arm">
+    Armenian Phonetic keyboard
+  </int>
+  <int value="-1709647399" label="xkb:mn::mon">Mongolian keyboard</int>
+  <int value="-1668610460" label="xkb:us:dvp:eng">
+    US Programmer Dvorak keyboard
+  </int>
+  <int value="-1667829653" label="zh-hant-t-i0-cangjie-1987">
+    Cangjie input method
+  </int>
+  <int value="-1591721678" label="vkd_ne_inscript">
+    Nepali keyboard (InScript)
+  </int>
+  <int value="-1474243589" label="xkb:it::ita">Italian keyboard</int>
+  <int value="-1408581676" label="xkb:gb:extd:eng">UK keyboard</int>
+  <int value="-1402880636" label="xkb:se::swe">Swedish keyboard</int>
+  <int value="-1396156987" label="vkd_ru_phone_aatseel">
+    Russian Phonetic (AATSEEL) keyboard
+  </int>
+  <int value="-1338032348" label="xkb:de:neo:ger">German NEO 2 keyboard</int>
+  <int value="-1288127107" label="vkd_vi_telex">
+    Vietnamese keyboard (Telex)
+  </int>
+  <int value="-1263201701" label="hi-t-i0-und">Hindi transliteration</int>
+  <int value="-1242404917" label="sr-t-i0-und">Serbian transliteration</int>
+  <int value="-1148371254" label="xkb:us:intl:por">
+    US International keyboard
+  </int>
+  <int value="-1105197074" label="vkd_ar">Arabic keyboard</int>
+  <int value="-1096071752" label="vkd_fa">Persian keyboard</int>
+  <int value="-1065120196" label="vkd_th">Thai keyboard (Kedmanee)</int>
+  <int value="-1053378431" label="xkb:tr::tur">Turkish keyboard</int>
+  <int value="-1032532014" label="xkb:bg:phonetic:bul">
+    Bulgarian Phonetic keyboard
+  </int>
+  <int value="-1024152574" label="xkb:ca:eng:eng">
+    Canadian English keyboard
+  </int>
+  <int value="-1021036210" label="xkb:us::ind">US keyboard</int>
+  <int value="-1018545698" label="vkd_ckb_en">
+    Sorani Kurdish English-based keyboard
+  </int>
+  <int value="-994915284" label="xkb:ch:fr:fra">Swiss French keyboard</int>
+  <int value="-955047705" label="xkb:sk::slo">Slovakian keyboard</int>
+  <int value="-942739805" label="xkb:tr:f:tur">Turkish-F keyboard</int>
+  <int value="-923332388" label="xkb:ua::ukr">Ukrainian keyboard</int>
+  <int value="-917118451" label="vkd_vi_tcvn">Vietnamese keyboard (TCVN)</int>
+  <int value="-848378885" label="vkd_ethi">Ethiopic keyboard</int>
+  <int value="-827208209" label="xkb:hu::hun">Hungarian keyboard</int>
+  <int value="-797137387" label="ml-t-i0-und">Malayalam transliteration</int>
+  <int value="-676861102" label="vkd_vi_viqr">Vietnamese keyboard (VIQR)</int>
+  <int value="-666585286" label="xkb:bg::bul">Bulgarian keyboard</int>
+  <int value="-650362029" label="xkb:ie::ga">Irish keyboard</int>
+  <int value="-639620912" label="te-t-i0-und">Telugu transliteration</int>
+  <int value="-622670909" label="zh-hant-t-i0-dayi-1988">Dayi input method</int>
+  <int value="-547772150" label="xkb:ro:std:rum">
+    Romanian standard keyboard
+  </int>
+  <int value="-535089160" label="xkb:us::msa">US keyboard</int>
+  <int value="-519506383" label="he-t-i0-und">Hebrew transliteration</int>
+  <int value="-512360986" label="xkb:us:altgr-intl:eng">
+    US Extended keyboard
+  </int>
+  <int value="-498028381" label="sa-t-i0-und">Sanskrit transliteration</int>
+  <int value="-496003957" label="xkb:de::ger">German keyboard</int>
+  <int value="-439432295" label="vkd_ru_phone_yazhert">
+    Russian Phonetic (YaZHert) keyboard
+  </int>
+  <int value="-378677550" label="vkd_bn_phone">Bengali keyboard (Phonetic)</int>
+  <int value="-352571373" label="xkb:rs::srp">Serbian keyboard</int>
+  <int value="-299716106" label="xkb:si::slv">Slovenian keyboard</int>
+  <int value="-292687390" label="xkb:fi::fin">Finnish keyboard</int>
+  <int value="-280690349" label="vkd_vi_vni">Vietnamese keyboard (VNI)</int>
+  <int value="-263932473" label="xkb:ch::ger">Swiss keyboard</int>
+  <int value="-231610124" label="ne-t-i0-und">Nepali transliteration</int>
+  <int value="-225482038" label="vkd_si">Sinhala keyboard</int>
+  <int value="-219542410" label="ko-t-i0-und">Korean input method</int>
+  <int value="-202781885" label="xkb:us:intl:eng">
+    US International keyboard
+  </int>
+  <int value="-193738949" label="gu-t-i0-und">Gujarati transliteration</int>
+  <int value="-147742988" label="mr-t-i0-und">Marathi transliteration</int>
+  <int value="-83634292" label="vkd_my_myansan">Myanmar Myansan keyboard</int>
+  <int value="-70827301" label="xkb:be::fra">Belgian keyboard</int>
+  <int value="-69316526" label="fa-t-i0-und">Persian transliteration</int>
+  <int value="2215666" label="xkb:jp::jpn">Japanese keyboard</int>
+  <int value="28549849" label="xkb:pt::por">Portuguese keyboard</int>
+  <int value="60054916" label="xkb:fo::fao">Faroese keyboard</int>
+  <int value="87135772" label="xkb:fr::fra">French keyboard</int>
+  <int value="150803493" label="vkd_ta_phone">Tamil keyboard (Phonetic)</int>
+  <int value="193122406" label="xkb:gr::gre">Greek keyboard</int>
+  <int value="197116831" label="xkb:es::spa">Spanish keyboard</int>
+  <int value="214846098" label="zh-t-i0-wubi-1986">Wubi input method</int>
+  <int value="319509360" label="xkb:be::ger">Belgian keyboard</int>
+  <int value="382485416" label="xkb:lv:apostrophe:lav">Latvian keyboard</int>
+  <int value="398887705" label="ti-t-i0-und">Tigrinya transliteration</int>
+  <int value="400837283" label="yue-hant-t-i0-und">Cantonese input method</int>
+  <int value="414827905" label="vkd_ta_typewriter">
+    Tamil keyboard (Typewriter)
+  </int>
+  <int value="428624332" label="zh-t-i0-pinyin">Pinyin input method</int>
+  <int value="452111434" label="kn-t-i0-und">Kannada transliteration</int>
+  <int value="467269371" label="el-t-i0-und">Greek transliteration</int>
+  <int value="469000663" label="xkb:es:cat:cat">Catalan keyboard</int>
+  <int value="520692028" label="vkd_ta_itrans">Tamil keyboard (itrans)</int>
+  <int value="601883646" label="vkd_th_tis">Thai keyboard (TIS 820-2531)</int>
+  <int value="602570138" label="xkb:mk::mkd">Macedonian keyboard</int>
+  <int value="629336408" label="vkd_ckb_ar">
+    Sorani Kurdish Arabic-based keyboard
+  </int>
+  <int value="629711326" label="xkb:il::heb">Hebrew keyboard</int>
+  <int value="683071754" label="xkb:hr::scr">Croatian keyboard</int>
+  <int value="789603234" label="xkb:by::bel">Belarusian keyboard</int>
+  <int value="822222165" label="xkb:ru:phonetic:rus">
+    Russian Phonetic keyboard
+  </int>
+  <int value="825747412" label="xkb:latam::spa">Latin American keyboard</int>
+  <int value="871656925" label="xkb:us::fil">US keyboard</int>
+  <int value="1024422775" label="vkd_ml_phone">
+    Malayalam keyboard (Phonetic)
+  </int>
+  <int value="1127372618" label="vkd_ta_tamil99">Tamil keyboard (Tamil99)</int>
+  <int value="1194237527" label="bn-t-i0-und">Bengali transliteration</int>
+  <int value="1196273343" label="vkd_te_phone">Telugu keyboard (Phonetic)</int>
+  <int value="1201986464" label="pa-t-i0-und">Punjabi transliteration</int>
+  <int value="1241606786" label="vkd_gu_phone">
+    Gujarati keyboard (Phonetic)
+  </int>
+  <int value="1275989482" label="xkb:ee::est">Estonian keyboard</int>
+  <int value="1342665179" label="or-t-i0-und">Oriya transliteration</int>
+  <int value="1355267172" label="nacl_mozc_jp">
+    Google Japanese Input (for Japanese keyboard)
+  </int>
+  <int value="1376109158" label="zh-hant-t-i0-pinyin">
+    Traditional Pinyin input method
+  </int>
+  <int value="1391164751" label="vkd_ne_phone">Nepali keyboard (Phonetic)</int>
+  <int value="1409029247" label="xkb:ca::fra">Canadian French keyboard</int>
+  <int value="1486336701" label="zh-hant-t-i0-und">Zhuyin input method</int>
+  <int value="1643737979" label="xkb:fr:bepo:fra">French Bepo keyboard</int>
+  <int value="1683010298" label="xkb:is::ice">Icelandic keyboard</int>
+  <int value="1698488657" label="ar-t-i0-und">Arabic transliteration</int>
+  <int value="1718072990" label="xkb:us::eng">US keyboard</int>
+  <int value="1756602568" label="zh-hant-t-i0-array-1992">
+    Array input method
+  </int>
+  <int value="1763643144" label="xkb:lt::lit">Lithuanian keyboard</int>
+  <int value="1772226972" label="ur-t-i0-und">Urdu transliteration</int>
+  <int value="1847701260" label="xkb:pl::pol">Polish keyboard</int>
+  <int value="1851658441" label="xkb:hu:qwerty:hun">
+    Hungarian QWERTY keyboard
+  </int>
+  <int value="1882667893" label="xkb:us:colemak:eng">US Colemak keyboard</int>
+  <int value="1925299009" label="xkb:br::por">Brazilian keyboard</int>
+  <int value="1934249765" label="vkd_th_pattajoti">
+    Thai keyboard (Pattachote)
+  </int>
+  <int value="1957701631" label="am-t-i0-und">Amharic transliteration</int>
+  <int value="1970923579" label="xkb:us:intl:nld">Netherlands keyboard</int>
+  <int value="1983264676" label="xkb:no::nob">Norwegian keyboard</int>
+  <int value="2007323478" label="xkb:cz::cze">Czech keyboard</int>
+  <int value="2014669693" label="xkb:kz::kaz">Kazakh keyboard</int>
+  <int value="2024146574" label="vkd_lo">Lao keyboard</int>
+  <int value="2029882285" label="vkd_kn_phone">Kannada keyboard (Phonetic)</int>
+  <int value="2031967946" label="xkb:mt::mlt">Maltese keyboard</int>
+  <int value="2051698871" label="nacl_mozc_us">
+    Google Japanese Input (for US keyboard)
+  </int>
+  <int value="2060414855" label="braille">Braille Keyboard</int>
+  <int value="2121258069" label="xkb:us:dvorak:eng">US Dvorak keyboard</int>
+</enum>
+
+<enum name="InsecureContentType" type="int">
+  <int value="0" label="Displayed"/>
+  <int value="1" label="Displayed by *.google.com (deprecated)"/>
+  <int value="2" label="Displayed by www.google.com (deprecated)"/>
+  <int value="3" label="Displayed due to an iframe"/>
+  <int value="4" label="Ran"/>
+  <int value="5" label="Ran by *.google.com (deprecated)"/>
+  <int value="6" label="Ran by www.google.com (deprecated)"/>
+  <int value="7" label="Ran from www.youtube.com (deprecated)"/>
+  <int value="8" label="Ran due to script"/>
+  <int value="9" label="Ran due to CSS"/>
+  <int value="10" label="Ran due to a plug-in"/>
+  <int value="11" label="Displayed by www.youtube.com (deprecated)"/>
+  <int value="12" label="Ran by www.youtube.com (deprecated)"/>
+  <int value="13" label="Ran by *.googleusercontent.com (deprecated)"/>
+  <int value="14" label="Displayed by mail.google.com (deprecated)"/>
+  <int value="15" label="Ran by mail.google.com (deprecated)"/>
+  <int value="16" label="Displayed by plus.google.com (deprecated)"/>
+  <int value="17" label="Ran by plus.google.com (deprecated)"/>
+  <int value="18" label="Displayed by docs.google.com (deprecated)"/>
+  <int value="19" label="Ran by docs.google.com (deprecated)"/>
+  <int value="20" label="Displayed by sites.google.com (deprecated)"/>
+  <int value="21" label="Ran by sites.google.com (deprecated)"/>
+  <int value="22" label="Displayed by picasaweb.google.com (deprecated)"/>
+  <int value="23" label="Ran by picasaweb.google.com (deprecated)"/>
+  <int value="24" label="Displayed by google.com/reader/ (deprecated)"/>
+  <int value="25" label="Ran by google.com/reader/ (deprecated)"/>
+  <int value="26" label="Displayed by code.google.com (deprecated)"/>
+  <int value="27" label="Ran by code.google.com (deprecated)"/>
+  <int value="28" label="Displayed by groups.google.com (deprecated)"/>
+  <int value="29" label="Ran by groups.google.com (deprecated)"/>
+  <int value="30" label="Displayed by maps.google.com (deprecated)"/>
+  <int value="31" label="Ran by maps.google.com (deprecated)"/>
+  <int value="32" label="Displayed by google.com/support/ (deprecated)"/>
+  <int value="33" label="Ran by google.com/support/ (deprecated)"/>
+  <int value="34" label="Displayed by google.com/intl/ (deprecated)"/>
+  <int value="35" label="Ran by google.com/intl/ (deprecated)"/>
+</enum>
+
+<enum name="InstallStatus" type="int">
+  <int value="0" label="FIRST_INSTALL_SUCCESS"/>
+  <int value="1" label="INSTALL_REPAIRED"/>
+  <int value="2" label="NEW_VERSION_UPDATED"/>
+  <int value="3" label="EXISTING_VERSION_LAUNCHED"/>
+  <int value="4" label="HIGHER_VERSION_EXISTS"/>
+  <int value="5" label="USER_LEVEL_INSTALL_EXISTS"/>
+  <int value="6" label="SYSTEM_LEVEL_INSTALL_EXISTS"/>
+  <int value="7" label="INSTALL_FAILED"/>
+  <int value="8" label="SETUP_PATCH_FAILED"/>
+  <int value="9" label="OS_NOT_SUPPORTED"/>
+  <int value="10" label="OS_ERROR"/>
+  <int value="11" label="TEMP_DIR_FAILED"/>
+  <int value="12" label="UNCOMPRESSION_FAILED"/>
+  <int value="13" label="INVALID_ARCHIVE"/>
+  <int value="14" label="INSUFFICIENT_RIGHTS"/>
+  <int value="15" label="CHROME_NOT_INSTALLED"/>
+  <int value="16" label="CHROME_RUNNING"/>
+  <int value="17" label="UNINSTALL_CONFIRMED"/>
+  <int value="18" label="UNINSTALL_DELETE_PROFILE"/>
+  <int value="19" label="UNINSTALL_SUCCESSFUL"/>
+  <int value="20" label="UNINSTALL_FAILED"/>
+  <int value="21" label="UNINSTALL_CANCELLED"/>
+  <int value="22" label="UNKNOWN_STATUS"/>
+  <int value="23" label="RENAME_SUCCESSFUL"/>
+  <int value="24" label="RENAME_FAILED"/>
+  <int value="25" label="EULA_REJECTED"/>
+  <int value="26" label="EULA_ACCEPTED"/>
+  <int value="27" label="EULA_ACCEPTED_OPT_IN"/>
+  <int value="28" label="INSTALL_DIR_IN_USE"/>
+  <int value="29" label="UNINSTALL_REQUIRES_REBOOT"/>
+  <int value="30" label="IN_USE_UPDATED"/>
+  <int value="31" label="SAME_VERSION_REPAIR_FAILED"/>
+  <int value="32" label="REENTRY_SYS_UPDATE"/>
+  <int value="33" label="SXS_OPTION_NOT_SUPPORTED"/>
+  <int value="42" label="APPLY_DIFF_PATCH_FAILED"/>
+  <int value="47" label="INVALID_STATE_FOR_OPTION"/>
+  <int value="49" label="PATCH_INVALID_ARGUMENTS"/>
+  <int value="50" label="DIFF_PATCH_SOURCE_MISSING"/>
+  <int value="51" label="UNUSED_BINARIES"/>
+  <int value="52" label="UNUSED_BINARIES_UNINSTALLED"/>
+  <int value="53" label="UNSUPPORTED_OPTION"/>
+  <int value="54" label="CPU_NOT_SUPPORTED"/>
+  <int value="55" label="REENABLE_UPDATES_SUCCEEDED"/>
+  <int value="56" label="REENABLE_UPDATES_FAILED"/>
+  <int value="57" label="UNPACKING_FAILED"/>
+  <int value="58" label="IN_USE_DOWNGRADE"/>
+  <int value="59" label="OLD_VERSION_DOWNGRADE"/>
+  <int value="60" label="SETUP_SINGLETON_ACQUISITION_FAILED"/>
+  <int value="61" label="SETUP_SINGLETON_RELEASED"/>
+  <int value="62" label="DELETE_OLD_VERSIONS_SUCCESS"/>
+  <int value="63" label="DELETE_OLD_VERSIONS_TOO_MANY_ATTEMPTS"/>
+</enum>
+
+<enum name="InstantControllerEvent" type="int">
+  <int value="0" label="URL_ADDED_TO_BLACKLIST"/>
+  <int value="1" label="URL_REMOVED_FROM_BLACKLIST"/>
+  <int value="2" label="URL_BLOCKED_BY_BLACKLIST"/>
+</enum>
+
+<enum name="InstantExtended_CacheableNTPLoad" type="int">
+  <int value="0" label="Failed to load"/>
+  <int value="1" label="Loaded successfuly"/>
+</enum>
+
+<enum name="InstantExtended_FallbackCause" type="int">
+  <int value="0" label="Fallback did not occur"/>
+  <int value="1" label="Page not current: unknown"/>
+  <int value="2" label="Page not current: empty instant url"/>
+  <int value="3" label="Page not current: origin/path mismatch"/>
+  <int value="4" label="Page not current: instant not supported"/>
+  <int value="5" label="No overlay"/>
+  <int value="6" label="Javascript disabled"/>
+</enum>
+
+<enum name="InstantExtended_InstantNavigation" type="int">
+  <obsolete>
+    Deprecated as of 10/2013.
+  </obsolete>
+  <int value="0" label="Local click"/>
+  <int value="1" label="Local submit"/>
+  <int value="2" label="Online click"/>
+  <int value="3" label="Online submit"/>
+  <int value="4" label="Non-extended navigation"/>
+</enum>
+
+<enum name="InstantExtended_NewOptInState" type="int">
+  <int value="0" label="Default"/>
+  <int value="1" label="Opted in"/>
+  <int value="2" label="Opted out"/>
+</enum>
+
+<enum name="InstantExtended_OptInState" type="int">
+  <obsolete>
+    Deprecated 2013-06.
+  </obsolete>
+  <int value="0" label="Default"/>
+  <int value="1" label="Opted in"/>
+  <int value="2" label="Opted out"/>
+  <int value="3" label="Opted in local"/>
+  <int value="4" label="Opted out local"/>
+  <int value="5" label="Opted out both"/>
+</enum>
+
+<enum name="InstantSearchClicks_PreviewScrollState" type="int">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <int value="0" label="No scroll"/>
+  <int value="1" label="Scrolled but not to bottom"/>
+  <int value="2" label="Scrolled to bottom."/>
+</enum>
+
+<enum name="InstantSearchClicks_ReasonForSwap" type="int">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <int value="0" label="Regular swap"/>
+  <int value="1" label="Swapped on timeout"/>
+  <int value="2" label="Swap aborted due to navigation"/>
+  <int value="3" label="No swap as preview failed"/>
+  <int value="4" label="Swapped as original failed"/>
+</enum>
+
+<enum name="InstantSessionStorageNamespace" type="int">
+  <int value="0" label="different"/>
+  <int value="1" label="identical"/>
+</enum>
+
+<enum name="IntelMaxMicroArchitecture" type="int">
+  <int value="0" label="Pentium"/>
+  <int value="1" label="SSE"/>
+  <int value="2" label="SSE2"/>
+  <int value="3" label="SSE3"/>
+  <int value="4" label="SSSE3"/>
+  <int value="5" label="SSE4.1"/>
+  <int value="6" label="SSE4.2"/>
+  <int value="7" label="AVX"/>
+  <int value="8" label="AVX2"/>
+</enum>
+
+<enum name="InternalErrorLoadEvent" type="int">
+  <summary>Internal Errors in the page_load_metrics system</summary>
+  <int value="0" label="Invalid timing IPC sent from renderer"/>
+  <int value="1"
+      label="IPC received while not tracking a relevant committed load"/>
+  <int value="2" label="IPC received from a frame we navigated away from"/>
+  <int value="3" label="IPC received from a bad URL scheme"/>
+  <int value="4" label="No IPCs received for this navigation"/>
+  <int value="5" label="Abort reported before navigation start"/>
+  <int value="6"
+      label="Multiple aborted provisional loads at navigation start"/>
+  <int value="7"
+      label="User input received while not tracking a relevant committed load
+             (deprecated)"/>
+  <int value="8" label="Inter process TimeTicks skew"/>
+  <int value="9" label="No commit or failed provisional load received"/>
+</enum>
+
+<enum name="InterruptReason" type="int">
+  <int value="0" label="NONE"/>
+  <int value="1" label="FILE_FAILED"/>
+  <int value="2" label="FILE_ACCESS_DENIED"/>
+  <int value="3" label="FILE_NO_SPACE"/>
+  <int value="5" label="FILE_NAME_TOO_LONG"/>
+  <int value="6" label="FILE_TOO_LARGE"/>
+  <int value="7" label="FILE_VIRUS_INFECTED"/>
+  <int value="10" label="FILE_TRANSIENT_ERROR"/>
+  <int value="11" label="FILE_BLOCKED"/>
+  <int value="12" label="FILE_SECURITY_CHECK_FAILED"/>
+  <int value="13" label="FILE_TOO_SHORT"/>
+  <int value="20" label="NETWORK_FAILED"/>
+  <int value="21" label="NETWORK_TIMEOUT"/>
+  <int value="22" label="NETWORK_DISCONNECTED"/>
+  <int value="23" label="NETWORK_SERVER_DOWN"/>
+  <int value="24" label="NETWORK_INVALID_REQUEST"/>
+  <int value="30" label="SERVER_FAILED"/>
+  <int value="31" label="SERVER_NO_RANGE"/>
+  <int value="32" label="SERVER_PRECONDITION (Deprecated)"/>
+  <int value="33" label="SERVER_BAD_CONTENT"/>
+  <int value="34" label="SERVER_UNAUTHORIZED"/>
+  <int value="35" label="SERVER_CERT_PROBLEM"/>
+  <int value="36" label="SERVER_FORBIDDEN"/>
+  <int value="37" label="SERVER_UNREACHABLE"/>
+  <int value="40" label="USER_CANCELED"/>
+  <int value="41" label="USER_SHUTDOWN"/>
+  <int value="50" label="CRASH"/>
+</enum>
+
+<enum name="InvalidationNetworkChannel" type="int">
+  <int value="0" label="PushClientChannel"/>
+  <int value="1" label="GCMNetworkChannel"/>
+</enum>
+
+<enum name="IOSExternalURLRequestStatus" type="int">
+  <int value="0" label="MainFrameAllowed"/>
+  <int value="1" label="SubframeAllowed"/>
+  <int value="2" label="SubframeBlocked"/>
+</enum>
+
+<enum name="IOSShareExtensionReceivedEntryType" type="int">
+  <int value="0" label="Invalid item"/>
+  <int value="1" label="Cancelled item"/>
+  <int value="2" label="Reading list item"/>
+  <int value="3" label="Bookmark item"/>
+</enum>
+
+<enum name="IOSSpotlightAction" type="int">
+  <int value="0" label="New Tab"/>
+  <int value="1" label="New Incognito Tab"/>
+  <int value="2" label="Voice Search"/>
+  <int value="3" label="QR Code Scanner"/>
+</enum>
+
+<enum name="IPCAttachmentBrokerPrivilegedBrokerAttachmentError" type="int">
+  <int value="0" label="DESTINATION_FOUND">
+    The brokerable attachment had a valid destination. This is the success case.
+  </int>
+  <int value="1" label="DESTINATION_NOT_FOUND">
+    The brokerable attachment had a destination, but the broker did not have a
+    channel of communication with that process.
+  </int>
+  <int value="2" label="NO_DESTINATION">
+    The brokerable attachment did not have a destination process.
+  </int>
+  <int value="3" label="ERROR_MAKE_INTERMEDIATE">
+    Error making an intermediate Mach port.
+  </int>
+  <int value="4" label="ERROR_PARSE_DUPLICATE_MACH_PORT_MESSAGE">
+    Error parsing DuplicateMachPort message.
+  </int>
+  <int value="5" label="ERROR_TASK_FOR_PID">
+    Couldn't get a task port for the process with a given pid.
+  </int>
+  <int value="6" label="ERROR_MAKE_RECEIVE_PORT">
+    Couldn't make a port with receive rights in the destination process.
+  </int>
+  <int value="7" label="ERROR_SET_ATTRIBUTES">
+    Couldn't change the attributes of a Mach port.
+  </int>
+  <int value="8" label="ERROR_EXTRACT_RIGHT_DEST">
+    Couldn't extract a right from the destination process.
+  </int>
+  <int value="9" label="ERROR_SEND_MACH_PORT">
+    Couldn't send a Mach port in a call to mach_msg().
+  </int>
+  <int value="10" label="ERROR_DECREASE_REF">
+    Couldn't decrease the ref count on a Mach port.
+  </int>
+  <int value="11" label="ERROR_EXTRACT_RIGHT_SOURCE">
+    Couldn't extract a right from the source process.
+  </int>
+  <int value="12" label="ERROR_SOURCE_NOT_FOUND">
+    Broker didn't have a channel of communication with the source process.
+  </int>
+  <int value="13" label="ERROR_COULD_NOT_OPEN_SOURCE_OR_DEST">
+    Broker could not open the source or destination process with extra
+    privileges.
+  </int>
+  <int value="14" label="ERROR_INVALID_PERMISSIONS">
+    Broker was asked to transfer a HANDLE with invalid permissions.
+  </int>
+  <int value="15" label="DELAYED">
+    Broker was not immediately able to send an attachment.
+  </int>
+  <int value="16" label="DELAYED_SEND">
+    Broker successfully sent a delayed attachment.
+  </int>
+</enum>
+
+<enum name="IPCAttachmentBrokerUnprivilegedBrokerAttachmentError" type="int">
+  <int value="0" label="SUCCESS">
+    The brokerable attachment was successfully processed.
+  </int>
+  <int value="1" label="DESTINATION_NOT_FOUND">
+    The brokerable attachment's destination was not the process that received
+    the attachment.
+  </int>
+  <int value="2" label="ERR_RECEIVE_MACH_MESSAGE">
+    An error occurred while trying to receive a Mach port with mach_msg().
+  </int>
+</enum>
+
+<enum name="IPPermissionStatus" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Not requested"/>
+  <int value="2" label="Requested but denied"/>
+  <int value="3"
+      label="Requested and granted after checking mic/camera permission"/>
+  <int value="4" label="Requested and granted automatically"/>
+</enum>
+
+<enum name="IPv6ConnectivityStatus" type="int">
+  <int value="0" label="Incomplete IPv6 Configuration"/>
+  <int value="1" label="Complete IPv6 Configuration"/>
+</enum>
+
+<enum name="IPV6ProbeResult" type="int">
+  <int value="0" label="IPV6_CANNOT_CREATE_SOCKETS"/>
+  <int value="1" label="IPV6_CAN_CREATE_SOCKETS"/>
+  <int value="2" label="IPV6_GETIFADDRS_FAILED">
+    getifaddrs or GetAdaptersAddresses failed
+  </int>
+  <int value="3" label="IPV6_GLOBAL_ADDRESS_MISSING"/>
+  <int value="4" label="IPV6_GLOBAL_ADDRESS_PRESENT"/>
+  <int value="5" label="IPV6_INTERFACE_ARRAY_TOO_SHORT"/>
+</enum>
+
+<enum name="IsPinnedToTaskbarResult" type="int">
+  <int value="0" label="Not pinned"/>
+  <int value="1" label="Pinned"/>
+  <int value="2" label="Failed to determine"/>
+</enum>
+
+<enum name="JavaScriptAPIName" type="int">
+  <int value="0" label="GetUserMedia"/>
+  <int value="1" label="PeerConnection00"/>
+  <int value="2" label="DeprecatedPeerConnection"/>
+  <int value="3" label="RTCPeerConnection"/>
+  <int value="4" label="GetMediaDevices"/>
+  <int value="5" label="MediaStreamRecorder"/>
+  <int value="6" label="CanvasCaptureStream"/>
+  <int value="7" label="VideoCaptureStream"/>
+</enum>
+
+<enum name="JumplisticonsfolderCategory" type="int">
+  <int value="0" label="Del Succeed - Mov Succeed - Create Succeed"/>
+  <int value="1" label="Del Fail - Mov Succeed - Create Succeed"/>
+  <int value="2" label="Del Succeed - Mov Fail - Create Succeed"/>
+  <int value="3" label="Del Fail - Mov Fail - Create Succeed"/>
+  <int value="4" label="Del Succeed - Mov Succeed - Create Fail"/>
+  <int value="5" label="Del Fail - Mov Succeed - Create Fail"/>
+  <int value="6" label="Del Succeed - Mov Fail - Create Fail"/>
+  <int value="7" label="Del Fail - Mov Fail - Create Fail"/>
+</enum>
+
+<enum name="KeyboardControlEvent" type="int">
+  <int value="0" label="Keyboard was shown."/>
+  <int value="1" label="Keyboard was automatically hidden."/>
+  <int value="2" label="Keyboard was hidden by the user."/>
+</enum>
+
+<enum name="KeychainMigrationStatus" type="int">
+  <int value="0" label="Migration hasn't started"/>
+  <int value="1" label="Migration succeeded"/>
+  <int value="2" label="Migation failed once"/>
+  <int value="3" label="Migration failed twice"/>
+  <int value="4" label="Migration succeeded, Keychain cleaned up"/>
+  <int value="5" label="Partial migration"/>
+</enum>
+
+<enum name="KioskLaunchType" type="int">
+  <int value="0" label="Enterprise auto launch"/>
+  <int value="1" label="Enterprise manual launch"/>
+  <int value="2" label="Consumer auto launch"/>
+  <int value="3" label="Consumer manual launch"/>
+</enum>
+
+<enum name="LanguageCode" type="int">
+  <summary>ISO 639 Language Codes.</summary>
+  <int value="24929" label="Afar"/>
+  <int value="24930" label="Abkhazian"/>
+  <int value="24933" label="Avestan"/>
+  <int value="24934" label="Afrikaans"/>
+  <int value="24939" label="Akan"/>
+  <int value="24941" label="Amharic"/>
+  <int value="24942" label="Aragonese"/>
+  <int value="24946" label="Arabic"/>
+  <int value="24947" label="Assamese"/>
+  <int value="24950" label="Avaric"/>
+  <int value="24953" label="Aymara"/>
+  <int value="24954" label="Azerbaijani"/>
+  <int value="25185" label="Bashkir"/>
+  <int value="25189" label="Belarusian"/>
+  <int value="25191" label="Bulgarian"/>
+  <int value="25192" label="Bihari"/>
+  <int value="25193" label="Bislama"/>
+  <int value="25197" label="Bambara"/>
+  <int value="25198" label="Bengali"/>
+  <int value="25199" label="Tibetan"/>
+  <int value="25202" label="Breton"/>
+  <int value="25203" label="Bosnian"/>
+  <int value="25441" label="Catalan"/>
+  <int value="25445" label="Chechen"/>
+  <int value="25448" label="Chamorro"/>
+  <int value="25455" label="Corsican"/>
+  <int value="25458" label="Cree"/>
+  <int value="25459" label="Czech"/>
+  <int value="25461" label="Church Slavic"/>
+  <int value="25462" label="Chuvash"/>
+  <int value="25465" label="Welsh"/>
+  <int value="25697" label="Danish"/>
+  <int value="25701" label="German"/>
+  <int value="25718" label="Divehi"/>
+  <int value="25722" label="Dzongkha"/>
+  <int value="25957" label="Ewe"/>
+  <int value="25964" label="Greek"/>
+  <int value="25966" label="English"/>
+  <int value="25967" label="Esperanto"/>
+  <int value="25971" label="Spanish"/>
+  <int value="25972" label="Estonian"/>
+  <int value="25973" label="Basque"/>
+  <int value="26209" label="Persian"/>
+  <int value="26214" label="Fulah"/>
+  <int value="26217" label="Finnish"/>
+  <int value="26218" label="Fijian"/>
+  <int value="26223" label="Faroese"/>
+  <int value="26226" label="French"/>
+  <int value="26233" label="Western Frisian"/>
+  <int value="26465" label="Irish"/>
+  <int value="26468" label="Scottish Gaelic"/>
+  <int value="26476" label="Galician"/>
+  <int value="26478" label="Guarani"/>
+  <int value="26485" label="Gujarati"/>
+  <int value="26486" label="Manx"/>
+  <int value="26721" label="Hausa"/>
+  <int value="26725" label="Hebrew"/>
+  <int value="26729" label="Hindi"/>
+  <int value="26735" label="Hiri Motu"/>
+  <int value="26738" label="Croatian"/>
+  <int value="26740" label="Haitian"/>
+  <int value="26741" label="Hungarian"/>
+  <int value="26745" label="Armenian"/>
+  <int value="26746" label="Herero"/>
+  <int value="26977" label="Interlingua"/>
+  <int value="26980" label="Indonesian"/>
+  <int value="26981" label="Interlingue"/>
+  <int value="26983" label="Igbo"/>
+  <int value="26985" label="Sichuan Yi"/>
+  <int value="26987" label="Inupiaq"/>
+  <int value="26991" label="Ido"/>
+  <int value="26995" label="Icelandic"/>
+  <int value="26996" label="Italian"/>
+  <int value="26997" label="Inuktitut"/>
+  <int value="27233" label="Japanese"/>
+  <int value="27254" label="Javanese"/>
+  <int value="27489" label="Georgian"/>
+  <int value="27495" label="Kongo"/>
+  <int value="27497" label="Kikuyu"/>
+  <int value="27498" label="Kuanyama"/>
+  <int value="27499" label="Kazakh"/>
+  <int value="27500" label="Kalaallisut"/>
+  <int value="27501" label="Khmer"/>
+  <int value="27502" label="Kannada"/>
+  <int value="27503" label="Korean"/>
+  <int value="27506" label="Kanuri"/>
+  <int value="27507" label="Kashmiri"/>
+  <int value="27509" label="Kurdish"/>
+  <int value="27510" label="Komi"/>
+  <int value="27511" label="Cornish"/>
+  <int value="27513" label="Kirghiz"/>
+  <int value="27745" label="Latin"/>
+  <int value="27746" label="Luxembourgish"/>
+  <int value="27751" label="Ganda"/>
+  <int value="27753" label="Limburgish"/>
+  <int value="27758" label="Lingala"/>
+  <int value="27759" label="Lao"/>
+  <int value="27764" label="Lithuanian"/>
+  <int value="27765" label="Luba-Katanga"/>
+  <int value="27766" label="Latvian"/>
+  <int value="28007" label="Malagasy"/>
+  <int value="28008" label="Marshallese"/>
+  <int value="28009" label="Maori"/>
+  <int value="28011" label="Macedonian"/>
+  <int value="28012" label="Malayalam"/>
+  <int value="28014" label="Mongolian"/>
+  <int value="28015" label="Moldavian"/>
+  <int value="28018" label="Marathi"/>
+  <int value="28019" label="Malay"/>
+  <int value="28020" label="Maltese"/>
+  <int value="28025" label="Burmese"/>
+  <int value="28257" label="Nauru"/>
+  <int value="28258" label="Norwegian Bokmal"/>
+  <int value="28260" label="North Ndebele"/>
+  <int value="28261" label="Nepali"/>
+  <int value="28263" label="Ndonga"/>
+  <int value="28268" label="Dutch"/>
+  <int value="28270" label="Norwegian Nynorsk"/>
+  <int value="28271" label="Norwegian"/>
+  <int value="28274" label="South Ndebele"/>
+  <int value="28278" label="Navajo"/>
+  <int value="28281" label="Nyanja"/>
+  <int value="28515" label="Occitan"/>
+  <int value="28522" label="Ojibwa"/>
+  <int value="28525" label="Oromo"/>
+  <int value="28530" label="Oriya"/>
+  <int value="28531" label="Ossetic"/>
+  <int value="28769" label="Punjabi"/>
+  <int value="28777" label="Pali"/>
+  <int value="28780" label="Polish"/>
+  <int value="28787" label="Pashto"/>
+  <int value="28788" label="Portuguese"/>
+  <int value="29045" label="Quechua"/>
+  <int value="29293" label="Romansh"/>
+  <int value="29294" label="Rundi"/>
+  <int value="29295" label="Romanian"/>
+  <int value="29301" label="Russian"/>
+  <int value="29303" label="Kinyarwanda"/>
+  <int value="29537" label="Sanskrit"/>
+  <int value="29539" label="Sardinian"/>
+  <int value="29540" label="Sindhi"/>
+  <int value="29541" label="Northern Sami"/>
+  <int value="29543" label="Sango"/>
+  <int value="29544" label="Serbo-Croatian"/>
+  <int value="29545" label="Sinhala"/>
+  <int value="29547" label="Slovak"/>
+  <int value="29548" label="Slovenian"/>
+  <int value="29549" label="Samoan"/>
+  <int value="29550" label="Shona"/>
+  <int value="29551" label="Somali"/>
+  <int value="29553" label="Albanian"/>
+  <int value="29554" label="Serbian"/>
+  <int value="29555" label="Swati"/>
+  <int value="29556" label="Southern Sotho"/>
+  <int value="29557" label="Sundanese"/>
+  <int value="29558" label="Swedish"/>
+  <int value="29559" label="Swahili"/>
+  <int value="29793" label="Tamil"/>
+  <int value="29797" label="Telugu"/>
+  <int value="29799" label="Tajik"/>
+  <int value="29800" label="Thai"/>
+  <int value="29801" label="Tigrinya"/>
+  <int value="29803" label="Turkmen"/>
+  <int value="29804" label="Tagalog"/>
+  <int value="29806" label="Tswana"/>
+  <int value="29807" label="Tonga"/>
+  <int value="29810" label="Turkish"/>
+  <int value="29811" label="Tsonga"/>
+  <int value="29812" label="Tatar"/>
+  <int value="29815" label="Twi"/>
+  <int value="29817" label="Tahitian"/>
+  <int value="30055" label="Uighur"/>
+  <int value="30059" label="Ukrainian"/>
+  <int value="30066" label="Urdu"/>
+  <int value="30074" label="Uzbek"/>
+  <int value="30309" label="Venda"/>
+  <int value="30313" label="Vietnamese"/>
+  <int value="30319" label="Volapuk"/>
+  <int value="30561" label="Walloon"/>
+  <int value="30575" label="Wolof"/>
+  <int value="30824" label="Xhosa"/>
+  <int value="31081" label="Yiddish"/>
+  <int value="31087" label="Yoruba"/>
+  <int value="31329" label="Zhuang"/>
+  <int value="31336" label="Chinese"/>
+  <int value="31349" label="Zulu"/>
+  <int value="6382437" label="Achinese"/>
+  <int value="6382440" label="Acoli"/>
+  <int value="6382689" label="Adangme"/>
+  <int value="6382713" label="Adyghe"/>
+  <int value="6383201" label="Afro-Asiatic Language"/>
+  <int value="6383208" label="Afrihili"/>
+  <int value="6383982" label="Ainu"/>
+  <int value="6384491" label="Akkadian"/>
+  <int value="6384741" label="Aleut"/>
+  <int value="6384743" label="Algonquian Language"/>
+  <int value="6384756" label="Southern Altai"/>
+  <int value="6385255" label="Old English"/>
+  <int value="6385264" label="Angika"/>
+  <int value="6385761" label="Apache Language"/>
+  <int value="6386275" label="Aramaic"/>
+  <int value="6386286" label="Araucanian"/>
+  <int value="6386288" label="Arapaho"/>
+  <int value="6386292" label="Artificial Language"/>
+  <int value="6386295" label="Arawak"/>
+  <int value="6386529" label="Asu"/>
+  <int value="6386548" label="Asturian"/>
+  <int value="6386792" label="Athapascan Language"/>
+  <int value="6387059" label="Australian Language"/>
+  <int value="6387553" label="Awadhi"/>
+  <int value="6447460" label="Banda"/>
+  <int value="6447465" label="Bamileke Language"/>
+  <int value="6447468" label="Baluchi"/>
+  <int value="6447470" label="Balinese"/>
+  <int value="6447475" label="Basa"/>
+  <int value="6447476" label="Baltic Language"/>
+  <int value="6448490" label="Beja"/>
+  <int value="6448493" label="Bemba"/>
+  <int value="6448498" label="Berber"/>
+  <int value="6448506" label="Bena"/>
+  <int value="6449263" label="Bhojpuri"/>
+  <int value="6449515" label="Bikol"/>
+  <int value="6449518" label="Bini"/>
+  <int value="6450273" label="Siksika"/>
+  <int value="6450804" label="Bantu"/>
+  <int value="6451809" label="Braj"/>
+  <int value="6451832" label="Bodo"/>
+  <int value="6452331" label="Batak"/>
+  <int value="6452577" label="Buriat"/>
+  <int value="6452583" label="Buginese"/>
+  <int value="6453614" label="Blin"/>
+  <int value="6512996" label="Caddo"/>
+  <int value="6513001" label="Central American Indian Language"/>
+  <int value="6513010" label="Carib"/>
+  <int value="6513013" label="Caucasian Language"/>
+  <int value="6513017" label="Cayuga"/>
+  <int value="6513512" label="Atsam"/>
+  <int value="6514018" label="Cebuano"/>
+  <int value="6514028" label="Celtic Language"/>
+  <int value="6514535" label="Chiga"/>
+  <int value="6514786" label="Chibcha"/>
+  <int value="6514791" label="Chagatai"/>
+  <int value="6514795" label="Chuukese"/>
+  <int value="6514797" label="Mari"/>
+  <int value="6514798" label="Chinook Jargon"/>
+  <int value="6514799" label="Choctaw"/>
+  <int value="6514800" label="Chipewyan"/>
+  <int value="6514802" label="Cherokee"/>
+  <int value="6514809" label="Cheyenne"/>
+  <int value="6516067" label="Chamic Language"/>
+  <int value="6516592" label="Coptic"/>
+  <int value="6516837" label="English-based Creole or Pidgin"/>
+  <int value="6516838" label="French-based Creole or Pidgin"/>
+  <int value="6516848" label="Portuguese-based Creole or Pidgin"/>
+  <int value="6517352" label="Crimean Turkish"/>
+  <int value="6517360" label="Creole or Pidgin"/>
+  <int value="6517602" label="Kashubian"/>
+  <int value="6518131" label="Cushitic Language"/>
+  <int value="6578539" label="Dakota"/>
+  <int value="6578546" label="Dargwa"/>
+  <int value="6578550" label="Taita"/>
+  <int value="6578553" label="Dayak"/>
+  <int value="6579564" label="Delaware"/>
+  <int value="6579566" label="Slave"/>
+  <int value="6580082" label="Dogrib"/>
+  <int value="6580590" label="Dinka"/>
+  <int value="6580837" label="Zarma"/>
+  <int value="6582121" label="Dogri"/>
+  <int value="6582881" label="Dravidian Language"/>
+  <int value="6583138" label="Lower Sorbian"/>
+  <int value="6583649" label="Duala"/>
+  <int value="6583661" label="Middle Dutch"/>
+  <int value="6584693" label="Dyula"/>
+  <int value="6644341" label="Embu"/>
+  <int value="6645353" label="Efik"/>
+  <int value="6645625" label="Ancient Egyptian"/>
+  <int value="6646625" label="Ekajuk"/>
+  <int value="6646904" label="Elamite"/>
+  <int value="6647405" label="Middle English"/>
+  <int value="6649711" label="Ewondo"/>
+  <int value="6709614" label="Fang"/>
+  <int value="6709620" label="Fanti"/>
+  <int value="6711660" label="Filipino"/>
+  <int value="6711669" label="Finno-Ugrian Language"/>
+  <int value="6713198" label="Fon"/>
+  <int value="6713965" label="Middle French"/>
+  <int value="6713967" label="Old French"/>
+  <int value="6713970" label="Northern Frisian"/>
+  <int value="6713971" label="Eastern Frisian"/>
+  <int value="6714738" label="Friulian"/>
+  <int value="6775137" label="Ga"/>
+  <int value="6775161" label="Gayo"/>
+  <int value="6775393" label="Gbaya"/>
+  <int value="6776173" label="Germanic Language"/>
+  <int value="6776186" label="Geez"/>
+  <int value="6777196" label="Gilbertese"/>
+  <int value="6778216" label="Middle High German"/>
+  <int value="6778728" label="Old High German"/>
+  <int value="6778734" label="Gondi"/>
+  <int value="6778738" label="Gorontalo"/>
+  <int value="6778740" label="Gothic"/>
+  <int value="6779490" label="Grebo"/>
+  <int value="6779491" label="Ancient Greek"/>
+  <int value="6779767" label="Swiss German"/>
+  <int value="6780282" label="Gusii"/>
+  <int value="6780777" label="Gwich'in"/>
+  <int value="6840681" label="Haida"/>
+  <int value="6840695" label="Hawaiian"/>
+  <int value="6842732" label="Hiligaynon"/>
+  <int value="6842733" label="Himachali"/>
+  <int value="6842740" label="Hittite"/>
+  <int value="6843758" label="Hmong"/>
+  <int value="6845282" label="Upper Sorbian"/>
+  <int value="6845808" label="Hupa"/>
+  <int value="6906465" label="Iban"/>
+  <int value="6908527" label="Ijo"/>
+  <int value="6909039" label="Iloko"/>
+  <int value="6909539" label="Indic Language"/>
+  <int value="6909541" label="Indo-European Language"/>
+  <int value="6909544" label="Ingush"/>
+  <int value="6910561" label="Iranian Language"/>
+  <int value="6910575" label="Iroquoian Language"/>
+  <int value="6972015" label="Lojban"/>
+  <int value="6974819" label="Machame"/>
+  <int value="6975602" label="Judeo-Persian"/>
+  <int value="6976098" label="Judeo-Arabic"/>
+  <int value="7037281" label="Kara-Kalpak"/>
+  <int value="7037282" label="Kabyle"/>
+  <int value="7037283" label="Kachin"/>
+  <int value="7037290" label="Jju"/>
+  <int value="7037293" label="Kamba"/>
+  <int value="7037298" label="Karen"/>
+  <int value="7037303" label="Kawi"/>
+  <int value="7037540" label="Kabardian"/>
+  <int value="7037799" label="Tyap"/>
+  <int value="7038053" label="Makonde"/>
+  <int value="7038305" label="Kabuverdianu"/>
+  <int value="7038575" label="Koro"/>
+  <int value="7039073" label="Khasi"/>
+  <int value="7039081" label="Khoisan Language"/>
+  <int value="7039087" label="Khotanese"/>
+  <int value="7039089" label="Koyra Chiini"/>
+  <int value="7040110" label="Kalenjin"/>
+  <int value="7040354" label="Kimbundu"/>
+  <int value="7040875" label="Konkani"/>
+  <int value="7040883" label="Kosraean"/>
+  <int value="7041125" label="Kpelle"/>
+  <int value="7041635" label="Karachay-Balkar"/>
+  <int value="7041644" label="Karelian"/>
+  <int value="7041647" label="Kru"/>
+  <int value="7041653" label="Kurukh"/>
+  <int value="7041890" label="Shambala"/>
+  <int value="7041896" label="Colognian"/>
+  <int value="7042413" label="Kumyk"/>
+  <int value="7042420" label="Kutenai"/>
+  <int value="7102820" label="Ladino"/>
+  <int value="7102823" label="Langi"/>
+  <int value="7102824" label="Lahnda"/>
+  <int value="7102829" label="Lamba"/>
+  <int value="7103866" label="Lezghian"/>
+  <int value="7106412" label="Mongo"/>
+  <int value="7106426" label="Lozi"/>
+  <int value="7107937" label="Luba-Lulua"/>
+  <int value="7107945" label="Luiseno"/>
+  <int value="7107950" label="Lunda"/>
+  <int value="7107951" label="Luo"/>
+  <int value="7107955" label="Lushai"/>
+  <int value="7107961" label="Luyia"/>
+  <int value="7168356" label="Madurese"/>
+  <int value="7168359" label="Magahi"/>
+  <int value="7168361" label="Maithili"/>
+  <int value="7168363" label="Makasar"/>
+  <int value="7168366" label="Mandingo"/>
+  <int value="7168368" label="Austronesian Language"/>
+  <int value="7168371" label="Masai"/>
+  <int value="7169126" label="Moksha"/>
+  <int value="7169138" label="Mandar"/>
+  <int value="7169390" label="Mende"/>
+  <int value="7169394" label="Meru"/>
+  <int value="7169637" label="Morisyen"/>
+  <int value="7169889" label="Middle Irish"/>
+  <int value="7170403" label="Micmac"/>
+  <int value="7170414" label="Minangkabau"/>
+  <int value="7170419" label="Miscellaneous Language"/>
+  <int value="7170920" label="Mon-Khmer Language"/>
+  <int value="7171683" label="Manchu"/>
+  <int value="7171689" label="Manipuri"/>
+  <int value="7171695" label="Manobo Language"/>
+  <int value="7171944" label="Mohawk"/>
+  <int value="7171955" label="Mossi"/>
+  <int value="7173484" label="Multiple Languages"/>
+  <int value="7173486" label="Munda Language"/>
+  <int value="7173491" label="Creek"/>
+  <int value="7173996" label="Mirandese"/>
+  <int value="7174002" label="Marwari"/>
+  <int value="7174510" label="Mayan Language"/>
+  <int value="7174518" label="Erzya"/>
+  <int value="7233896" label="Nahuatl"/>
+  <int value="7233897" label="North American Indian Language"/>
+  <int value="7233904" label="Neapolitan"/>
+  <int value="7233905" label="Nama"/>
+  <int value="7234675" label="Low German"/>
+  <int value="7234935" label="Newari"/>
+  <int value="7235937" label="Nias"/>
+  <int value="7235939" label="Niger-Kordofanian Language"/>
+  <int value="7235957" label="Niuean"/>
+  <int value="7237479" label="Nogai"/>
+  <int value="7237486" label="Old Norse"/>
+  <int value="7237999" label="N'Ko"/>
+  <int value="7238511" label="Northern Sotho"/>
+  <int value="7239010" label="Nubian Language"/>
+  <int value="7239523" label="Classical Newari"/>
+  <int value="7240045" label="Nyamwezi"/>
+  <int value="7240046" label="Nyankole"/>
+  <int value="7240047" label="Nyoro"/>
+  <int value="7240297" label="Nzima"/>
+  <int value="7304033" label="Osage"/>
+  <int value="7304289" label="Ottoman Turkish"/>
+  <int value="7304303" label="Otomian Language"/>
+  <int value="7364961" label="Papuan Language"/>
+  <int value="7364967" label="Pangasinan"/>
+  <int value="7364972" label="Pahlavi"/>
+  <int value="7364973" label="Pampanga"/>
+  <int value="7364976" label="Papiamento"/>
+  <int value="7364981" label="Palauan"/>
+  <int value="7365999" label="Old Persian"/>
+  <int value="7366761" label="Philippine Language"/>
+  <int value="7366766" label="Phoenician"/>
+  <int value="7368558" label="Pohnpeian"/>
+  <int value="7369313" label="Prakrit Language"/>
+  <int value="7369327" label="Old Provencal"/>
+  <int value="7496042" label="Rajasthani"/>
+  <int value="7496048" label="Rapanui"/>
+  <int value="7496050" label="Rarotongan"/>
+  <int value="7499617" label="Romance Language"/>
+  <int value="7499622" label="Rombo"/>
+  <int value="7499629" label="Romany"/>
+  <int value="7501168" label="Aromanian"/>
+  <int value="7501675" label="Rwa"/>
+  <int value="7561572" label="Sandawe"/>
+  <int value="7561576" label="Yakut"/>
+  <int value="7561577" label="South American Indian Language"/>
+  <int value="7561580" label="Salishan Language"/>
+  <int value="7561581" label="Samaritan Aramaic"/>
+  <int value="7561585" label="Samburu"/>
+  <int value="7561587" label="Sasak"/>
+  <int value="7561588" label="Santali"/>
+  <int value="7562094" label="Sicilian"/>
+  <int value="7562095" label="Scots"/>
+  <int value="7562597" label="Seneca"/>
+  <int value="7562600" label="Sena"/>
+  <int value="7562604" label="Selkup"/>
+  <int value="7562605" label="Semitic Language"/>
+  <int value="7562611" label="Koyraboro Senni"/>
+  <int value="7563105" label="Old Irish"/>
+  <int value="7563118" label="Sign Language"/>
+  <int value="7563369" label="Tachelhit"/>
+  <int value="7563374" label="Shan"/>
+  <int value="7563620" label="Sidamo"/>
+  <int value="7563631" label="Siouan Language"/>
+  <int value="7563636" label="Sino-Tibetan Language"/>
+  <int value="7564385" label="Slavic Language"/>
+  <int value="7564641" label="Southern Sami"/>
+  <int value="7564649" label="Sami Language"/>
+  <int value="7564650" label="Lule Sami"/>
+  <int value="7564654" label="Inari Sami"/>
+  <int value="7564659" label="Skolt Sami"/>
+  <int value="7564907" label="Soninke"/>
+  <int value="7565159" label="Sogdien"/>
+  <int value="7565166" label="Songhai"/>
+  <int value="7565934" label="Sranan Tongo"/>
+  <int value="7565938" label="Serer"/>
+  <int value="7566177" label="Nilo-Saharan Language"/>
+  <int value="7566201" label="Saho"/>
+  <int value="7566699" label="Sukuma"/>
+  <int value="7566707" label="Susu"/>
+  <int value="7566712" label="Sumerian"/>
+  <int value="7567202" label="Comorian"/>
+  <int value="7567715" label="Classical Syriac"/>
+  <int value="7567730" label="Syriac"/>
+  <int value="7627113" label="Tai Language"/>
+  <int value="7628141" label="Timne"/>
+  <int value="7628143" label="Teso"/>
+  <int value="7628146" label="Tereno"/>
+  <int value="7628148" label="Tetum"/>
+  <int value="7629159" label="Tigre"/>
+  <int value="7629174" label="Tiv"/>
+  <int value="7629676" label="Tokelau"/>
+  <int value="7629928" label="Klingon"/>
+  <int value="7629929" label="Tlingit"/>
+  <int value="7630184" label="Tamashek"/>
+  <int value="7630695" label="Nyasa Tonga"/>
+  <int value="7630953" label="Tok Pisin"/>
+  <int value="7631478" label="Taroko"/>
+  <int value="7631721" label="Tsimshian"/>
+  <int value="7632237" label="Tumbuka"/>
+  <int value="7632240" label="Tupi Language"/>
+  <int value="7632244" label="Altaic Language"/>
+  <int value="7632492" label="Tuvalu"/>
+  <int value="7632753" label="Tasawaq"/>
+  <int value="7633270" label="Tuvinian"/>
+  <int value="7633517" label="Central Morocco Tamazight"/>
+  <int value="7693421" label="Udmurt"/>
+  <int value="7694177" label="Ugaritic"/>
+  <int value="7695714" label="Umbundu"/>
+  <int value="7695972" label="Unknown Language"/>
+  <int value="7758185" label="Vai"/>
+  <int value="7761780" label="Votic"/>
+  <int value="7763310" label="Vunjo"/>
+  <int value="7823723" label="Wakashan Language"/>
+  <int value="7823724" label="Walamo"/>
+  <int value="7823730" label="Waray"/>
+  <int value="7823731" label="Washo"/>
+  <int value="7824750" label="Sorbian Language"/>
+  <int value="7889260" label="Kalmyk"/>
+  <int value="7892839" label="Soga"/>
+  <int value="7954799" label="Yao"/>
+  <int value="7954800" label="Yapese"/>
+  <int value="7958635" label="Yupik Language"/>
+  <int value="7959909" label="Cantonese"/>
+  <int value="8020336" label="Zapotec"/>
+  <int value="8020588" label="Blissymbols"/>
+  <int value="8021358" label="Zenaga"/>
+  <int value="8023652" label="Zande"/>
+  <int value="8025454" label="Zuni"/>
+  <int value="8026232" label="No linguistic content"/>
+  <int value="8026721" label="Zaza"/>
+</enum>
+
+<enum name="LastSettingParsed" type="int">
+  <obsolete>
+    Deprecated 2015-10-05 in Issue 433475. Histogram was used temorarily for
+    diagnosing crash causes.
+  </obsolete>
+  <int value="0" label="Update Empty"/>
+  <int value="1" label="Update Parsed"/>
+  <int value="2" label="Update Invalid"/>
+  <int value="3" label="UpdateOrigins Empty"/>
+  <int value="4" label="UpdateOrigins Parsed"/>
+  <int value="5" label="UpdateOrigins Invalid"/>
+  <int value="6" label="HandleUpdateOrigins Empty"/>
+  <int value="7" label="HandleUpdateOrigins Parsed"/>
+  <int value="8" label="HandleUpdateOrigins Invalid"/>
+</enum>
+
+<enum name="LaunchErrorCodes" type="int">
+  <int value="0" label="SBOX_ALL_OK"/>
+  <int value="1" label="SBOX_ERROR_GENERIC"/>
+  <int value="2" label="SBOX_ERROR_BAD_PARAMS"/>
+  <int value="3" label="SBOX_ERROR_UNSUPPORTED"/>
+  <int value="4" label="SBOX_ERROR_NO_SPACE"/>
+  <int value="5" label="SBOX_ERROR_INVALID_IPC"/>
+  <int value="6" label="SBOX_ERROR_FAILED_IPC"/>
+  <int value="7" label="SBOX_ERROR_NO_HANDLE"/>
+  <int value="8" label="SBOX_ERROR_UNEXPECTED_CALL"/>
+  <int value="9" label="SBOX_ERROR_WAIT_ALREADY_CALLED"/>
+  <int value="10" label="SBOX_ERROR_CHANNEL_ERROR"/>
+  <int value="11" label="SBOX_ERROR_CANNOT_CREATE_DESKTOP"/>
+  <int value="12" label="SBOX_ERROR_CANNOT_CREATE_WINSTATION"/>
+  <int value="13" label="SBOX_ERROR_FAILED_TO_SWITCH_BACK_WINSTATION"/>
+  <int value="14" label="SBOX_ERROR_INVALID_APP_CONTAINER"/>
+  <int value="15" label="SBOX_ERROR_INVALID_CAPABILITY"/>
+  <int value="16" label="SBOX_ERROR_CANNOT_INIT_APPCONTAINER"/>
+  <int value="17" label="SBOX_ERROR_PROC_THREAD_ATTRIBUTES"/>
+  <int value="18" label="SBOX_ERROR_CREATE_PROCESS"/>
+  <int value="19" label="SBOX_ERROR_DELEGATE_PRE_SPAWN"/>
+  <int value="20" label="SBOX_ERROR_ASSIGN_PROCESS_TO_JOB_OBJECT"/>
+  <int value="21" label="SBOX_ERROR_SET_THREAD_TOKEN"/>
+  <int value="22" label="SBOX_ERROR_GET_THREAD_CONTEXT"/>
+  <int value="23" label="SBOX_ERROR_DUPLICATE_TARGET_INFO"/>
+  <int value="24" label="SBOX_ERROR_SET_LOW_BOX_TOKEN"/>
+  <int value="25" label="SBOX_ERROR_CREATE_FILE_MAPPING"/>
+  <int value="26" label="SBOX_ERROR_DUPLICATE_SHARED_SECTION"/>
+  <int value="27" label="SBOX_ERROR_MAP_VIEW_OF_SHARED_SECTION"/>
+  <int value="28" label="SBOX_ERROR_APPLY_ASLR_MITIGATIONS"/>
+  <int value="29" label="SBOX_ERROR_SETUP_BASIC_INTERCEPTIONS"/>
+  <int value="30" label="SBOX_ERROR_SETUP_INTERCEPTION_SERVICE"/>
+  <int value="31" label="SBOX_ERROR_INITIALIZE_INTERCEPTIONS"/>
+  <int value="32" label="SBOX_ERROR_SETUP_NTDLL_IMPORTS"/>
+  <int value="33" label="SBOX_ERROR_SETUP_HANDLE_CLOSER"/>
+  <int value="34" label="SBOX_ERROR_CANNOT_GET_WINSTATION"/>
+  <int value="35" label="SBOX_ERROR_CANNOT_QUERY_WINSTATION_SECURITY"/>
+  <int value="36" label="SBOX_ERROR_CANNOT_GET_DESKTOP"/>
+  <int value="37" label="SBOX_ERROR_CANNOT_QUERY_DESKTOP_SECURITY"/>
+  <int value="38" label="SBOX_ERROR_CANNOT_SETUP_INTERCEPTION_CONFIG_BUFFER"/>
+  <int value="39" label="SBOX_ERROR_CANNOT_COPY_DATA_TO_CHILD"/>
+  <int value="40" label="SBOX_ERROR_CANNOT_SETUP_INTERCEPTION_THUNK"/>
+  <int value="41" label="SBOX_ERROR_CANNOT_RESOLVE_INTERCEPTION_THUNK"/>
+  <int value="42" label="SBOX_ERROR_CANNOT_WRITE_INTERCEPTION_THUNK"/>
+  <int value="43" label="SBOX_ERROR_CANNOT_FIND_BASE_ADDRESS"/>
+  <int value="1002" label="LAUNCH_RESULT_SUCCESS"/>
+  <int value="1003" label="LAUNCH_RESULT_FAILURE"/>
+</enum>
+
+<enum name="LaunchFromHomeScreen" type="int">
+  <int value="0" label="Launched as standalone web app"/>
+  <int value="1" label="Launched as a tab"/>
+</enum>
+
+<enum name="LaunchFromHomeScreenSource" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Menu item"/>
+  <int value="2" label="App banner"/>
+  <int value="3" label="Bookmark navigator widget"/>
+  <int value="4" label="Bookmark shortcut widget"/>
+  <int value="5" label="Notification"/>
+</enum>
+
+<enum name="LaunchIntentFlags" type="int">
+  <int value="0" label="No flags"/>
+  <int value="524288" label="NEW_DOCUMENT"/>
+  <int value="268435456" label="NEW_TASK"/>
+  <int value="268959744" label="NEW_TASK | NEW_DOCUMENT"/>
+</enum>
+
+<enum name="LevelDBCorruptionRestoreValue" type="int">
+  <int value="0" label="Database Delete Success"/>
+  <int value="1" label="Database Delete Failure"/>
+  <int value="2" label="Database Repair Success"/>
+</enum>
+
+<enum name="LevelDBCorruptionTypes" type="int">
+  <int value="0" label="other"/>
+  <int value="1" label="missing files"/>
+  <int value="2" label="log record too small"/>
+  <int value="3" label="corrupted internal key"/>
+  <int value="4" label="partial record"/>
+  <int value="5" label="missing start of fragmented record"/>
+  <int value="6" label="error in middle of record"/>
+  <int value="7" label="unknown record type"/>
+  <int value="8" label="truncated record at end"/>
+  <int value="9" label="bad record length"/>
+  <int value="10" label="VersionEdit"/>
+  <int value="11" label="FileReader invoked with unexpected value"/>
+  <int value="12" label="corrupted key"/>
+  <int value="13" label="CURRENT file does not end with newline"/>
+  <int value="14" label="no meta-nextfile entry"/>
+  <int value="15" label="no meta-lognumber entry"/>
+  <int value="16" label="no last-sequence-number entry"/>
+  <int value="17" label="malformed WriteBatch"/>
+  <int value="18" label="bad WriteBatch Put"/>
+  <int value="19" label="bad WriteBatch Delete"/>
+  <int value="20" label="unknown WriteBatch tag"/>
+  <int value="21" label="WriteBatch has wrong count"/>
+  <int value="22" label="bad entry in block"/>
+  <int value="23" label="bad block contents"/>
+  <int value="24" label="bad block handle"/>
+  <int value="25" label="truncated block read"/>
+  <int value="26" label="block checksum mismatch"/>
+  <int value="27" label="checksum mismatch"/>
+  <int value="28" label="corrupted compressed block contents"/>
+  <int value="29" label="bad block type"/>
+  <int value="30" label="bad magic number"/>
+  <int value="31" label="file is too short"/>
+</enum>
+
+<enum name="LevelDBDatabaseCorruptionRestoreValue" type="int">
+  <int value="0" label="Delete Success"/>
+  <int value="1" label="Delete Failure"/>
+  <int value="2" label="Repair Success"/>
+</enum>
+
+<enum name="LevelDBErrorCount" type="int">
+  <int value="1" label="Failure"/>
+</enum>
+
+<enum name="LevelDBErrorTypes" type="int">
+  <int value="0" label="NotFound"/>
+  <int value="1" label="Corruption"/>
+  <int value="2" label="IOError"/>
+  <int value="3" label="Other"/>
+</enum>
+
+<enum name="LevelDBIOErrorMethods" type="int">
+  <int value="0" label="SequentialFileRead"/>
+  <int value="1" label="SequentialFileSkip"/>
+  <int value="2" label="RandomAccessFileRead"/>
+  <int value="3" label="WritableFileAppend"/>
+  <int value="4" label="WritableFileClose"/>
+  <int value="5" label="WritableFileFlush"/>
+  <int value="6" label="WritableFileSync"/>
+  <int value="7" label="NewSequentialFile"/>
+  <int value="8" label="NewRandomAccessFile"/>
+  <int value="9" label="NewWritableFile"/>
+  <int value="10" label="DeleteFile"/>
+  <int value="11" label="CreateDir"/>
+  <int value="12" label="DeleteDir"/>
+  <int value="13" label="GetFileSize"/>
+  <int value="14" label="RenameFile"/>
+  <int value="15" label="LockFile"/>
+  <int value="16" label="UnlockFile"/>
+  <int value="17" label="GetTestDirectory"/>
+  <int value="18" label="NewLogger"/>
+  <int value="19" label="SyncParent"/>
+  <int value="20" label="GetChildren"/>
+  <int value="21" label="NewAppendableFile"/>
+</enum>
+
+<enum name="LevelDBStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Not Found"/>
+  <int value="2" label="Corruption"/>
+  <int value="3" label="Not Supported"/>
+  <int value="4" label="Invalid Argument"/>
+  <int value="5" label="IO Error"/>
+</enum>
+
+<enum name="LevelDBValueCorruptionDeleteValue" type="int">
+  <int value="0" label="Delete Success"/>
+  <int value="1" label="Delete Failure"/>
+</enum>
+
+<enum name="LibraryLoadFromApkStatus" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Not supported">obsolete</int>
+  <int value="2" label="Supported">obsolete</int>
+  <int value="3" label="Successful"/>
+  <int value="4" label="Used unpack library fallback">obsolete</int>
+  <int value="5" label="Used no map executable support fallback">obsolete</int>
+</enum>
+
+<enum name="LinkMonitorFailureType" type="int">
+  <int value="0" label="Local MAC Address Not Found"/>
+  <int value="1" label="Client Startup Failure"/>
+  <int value="2" label="Transmission Failure"/>
+  <int value="3" label="Failure Threshold Reached"/>
+</enum>
+
+<enum name="LinuxAudioIO" type="int">
+  <int value="0" label="PulseAudio"/>
+  <int value="1" label="ALSA"/>
+  <int value="2" label="Cras"/>
+</enum>
+
+<enum name="LinuxBackendUsage" type="int">
+  <int value="0" label="KDE_NOFLAG_PLAINTEXT"/>
+  <int value="1" label="KDE_NOFLAG_KWALLET"/>
+  <int value="2" label="KDE_KWALLETFLAG_PLAINTEXT"/>
+  <int value="3" label="KDE_KWALLETFLAG_KWALLET"/>
+  <int value="4" label="KDE_GNOMEFLAG_PLAINTEXT"/>
+  <int value="5" label="KDE_GNOMEFLAG_KEYRING"/>
+  <int value="6" label="KDE_GNOMEFLAG_LIBSECRET"/>
+  <int value="7" label="KDE_BASICFLAG_PLAINTEXT"/>
+  <int value="8" label="GNOME_NOFLAG_PLAINTEXT"/>
+  <int value="9" label="GNOME_NOFLAG_KEYRING"/>
+  <int value="10" label="GNOME_NOFLAG_LIBSECRET"/>
+  <int value="11" label="GNOME_GNOMEFLAG_PLAINTEXT"/>
+  <int value="12" label="GNOME_GNOMEFLAG_KEYRING"/>
+  <int value="13" label="GNOME_GNOMEFLAG_LIBSECRET"/>
+  <int value="14" label="GNOME_KWALLETFLAG_PLAINTEXT"/>
+  <int value="15" label="GNOME_KWALLETFLAG_KWALLET"/>
+  <int value="16" label="GNOME_BASICFLAG_PLAINTEXT"/>
+  <int value="17" label="OTHER_PLAINTEXT"/>
+  <int value="18" label="OTHER_KWALLET"/>
+  <int value="19" label="OTHER_KEYRING"/>
+  <int value="20" label="OTHER_LIBSECRET"/>
+</enum>
+
+<enum name="LinuxGlibcVersion" type="int">
+  <int value="0" label="Not Parseable"/>
+  <int value="1" label="Unknown"/>
+  <int value="2" label="2.11"/>
+  <int value="3" label="2.12"/>
+  <int value="4" label="2.13"/>
+  <int value="5" label="2.14"/>
+  <int value="6" label="2.15"/>
+  <int value="7" label="2.16"/>
+  <int value="8" label="2.17"/>
+  <int value="9" label="2.18"/>
+  <int value="10" label="2.19"/>
+  <int value="11" label="2.20"/>
+  <int value="12" label="2.21"/>
+  <int value="13" label="2.22"/>
+  <int value="14" label="2.23"/>
+  <int value="15" label="2.24"/>
+  <int value="16" label="2.25"/>
+  <int value="17" label="2.26"/>
+  <int value="18" label="2.27"/>
+  <int value="19" label="2.28"/>
+  <int value="20" label="2.29"/>
+</enum>
+
+<enum name="LinuxSandboxStatus" type="int">
+  <int value="0" label="none"/>
+  <int value="1" label="suid"/>
+  <int value="2" label="pidns"/>
+  <int value="3" label="suid, pidns"/>
+  <int value="4" label="netns"/>
+  <int value="5" label="suid, netns"/>
+  <int value="6" label="pidns, netns"/>
+  <int value="7" label="suid, pidns, netns"/>
+  <int value="8" label="seccomp-bpf"/>
+  <int value="9" label="suid, seccomp-bpf"/>
+  <int value="10" label="pidns, seccomp-bpf"/>
+  <int value="11" label="suid, pidns, seccomp-bpf"/>
+  <int value="12" label="netns, seccomp-bpf"/>
+  <int value="13" label="suid, netns, seccomp-bpf"/>
+  <int value="14" label="pidns, netns, seccomp-bpf"/>
+  <int value="15" label="suid, pidns, netns, seccomp-bpf"/>
+  <int value="16" label="yama"/>
+  <int value="17" label="suid, yama"/>
+  <int value="18" label="pidns, yama"/>
+  <int value="19" label="suid, pidns, yama"/>
+  <int value="20" label="netns, yama"/>
+  <int value="21" label="suid, netns, yama"/>
+  <int value="22" label="pidns, netns, yama"/>
+  <int value="23" label="suid, pidns, netns, yama"/>
+  <int value="24" label="seccomp-bpf, yama"/>
+  <int value="25" label="suid, seccomp-bpf, yama"/>
+  <int value="26" label="pidns, seccomp-bpf, yama"/>
+  <int value="27" label="suid, pidns, seccomp-bpf, yama"/>
+  <int value="28" label="netns, seccomp-bpf, yama"/>
+  <int value="29" label="suid, netns, seccomp-bpf, yama"/>
+  <int value="30" label="pidns, netns, seccomp-bpf, yama"/>
+  <int value="31" label="suid, pidns, netns, seccomp-bpf, yama"/>
+  <int value="32" label="seccomp-tsync"/>
+  <int value="33" label="suid, seccomp-tsync"/>
+  <int value="34" label="pidns, seccomp-tsync"/>
+  <int value="35" label="suid, pidns, seccomp-tsync"/>
+  <int value="36" label="netns, seccomp-tsync"/>
+  <int value="37" label="suid, netns, seccomp-tsync"/>
+  <int value="38" label="pidns, netns, seccomp-tsync"/>
+  <int value="39" label="suid, pidns, netns, seccomp-tsync"/>
+  <int value="40" label="seccomp-bpf, seccomp-tsync"/>
+  <int value="41" label="suid, seccomp-bpf, seccomp-tsync"/>
+  <int value="42" label="pidns, seccomp-bpf, seccomp-tsync"/>
+  <int value="43" label="suid, pidns, seccomp-bpf, seccomp-tsync"/>
+  <int value="44" label="netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="45" label="suid, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="46" label="pidns, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="47" label="suid, pidns, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="48" label="yama, seccomp-tsync"/>
+  <int value="49" label="suid, yama, seccomp-tsync"/>
+  <int value="50" label="pidns, yama, seccomp-tsync"/>
+  <int value="51" label="suid, pidns, yama, seccomp-tsync"/>
+  <int value="52" label="netns, yama, seccomp-tsync"/>
+  <int value="53" label="suid, netns, yama, seccomp-tsync"/>
+  <int value="54" label="pidns, netns, yama, seccomp-tsync"/>
+  <int value="55" label="suid, pidns, netns, yama, seccomp-tsync"/>
+  <int value="56" label="seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="57" label="suid, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="58" label="pidns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="59" label="suid, pidns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="60" label="netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="61" label="suid, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="62" label="pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="63" label="suid, pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="64" label="userns"/>
+  <int value="65" label="suid, userns"/>
+  <int value="66" label="userns, pidns"/>
+  <int value="67" label="suid, userns, pidns"/>
+  <int value="68" label="userns, netns"/>
+  <int value="69" label="suid, userns, netns"/>
+  <int value="70" label="userns, pidns, netns"/>
+  <int value="71" label="suid, userns, pidns, netns"/>
+  <int value="72" label="userns, seccomp-bpf"/>
+  <int value="73" label="suid, userns, seccomp-bpf"/>
+  <int value="74" label="userns, pidns, seccomp-bpf"/>
+  <int value="75" label="suid, userns, pidns, seccomp-bpf"/>
+  <int value="76" label="userns, netns, seccomp-bpf"/>
+  <int value="77" label="suid, userns, netns, seccomp-bpf"/>
+  <int value="78" label="userns, pidns, netns, seccomp-bpf"/>
+  <int value="79" label="suid, userns, pidns, netns, seccomp-bpf"/>
+  <int value="80" label="userns, yama"/>
+  <int value="81" label="suid, userns, yama"/>
+  <int value="82" label="userns, pidns, yama"/>
+  <int value="83" label="suid, userns, pidns, yama"/>
+  <int value="84" label="userns, netns, yama"/>
+  <int value="85" label="suid, userns, netns, yama"/>
+  <int value="86" label="userns, pidns, netns, yama"/>
+  <int value="87" label="suid, userns, pidns, netns, yama"/>
+  <int value="88" label="userns, seccomp-bpf, yama"/>
+  <int value="89" label="suid, userns, seccomp-bpf, yama"/>
+  <int value="90" label="userns, pidns, seccomp-bpf, yama"/>
+  <int value="91" label="suid, userns, pidns, seccomp-bpf, yama"/>
+  <int value="92" label="userns, netns, seccomp-bpf, yama"/>
+  <int value="93" label="suid, userns, netns, seccomp-bpf, yama"/>
+  <int value="94" label="userns, pidns, netns, seccomp-bpf, yama"/>
+  <int value="95" label="suid, userns, pidns, netns, seccomp-bpf, yama"/>
+  <int value="96" label="userns, seccomp-tsync"/>
+  <int value="97" label="suid, userns, seccomp-tsync"/>
+  <int value="98" label="userns, pidns, seccomp-tsync"/>
+  <int value="99" label="suid, userns, pidns, seccomp-tsync"/>
+  <int value="100" label="userns, netns, seccomp-tsync"/>
+  <int value="101" label="suid, userns, netns, seccomp-tsync"/>
+  <int value="102" label="userns, pidns, netns, seccomp-tsync"/>
+  <int value="103" label="suid, userns, pidns, netns, seccomp-tsync"/>
+  <int value="104" label="userns, seccomp-bpf, seccomp-tsync"/>
+  <int value="105" label="suid, userns, seccomp-bpf, seccomp-tsync"/>
+  <int value="106" label="userns, pidns, seccomp-bpf, seccomp-tsync"/>
+  <int value="107" label="suid, userns, pidns, seccomp-bpf, seccomp-tsync"/>
+  <int value="108" label="userns, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="109" label="suid, userns, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="110" label="userns, pidns, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="111"
+      label="suid, userns, pidns, netns, seccomp-bpf, seccomp-tsync"/>
+  <int value="112" label="userns, yama, seccomp-tsync"/>
+  <int value="113" label="suid, userns, yama, seccomp-tsync"/>
+  <int value="114" label="userns, pidns, yama, seccomp-tsync"/>
+  <int value="115" label="suid, userns, pidns, yama, seccomp-tsync"/>
+  <int value="116" label="userns, netns, yama, seccomp-tsync"/>
+  <int value="117" label="suid, userns, netns, yama, seccomp-tsync"/>
+  <int value="118" label="userns, pidns, netns, yama, seccomp-tsync"/>
+  <int value="119" label="suid, userns, pidns, netns, yama, seccomp-tsync"/>
+  <int value="120" label="userns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="121" label="suid, userns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="122" label="userns, pidns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="123"
+      label="suid, userns, pidns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="124" label="userns, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="125"
+      label="suid, userns, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="126"
+      label="userns, pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="127"
+      label="suid, userns, pidns, netns, seccomp-bpf, yama, seccomp-tsync"/>
+  <int value="2147483648" label="Invalid"/>
+</enum>
+
+<enum name="LinuxWindowManagerName" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Blackbox"/>
+  <int value="2" label="Chrome OS"/>
+  <int value="3" label="Compiz"/>
+  <int value="4" label="Enlightment"/>
+  <int value="5" label="IceWM"/>
+  <int value="6" label="KWin"/>
+  <int value="7" label="Metacity"/>
+  <int value="8" label="Muffin"/>
+  <int value="9" label="Mutter"/>
+  <int value="10" label="Openbox"/>
+  <int value="11" label="Xfwm4"/>
+  <int value="12" label="Awesome"/>
+  <int value="13" label="i3"/>
+  <int value="14" label="Ion3"/>
+  <int value="15" label="Matchbox"/>
+  <int value="16" label="Notion"/>
+  <int value="17" label="Qtile"/>
+  <int value="18" label="Ratpoison"/>
+  <int value="19" label="StumpWM"/>
+  <int value="20" label="wmii"/>
+  <int value="21" label="Fluxbox"/>
+  <int value="22" label="Xmonad"/>
+  <int value="23" label="Unnamed"/>
+</enum>
+
+<enum name="LoadType" type="int">
+  <int value="0" label="UNDEFINED_LOAD">Not yet initialized</int>
+  <int value="1" label="RELOAD">User pressed reload</int>
+  <int value="2" label="HISTORY_LOAD">Back or forward</int>
+  <int value="3" label="NORMAL_LOAD">User entered URL, or omnibox search</int>
+  <int value="4" label="LINK_LOAD">(deprecated) Included next 4 categories</int>
+  <int value="5" label="LINK_LOAD_NORMAL">Commonly following of link</int>
+  <int value="6" label="LINK_LOAD_RELOAD">JS/link directed reload</int>
+  <int value="7" label="LINK_LOAD_CACHE_STALE_OK">
+    back/forward or encoding change
+  </int>
+  <int value="8" label="LINK_LOAD_CACHE_ONLY">
+    Allow stale data (avoid doing a re-post)
+  </int>
+  <int value="9" label="PRERENDER_LOAD">Speculative prerendering of a page</int>
+</enum>
+
+<enum name="LocalRendererSinkStates" type="int">
+  <int value="0" label="SinkStarted"/>
+  <int value="1" label="SinkNeverStarted"/>
+</enum>
+
+<enum name="LoginConsumerWhitelist" type="int">
+  <int value="0" label="ANY_USER_ALLOWED">Any user can sign in</int>
+  <int value="1" label="ONLY_WHITELISTED_ALLOWED">Whitelisted users only</int>
+</enum>
+
+<enum name="LoginCustomFlags" type="int">
+<!--
+Values in LoginCustomFlags are:  value=(uint32_t)MD5(label).
+This enum is verified by AboutFlagsHistogramTest unit test.
+To add a new entry, add it with any unique value and run test to compute valid
+value.
+-->
+
+  <summary>Chrome flags that lead to chrome restart on ChromeOS.</summary>
+  <int value="-2143328006"
+      label="enable-fill-on-account-select-no-highlighting"/>
+  <int value="-2143113994" label="enable-ephemeral-apps-in-webstore"/>
+  <int value="-2132591642" label="enable-input-view"/>
+  <int value="-2122048316"
+      label="DisplayPersistenceToggleInPermissionPrompts:enabled"/>
+  <int value="-2119827860" label="ash-disable-maximize-mode-window-backdrop"/>
+  <int value="-2119530966" label="enable-webrtc-dtls12"/>
+  <int value="-2119493239" label="enable-app-info-dialog-mac"/>
+  <int value="-2117201726" label="disable-gpu-rasterization"/>
+  <int value="-2114831248" label="disable-new-ntp"/>
+  <int value="-2099035488" label="enable-data-reduction-proxy-bypass-warning"/>
+  <int value="-2098610409" label="disable-lcd-text"/>
+  <int value="-2097515669" label="disable-cast"/>
+  <int value="-2083195884" label="enable-firewall-hole-punching"/>
+  <int value="-2077268643" label="disable-device-enumeration"/>
+  <int value="-2075870708" label="MediaRemotingEncrypted:disabled"/>
+  <int value="-2075807193" label="enable-webusb-on-any-origin"/>
+  <int value="-2075725205" label="disable-new-zip-unpacker"/>
+  <int value="-2067166422" label="enable-slimming-paint-v2"/>
+  <int value="-2063352474" label="enable-new-task-manager"/>
+  <int value="-2063014275" label="enable-web-bluetooth"/>
+  <int value="-2062872298" label="market-url-for-testing"/>
+  <int value="-2048732429" label="enable-alternative-services"/>
+  <int value="-2048679945" label="NTPOfflinePageDownloadSuggestions:disabled"/>
+  <int value="-2047832738" label="enable-system-timezone-automatic-detection"/>
+  <int value="-2047822258" label="enable-avfoundation"/>
+  <int value="-2043128632" label="enable-tab-switcher-in-document-mode"/>
+  <int value="-2040115518" label="load-media-router-component-extension"/>
+  <int value="-2029912304" label="StaleWhileRevalidate2:enabled"/>
+  <int value="-2025367104" label="enable-material-design-ntp"/>
+  <int value="-2020721975" label="smart-virtual-keyboard"/>
+  <int value="-2020024440" label="scroll-end-effect"/>
+  <int value="-2017953534" label="enable-hosted-app-shim-creation"/>
+  <int value="-2013551096" label="ViewsSimplifiedFullscreenUI:disabled"/>
+  <int value="-2008272679" label="disable-webrtc-hw-encoding"/>
+  <int value="-2005089558" label="BackgroundVideoTrackOptimization:disabled"/>
+  <int value="-2003354337"
+      label="enable-search-button-in-omnibox-for-str-or-iip"/>
+  <int value="-1999892428" label="force-ui-direction"/>
+  <int value="-1998927516" label="enable-md-settings"/>
+  <int value="-1985025593" label="file-manager-enable-new-gallery"/>
+  <int value="-1980328793" label="trace-upload-url"/>
+  <int value="-1972383451" label="disable-pinch"/>
+  <int value="-1972219399" label="NTPSaveToOffline:enabled"/>
+  <int value="-1971086581" label="print-scaling"/>
+  <int value="-1963427770" label="EmojiHandwritingVoiceInput:disabled"/>
+  <int value="-1963402827" label="enable-topchrome-md"/>
+  <int value="-1961648833" label="show_summary"/>
+  <int value="-1956349722" label="disable-smooth-scrolling"/>
+  <int value="-1946595906" label="enable-push-api-background-mode"/>
+  <int value="-1943507605" label="enable-new-video-renderer"/>
+  <int value="-1941852572" label="floating-virtual-keyboard"/>
+  <int value="-1940806558" label="enable-syncfs-directory-operation"/>
+  <int value="-1938263248" label="enable-extension-info-dialog"/>
+  <int value="-1934673791" label="gl-composited-texture-quad-border"/>
+  <int value="-1930720286" label="nacl-debug-mask"/>
+  <int value="-1928198763" label="enable-async-dns"/>
+  <int value="-1925117279" label="disable-quic-https"/>
+  <int value="-1915854488" label="enable-offline-pages"/>
+  <int value="-1912999136" label="enable-automatic-password-saving:enabled"/>
+  <int value="-1911153473" label="enable-easy-signin"/>
+  <int value="-1907342706" label="ReadItLaterInMenu:disabled"/>
+  <int value="-1892555086" label="disable-compositor-animation-timelines"/>
+  <int value="-1892000374" label="SeccompSandboxAndroid:enabled"/>
+  <int value="-1888273969" label="tab-capture-upscale-quality"/>
+  <int value="-1887053262"
+      label="enable-zero-suggest-most-visited-without-serp"/>
+  <int value="-1880355454" label="disable-topchrome-md"/>
+  <int value="-1876881908"
+      label="disable-infobar-for-protected-media-identifier"/>
+  <int value="-1874908826" label="enable-instant-search-clicks"/>
+  <int value="-1872989945" label="enable-webview-based-signin"/>
+  <int value="-1872867546" label="EnumerateAudioDevices:disabled"/>
+  <int value="-1870961970" label="enable-filemanager-mtp"/>
+  <int value="-1869845022" label="force-show-update-menu-item"/>
+  <int value="-1867382602" label="WebRTC-H264WithOpenH264FFmpeg:enabled"/>
+  <int value="-1867342522" label="MaterialDesignHistory:enabled"/>
+  <int value="-1849706663" label="enable-password-force-saving:disabled"/>
+  <int value="-1847835522" label="disable-touch-adjustment"/>
+  <int value="-1847776781"
+      label="enable-loading-ipc-optimization-for-small-resources"/>
+  <int value="-1838482444" label="disable-settings-window"/>
+  <int value="-1835975804" label="disable-offline-auto-reload"/>
+  <int value="-1833149810" label="enable-accessibility-tab-switcher"/>
+  <int value="-1832575380" label="show-saved-copy"/>
+  <int value="-1832221649" label="disable-out-of-process-pac"/>
+  <int value="-1821058653" label="enable-delay-agnostic-aec"/>
+  <int value="-1804485171" label="disable-fullscreen-tab-detaching"/>
+  <int value="-1802502753" label="enable-manual-password-generation:enabled"/>
+  <int value="-1798337879" label="enable-md-downloads"/>
+  <int value="-1797739460" label="brotli-encoding:disabled"/>
+  <int value="-1772172557" label="enable-osk-overscroll"/>
+  <int value="-1767470652" label="out-of-process-pdf"/>
+  <int value="-1751928267" label="disable-icon-ntp"/>
+  <int value="-1746767834" label="ssl-interstitial-v2-gray"/>
+  <int value="-1740519217" label="disable-software-rasterizer"/>
+  <int value="-1735643253" label="enable-display-list-2d-canvas"/>
+  <int value="-1732561795" label="ConsistentOmniboxGeolocation:enabled"/>
+  <int value="-1729926412" label="enable-webusb-notifications"/>
+  <int value="-1725507605" label="enable-web-midi"/>
+  <int value="-1719833926" label="disable-answers-in-suggest"/>
+  <int value="-1716654100" label="tab-capture-downscale-quality"/>
+  <int value="-1714128884" label="disable-launcher-search-provider-api"/>
+  <int value="-1711751318" label="enable-data-reduction-proxy-lo-fi-preview"/>
+  <int value="-1703709912" label="enable-new-ntp"/>
+  <int value="-1703308540" label="disable-webaudio"/>
+  <int value="-1696366449" label="disable-permissions-bubbles"/>
+  <int value="-1692384483" label="disambiguate-autofill-server-name-types"/>
+  <int value="-1691892152" label="SafeSearchUrlReporting:disabled"/>
+  <int value="-1691668194" label="enable-new-bookmark-apps"/>
+  <int value="-1691281364" label="enable-notification-action-icons"/>
+  <int value="-1670137340"
+      label="OptimizeLoadingIPCForSmallResources:disabled"/>
+  <int value="-1669486359" label="ImportantSitesInCBD:enabled"/>
+  <int value="-1663410466" label="top-document-isolation"/>
+  <int value="-1663125441" label="OptInImeMenu:enabled"/>
+  <int value="-1662646099" label="NTPOfflinePageSuggestions:enabled"/>
+  <int value="-1662447331" label="wake-on-packets"/>
+  <int value="-1660972490" label="gpu-rasterization-msaa-sample-count"/>
+  <int value="-1655535052" label="enable-pointer-events"/>
+  <int value="-1654344175" label="disable-extension-info-dialog"/>
+  <int value="-1649778035" label="disable-clear-browsing-data-counters"/>
+  <int value="-1631329950" label="ssl-version-max"/>
+  <int value="-1630419335" label="enable-download-notification"/>
+  <int value="-1624854957" label="enable-es3-apis"/>
+  <int value="-1620568042" label="FeaturePolicy:disabled"/>
+  <int value="-1619757314" label="touch-scrolling-mode"/>
+  <int value="-1618707999" label="enable-webfonts-intervention-v2"/>
+  <int value="-1617183455" label="OfflineRecentPages:disabled"/>
+  <int value="-1616855537" label="enable-manual-password-generation:disabled"/>
+  <int value="-1614912400" label="enable-link-disambiguation-popup"/>
+  <int value="-1605567628" label="disable-overlay-scrollbar"/>
+  <int value="-1604051051" label="SpecialLocale:disabled"/>
+  <int value="-1599538279" label="enable-md-policy-page"/>
+  <int value="-1596559650" label="max-tiles-for-interest-area"/>
+  <int value="-1586642651" label="MaterialDesignExtensions:disabled"/>
+  <int value="-1583728573" label="AutofillCreditCardSigninPromo:disabled"/>
+  <int value="-1581724231" label="ModalPermissionPrompts:enabled"/>
+  <int value="-1578295753" label="UserMediaScreenCapturing:disabled"/>
+  <int value="-1572010356" label="enable-privet-v3"/>
+  <int value="-1571841513" label="enable-devtools-experiments"/>
+  <int value="-1559789642" label="RunAllFlashInAllowMode:enabled"/>
+  <int value="-1553477903" label="ash-disable-text-filtering-in-overview-mode"/>
+  <int value="-1546903171" label="enable-touch-drag-drop"/>
+  <int value="-1544248549" label="ArcUseAuthEndpoint:enabled"/>
+  <int value="-1543316040"
+      label="DisplayPersistenceToggleInPermissionPrompts:disabled"/>
+  <int value="-1536293422" label="SharedArrayBuffer:enabled"/>
+  <int value="-1536242739" label="security-chip"/>
+  <int value="-1514943439" label="ash-enable-swipe-to-close-in-overview-mode"/>
+  <int value="-1514611301" label="enable-data-reduction-proxy-bypass-warnings"/>
+  <int value="-1512656386" label="disable-new-audio-rendering-mixing-strategy"/>
+  <int value="-1510839574" label="disable-sync-synced-notifications"/>
+  <int value="-1504305449" label="NTPPhysicalWebPageSuggestions:enabled"/>
+  <int value="-1497338981" label="disable-accelerated-overflow-scroll"/>
+  <int value="-1491417046" label="enable-fullscreen-toolbar-reveal"/>
+  <int value="-1490298774" label="enable-captive-portal-bypass-proxy-option"/>
+  <int value="-1482685863" label="enable-request-tablet-site"/>
+  <int value="-1480926949" label="MaterialDesignBookmarks:enabled"/>
+  <int value="-1478876902" label="disable-permission-action-reporting"/>
+  <int value="-1473668019" label="token-binding:disabled"/>
+  <int value="-1473136627" label="enable-web-payments"/>
+  <int value="-1467332609" label="tab-management-experiment-type-anise"/>
+  <int value="-1460462432" label="disable-media-source"/>
+  <int value="-1456004000" label="VrShell:disabled"/>
+  <int value="-1443796945" label="OfflinePagesSharing:disabled"/>
+  <int value="-1440152291" label="disable-gesture-typing"/>
+  <int value="-1438279809" label="GamepadExtensions:disabled"/>
+  <int value="-1433719718" label="enable-webrtc-stun-origin"/>
+  <int value="-1433087548" label="enable-app-install-alerts"/>
+  <int value="-1426034869" label="NoCreditCardAbort:enabled"/>
+  <int value="-1419788257" label="enable-experimental-hotwording"/>
+  <int value="-1416754663" label="enable-mac-views-native-app-windows"/>
+  <int value="-1411003295" label="disable-encrypted-media"/>
+  <int value="-1409643943" label="enable-child-account-detection"/>
+  <int value="-1408288176" label="enable-account-consistency"/>
+  <int value="-1399753480" label="disable-harfbuzz-rendertext"/>
+  <int value="-1399419572" label="enable-app-list"/>
+  <int value="-1396974542" label="UserMediaScreenCapturing:enabled"/>
+  <int value="-1392562498" label="disable-origin-chip"/>
+  <int value="-1386966873" label="disable-mac-views-native-app-windows"/>
+  <int value="-1375111024" label="enable-fixed-position-compositing"/>
+  <int value="-1365503870" label="enable-simplified-fullscreen-ui"/>
+  <int value="-1363709707" label="MaterialDesignHistory:disabled"/>
+  <int value="-1358669137" label="enable-supervised-user-blacklist"/>
+  <int value="-1357655121" label="enable-iframe-based-signin"/>
+  <int value="-1349872906"
+      label="disallow-autofill-sync-credential-for-reauth"/>
+  <int value="-1349532167" label="enable-wifi-credential-sync"/>
+  <int value="-1346722635" label="gesture-selection"/>
+  <int value="-1341092934" label="enable-accelerated-overflow-scroll"/>
+  <int value="-1340055960" label="enable-streamlined-hosted-apps"/>
+  <int value="-1337185440" label="enable-webvr"/>
+  <int value="-1334327410" label="ash-enable-touch-view-testing"/>
+  <int value="-1327676774" label="disable-accelerated-mjpeg-decode"/>
+  <int value="-1322882747" label="disable-datasaver-prompt"/>
+  <int value="-1319688939" label="ignore-gpu-blacklist"/>
+  <int value="-1310737697" label="MaterialDesignSettings:enabled"/>
+  <int value="-1302904242" label="enable-navigation-tracing"/>
+  <int value="-1289678848" label="SystemDownloadManager:enabled"/>
+  <int value="-1285021473" label="save-page-as-mhtml"/>
+  <int value="-1276912933" label="enable-quick-unlock-pin"/>
+  <int value="-1271563519" label="enable-appcontainer"/>
+  <int value="-1269084216" label="ash-md"/>
+  <int value="-1268836676" label="disable-out-of-process-pdf"/>
+  <int value="-1267958145" label="disable-pdf-material-ui"/>
+  <int value="-1251411236" label="disable-new-md-input-view"/>
+  <int value="-1246840031" label="OptInImeMenu:disabled"/>
+  <int value="-1241747717" label="enable-android-password-link"/>
+  <int value="-1235586511" label="enable-datasaver-prompt"/>
+  <int value="-1218608640" label="disable-offline-load-stale-cache"/>
+  <int value="-1216837777" label="clear-data-reduction-proxy-data-savings"/>
+  <int value="-1212855900" label="enable-all-bookmarks-view"/>
+  <int value="-1212273428" label="enable-experimental-app-list"/>
+  <int value="-1212167260" label="disable-app-window-cycling"/>
+  <int value="-1205790119" label="CredentialManagementAPI:enabled"/>
+  <int value="-1203955801" label="enable-password-change-support:disabled"/>
+  <int value="-1203742042" label="enable-gesture-selection"/>
+  <int value="-1201183153" label="enable-centered-app-list"/>
+  <int value="-1184904651" label="enable-npapi"/>
+  <int value="-1177802205" label="enable-hosted-app-quit-notification"/>
+  <int value="-1176748003"
+      label="FramebustingNeedsSameOriginOrUserGesture:disabled"/>
+  <int value="-1176493523" label="enable-md-extensions"/>
+  <int value="-1172204005" label="enable-offline-auto-reload-visible-only"/>
+  <int value="-1161409696" label="MediaRemotingEncrypted:enabled"/>
+  <int value="-1160026273" label="enable-web-notification-custom-layouts"/>
+  <int value="-1159563774" label="enable-accessibility-script-injection"/>
+  <int value="-1158993534" label="PrintScaling:enabled"/>
+  <int value="-1151766565" label="enable-fullscreen-tab-detaching"/>
+  <int value="-1137442543" label="enable-slimming-paint"/>
+  <int value="-1136627751" label="ignore-autocomplete-off-autofill"/>
+  <int value="-1136509631" label="ssl-interstitial-v1"/>
+  <int value="-1127996427" label="enable-files-details-panel"/>
+  <int value="-1125133283" label="disable-threaded-scrolling"/>
+  <int value="-1107762575" label="enable-data-reduction-proxy-config-client"/>
+  <int value="-1102212525" label="enable-tcp-fastopen"/>
+  <int value="-1099142083" label="V8Ignition:disabled"/>
+  <int value="-1084055006" label="disable-web-notification-custom-layouts"/>
+  <int value="-1082302549" label="scan-cards-in-web-payments"/>
+  <int value="-1078093206" label="ash-debug-shortcuts"/>
+  <int value="-1077752943" label="enable-password-generation"/>
+  <int value="-1075156797" label="enable-brotli"/>
+  <int value="-1075089382" label="enable-physical-web"/>
+  <int value="-1062119671" label="enable-password-force-saving"/>
+  <int value="-1056310158" label="disable-memory-pressure-chromeos"/>
+  <int value="-1052782474" label="enable-cloud-devices"/>
+  <int value="-1052415111" label="malware-interstitial-v2"/>
+  <int value="-1052219252" label="disable-captive-portal-bypass-proxy"/>
+  <int value="-1045900007" label="NoCreditCardAbort:disabled"/>
+  <int value="-1041650038" label="enable-forced-migration-to-tabbed-mode"/>
+  <int value="-1039889738" label="NativeNotifications:enabled"/>
+  <int value="-1039555838" label="GamepadExtensions:enabled"/>
+  <int value="-1033738911" label="enable-mac-views-dialogs"/>
+  <int value="-1028733699" label="MacViewsWebUIDialogs:disabled"/>
+  <int value="-1022971520" label="enable-search-button-in-omnibox-for-str"/>
+  <int value="-1020450980" label="gesture-deletion"/>
+  <int value="-1016202433" label="disable-add-to-shelf"/>
+  <int value="-1015006759" label="ImportantSitesInCBD:disabled"/>
+  <int value="-998255750" label="ExperimentalKeyboardLockUI:enabled"/>
+  <int value="-996673716" label="enable-web-app-frame"/>
+  <int value="-980260493" label="NTPSnippets:disabled"/>
+  <int value="-979313250" label="enable-google-branded-context-menu"/>
+  <int value="-979057409" label="enable-seccomp-filter-sandbox"/>
+  <int value="-979034258" label="disable-ntp-other-sessions-menu"/>
+  <int value="-978700508" label="disable-simplified-fullscreen-ui"/>
+  <int value="-977476498" label="disable-eol-notification"/>
+  <int value="-972737445" label="ArcUseAuthEndpoint:disabled"/>
+  <int value="-972425050" label="gesture-editing"/>
+  <int value="-968010468" label="SharedArrayBuffer:disabled"/>
+  <int value="-964676765" label="enable-accelerated-mjpeg-decode"/>
+  <int value="-951394314" label="top-chrome-md"/>
+  <int value="-950793721" label="TranslateUI2016Q2:disabled"/>
+  <int value="-949178861" label="enable-new-avatar-menu"/>
+  <int value="-945806012" label="DownloadsUi:enabled"/>
+  <int value="-938178614" label="enable-suggestions-with-substring-match"/>
+  <int value="-933316841" label="enable-permissions-blacklist"/>
+  <int value="-926422468" label="disable-embedded-shared-worker"/>
+  <int value="-918900957" label="AutofillCreditCardAssist:disabled"/>
+  <int value="-918618075" label="enable-service-worker"/>
+  <int value="-914210146" label="enable-web-based-signin"/>
+  <int value="-912456561" label="MidiManagerWinrt:enabled"/>
+  <int value="-908421850" label="PointerEvent:enabled"/>
+  <int value="-907234795" label="NewAudioRenderingMixingStrategy:disabled"/>
+  <int value="-899334103" label="disable-fast-text-autosizing"/>
+  <int value="-898594349" label="ash-enable-stable-overview-order"/>
+  <int value="-898005938" label="disable-pinch-virtual-viewport"/>
+  <int value="-894214299" label="fill-on-account-select:enabled"/>
+  <int value="-891856063" label="MidiManagerAndroid:enabled"/>
+  <int value="-885601782" label="enable-contextual-search"/>
+  <int value="-876148583" label="ArcBootCompletedBroadcast:disabled"/>
+  <int value="-867087281" label="enable-virtual-keyboard"/>
+  <int value="-864266073" label="cros-regions-mode"/>
+  <int value="-864205629" label="enable-offline-load-stale-cache"/>
+  <int value="-861678473" label="disable-offer-upload-credit-cards"/>
+  <int value="-861343291" label="ChromeHome:disabled"/>
+  <int value="-856915246" label="enable-new-audio-rendering-mixing-strategy"/>
+  <int value="-856016114" label="NTPOfflinePages:disabled"/>
+  <int value="-853594220" label="disable-new-avatar-menu"/>
+  <int value="-842438090" label="enable-md-feedback"/>
+  <int value="-836123854" label="wallet-service-use-sandbox"/>
+  <int value="-835672415" label="PointerEventV1SpecCapturing:disabled"/>
+  <int value="-834661509" label="ModalPermissionPrompts:disabled"/>
+  <int value="-825942229" label="tab-management-experiment-type-elderberry"/>
+  <int value="-823165021" label="MaterialDesignUserMenu:enabled"/>
+  <int value="-820041355" label="enable-transition-compositing"/>
+  <int value="-816984237" label="OfflinePagesAsyncDownload:enabled"/>
+  <int value="-814097014" label="disable-session-crashed-bubble"/>
+  <int value="-813474479" label="site-per-process"/>
+  <int value="-812461825" label="AutofillCreditCardSigninPromo:enabled"/>
+  <int value="-802348444" label="disable-site-engagement-service"/>
+  <int value="-798187384" label="try-supported-channel-layouts"/>
+  <int value="-795600188" label="disable-async-dns"/>
+  <int value="-780798969" label="disable-single-click-autofill"/>
+  <int value="-770319039" label="enable-touch-editing"/>
+  <int value="-763759697" label="enable-audio-support-for-desktop-share"/>
+  <int value="-759830869" label="enable-tab-discarding"/>
+  <int value="-749048160" label="enable-panels"/>
+  <int value="-746328467" label="ExpensiveBackgroundTimerThrottling:disabled"/>
+  <int value="-744159181" label="disable-spdy-proxy-dev-auth-origin"/>
+  <int value="-743103250" label="enable-linkable-ephemeral-apps"/>
+  <int value="-741806604" label="DownloadsUi:disabled"/>
+  <int value="-723224470" label="enable-password-force-saving:enabled"/>
+  <int value="-716953514" label="disable-password-separated-signin-flow"/>
+  <int value="-711890895" label="enable-website-settings-manager"/>
+  <int value="-699767107" label="enable-sync-app-list"/>
+  <int value="-697751423" label="disable-quickoffice-component-app"/>
+  <int value="-684900739" label="disable-merge-key-char-events"/>
+  <int value="-667517406" label="overscroll-history-navigation"/>
+  <int value="-661978438" label="enable-data-reduction-proxy-lo-fi"/>
+  <int value="-660160292" label="enable-apps-show-on-first-paint"/>
+  <int value="-650504533" label="enable-speculative-launch-service-worker"/>
+  <int value="-650176557" label="OfflinePagesSvelteConcurrentLoading:enabled"/>
+  <int value="-649956990" label="enable-harfbuzz-rendertext"/>
+  <int value="-645455405" label="MacViewsNativeDialogs:enabled"/>
+  <int value="-641719457" label="disable-compositor-touch-hit-testing"/>
+  <int value="-631740127" label="inert-visual-viewport"/>
+  <int value="-622685174" label="enable-pdf-material-ui"/>
+  <int value="-617452890" label="media-router"/>
+  <int value="-610411643" label="enable-printer-app-search"/>
+  <int value="-606898702" label="MaterialDesignSettings:disabled"/>
+  <int value="-604814313" label="enable-pinch"/>
+  <int value="-604068396" label="disable-input-ime-api"/>
+  <int value="-601384286" label="disable-contextual-search"/>
+  <int value="-598050737" label="disable-es3-apis"/>
+  <int value="-589096918" label="ash-enable-fullscreen-app-list"/>
+  <int value="-579192400" label="disable-input-view"/>
+  <int value="-567920515" label="disable-experimental-hotwording"/>
+  <int value="-563980787" label="disable-webrtc"/>
+  <int value="-562274241" label="enable-extension-action-redesign"/>
+  <int value="-560551550" label="use-memory-pressure-chromeos"/>
+  <int value="-548082154" label="protect-sync-credential:disabled"/>
+  <int value="-536289234" label="ssl-interstitial-v2-colorful"/>
+  <int value="-535208779" label="enable-native-cups"/>
+  <int value="-531810064" label="saveas-menu-label"/>
+  <int value="-519960638" label="enable-site-engagement-service"/>
+  <int value="-518104091" label="NewAudioRenderingMixingStrategy:enabled"/>
+  <int value="-516845951" label="enable-embedded-extension-options"/>
+  <int value="-512971943" label="disable-one-copy"/>
+  <int value="-510488450" label="disable-pnacl"/>
+  <int value="-508143738" label="disable-accelerated-fixed-root-background"/>
+  <int value="-506706655" label="respect-autocomplete-off-autofill"/>
+  <int value="-505679399" label="FontCacheScaling:enabled"/>
+  <int value="-495585885" label="enable-spdy-proxy-dev-auth-origin"/>
+  <int value="-493551777" label="StaleWhileRevalidate2:disabled"/>
+  <int value="-492864618" label="NTPForeignSessionsSuggestions:disabled"/>
+  <int value="-488779992" label="blink-settings"/>
+  <int value="-478462945" label="enable-ephemeral-apps"/>
+  <int value="-475049740" label="disable-vr-shell"/>
+  <int value="-474322576" label="disable-quick-unlock-pin"/>
+  <int value="-472013317" label="WebRTC-H264WithOpenH264FFmpeg:disabled"/>
+  <int value="-462205750" label="enable-service-worker-sync"/>
+  <int value="-455203267" label="use_new_features_summary"/>
+  <int value="-449465495" label="disable-browser-task-scheduler"/>
+  <int value="-430360431" label="disable-password-generation"/>
+  <int value="-428599163" label="NTPDownloadSuggestions:enabled"/>
+  <int value="-418868128" label="enable-experimental-web-platform-features"/>
+  <int value="-396994784" label="enable-vr-shell"/>
+  <int value="-395606844" label="enable-site-settings"/>
+  <int value="-387606010" label="ArcBootCompletedBroadcast:enabled"/>
+  <int value="-385337473" label="enable-fast-unload"/>
+  <int value="-384589459" label="disable-supervised-user-safesites"/>
+  <int value="-378180863" label="disable-panels"/>
+  <int value="-378033324" label="disable-win32k-renderer-lockdown"/>
+  <int value="-364325011" label="enable-files-quick-view"/>
+  <int value="-362022976" label="disable-quirks-client"/>
+  <int value="-361948582" label="material-security-verbose"/>
+  <int value="-360038744" label="invert-viewport-scroll-order"/>
+  <int value="-354783358" label="NTPSaveToOffline:disabled"/>
+  <int value="-353182790" label="ConsistentOmniboxGeolocation:disabled"/>
+  <int value="-351552989" label="disable-hosted-apps-in-windows"/>
+  <int value="-351127770" label="enable-offline-pages-as-bookmarks"/>
+  <int value="-349057743" label="extensions-on-chrome-urls"/>
+  <int value="-345838366" label="enable-hosted-apps-in-windows"/>
+  <int value="-345324571" label="enable-quirks-client"/>
+  <int value="-344343842" label="disable-experimental-app-list"/>
+  <int value="-340622848" label="disable-javascript-harmony-shipping"/>
+  <int value="-340255045" label="allow-nacl-socket-api"/>
+  <int value="-329727402" label="disable-files-quick-view"/>
+  <int value="-328361990" label="enable-experimental-extension-apis"/>
+  <int value="-323831744" label="token-binding:enabled"/>
+  <int value="-322937746" label="disable-desktop-capture-picker-new-ui"/>
+  <int value="-322827131" label="tab-management-experiment-type-basil"/>
+  <int value="-320820051" label="enable-zero-copy"/>
+  <int value="-315604713" label="WebUSB:enabled"/>
+  <int value="-314910380" label="disable-distance-field-text"/>
+  <int value="-314605926" label="protect-sync-credential-on-reauth:enabled"/>
+  <int value="-311148335" label="v8-pac-mojo-out-of-process"/>
+  <int value="-300018686" label="disable-cloud-import"/>
+  <int value="-290672626" label="enable-asm-wasm"/>
+  <int value="-288316828" label="enable-delegated-renderer"/>
+  <int value="-279920685" label="affiliation-based-matching:enabled"/>
+  <int value="-278347667" label="default-tile-height"/>
+  <int value="-277144896" label="enable-viewport-meta"/>
+  <int value="-268357961" label="enable-feature-policy"/>
+  <int value="-254887599" label="google-profile-info"/>
+  <int value="-241353344" label="MidiManagerWinrt:disabled"/>
+  <int value="-234966279" label="PointerEvent:disabled"/>
+  <int value="-234687894"
+      label="NonValidatingReloadOnRefreshContentV2:disabled"/>
+  <int value="-231922000" label="enable-renderer-mojo-channel"/>
+  <int value="-213518852" label="protect-sync-credential:enabled"/>
+  <int value="-206393363" label="enable-scroll-prediction"/>
+  <int value="-204355195" label="secondary-ui-md"/>
+  <int value="-195029497" label="MediaRemoting:disabled"/>
+  <int value="-192919826" label="ViewsSimplifiedFullscreenUI:enabled"/>
+  <int value="-183246373" label="enable-multilingual-spellchecker"/>
+  <int value="-181093956" label="ScrollAnchoring:enabled"/>
+  <int value="-165756594" label="enable-touch-feedback"/>
+  <int value="-159877930" label="MaterialDesignUserManager:disabled"/>
+  <int value="-158549277" label="enable-embeddedsearch-api"/>
+  <int value="-158197254" label="enable-credential-manager-api"/>
+  <int value="-152677714" label="AsmJsToWebAssembly:enabled"/>
+  <int value="-147283486" label="enable-network-portal-notification"/>
+  <int value="-146552997" label="enable-affiliation-based-matching"/>
+  <int value="-138773929" label="PassiveDocumentEventListeners:enabled"/>
+  <int value="-122492389" label="enable-browser-task-scheduler"/>
+  <int value="-119055644" label="GenericSensor:enabled"/>
+  <int value="-102537270" label="extension-content-verification"/>
+  <int value="-99781021" label="disable-roboto-font-ui"/>
+  <int value="-89690053" label="MaterialDesignUserManager:enabled"/>
+  <int value="-88822940" label="ssl-version-min"/>
+  <int value="-86788587" label="allow-autofill-sync-credential"/>
+  <int value="-80353187" label="disable-display-color-calibration"/>
+  <int value="-78035185" label="custom_summary"/>
+  <int value="-76631048" label="disable-offline-auto-reload-visible-only"/>
+  <int value="-70595606" label="ash-enable-unified-desktop"/>
+  <int value="-68877684" label="BackgroundVideoTrackOptimization:enabled"/>
+  <int value="-68225452" label="enable-translate-new-ux"/>
+  <int value="-58242474" label="ash-disable-swipe-to-close-in-overview-mode"/>
+  <int value="-55944747" label="disable-child-account-detection"/>
+  <int value="-52483823" label="disable-new-video-renderer"/>
+  <int value="-52241456" label="enable-single-click-autofill"/>
+  <int value="-48920737" label="enable-smooth-scrolling"/>
+  <int value="-45532639" label="enable-default-media-session"/>
+  <int value="-45074716" label="SystemDownloadManager:disabled"/>
+  <int value="-23090520" label="disable-search-button-in-omnibox"/>
+  <int value="-22544408" label="enable-video-player-chromecast-support"/>
+  <int value="-13918890" label="disable-download-notification"/>
+  <int value="-11260186" label="enable-offline-pages-as-saved-pages"/>
+  <int value="-5052940" label="enable-simplified-fullscreen"/>
+  <int value="-2371418" label="disable-display-list-2d-canvas"/>
+  <int value="0" label="BAD_FLAG_FORMAT">
+    Command-line flag doesn't start with two dashes.
+  </int>
+  <int value="7533886" label="disable-offer-store-unmasked-wallet-cards"/>
+  <int value="10458238" label="disable-print-preview-simplify"/>
+  <int value="11698808" label="enable-dom-distiller-button-animation"/>
+  <int value="27507364" label="apps-keep-chrome-alive"/>
+  <int value="33778663" label="OriginTrials:enabled"/>
+  <int value="37024318" label="disable-affiliation-based-matching"/>
+  <int value="44088203" label="ExpensiveBackgroundTimerThrottling:enabled"/>
+  <int value="48159177" label="reduced-referrer-granularity"/>
+  <int value="51793504" label="protect-sync-credential-on-reauth:disabled"/>
+  <int value="56723110" label="enable-webfonts-intervention"/>
+  <int value="57791920" label="MemoryCoordinator:enabled"/>
+  <int value="59784035" label="ImeThread:disabled"/>
+  <int value="61205887" label="enable-text-input-focus-manager"/>
+  <int value="64942701" label="OfflinePagesSvelteConcurrentLoading:disabled"/>
+  <int value="70878462" label="WebAssembly:disabled"/>
+  <int value="75747474" label="disable-webview-signin-flow"/>
+  <int value="78998551" label="disable-hosted-app-shim-creation"/>
+  <int value="79503461" label="disable-account-consistency"/>
+  <int value="84911198" label="ScanCardsInWebPayments:disabled"/>
+  <int value="88437020" label="FeaturePolicy:enabled"/>
+  <int value="91938915" label="enable-suggestions-service"/>
+  <int value="98134240" label="material-design-ink-drop-animation-speed"/>
+  <int value="103932290" label="show-autofill-type-predictions"/>
+  <int value="118991027" label="enable-accelerated-fixed-root-background"/>
+  <int value="120429808" label="disable-new-profile-management"/>
+  <int value="121684313" label="QuickUnlockPin:enabled"/>
+  <int value="121858954" label="enable-supervised-user-safesites"/>
+  <int value="125934378" label="enable-password-link"/>
+  <int value="147373243" label="enable-deferred-image-decoding"/>
+  <int value="157217034" label="enable-tab-for-desktop-share"/>
+  <int value="157318016" label="AutomaticTabDiscarding:enabled"/>
+  <int value="178337215" label="enable-md-history"/>
+  <int value="180074362" label="memory-pressure-thresholds"/>
+  <int value="194573877" label="MacViewsNativeDialogs:disabled"/>
+  <int value="194895489" label="passive-listeners-default"/>
+  <int value="201343576" label="enable-password-change-support:enabled"/>
+  <int value="203776499" label="enable-virtual-keyboard-overscroll"/>
+  <int value="223662457" label="BackgroundLoadingForDownloads:enabled"/>
+  <int value="244697230" label="enable-theme-color-in-tabbed-mode"/>
+  <int value="262382944" label="GuestViewCrossProcessFrames:disabled"/>
+  <int value="266702296" label="disable-plugin-power-saver"/>
+  <int value="270267831" label="enable-scripts-require-action"/>
+  <int value="274103741" label="enable-ntp-popular-sites"/>
+  <int value="278756320" label="disable-app-list-app-info"/>
+  <int value="280644887" label="mash"/>
+  <int value="301869874" label="NTPPhysicalWebPageSuggestions:disabled"/>
+  <int value="316182183" label="MediaDocumentDownloadButton:disabled"/>
+  <int value="323605372" label="ui-disable-compositor-animation-timelines"/>
+  <int value="324631366" label="enable-drive-search-in-app-launcher"/>
+  <int value="327045548" label="SafeSearchUrlReporting:enabled"/>
+  <int value="330138076" label="enable-clear-browsing-data-counters"/>
+  <int value="332391072" label="cs-contextual-cards-bar-integration"/>
+  <int value="346711293" label="enable-save-password-bubble"/>
+  <int value="348854923" label="v8-cache-strategies-for-cache-storage"/>
+  <int value="358399482" label="enable-high-dpi-fixed-position-compositing"/>
+  <int value="358493847" label="BackgroundLoader:disabled"/>
+  <int value="360391863" label="NTPOfflineBadge:enabled"/>
+  <int value="360599302" label="enable-gpu-rasterization"/>
+  <int value="365467768" label="prefetch-search-results"/>
+  <int value="368854020" label="ash-screen-rotation-animation"/>
+  <int value="370486304" label="enable-origin-chip-on-srp"/>
+  <int value="379326303" label="enable-add-to-shelf"/>
+  <int value="379428799" label="security-chip-animation"/>
+  <int value="385969127" label="disable-win32k-lockdown"/>
+  <int value="400322063" label="ash-disable-screen-orientation-lock"/>
+  <int value="401983950" label="enable-spdy4"/>
+  <int value="402143634" label="enable-search-button-in-omnibox-always"/>
+  <int value="405329388"
+      label="FramebustingNeedsSameOriginOrUserGesture:enabled"/>
+  <int value="411250226" label="AutoplayMutedVideos:disabled"/>
+  <int value="412957264" label="tab-close-buttons-hidden-with-touch"/>
+  <int value="413081240" label="enable-new-md-input-view"/>
+  <int value="415154056" label="enable-physical-keyboard-autocorrect"/>
+  <int value="416887895" label="enable-password-change-support"/>
+  <int value="422307097" label="PhysicalWeb:disabled"/>
+  <int value="423615350" label="enable-tab-audio-muting"/>
+  <int value="423855924" label="enable-tab-switcher-theme-colors"/>
+  <int value="431691805" label="MediaDocumentDownloadButton:enabled"/>
+  <int value="446316019" label="enable-threaded-compositing"/>
+  <int value="451196246" label="disable-impl-side-painting"/>
+  <int value="455698038"
+      label="disable-gesture-requirement-for-media-playback"/>
+  <int value="457881889" label="enable-autoplay-muted-videos"/>
+  <int value="458410433" label="disable-views-rect-based-targeting"/>
+  <int value="460136092" label="MidiManagerAndroid:disabled"/>
+  <int value="460475728" label="wake-on-wifi-packet"/>
+  <int value="466248382" label="disable-push-api-background-mode"/>
+  <int value="468959230"
+      label="enable-non-validating-reload-on-refresh-content"/>
+  <int value="470011024" label="NonValidatingReloadOnNormalReload:enabled"/>
+  <int value="474743272" label="material-design-ink-drop"/>
+  <int value="477967119" label="enable-unified-media-pipeline"/>
+  <int value="479906041" label="RunAllFlashInAllowMode:disabled"/>
+  <int value="480544447" label="NonValidatingReloadOnRefreshContentV2:enabled"/>
+  <int value="493903641" label="disable-appcontainer"/>
+  <int value="494733611" label="disable-drop-sync-credential"/>
+  <int value="503245473" label="disable-translate-new-ux"/>
+  <int value="504994663" label="GenericSensor:disabled"/>
+  <int value="510814146" label="OfflineBookmarks:enabled"/>
+  <int value="535976218" label="enable-plugin-power-saver"/>
+  <int value="538468149" label="OfflinePagesCT:enabled"/>
+  <int value="546520086" label="enable-data-reduction-proxy-savings-promo"/>
+  <int value="546710806" label="disable-easy-signin"/>
+  <int value="550378029" label="reset-app-list-install-state"/>
+  <int value="550387510" label="NTPAssetDownloadSuggestions:disabled"/>
+  <int value="567368307" label="enable-experimental-canvas-features"/>
+  <int value="581118445" label="enable-eol-notification"/>
+  <int value="584541349" label="ContextualSearchSingleActions:disabled"/>
+  <int value="592050831" label="disable-slimming-paint"/>
+  <int value="593707592" label="disable-network-portal-notification"/>
+  <int value="598827460" label="enable-roboto-font-ui"/>
+  <int value="602117675" label="NTPBookmarkSuggestions:enabled"/>
+  <int value="603326800" label="UsePasswordSeparatedSigninFlow:enabled"/>
+  <int value="605150752" label="WebUSB:disabled"/>
+  <int value="606288133" label="enable-print-preview-register-promos"/>
+  <int value="609112512" label="touch-selection-strategy"/>
+  <int value="610545308" label="enable-potentially-annoying-security-features"/>
+  <int value="625273056" label="disable-boot-animation"/>
+  <int value="628302973" label="NTPSnippets:enabled"/>
+  <int value="630947363" label="touch-events"/>
+  <int value="636425179" label="mhtml-generator-option"/>
+  <int value="637396292" label="AllBookmarks:enabled"/>
+  <int value="643725031" label="disable-touch-feedback"/>
+  <int value="646252875" label="ReadItLaterInMenu:enabled"/>
+  <int value="646738320" label="disable-gesture-editing"/>
+  <int value="650602639" label="enable-autofill-keyboard-accessory-view"/>
+  <int value="683410401"
+      label="enable-proximity-auth-bluetooth-low-energy-discovery"/>
+  <int value="684806628" label="TranslateLanguageByULP:disabled"/>
+  <int value="689489984" label="disable-zero-suggest"/>
+  <int value="690185633" label="NonValidatingReloadOnNormalReload:disabled"/>
+  <int value="693012666" label="QuickUnlockPin:disabled"/>
+  <int value="709850261" label="disable-touch-editing"/>
+  <int value="711424932" label="enable-cloud-print-xps"/>
+  <int value="715617684" label="OriginTrials:disabled"/>
+  <int value="716080990" label="restrict-iframe-permissions"/>
+  <int value="730024226" label="enable-out-of-process-pdf"/>
+  <int value="732703958" label="enable-gesture-tap-highlight"/>
+  <int value="745868416" label="disable-system-timezone-automatic-detection"/>
+  <int value="746944193" label="enable-automatic-password-saving:disabled"/>
+  <int value="747847237" label="PhysicalWeb:enabled"/>
+  <int value="752194066" label="enable-app-window-cycling"/>
+  <int value="752939691" label="disable-tab-for-desktop-share"/>
+  <int value="773919225" label="disable-office-editing-component-extension"/>
+  <int value="779086132" label="enable-data-reduction-proxy-alt"/>
+  <int value="782167080" label="enable-new-qp-input-view"/>
+  <int value="803282885" label="PreferHtmlOverPlugins:disabled"/>
+  <int value="805567148"
+      label="enable-canvas-2d-dynamic-rendering-mode-switching"/>
+  <int value="806334184" label="AndroidSpellChecker:enabled"/>
+  <int value="807734471" label="tab-management-experiment-type-disabled"/>
+  <int value="811374216" label="disable-new-bookmark-apps"/>
+  <int value="820650704" label="disable-ntp-popular-sites"/>
+  <int value="821192723" label="show-fps-counter"/>
+  <int value="824961931" label="use-simple-cache-backend"/>
+  <int value="834033186" label="enable-data-reduction-proxy-dev"/>
+  <int value="834326277" label="enable-answers-in-suggest"/>
+  <int value="835018878" label="disable-quic"/>
+  <int value="838887742" label="manual-enhanced-bookmarks"/>
+  <int value="841343322" label="disable-new-korean-ime"/>
+  <int value="851085848" label="enable-settings-window"/>
+  <int value="854730848" label="disable-app-info-dialog-mac"/>
+  <int value="855746780" label="disable-physical-keyboard-autocorrect"/>
+  <int value="857445869" label="enable-captive-portal-bypass-proxy"/>
+  <int value="862453793" label="TranslateUI2016Q2:enabled"/>
+  <int value="867512869" label="mark-non-secure-as"/>
+  <int value="869531646" label="enable-session-crashed-bubble"/>
+  <int value="879699575" label="disable-gesture-tap-highlight"/>
+  <int value="879992337" label="disable-pull-to-refresh-effect"/>
+  <int value="880510010" label="enable-permissions-bubbles"/>
+  <int value="884106779" label="supervised-user-safesites"/>
+  <int value="887011602" label="enable-spelling-auto-correct"/>
+  <int value="903267263" label="disable-offline-pages"/>
+  <int value="908523940" label="PassiveEventListenersDueToFling:disabled"/>
+  <int value="909439558" label="disable-device-discovery"/>
+  <int value="916316159" label="disable-new-app-list-mixer"/>
+  <int value="929462705" label="disable-link-disambiguation-popup"/>
+  <int value="935655516" label="password-import-export:disabled"/>
+  <int value="936341613" label="OfflinePagesCT:disabled"/>
+  <int value="936919953" label="bypass-app-banner-engagement-checks"/>
+  <int value="938191241" label="VrShell:enabled"/>
+  <int value="939554480" label="enable-credit-card-scan"/>
+  <int value="939603162" label="BackgroundLoadingForDownloads:disabled"/>
+  <int value="943319566" label="enable-intent-picker"/>
+  <int value="952558794" label="enable-remote-assistance"/>
+  <int value="980396200" label="enable-new-korean-ime"/>
+  <int value="982032277" label="NTPOfflineBadge:disabled"/>
+  <int value="983311394" label="tab-management-experiment-type"/>
+  <int value="1000706989" label="AutomaticTabDiscarding:disabled"/>
+  <int value="1002585107" label="emphasize-titles-in-omnibox-dropdown"/>
+  <int value="1003002105" label="MaterialDesignBookmarks:disabled"/>
+  <int value="1007444341" label="enable-prefixed-encrypted-media"/>
+  <int value="1015895665" label="drop-sync-credential:enabled"/>
+  <int value="1019857902"
+      label="disable-hide-inactive-stacked-tab-close-buttons"/>
+  <int value="1022992701" label="enable-origin-chip-always"/>
+  <int value="1033597574" label="disable-layer-squashing"/>
+  <int value="1050048304" label="enable-font-cache-scaling"/>
+  <int value="1050321458" label="new-profile-management"/>
+  <int value="1054910800" label="enable-timezone-tracking-option"/>
+  <int value="1060319397" label="enable-data-reduction-proxy-carrier-test"/>
+  <int value="1062357243" label="remember-cert-error-decisions"/>
+  <int value="1064288458" label="OfflineRecentPages:enabled"/>
+  <int value="1067618884" label="enable-experimental-input-view-features"/>
+  <int value="1070300488" label="disable-webgl"/>
+  <int value="1087235172" label="file-manager-enable-new-audio-player"/>
+  <int value="1090377940" label="enable-quic-https"/>
+  <int value="1095061640" label="enable-prominent-url-app-flow"/>
+  <int value="1098823967" label="ash-enable-window-cycle-ui"/>
+  <int value="1104948452" label="manual-enhanced-bookmarks-optout"/>
+  <int value="1105439588" label="enable-swipe-selection"/>
+  <int value="1107543566" label="enable-one-copy"/>
+  <int value="1108663108" label="disable-device-discovery-notifications"/>
+  <int value="1113365156" label="tab-management-experiment-type-chive"/>
+  <int value="1114629582" label="enable-floating-virtual-keyboard"/>
+  <int value="1118109174" label="enable-launcher-search-provider-api"/>
+  <int value="1127183523" label="PassiveEventListenersDueToFling:enabled"/>
+  <int value="1129888794" label="ash-touch-hud"/>
+  <int value="1133635187" label="force-gpu-rasterization"/>
+  <int value="1139226452" label="enable-nacl-debug"/>
+  <int value="1139363314" label="disable-supervised-user-blacklist"/>
+  <int value="1142515376" label="enable-nacl"/>
+  <int value="1142788238" label="FontCacheScaling:disabled"/>
+  <int value="1149823105" label="enable-input-ime-api"/>
+  <int value="1150622273" label="enable-apps-file-associations"/>
+  <int value="1155923106" label="NTPOfflinePages:enabled"/>
+  <int value="1163255347" label="ash-enable-touch-view-touch-feedback"/>
+  <int value="1166169237" label="disable-delay-agnostic-aec"/>
+  <int value="1167613030" label="enable-permission-action-reporting"/>
+  <int value="1174088940" label="enable-wasm"/>
+  <int value="1179936481" label="enable-android-pay-integration-v1"/>
+  <int value="1181056275" label="enable-cloud-backup"/>
+  <int value="1183431946" label="v8-cache-options"/>
+  <int value="1185424279" label="enable-media-router"/>
+  <int value="1190035852" label="MediaRemoting:enabled"/>
+  <int value="1192302892" label="gesture-typing"/>
+  <int value="1192913630" label="OfflinePagesBackgroundLoading:disabled"/>
+  <int value="1196644408" label="performance-monitor-gathering"/>
+  <int value="1196834473" label="disable-smart-virtual-keyboard"/>
+  <int value="1205849612" label="enable-sync-synced-notifications"/>
+  <int value="1209221384" label="enable-experimental-accessibility-features"/>
+  <int value="1210343926" label="enable-drop-sync-credential"/>
+  <int value="1219628795" label="PrintScaling:disabled"/>
+  <int value="1220171692" label="SpeculativeLaunchServiceWorker:enabled"/>
+  <int value="1220464509" label="enable-first-run-ui-transitions"/>
+  <int value="1221559505" label="enable-spelling-feedback-field-trial"/>
+  <int value="1235800887" label="V8Ignition:enabled"/>
+  <int value="1237297772" label="no-pings"/>
+  <int value="1245889469" label="enable-surface-worker"/>
+  <int value="1247293682" label="topchrome-md"/>
+  <int value="1250071868" label="disable-timezone-tracking-option"/>
+  <int value="1253698118" label="ash-disable-stable-overview-order"/>
+  <int value="1257980502" label="disable-accelerated-video-decode"/>
+  <int value="1268470658" label="disable-android-password-link"/>
+  <int value="1269940659" label="EnumerateAudioDevices:enabled"/>
+  <int value="1272699563" label="enable-hosted-mode"/>
+  <int value="1276209777" label="ntp-switch-to-existing-tab"/>
+  <int value="1279584261" label="enable-carrier-switching"/>
+  <int value="1283960113" label="disable-fixed-position-compositing"/>
+  <int value="1291966558" label="ScrollAnchoring:disabled"/>
+  <int value="1294131571" label="disable-winrt-midi-api"/>
+  <int value="1298981651" label="disable-new-task-manager"/>
+  <int value="1300282719" label="OfflinePagesBackgroundLoading:enabled"/>
+  <int value="1302421166" label="NativeNotifications:disabled"/>
+  <int value="1308537004" label="force-pnacl-subzero"/>
+  <int value="1312025202" label="NTPOfflinePageSuggestions:disabled"/>
+  <int value="1317562265" label="SeccompSandboxAndroid:disabled"/>
+  <int value="1318073661" label="MaterialDesignExtensions:enabled"/>
+  <int value="1319725131" label="enable-distance-field-text"/>
+  <int value="1320201920" label="enable-touchpad-three-finger-click"/>
+  <int value="1344833841" label="ImeThread:enabled"/>
+  <int value="1351830811" label="do-not-ignore-autocomplete-off"/>
+  <int value="1352447982" label="enable-lcd-text"/>
+  <int value="1359972809" label="enable-gesture-deletion"/>
+  <int value="1361047396" label="disable-click-delay"/>
+  <int value="1367529437" label="NTPAssetDownloadSuggestions:enabled"/>
+  <int value="1367671275" label="enable-proximity-auth-proximity-detection"/>
+  <int value="1371092708" label="disable-desktop-capture-picker-old-ui"/>
+  <int value="1371907429" label="enable-wallet-card-import"/>
+  <int value="1372680885" label="enable-mtp-write-support"/>
+  <int value="1373777956" label="disable-threaded-gpu-rasterization"/>
+  <int value="1378310092" label="disable-suggestions-service"/>
+  <int value="1381746642" label="enable-automatic-password-saving"/>
+  <int value="1382500494" label="disable-drive-apps-in-app-list"/>
+  <int value="1383591631" label="enable-gesture-typing"/>
+  <int value="1384614036" label="disable-unified-media-pipeline"/>
+  <int value="1389729816" label="data-reduction-proxy-lo-fi"/>
+  <int value="1405459667" label="enable-fast-text-autosizing"/>
+  <int value="1406354320" label="MacViewsWebUIDialogs:enabled"/>
+  <int value="1407625309"
+      label="disable-minimize-on-second-launcher-item-click"/>
+  <int value="1408331660" label="enhanced-bookmarks-experiment"/>
+  <int value="1410697724" label="mediadrm-enable-non-compositing"/>
+  <int value="1416592483" label="ash-enable-mirrored-screen"/>
+  <int value="1418054870" label="SpecialLocale:enabled"/>
+  <int value="1421620678" label="simple-clear-browsing-data-support-string"/>
+  <int value="1442798825" label="enable-quic"/>
+  <int value="1454363479" label="disable-storage-manager"/>
+  <int value="1458583431" label="arc-use-auth-endpoint"/>
+  <int value="1459529277" label="disable-text-input-focus-manager"/>
+  <int value="1460958818" label="NTPForeignSessionsSuggestions:enabled"/>
+  <int value="1465624446" label="disable-zero-copy"/>
+  <int value="1466380480" label="enable-device-discovery-notifications"/>
+  <int value="1469407485" label="disable-accelerated-2d-canvas"/>
+  <int value="1479248574" label="disable-voice-input"/>
+  <int value="1481562816" label="disable-password-link"/>
+  <int value="1486171015" label="disable-fill-on-account-select"/>
+  <int value="1489915799" label="disable-permissions-blacklist"/>
+  <int value="1490043732" label="enable-fill-on-account-select"/>
+  <int value="1490255042" label="enable-overlay-scrollbar"/>
+  <int value="1495341532" label="disable-mtp-write-support"/>
+  <int value="1496571153" label="enable-webapk"/>
+  <int value="1497924954" label="js-flags"/>
+  <int value="1505194447" label="disable-transition-compositing"/>
+  <int value="1509901380" label="disable-drive-search-in-app-launcher"/>
+  <int value="1510476448" label="disable-prefixed-encrypted-media"/>
+  <int value="1511140997" label="OfflinePagesAsyncDownload:disabled"/>
+  <int value="1511161758" label="BackgroundLoader:enabled"/>
+  <int value="1515196403" label="fast-user-switching"/>
+  <int value="1517863401" label="history-entry-requires-user-gesture"/>
+  <int value="1548776701" label="AllBookmarks:disabled"/>
+  <int value="1548942246" label="PassiveDocumentEventListeners:disabled"/>
+  <int value="1560188739" label="reader-mode-heuristics"/>
+  <int value="1579461102" label="MemoryCoordinator:disabled"/>
+  <int value="1586022426" label="AutofillCreditCardAssist:enabled"/>
+  <int value="1589341623" label="disable-easy-unlock"/>
+  <int value="1612446645" label="enable-weak-memorycache"/>
+  <int value="1612974229" label="allow-insecure-localhost"/>
+  <int value="1617187093" label="enable-improved-a2hs"/>
+  <int value="1622131033" label="ozone-test-single-overlay-support"/>
+  <int value="1634897915" label="password-import-export:enabled"/>
+  <int value="1636962093" label="disable-material-design-ntp"/>
+  <int value="1646498561" label="OfflineBookmarks:disabled"/>
+  <int value="1657713458" label="disable-virtual-keyboard-overscroll"/>
+  <int value="1658644418" label="disable-app-list-voice-search"/>
+  <int value="1661925474" label="silent-debugger-extension-api"/>
+  <int value="1668611601" label="enable-encrypted-media"/>
+  <int value="1689123607" label="enable-app-link"/>
+  <int value="1689183477" label="enable-merge-key-char-events"/>
+  <int value="1694854500" label="disable-save-password-bubble"/>
+  <int value="1696139514" label="enable-ble-advertising-in-apps"/>
+  <int value="1701972870" label="NTPSnippetsIncreasedVisibility:enabled"/>
+  <int value="1702821235" label="WebAssembly:enabled"/>
+  <int value="1705724232" label="use-android-midi-api"/>
+  <int value="1723601083" label="enable-app-window-controls"/>
+  <int value="1724800383" label="AsmJsToWebAssembly:disabled"/>
+  <int value="1730094138" label="enable-md-storage-manager"/>
+  <int value="1730236697" label="force-device-scale-factor"/>
+  <int value="1731522433" label="enable-offer-store-unmasked-wallet-cards"/>
+  <int value="1747279677" label="disable-delegated-renderer"/>
+  <int value="1752168018" label="enable-stale-while-revalidate"/>
+  <int value="1766676896" label="affiliation-based-matching:disabled"/>
+  <int value="1772454319" label="enable-storage-manager"/>
+  <int value="1775475563" label="malware-interstitial-v3"/>
+  <int value="1776475705" label="show-composited-layer-borders"/>
+  <int value="1777059507" label="trust-autofill-server-name-types"/>
+  <int value="1777806335" label="UsePasswordSeparatedSigninFlow:disabled"/>
+  <int value="1783293530" label="disallow-autofill-sync-credential"/>
+  <int value="1783837132" label="enable-threaded-gpu-rasterization"/>
+  <int value="1785093465" label="enable-document-passive-event-listeners"/>
+  <int value="1786229999" label="disable-md-downloads"/>
+  <int value="1791904609" label="disable-autofill-keyboard-accessory-view"/>
+  <int value="1803465156" label="enable-zero-suggest-most-visited"/>
+  <int value="1809940714" label="SpeculativeLaunchServiceWorker:disabled"/>
+  <int value="1812368073" label="enable-new-app-list-mixer"/>
+  <int value="1814671708" label="disable-password-manager-reauthentication"/>
+  <int value="1817312143" label="num-raster-threads"/>
+  <int value="1819256299" label="disable-webrtc-hw-decoding"/>
+  <int value="1819536169" label="disable-cast-streaming-hw-encoding"/>
+  <int value="1820451991" label="enable-offline-auto-reload"/>
+  <int value="1821723343" label="disable-saml-signin"/>
+  <int value="1827369558" label="AndroidPayIntegrationV1:disabled"/>
+  <int value="1828660283" label="enable-webfonts-intervention-trigger"/>
+  <int value="1844110073" label="enable-app-view"/>
+  <int value="1847024354" label="enable-hotword-hardware"/>
+  <int value="1852630189" label="NTPBookmarkSuggestions:disabled"/>
+  <int value="1855524566" label="allow-insecure-websocket-from-https-origin"/>
+  <int value="1860597983" label="AndroidSpellChecker:disabled"/>
+  <int value="1861251313"
+      label="enable-message-center-always-scroll-up-upon-notification-removal"/>
+  <int value="1862207743" label="enable-android-spellchecker"/>
+  <int value="1865068568" label="disable-audio-support-for-desktop-share"/>
+  <int value="1865799183" label="javascript-harmony"/>
+  <int value="1867085340" label="brotli-encoding:enabled"/>
+  <int value="1878331098" label="GuestViewCrossProcessFrames:enabled"/>
+  <int value="1881036528" label="disable-multilingual-spellchecker"/>
+  <int value="1881174782" label="disable-brotli"/>
+  <int value="1889076955" label="disable-app-link"/>
+  <int value="1891210939" label="enable-blink-features"/>
+  <int value="1892201400" label="enable-password-separated-signin-flow"/>
+  <int value="1895587769" label="CredentialManagementAPI:disabled"/>
+  <int value="1896456311" label="enable-password-save-in-page-navigation"/>
+  <int value="1898231011" label="enable-native-notifications"/>
+  <int value="1900529524" label="disable-touch-drag-drop"/>
+  <int value="1905465678" label="ContextualSearchSingleActions:enabled"/>
+  <int value="1906942630" label="enable-easy-unlock"/>
+  <int value="1915178511" label="disable-blink-features"/>
+  <int value="1927259098" label="TranslateLanguageByULP:enabled"/>
+  <int value="1930901873" label="disable-sync-app-list"/>
+  <int value="1931309368" label="fill-on-account-select:disabled"/>
+  <int value="1939413645" label="enable-invalid-cert-collection"/>
+  <int value="1942911276" label="enable-grouped-history"/>
+  <int value="1944156526" label="sync-url"/>
+  <int value="1947350992" label="drop-sync-credential:disabled"/>
+  <int value="1951466218" label="enable-data-reduction-proxy-lite-page"/>
+  <int value="1955677113" label="trace-export-events-to-etw"/>
+  <int value="1958387645" label="ScanCardsInWebPayments:enabled"/>
+  <int value="1961425320" label="force-qtkit"/>
+  <int value="1966730288" label="disable-threaded-compositing"/>
+  <int value="1969604362" label="enable-pinch-virtual-viewport"/>
+  <int value="1980011075" label="debug-packed-apps"/>
+  <int value="1980648371" label="PointerEventV1SpecCapturing:enabled"/>
+  <int value="1992466116" label="enable-passive-event-listeners-due-to-fling"/>
+  <int value="1993258379" label="enable-icon-ntp"/>
+  <int value="1994431722" label="MaterialDesignUserMenu:disabled"/>
+  <int value="1995322219" label="EmojiHandwritingVoiceInput:enabled"/>
+  <int value="1996125159" label="AutoplayMutedVideos:enabled"/>
+  <int value="1997047666" label="NTPSnippetsIncreasedVisibility:disabled"/>
+  <int value="2000091128" label="enable-touch-hover"/>
+  <int value="2004483175" label="multi-instance-merge-tabs"/>
+  <int value="2004829262" label="enable-webgl-draft-extensions"/>
+  <int value="2005614493" label="tab-management-experiment-type-dill"/>
+  <int value="2014331873" label="NTPDownloadSuggestions:disabled"/>
+  <int value="2020107447" label="AndroidPayIntegrationV1:enabled"/>
+  <int value="2037756154" label="enable-impl-side-painting"/>
+  <int value="2059322877" label="new-avatar-menu"/>
+  <int value="2063091429" label="OfflinePagesSharing:enabled"/>
+  <int value="2071340353" label="progress-bar-completion"/>
+  <int value="2071461362" label="disable-credit-card-scan"/>
+  <int value="2076903744" label="progress-bar-animation"/>
+  <int value="2077917024"
+      label="enable-supervised-user-managed-bookmarks-folder"/>
+  <int value="2079672348" label="ExperimentalKeyboardLockUI:disabled"/>
+  <int value="2085438501" label="ChromeHome:enabled"/>
+  <int value="2093235103" label="default-tile-width"/>
+  <int value="2097048479" label="disable-auto-hiding-toolbar-threshold"/>
+  <int value="2098714203" label="enable-generic-sensors"/>
+  <int value="2101151142" label="disable-direct-write"/>
+  <int value="2104788328" label="use-winrt-midi-api"/>
+  <int value="2119964154" label="enable-download-resumption"/>
+  <int value="2121550859" label="PreferHtmlOverPlugins:enabled"/>
+  <int value="2121776031" label="auto-virtual-keyboard"/>
+  <int value="2122023503" label="enable-win32k-lockdown-mimetypes"/>
+  <int value="2122876605" label="enable-bleeding-edge-rendering-fast-paths"/>
+  <int value="2123567684" label="OptimizeLoadingIPCForSmallResources:enabled"/>
+  <int value="2126203058" label="force-show-update-menu-badge"/>
+  <int value="2129184006" label="NTPOfflinePageDownloadSuggestions:enabled"/>
+  <int value="2129929643" label="enable-use-zoom-for-dsf"/>
+  <int value="2137347307" label="enable-drive-apps-in-app-list"/>
+  <int value="2137599770" label="enable-win32k-renderer-lockdown"/>
+  <int value="2141463681" label="enable-offer-upload-credit-cards"/>
+</enum>
+
+<enum name="LoginDatabaseInitError" type="int">
+  <int value="0" label="Init success"/>
+  <int value="1" label="Can't open file"/>
+  <int value="2" label="Start transaction error"/>
+  <int value="3" label="Meta table failed initialization"/>
+  <int value="4" label="Incompatible current version"/>
+  <int value="5" label="Logins table failed initialization"/>
+  <int value="6" label="Stats table failed initialization"/>
+  <int value="7" label="Migration error"/>
+  <int value="8" label="Commit transaction error"/>
+</enum>
+
+<enum name="LoginFailureReason" type="int">
+  <int value="0" label="NONE">None</int>
+  <int value="1" label="COULD_NOT_MOUNT_CRYPTOHOME">
+    Could not mount cryptohome
+  </int>
+  <int value="2" label="COULD_NOT_MOUNT_TMPFS">Could not mount tmpfs</int>
+  <int value="3" label="COULD_NOT_UNMOUNT_CRYPTOHOME">
+    Could not unmount cryptohome
+  </int>
+  <int value="4" label="DATA_REMOVAL_FAILED">Data removal failed</int>
+  <int value="5" label="LOGIN_TIMED_OUT">Login timed out</int>
+  <int value="6" label="UNLOCK_FAILED">Unlock failed</int>
+  <int value="7" label="NETWORK_AUTH_FAILED">Network auth failed</int>
+</enum>
+
+<enum name="LoginIsKnownUser" type="int">
+  <int value="0" label="Unknown user"/>
+  <int value="1" label="Known user"/>
+</enum>
+
+<enum name="LoginPasswordChangeFlow" type="int">
+  <int value="0" label="Password change"/>
+  <int value="1" label="Cryptohome failure"/>
+</enum>
+
+<enum name="LoginPolicyFilesState" type="int">
+  <summary>Policy/owner key file state.</summary>
+  <int value="0" label="HEALTHY_R11">Healthy, pre-R11</int>
+  <int value="1" label="UNUSED">Unused</int>
+  <int value="2" label="HEALTHY">Healthy</int>
+  <int value="3" label="RESERVED">Reserved</int>
+  <int value="4" label="BAD_POLICY_R11">Key OK, policy bad, pre-R11</int>
+  <int value="5" label="UNUSED">Unused</int>
+  <int value="6" label="BAD_POLICY">Key OK, policy bad</int>
+  <int value="7" label="RESERVED">Reserved</int>
+  <int value="8" label="KEY_OK_NO_POLICY_R11">
+    Key OK, no policy, pre-R11 user (http://crosbug.com/24916)
+  </int>
+  <int value="9" label="UNUSED">Unused</int>
+  <int value="10" label="KEY_OK_NO_POLICY">Key OK, no policy</int>
+  <int value="11" label="RESERVED">Reserved</int>
+  <int value="12" label="RESERVED">Reserved</int>
+  <int value="13" label="RESERVED">Reserved</int>
+  <int value="14" label="RESERVED">Reserved</int>
+  <int value="15" label="RESERVED">Reserved</int>
+  <int value="16" label="BAD_KEY_R11">Key bad, policy OK, pre-R11</int>
+  <int value="17" label="UNUSED">Unused</int>
+  <int value="18" label="BAD_KEY">Key bad, policy OK</int>
+  <int value="19" label="RESERVED">Reserved</int>
+  <int value="20" label="BAD_KEY_BAD_POLICY_R11">
+    Key bad, policy bad, pre-R11
+  </int>
+  <int value="21" label="UNUSED">Unused</int>
+  <int value="22" label="BAD_KEY_BAD_POLICY">Key bad, policy bad</int>
+  <int value="23" label="RESERVED">Reserved</int>
+  <int value="24" label="BAD_KEY_NO_POLICY_R11">
+    Key bad, policy bad, pre-R11
+  </int>
+  <int value="25" label="UNUSED">Unused</int>
+  <int value="26" label="BAD_KEY_BAD_POLICY">Key bad, policy bad</int>
+  <int value="27" label="RESERVED">Reserved</int>
+  <int value="28" label="RESERVED">Reserved</int>
+  <int value="29" label="RESERVED">Reserved</int>
+  <int value="30" label="RESERVED">Reserved</int>
+  <int value="31" label="RESERVED">Reserved</int>
+  <int value="32" label="NO_KEY_R11">No key, policy OK, pre-R11</int>
+  <int value="33" label="UNUSED">Unused</int>
+  <int value="34" label="NO_KEY">No key, policy OK</int>
+  <int value="35" label="RESERVED">RESERVED</int>
+  <int value="36" label="NO_KEY_BAD_POLICY_R11">
+    No key, policy bad, pre-R11
+  </int>
+  <int value="37" label="UNUSED">Unused</int>
+  <int value="38" label="NO_KEY_BAD_POLICY">No key, bad policy</int>
+  <int value="39" label="RESERVED">Reserved</int>
+  <int value="40" label="NO_KEY_NO_POLICY_R11">Un-owned, pre-R11</int>
+  <int value="41" label="UNUSED">Unused</int>
+  <int value="42" label="NO_KEY_NO_POLICY">Un-owned</int>
+  <int value="43" label="RESERVED">Reserved</int>
+</enum>
+
+<enum name="LoginReauthReasons" type="int">
+  <int value="0" label="None">
+    No reason recorded so far, nothing to report. This value should never be
+    reported in histogram.
+  </int>
+  <int value="1" label="Other">Legacy profile holders.</int>
+  <int value="2" label="InvalidTokenHandle">
+    Password changed, revoked credentials, account deleted.
+  </int>
+  <int value="3" label="IncorrectPwdEntered">
+    Incorrect password entered 3 times at the pod.
+  </int>
+  <int value="4" label="IncorrectSAMLPwdEntered">
+    Incorrect password entered by a SAML user once. OS would show a tooltip
+    offering user to complete the online sign-in.
+  </int>
+  <int value="5" label="SAMLReauthPolicy">
+    Company policy required re-auth for SAML users.
+  </int>
+  <int value="6" label="MissingCryptohome">
+    Cryptohome is missing, most likely due to deletion during garbage
+    collection.
+  </int>
+  <int value="7" label="SyncFailed">
+    After prior login, OS failed to connect to the sync with the existing RT.
+    This could be due to a deleted account, password changed, account revoked,
+    etc.
+  </int>
+  <int value="8" label="PwdUpdateSkipped">
+    User cancelled the password change prompt. Chrome OS has to continue to send
+    the user through the online flow until user updates their cryptohome
+    password or agrees to start the new cryptohome.
+  </int>
+</enum>
+
+<enum name="LoginStateKeyGenerationStatus" type="int">
+  <summary>The result of a state key generation operation.</summary>
+  <int value="0" label="GENERATION_METHOD_IDENTIFIER_HASH">
+    Successfully generated state keys from machine identifiers.
+  </int>
+  <int value="1" label="GENERATION_METHOD_HMAC_DEVICE_SECRET">
+    Successfully generated state keys from stable device secret.
+  </int>
+  <int value="2" label="MISSING_IDENTIFIERS">
+    Failed due to missing machine IDs.
+  </int>
+  <int value="3" label="BAD_DEVICE_SECRET">
+    Failed due to invalid device secret input.
+  </int>
+  <int value="4" label="HMAC_INIT_FAILURE">HMAC initialization failed.</int>
+  <int value="5" label="HMAC_SIGN_FAILURE">HMAC computation failed.</int>
+</enum>
+
+<enum name="LoginSuccessReason" type="int">
+  <int value="0" label="OFFLINE_AND_ONLINE">
+    Login success offline and online
+  </int>
+  <int value="1" label="OFFLINE_ONLY">Login success offline only</int>
+</enum>
+
+<enum name="LoginUserType" type="int">
+  <int value="0" label="INCOGNITO_NORMAL">Incognito Normal</int>
+  <int value="1" label="OWNER_NORMAL">Owner Normal</int>
+  <int value="2" label="OTHER_NORMAL">Other Normal</int>
+  <int value="3" label="INCOGNITO_DEVELOPER">Incognito Dev</int>
+  <int value="4" label="OWNER_DEVELOPER">Owner Dev</int>
+  <int value="5" label="OTHER_DEVELOPER">Other Dev</int>
+</enum>
+
+<enum name="MacBookVersions" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="MacBook5,X"/>
+  <int value="2" label="MacBook6,X"/>
+  <int value="3" label="MacBook7,X"/>
+  <int value="4" label="MacBook8,X"/>
+  <int value="5" label="MacBookPro11,X"/>
+  <int value="6" label="MacBookPro12,X"/>
+  <int value="7" label="MacBookPro13,X"/>
+  <int value="8" label="MacBookAir5,X"/>
+  <int value="9" label="MacBookAir6,X"/>
+  <int value="10" label="MacBookAir7,X"/>
+  <int value="11" label="MacBookAir8,X"/>
+  <int value="12" label="MacBookAir3,X"/>
+  <int value="13" label="MacBookAir4,X"/>
+  <int value="14" label="MacBook4,X"/>
+  <int value="15" label="MacBook9,X"/>
+  <int value="16" label="MacBook10,X"/>
+  <int value="17" label="MacBookPro10,X"/>
+  <int value="18" label="MacBookPro9,X"/>
+  <int value="19" label="MacBookPro8,X"/>
+  <int value="20" label="MacBookPro7,X"/>
+  <int value="21" label="MacBookPro6,X"/>
+  <int value="22" label="MacBookPro5,X"/>
+</enum>
+
+<enum name="MainFrameStorable" type="int">
+  <int value="0" label="Storable"/>
+  <int value="1" label="cache-control: no-store"/>
+</enum>
+
+<enum name="MainThreadScrollingReason" type="int">
+  <int value="0" label="Not scrolling on main"/>
+  <int value="1" label="Background attachment fixed"/>
+  <int value="2" label="Non layer viewport constrained"/>
+  <int value="3" label="Threaded scrolling disabled"/>
+  <int value="4" label="Scrollbar scrolling"/>
+  <int value="5" label="Page overlay"/>
+  <int value="6" label="Non-fast scrollable region"/>
+  <int value="7" label="Event handlers"/>
+  <int value="8" label="Failed hit test"/>
+  <int value="9" label="No scrolling layer"/>
+  <int value="10" label="Not scrollable"/>
+  <int value="11" label="Continuing main thread scroll"/>
+  <int value="12" label="Non-invertible transform"/>
+  <int value="13" label="Page based scrolling"/>
+  <int value="14" label="Animating scroll on main thread"/>
+  <int value="15" label="Has sticky position objects"/>
+  <int value="16" label="Requires hit testing on custom scrollbars"/>
+</enum>
+
+<enum name="MakeChromeDefaultResult" type="int">
+  <int value="0" label="Chrome made default"/>
+  <int value="1" label="Dialog closed without explicit choice"/>
+  <int value="2" label="Other browser selected"/>
+  <int value="3" label="Chrome made default + Relaunch in Metro (obsolete)"/>
+</enum>
+
+<enum name="ManagedUserPasswordChange" type="int">
+  <int value="0" label="OK_MANAGER">Changed in manager session</int>
+  <int value="1" label="OK_MANGED">Changed in supervised user session</int>
+  <int value="2" label="FAILED_NO_MASTER_KEY">Master key not found</int>
+  <int value="3" label="FAILED_NO_SIGNATURE_KEY">
+    Signature or encryption key not found
+  </int>
+  <int value="4" label="FAILED_NO_PASSWORD_DATA">Password data not found</int>
+  <int value="5" label="FAILED_MASTER_KEY_FAILURE">
+    Manager key authorization failed
+  </int>
+  <int value="6" label="FAILED_LOAD_DATA_FAILURE">
+    Could not load new password data upon supervised user signin
+  </int>
+  <int value="7" label="FAILED_INCOMPLETE_DATA_FAILURE">
+    Incomplete password data loaded upon supervised user signin.
+  </int>
+  <int value="8" label="FAILED_AUTHENTICATION_FAILURE">
+    Authentication failure while changing password during supervised user
+    signin.
+  </int>
+  <int value="9" label="FAILED_STORE_DATA">
+    Could not store new password data for supervised user.
+  </int>
+</enum>
+
+<enum name="ManifestFetchResultType" type="int">
+  <int value="0" label="Fetch succeeded"/>
+  <int value="1" label="Fetch failed because of empty URL"/>
+  <int value="2" label="Fetch failed (unspecified reason)"/>
+</enum>
+
+<enum name="MappedCSSProperties" type="int">
+<!-- Generated from third_party/WebKit/Source/core/frame/UseCounter.cpp -->
+
+  <int value="1" label="Total Pages Measured"/>
+  <int value="2" label="color"/>
+  <int value="3" label="direction"/>
+  <int value="4" label="display"/>
+  <int value="5" label="font"/>
+  <int value="6" label="font-family"/>
+  <int value="7" label="font-size"/>
+  <int value="8" label="font-style"/>
+  <int value="9" label="font-variant"/>
+  <int value="10" label="font-weight"/>
+  <int value="11" label="text-rendering"/>
+  <int value="12" label="alias-webkit-font-feature-settings"/>
+  <int value="13" label="font-kerning"/>
+  <int value="14" label="webkit-font-smoothing"/>
+  <int value="15" label="font-variant-ligatures"/>
+  <int value="16" label="webkit-locale"/>
+  <int value="17" label="webkit-text-orientation"/>
+  <int value="18" label="webkit-writing-mode"/>
+  <int value="19" label="zoom"/>
+  <int value="20" label="line-height"/>
+  <int value="21" label="background"/>
+  <int value="22" label="background-attachment"/>
+  <int value="23" label="background-clip"/>
+  <int value="24" label="background-color"/>
+  <int value="25" label="background-image"/>
+  <int value="26" label="background-origin"/>
+  <int value="27" label="background-position"/>
+  <int value="28" label="background-position-x"/>
+  <int value="29" label="background-position-y"/>
+  <int value="30" label="background-repeat"/>
+  <int value="31" label="background-repeat-x"/>
+  <int value="32" label="background-repeat-y"/>
+  <int value="33" label="background-size"/>
+  <int value="34" label="border"/>
+  <int value="35" label="border-bottom"/>
+  <int value="36" label="border-bottom-color"/>
+  <int value="37" label="border-bottom-left-radius"/>
+  <int value="38" label="border-bottom-right-radius"/>
+  <int value="39" label="border-bottom-style"/>
+  <int value="40" label="border-bottom-width"/>
+  <int value="41" label="border-collapse"/>
+  <int value="42" label="border-color"/>
+  <int value="43" label="border-image"/>
+  <int value="44" label="border-image-outset"/>
+  <int value="45" label="border-image-repeat"/>
+  <int value="46" label="border-image-slice"/>
+  <int value="47" label="border-image-source"/>
+  <int value="48" label="border-image-width"/>
+  <int value="49" label="border-left"/>
+  <int value="50" label="border-left-color"/>
+  <int value="51" label="border-left-style"/>
+  <int value="52" label="border-left-width"/>
+  <int value="53" label="border-radius"/>
+  <int value="54" label="border-right"/>
+  <int value="55" label="border-right-color"/>
+  <int value="56" label="border-right-style"/>
+  <int value="57" label="border-right-width"/>
+  <int value="58" label="border-spacing"/>
+  <int value="59" label="border-style"/>
+  <int value="60" label="border-top"/>
+  <int value="61" label="border-top-color"/>
+  <int value="62" label="border-top-left-radius"/>
+  <int value="63" label="border-top-right-radius"/>
+  <int value="64" label="border-top-style"/>
+  <int value="65" label="border-top-width"/>
+  <int value="66" label="border-width"/>
+  <int value="67" label="bottom"/>
+  <int value="68" label="box-shadow"/>
+  <int value="69" label="box-sizing"/>
+  <int value="70" label="caption-side"/>
+  <int value="71" label="clear"/>
+  <int value="72" label="clip"/>
+  <int value="73" label="alias-webkit-clip-path"/>
+  <int value="74" label="content"/>
+  <int value="75" label="counter-increment"/>
+  <int value="76" label="counter-reset"/>
+  <int value="77" label="cursor"/>
+  <int value="78" label="empty-cells"/>
+  <int value="79" label="float"/>
+  <int value="80" label="font-stretch"/>
+  <int value="81" label="height"/>
+  <int value="82" label="image-rendering"/>
+  <int value="83" label="left"/>
+  <int value="84" label="letter-spacing"/>
+  <int value="85" label="list-style"/>
+  <int value="86" label="list-style-image"/>
+  <int value="87" label="list-style-position"/>
+  <int value="88" label="list-style-type"/>
+  <int value="89" label="margin"/>
+  <int value="90" label="margin-bottom"/>
+  <int value="91" label="margin-left"/>
+  <int value="92" label="margin-right"/>
+  <int value="93" label="margin-top"/>
+  <int value="94" label="max-height"/>
+  <int value="95" label="max-width"/>
+  <int value="96" label="min-height"/>
+  <int value="97" label="min-width"/>
+  <int value="98" label="opacity"/>
+  <int value="99" label="orphans"/>
+  <int value="100" label="outline"/>
+  <int value="101" label="outline-color"/>
+  <int value="102" label="outline-offset"/>
+  <int value="103" label="outline-style"/>
+  <int value="104" label="outline-width"/>
+  <int value="105" label="overflow"/>
+  <int value="106" label="overflow-wrap"/>
+  <int value="107" label="overflow-x"/>
+  <int value="108" label="overflow-y"/>
+  <int value="109" label="padding"/>
+  <int value="110" label="padding-bottom"/>
+  <int value="111" label="padding-left"/>
+  <int value="112" label="padding-right"/>
+  <int value="113" label="padding-top"/>
+  <int value="114" label="page"/>
+  <int value="115" label="page-break-after"/>
+  <int value="116" label="page-break-before"/>
+  <int value="117" label="page-break-inside"/>
+  <int value="118" label="pointer-events"/>
+  <int value="119" label="position"/>
+  <int value="120" label="quotes"/>
+  <int value="121" label="resize"/>
+  <int value="122" label="right"/>
+  <int value="123" label="size"/>
+  <int value="124" label="src"/>
+  <int value="125" label="speak"/>
+  <int value="126" label="table-layout"/>
+  <int value="127" label="tab-size"/>
+  <int value="128" label="text-align"/>
+  <int value="129" label="text-decoration"/>
+  <int value="130" label="text-indent"/>
+  <int value="131" label="text-line-through"/>
+  <int value="132" label="text-line-through-color"/>
+  <int value="133" label="text-line-through-mode"/>
+  <int value="134" label="text-line-through-style"/>
+  <int value="135" label="text-line-through-width"/>
+  <int value="136" label="text-overflow"/>
+  <int value="137" label="text-overline"/>
+  <int value="138" label="text-overline-color"/>
+  <int value="139" label="text-overline-mode"/>
+  <int value="140" label="text-overline-style"/>
+  <int value="141" label="text-overline-width"/>
+  <int value="142" label="text-shadow"/>
+  <int value="143" label="text-transform"/>
+  <int value="144" label="text-underline"/>
+  <int value="145" label="text-underline-color"/>
+  <int value="146" label="text-underline-mode"/>
+  <int value="147" label="text-underline-style"/>
+  <int value="148" label="text-underline-width"/>
+  <int value="149" label="top"/>
+  <int value="150" label="transition"/>
+  <int value="151" label="transition-delay"/>
+  <int value="152" label="transition-duration"/>
+  <int value="153" label="transition-property"/>
+  <int value="154" label="transition-timing-function"/>
+  <int value="155" label="unicode-bidi"/>
+  <int value="156" label="unicode-range"/>
+  <int value="157" label="vertical-align"/>
+  <int value="158" label="visibility"/>
+  <int value="159" label="white-space"/>
+  <int value="160" label="widows"/>
+  <int value="161" label="width"/>
+  <int value="162" label="word-break"/>
+  <int value="163" label="word-spacing"/>
+  <int value="164" label="word-wrap"/>
+  <int value="165" label="z-index"/>
+  <int value="166" label="alias-webkit-animation"/>
+  <int value="167" label="alias-webkit-animation-delay"/>
+  <int value="168" label="alias-webkit-animation-direction"/>
+  <int value="169" label="alias-webkit-animation-duration"/>
+  <int value="170" label="alias-webkit-animation-fill-mode"/>
+  <int value="171" label="alias-webkit-animation-iteration-count"/>
+  <int value="172" label="alias-webkit-animation-name"/>
+  <int value="173" label="alias-webkit-animation-play-state"/>
+  <int value="174" label="alias-webkit-animation-timing-function"/>
+  <int value="175" label="webkit-appearance"/>
+  <int value="176" label="webkit-aspect-ratio"/>
+  <int value="177" label="alias-webkit-backface-visibility"/>
+  <int value="178" label="webkit-background-clip"/>
+  <int value="179" label="webkit-background-composite"/>
+  <int value="180" label="webkit-background-origin"/>
+  <int value="181" label="alias-webkit-background-size"/>
+  <int value="182" label="webkit-border-after"/>
+  <int value="183" label="webkit-border-after-color"/>
+  <int value="184" label="webkit-border-after-style"/>
+  <int value="185" label="webkit-border-after-width"/>
+  <int value="186" label="webkit-border-before"/>
+  <int value="187" label="webkit-border-before-color"/>
+  <int value="188" label="webkit-border-before-style"/>
+  <int value="189" label="webkit-border-before-width"/>
+  <int value="190" label="webkit-border-end"/>
+  <int value="191" label="webkit-border-end-color"/>
+  <int value="192" label="webkit-border-end-style"/>
+  <int value="193" label="webkit-border-end-width"/>
+  <int value="194" label="webkit-border-fit"/>
+  <int value="195" label="webkit-border-horizontal-spacing"/>
+  <int value="196" label="webkit-border-image"/>
+  <int value="197" label="alias-webkit-border-radius"/>
+  <int value="198" label="webkit-border-start"/>
+  <int value="199" label="webkit-border-start-color"/>
+  <int value="200" label="webkit-border-start-style"/>
+  <int value="201" label="webkit-border-start-width"/>
+  <int value="202" label="webkit-border-vertical-spacing"/>
+  <int value="203" label="webkit-box-align"/>
+  <int value="204" label="webkit-box-direction"/>
+  <int value="205" label="webkit-box-flex"/>
+  <int value="206" label="webkit-box-flex-group"/>
+  <int value="207" label="webkit-box-lines"/>
+  <int value="208" label="webkit-box-ordinal-group"/>
+  <int value="209" label="webkit-box-orient"/>
+  <int value="210" label="webkit-box-pack"/>
+  <int value="211" label="webkit-box-reflect"/>
+  <int value="212" label="alias-webkit-box-shadow"/>
+  <int value="213" label="webkit-color-correction"/>
+  <int value="214" label="webkit-column-axis"/>
+  <int value="215" label="webkit-column-break-after"/>
+  <int value="216" label="webkit-column-break-before"/>
+  <int value="217" label="webkit-column-break-inside"/>
+  <int value="218" label="alias-webkit-column-count"/>
+  <int value="219" label="alias-webkit-column-gap"/>
+  <int value="220" label="webkit-column-progression"/>
+  <int value="221" label="alias-webkit-column-rule"/>
+  <int value="222" label="alias-webkit-column-rule-color"/>
+  <int value="223" label="alias-webkit-column-rule-style"/>
+  <int value="224" label="alias-webkit-column-rule-width"/>
+  <int value="225" label="alias-webkit-column-span"/>
+  <int value="226" label="alias-webkit-column-width"/>
+  <int value="227" label="alias-webkit-columns"/>
+  <int value="228" label="webkit-box-decoration-break"/>
+  <int value="229" label="webkit-filter"/>
+  <int value="230" label="align-content"/>
+  <int value="231" label="align-items"/>
+  <int value="232" label="align-self"/>
+  <int value="233" label="flex"/>
+  <int value="234" label="flex-basis"/>
+  <int value="235" label="flex-direction"/>
+  <int value="236" label="flex-flow"/>
+  <int value="237" label="flex-grow"/>
+  <int value="238" label="flex-shrink"/>
+  <int value="239" label="flex-wrap"/>
+  <int value="240" label="justify-content"/>
+  <int value="241" label="webkit-font-size-delta"/>
+  <int value="242" label="grid-template-columns"/>
+  <int value="243" label="grid-template-rows"/>
+  <int value="244" label="grid-column-start"/>
+  <int value="245" label="grid-column-end"/>
+  <int value="246" label="grid-row-start"/>
+  <int value="247" label="grid-row-end"/>
+  <int value="248" label="grid-column"/>
+  <int value="249" label="grid-row"/>
+  <int value="250" label="grid-auto-flow"/>
+  <int value="251" label="webkit-highlight"/>
+  <int value="252" label="webkit-hyphenate-character"/>
+  <int value="253" label="webkit-hyphenate-limit-after"/>
+  <int value="254" label="webkit-hyphenate-limit-before"/>
+  <int value="255" label="webkit-hyphenate-limit-lines"/>
+  <int value="256" label="webkit-hyphens"/>
+  <int value="257" label="webkit-line-box-contain"/>
+  <int value="258" label="webkit-line-align"/>
+  <int value="259" label="webkit-line-break"/>
+  <int value="260" label="webkit-line-clamp"/>
+  <int value="261" label="webkit-line-grid"/>
+  <int value="262" label="webkit-line-snap"/>
+  <int value="263" label="webkit-logical-width"/>
+  <int value="264" label="webkit-logical-height"/>
+  <int value="265" label="webkit-margin-after-collapse"/>
+  <int value="266" label="webkit-margin-before-collapse"/>
+  <int value="267" label="webkit-margin-bottom-collapse"/>
+  <int value="268" label="webkit-margin-top-collapse"/>
+  <int value="269" label="webkit-margin-collapse"/>
+  <int value="270" label="webkit-margin-after"/>
+  <int value="271" label="webkit-margin-before"/>
+  <int value="272" label="webkit-margin-end"/>
+  <int value="273" label="webkit-margin-start"/>
+  <int value="274" label="webkit-marquee"/>
+  <int value="275" label="webkit-marquee-direction"/>
+  <int value="276" label="webkit-marquee-increment"/>
+  <int value="277" label="webkit-marquee-repetition"/>
+  <int value="278" label="webkit-marquee-speed"/>
+  <int value="279" label="webkit-marquee-style"/>
+  <int value="280" label="webkit-mask"/>
+  <int value="281" label="webkit-mask-box-image"/>
+  <int value="282" label="webkit-mask-box-image-outset"/>
+  <int value="283" label="webkit-mask-box-image-repeat"/>
+  <int value="284" label="webkit-mask-box-image-slice"/>
+  <int value="285" label="webkit-mask-box-image-source"/>
+  <int value="286" label="webkit-mask-box-image-width"/>
+  <int value="287" label="webkit-mask-clip"/>
+  <int value="288" label="webkit-mask-composite"/>
+  <int value="289" label="webkit-mask-image"/>
+  <int value="290" label="webkit-mask-origin"/>
+  <int value="291" label="webkit-mask-position"/>
+  <int value="292" label="webkit-mask-position-x"/>
+  <int value="293" label="webkit-mask-position-y"/>
+  <int value="294" label="webkit-mask-repeat"/>
+  <int value="295" label="webkit-mask-repeat-x"/>
+  <int value="296" label="webkit-mask-repeat-y"/>
+  <int value="297" label="webkit-mask-size"/>
+  <int value="298" label="webkit-max-logical-width"/>
+  <int value="299" label="webkit-max-logical-height"/>
+  <int value="300" label="webkit-min-logical-width"/>
+  <int value="301" label="webkit-min-logical-height"/>
+  <int value="302" label="webkit-nbsp-mode"/>
+  <int value="303" label="order"/>
+  <int value="304" label="webkit-padding-after"/>
+  <int value="305" label="webkit-padding-before"/>
+  <int value="306" label="webkit-padding-end"/>
+  <int value="307" label="webkit-padding-start"/>
+  <int value="308" label="alias-webkit-perspective"/>
+  <int value="309" label="alias-webkit-perspective-origin"/>
+  <int value="310" label="webkit-perspective-origin-x"/>
+  <int value="311" label="webkit-perspective-origin-y"/>
+  <int value="312" label="webkit-print-color-adjust"/>
+  <int value="313" label="webkit-rtl-ordering"/>
+  <int value="314" label="webkit-ruby-position"/>
+  <int value="315" label="webkit-text-combine"/>
+  <int value="316" label="webkit-text-decorations-in-effect"/>
+  <int value="317" label="webkit-text-emphasis"/>
+  <int value="318" label="webkit-text-emphasis-color"/>
+  <int value="319" label="webkit-text-emphasis-position"/>
+  <int value="320" label="webkit-text-emphasis-style"/>
+  <int value="321" label="webkit-text-fill-color"/>
+  <int value="322" label="webkit-text-security"/>
+  <int value="323" label="webkit-text-stroke"/>
+  <int value="324" label="webkit-text-stroke-color"/>
+  <int value="325" label="webkit-text-stroke-width"/>
+  <int value="326" label="alias-webkit-transform"/>
+  <int value="327" label="alias-webkit-transform-origin"/>
+  <int value="328" label="webkit-transform-origin-x"/>
+  <int value="329" label="webkit-transform-origin-y"/>
+  <int value="330" label="webkit-transform-origin-z"/>
+  <int value="331" label="alias-webkit-transform-style"/>
+  <int value="332" label="alias-webkit-transition"/>
+  <int value="333" label="alias-webkit-transition-delay"/>
+  <int value="334" label="alias-webkit-transition-duration"/>
+  <int value="335" label="alias-webkit-transition-property"/>
+  <int value="336" label="alias-webkit-transition-timing-function"/>
+  <int value="337" label="webkit-user-drag"/>
+  <int value="338" label="webkit-user-modify"/>
+  <int value="339" label="alias-webkit-user-select"/>
+  <int value="340" label="webkit-flow-into"/>
+  <int value="341" label="webkit-flow-from"/>
+  <int value="342" label="webkit-region-fragment"/>
+  <int value="343" label="webkit-region-break-after"/>
+  <int value="344" label="webkit-region-break-before"/>
+  <int value="345" label="webkit-region-break-inside"/>
+  <int value="346" label="shape-inside"/>
+  <int value="347" label="shape-outside"/>
+  <int value="348" label="shape-margin"/>
+  <int value="349" label="shape-padding"/>
+  <int value="350" label="webkit-wrap-flow"/>
+  <int value="351" label="webkit-wrap-through"/>
+  <int value="352" label="webkit-wrap"/>
+  <int value="353" label="webkit-tap-highlight-color"/>
+  <int value="354" label="webkit-app-region"/>
+  <int value="355" label="clip-path"/>
+  <int value="356" label="clip-rule"/>
+  <int value="357" label="mask"/>
+  <int value="358" label="enable-background"/>
+  <int value="359" label="filter"/>
+  <int value="360" label="flood-color"/>
+  <int value="361" label="flood-opacity"/>
+  <int value="362" label="lighting-color"/>
+  <int value="363" label="stop-color"/>
+  <int value="364" label="stop-opacity"/>
+  <int value="365" label="color-interpolation"/>
+  <int value="366" label="color-interpolation-filters"/>
+  <int value="367" label="color-profile"/>
+  <int value="368" label="color-rendering"/>
+  <int value="369" label="fill"/>
+  <int value="370" label="fill-opacity"/>
+  <int value="371" label="fill-rule"/>
+  <int value="372" label="marker"/>
+  <int value="373" label="marker-end"/>
+  <int value="374" label="marker-mid"/>
+  <int value="375" label="marker-start"/>
+  <int value="376" label="mask-type"/>
+  <int value="377" label="shape-rendering"/>
+  <int value="378" label="stroke"/>
+  <int value="379" label="stroke-dasharray"/>
+  <int value="380" label="stroke-dashoffset"/>
+  <int value="381" label="stroke-linecap"/>
+  <int value="382" label="stroke-linejoin"/>
+  <int value="383" label="stroke-miterlimit"/>
+  <int value="384" label="stroke-opacity"/>
+  <int value="385" label="stroke-width"/>
+  <int value="386" label="alignment-baseline"/>
+  <int value="387" label="baseline-shift"/>
+  <int value="388" label="dominant-baseline"/>
+  <int value="389" label="glyph-orientation-horizontal"/>
+  <int value="390" label="glyph-orientation-vertical"/>
+  <int value="391" label="kerning"/>
+  <int value="392" label="text-anchor"/>
+  <int value="393" label="vector-effect"/>
+  <int value="394" label="writing-mode"/>
+  <int value="395" label="webkit-svg-shadow"/>
+  <int value="396" label="webkit-cursor-visibility"/>
+  <int value="397" label="image-orientation"/>
+  <int value="398" label="image-resolution"/>
+  <int value="399" label="webkit-blend-mode"/>
+  <int value="400" label="webkit-background-blend-mode"/>
+  <int value="401" label="text-decoration-line"/>
+  <int value="402" label="text-decoration-style"/>
+  <int value="403" label="text-decoration-color"/>
+  <int value="404" label="text-align-last"/>
+  <int value="405" label="text-underline-position"/>
+  <int value="406" label="max-zoom"/>
+  <int value="407" label="min-zoom"/>
+  <int value="408" label="orientation"/>
+  <int value="409" label="user-zoom"/>
+  <int value="410" label="webkit-dashboard-region"/>
+  <int value="411" label="webkit-overflow-scrolling"/>
+  <int value="412" label="webkit-app-region"/>
+  <int value="413" label="alias-webkit-filter"/>
+  <int value="414" label="webkit-box-decoration-break"/>
+  <int value="415" label="webkit-tap-highlight-color"/>
+  <int value="416" label="buffered-rendering"/>
+  <int value="417" label="grid-auto-rows"/>
+  <int value="418" label="grid-auto-columns"/>
+  <int value="419" label="background-blend-mode"/>
+  <int value="420" label="mix-blend-mode"/>
+  <int value="421" label="touch-action"/>
+  <int value="422" label="grid-area"/>
+  <int value="423" label="grid-template-areas"/>
+  <int value="424" label="animation"/>
+  <int value="425" label="animation-delay"/>
+  <int value="426" label="animation-direction"/>
+  <int value="427" label="animation-duration"/>
+  <int value="428" label="animation-fill-mode"/>
+  <int value="429" label="animation-iteration-count"/>
+  <int value="430" label="animation-name"/>
+  <int value="431" label="animation-play-state"/>
+  <int value="432" label="animation-timing-function"/>
+  <int value="433" label="object-fit"/>
+  <int value="434" label="paint-order"/>
+  <int value="435" label="mask-source-type"/>
+  <int value="436" label="isolation"/>
+  <int value="437" label="object-position"/>
+  <int value="438" label="internal-callback"/>
+  <int value="439" label="shape-image-threshold"/>
+  <int value="440" label="column-fill"/>
+  <int value="441" label="text-justify"/>
+  <int value="442" label="touch-action-delay"/>
+  <int value="443" label="justify-self"/>
+  <int value="444" label="scroll-behavior"/>
+  <int value="445" label="will-change"/>
+  <int value="446" label="transform"/>
+  <int value="447" label="transform-origin"/>
+  <int value="448" label="transform-style"/>
+  <int value="449" label="perspective"/>
+  <int value="450" label="perspective-origin"/>
+  <int value="451" label="backface-visibility"/>
+  <int value="452" label="grid-template"/>
+  <int value="453" label="grid"/>
+  <int value="454" label="all"/>
+  <int value="455" label="justify-items"/>
+  <int value="456" label="scroll-blocks-on"/>
+  <int value="457" label="alias-motion-path"/>
+  <int value="458" label="alias-motion-offset"/>
+  <int value="459" label="alias-motion-rotation"/>
+  <int value="460" label="motion"/>
+  <int value="461" label="x"/>
+  <int value="462" label="y"/>
+  <int value="463" label="rx"/>
+  <int value="464" label="ry"/>
+  <int value="465" label="font-size-adjust"/>
+  <int value="466" label="cx"/>
+  <int value="467" label="cy"/>
+  <int value="468" label="r"/>
+  <int value="469" label="alias-epub-caption-side"/>
+  <int value="470" label="alias-epub-text-combine"/>
+  <int value="471" label="alias-epub-text-emphasis"/>
+  <int value="472" label="alias-epub-text-emphasis-color"/>
+  <int value="473" label="alias-epub-text-emphasis-style"/>
+  <int value="474" label="alias-epub-text-orientation"/>
+  <int value="475" label="alias-epub-text-transform"/>
+  <int value="476" label="alias-epub-word-break"/>
+  <int value="477" label="alias-epub-writing-mode"/>
+  <int value="478" label="alias-webkit-align-content"/>
+  <int value="479" label="alias-webkit-align-items"/>
+  <int value="480" label="alias-webkit-align-self"/>
+  <int value="481" label="alias-webkit-border-bottom-left-radius"/>
+  <int value="482" label="alias-webkit-border-bottom-right-radius"/>
+  <int value="483" label="alias-webkit-border-top-left-radius"/>
+  <int value="484" label="alias-webkit-border-top-right-radius"/>
+  <int value="485" label="alias-webkit-box-sizing"/>
+  <int value="486" label="alias-webkit-flex"/>
+  <int value="487" label="alias-webkit-flex-basis"/>
+  <int value="488" label="alias-webkit-flex-direction"/>
+  <int value="489" label="alias-webkit-flex-flow"/>
+  <int value="490" label="alias-webkit-flex-grow"/>
+  <int value="491" label="alias-webkit-flex-shrink"/>
+  <int value="492" label="alias-webkit-flex-wrap"/>
+  <int value="493" label="alias-webkit-justify-content"/>
+  <int value="494" label="alias-webkit-opacity"/>
+  <int value="495" label="alias-webkit-order"/>
+  <int value="496" label="alias-webkit-shape-image-threshold"/>
+  <int value="497" label="alias-webkit-shape-margin"/>
+  <int value="498" label="alias-webkit-shape-outside"/>
+  <int value="499" label="scroll-snap-type"/>
+  <int value="500" label="scroll-snap-points-x"/>
+  <int value="501" label="scroll-snap-points-y"/>
+  <int value="502" label="scroll-snap-coordinate"/>
+  <int value="503" label="scroll-snap-destination"/>
+  <int value="504" label="translate"/>
+  <int value="505" label="rotate"/>
+  <int value="506" label="scale"/>
+  <int value="507" label="image-orientation"/>
+  <int value="508" label="backdrop-filter"/>
+  <int value="509" label="text-combine-upright"/>
+  <int value="510" label="text-orientation"/>
+  <int value="511" label="grid-column-gap"/>
+  <int value="512" label="grid-row-gap"/>
+  <int value="513" label="grid-gap"/>
+  <int value="514" label="font-feature-settings"/>
+  <int value="515" label="variable"/>
+  <int value="516" label="font-display"/>
+  <int value="517" label="contain"/>
+  <int value="518" label="d"/>
+  <int value="519" label="snap-height"/>
+  <int value="520" label="break-after"/>
+  <int value="521" label="break-before"/>
+  <int value="522" label="break-inside"/>
+  <int value="523" label="column-count"/>
+  <int value="524" label="column-gap"/>
+  <int value="525" label="column-rule"/>
+  <int value="526" label="column-rule-color"/>
+  <int value="527" label="column-rule-style"/>
+  <int value="528" label="column-rule-width"/>
+  <int value="529" label="column-span"/>
+  <int value="530" label="column-width"/>
+  <int value="531" label="columns"/>
+  <int value="532" label="apply-at-rule"/>
+  <int value="533" label="font-variant-caps"/>
+  <int value="534" label="hyphens"/>
+  <int value="535" label="font-variant-numeric"/>
+  <int value="536" label="text-size-adjust"/>
+  <int value="537" label="alias-webkit-text-size-adjust"/>
+  <int value="538" label="overflow-anchor"/>
+  <int value="539" label="user-select"/>
+  <int value="540" label="offset-distance"/>
+  <int value="541" label="offset-path"/>
+  <int value="542" label="offset-rotation"/>
+  <int value="543" label="offset"/>
+  <int value="544" label="offset-anchor"/>
+  <int value="545" label="offset-position"/>
+  <int value="546" label="text-decoration-skip"/>
+</enum>
+
+<enum name="MappedEditingCommands" type="int">
+<!-- Generated from third_party/WebKit/Source/core/editing/EditorCommand.cpp -->
+
+  <int value="1" label="AlignJustified"/>
+  <int value="2" label="AlignLeft"/>
+  <int value="3" label="AlignRight"/>
+  <int value="4" label="BackColor"/>
+  <int value="5" label="BackwardDelete"/>
+  <int value="6" label="Bold"/>
+  <int value="7" label="Copy"/>
+  <int value="8" label="CreateLink"/>
+  <int value="9" label="Cut"/>
+  <int value="10" label="DefaultParagraphSeparator"/>
+  <int value="11" label="Delete"/>
+  <int value="12" label="DeleteBackward"/>
+  <int value="13" label="DeleteBackwardByDecomposingPreviousCharacter"/>
+  <int value="14" label="DeleteForward"/>
+  <int value="15" label="DeleteToBeginningOfLine"/>
+  <int value="16" label="DeleteToBeginningOfParagraph"/>
+  <int value="17" label="DeleteToEndOfLine"/>
+  <int value="18" label="DeleteToEndOfParagraph"/>
+  <int value="19" label="DeleteToMark"/>
+  <int value="20" label="DeleteWordBackward"/>
+  <int value="21" label="DeleteWordForward"/>
+  <int value="22" label="FindString"/>
+  <int value="23" label="FontName"/>
+  <int value="24" label="FontSize"/>
+  <int value="25" label="FontSizeDelta"/>
+  <int value="26" label="ForeColor"/>
+  <int value="27" label="FormatBlock"/>
+  <int value="28" label="ForwardDelete"/>
+  <int value="29" label="HiliteColor"/>
+  <int value="30" label="IgnoreSpelling"/>
+  <int value="31" label="Indent"/>
+  <int value="32" label="InsertBacktab"/>
+  <int value="33" label="InsertHTML"/>
+  <int value="34" label="InsertHorizontalRule"/>
+  <int value="35" label="InsertImage"/>
+  <int value="36" label="InsertLineBreak"/>
+  <int value="37" label="InsertNewline"/>
+  <int value="38" label="InsertNewlineInQuotedContent"/>
+  <int value="39" label="InsertOrderedList"/>
+  <int value="40" label="InsertParagraph"/>
+  <int value="41" label="InsertTab"/>
+  <int value="42" label="InsertText"/>
+  <int value="43" label="InsertUnorderedList"/>
+  <int value="44" label="Italic"/>
+  <int value="45" label="JustifyCenter"/>
+  <int value="46" label="JustifyFull"/>
+  <int value="47" label="JustifyLeft"/>
+  <int value="48" label="JustifyNone"/>
+  <int value="49" label="JustifyRight"/>
+  <int value="50" label="MakeTextWritingDirectionLeftToRight"/>
+  <int value="51" label="MakeTextWritingDirectionNatural"/>
+  <int value="52" label="MakeTextWritingDirectionRightToLeft"/>
+  <int value="53" label="MoveBackward"/>
+  <int value="54" label="MoveBackwardAndModifySelection"/>
+  <int value="55" label="MoveDown"/>
+  <int value="56" label="MoveDownAndModifySelection"/>
+  <int value="57" label="MoveForward"/>
+  <int value="58" label="MoveForwardAndModifySelection"/>
+  <int value="59" label="MoveLeft"/>
+  <int value="60" label="MoveLeftAndModifySelection"/>
+  <int value="61" label="MovePageDown"/>
+  <int value="62" label="MovePageDownAndModifySelection"/>
+  <int value="63" label="MovePageUp"/>
+  <int value="64" label="MovePageUpAndModifySelection"/>
+  <int value="65" label="MoveParagraphBackward"/>
+  <int value="66" label="MoveParagraphBackwardAndModifySelection"/>
+  <int value="67" label="MoveParagraphForward"/>
+  <int value="68" label="MoveParagraphForwardAndModifySelection"/>
+  <int value="69" label="MoveRight"/>
+  <int value="70" label="MoveRightAndModifySelection"/>
+  <int value="71" label="MoveToBeginningOfDocument"/>
+  <int value="72" label="MoveToBeginningOfDocumentAndModifySelection"/>
+  <int value="73" label="MoveToBeginningOfLine"/>
+  <int value="74" label="MoveToBeginningOfLineAndModifySelection"/>
+  <int value="75" label="MoveToBeginningOfParagraph"/>
+  <int value="76" label="MoveToBeginningOfParagraphAndModifySelection"/>
+  <int value="77" label="MoveToBeginningOfSentence"/>
+  <int value="78" label="MoveToBeginningOfSentenceAndModifySelection"/>
+  <int value="79" label="MoveToEndOfDocument"/>
+  <int value="80" label="MoveToEndOfDocumentAndModifySelection"/>
+  <int value="81" label="MoveToEndOfLine"/>
+  <int value="82" label="MoveToEndOfLineAndModifySelection"/>
+  <int value="83" label="MoveToEndOfParagraph"/>
+  <int value="84" label="MoveToEndOfParagraphAndModifySelection"/>
+  <int value="85" label="MoveToEndOfSentence"/>
+  <int value="86" label="MoveToEndOfSentenceAndModifySelection"/>
+  <int value="87" label="MoveToLeftEndOfLine"/>
+  <int value="88" label="MoveToLeftEndOfLineAndModifySelection"/>
+  <int value="89" label="MoveToRightEndOfLine"/>
+  <int value="90" label="MoveToRightEndOfLineAndModifySelection"/>
+  <int value="91" label="MoveUp"/>
+  <int value="92" label="MoveUpAndModifySelection"/>
+  <int value="93" label="MoveWordBackward"/>
+  <int value="94" label="MoveWordBackwardAndModifySelection"/>
+  <int value="95" label="MoveWordForward"/>
+  <int value="96" label="MoveWordForwardAndModifySelection"/>
+  <int value="97" label="MoveWordLeft"/>
+  <int value="98" label="MoveWordLeftAndModifySelection"/>
+  <int value="99" label="MoveWordRight"/>
+  <int value="100" label="MoveWordRightAndModifySelection"/>
+  <int value="101" label="Outdent"/>
+  <int value="102" label="OverWrite"/>
+  <int value="103" label="Paste"/>
+  <int value="104" label="PasteAndMatchStyle"/>
+  <int value="105" label="PasteGlobalSelection"/>
+  <int value="106" label="Print"/>
+  <int value="107" label="Redo"/>
+  <int value="108" label="RemoveFormat"/>
+  <int value="109" label="ScrollPageBackward"/>
+  <int value="110" label="ScrollPageForward"/>
+  <int value="111" label="ScrollLineUp"/>
+  <int value="112" label="ScrollLineDown"/>
+  <int value="113" label="ScrollToBeginningOfDocument"/>
+  <int value="114" label="ScrollToEndOfDocument"/>
+  <int value="115" label="SelectAll"/>
+  <int value="116" label="SelectLine"/>
+  <int value="117" label="SelectParagraph"/>
+  <int value="118" label="SelectSentence"/>
+  <int value="119" label="SelectToMark"/>
+  <int value="120" label="SelectWord"/>
+  <int value="121" label="SetMark"/>
+  <int value="122" label="Strikethrough"/>
+  <int value="123" label="StyleWithCSS"/>
+  <int value="124" label="Subscript"/>
+  <int value="125" label="Superscript"/>
+  <int value="126" label="SwapWithMark"/>
+  <int value="127" label="ToggleBold"/>
+  <int value="128" label="ToggleItalic"/>
+  <int value="129" label="ToggleUnderline"/>
+  <int value="130" label="Transpose"/>
+  <int value="131" label="Underline"/>
+  <int value="132" label="Undo"/>
+  <int value="133" label="Unlink"/>
+  <int value="134" label="Unscript"/>
+  <int value="135" label="Unselect"/>
+  <int value="136" label="UseCSS"/>
+  <int value="137" label="Yank"/>
+  <int value="138" label="YankAndSelect"/>
+  <int value="139" label="AlignCenter"/>
+</enum>
+
+<enum name="MarkHttpAsStatus" type="int">
+  <int value="0" label="Neutral"/>
+  <int value="1" label="Non-Secure"/>
+  <int value="2" label="Neutral with a verbose warning"/>
+</enum>
+
+<enum name="MarkNonSecureAsStatus" type="int">
+  <int value="0" label="Neutral"/>
+  <int value="1" label="Dubious (deprecated August 2015)"/>
+  <int value="2" label="Non-Secure"/>
+</enum>
+
+<enum name="MediaCommand" type="int">
+  <int value="0" label="Resume"/>
+  <int value="1" label="Pause"/>
+  <int value="2" label="Seek"/>
+</enum>
+
+<enum name="MediaContainers" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="AAC (Advanced Audio Coding)"/>
+  <int value="2" label="AC-3"/>
+  <int value="3" label="AIFF (Audio Interchange File Format)"/>
+  <int value="4" label="AMR (Adaptive Multi-Rate Audio)"/>
+  <int value="5" label="APE (Monkey's Audio)"/>
+  <int value="6" label="ASF (Advanced / Active Streaming Format)"/>
+  <int value="7" label="SSA (SubStation Alpha) subtitle"/>
+  <int value="8" label="AVI (Audio Video Interleaved)"/>
+  <int value="9" label="Bink"/>
+  <int value="10" label="CAF (Apple Core Audio Format)"/>
+  <int value="11" label="DTS"/>
+  <int value="12" label="DTS-HD"/>
+  <int value="13" label="DV (Digital Video)"/>
+  <int value="14" label="DXA"/>
+  <int value="15" label="Enhanced AC-3"/>
+  <int value="16" label="FLAC (Free Lossless Audio Codec)"/>
+  <int value="17" label="FLV (Flash Video)"/>
+  <int value="18" label="GSM (Global System for Mobile Audio)"/>
+  <int value="19" label="H.261"/>
+  <int value="20" label="H.263"/>
+  <int value="21" label="H.264"/>
+  <int value="22" label="HLS (Apple HTTP Live Streaming PlayList)"/>
+  <int value="23" label="Berkeley/IRCAM/CARL Sound Format"/>
+  <int value="24" label="MJPEG video"/>
+  <int value="25" label="QuickTime / MOV / MPEG4"/>
+  <int value="26" label="MP3 (MPEG audio layer 2/3)"/>
+  <int value="27" label="MPEG-2 Program Stream"/>
+  <int value="28" label="MPEG-2 Transport Stream"/>
+  <int value="29" label="MPEG-4 Bitstream"/>
+  <int value="30" label="Ogg"/>
+  <int value="31" label="RM (RealMedia)"/>
+  <int value="32" label="SRT (SubRip subtitle)"/>
+  <int value="33" label="SWF (ShockWave Flash)"/>
+  <int value="34" label="VC-1"/>
+  <int value="35" label="WAV / WAVE (Waveform Audio)"/>
+  <int value="36" label="Matroska / WebM"/>
+  <int value="37" label="WTV (Windows Television)"/>
+  <int value="38" label="DASH"/>
+  <int value="39" label="SmoothStream"/>
+</enum>
+
+<enum name="MediaControlsShowReason" type="int">
+  <int value="0" label="Attribute"/>
+  <int value="1" label="Fullscreen"/>
+  <int value="2" label="No scripts allowed"/>
+  <int value="3" label="Not shown"/>
+</enum>
+
+<enum name="MediaDocumentDownloadButtonType" type="int">
+  <int value="0" label="Shown"/>
+  <int value="1" label="Clicked"/>
+</enum>
+
+<enum name="MediaElementAutoPlay" type="int">
+  <int value="0" label="Media element with autoplay seen"/>
+  <int value="1"
+      label="Autoplay enabled and user stopped media play at any point"/>
+  <int value="2"
+      label="Autoplay enabled but user bailed out on media play early"/>
+  <int value="3" label="Autoplay disabled but user manually started media"/>
+  <int value="4"
+      label="Autoplay enabled through a user-gesture triggered load() call."/>
+  <int value="5" label="Autoplay disabled by sandbox flags."/>
+  <int value="6" label="Gesture requirement overridden during initial load."/>
+  <int value="7" label="Gesture requirement overridden in play()."/>
+  <int value="8"
+      label="Gesture req. overridden after scroll for deferred attribute."/>
+  <int value="9"
+      label="Gesture req. overridden after scroll for deferred play()."/>
+  <int value="10" label="play() call failed due to gesture requirement."/>
+  <int value="11" label="Any playback started."/>
+  <int value="12" label="Any playback paused."/>
+  <int value="13" label="Any playback bailed out."/>
+  <int value="14" label="Any playback completed."/>
+  <int value="15" label="Any audio element encountered."/>
+  <int value="16" label="Any video element encountered."/>
+  <int value="17" label="Autoplayed media complete."/>
+  <int value="18" label="Gestureless playback started due to load()."/>
+  <int value="19" label="Gesture requirement overridden for media stream."/>
+  <int value="20" label="Gesture requirement overridden, unknown reason."/>
+  <int value="21" label="Gesture requirement overridden by play method."/>
+</enum>
+
+<enum name="MediaGalleriesUsageType" type="int">
+  <int value="0" label="Gallery added from permission dialog"/>
+  <int value="1" label="Gallery permission added from permission dialog"/>
+  <int value="2" label="Gallery permission removed from permission dialog"/>
+  <int value="3" label="GetMediaFileSystems API invocations"/>
+  <int value="4" label="Profiles With API Usage (corrected in M35)"/>
+  <int value="5" label="Dialog shown"/>
+  <int value="6" label="Dialog permissions saved"/>
+  <int value="7" label="Gallery added from WebUI"/>
+  <int value="8" label="Gallery removed from WebUI"/>
+  <int value="9" label="Preferences initialized"/>
+  <int value="10" label="Preferences initialization failed"/>
+  <int value="11"
+      label="GetAllMediaFileSystemMetadata API invocations (obsolete)"/>
+  <int value="12" label="GetMetadata API invocations"/>
+  <int value="13" label="AddUserSelectedFolder API invocations"/>
+  <int value="14" label="StartMediaScan API invocations (obsolete)"/>
+  <int value="15" label="CancelMediaScan API invocations (obsolete)"/>
+  <int value="16" label="AddScanResults API invocations (obsolete)"/>
+  <int value="17" label="A media scan completed (obsolete)"/>
+  <int value="18" label="AddScanResults dialog cancelled (obsolete)"/>
+  <int value="19" label="AddScanResults dialog accepted (obsolete)"/>
+  <int value="20"
+      label="Gallery removed from AddScanResults dialog (obsolete)"/>
+  <int value="21" label="Gallery removed from permission dialog"/>
+  <int value="22"
+      label="DropPermissionForMediaFileSystem API invocations (obsolete)"/>
+  <int value="23" label="GetAllGalleryWatch API invocations (obsolete)"/>
+  <int value="24" label="RemoveAllGalleryWatch API invocations (obsolete)"/>
+  <int value="25" label="iTunes file system used this session"/>
+  <int value="26" label="Picasa file system used this session"/>
+  <int value="27" label="iPhoto file system used this session (obsolete)"/>
+</enum>
+
+<enum name="MediaKeyError" type="int">
+  <int value="1" label="kUnknownError"/>
+  <int value="2" label="kClientError"/>
+  <int value="4" label="kOutputError"/>
+</enum>
+
+<enum name="MediaKeyException" type="int">
+  <int value="0" label="kUnknownResultId"/>
+  <int value="1" label="kSuccess"/>
+  <int value="2" label="kKeySystemNotSupported"/>
+  <int value="3" label="kInvalidPlayerState"/>
+</enum>
+
+<enum name="MediaKeySystemSupportStatus" type="int">
+  <int value="0" label="Queried"/>
+  <int value="1" label="Supported"/>
+  <int value="2" label="Queried with type"/>
+  <int value="3" label="Supported with type"/>
+</enum>
+
+<enum name="MediaLoadType" type="int">
+  <int value="0" label="URL"/>
+  <int value="1" label="MediaSource"/>
+  <int value="2" label="MediaStream"/>
+</enum>
+
+<enum name="MediaNotificationClickSource" type="int">
+  <int value="0" label="Media"/>
+  <int value="1" label="Presentation"/>
+  <int value="2" label="MediaFling"/>
+</enum>
+
+<enum name="MediaOutputProtectionStatus" type="int">
+  <int value="0" label="Queried"/>
+  <int value="1" label="No external link"/>
+  <int value="2" label="All external links protected"/>
+</enum>
+
+<enum name="MediaPlayerExitStatus" type="int">
+  <int value="0" label="No errors"/>
+  <int value="1" label="Has errors"/>
+</enum>
+
+<enum name="MediaRouteProviderResult" type="int">
+  <int value="0" label="UnknownError"/>
+  <int value="1" label="Ok"/>
+  <int value="2" label="TimedOut"/>
+  <int value="3" label="RouteNotFound"/>
+  <int value="4" label="SinkNotFound"/>
+  <int value="5" label="InvalidOrigin"/>
+  <int value="6" label="OffTheRecordMismatch"/>
+  <int value="7" label="NoSupportedProvider"/>
+</enum>
+
+<enum name="MediaRouteProviderVersion" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="SameVersionAsChrome"/>
+  <int value="2" label="OneVersionBehindChrome"/>
+  <int value="3" label="MultipleVersionsBehindChrome"/>
+</enum>
+
+<enum name="MediaRouteProviderWakeReason" type="int">
+  <int value="0" label="CreateRoute"/>
+  <int value="1" label="JoinRoute"/>
+  <int value="2" label="TerminateRoute"/>
+  <int value="3" label="SendSessionMessage"/>
+  <int value="4" label="SendSessionBinaryMessage"/>
+  <int value="5" label="DetachRoute"/>
+  <int value="6" label="StartObservingMediaSinks"/>
+  <int value="7" label="StopObservingMediaSinks"/>
+  <int value="8" label="StartObservingMediaRoutes"/>
+  <int value="9" label="StopObservingMediaRoutes"/>
+  <int value="10" label="StartListeningForRouteMessages"/>
+  <int value="11" label="StopListeningForRouteMessages"/>
+  <int value="12" label="ConnectionError"/>
+  <int value="13" label="RegisterMediaRouteProvider"/>
+  <int value="14" label="ConnectRouteByRouteId"/>
+  <int value="15" label="EnableMdnsDiscovery"/>
+  <int value="16" label="UpdateMediaSinks"/>
+  <int value="17" label="SearchSinks"/>
+</enum>
+
+<enum name="MediaRouteProviderWakeup" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="ErrorUnknown"/>
+  <int value="2" label="ErrorTooManyRetries"/>
+</enum>
+
+<enum name="MediaRouterCreateRouteOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure No Route"/>
+  <int value="2" label="Failure Invalid Sink"/>
+</enum>
+
+<enum name="MediaRouterDialogOpenOrigin" type="int">
+  <int value="0" label="Toolbar"/>
+  <int value="1" label="Overflow Menu"/>
+  <int value="2" label="Contextual Menu"/>
+  <int value="3" label="Page"/>
+</enum>
+
+<enum name="MediaRouterInitialViews" type="int">
+  <int value="0" label="Route Details"/>
+  <int value="1" label="Sink List"/>
+</enum>
+
+<enum name="MediaRouterSinkPositionLabel" type="int">
+  <int value="100" label="100+"/>
+</enum>
+
+<enum name="MediaRouterSourceTypes" type="int">
+  <int value="1" label="App"/>
+  <int value="2" label="Tab"/>
+  <int value="4" label="Desktop"/>
+</enum>
+
+<enum name="MediaRouterUserAction" type="int">
+  <int value="0" label="Change Mode"/>
+  <int value="1" label="Start Local"/>
+  <int value="2" label="Stop Local"/>
+  <int value="3" label="Close"/>
+  <int value="4" label="Status Remote"/>
+  <int value="5" label="Replace Local Route"/>
+</enum>
+
+<enum name="MediaRouteType" type="int">
+  <int value="0" label="Local"/>
+  <int value="1" label="Remote"/>
+</enum>
+
+<enum name="MediaSessionActionSource" type="int">
+  <int value="0" label="Media Notification"/>
+  <int value="1" label="MediaSession (Android)"/>
+  <int value="2" label="Headset Unplugged"/>
+</enum>
+
+<enum name="MediaSessionSuspendedSource" type="int">
+  <int value="0" label="System Transient"/>
+  <int value="1" label="System Permanent"/>
+  <int value="2" label="UI"/>
+  <int value="3" label="CONTENT"/>
+  <int value="4" label="System Transient Duck"/>
+</enum>
+
+<enum name="MediaStreamRequestResult" type="int">
+  <int value="0" label="Ok"/>
+  <int value="1" label="Permission Denied"/>
+  <int value="2" label="Permission Dismissed"/>
+  <int value="3" label="Invalid State"/>
+  <int value="4" label="No Hardware"/>
+  <int value="5" label="Invalid Security Origin"/>
+  <int value="6" label="Tab Capture Failure"/>
+  <int value="7" label="Screen Capture Failure"/>
+  <int value="8" label="Capture Failure"/>
+  <int value="9" label="Constraint Not Satisfied"/>
+  <int value="10" label="Track Start Failure"/>
+  <int value="11" label="Not Supported"/>
+  <int value="12" label="Failed due to shutdown"/>
+</enum>
+
+<enum name="MediaStreamRequestState" type="int">
+  <int value="0" label="Explicitly Cancelled"/>
+  <int value="1" label="Stream Not Generated"/>
+  <int value="2" label="Pending Media Tracks"/>
+</enum>
+
+<enum name="MediaTypePredictionResult" type="int">
+  <int value="0" label="All correct"/>
+  <int value="1" label="All incorrect"/>
+  <int value="2" label="Path-based was better"/>
+  <int value="3" label="URL-based was better"/>
+</enum>
+
+<enum name="MediaUrlType" type="int">
+  <int value="0" label="Non Http Live Stream Type"/>
+  <int value="1" label="Http Live Stream Type"/>
+</enum>
+
+<enum name="MemoryPressureLevel" type="int">
+  <int value="0" label="No memory pressure"/>
+  <int value="1" label="Moderate memory pressure"/>
+  <int value="2" label="Critical memory pressure"/>
+</enum>
+
+<enum name="MemoryPressureLevelChanges" type="int">
+  <int value="0" label="No pressure to moderate pressure"/>
+  <int value="1" label="No pressure to critical pressure"/>
+  <int value="2" label="Moderate pressure to critical pressure"/>
+  <int value="3" label="Critical pressure to moderate pressure"/>
+  <int value="4" label="Critical pressure to no pressure"/>
+  <int value="5" label="Moderate pressure to no pressure"/>
+</enum>
+
+<enum name="MemoryState" type="int">
+  <int value="0" label="Normal"/>
+  <int value="1" label="Throttled"/>
+  <int value="2" label="Suspended"/>
+</enum>
+
+<enum name="MessageLoopProblems" type="int">
+  <int value="0" label="Message Post"/>
+  <int value="1" label="Completion Post"/>
+  <int value="2" label="Set Timer"/>
+  <int value="3" label="Received WM_QUIT"/>
+</enum>
+
+<enum name="MetadataReadResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Open failure"/>
+  <int value="2" label="Not found"/>
+  <int value="3" label="Get info failure"/>
+  <int value="4" label="File too big"/>
+  <int value="5" label="Read failure"/>
+  <int value="6" label="Parse failure"/>
+  <int value="7" label="Malformed data"/>
+</enum>
+
+<enum name="MetadataWriteResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Serialization failure"/>
+  <int value="2" label="Write failure"/>
+</enum>
+
+<enum name="MetaTagTypeEnum" type="int">
+  <int value="0" label="No viewport tag"/>
+  <int value="1" label="Viewport meta with device width"/>
+  <int value="2" label="Viewport meta with constant width"/>
+  <int value="3" label="Viewport meta other"/>
+  <int value="4" label="HandheldFriendly meta"/>
+  <int value="5" label="MobileOptimized meta"/>
+  <int value="6" label="XHTML-MP document type"/>
+</enum>
+
+<enum name="MetricsReportingChange" type="int">
+  <int value="0" label="Error">
+    Error occurred while updating MetricsReporting
+  </int>
+  <int value="1" label="Disabled successfully"/>
+  <int value="2" label="Enabled successfully"/>
+</enum>
+
+<enum name="MicrophoneMuteResult" type="int">
+  <int value="0" label="Muted"/>
+  <int value="1" label="Not muted"/>
+</enum>
+
+<enum name="MidiResult" type="int">
+  <int value="0" label="Not initialized"/>
+  <int value="1" label="Successfully initialized"/>
+  <int value="2" label="Not supported"/>
+  <int value="3" label="Generic initialization error"/>
+</enum>
+
+<enum name="MidiUsage" type="int">
+  <int value="0" label="Instantiated"/>
+  <int value="1" label="Instantiated on unsupported platforms"/>
+  <int value="2" label="Session is started"/>
+  <int value="3" label="Session is ended"/>
+  <int value="4" label="Initialized"/>
+  <int value="5" label="Input port is added"/>
+  <int value="6" label="Output port is added"/>
+</enum>
+
+<enum name="MigrationNssToPemNetworkTypes" type="int">
+  <int value="0" label="EAP"/>
+  <int value="1" label="OpenVPN"/>
+  <int value="2" label="IPsec"/>
+</enum>
+
+<enum name="MissingStartType" type="int">
+  <int value="0" label="Nothing missing"/>
+  <int value="1" label="Start missing"/>
+  <int value="2" label="Commit missing"/>
+  <int value="3" label="Start+Commit missing"/>
+  <int value="4" label="NavStart missing"/>
+  <int value="5" label="NavStart+Start missing"/>
+  <int value="6" label="NavStart+Commit missing"/>
+  <int value="7" label="NavStart+Start+Commit missing"/>
+</enum>
+
+<enum name="MistSwitchResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+</enum>
+
+<enum name="MobileDownloadCancelReason" type="int">
+  <int value="0" label="Not canceled"/>
+  <int value="1" label="Click on the cancel button"/>
+  <int value="2" label="Notification dismissed"/>
+  <int value="3" label="Overwrite infobar dismissed"/>
+  <int value="4" label="No storage permission"/>
+  <int value="5" label="Dangerous download infobar dismissed"/>
+  <int value="6" label="No external storage"/>
+  <int value="7" label="Cannot determine download target"/>
+  <int value="8" label="Cancelled by native for other reasons"/>
+</enum>
+
+<enum name="MobileDownloadInterceptFailureReason" type="int">
+  <int value="0" label="No failure"/>
+  <int value="1" label="Empty url"/>
+  <int value="2" label="Non http or https"/>
+  <int value="3" label="Non GET method"/>
+  <int value="4" label="No request headers"/>
+  <int value="5" label="Use http auth"/>
+  <int value="6" label="Use channel bound cookies"/>
+</enum>
+
+<enum name="MobileDownloadResumption" type="int">
+  <int value="0" label="Resumption button shown after manual pause"/>
+  <int value="1" label="Resumption button shown after browser is killed"/>
+  <int value="2" label="Resumption button clicked"/>
+  <int value="3" label="Resumption failed"/>
+  <int value="4" label="Resumption auto started"/>
+</enum>
+
+<enum name="MobileFreProgress" type="int">
+  <int value="0" label="FRE started"/>
+  <int value="1" label="Welcome shown"/>
+  <int value="2" label="Data saver shown"/>
+  <int value="3" label="Sign in shown"/>
+  <int value="4" label="FRE completed w/ user signed in"/>
+  <int value="5" label="FRE completed w/ user not signed in"/>
+</enum>
+
+<enum name="MobileFreSignInChoice" type="int">
+  <summary>
+    These values are defined inside the MobileFreSignInChoice enum
+    chrome/browser/android/metrics/uma_bridge.cc and reference possible ways of
+    completing the sign-in part of the First Run Experience.
+  </summary>
+  <int value="0" label="Settings default account"/>
+  <int value="1" label="Settings another account"/>
+  <int value="2" label="Accept default account"/>
+  <int value="3" label="Accept another account"/>
+  <int value="4" label="No thanks"/>
+</enum>
+
+<enum name="MobileHungRendererInfoBarEvent" type="int">
+  <int value="0" label="Clicked the 'Wait' button"/>
+  <int value="1" label="Clicked the 'Kill' button"/>
+  <int value="2" label="Clicked the 'X' (close) button)"/>
+  <int value="3" label="Infobar dismissed after renderer became responsive"/>
+  <int value="4" label="Infobar dismissed after tab closed"/>
+</enum>
+
+<enum name="MobileSessionShutdownType" type="int">
+  <int value="0" label="Shutdown in background"/>
+  <int value="1" label="Shutdown in foreground; no log; no memory warning"/>
+  <int value="2" label="Shutdown in foreground; with log; no memory warning"/>
+  <int value="3" label="Shutdown in foreground; no log; with memory warning"/>
+  <int value="4" label="Shutdown in foreground; with log; with memory warning"/>
+  <int value="5" label="First launch after upgrade"/>
+</enum>
+
+<enum name="MobileStartingAction" type="int">
+  <int value="0" label="No activity"/>
+  <int value="1" label="Open new tab"/>
+  <int value="2" label="Focus omnibox"/>
+  <int value="3" label="Open bookmarks"/>
+  <int value="4" label="Open recents"/>
+  <int value="5" label="Open history"/>
+  <int value="6" label="Open tab switcher"/>
+</enum>
+
+<enum name="ModuleIndex" type="int">
+  <int value="0" label="chrome.dll"/>
+  <int value="1" label="chrome_elf.dll"/>
+  <int value="2" label="ntdll.dll"/>
+</enum>
+
+<enum name="MojoMachPortRelayBrokerError" type="int">
+  <int value="0" label="SUCCESS">
+    The Mach port was successfully sent or received.
+  </int>
+  <int value="1" label="ERROR_TASK_FOR_PID">
+    Couldn't get a task port for the process with a given pid.
+  </int>
+  <int value="2" label="ERROR_MAKE_RECEIVE_PORT">
+    Couldn't make a port with receive rights in the destination process.
+  </int>
+  <int value="3" label="ERROR_SET_ATTRIBUTES">
+    Couldn't change the attributes of a Mach port.
+  </int>
+  <int value="4" label="ERROR_EXTRACT_DEST_RIGHT">
+    Couldn't extract a right from the destination.
+  </int>
+  <int value="5" label="ERROR_SEND_MACH_PORT">
+    Couldn't send a Mach port in a call to mach_msg().
+  </int>
+  <int value="6" label="ERROR_EXTRACT_SOURCE_RIGHT">
+    Couldn't extract a right from the source.
+  </int>
+</enum>
+
+<enum name="MojoMachPortRelayChildError" type="int">
+  <int value="0" label="SUCCESS">The Mach port was successfully received.</int>
+  <int value="1" label="ERROR_RECEIVE_MACH_MESSAGE">
+    An error occurred while trying to receive a Mach port with mach_msg().
+  </int>
+</enum>
+
+<enum name="MostVisitedTileIndex" type="int">
+  <summary>
+    Index of a tile on the new tab page. This is only an enum so that the
+    dashboard won't produce misleading statistics like averages.
+  </summary>
+  <int value="0" label="0"/>
+  <int value="1" label="1"/>
+  <int value="2" label="2"/>
+  <int value="3" label="3"/>
+  <int value="4" label="4"/>
+  <int value="5" label="5"/>
+  <int value="6" label="6"/>
+  <int value="7" label="7"/>
+  <int value="8" label="8"/>
+  <int value="9" label="9"/>
+  <int value="10" label="10"/>
+  <int value="11" label="11"/>
+</enum>
+
+<enum name="MostVisitedTileType" type="int">
+  <summary>The visual type of a most visited tile on the new tab page.</summary>
+  <int value="0" label="None">The icon or thumbnail hasn't loaded yet.</int>
+  <int value="1" label="IconReal">
+    The item displays a site's actual favicon or touch icon.
+  </int>
+  <int value="2" label="IconColor">
+    The item displays a color derived from the site's favicon or touch icon.
+  </int>
+  <int value="3" label="IconDefault">
+    The item displays a default gray box in place of an icon.
+  </int>
+  <int value="4" label="ThumbnailLocal">
+    The item displays a locally-captured thumbnail of the site content.
+  </int>
+  <int value="5" label="ThumbnailServer">
+    The item displays a server-provided thumbnail of the site content.
+  </int>
+  <int value="6" label="ThumbnailDefault">
+    The item displays a default graphic in place of a thumbnail.
+  </int>
+</enum>
+
+<enum name="MouseEventFollowedByClick" type="int">
+  <int value="0" label="Missed event before click"/>
+  <int value="1" label="Caught event before click"/>
+</enum>
+
+<enum name="MSECodec" type="int">
+  <int value="0" label="(Unknown)"/>
+  <int value="1" label="VP8"/>
+  <int value="2" label="VP9"/>
+  <int value="3" label="Vorbis"/>
+  <int value="4" label="H.264"/>
+  <int value="5" label="MPEG2 AAC"/>
+  <int value="6" label="MPEG4 AAC"/>
+  <int value="7" label="EAC3"/>
+  <int value="8" label="MP3"/>
+  <int value="9" label="OPUS"/>
+  <int value="10" label="HEVC"/>
+  <int value="11" label="AC3"/>
+</enum>
+
+<enum name="MultiAccountUpdateBubbleUserAction" type="int">
+  <int value="0" label="DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_CHANGED"/>
+  <int value="1" label="DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_NOT_CHANGED"/>
+  <int value="2"
+      label="DEFAULT_ACCOUNT_MATCHED_BY_PASSWORD_USER_REJECTED_UPDATE"/>
+  <int value="3" label="DEFAULT_ACCOUNT_PREFERRED_USER_CHANGED"/>
+  <int value="4" label="DEFAULT_ACCOUNT_PREFERRED_USER_NOT_CHANGED"/>
+  <int value="5" label="DEFAULT_ACCOUNT_PREFERRED_USER_REJECTED_UPDATE"/>
+  <int value="6" label="DEFAULT_ACCOUNT_FIRST_USER_CHANGED"/>
+  <int value="7" label="DEFAULT_ACCOUNT_FIRST_USER_NOT_CHANGED"/>
+  <int value="8" label="DEFAULT_ACCOUNT_FIRST_USER_REJECTED_UPDATE"/>
+</enum>
+
+<enum name="MultiProfileSessionMode" type="int">
+  <int value="0" label="Single user mode"/>
+  <int value="1" label="Side by side mode"/>
+  <int value="2" label="Separate desktop mode"/>
+</enum>
+
+<enum name="MultiProfileSigninUserAction" type="int">
+  <int value="0" label="System tray"/>
+  <int value="1" label="Browser frame"/>
+</enum>
+
+<enum name="MultiProfileSwitchActiveUserAction" type="int">
+  <int value="0" label="System tray"/>
+  <int value="1" label="Keyboard accelerator"/>
+</enum>
+
+<enum name="MultiProfileTeleportWindowAction" type="int">
+  <int value="0" label="Drag and drop"/>
+  <int value="1" label="Caption context menu"/>
+  <int value="2" label="Return by minimize"/>
+  <int value="3" label="Return by launcher"/>
+</enum>
+
+<enum name="MultiProfileTeleportWindowType" type="int">
+  <int value="0" label="Tabbed browser"/>
+  <int value="1" label="Tabbed incognito browser"/>
+  <int value="2" label="V1 app"/>
+  <int value="3" label="V2 app"/>
+  <int value="4" label="Panel"/>
+  <int value="5" label="Popup"/>
+  <int value="6" label="Unknown"/>
+</enum>
+
+<enum name="NaClHelperStatus" type="int">
+  <int value="0" label="Helper not initialized"/>
+  <int value="1" label="Helper executable missing"/>
+  <int value="2" label="Helper bootstrap executable missing"/>
+  <int value="3" label="Browser running under Valgrind"/>
+  <int value="4" label="Helper failed to launch"/>
+  <int value="5" label="Helper failed to ACK"/>
+  <int value="6" label="Helper started correctly"/>
+</enum>
+
+<enum name="NaClHttpStatusCodeClass" type="int">
+  <int value="0" label="0XX"/>
+  <int value="1" label="1XX"/>
+  <int value="2" label="2XX"/>
+  <int value="3" label="3XX"/>
+  <int value="4" label="4XX"/>
+  <int value="5" label="5XX"/>
+  <int value="6" label="No status"/>
+</enum>
+
+<enum name="NaClManifestType" type="int">
+  <int value="0" label="File"/>
+  <int value="1" label="DataURI"/>
+</enum>
+
+<enum name="NaClOSArchEnum" type="int">
+  <int value="0" label="Linux x86-32"/>
+  <int value="1" label="Linux x86-64"/>
+  <int value="2" label="Linux ARM"/>
+  <int value="3" label="Mac x86-32"/>
+  <int value="4" label="Mac x86-64"/>
+  <int value="5" label="Mac ARM"/>
+  <int value="6" label="Windows x86-32"/>
+  <int value="7" label="Windows x86-64"/>
+  <int value="8" label="Windows ARM"/>
+  <int value="9" label="Linux Mips32"/>
+</enum>
+
+<enum name="NaClPluginErrorCode" type="int">
+  <int value="0" label="ERROR_LOAD_SUCCESS"/>
+  <int value="1" label="ERROR_LOAD_ABORTED"/>
+  <int value="2" label="ERROR_UNKNOWN"/>
+  <int value="3" label="ERROR_MANIFEST_RESOLVE_URL"/>
+  <int value="4" label="ERROR_MANIFEST_LOAD_URL"/>
+  <int value="5" label="ERROR_MANIFEST_STAT"/>
+  <int value="6" label="ERROR_MANIFEST_TOO_LARGE"/>
+  <int value="7" label="ERROR_MANIFEST_OPEN"/>
+  <int value="8" label="ERROR_MANIFEST_MEMORY_ALLOC"/>
+  <int value="9" label="ERROR_MANIFEST_READ"/>
+  <int value="10" label="ERROR_MANIFEST_PARSING"/>
+  <int value="11" label="ERROR_MANIFEST_SCHEMA_VALIDATE"/>
+  <int value="12" label="ERROR_MANIFEST_GET_NEXE_URL"/>
+  <int value="13" label="ERROR_NEXE_LOAD_URL"/>
+  <int value="14" label="ERROR_NEXE_ORIGIN_PROTOCOL"/>
+  <int value="15" label="ERROR_NEXE_FH_DUP"/>
+  <int value="16" label="ERROR_NEXE_STAT"/>
+  <int value="17" label="ERROR_ELF_CHECK_IO"/>
+  <int value="18" label="ERROR_ELF_CHECK_FAIL"/>
+  <int value="19" label="ERROR_SEL_LDR_INIT"/>
+  <int value="20" label="ERROR_SEL_LDR_CREATE_LAUNCHER"/>
+  <int value="21" label="ERROR_SEL_LDR_FD"/>
+  <int value="22" label="ERROR_SEL_LDR_LAUNCH"/>
+  <int value="23" label="ERROR_SEL_LDR_COMMUNICATION"/>
+  <int value="24" label="ERROR_SEL_LDR_SEND_NEXE"/>
+  <int value="25" label="ERROR_SEL_LDR_HANDLE_PASSING"/>
+  <int value="26" label="ERROR_SEL_LDR_START_MODULE"/>
+  <int value="27" label="ERROR_SEL_LDR_START_STATUS"/>
+  <int value="28" label="ERROR_SRPC_CONNECTION_FAIL"/>
+  <int value="29" label="ERROR_START_PROXY_CHECK_PPP"/>
+  <int value="30" label="ERROR_START_PROXY_ALLOC"/>
+  <int value="31" label="ERROR_START_PROXY_MODULE"/>
+  <int value="32" label="ERROR_START_PROXY_INSTANCE"/>
+  <int value="33" label="ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL"/>
+  <int value="34" label="ERROR_SEL_LDR_COMMUNICATION_REV_SETUP"/>
+  <int value="35" label="ERROR_SEL_LDR_COMMUNICATION_WRAPPER"/>
+  <int value="36" label="ERROR_SEL_LDR_COMMUNICATION_REV_SERVICE"/>
+  <int value="37" label="ERROR_START_PROXY_CRASH"/>
+  <int value="38" label="ERROR_MANIFEST_PROGRAM_MISSING_ARCH"/>
+  <int value="39" label="ERROR_PNACL_CACHE_OPEN_INPROGRESS"/>
+  <int value="40" label="ERROR_PNACL_CACHE_OPEN_NOACCESS"/>
+  <int value="41" label="ERROR_PNACL_CACHE_OPEN_NOQUOTA"/>
+  <int value="42" label="ERROR_PNACL_CACHE_OPEN_NOSPACE"/>
+  <int value="43" label="ERROR_PNACL_CACHE_OPEN_OTHER"/>
+  <int value="44" label="ERROR_PNACL_CACHE_DIRECTORY_CREATE"/>
+  <int value="45" label="ERROR_PNACL_CACHE_FILEOPEN_NOACCESS"/>
+  <int value="46" label="ERROR_PNACL_CACHE_FILEOPEN_NOQUOTA"/>
+  <int value="47" label="ERROR_PNACL_CACHE_FILEOPEN_NOSPACE"/>
+  <int value="48" label="ERROR_PNACL_CACHE_FILEOPEN_NOTAFILE"/>
+  <int value="49" label="ERROR_PNACL_CACHE_FILEOPEN_OTHER"/>
+  <int value="50" label="ERROR_PNACL_CACHE_FETCH_NOACCESS"/>
+  <int value="51" label="ERROR_PNACL_CACHE_FETCH_NOTFOUND"/>
+  <int value="52" label="ERROR_PNACL_CACHE_FETCH_OTHER"/>
+  <int value="53" label="ERROR_PNACL_CACHE_FINALIZE_COPY_NOQUOTA"/>
+  <int value="54" label="ERROR_PNACL_CACHE_FINALIZE_COPY_NOSPACE"/>
+  <int value="55" label="ERROR_PNACL_CACHE_FINALIZE_COPY_OTHER"/>
+  <int value="56" label="ERROR_PNACL_CACHE_FINALIZE_RENAME_NOACCESS"/>
+  <int value="57" label="ERROR_PNACL_CACHE_FINALIZE_RENAME_OTHER"/>
+  <int value="58" label="ERROR_PNACL_RESOURCE_FETCH"/>
+  <int value="59" label="ERROR_PNACL_PEXE_FETCH_ABORTED"/>
+  <int value="60" label="ERROR_PNACL_PEXE_FETCH_NOACCESS"/>
+  <int value="61" label="ERROR_PNACL_PEXE_FETCH_OTHER"/>
+  <int value="62" label="ERROR_PNACL_THREAD_CREATE"/>
+  <int value="63" label="ERROR_PNACL_LLC_SETUP"/>
+  <int value="64" label="ERROR_PNACL_LD_SETUP"/>
+  <int value="65" label="ERROR_PNACL_LLC_INTERNAL"/>
+  <int value="66" label="ERROR_PNACL_LD_INTERNAL"/>
+  <int value="67" label="ERROR_PNACL_CREATE_TEMP"/>
+  <int value="68" label="ERROR_PNACL_NOT_ENABLED"/>
+  <int value="69" label="ERROR_MANIFEST_NOACCESS_URL"/>
+  <int value="70" label="ERROR_NEXE_NOACCESS_URL"/>
+</enum>
+
+<enum name="NaClSelLdrErrorCode" type="int">
+  <int value="0" label="LOAD_OK"/>
+  <int value="1" label="LOAD_STATUS_UNKNOWN"/>
+  <int value="2" label="LOAD_UNSUPPORTED_OS_PLATFORM"/>
+  <int value="3" label="LOAD_DEP_UNSUPPORTED"/>
+  <int value="4" label="LOAD_INTERNAL"/>
+  <int value="5" label="LOAD_DUP_LOAD_MODULE"/>
+  <int value="6" label="LOAD_DUP_START_MODULE"/>
+  <int value="7" label="LOAD_OPEN_ERROR"/>
+  <int value="8" label="LOAD_READ_ERROR"/>
+  <int value="9" label="LOAD_TOO_MANY_PROG_HDRS"/>
+  <int value="10" label="LOAD_BAD_PHENTSIZE"/>
+  <int value="11" label="LOAD_BAD_ELF_MAGIC"/>
+  <int value="12" label="LOAD_NOT_32_BIT"/>
+  <int value="13" label="LOAD_NOT_64_BIT"/>
+  <int value="14" label="LOAD_BAD_ABI"/>
+  <int value="15" label="LOAD_NOT_EXEC"/>
+  <int value="16" label="LOAD_BAD_MACHINE"/>
+  <int value="17" label="LOAD_BAD_ELF_VERS"/>
+  <int value="18" label="LOAD_TOO_MANY_SECT"/>
+  <int value="19" label="LOAD_BAD_SECT"/>
+  <int value="20" label="LOAD_NO_MEMORY"/>
+  <int value="21" label="LOAD_SECT_HDR"/>
+  <int value="22" label="LOAD_ADDR_SPACE_TOO_SMALL"/>
+  <int value="23" label="LOAD_ADDR_SPACE_TOO_BIG"/>
+  <int value="24" label="LOAD_DATA_OVERLAPS_STACK_SECTION"/>
+  <int value="25" label="LOAD_RODATA_OVERLAPS_DATA"/>
+  <int value="26" label="LOAD_DATA_NOT_LAST_SEGMENT"/>
+  <int value="27" label="LOAD_NO_DATA_BUT_RODATA_NOT_LAST_SEGMENT"/>
+  <int value="28" label="LOAD_TEXT_OVERLAPS_RODATA"/>
+  <int value="29" label="LOAD_TEXT_OVERLAPS_DATA"/>
+  <int value="30" label="LOAD_BAD_RODATA_ALIGNMENT"/>
+  <int value="31" label="LOAD_BAD_DATA_ALIGNMENT"/>
+  <int value="32" label="LOAD_UNLOADABLE"/>
+  <int value="33" label="LOAD_BAD_ELF_TEXT"/>
+  <int value="34" label="LOAD_TEXT_SEG_TOO_BIG"/>
+  <int value="35" label="LOAD_DATA_SEG_TOO_BIG"/>
+  <int value="36" label="LOAD_MPROTECT_FAIL"/>
+  <int value="37" label="LOAD_MADVISE_FAIL"/>
+  <int value="38" label="LOAD_TOO_MANY_SYMBOL_STR"/>
+  <int value="39" label="LOAD_SYMTAB_ENTRY_TOO_SMALL"/>
+  <int value="40" label="LOAD_NO_SYMTAB"/>
+  <int value="41" label="LOAD_NO_SYMTAB_STRINGS"/>
+  <int value="42" label="LOAD_SYMTAB_ENTRY"/>
+  <int value="43" label="LOAD_UNKNOWN_SYMBOL_TYPE"/>
+  <int value="44" label="LOAD_SYMTAB_DUP"/>
+  <int value="45" label="LOAD_REL_ERROR"/>
+  <int value="46" label="LOAD_REL_UNIMPL"/>
+  <int value="47" label="LOAD_UNDEF_SYMBOL"/>
+  <int value="48" label="LOAD_BAD_SYMBOL_DATA"/>
+  <int value="49" label="LOAD_BAD_FILE"/>
+  <int value="50" label="LOAD_BAD_ENTRY"/>
+  <int value="51" label="LOAD_SEGMENT_OUTSIDE_ADDRSPACE"/>
+  <int value="52" label="LOAD_DUP_SEGMENT"/>
+  <int value="53" label="LOAD_SEGMENT_BAD_LOC"/>
+  <int value="54" label="LOAD_BAD_SEGMENT"/>
+  <int value="55" label="LOAD_REQUIRED_SEG_MISSING"/>
+  <int value="56" label="LOAD_SEGMENT_BAD_PARAM"/>
+  <int value="57" label="LOAD_VALIDATION_FAILED"/>
+  <int value="58" label="LOAD_UNIMPLEMENTED"/>
+  <int value="59" label="SRT_NO_SEG_SEL"/>
+  <int value="60" label="LOAD_BAD_EHSIZE"/>
+  <int value="61" label="LOAD_EHDR_OVERFLOW"/>
+  <int value="62" label="LOAD_PHDR_OVERFLOW"/>
+  <int value="63" label="LOAD_UNSUPPORTED_CPU"/>
+  <int value="64" label="LOAD_NO_MEMORY_FOR_DYNAMIC_TEXT"/>
+  <int value="65" label="LOAD_NO_MEMORY_FOR_ADDRESS_SPACE"/>
+</enum>
+
+<enum name="NaClStartupEnum" type="int">
+  <int value="0" label="Default tab opened"/>
+  <int value="1" label="New tab opened"/>
+  <int value="2" label="NaCl sel_ldr started"/>
+</enum>
+
+<enum name="NaClValidationCacheEnum" type="int">
+  <int value="0" label="Miss"/>
+  <int value="1" label="Hit"/>
+</enum>
+
+<enum name="NativeLibraryPreloaderResult" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="WRONG_PACKAGE_NAME"/>
+  <int value="2" label="ADDRESS_SPACE_NOT_RESERVED"/>
+  <int value="3" label="FAILED_WAITING_FOR_RELRO"/>
+  <int value="4" label="FAILED_LISTING_WEBVIEW_PACKAGES"/>
+  <int value="5" label="FAILED_TO_OPEN_RELRO_FILE"/>
+  <int value="6" label="FAILED_TO_LOAD_LIBRARY"/>
+  <int value="7" label="FAILED_JNI_CALL"/>
+  <int value="8" label="FAILED_WAITING_FOR_WEBVIEW_REASON_UNKNOWN"/>
+  <int value="10" label="FAILED_TO_FIND_NAMESPACE"/>
+</enum>
+
+<enum name="NatTypeCounters" type="int">
+  <int value="0" label="Not behind a NAT."/>
+  <int value="1" label="Behind a NAT of unknown type."/>
+  <int value="2" label="Behind a Symmetric NAT."/>
+  <int value="3" label="Behind a Non-Symmetric NAT."/>
+</enum>
+
+<enum name="NavigationDirection" type="int">
+  <summary>Direction of the overscroll gesture.</summary>
+  <int value="0" label="None">Did not scroll</int>
+  <int value="1" label="Forward">Scrolled forward</int>
+  <int value="2" label="Back">Scrolled back</int>
+</enum>
+
+<enum name="NavigationInterceptResult" type="int">
+  <int value="0" label="Created external intent"/>
+  <int value="1" label="Created external intent with tab clobbering"/>
+  <int value="2" label="Created async dialog for confirming external intent"/>
+  <int value="3" label="Navigation not intercepted"/>
+</enum>
+
+<enum name="NavigationScheme" type="int">
+  <int value="0" label="(Unknown)"/>
+  <int value="1" label="http"/>
+  <int value="2" label="https"/>
+  <int value="3" label="file"/>
+  <int value="4" label="ftp"/>
+  <int value="5" label="data"/>
+  <int value="6" label="javascript"/>
+  <int value="7" label="about"/>
+  <int value="8" label="chrome"/>
+  <int value="9" label="blob"/>
+  <int value="10" label="filesystem"/>
+</enum>
+
+<enum name="NavigatorVibrationType" type="int">
+  <int value="0" label="Main frame vibrate, no user gesture"/>
+  <int value="1" label="Main frame vibrate, with user gesture"/>
+  <int value="2" label="Same-origin subframe vibrate, no user gesture"/>
+  <int value="3" label="Same-origin subframe vibrate, with user gesture"/>
+  <int value="4" label="Cross-origin subframe vibrate, no user gesture"/>
+  <int value="5" label="Cross-origin subframe vibrate, with user gesture"/>
+</enum>
+
+<enum name="NetCacheState" type="int">
+  <int value="0" label="FROM_CACHE"/>
+  <int value="1" label="STILL_VALID"/>
+  <int value="2" label="NO_LONGER_VALID"/>
+  <int value="3" label="NO_ENTRY"/>
+</enum>
+
+<enum name="NetConnectivityProtocolStatus" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="IP_STRING_PARSE_FAILED"/>
+  <int value="2" label="SOCKET_CREATE_FAILED"/>
+  <int value="3" label="RESOLVE_FAILED"/>
+  <int value="4" label="CONNECT_FAILED"/>
+  <int value="5" label="WRITE_FAILED"/>
+  <int value="6" label="READ_TIMED_OUT"/>
+  <int value="7" label="READ_FAILED"/>
+  <int value="8" label="ZERO_LENGTH_ERROR"/>
+  <int value="9" label="NO_CHECKSUM_ERROR"/>
+  <int value="10" label="NO_KEY_ERROR"/>
+  <int value="11" label="NO_PAYLOAD_SIZE_ERROR"/>
+  <int value="12" label="NO_PAYLOAD_ERROR"/>
+  <int value="13" label="INVALID_KEY_ERROR"/>
+  <int value="14" label="TOO_SHORT_PAYLOAD"/>
+  <int value="15" label="TOO_LONG_PAYLOAD"/>
+  <int value="16" label="INVALID_CHECKSUM"/>
+  <int value="17" label="PATTERN_CHANGED"/>
+  <int value="18" label="INVALID_PACKET_NUMBER"/>
+  <int value="19" label="TOO_MANY_PACKETS"/>
+  <int value="20" label="STATUS_MAX"/>
+</enum>
+
+<enum name="NetConnectivityStatus" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="IP_STRING_PARSE_FAILED"/>
+  <int value="2" label="SOCKET_CREATE_FAILED"/>
+  <int value="3" label="RESOLVE_FAILED"/>
+  <int value="4" label="CONNECT_FAILED"/>
+  <int value="5" label="WRITE_FAILED"/>
+  <int value="6" label="READ_TIMED_OUT"/>
+  <int value="7" label="READ_FAILED"/>
+  <int value="8" label="READ_VERIFY_FAILED"/>
+  <int value="9" label="STATUS_MAX"/>
+</enum>
+
+<enum name="NetErrorCodes" type="int">
+<!-- Generated from net/base/net_error_list.h -->
+
+  <int value="0" label="OK"/>
+  <int value="1" label="IO_PENDING"/>
+  <int value="2" label="FAILED"/>
+  <int value="3" label="ABORTED"/>
+  <int value="4" label="INVALID_ARGUMENT"/>
+  <int value="5" label="INVALID_HANDLE"/>
+  <int value="6" label="FILE_NOT_FOUND"/>
+  <int value="7" label="TIMED_OUT"/>
+  <int value="8" label="FILE_TOO_BIG"/>
+  <int value="9" label="UNEXPECTED"/>
+  <int value="10" label="ACCESS_DENIED"/>
+  <int value="11" label="NOT_IMPLEMENTED"/>
+  <int value="12" label="INSUFFICIENT_RESOURCES"/>
+  <int value="13" label="OUT_OF_MEMORY"/>
+  <int value="14" label="UPLOAD_FILE_CHANGED"/>
+  <int value="15" label="SOCKET_NOT_CONNECTED"/>
+  <int value="16" label="FILE_EXISTS"/>
+  <int value="17" label="FILE_PATH_TOO_LONG"/>
+  <int value="18" label="FILE_NO_SPACE"/>
+  <int value="19" label="FILE_VIRUS_INFECTED"/>
+  <int value="20" label="BLOCKED_BY_CLIENT"/>
+  <int value="21" label="NETWORK_CHANGED"/>
+  <int value="22" label="BLOCKED_BY_ADMINISTRATOR"/>
+  <int value="23" label="SOCKET_IS_CONNECTED"/>
+  <int value="24" label="BLOCKED_ENROLLMENT_CHECK_PENDING"/>
+  <int value="25" label="UPLOAD_STREAM_REWIND_NOT_SUPPORTED"/>
+  <int value="26" label="CONTEXT_SHUT_DOWN"/>
+  <int value="27" label="BLOCKED_BY_RESPONSE"/>
+  <int value="100" label="CONNECTION_CLOSED"/>
+  <int value="101" label="CONNECTION_RESET"/>
+  <int value="102" label="CONNECTION_REFUSED"/>
+  <int value="103" label="CONNECTION_ABORTED"/>
+  <int value="104" label="CONNECTION_FAILED"/>
+  <int value="105" label="NAME_NOT_RESOLVED"/>
+  <int value="106" label="INTERNET_DISCONNECTED"/>
+  <int value="107" label="SSL_PROTOCOL_ERROR"/>
+  <int value="108" label="ADDRESS_INVALID"/>
+  <int value="109" label="ADDRESS_UNREACHABLE"/>
+  <int value="110" label="SSL_CLIENT_AUTH_CERT_NEEDED"/>
+  <int value="111" label="TUNNEL_CONNECTION_FAILED"/>
+  <int value="112" label="NO_SSL_VERSIONS_ENABLED"/>
+  <int value="113" label="SSL_VERSION_OR_CIPHER_MISMATCH"/>
+  <int value="114" label="SSL_RENEGOTIATION_REQUESTED"/>
+  <int value="115" label="PROXY_AUTH_UNSUPPORTED"/>
+  <int value="116" label="CERT_ERROR_IN_SSL_RENEGOTIATION"/>
+  <int value="117" label="BAD_SSL_CLIENT_AUTH_CERT"/>
+  <int value="118" label="CONNECTION_TIMED_OUT"/>
+  <int value="119" label="HOST_RESOLVER_QUEUE_TOO_LARGE"/>
+  <int value="120" label="SOCKS_CONNECTION_FAILED"/>
+  <int value="121" label="SOCKS_CONNECTION_HOST_UNREACHABLE"/>
+  <int value="122" label="ALPN_NEGOTIATION_FAILED"/>
+  <int value="123" label="SSL_NO_RENEGOTIATION"/>
+  <int value="124" label="WINSOCK_UNEXPECTED_WRITTEN_BYTES"/>
+  <int value="125" label="SSL_DECOMPRESSION_FAILURE_ALERT"/>
+  <int value="126" label="SSL_BAD_RECORD_MAC_ALERT"/>
+  <int value="127" label="PROXY_AUTH_REQUESTED"/>
+  <int value="128" label="SSL_UNSAFE_NEGOTIATION"/>
+  <int value="129" label="SSL_WEAK_SERVER_EPHEMERAL_DH_KEY"/>
+  <int value="130" label="PROXY_CONNECTION_FAILED"/>
+  <int value="131" label="MANDATORY_PROXY_CONFIGURATION_FAILED"/>
+  <int value="132" label="ESET_ANTI_VIRUS_SSL_INTERCEPTION"/>
+  <int value="133" label="PRECONNECT_MAX_SOCKET_LIMIT"/>
+  <int value="134" label="SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED"/>
+  <int value="135" label="SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY"/>
+  <int value="136" label="PROXY_CERTIFICATE_INVALID"/>
+  <int value="137" label="NAME_RESOLUTION_FAILED"/>
+  <int value="138" label="NETWORK_ACCESS_DENIED"/>
+  <int value="139" label="TEMPORARILY_THROTTLED"/>
+  <int value="140" label="HTTPS_PROXY_TUNNEL_RESPONSE"/>
+  <int value="141" label="SSL_CLIENT_AUTH_SIGNATURE_FAILED"/>
+  <int value="142" label="MSG_TOO_BIG"/>
+  <int value="143" label="SPDY_SESSION_ALREADY_EXISTS"/>
+  <int value="144" label="LIMIT_VIOLATION"/>
+  <int value="145" label="WS_PROTOCOL_ERROR"/>
+  <int value="146" label="PROTOCOL_SWITCHED"/>
+  <int value="147" label="ADDRESS_IN_USE"/>
+  <int value="148" label="SSL_HANDSHAKE_NOT_COMPLETED"/>
+  <int value="149" label="SSL_BAD_PEER_PUBLIC_KEY"/>
+  <int value="150" label="SSL_PINNED_KEY_NOT_IN_CERT_CHAIN"/>
+  <int value="151" label="CLIENT_AUTH_CERT_TYPE_UNSUPPORTED"/>
+  <int value="152" label="ORIGIN_BOUND_CERT_GENERATION_TYPE_MISMATCH"/>
+  <int value="153" label="SSL_DECRYPT_ERROR_ALERT"/>
+  <int value="154" label="WS_THROTTLE_QUEUE_TOO_LARGE"/>
+  <int value="155" label="TOO_MANY_SOCKET_STREAMS"/>
+  <int value="156" label="SSL_SERVER_CERT_CHANGED"/>
+  <int value="157" label="SSL_INAPPROPRIATE_FALLBACK"/>
+  <int value="158" label="CT_NO_SCTS_VERIFIED_OK"/>
+  <int value="159" label="SSL_UNRECOGNIZED_NAME_ALERT"/>
+  <int value="160" label="SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR"/>
+  <int value="161" label="SOCKET_SET_SEND_BUFFER_SIZE_ERROR"/>
+  <int value="162" label="SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE"/>
+  <int value="163" label="SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE"/>
+  <int value="164" label="SSL_CLIENT_AUTH_CERT_BAD_FORMAT"/>
+  <int value="165" label="SSL_FALLBACK_BEYOND_MINIMUM_VERSION"/>
+  <int value="166" label="ICANN_NAME_COLLISION"/>
+  <int value="167" label="SSL_SERVER_CERT_BAD_FORMAT"/>
+  <int value="168" label="CT_STH_PARSING_FAILED"/>
+  <int value="169" label="CT_STH_INCOMPLETE"/>
+  <int value="170" label="UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH"/>
+  <int value="171" label="CT_CONSISTENCY_PROOF_PARSING_FAILED"/>
+  <int value="172" label="SSL_OBSOLETE_CIPHER"/>
+  <int value="200" label="CERT_COMMON_NAME_INVALID"/>
+  <int value="201" label="CERT_DATE_INVALID"/>
+  <int value="202" label="CERT_AUTHORITY_INVALID"/>
+  <int value="203" label="CERT_CONTAINS_ERRORS"/>
+  <int value="204" label="CERT_NO_REVOCATION_MECHANISM"/>
+  <int value="205" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
+  <int value="206" label="CERT_REVOKED"/>
+  <int value="207" label="CERT_INVALID"/>
+  <int value="208" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
+  <int value="209" label="CERT_NOT_IN_DNS"/>
+  <int value="210" label="CERT_NON_UNIQUE_NAME"/>
+  <int value="211" label="CERT_WEAK_KEY"/>
+  <int value="212" label="CERT_NAME_CONSTRAINT_VIOLATION"/>
+  <int value="213" label="CERT_VALIDITY_TOO_LONG"/>
+  <int value="214" label="CERTIFICATE_TRANSPARENCY_REQUIRED"/>
+  <int value="215" label="CERT_END"/>
+  <int value="300" label="INVALID_URL"/>
+  <int value="301" label="DISALLOWED_URL_SCHEME"/>
+  <int value="302" label="UNKNOWN_URL_SCHEME"/>
+  <int value="310" label="TOO_MANY_REDIRECTS"/>
+  <int value="311" label="UNSAFE_REDIRECT"/>
+  <int value="312" label="UNSAFE_PORT"/>
+  <int value="320" label="INVALID_RESPONSE"/>
+  <int value="321" label="INVALID_CHUNKED_ENCODING"/>
+  <int value="322" label="METHOD_NOT_SUPPORTED"/>
+  <int value="323" label="UNEXPECTED_PROXY_AUTH"/>
+  <int value="324" label="EMPTY_RESPONSE"/>
+  <int value="325" label="RESPONSE_HEADERS_TOO_BIG"/>
+  <int value="326" label="PAC_STATUS_NOT_OK"/>
+  <int value="327" label="PAC_SCRIPT_FAILED"/>
+  <int value="328" label="REQUEST_RANGE_NOT_SATISFIABLE"/>
+  <int value="329" label="MALFORMED_IDENTITY"/>
+  <int value="330" label="CONTENT_DECODING_FAILED"/>
+  <int value="331" label="NETWORK_IO_SUSPENDED"/>
+  <int value="332" label="SYN_REPLY_NOT_RECEIVED"/>
+  <int value="333" label="ENCODING_CONVERSION_FAILED"/>
+  <int value="334" label="UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT"/>
+  <int value="335" label="INVALID_SPDY_STREAM"/>
+  <int value="336" label="NO_SUPPORTED_PROXIES"/>
+  <int value="337" label="SPDY_PROTOCOL_ERROR"/>
+  <int value="338" label="INVALID_AUTH_CREDENTIALS"/>
+  <int value="339" label="UNSUPPORTED_AUTH_SCHEME"/>
+  <int value="340" label="ENCODING_DETECTION_FAILED"/>
+  <int value="341" label="MISSING_AUTH_CREDENTIALS"/>
+  <int value="342" label="UNEXPECTED_SECURITY_LIBRARY_STATUS"/>
+  <int value="343" label="MISCONFIGURED_AUTH_ENVIRONMENT"/>
+  <int value="344" label="UNDOCUMENTED_SECURITY_LIBRARY_STATUS"/>
+  <int value="345" label="RESPONSE_BODY_TOO_BIG_TO_DRAIN"/>
+  <int value="346" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH"/>
+  <int value="347" label="INCOMPLETE_SPDY_HEADERS"/>
+  <int value="348" label="PAC_NOT_IN_DHCP"/>
+  <int value="349" label="RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION"/>
+  <int value="350" label="RESPONSE_HEADERS_MULTIPLE_LOCATION"/>
+  <int value="351" label="SPDY_SERVER_REFUSED_STREAM"/>
+  <int value="352" label="SPDY_PING_FAILED"/>
+  <int value="353" label="PIPELINE_EVICTION"/>
+  <int value="354" label="CONTENT_LENGTH_MISMATCH"/>
+  <int value="355" label="INCOMPLETE_CHUNKED_ENCODING"/>
+  <int value="356" label="QUIC_PROTOCOL_ERROR"/>
+  <int value="357" label="RESPONSE_HEADERS_TRUNCATED"/>
+  <int value="358" label="QUIC_HANDSHAKE_FAILED"/>
+  <int value="359" label="REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC"/>
+  <int value="360" label="SPDY_INADEQUATE_TRANSPORT_SECURITY"/>
+  <int value="361" label="SPDY_FLOW_CONTROL_ERROR"/>
+  <int value="362" label="SPDY_FRAME_SIZE_ERROR"/>
+  <int value="363" label="SPDY_COMPRESSION_ERROR"/>
+  <int value="364" label="PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION"/>
+  <int value="365" label="HTTP_1_1_REQUIRED"/>
+  <int value="366" label="PROXY_HTTP_1_1_REQUIRED"/>
+  <int value="367" label="PAC_SCRIPT_TERMINATED"/>
+  <int value="368" label="ALTERNATIVE_CERT_NOT_VALID_FOR_ORIGIN"/>
+  <int value="369" label="TEMPORARY_BACKOFF"/>
+  <int value="370" label="INVALID_HTTP_RESPONSE"/>
+  <int value="400" label="CACHE_MISS"/>
+  <int value="401" label="CACHE_READ_FAILURE"/>
+  <int value="402" label="CACHE_WRITE_FAILURE"/>
+  <int value="403" label="CACHE_OPERATION_NOT_SUPPORTED"/>
+  <int value="404" label="CACHE_OPEN_FAILURE"/>
+  <int value="405" label="CACHE_CREATE_FAILURE"/>
+  <int value="406" label="CACHE_RACE"/>
+  <int value="407" label="CACHE_CHECKSUM_READ_FAILURE"/>
+  <int value="408" label="CACHE_CHECKSUM_MISMATCH"/>
+  <int value="409" label="CACHE_LOCK_TIMEOUT"/>
+  <int value="410" label="CACHE_AUTH_FAILURE_AFTER_READ"/>
+  <int value="501" label="INSECURE_RESPONSE"/>
+  <int value="502" label="NO_PRIVATE_KEY_FOR_CERT"/>
+  <int value="503" label="ADD_USER_CERT_FAILED"/>
+  <int value="601" label="FTP_FAILED"/>
+  <int value="602" label="FTP_SERVICE_UNAVAILABLE"/>
+  <int value="603" label="FTP_TRANSFER_ABORTED"/>
+  <int value="604" label="FTP_FILE_BUSY"/>
+  <int value="605" label="FTP_SYNTAX_ERROR"/>
+  <int value="606" label="FTP_COMMAND_NOT_SUPPORTED"/>
+  <int value="607" label="FTP_BAD_COMMAND_SEQUENCE"/>
+  <int value="701" label="PKCS12_IMPORT_BAD_PASSWORD"/>
+  <int value="702" label="PKCS12_IMPORT_FAILED"/>
+  <int value="703" label="IMPORT_CA_CERT_NOT_CA"/>
+  <int value="704" label="IMPORT_CERT_ALREADY_EXISTS"/>
+  <int value="705" label="IMPORT_CA_CERT_FAILED"/>
+  <int value="706" label="IMPORT_SERVER_CERT_FAILED"/>
+  <int value="707" label="PKCS12_IMPORT_INVALID_MAC"/>
+  <int value="708" label="PKCS12_IMPORT_INVALID_FILE"/>
+  <int value="709" label="PKCS12_IMPORT_UNSUPPORTED"/>
+  <int value="710" label="KEY_GENERATION_FAILED"/>
+  <int value="711" label="ORIGIN_BOUND_CERT_GENERATION_FAILED"/>
+  <int value="712" label="PRIVATE_KEY_EXPORT_FAILED"/>
+  <int value="713" label="SELF_SIGNED_CERT_GENERATION_FAILED"/>
+  <int value="714" label="CERT_DATABASE_CHANGED"/>
+  <int value="715" label="CHANNEL_ID_IMPORT_FAILED"/>
+  <int value="800" label="DNS_MALFORMED_RESPONSE"/>
+  <int value="801" label="DNS_SERVER_REQUIRES_TCP"/>
+  <int value="802" label="DNS_SERVER_FAILED"/>
+  <int value="803" label="DNS_TIMED_OUT"/>
+  <int value="804" label="DNS_CACHE_MISS"/>
+  <int value="805" label="DNS_SEARCH_EMPTY"/>
+  <int value="806" label="DNS_SORT_ERROR"/>
+</enum>
+
+<enum name="NetErrorNavigationCorrectionTypes" type="int">
+  <int value="0" label="Google cached page"/>
+  <int value="1" label="URL correction"/>
+  <int value="2" label="Alt URL - domain"/>
+  <int value="3" label="Alt URL - host"/>
+  <int value="4" label="Alt URL - sitemap"/>
+  <int value="5" label="Alt URL - path parent folder"/>
+  <int value="6" label="Alt URL - content overlap"/>
+  <int value="7" label="Emphasized URL correction"/>
+  <int value="100" label="Web search query"/>
+</enum>
+
+<enum name="NetErrorPageEvents" type="int">
+  <int value="0" label="Error Page Shown"/>
+  <int value="1" label="Reload Button Shown"/>
+  <int value="2" label="Reload Button Clicked"/>
+  <int value="3" label="Reload Button Click Load Error"/>
+  <int value="4" label="Show Saved Copy Button Shown"/>
+  <int value="5" label="Show Saved Copy Button Clicked"/>
+  <int value="6" label="Show Saved Copy Button Click Load Error"/>
+  <int value="7" label="More Button Clicked"/>
+  <int value="8" label="Browser Initiated Reload"/>
+  <int value="9" label="Both Buttons Shown"/>
+  <int value="10" label="Both Buttons Shown, Reload Clicked"/>
+  <int value="11" label="Both Buttons Shown, Show Saved Copy Clicked"/>
+  <int value="12" label="Easter egg activated"/>
+  <int value="13" label="Show Cached Copy button shown"/>
+  <int value="14" label="Show Cached Copy button clicked"/>
+  <int value="15" label="Show Cached Page button shown"/>
+  <int value="16" label="Show Cached Page button clicked"/>
+  <int value="17" label="Diagnose button clicked"/>
+  <int value="18" label="Show Offline Pages Button Shown"/>
+  <int value="19" label="Show Offline Pages Button Clicked"/>
+  <int value="20" label="Show Offline Copy Button Shown"/>
+  <int value="21" label="Show Offline Copy Button Clicked"/>
+  <int value="22" label="Download Button Shown"/>
+  <int value="23" label="Download Button Clicked"/>
+</enum>
+
+<enum name="NetFilterType" type="int">
+  <summary>
+    Specific content decoding filter.  See   net::Filter::FilterType for more
+    details
+  </summary>
+  <int value="0" label="Brotli"/>
+  <int value="1" label="Deflate"/>
+  <int value="2" label="GZIP"/>
+  <int value="3" label="GzipHelpingSdch"/>
+  <int value="4" label="SDCH"/>
+  <int value="5" label="SDCHPossible"/>
+  <int value="6" label="Unsupported"/>
+</enum>
+
+<enum name="NetFilterType2" type="int">
+  <summary>
+    Specific content decoding filter.  See net::SourceStream::SourceType for
+    more details
+  </summary>
+  <int value="0" label="Brotli"/>
+  <int value="1" label="Deflate"/>
+  <int value="2" label="GZIP"/>
+  <int value="3" label="GZIPFallback"/>
+  <int value="4" label="SDCH"/>
+  <int value="5" label="SDCHPossible"/>
+  <int value="6" label="Invalid"/>
+  <int value="7" label="None"/>
+</enum>
+
+<enum name="NetInternalsUiFeature" type="int">
+  <int value="0" label="NetInternals"/>
+  <int value="1" label="Connection tester"/>
+</enum>
+
+<enum name="NetPreconnectUtilization" type="int">
+  <int value="0" label="non-speculative, never connected"/>
+  <int value="1" label="non-speculative, never used"/>
+  <int value="2" label="non-speculative and used"/>
+  <int value="3" label="omnibox never connected"/>
+  <int value="4" label="omnibox never used"/>
+  <int value="5" label="omnibox and used"/>
+  <int value="6" label="subresource never connected"/>
+  <int value="7" label="subresource never used"/>
+  <int value="8" label="subresource and used"/>
+</enum>
+
+<enum name="Network3GGobiError" type="int">
+  <summary>
+    These error indexes are produced by QCErrorToMetricIndex() in
+    gobi-cromo-plugin.
+  </summary>
+  <int value="0" label="NONE"/>
+  <int value="1" label="QMI_HARDWARE_RESTRICTED"/>
+</enum>
+
+<enum name="NetworkAuthModeType" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="EAP-AKA"/>
+  <int value="2" label="EAP-FAST"/>
+  <int value="3" label="EAP-GPSK"/>
+  <int value="4" label="EAP-GTC"/>
+  <int value="5" label="EAP-IKEV2"/>
+  <int value="6" label="EAP-LEAP"/>
+  <int value="7" label="EAP-MD5"/>
+  <int value="8" label="EAP-MSCHAPV2"/>
+  <int value="9" label="EAP-OTP"/>
+  <int value="10" label="EAP-PAX"/>
+  <int value="11" label="EAP-PEAP"/>
+  <int value="12" label="EAP-PSK"/>
+  <int value="13" label="EAP-SAKE"/>
+  <int value="14" label="EAP-SIM"/>
+  <int value="15" label="EAP-TLS"/>
+  <int value="16" label="EAP-TNC"/>
+  <int value="17" label="EAP-TTLS"/>
+</enum>
+
+<enum name="NetworkCellular3GPPRegistrationDelayedDrop" type="int">
+  <int value="0" label="Delayed drop posted">
+    A signal loss in the cellular service was detected and a delayed connection
+    drop request was posted. This request causes the cellular connection to be
+    dropped if it is not cancelled within the delay provided.
+  </int>
+  <int value="1" label="Delayed drop canceled">
+    Signal strength returned to normal soon after a delayed drop request was
+    made, causing the request to be canceled. This indicates a flaky network.
+  </int>
+</enum>
+
+<enum name="NetworkCellularOutOfCreditsReason" type="int">
+  <int value="0" label="Connect-Disconnect Loop"/>
+  <int value="1" label="TX-Queue Congestion"/>
+  <int value="2" label="Elongated Time Wait"/>
+</enum>
+
+<enum name="NetworkCellularTechnology" type="int">
+  <int value="0" label="1XRTT"/>
+  <int value="1" label="EDGE"/>
+  <int value="2" label="EVDO"/>
+  <int value="3" label="GPRS"/>
+  <int value="4" label="GSM"/>
+  <int value="5" label="HSPA"/>
+  <int value="6" label="HSPA_PLUS"/>
+  <int value="7" label="LTE"/>
+  <int value="8" label="UMTS"/>
+  <int value="9" label="Unknown"/>
+</enum>
+
+<enum name="NetworkCellularUsageRequestStatus" type="int">
+  <summary>
+    Status code that we received in response to a cellular usage API request.
+  </summary>
+  <int value="0" label="Failed">
+    This value is distinct from the others in that it indicates that we were
+    unable to issue a request or that we received no reply. The other values
+    represent the status code contained in a reply.
+  </int>
+  <int value="1" label="Ok"/>
+  <int value="2" label="Error"/>
+  <int value="3" label="Malformed Request"/>
+  <int value="4" label="Internal Error"/>
+  <int value="5" label="Service Unavailable"/>
+  <int value="6" label="Request Refused"/>
+  <int value="7" label="Unknown Device"/>
+</enum>
+
+<enum name="NetworkChannelType" type="int">
+  <int value="0" label="UNDEF"/>
+  <int value="1" label="2412"/>
+  <int value="2" label="2417"/>
+  <int value="3" label="2422"/>
+  <int value="4" label="2427"/>
+  <int value="5" label="2432"/>
+  <int value="6" label="2437"/>
+  <int value="7" label="2442"/>
+  <int value="8" label="2447"/>
+  <int value="9" label="2452"/>
+  <int value="10" label="2457"/>
+  <int value="11" label="2462"/>
+  <int value="12" label="2467"/>
+  <int value="13" label="2472"/>
+  <int value="14" label="2484"/>
+  <int value="15" label="5180"/>
+  <int value="16" label="5200"/>
+  <int value="17" label="5220"/>
+  <int value="18" label="5240"/>
+  <int value="19" label="5260"/>
+  <int value="20" label="5280"/>
+  <int value="21" label="5300"/>
+  <int value="22" label="5320"/>
+  <int value="23" label="5500"/>
+  <int value="24" label="5520"/>
+  <int value="25" label="5540"/>
+  <int value="26" label="5560"/>
+  <int value="27" label="5580"/>
+  <int value="28" label="5600"/>
+  <int value="29" label="5620"/>
+  <int value="30" label="5640"/>
+  <int value="31" label="5660"/>
+  <int value="32" label="5680"/>
+  <int value="33" label="5700"/>
+  <int value="34" label="5745"/>
+  <int value="35" label="5765"/>
+  <int value="36" label="5785"/>
+  <int value="37" label="5805"/>
+  <int value="38" label="5825"/>
+  <int value="39" label="5170"/>
+  <int value="40" label="5190"/>
+  <int value="41" label="5210"/>
+  <int value="42" label="5230"/>
+</enum>
+
+<enum name="NetworkClockStates" type="int">
+  <int value="0"
+      label="NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC: accuracy of system clock is
+             unknown because there is no information available from the
+             network about what time it is (OBSOLETE)"/>
+  <int value="1"
+      label="NETWORK_CLOCK_STATE_UNKNOWN_SYNC_LOST: system clock is unknown
+             because the system clock has fallen out of sync with the network
+             clock since the last time that network time was retrieved"/>
+  <int value="2"
+      label="NETWORK_CLOCK_STATE_OK: system clock is roughly accurate
+             relative to network time"/>
+  <int value="3"
+      label="NETWORK_CLOCK_STATE_CLOCK_IN_PAST: system clock is in the past
+             relative to network time"/>
+  <int value="4"
+      label="NETWORK_CLOCK_STATE_CLOCK_IN_FUTURE: system clock is in the
+             future relative to network time"/>
+  <int value="5"
+      label="NETWORK_CLOCK_STATE_UNKNOWN_NO_SYNC_ATTEMPT: accuracy of system
+             clock is unknown because there has not yet been any attempt to
+             query the network clock"/>
+  <int value="6"
+      label="NETWORK_CLOCK_STATE_UNKNOWN_NO_SUCCESSFUL_SYNC: accuracy of
+             system clock is unknown because one or more attempts to sync
+             with the network clock have failed"/>
+  <int value="7"
+      label="NETWORK_CLOCK_STATE_UNKNOWN_FIRST_SYNC_PENDING: accuracy of
+             system clock is unknown because the first attempt to sync with
+             the network clock is pending"/>
+  <int value="8"
+      label="NETWORK_CLOCK_STATE_UNKNOWN_SUBSEQUENT_SYNC_PENDING: accuracy of
+             system clock is unknown because one or more attempts to sync
+             with the network clock have failed, and a subsequent attempt is
+             pending"/>
+</enum>
+
+<enum name="NetworkConnectionIPType" type="int">
+  <int value="0" label="IPv4"/>
+  <int value="1" label="IPv6"/>
+</enum>
+
+<enum name="NetworkConnectionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Ethernet"/>
+  <int value="2" label="WiFi"/>
+  <int value="3" label="2g"/>
+  <int value="4" label="3g"/>
+  <int value="5" label="4g"/>
+  <int value="6" label="None"/>
+  <int value="7" label="Bluetooth"/>
+</enum>
+
+<enum name="NetworkCorruptedProfile" type="int">
+  <int value="0" label="Corrupted Profile"/>
+</enum>
+
+<enum name="NetworkDhcpClientStatus" type="int">
+  <int value="0" label="Arp Gateway">
+    The DHCP client will attempt to identify the default gateway using a unicast
+    ARP to the gateway's MAC address.  This may help speed up the re-connection
+    process.
+  </int>
+  <int value="1" label="Arp Self">
+    The DHCP client will attempt to ARP for the IP address that it was supplied.
+    This indicates that the client is unsure whether the address it was assigned
+    is valid.
+  </int>
+  <int value="2" label="Bound">
+    The DHCP client has successfully acquired an IP address.
+  </int>
+  <int value="3" label="Discover">
+    The DHCP client has inititated a DHCP DISCOVER, a broadcast request for any
+    server to provide it with an address.
+  </int>
+  <int value="4" label="Additional Offer">
+    The DHCP client has received more than one offer in response to its DHCP
+    DISCOVER request.
+  </int>
+  <int value="5" label="Failed Offer">
+    The DHCP client has received an offer in response to its DHCP DISCOVER which
+    is the same as an address it previously failed to validate via an &quot;Arp
+    Self&quot; test.
+  </int>
+  <int value="6" label="Invalid Offer">
+    The DHCP client has received an offer in response to its DHCP DISCOVER which
+    is either an all-zeros or all-ones IP address, and therefore invalid.
+  </int>
+  <int value="7" label="Ignore Non-Offer">
+    The DHCP client has received a response to its DHCP DISCOVER which is not
+    actually a DHCP OFFER.
+  </int>
+  <int value="8" label="Inform">
+    The DHCP client has issued a DHCP INFORM message for an IP address it has
+    self-assigned.
+  </int>
+  <int value="9" label="Init">
+    The DHCP client is intializing its internal state.
+  </int>
+  <int value="10" label="Nak Defer">
+    The DHCP client has received a DHCP NAK and will defer processing this
+    response for a receive interval.
+  </int>
+  <int value="11" label="Rebind">
+    The DHCP client is performing the second level &quot;rebind&quot; lease
+    renewal stage, and has presumably failed the first level &quot;renew&quot;
+    stage.
+  </int>
+  <int value="12" label="Reboot">
+    The DHCP client is attempting to re-acquire a lease on a network where it
+    had previously been connected at some time in the past.
+  </int>
+  <int value="13" label="Release">
+    The DHCP client is releasing its current lease to its assigned IP address.
+  </int>
+  <int value="14" label="Renew">
+    The DHCP client is performing a first level renewal of its current lease.
+  </int>
+  <int value="15" label="Request">
+    The DHCP client is performing a DHCP REQUEST for a lease it has been
+    offered.
+  </int>
+</enum>
+
+<enum name="NetworkDHCPOptionFailure" type="int">
+  <int value="0" label="DHCP Option Failure"/>
+</enum>
+
+<enum name="NetworkDisconnectType" type="int">
+  <int value="0" label="System Disconnect"/>
+  <int value="1" label="User Disconnect"/>
+</enum>
+
+<enum name="NetworkErrorType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Portal"/>
+  <int value="2" label="Offline"/>
+  <int value="3" label="Proxy"/>
+  <int value="4" label="AuthExtTimeout"/>
+  <int value="5" label="None"/>
+</enum>
+
+<enum name="NetworkLocationRequestEvent" type="int">
+  <int value="0" label="REQUEST_START"/>
+  <int value="1" label="REQUEST_CANCEL"/>
+  <int value="2" label="RESPONSE_SUCCESS"/>
+  <int value="3" label="RESPONSE_NOT_OK"/>
+  <int value="4" label="RESPONSE_EMPTY"/>
+  <int value="5" label="RESPONSE_MALFORMED"/>
+  <int value="6" label="RESPONSE_INVALID_FIX"/>
+</enum>
+
+<enum name="NetworkPhyModeType" type="int">
+  <int value="0" label="UNDEF"/>
+  <int value="1" label="802.11a"/>
+  <int value="2" label="802.11b"/>
+  <int value="3" label="802.11g"/>
+  <int value="4" label="802.11n"/>
+  <int value="5" label="PSB 10MHz-wide"/>
+  <int value="6" label="PSB 5MHz-wide"/>
+  <int value="7" label="802.11ac"/>
+</enum>
+
+<enum name="NetworkPortalResult" type="int">
+  <summary>
+    The portal result types come from PortalResult in shill/metrics.h
+  </summary>
+  <int value="0" label="Success"/>
+  <int value="1" label="DNS Failure"/>
+  <int value="2" label="DNS Timeout"/>
+  <int value="3" label="Connection Failure"/>
+  <int value="4" label="Connection Timeout"/>
+  <int value="5" label="HTTP Failure"/>
+  <int value="6" label="HTTP Timeout"/>
+  <int value="7" label="Content Failure"/>
+  <int value="8" label="Content Timeout"/>
+  <int value="9" label="Unknown"/>
+</enum>
+
+<enum name="NetworkProblemType" type="int">
+  <int value="0" label="Congested TCP Queue"/>
+  <int value="1" label="DNS Failure"/>
+</enum>
+
+<enum name="NetworkQueueStopReason" type="int">
+  <summary>The stop reasons come from shill/mac80211_monitor.h.</summary>
+  <int value="0" label="Device Driver"/>
+  <int value="1" label="Power Save"/>
+  <int value="2" label="Channel Switch Announcement"/>
+  <int value="3" label="Aggregation"/>
+  <int value="4" label="Suspend"/>
+  <int value="5" label="Buffer Add"/>
+  <int value="6" label="Channel Type Change"/>
+</enum>
+
+<enum name="NetworkSecurityType" type="int">
+  <summary>
+    The security types come from the connman_service_security enum in
+    flimflam/include/service.h
+  </summary>
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="NONE"/>
+  <int value="2" label="WEP"/>
+  <int value="3" label="WPA"/>
+  <int value="4" label="802.11i/RSN"/>
+  <int value="5" label="802.1x"/>
+  <int value="6" label="PSK"/>
+</enum>
+
+<enum name="NetworkServiceError" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="AAA_FAILED"/>
+  <int value="2" label="ACTIVATION_FAILED"/>
+  <int value="3" label="BAD_PASSPHRASE"/>
+  <int value="4" label="BAD_WEPKEY"/>
+  <int value="5" label="CONNECT_FAILED"/>
+  <int value="6" label="DHCP_FAILED"/>
+  <int value="7" label="DNS_LOOKUP_FAILED"/>
+  <int value="8" label="EAP_AUTHENTICATION_FAILED"/>
+  <int value="9" label="EAP_LOCAL_TLS_FAILED"/>
+  <int value="10" label="EAP_REMOTE_TLS_FAILED"/>
+  <int value="11" label="HTTP_GET_FAILED"/>
+  <int value="12" label="IPSEC_CERT_AUTH_FAILED"/>
+  <int value="13" label="IPSEC_PSK_AUTH_FAILED"/>
+  <int value="14" label="INTERNAL"/>
+  <int value="15" label="NEED_EVDO"/>
+  <int value="16" label="NEED_HOME_NETWORK"/>
+  <int value="17" label="OTASP_FAILED"/>
+  <int value="18" label="OUT_OF_RANGE"/>
+  <int value="19" label="PPP_AUTH_FAILED"/>
+  <int value="20" label="PIN_MISSING"/>
+</enum>
+
+<enum name="NetworkTechnology" type="int">
+  <int value="0" label="Cellular"/>
+  <int value="1" label="Ethernet"/>
+  <int value="2" label="Ethernet EAP"/>
+  <int value="3" label="WiFi"/>
+  <int value="4" label="WiMax"/>
+  <int value="5" label="VPN"/>
+  <int value="6" label="Unknown"/>
+</enum>
+
+<enum name="NewTabPageActionAndroid" type="int">
+  <int value="0" label="Searched using the omnibox"/>
+  <int value="1" label="Navigated to Google search homepage using the omnibox"/>
+  <int value="2" label="Navigated to any other page using the omnibox"/>
+  <int value="3" label="Opened a most visited page"/>
+  <int value="4" label="Opened a recently closed tab"/>
+  <int value="5" label="Opened a bookmark"/>
+  <int value="6" label="Opened a foreign session (from other devices section)"/>
+  <int value="7" label="Navigated to the webpage for a snippet"/>
+  <int value="8" label="DEPRECATED: Clicked on an interest item"/>
+  <int value="9" label="Clicked on Learn More"/>
+  <int value="10"
+      label="Clicked on the Refresh button in the all dismissed state"/>
+</enum>
+
+<enum name="NewTabPageBookmarkActionAndroid" type="int">
+  <summary>
+    These values are defined in PartnerBookmarkAction enum in
+    chrome/browser/ui/webui/ntp/android/bookmarks_handler.cc.
+  </summary>
+  <int value="0" label="Deleted partner bookmark"/>
+  <int value="1" label="Deleted root partner folder"/>
+  <int value="2" label="Renamed partner bookmark"/>
+  <int value="3" label="Renamed root partner folder"/>
+</enum>
+
+<enum name="NewTabPageLogoClick" type="int">
+  <int value="0" label="Static logo clicked"/>
+  <int value="1" label="CTA image clicked"/>
+  <int value="2" label="Animated logo clicked"/>
+</enum>
+
+<enum name="NewTabPageLogoDownloadOutcome" type="int">
+  <summary>
+    These values are defined in LogoDownloadOutcome enum in
+    components/search_provider_logos/logo_tracker.h.
+  </summary>
+  <int value="0" label="New logo success"/>
+  <int value="1" label="No logo today"/>
+  <int value="2" label="Download failed"/>
+  <int value="3" label="Parsing failed"/>
+  <int value="4" label="Decoding failed"/>
+  <int value="5" label="Logo revalidated"/>
+</enum>
+
+<enum name="NewTabPageLogoShown" type="int">
+  <int value="0" label="Static logo shown"/>
+  <int value="1" label="CTA image shown"/>
+</enum>
+
+<enum name="NewTabPageMobilePromo" type="int">
+  <summary>
+    These values are defined inside the PromoImpressionBuckets enum in
+    chrome/browser/ui/webui/ntp/android/promo_handler.cc
+  </summary>
+  <int value="0" label="Shown from most visited page"/>
+  <int value="1" label="Shown from open tabs page"/>
+  <int value="2" label="Shown from sync promo page"/>
+  <int value="3" label="User pressed 'Try Chrome'"/>
+  <int value="4" label="User dismissed the promo"/>
+</enum>
+
+<enum name="NewTabType" type="int">
+  <int value="0" label="New tab button"/>
+  <int value="1" label="Regular menu option"/>
+  <int value="2" label="Tab strip menu option"/>
+</enum>
+
+<enum name="NewTabURLState" type="int">
+  <int value="0" label="Valid URL was used"/>
+  <int value="1" label="Corrupt state"/>
+  <int value="2" label="Incognito window"/>
+  <int value="3" label="No URL for default provider"/>
+  <int value="4" label="Insecure URL"/>
+  <int value="5" label="Suggest is disabled"/>
+  <int value="6" label="URL blocked for supervised user"/>
+</enum>
+
+<enum name="NewUserPriorityPrefsSyncResult" type="int">
+  <int value="0" label="Succeeded"/>
+  <int value="1" label="Timed out"/>
+</enum>
+
+<enum name="NoStatePrefetchResponseType" type="int">
+  <int value="0" label="Sub-resource, cacheable"/>
+  <int value="1" label="Sub-resource, no-store"/>
+  <int value="2" label="Sub-resource redirect, cacheable"/>
+  <int value="3" label="Sub-resource redirect, no-store"/>
+  <int value="4" label="Main resource, cacheable"/>
+  <int value="5" label="Main resource, no-store"/>
+  <int value="6" label="Main resource redirect, cacheable"/>
+  <int value="7" label="Main resource redirect, no-store"/>
+</enum>
+
+<enum name="NotificationActionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Notification added"/>
+  <int value="2" label="Notification updated"/>
+  <int value="3" label="Notification clicked"/>
+  <int value="4" label="Notification button clicked"/>
+  <int value="5" label="Notification displayed"/>
+  <int value="6" label="Notification closed by user"/>
+  <int value="7" label="Notification closed by system"/>
+</enum>
+
+<enum name="NotificationAppStatus" type="int">
+  <int value="0" label="Undeterminable (old Android version)"/>
+  <int value="1" label="Undeterminable (exception thrown)"/>
+  <int value="2" label="Enabled"/>
+  <int value="3" label="Disabled"/>
+</enum>
+
+<enum name="NotificationDatabaseStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Not found error"/>
+  <int value="2" label="Corruption error"/>
+  <int value="3" label="Failure error"/>
+  <int value="4" label="I/O error"/>
+  <int value="5" label="Not supported error"/>
+  <int value="6" label="Invalid Argument error"/>
+</enum>
+
+<enum name="NotifierType" type="int">
+  <int value="0" label="Application"/>
+  <int value="1" label="Arc++"/>
+  <int value="2" label="Web Page"/>
+  <int value="3" label="System Component"/>
+</enum>
+
+<enum name="NotifyResult" type="int">
+  <int value="0" label="PROCESS_NONE"/>
+  <int value="1" label="PROCESS_NOTIFIED"/>
+  <int value="2" label="PROFILE_IN_USE"/>
+  <int value="3" label="LOCK_ERROR"/>
+</enum>
+
+<enum name="NotStreamingReason" type="int">
+  <int value="0" label="Already loaded"/>
+  <int value="1" label="Not HTTP"/>
+  <int value="2" label="Reload"/>
+  <int value="3" label="Context not valid"/>
+  <int value="4" label="Encoding not supported"/>
+  <int value="5" label="Thread busy"/>
+  <int value="6" label="V8 cannot stream"/>
+  <int value="7" label="Script too small"/>
+</enum>
+
+<enum name="NPAPIPluginStatus" type="int">
+  <int value="0" label="Unsupported">
+    NPAPI is not supported on this platform
+  </int>
+  <int value="1" label="Disabled">NPAPI is disabled</int>
+  <int value="2" label="Enabled">NPAPI is enabled</int>
+</enum>
+
+<enum name="NQEEffectiveConnectionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Offline"/>
+  <int value="2" label="Slow 2G"/>
+  <int value="3" label="2G"/>
+  <int value="4" label="3G"/>
+  <int value="5" label="4G"/>
+  <int value="6" label="Broadband"/>
+</enum>
+
+<enum name="NQEExternalEstimateProviderStatus" type="int">
+  <int value="0" label="External estimate provider was not available"/>
+  <int value="1" label="External estimate provider was available"/>
+  <int value="2" label="External estimate provider was queried"/>
+  <int value="3" label="Query to external estimate provider was successful"/>
+  <int value="4" label="Callback received from external estimate provider"/>
+  <int value="5" label="RTT was available from the external estimate provider"/>
+  <int value="6"
+      label="Downlink bandwidth was available from the external estimate
+             provider"/>
+</enum>
+
+<enum name="NtpFollowAction" type="int">
+  <int value="0" label="PAGE_TRANSITION_LINK"/>
+  <int value="1" label="PAGE_TRANSITION_TYPED"/>
+  <int value="2" label="PAGE_TRANSITION_AUTO_BOOKMARK"/>
+  <int value="3" label="PAGE_TRANSITION_AUTO_SUBFRAME"/>
+  <int value="4" label="PAGE_TRANSITION_MANUAL_SUBFRAME"/>
+  <int value="5" label="PAGE_TRANSITION_GENERATED"/>
+  <int value="6" label="PAGE_TRANSITION_START_PAGE"/>
+  <int value="7" label="PAGE_TRANSITION_FORM_SUBMIT"/>
+  <int value="8" label="PAGE_TRANSITION_RELOAD"/>
+  <int value="9" label="PAGE_TRANSITION_KEYWORD"/>
+  <int value="10" label="PAGE_TRANSITION_KEYWORD_GENERATED"/>
+  <int value="11" label="Clicked on a tile."/>
+  <int value="12" label="Clicked to other NTP pane."/>
+  <int value="13" label="Other action"/>
+</enum>
+
+<enum name="NTPImpressionType" type="int">
+  <int value="0" label="regular NTP impression"/>
+  <int value="1" label="potential NTP impression - no open tab"/>
+</enum>
+
+<enum name="NTPLayout" type="int">
+  <int value="0" label="Doesn't fit, not expanding to cut off most likely"/>
+  <int value="1" label="Doesn't fit, expanding to cut off most likely"/>
+  <int value="2" label="Fits, field trial is not enabled"/>
+  <int value="3" label="Fits, field trial is enabled but does not fit"/>
+  <int value="4" label="Fits with field trial"/>
+</enum>
+
+<enum name="NtpMostVisitedScheme" type="int">
+  <obsolete>
+    Deprecated 2016-05.
+  </obsolete>
+  <int value="0" label="Other (not web-safe)"/>
+  <int value="1" label="Other (web-safe)"/>
+  <int value="2" label="http://"/>
+  <int value="3" label="https://"/>
+  <int value="4" label="ftp://"/>
+  <int value="5" label="file://"/>
+  <int value="6" label="chrome://"/>
+  <int value="7" label="chrome-extension://"/>
+  <int value="8" label="javascript://"/>
+</enum>
+
+<enum name="NtpPaneType" type="int">
+  <int value="1" label="MostVisited"/>
+  <int value="2" label="Apps"/>
+  <int value="3" label="Bookmarks"/>
+  <int value="4" label="Suggestions"/>
+</enum>
+
+<enum name="NtpPromoAction" type="int">
+  <int value="0" label="NTP Promo viewed"/>
+  <int value="1" label="NTP Promo closed"/>
+  <int value="2" label="NTP Promo link clicked"/>
+</enum>
+
+<enum name="NtpRequestThrottlerStatus" type="int">
+  <int value="0" label="Interactive request - quota granted"/>
+  <int value="1" label="Background request - quota granted"/>
+  <int value="2" label="Background request - quota exceeded"/>
+  <int value="3" label="Interactive request - quota exceeded"/>
+</enum>
+
+<enum name="NtpSnippetsFetchResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Empty hosts"/>
+  <int value="2" label="URLRequestStatus error"/>
+  <int value="3" label="HTTP error"/>
+  <int value="4" label="JSON parse error"/>
+  <int value="5" label="Invalid snippet content"/>
+  <int value="6" label="Error in obtaining oauth access token"/>
+  <int value="7" label="Out of interactive quota"/>
+  <int value="8" label="Out of non-interactive quota"/>
+</enum>
+
+<enum name="NTPSnippetsState" type="int">
+  <summary>
+    The state of the RemoteSuggestionsProvider (formerly known as
+    NTPSnippetsService).
+  </summary>
+<!-- Note: 0 corresponds to NOT_INITED, which should never be recorded. -->
+
+  <int value="1" label="Ready"/>
+  <int value="2" label="Disabled"/>
+  <int value="3" label="Error"/>
+</enum>
+
+<enum name="NtpSuggestionsType" type="int">
+  <int value="0" label="Client suggestion"/>
+  <int value="1" label="Server suggestion"/>
+</enum>
+
+<enum name="NtpTileExperimentActions" type="int">
+  <summary>
+    The types of actions performed by the Most Visited Tile Placement
+    experiment, used to identify the cases where the experiment could not
+    operate as expected, and the reason for it.
+  </summary>
+  <int value="0" label="Removed URL that was already open in browser"/>
+  <int value="1" label="Didn't remove URL, too few suggestions in MV"/>
+  <int value="2" label="Too few URLs, didn't flip tiles 1 and 8"/>
+  <int value="3" label="Too few URLs, didn't flip tiles 1 and 4"/>
+</enum>
+
+<enum name="NTSTATUS" type="int">
+  <int value="-1073741818" label="0xC0000006 - STATUS_IN_PAGE_ERROR"/>
+  <int value="-1073741808" label="0xC0000010 - STATUS_INVALID_DEVICE_REQUEST"/>
+  <int value="-1073741803" label="0xC0000015 - STATUS_NONEXISTENT_SECTOR"/>
+  <int value="-1073741790" label="0xC0000022 - STATUS_ACCESS_DENIED"/>
+  <int value="-1073741697" label="0xC000007F - STATUS_DISK_FULL"/>
+  <int value="-1073741668" label="0xC000009C - STATUS_DEVICE_DATA_ERROR"/>
+  <int value="-1073741667" label="0xC000009D - STATUS_DEVICE_NOT_CONNECTED"/>
+  <int value="-1073741643" label="0xC00000B5 - STATUS_IO_TIMEOUT"/>
+  <int value="-1073741630" label="0xC00000C2 - STATUS_ADAPTER_HARDWARE_ERROR"/>
+  <int value="-1073741591" label="0xC00000E9 - STATUS_UNEXPECTED_IO_ERROR"/>
+  <int value="-1073740023" label="0xC0000709 - STATUS_HARDWARE_MEMORY_ERROR"/>
+  <int value="0" label="0x00000000 - STATUS_SUCCESS"/>
+</enum>
+
+<enum name="OAuth2LoginAccountRevokedMigrationState" type="int">
+  <int value="0" label="Account ID migration not started"/>
+  <int value="1" label="Account ID migration in progress"/>
+  <int value="2" label="Account ID migration done"/>
+</enum>
+
+<enum name="OAuth2LoginSeedState" type="int">
+  <int value="0" label="Account was seeded before FireRefreshTokenRevoked"/>
+  <int value="1" label="Account was seeded before FireRefreshTokenAvailable"/>
+  <int value="2" label="Account was not seeded before FireRefreshTokenRevoked"/>
+  <int value="3"
+      label="Account was not seeded before FireRefreshTokenAvailable"/>
+</enum>
+
+<enum name="OfflinePagesAggregatedRequestResult" type="int">
+  <int value="0" label="Show offline page on disconnected network"/>
+  <int value="1" label="Page not found on disconnected network"/>
+  <int value="2" label="Show offline page on flaky network"/>
+  <int value="3" label="Page not found on flaky network"/>
+  <int value="4" label="Show offline page on prohibitively slow network"/>
+  <int value="5" label="Page not found on prohibitively slow network"/>
+  <int value="6" label="Page not fresh on prohibitively slow network"/>
+  <int value="7" label="Show offline page on connected network"/>
+  <int value="8" label="Page not found on connected network"/>
+  <int value="9" label="Android Tab does not have persistent ID"/>
+  <int value="10" label="No web contents"/>
+  <int value="11" label="Unknown net error, showing error page"/>
+  <int value="12" label="Redirected on disconnected network"/>
+  <int value="13" label="Redirected on flaky network"/>
+  <int value="14" label="Redirected on prohibitively slow network"/>
+  <int value="15" label="Redirected on connected network"/>
+</enum>
+
+<enum name="OfflinePagesBackgroundImmediateStartStatus" type="int">
+  <int value="0" label="Started"/>
+  <int value="1" label="Busy"/>
+  <int value="2" label="Not accepted by loader"/>
+  <int value="3" label="No connection"/>
+  <int value="4"
+      label="Weak connection (according to network quality estimator)"/>
+  <int value="5" label="Not started on svelte device"/>
+</enum>
+
+<enum name="OfflinePagesBackgroundOfflinerRequestStatus" type="int">
+<!-- Generated from components/offline_pages/background/offliner.h -->
+
+  <int value="0" label="Unknown (not expected to be recorded)"/>
+  <int value="1" label="Loaded (not expected to be recorded)"/>
+  <int value="2" label="Saved"/>
+  <int value="3" label="RequestCoordinator canceled"/>
+  <int value="4" label="Prerendering canceled"/>
+  <int value="5" label="Prerendering failed (retryable)"/>
+  <int value="6" label="Save failed"/>
+  <int value="7" label="Foreground transition canceled"/>
+  <int value="8" label="RequestCoordinator timed-out"/>
+  <int value="9" label="Prerendering not started"/>
+  <int value="10" label="Prerendering failed (non-retryable)"/>
+</enum>
+
+<enum name="OfflinePagesCctApiPrerenderAllowedStatus" type="int">
+  <int value="0" label="PrerenderAllowed"/>
+  <int value="1" label="ThirdPartyCookiesDisabled"/>
+  <int value="2" label="NetworkPredictionDisabled"/>
+</enum>
+
+<enum name="OfflinePagesClearAllStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Store reset failed"/>
+  <int value="2" label="Store reload failed"/>
+</enum>
+
+<enum name="OfflinePagesClearStorageResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Unnecessary to clean"/>
+  <int value="2" label="Page expiration failed"/>
+  <int value="3" label="Page record deletion failed"/>
+  <int value="4" label="Both expiration and deletion failed"/>
+</enum>
+
+<enum name="OfflinePagesDeletePageResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Cancelled"/>
+  <int value="2" label="Store failure"/>
+  <int value="3" label="Device failure"/>
+  <int value="4" label="Not found"/>
+</enum>
+
+<enum name="OfflinePagesLoadStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Store init failed"/>
+  <int value="2" label="Store load failed"/>
+  <int value="3" label="Data parsing failed"/>
+</enum>
+
+<enum name="OfflinePagesRedirectResult" type="int">
+  <obsolete>
+    Deprecated 2016-08.
+  </obsolete>
+  <int value="0" label="Redirected on disconnected network"/>
+  <int value="1" label="Page not found on disconnected network"/>
+  <int value="2" label="Redirected on flaky network"/>
+  <int value="3" label="Page not found on flaky network"/>
+  <int value="4" label="Ignored flaky network forward/back"/>
+  <int value="5" label="Redirected on connected network"/>
+  <int value="6" label="Android Tab does not have persistent ID"/>
+  <int value="7" label="Unknown net error, showing error page"/>
+  <int value="8" label="Redirect loop offline"/>
+  <int value="9" label="Redirect loop online"/>
+</enum>
+
+<enum name="OfflinePagesSavePageResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Cancelled"/>
+  <int value="2" label="Device full"/>
+  <int value="3" label="Content unavailable"/>
+  <int value="4" label="Archive creation failed"/>
+  <int value="5" label="Store failure"/>
+  <int value="6" label="Already exists"/>
+  <int value="7" label="Skipped"/>
+  <int value="8" label="Security certificate error"/>
+</enum>
+
+<enum name="OfflinePagesSharedPageWasOffline" type="int">
+  <int value="0" label="Online"/>
+  <int value="1" label="Offline"/>
+</enum>
+
+<enum name="OfflineStatus" type="int">
+  <obsolete>
+    Deprecated 4/2015.
+  </obsolete>
+  <int value="0" label="Fresh data load from Cache"/>
+  <int value="1" label="Successful network request (validation or fetch)."/>
+  <int value="2" label="Failed network request (non-offline error)."/>
+  <int value="3" label="Server offline and stale data available."/>
+  <int value="4" label="Server offline and stale data not available."/>
+</enum>
+
+<enum name="OffscreenCanvasCommitType" type="int">
+  <int value="0" label="GPUCanvasGPUCompositing"/>
+  <int value="1" label="GPUCanvasSoftwareCompositing"/>
+  <int value="2" label="SoftwareCanvasGPUCompositing"/>
+  <int value="3" label="SoftwareCanvasSoftwareCompositing"/>
+</enum>
+
+<enum name="OmniboxAggressiveHistoryURLProviderFieldTrialBeacon" type="int">
+  <int value="0" label="disabled by flags"/>
+  <int value="1" label="enabled by flags"/>
+  <int value="2" label="auto, not in trial"/>
+  <int value="3" label="auto, disabled in trial"/>
+  <int value="4" label="auto, enabled in trial"/>
+</enum>
+
+<enum name="OmniboxEnteredKeywordMode" type="int">
+  <int value="0" label="via tab"/>
+  <int value="1" label="via space at end"/>
+  <int value="2" label="via space in middle"/>
+</enum>
+
+<enum name="OmniboxInputType" type="int">
+  <int value="0" label="invalid"/>
+  <int value="1" label="unknown"/>
+  <int value="2" label="deprecated: requested url"/>
+  <int value="3" label="url"/>
+  <int value="4" label="query"/>
+  <int value="5" label="forced query"/>
+</enum>
+
+<enum name="OmniboxPageContext" type="int">
+  <int value="0" label="invalid spec; shouldn't happen"/>
+  <int value="1"
+      label="extension-replaced new tab page OR obsolete new tab page"/>
+  <int value="2" label="about:blank"/>
+  <int value="3" label="the user's home page"/>
+  <int value="4" label="other (typically an arbitrary URL)"/>
+  <int value="5" label="obsolete: instant new tab page"/>
+  <int value="6" label="search results page with search term replacement"/>
+  <int value="7" label="new tab page with omnibox as starting focus"/>
+  <int value="8" label="new tab page with fakebox as starting focus"/>
+  <int value="9" label="search results page without search term replacement"/>
+  <int value="10" label="home screen"/>
+  <int value="11" label="search app"/>
+  <int value="12" label="maps app"/>
+</enum>
+
+<enum name="OmniboxProviderAndResultType" type="int">
+  <int value="101" label="URL_WHAT_YOU_TYPED via HistoryURL provider"/>
+  <int value="102" label="HISTORY_URL via HistoryURL provider"/>
+  <int value="302" label="HISTORY_URL via HistoryQuick provider"/>
+  <int value="303" label="HISTORY_TITLE via HistoryQuick provider"/>
+  <int value="406" label="NAVSUGGEST via SearchProvider"/>
+  <int value="407" label="SEARCH_WHAT_YOU_TYPED via SearchProvider"/>
+  <int value="408" label="SEARCH_HISTORY via SearchProvider"/>
+  <int value="409" label="SEARCH_SUGGEST via SearchProvider"/>
+  <int value="410" label="SEARCH_OTHER_ENGINE via SearchProvider"/>
+  <int value="414" label="SEARCH_SUGGEST_ENTITY via SearchProvider"/>
+  <int value="415" label="SEARCH_SUGGEST_INFINITE via SearchProvider"/>
+  <int value="416" label="SEARCH_SUGGEST_PERSONALIZED via SearchProvider"/>
+  <int value="422" label="SEARCH_SUGGEST_ANSWER via SearchProvider"/>
+  <int value="423" label="CALCULATOR via SearchProvider"/>
+  <int value="505" label="HISTORY_KEYWORD via KeywordProvider"/>
+  <int value="510" label="SEARCH_OTHER_ENGINE via KeywordProvider"/>
+  <int value="606" label="NAVSUGGEST via BuiltinProvider"/>
+  <int value="700" label="UNKNOWN_RESULT_TYPE via Shortcuts provider"/>
+  <int value="701" label="URL_WHAT_YOU_TYPED via Shortcuts provider"/>
+  <int value="702" label="HISTORY_URL via Shortcuts provider"/>
+  <int value="703" label="HISTORY_TITLE via Shortcuts provider"/>
+  <int value="705" label="HISTORY_KEYWORD via Shortcuts provider"/>
+  <int value="708" label="SEARCH_HISTORY via Shortcuts provider"/>
+  <int value="710" label="SEARCH_OTHER_ENGINE via Shortcuts provider"/>
+  <int value="713" label="BOOKMARK_TITLE via Shortcuts provider"/>
+  <int value="716" label="SEARCH_SUGGEST_PERSONALIZED via Shortcuts provider"/>
+  <int value="717" label="SEARCH_SUGGEST_PROFILE via Shortcuts provider"/>
+  <int value="1013" label="BOOKMARK_TITLE via BookmarkProvider"/>
+  <int value="1106" label="NAVSUGGEST via ZeroSuggest"/>
+  <int value="1109" label="SEARCH_SUGGEST via ZeroSuggest"/>
+  <int value="1116" label="SEARCH_SUGGEST_PERSONALIZED via ZeroSuggest"/>
+  <int value="1202" label="HISTORY_URL from on-device service"/>
+  <int value="1212" label="CONTACT from on-device service"/>
+  <int value="1218" label="APP_RESULT from on-device service"/>
+  <int value="1219" label="APP from on-device service"/>
+  <int value="1220" label="LEGACY_ON_DEVICE from on-device service"/>
+  <int value="1424" label="CLIPBOARD from Clipboard provider"/>
+</enum>
+
+<enum name="OmniboxProviderType" type="int">
+  <int value="1" label="HistoryURL"/>
+  <int value="2" label="deprecated: HistoryContents"/>
+  <int value="3" label="HistoryQuick"/>
+  <int value="4" label="SearchProvider"/>
+  <int value="5" label="KeywordProvider"/>
+  <int value="6" label="BuiltinProvider"/>
+  <int value="7" label="ShortcutsProvider"/>
+  <int value="8" label="deprecated: ExtensionAppProvider"/>
+  <int value="9" label="deprecated: ContactsProvider"/>
+  <int value="10" label="BookmarkProvider"/>
+  <int value="11" label="ZeroSuggest"/>
+  <int value="12" label="on device (only used by Android GSA)"/>
+  <int value="13" label="on device chrome (chrome content provider)"/>
+  <int value="14" label="clipboard provider"/>
+</enum>
+
+<enum name="OmniboxSearchEngine" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Google"/>
+  <int value="2" label="Yahoo!"/>
+  <int value="3" label="Bing"/>
+  <int value="4" label="Ask"/>
+  <int value="5" label="Yahoo! Quebec"/>
+  <int value="6" label="OK.hu"/>
+  <int value="7" label="Bing French and Arabic"/>
+  <int value="11" label="Yamli"/>
+  <int value="12" label="Araby"/>
+  <int value="13" label="Maktoob"/>
+  <int value="14" label="Masrawy"/>
+  <int value="15" label="Yandex"/>
+  <int value="16" label="Rambler"/>
+  <int value="17" label="TUT.BY"/>
+  <int value="18" label="hispavista"/>
+  <int value="19" label="Jabse"/>
+  <int value="20" label="NUR.KZ"/>
+  <int value="21" label="Baidu"/>
+  <int value="22" label="search.ch"/>
+  <int value="23" label="goo"/>
+  <int value="24" label="Pogodak!"/>
+  <int value="25" label="Seznam"/>
+  <int value="26" label="Centrum"/>
+  <int value="27" label="Atlas"/>
+  <int value="28" label="Jubii"/>
+  <int value="29" label="Eniro"/>
+  <int value="30" label="NetSprint"/>
+  <int value="32" label="diri"/>
+  <int value="33" label="Custom"/>
+  <int value="35" label="AOL"/>
+  <int value="36" label="Conduit"/>
+  <int value="37" label="Rediff"/>
+  <int value="38" label="guruji"/>
+  <int value="40" label="GO.com"/>
+  <int value="41" label="Rednano"/>
+  <int value="44" label="NETI"/>
+  <int value="45" label="DELFI"/>
+  <int value="46" label="Fonecta 02.fi"/>
+  <int value="50" label="AVG"/>
+  <int value="51" label="search.ch"/>
+  <int value="54" label="in.gr"/>
+  <int value="55" label="Walla!"/>
+  <int value="59" label="leit.is"/>
+  <int value="62" label="Virgilio"/>
+  <int value="63" label="Libero"/>
+  <int value="67" label="Naver"/>
+  <int value="68" label="Daum"/>
+  <int value="69" label="Nate"/>
+  <int value="71" label="LATNE"/>
+  <int value="72" label="ABC S.k"/>
+  <int value="73" label="Kvasir"/>
+  <int value="75" label="Onet.pl"/>
+  <int value="76" label="Wirtualna Polska"/>
+  <int value="77" label="SAPO"/>
+  <int value="82" label="UOL Busca"/>
+  <int value="83" label="@MAIL.RU"/>
+  <int value="85" label="Zoznam"/>
+  <int value="87" label="Najdi.si"/>
+  <int value="88" label="360"/>
+  <int value="89" label="AltaVista"/>
+  <int value="90" label="Terra"/>
+  <int value="99" label="Spray"/>
+  <int value="100" label="Sanook!"/>
+  <int value="101" label="MYNET"/>
+  <int value="102" label="searchnu.com"/>
+  <int value="103" label="babylon.com"/>
+  <int value="104" label="delta-search.com"/>
+  <int value="105" label="iminent.com"/>
+  <int value="106" label="hao123.com"/>
+  <int value="107" label="sweetim.com"/>
+  <int value="108" label="snap.do"/>
+  <int value="109" label="snapdo.com"/>
+  <int value="110" label="softonic.com"/>
+  <int value="111" label="searchfunmoods.com"/>
+  <int value="112" label="incredibar.com"/>
+  <int value="113" label="sweetpacks.com"/>
+  <int value="114" label="imesh.net"/>
+</enum>
+
+<enum name="OmniboxSearchEngineType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="AOL"/>
+  <int value="2" label="Ask"/>
+  <int value="3" label="Atlas"/>
+  <int value="4" label="AVG"/>
+  <int value="5" label="Baidu"/>
+  <int value="6" label="Babylon"/>
+  <int value="7" label="Bing"/>
+  <int value="8" label="Conduit"/>
+  <int value="9" label="Daum"/>
+  <int value="10" label="DELFI"/>
+  <int value="11" label="Delta"/>
+  <int value="12" label="Funmoods"/>
+  <int value="13" label="goo"/>
+  <int value="14" label="Google"/>
+  <int value="15" label="iminent.com"/>
+  <int value="16" label="IMesh"/>
+  <int value="17" label="in.gr"/>
+  <int value="18" label="incredibar.com"/>
+  <int value="19" label="Kvasir"/>
+  <int value="20" label="Libero"/>
+  <int value="21" label="@MAIL.RU"/>
+  <int value="22" label="Najdi.si"/>
+  <int value="23" label="Nate"/>
+  <int value="24" label="Naver"/>
+  <int value="25" label="NETI"/>
+  <int value="26" label="Nigma"/>
+  <int value="27" label="OK.hu"/>
+  <int value="28" label="Onet.pl"/>
+  <int value="29" label="Rambler"/>
+  <int value="30" label="SAPO"/>
+  <int value="31" label="searchnu"/>
+  <int value="32" label="search-results.com"/>
+  <int value="33" label="Seznam"/>
+  <int value="34" label="snap.do"/>
+  <int value="35" label="softonic.com"/>
+  <int value="36" label="Sogou"/>
+  <int value="37" label="Soso"/>
+  <int value="38" label="sweetim.com/sweetpacks.com"/>
+  <int value="39" label="Terra"/>
+  <int value="40" label="TUT.BY"/>
+  <int value="41" label="Vinden.nl"/>
+  <int value="42" label="Virgilio"/>
+  <int value="43" label="Walla!"/>
+  <int value="44" label="Wirtualna Polska"/>
+  <int value="45" label="Yahoo!"/>
+  <int value="46" label="Yandex"/>
+  <int value="47" label="Zoznam"/>
+</enum>
+
+<enum name="OmniboxSuggestRequests" type="int">
+  <int value="1" label="requests sent"/>
+  <int value="2" label="requests invalidated"/>
+  <int value="3" label="(non-invalidated) replies received"/>
+</enum>
+
+<enum name="OmniboxSummarizedResultType" type="int">
+  <int value="0" label="URL"/>
+  <int value="1" label="search"/>
+  <int value="2" label="app/extension"/>
+  <int value="3" label="contact"/>
+  <int value="4" label="on-device"/>
+  <int value="5" label="unknown"/>
+</enum>
+
+<enum name="OmniboxUserTextCleared" type="int">
+  <int value="0" label="cleared by editing"/>
+  <int value="1" label="cleared with escape"/>
+</enum>
+
+<enum name="OmniboxZeroSuggestRequests" type="int">
+  <int value="1" label="requests sent"/>
+  <int value="2" label="requests invalidated"/>
+  <int value="3" label="(non-invalidated) replies received"/>
+</enum>
+
+<enum name="OpenFileSystemResult" type="int">
+  <int value="0" label="OK."/>
+  <int value="1" label="In incognito mode."/>
+  <int value="2" label="Invalid scheme."/>
+  <int value="3" label="Failed to create directory."/>
+</enum>
+
+<enum name="OpenLinkAsUser" type="int">
+  <int value="0" label="Active profile."/>
+  <int value="1" label="Inactive, multi-profile."/>
+  <int value="2" label="Inactive, single-profile."/>
+</enum>
+
+<enum name="OpenLinkAsUserProfilesState" type="int">
+  <int value="0" label="No other active profiles."/>
+  <int value="1" label="Active other profiles."/>
+</enum>
+
+<enum name="OriginTrialEnableResult" type="int">
+  <obsolete>
+    Obsolete as of M54 and replaced by OriginTrialTokenStatus.
+  </obsolete>
+  <int value="0" label="Success"/>
+  <int value="1" label="NotSupported"/>
+  <int value="2" label="Insecure"/>
+  <int value="3" label="NoTokens"/>
+  <int value="4" label="Expired"/>
+  <int value="5" label="WrongFeature"/>
+  <int value="6" label="WrongOrigin"/>
+  <int value="7" label="InvalidSignature"/>
+  <int value="8" label="Malformed"/>
+  <int value="9" label="WrongVersion"/>
+  <int value="10" label="FeatureDisabled"/>
+</enum>
+
+<enum name="OriginTrialMessageGeneratedResult" type="int">
+  <obsolete>
+    Obsolete as of Chrome 54.
+  </obsolete>
+  <int value="0" label="NotRequested"/>
+  <int value="1" label="Yes"/>
+  <int value="2" label="No"/>
+</enum>
+
+<enum name="OriginTrialTokenStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="NotSupported"/>
+  <int value="2" label="Insecure"/>
+  <int value="3" label="Expired"/>
+  <int value="4" label="WrongOrigin"/>
+  <int value="5" label="InvalidSignature"/>
+  <int value="6" label="Malformed"/>
+  <int value="7" label="WrongVersion"/>
+  <int value="8" label="FeatureDisabled"/>
+</enum>
+
+<enum name="OSAgnosticErrno" type="int">
+  <summary>Errno values with the same meanings on Mac/Win/Linux.</summary>
+  <int value="0" label="0">No error</int>
+  <int value="1" label="EPERM">Operation not permitted</int>
+  <int value="2" label="ENOENT">No such file or directory</int>
+  <int value="3" label="ESRCH">No such process</int>
+  <int value="4" label="EINTR">Interrupted function call</int>
+  <int value="5" label="EIO">Input/output error</int>
+  <int value="6" label="ENXIO">No such device or address</int>
+  <int value="7" label="E2BIG">Arg list too long</int>
+  <int value="8" label="ENOEXEC">Exec format error</int>
+  <int value="9" label="EBADF">Bad file descriptor</int>
+  <int value="10" label="ECHILD">No child processes</int>
+  <int value="11" label="EDEADLK">Resource deadlock avoided</int>
+  <int value="12" label="ENOMEM">Cannot allocate memory</int>
+  <int value="13" label="EACCES">Permission denied</int>
+  <int value="14" label="EFAULT">Bad address</int>
+  <int value="15" label="ENOTBLK">Not a block device</int>
+  <int value="16" label="EBUSY">Resource busy</int>
+  <int value="17" label="EEXIST">File exists</int>
+  <int value="18" label="EXDEV">Improper link</int>
+  <int value="19" label="ENODEV">Operation not supported by device</int>
+  <int value="20" label="ENOTDIR">Not a directory</int>
+  <int value="21" label="EISDIR">Is a directory</int>
+  <int value="22" label="EINVAL">Invalid argument</int>
+  <int value="23" label="ENFILE">Too many open files in system</int>
+  <int value="24" label="EMFILE">Too many open files</int>
+  <int value="25" label="ENOTTY">Inappropriate ioctl for device</int>
+  <int value="26" label="ETXTBSY">Text file busy</int>
+  <int value="27" label="EFBIG">File too large</int>
+  <int value="28" label="ENOSPC">Device out of space</int>
+  <int value="29" label="ESPIPE">Illegal seek</int>
+  <int value="30" label="EROFS">Read-only file system</int>
+  <int value="31" label="EMLINK">Too many links</int>
+  <int value="32" label="EPIPE">Broken pipe</int>
+  <int value="33" label="EDOM">Numerical argument out of domain</int>
+  <int value="34" label="ERANGE">Numerical result out of range</int>
+</enum>
+
+<enum name="OsSuite" type="int">
+  <int value="0" label="Windows Home Edition"/>
+  <int value="1" label="Windows Professional Edition (or better)"/>
+  <int value="2" label="Windows Server Edition"/>
+</enum>
+
+<enum name="OSXExceptionHandlerEvents" type="int">
+  <int value="0" label="EXCEPTION_ACCESSIBILITY">
+    Object does not support accessibility attributes
+  </int>
+  <int value="1" label="EXCEPTION_MENU_ITEM_BOUNDS_CHECK">
+    Forced crash due to menu item bounds checking failure
+  </int>
+  <int value="2" label="EXCEPTION_VIEW_NOT_IN_WINDOW">
+    Forced crash due to view not in a window requiring a window
+  </int>
+  <int value="3" label="EXCEPTION_NSURL_INIT_NIL">
+    Whitelisted exception for bug 85463.  Suspect ImageKit conversions for media
+    browser in open or save panel.
+  </int>
+  <int value="4" label="EXCEPTION_NSDATADETECTOR_NIL_STRING">
+    Whitelisted exception for bug 316759.  Suspect background address detection,
+    field unknown.
+  </int>
+  <int value="5" label="EXCEPTION_NSREGULAREXPRESSION_NIL_STRING">
+    Whitelisted exception for bug 466076.  Suspect background address detection,
+    field unknown.
+  </int>
+</enum>
+
+<enum name="OSXFullscreenParameters" type="int">
+  <int value="0" label="IMMERSIVE_SECONDARY_SHARED_SINGLE">INVALID</int>
+  <int value="1" label="APPKIT_SECONDARY_SHARED_SINGLE">INVALID</int>
+  <int value="2" label="IMMERSIVE_PRIMARY_SHARED_SINGLE">
+    Immersive Mechanism + Primary Screen + Shared Spaces + Single Screen
+  </int>
+  <int value="3" label="APPKIT_PRIMARY_SHARED_SINGLE">
+    AppKit Mechanism + Primary Screen + Shared Spaces + Single Screen
+  </int>
+  <int value="4" label="IMMERSIVE_SECONDARY_SEPARATE_SINGLE">INVALID</int>
+  <int value="5" label="APPKIT_SECONDARY_SEPARATE_SINGLE">INVALID</int>
+  <int value="6" label="IMMERSIVE_PRIMARY_SEPARATE_SINGLE">
+    Immersive Mechanism + Primary Screen + Separate Spaces + Single Screen
+  </int>
+  <int value="7" label="APPKIT_PRIMARY_SEPARATE_SINGLE">
+    AppKit Mechanism + Primary Screen + Separate Spaces + Single Screen
+  </int>
+  <int value="8" label="IMMERSIVE_SECONDARY_SHARED_MULTIPLE">
+    Immersive Mechanism + Secondary Screen + Shared Spaces + Multiple Screens
+  </int>
+  <int value="9" label="APPKIT_SECONDARY_SHARED_MULTIPLE">
+    AppKit Mechanism + Secondary Screen + Shared Spaces + Multiple Screens
+  </int>
+  <int value="10" label="IMMERSIVE_PRIMARY_SHARED_MULTIPLE">
+    Immersive Mechanism + Primary Screen + Shared Spaces + Multiple Screens
+  </int>
+  <int value="11" label="APPKIT_PRIMARY_SHARED_MULTIPLE">
+    AppKit Mechanism + Primary Screen + Shared Spaces + Multiple Screens
+  </int>
+  <int value="12" label="IMMERSIVE_SECONDARY_SEPARATE_MULTIPLE">
+    Immersive Mechanism + Secondary Screen + Separate Spaces + Multiple Screens
+  </int>
+  <int value="13" label="APPKIT_SECONDARY_SEPARATE_MULTIPLE">
+    AppKit Mechanism + Secondary Screen + Separate Spaces + Multiple Screens
+  </int>
+  <int value="14" label="IMMERSIVE_PRIMARY_SEPARATE_MULTIPLE">
+    Immersive Mechanism + Primary Screen + Separate Spaces + Multiple Screens
+  </int>
+  <int value="15" label="APPKIT_PRIMARY_SEPARATE_MULTIPLE">
+    AppKit Mechanism + Primary Screen + Separate Spaces + Multiple Screens
+  </int>
+</enum>
+
+<enum name="OSXFullscreenStyle" type="int">
+  <int value="0" label="IMMERSIVE">
+    The window was fullscreened using the immersive mechanism.
+  </int>
+  <int value="1" label="PRESENTATION_MODE">
+    The window was fullscreened using the AppKit mechanism, in Presentation
+    Mode.
+  </int>
+  <int value="2" label="CANONICAL_FULLSCREEN">
+    The window was fullscreened using the AppKit mechanism, in Canonical
+    Fullscreen.
+  </int>
+</enum>
+
+<enum name="OSXFullscreenWindowLocation" type="int">
+  <int value="0" label="PRIMARY_SINGLE_SCREEN">
+    The window was located on the primary screen, and there is only a single
+    screen available.
+  </int>
+  <int value="1" label="PRIMARY_MULTIPLE_SCREEN">
+    The window was located on the primary screen, and there are multiple screens
+    available.
+  </int>
+  <int value="2" label="SECONDARY_MULTIPLE_SCREEN">
+    The window was located on a secondary screen, and there are multiple screens
+    available.
+  </int>
+</enum>
+
+<enum name="OSXHandoffOrigin" type="int">
+  <int value="0" label="Unknown Origin"/>
+  <int value="1" label="Chrome on iOS"/>
+  <int value="2" label="Chrome on Mac"/>
+</enum>
+
+<enum name="OSXScreensHaveSeparateSpaces" type="int">
+  <int value="0" label="CANNOT_HAVE_SEPARATE_SPACES">
+    The &quot;Screens Have Separate Spaces&quot; option is unavailable.
+  </int>
+  <int value="1" label="SEPARATE_SPACES">
+    The &quot;Screens Have Separate Spaces&quot; option is on.
+  </int>
+  <int value="2" label="SHARED_SPACES">
+    The &quot;Screens Have Separate Spaces&quot; option is off.
+  </int>
+</enum>
+
+<enum name="OSXSharedMemoryMechanism" type="int">
+  <int value="0" label="POSIX">
+    The shared memory region is backed by a POSIX fd.
+  </int>
+  <int value="1" label="MACH">
+    The shared memory region is backed by a Mach memory object.
+  </int>
+</enum>
+
+<enum name="OtherPossibleUsernamesUsage" type="int">
+  <int value="0" label="Nothing to Autofill"/>
+  <int value="1" label="No other possible usernames"/>
+  <int value="2" label="Other possible usernames present, but none were shown"/>
+  <int value="3" label="Other possible username was shown, but not selected"/>
+  <int value="4" label="Other possible username was selected"/>
+</enum>
+
+<enum name="OtherSessionsActions" type="int">
+  <int value="0" label="Menu initialized"/>
+  <int value="1" label="Menu shown"/>
+  <int value="2" label="Link clicked"/>
+  <int value="3" label="Link context menu shown"/>
+  <int value="4" label="Device context menu shown"/>
+  <int value="5" label="Unused/previous device context menu shown"/>
+  <int value="6" label="Collapse Session"/>
+  <int value="7" label="Expand Session"/>
+  <int value="8" label="Open All"/>
+  <int value="9" label="Has foreign data"/>
+  <int value="10" label="Hide for now"/>
+</enum>
+
+<enum name="OverscrollMode" type="int">
+  <summary>Direction of the overscroll gesture.</summary>
+  <int value="1" label="North">Scrolled from bottom towards top</int>
+  <int value="2" label="South">Scrolled from top towards the bottom</int>
+  <int value="3" label="West">Scrolled from right towards left</int>
+  <int value="4" label="East">Scrolled from left towards right</int>
+</enum>
+
+<enum name="P2PLookupResult" type="int">
+  <int value="0" label="Found"/>
+  <int value="1" label="Not Found"/>
+  <int value="2" label="Vanished"/>
+  <int value="3" label="Canceled"/>
+  <int value="4" label="Filtered"/>
+</enum>
+
+<enum name="P2PServerResult" type="int">
+  <int value="0" label="Response Sent"/>
+  <int value="1" label="Response Interrupted"/>
+  <int value="2" label="Malformed"/>
+  <int value="3" label="Not Found"/>
+  <int value="4" label="Index"/>
+</enum>
+
+<enum name="PacResultForStrippedUrl" type="int">
+  <obsolete>
+    Deprecated 4/27/2016. No longer tracked.
+  </obsolete>
+  <summary>
+    Result for PAC script experiment as defined in
+    net/proxy/proxy_resolver_v8_tracing.h
+  </summary>
+  <int value="0" label="SKIPPED_FALLBACK_BLOCKING_DNS"/>
+  <int value="1" label="SUCCESS"/>
+  <int value="2" label="SUCCESS_DIFFERENT_ALERTS"/>
+  <int value="3" label="SUCCESS_DIFFERENT_NUM_DNS"/>
+  <int value="4" label="FAIL_ABANDONED"/>
+  <int value="5" label="FAIL_FALLBACK_BLOCKING_DNS"/>
+  <int value="6" label="FAIL_ERROR"/>
+  <int value="7" label="FAIL_DIFFERENT_PROXY_LIST"/>
+</enum>
+
+<enum name="PageLoadEvent" type="int">
+  <obsolete>
+    Deprecated in favor of {Committed|Provisional|InternalError}LoadEvent
+  </obsolete>
+  <int value="0" label="Started main frame load"/>
+  <int value="1" label="Failed load before commit"/>
+  <int value="2" label="Aborted load before commit"/>
+  <int value="3" label="Aborted load before first layout"/>
+  <int value="4" label="Successful first layout (foreground)"/>
+  <int value="5" label="Successful first layout (backgrounded)"/>
+</enum>
+
+<enum name="PageScaleFactorRange" type="int">
+  <int value="0" label="&lt;25%"/>
+  <int value="1" label="25-49%"/>
+  <int value="2" label="50-74%"/>
+  <int value="3" label="75-99%"/>
+  <int value="4" label="100-124%"/>
+  <int value="5" label="125-149%"/>
+  <int value="6" label="150-174%"/>
+  <int value="7" label="175-199%"/>
+  <int value="8" label="200-224%"/>
+  <int value="9" label="225-249%"/>
+  <int value="10" label="250-274%"/>
+  <int value="11" label="275-299%"/>
+  <int value="12" label="300-324%"/>
+  <int value="13" label="325-349%"/>
+  <int value="14" label="350-374%"/>
+  <int value="15" label="375-399%"/>
+  <int value="16" label="400-424%"/>
+  <int value="17" label="425-449%"/>
+  <int value="18" label="450-474%"/>
+  <int value="19" label="475-499%"/>
+  <int value="20" label="&gt;=500%"/>
+</enum>
+
+<enum name="PagespeedHeaderServerType" type="int">
+  <int value="0" label="Total responses"/>
+  <int value="1" label="mod_pagespeed server"/>
+  <int value="2" label="ngx_pagespeed server"/>
+  <int value="3" label="PageSpeed Service server"/>
+  <int value="4" label="Unknown server type"/>
+</enum>
+
+<enum name="PagespeedVersion" type="int">
+  <summary>
+    The version of PageSpeed. Values up to 1.6.29.x are in use as of 2013-10-01
+    while later values may adjust 'a' and/or 'b' arbitrarily.
+  </summary>
+  <int value="1" label="Unknown"/>
+  <int value="2" label="0.9.10.0"/>
+  <int value="3" label="0.9.10.x"/>
+  <int value="4" label="0.9.11.0"/>
+  <int value="5" label="0.9.11.x"/>
+  <int value="6" label="0.9.12.0"/>
+  <int value="7" label="0.9.12.x"/>
+  <int value="8" label="0.9.13.0"/>
+  <int value="9" label="0.9.13.x"/>
+  <int value="10" label="0.9.14.0"/>
+  <int value="11" label="0.9.14.x"/>
+  <int value="12" label="0.9.15.0"/>
+  <int value="13" label="0.9.15.x"/>
+  <int value="14" label="0.9.16.0"/>
+  <int value="15" label="0.9.16.x"/>
+  <int value="16" label="0.9.17.0"/>
+  <int value="17" label="0.9.17.x"/>
+  <int value="18" label="0.9.18.0"/>
+  <int value="19" label="0.9.18.x"/>
+  <int value="20" label="0.10.19.0"/>
+  <int value="21" label="0.10.19.x"/>
+  <int value="22" label="0.10.20.0"/>
+  <int value="23" label="0.10.20.x"/>
+  <int value="24" label="0.10.21.0"/>
+  <int value="25" label="0.10.21.x"/>
+  <int value="26" label="0.10.22.0"/>
+  <int value="27" label="0.10.22.x"/>
+  <int value="28" label="1.1.23.0"/>
+  <int value="29" label="1.1.23.x"/>
+  <int value="30" label="1.2.24.0"/>
+  <int value="31" label="1.2.24.x"/>
+  <int value="32" label="1.3.25.0"/>
+  <int value="33" label="1.3.25.x"/>
+  <int value="34" label="1.4.26.0"/>
+  <int value="35" label="1.4.26.x"/>
+  <int value="36" label="1.5.27.0"/>
+  <int value="37" label="1.5.27.x"/>
+  <int value="38" label="1.5.28.0"/>
+  <int value="39" label="1.5.28.x"/>
+  <int value="40" label="1.6.29.0"/>
+  <int value="41" label="1.6.29.x"/>
+  <int value="42" label="a.b.30.0"/>
+  <int value="43" label="a.b.30.x"/>
+  <int value="44" label="a.b.31.0"/>
+  <int value="45" label="a.b.31.x"/>
+  <int value="46" label="a.b.32.0"/>
+  <int value="47" label="a.b.32.x"/>
+  <int value="48" label="a.b.33.0"/>
+  <int value="49" label="a.b.33.x"/>
+  <int value="50" label="a.b.34.0"/>
+  <int value="51" label="a.b.34.x"/>
+  <int value="52" label="a.b.35.0"/>
+  <int value="53" label="a.b.35.x"/>
+  <int value="54" label="a.b.36.0"/>
+  <int value="55" label="a.b.36.x"/>
+  <int value="56" label="a.b.37.0"/>
+  <int value="57" label="a.b.37.x"/>
+  <int value="58" label="a.b.38.0"/>
+  <int value="59" label="a.b.38.x"/>
+  <int value="60" label="a.b.39.0"/>
+  <int value="61" label="a.b.39.x"/>
+  <int value="62" label="a.b.40.0"/>
+  <int value="63" label="a.b.40.x"/>
+  <int value="64" label="a.b.41.0"/>
+  <int value="65" label="a.b.41.x"/>
+  <int value="66" label="a.b.42.0"/>
+  <int value="67" label="a.b.42.x"/>
+  <int value="68" label="a.b.43.0"/>
+  <int value="69" label="a.b.43.x"/>
+  <int value="70" label="a.b.44.0"/>
+  <int value="71" label="a.b.44.x"/>
+  <int value="72" label="a.b.45.0"/>
+  <int value="73" label="a.b.45.x"/>
+  <int value="74" label="a.b.46.0"/>
+  <int value="75" label="a.b.46.x"/>
+  <int value="76" label="a.b.47.0"/>
+  <int value="77" label="a.b.47.x"/>
+  <int value="78" label="a.b.48.0"/>
+  <int value="79" label="a.b.48.x"/>
+  <int value="80" label="a.b.49.0"/>
+  <int value="81" label="a.b.49.x"/>
+  <int value="82" label="a.b.50.0"/>
+  <int value="83" label="a.b.50.x"/>
+  <int value="84" label="a.b.51.0"/>
+  <int value="85" label="a.b.51.x"/>
+  <int value="86" label="a.b.52.0"/>
+  <int value="87" label="a.b.52.x"/>
+  <int value="88" label="a.b.53.0"/>
+  <int value="89" label="a.b.53.x"/>
+  <int value="90" label="a.b.54.0"/>
+  <int value="91" label="a.b.54.x"/>
+  <int value="92" label="a.b.55.0"/>
+  <int value="93" label="a.b.55.x"/>
+  <int value="94" label="a.b.56.0"/>
+  <int value="95" label="a.b.56.x"/>
+  <int value="96" label="a.b.57.0"/>
+  <int value="97" label="a.b.57.x"/>
+  <int value="98" label="a.b.58.0"/>
+  <int value="99" label="a.b.58.x"/>
+</enum>
+
+<enum name="PageUsed" type="int">
+  <int value="0" label="Discarded"/>
+  <int value="1" label="Used"/>
+</enum>
+
+<enum name="PageVisitTransitionType" type="int">
+  <int value="0" label="Page"/>
+  <int value="1" label="Omnibox URL"/>
+  <int value="2" label="Omnibox default search"/>
+  <int value="3" label="Omnibox template search"/>
+  <int value="4" label="Bookmark"/>
+  <int value="5" label="Copy and paste"/>
+  <int value="6" label="Forward or backward"/>
+  <int value="7" label="Restore"/>
+  <int value="8" label="Unknown"/>
+</enum>
+
+<enum name="PaletteModeCancelType" type="int">
+  <int value="0" label="Palette laser pointer mode is cancelled."/>
+  <int value="1" label="Palette laser pointer mode is switched out of"/>
+  <int value="2" label="Palette magnify mode is cancelled."/>
+  <int value="3" label="Palette magnify mode is switched out of."/>
+</enum>
+
+<enum name="PaletteTrayOptions" type="int">
+  <int value="0" label="Palette being closed or dismissed with no action"/>
+  <int value="1" label="Click on the settings button"/>
+  <int value="2" label="Click on the help button"/>
+  <int value="3" label="Capture region"/>
+  <int value="4" label="Capture screen"/>
+  <int value="5" label="Add new note"/>
+  <int value="6" label="Magnifying glass mode"/>
+  <int value="7" label="Laser pointer mode"/>
+</enum>
+
+<enum name="PanningModelType" type="int">
+  <int value="0" label="equalpower"/>
+  <int value="1" label="HRTF"/>
+</enum>
+
+<enum name="ParsedCookieStatus" type="int">
+  <obsolete>
+    Deprecated as of 9/2013. Experiment to measure control characters in cookies
+    is finished.
+  </obsolete>
+  <int value="0" label="All cookie values valid and without control chars"/>
+  <int value="1" label="Cookie contains control chars"/>
+  <int value="2" label="Cookie is invalid"/>
+  <int value="3" label="Cookie contains both control chars and is invalid"/>
+</enum>
+
+<enum name="PassiveForcedListenerResultType" type="int">
+  <int value="0" label="PreventDefaultNotCalled"/>
+  <int value="1" label="DocumentLevelTouchPreventDefaultCalled"/>
+</enum>
+
+<enum name="PasswordBubbleDisplayDisposition" type="int">
+  <int value="0" label="Opened automatically / Offering a password to save"/>
+  <int value="1" label="Opened manually / Offering a password to save"/>
+  <int value="2" label="Opened manually / Managing saved passwords"/>
+  <int value="3" label="Opened manually / Site is blacklisted (obsolete)"/>
+  <int value="4"
+      label="Opened automatically / Confirming generated password saved"/>
+  <int value="5"
+      label="Opened automatically / Offering a credential to choose
+             (obsolete)"/>
+  <int value="6" label="Opened automatically / Auto-signin toast"/>
+  <int value="7" label="Opened manually / Offering a password to update"/>
+  <int value="8" label="Opened automatically / Offering a password to update"/>
+</enum>
+
+<enum name="PasswordBubbleSignInPromoDismissalReason" type="int">
+  <int value="0" label="Dismissed"/>
+  <int value="1" label="Sign in"/>
+  <int value="2" label="No thanks"/>
+</enum>
+
+<enum name="PasswordFormQueryVolume" type="int">
+  <int value="0" label="New password query"/>
+  <int value="1" label="Current query"/>
+</enum>
+
+<enum name="PasswordFormType" type="int">
+  <int value="0" label="Login form"/>
+  <int value="1" label="Login form without username"/>
+  <int value="2"
+      label="Enabled change password form (saved credentials match username)"/>
+  <int value="3"
+      label="Disabled change password form (no matching credentials)"/>
+  <int value="4" label="Disabled change password form without username"/>
+  <int value="5" label="Signup form"/>
+  <int value="6" label="Signup form without username"/>
+  <int value="7" label="Combined login and signup form"/>
+</enum>
+
+<enum name="PasswordGenerationEvent" type="int">
+  <int value="0" label="No sign up form"/>
+  <int value="1" label="Local heuristics found sign up form"/>
+  <int value="2" label="DEPRECATED: Icon shown"/>
+  <int value="3" label="DEPRECATED: Bubble shown"/>
+  <int value="4" label="Generation available"/>
+  <int value="5" label="DEPRECATED: Generation popup shown"/>
+  <int value="6" label="Generated password accepted"/>
+  <int value="7" label="DEPRECATED: Editing popup shown"/>
+  <int value="8" label="Generated password edited"/>
+  <int value="9" label="Generated password deleted"/>
+  <int value="10" label="Generated popup shown (limit once per page)"/>
+  <int value="11" label="Editing popup shown (limit once per page)"/>
+  <int value="12" label="Generation triggered by autocomplete attributes"/>
+</enum>
+
+<enum name="PasswordImportFromCSVResult" type="int">
+  <int value="0" label="Password import succeeded"/>
+  <int value="1" label="Password import failed due to IO error"/>
+  <int value="2" label="Password import failed due to malformed CSV"/>
+  <int value="3" label="Password import failed due to missing content"/>
+  <int value="4" label="Boundary value"/>
+</enum>
+
+<enum name="PasswordManagerActionsTaken" type="int">
+  <obsolete>
+    Deprecated as of Chrome 32. See PasswordManagerActionsTakenWithPsl
+  </obsolete>
+  <summary>
+    The value is a combination of three different options - what did the
+    password manager do, what did the user do, and was the form submitted (and
+    submitted successfully or not). The meaning of each value can be determined
+    from the values in chrome/browser/password_manager/password_form_manager.h
+  </summary>
+  <int value="0"
+      label="manager did nothing / user did nothing / form not submitted"/>
+  <int value="1"
+      label="manager did nothing / user chose a value / form not submitted"/>
+  <int value="2"
+      label="manager did nothing / user typed in something / form not
+             submitted"/>
+  <int value="3"
+      label="manager filled the fields / user did nothing / form not
+             submitted"/>
+  <int value="4"
+      label="manager filled the fields / user chose a value / form not
+             submitted"/>
+  <int value="5"
+      label="manager filled the fields / user typed in something / form not
+             submitted"/>
+  <int value="6"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form not submitted"/>
+  <int value="7"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form not submitted (this value shouldn't be possible)"/>
+  <int value="8"
+      label="manager did nothing (site was blacklisted) / user typed in
+             something / form not submitted"/>
+  <int value="9"
+      label="manager did nothing (autocomplete off) / user did nothing / form
+             not submitted"/>
+  <int value="10"
+      label="manager did nothing (autocomplete off) / user chose a value /
+             form not submitted (this value shouldn't be possible)"/>
+  <int value="11"
+      label="manager did nothing (autocomplete off) / user typed in something
+             / form not submitted"/>
+  <int value="12"
+      label="manager did nothing / user did nothing / form submit failed"/>
+  <int value="13"
+      label="manager did nothing / user chose a value / form submit failed"/>
+  <int value="14"
+      label="manager did nothing / user typed in something / form submit
+             failed"/>
+  <int value="15"
+      label="manager filled the fields / user did nothing / form submit
+             failed"/>
+  <int value="16"
+      label="manager filled the fields / user chose a value / form submit
+             failed"/>
+  <int value="17"
+      label="manager filled the fields / user typed in something / form
+             submit failed"/>
+  <int value="18"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form submit failed"/>
+  <int value="19"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form submit failed (this value shouldn't be possible)"/>
+  <int value="20"
+      label="manager did nothing (site was blacklisted) / user typed in
+             something / form submit failed"/>
+  <int value="21"
+      label="manager did nothing (autocomplete off) / user did nothing / form
+             submit failed"/>
+  <int value="22"
+      label="manager did nothing (autocomplete off) / user chose a value /
+             form submit failed (this value shouldn't be possible)"/>
+  <int value="23"
+      label="manager did nothing (autocomplete off) / user typed in something
+             / form submit failed"/>
+  <int value="24"
+      label="manager did nothing / user did nothing / form submit succeeded"/>
+  <int value="25"
+      label="manager did nothing / user chose a value / form submit succeeded"/>
+  <int value="26"
+      label="manager did nothing / user typed in something / form submit
+             succeeded"/>
+  <int value="27"
+      label="manager filled the fields / user did nothing / form submit
+             succeeded"/>
+  <int value="28"
+      label="manager filled the fields / user chose a value / form submit
+             succeeded"/>
+  <int value="29"
+      label="manager filled the fields / user typed in something / form
+             submit succeeded"/>
+  <int value="30"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form submit succeeded"/>
+  <int value="31"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form submit succeeded (this value shouldn't be possible)"/>
+  <int value="32"
+      label="manager did nothing (site was blacklisted) / user typed in
+             something / form submit succeeded"/>
+  <int value="33"
+      label="manager did nothing (autocomplete off) / user did nothing / form
+             submit succeeded"/>
+  <int value="34"
+      label="manager did nothing (autocomplete off) / user chose a value /
+             form submit succeeded (this value shouldn't be possible)"/>
+  <int value="35"
+      label="manager did nothing (autocomplete off) / user typed in something
+             / form submit succeeded"/>
+</enum>
+
+<enum name="PasswordManagerActionsTakenV3" type="int">
+  <summary>
+    The value is a combination of three different options - what did the
+    password manager do, what did the user do, and was the form submitted (and
+    submitted successfully or not). The meaning of each value can be determined
+    from the values in chrome/browser/password_manager/password_form_manager.h
+  </summary>
+  <int value="0"
+      label="manager did nothing / user did nothing / form not submitted"/>
+  <int value="1"
+      label="manager did nothing / user chose a value / form not submitted"/>
+  <int value="2"
+      label="manager did nothing / user chose a value from PSL / form not
+             submitted"/>
+  <int value="3"
+      label="manager did nothing / user typed in password / form not
+             submitted"/>
+  <int value="4"
+      label="manager did nothing / user typed in username and password / form
+             not submitted"/>
+  <int value="5"
+      label="manager filled the fields / user did nothing / form not
+             submitted"/>
+  <int value="6"
+      label="manager filled the fields / user chose a value / form not
+             submitted"/>
+  <int value="7"
+      label="manager filled the fields / user chose a value from PSL / form
+             not submitted"/>
+  <int value="8"
+      label="manager filled the fields / user typed in password / form not
+             submitted"/>
+  <int value="9"
+      label="manager filled the fields / user typed in username and password
+             / form not submitted"/>
+  <int value="10"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form not submitted"/>
+  <int value="11"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form not submitted (this value shouldn't be possible)"/>
+  <int value="12"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             from PSL / form not submitted (this value shouldn't be possible)"/>
+  <int value="13"
+      label="manager did nothing (site was blacklisted) / user typed in
+             password / form not submitted"/>
+  <int value="14"
+      label="manager did nothing (site was blacklisted) / user typed in
+             username and password / form not submitted"/>
+  <int value="15"
+      label="manager did nothing / user did nothing / form submit failed"/>
+  <int value="16"
+      label="manager did nothing / user chose a value / form submit failed"/>
+  <int value="17"
+      label="manager did nothing / user chose a value from psl / form submit
+             failed"/>
+  <int value="18"
+      label="manager did nothing / user typed in password / form submit
+             failed"/>
+  <int value="19"
+      label="manager did nothing / user typed in username and password / form
+             submit failed"/>
+  <int value="20"
+      label="manager filled the fields / user did nothing / form submit
+             failed"/>
+  <int value="21"
+      label="manager filled the fields / user chose a value / form submit
+             failed"/>
+  <int value="22"
+      label="manager filled the fields / user chose a value from psl / form
+             submit failed"/>
+  <int value="23"
+      label="manager filled the fields / user typed in pasword / form submit
+             failed"/>
+  <int value="24"
+      label="manager filled the fields / user typed in username and pasword /
+             form submit failed"/>
+  <int value="25"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form submit failed"/>
+  <int value="26"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form submit failed (this value shouldn't be possible)"/>
+  <int value="27"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             from psl / form submit failed (this value shouldn't be possible)"/>
+  <int value="28"
+      label="manager did nothing (site was blacklisted) / user typed in
+             password / form submit failed"/>
+  <int value="29"
+      label="manager did nothing (site was blacklisted) / user typed in
+             username and password / form submit failed"/>
+  <int value="30"
+      label="manager did nothing / user did nothing / form submit succeeded"/>
+  <int value="31"
+      label="manager did nothing / user chose a value / form submit succeeded"/>
+  <int value="32"
+      label="manager did nothing / user chose a value from psl / form submit
+             succeeded"/>
+  <int value="33"
+      label="manager did nothing / user typed in password / form submit
+             succeeded"/>
+  <int value="34"
+      label="manager did nothing / user typed in username and password / form
+             submit succeeded"/>
+  <int value="35"
+      label="manager filled the fields / user did nothing / form submit
+             succeeded"/>
+  <int value="36"
+      label="manager filled the fields / user chose a value / form submit
+             succeeded"/>
+  <int value="37"
+      label="manager filled the fields / user chose a value from psl / form
+             submit succeeded"/>
+  <int value="38"
+      label="manager filled the fields / user typed in password / form submit
+             succeeded"/>
+  <int value="39"
+      label="manager filled the fields / user typed in username and password
+             / form submit succeeded"/>
+  <int value="40"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form submit succeeded"/>
+  <int value="41"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form submit succeeded (this value shouldn't be possible)"/>
+  <int value="42"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             from psl / form submit succeeded (this value shouldn't be
+             possible)"/>
+  <int value="43"
+      label="manager did nothing (site was blacklisted) / user typed in
+             password / form submit succeeded"/>
+  <int value="44"
+      label="manager did nothing (site was blacklisted) / user typed in
+             username and password / form submit succeeded"/>
+</enum>
+
+<enum name="PasswordManagerActionsTakenWithPsl" type="int">
+  <obsolete>
+    Deprecated as of 3/18/2014. See PasswordManagerActionsTakenV3.
+  </obsolete>
+  <summary>
+    The value is a combination of three different options - what did the
+    password manager do, what did the user do, and was the form submitted (and
+    submitted successfully or not). The meaning of each value can be determined
+    from the values in chrome/browser/password_manager/password_form_manager.h
+  </summary>
+  <int value="0"
+      label="manager did nothing / user did nothing / form not submitted"/>
+  <int value="1"
+      label="manager did nothing / user chose a value / form not submitted"/>
+  <int value="2"
+      label="manager did nothing / user chose a value from PSL / form not
+             submitted"/>
+  <int value="3"
+      label="manager did nothing / user typed in something / form not
+             submitted"/>
+  <int value="4"
+      label="manager filled the fields / user did nothing / form not
+             submitted"/>
+  <int value="5"
+      label="manager filled the fields / user chose a value / form not
+             submitted"/>
+  <int value="6"
+      label="manager filled the fields / user chose a value from PSL / form
+             not submitted"/>
+  <int value="7"
+      label="manager filled the fields / user typed in something / form not
+             submitted"/>
+  <int value="8"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form not submitted"/>
+  <int value="9"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form not submitted (this value shouldn't be possible)"/>
+  <int value="10"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             from PSL / form not submitted (this value shouldn't be possible)"/>
+  <int value="11"
+      label="manager did nothing (site was blacklisted) / user typed in
+             something / form not submitted"/>
+  <int value="12"
+      label="manager did nothing (autocomplete off) / user did nothing / form
+             not submitted"/>
+  <int value="13"
+      label="manager did nothing (autocomplete off) / user chose a value /
+             form not submitted (this value shouldn't be possible)"/>
+  <int value="14"
+      label="manager did nothing (autocomplete off) / user chose a value from
+             psl / form not submitted (this value shouldn't be possible)"/>
+  <int value="15"
+      label="manager did nothing (autocomplete off) / user typed in something
+             / form not submitted"/>
+  <int value="16"
+      label="manager did nothing / user did nothing / form submit failed"/>
+  <int value="17"
+      label="manager did nothing / user chose a value / form submit failed"/>
+  <int value="18"
+      label="manager did nothing / user chose a value from psl / form submit
+             failed"/>
+  <int value="19"
+      label="manager did nothing / user typed in something / form submit
+             failed"/>
+  <int value="20"
+      label="manager filled the fields / user did nothing / form submit
+             failed"/>
+  <int value="21"
+      label="manager filled the fields / user chose a value / form submit
+             failed"/>
+  <int value="22"
+      label="manager filled the fields / user chose a value from psl / form
+             submit failed"/>
+  <int value="23"
+      label="manager filled the fields / user typed in something / form
+             submit failed"/>
+  <int value="24"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form submit failed"/>
+  <int value="25"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form submit failed (this value shouldn't be possible)"/>
+  <int value="26"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             from psl / form submit failed (this value shouldn't be possible)"/>
+  <int value="27"
+      label="manager did nothing (site was blacklisted) / user typed in
+             something / form submit failed"/>
+  <int value="28"
+      label="manager did nothing (autocomplete off) / user did nothing / form
+             submit failed"/>
+  <int value="29"
+      label="manager did nothing (autocomplete off) / user chose a value /
+             form submit failed (this value shouldn't be possible)"/>
+  <int value="30"
+      label="manager did nothing (autocomplete off) / user chose a value from
+             psl / form submit failed (this value shouldn't be possible)"/>
+  <int value="31"
+      label="manager did nothing (autocomplete off) / user typed in something
+             / form submit failed"/>
+  <int value="32"
+      label="manager did nothing / user did nothing / form submit succeeded"/>
+  <int value="33"
+      label="manager did nothing / user chose a value / form submit succeeded"/>
+  <int value="34"
+      label="manager did nothing / user chose a value from psl / form submit
+             succeeded"/>
+  <int value="35"
+      label="manager did nothing / user typed in something / form submit
+             succeeded"/>
+  <int value="36"
+      label="manager filled the fields / user did nothing / form submit
+             succeeded"/>
+  <int value="37"
+      label="manager filled the fields / user chose a value / form submit
+             succeeded"/>
+  <int value="38"
+      label="manager filled the fields / user chose a value from psl / form
+             submit succeeded"/>
+  <int value="39"
+      label="manager filled the fields / user typed in something / form
+             submit succeeded"/>
+  <int value="40"
+      label="manager did nothing (site was blacklisted) / user did nothing /
+             form submit succeeded"/>
+  <int value="41"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             / form submit succeeded (this value shouldn't be possible)"/>
+  <int value="42"
+      label="manager did nothing (site was blacklisted) / user chose a value
+             from psl / form submit succeeded (this value shouldn't be
+             possible)"/>
+  <int value="43"
+      label="manager did nothing (site was blacklisted) / user typed in
+             something / form submit succeeded"/>
+  <int value="44"
+      label="manager did nothing (autocomplete off) / user did nothing / form
+             submit succeeded"/>
+  <int value="45"
+      label="manager did nothing (autocomplete off) / user chose a value /
+             form submit succeeded (this value shouldn't be possible)"/>
+  <int value="46"
+      label="manager did nothing (autocomplete off) / user chose a value from
+             psl / form submit succeeded (this value shouldn't be possible)"/>
+  <int value="47"
+      label="manager did nothing (autocomplete off) / user typed in something
+             / form submit succeeded"/>
+</enum>
+
+<enum name="PasswordManagerAllowToCollectURLBubble.UIDismissalReason"
+    type="int">
+  <obsolete>
+    The bubble isn't shown anymore. Become obsolete in Feb. 2015.
+  </obsolete>
+  <int value="0" label="Bubble lost focus / No infobar interaction"/>
+  <int value="1" label="Clicked collect URL"/>
+  <int value="2" label="Clicked do not collect URL"/>
+</enum>
+
+<enum name="PasswordManagerEmptyUsernameField" type="int">
+  <int value="0" label="Has username field"/>
+  <int value="1" label="No username field"/>
+</enum>
+
+<enum name="PasswordManagerEmptyUsernamePasswordChangeForm" type="int">
+  <int value="0" label="Not a password change form"/>
+  <int value="1" label="A password change form"/>
+</enum>
+
+<enum name="PasswordManagerFilledAndroidCredentials" type="int">
+  <int value="0" label="NOT from Android"/>
+  <int value="1" label="From Android"/>
+</enum>
+
+<enum name="PasswordManagerOfferedAndroidCredentials" type="int">
+  <int value="0" label="None from Android"/>
+  <int value="1" label="1+ from Android"/>
+</enum>
+
+<enum name="PasswordManagerOsPasswordStatus" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Unsupported platform"/>
+  <int value="2" label="Password is blank"/>
+  <int value="3" label="Password is non blank"/>
+  <int value="4"
+      label="Password status not checked as user is on a Windows Domain"/>
+</enum>
+
+<enum name="PasswordManagerPreferencesInitialAndFinalValues" type="int">
+  <summary>
+    The pair of initial values and the pair of final values for the legacy
+    preference for controlling the Chrome Password Manager and new preference
+    for controlling Smart Lock on Android. In the values label N means new pref
+    value, L meand legacy pref value.
+  </summary>
+  <int value="0"
+      label="Initial state: N='off', L='off' Final state: N='off', L='off'"/>
+  <int value="1"
+      label="Initial state: N='off', L='off' Final state: N='off', L='on'"/>
+  <int value="2"
+      label="Initial state: N='off', L='off' Final state: N='on', L='off'"/>
+  <int value="3"
+      label="Initial state: N='off', L='off' Final state: N='on', L='on'"/>
+  <int value="4"
+      label="Initial state: N='off', L='on' Final state: N='off', L='off'"/>
+  <int value="5"
+      label="Initial state: N='off', L='on' Final state: N='off', L='on'"/>
+  <int value="6"
+      label="Initial state: N='off', L='on' Final state: N='on', L='off'"/>
+  <int value="7"
+      label="Initial state: N='off', L='on' Final state: N='on', L='on'"/>
+  <int value="8"
+      label="Initial state: N='on', L='off' Final state: N='off', L='off'"/>
+  <int value="9"
+      label="Initial state: N='on', L='off' Final state: N='off', L='on'"/>
+  <int value="10"
+      label="Initial state: N='on', L='off' Final state: N='on', L='off'"/>
+  <int value="11"
+      label="Initial state: N='on', L='off' Final state: N='on', L='on'"/>
+  <int value="12"
+      label="Initial state: N='on', L='on' Final state: N='off', L='off'"/>
+  <int value="13"
+      label="Initial state: N='on', L='on' Final state: N='off', L='on'"/>
+  <int value="14"
+      label="Initial state: N='on', L='on' Final state: N='on', L='off'"/>
+  <int value="15"
+      label="Initial state: N='on', L='on' Final state: N='on', L='on'"/>
+</enum>
+
+<enum name="PasswordManagerPreferencesInitialValues" type="int">
+  <summary>
+    The pair of initial values for the legacy preference for controlling the
+    Chrome Password Manager and new preference for controlling Smart Lock on
+    Android.
+  </summary>
+  <int value="0" label="New pref is 'off', legacy pref is 'off'"/>
+  <int value="1" label="New pref is 'off', legacy pref is 'on'"/>
+  <int value="2" label="New pref is 'on', legacy pref is 'off'"/>
+  <int value="3" label="New pref is 'on', legacy pref is 'on'"/>
+</enum>
+
+<enum name="PasswordManagerPslDomainMatchTriggering" type="int">
+  <summary>
+    The value indicates whether an entry returned by password autofill contains
+    a value that was found by matching against the public suffix list.
+  </summary>
+  <int value="0" label="Matching not used"/>
+  <int value="1" label="No match"/>
+  <int value="2" label="Match"/>
+</enum>
+
+<enum name="PasswordManagerShowEmptyUsername" type="int">
+  <int value="0" label="Non-empty username"/>
+  <int value="1" label="Empty username"/>
+</enum>
+
+<enum name="PasswordManagerSyncingAccountState" type="int">
+  <summary>
+    The value is a combination of the current sync state and if the user has
+    their sync password saved.
+  </summary>
+  <int value="0" label="Syncing/Sync password not saved"/>
+  <int value="1" label="Syncing/Sync password saved"/>
+  <int value="2" label="Not Syncing/Sync password not saved"/>
+  <int value="3"
+      label="Not Syncing/Sync pasword saved. This value should not happen."/>
+</enum>
+
+<enum name="PasswordManagerUIDismissalReason" type="int">
+  <int value="0" label="Bubble lost focus / No infobar interaction"/>
+  <int value="1" label="Clicked 'Save'"/>
+  <int value="2" label="Clicked 'Nope'"/>
+  <int value="3" label="Clicked 'Never'"/>
+  <int value="4" label="Clicked 'Manage passwords'"/>
+  <int value="5" label="Clicked 'Done'"/>
+  <int value="6" label="Clicked 'Unblacklist' (obsolete)"/>
+  <int value="7" label="Clicked 'OK'"/>
+  <int value="8" label="Clicked on a credential (obsolete)"/>
+  <int value="9" label="Auto-signin toast timeout"/>
+  <int value="10" label="Auto-signin toast clicked (obsolete)"/>
+  <int value="11" label="Clicked 'Google Smart Lock'"/>
+</enum>
+
+<enum name="PasswordSubmissionEvent" type="int">
+  <int value="0" label="Password submission succeeded"/>
+  <int value="1" label="Password submission failed"/>
+  <int value="2" label="Password not submitted"/>
+  <int value="3" label="Generated password overridden by a non-generated one"/>
+  <int value="4" label="Password used"/>
+  <int value="5" label="Generated password submission would have failed"/>
+</enum>
+
+<enum name="PasswordSyncState" type="int">
+  <int value="0" label="Syncing OK"/>
+  <int value="1" label="Read failed"/>
+  <int value="2" label="Duplcate tags"/>
+  <int value="3" label="Server failed"/>
+</enum>
+
+<enum name="PaymentRequestAbortReason" type="int">
+  <int value="0" label="DismissedByUser"/>
+  <int value="1" label="AbortedByMerchant"/>
+  <int value="2" label="InvalidDataFromRenderer"/>
+  <int value="3" label="MojoConnectionError"/>
+  <int value="4" label="MojoRendererClosing"/>
+  <int value="5" label="InstrumentDetailsError"/>
+  <int value="6" label="NoMatchingPaymentMethod"/>
+  <int value="7" label="NoSupportedPaymentMethod"/>
+  <int value="8" label="Other"/>
+</enum>
+
+<enum name="PaymentRequestPaymentMethods" type="int">
+  <int value="0" label="Autofill credit cards"/>
+  <int value="1" label="Android Pay"/>
+  <int value="2" label="Other Payment App"/>
+</enum>
+
+<enum name="PaymentRequestRequestedInformation" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Email"/>
+  <int value="2" label="Phone"/>
+  <int value="3" label="Email and Phone"/>
+  <int value="4" label="Shipping Address"/>
+  <int value="5" label="Email and Shipping Address"/>
+  <int value="6" label="Phone and Shipping Address"/>
+  <int value="7" label="Email, Phone and Shipping Address"/>
+  <int value="8" label="Name"/>
+  <int value="9" label="Email and Name"/>
+  <int value="10" label="Phone and Name"/>
+  <int value="11" label="Email, Phone and Name"/>
+  <int value="12" label="Shipping Address and Name"/>
+  <int value="13" label="Email, Shipping Address and Name"/>
+  <int value="14" label="Phone, Shipping Address and Name"/>
+  <int value="15" label="Email, Phone, Shipping Address and Name"/>
+</enum>
+
+<enum name="PDFFeatures" type="int">
+  <int value="0" label="Loaded Document"/>
+  <int value="1" label="Has Title"/>
+  <int value="2" label="Has Bookmarks"/>
+</enum>
+
+<enum name="PeerConnectionCounters" type="int">
+  <int value="0" label="PeerConnection enabled with IPv4."/>
+  <int value="1" label="PeerConnection enabled with Ipv6."/>
+  <int value="2" label="IPv4 BestConnection."/>
+  <int value="3" label="IPv6 BestConnection."/>
+</enum>
+
+<enum name="PeerConnectionRtcpMux" type="int">
+  <int value="0" label="Disabled"/>
+  <int value="1" label="Enabled"/>
+  <int value="2" label="No media"/>
+</enum>
+
+<enum name="PeerConnectionRtcpMuxPolicy" type="int">
+  <int value="0" label="Require"/>
+  <int value="1" label="Negotiate"/>
+  <int value="2" label="Default"/>
+</enum>
+
+<enum name="PepperInterface" type="int">
+<!-- Generated by ppapi/tools/pepper_hash_for_uma.cc -->
+
+  <int value="286711" label="PPB_FlashFullscreen;0.1"/>
+  <int value="2804066" label="PPB_AudioConfig;1.1"/>
+  <int value="8760108" label="PPB_Testing_Private;1.0"/>
+  <int value="10714106" label="PPB_OutputProtection_Private;0.1"/>
+  <int value="11143977" label="PPB_PlatformVerification_Private;0.2"/>
+  <int value="12033600" label="PPB_Compositor;0.1"/>
+  <int value="13662160" label="PPB_CharSet(Dev);0.4"/>
+  <int value="22816901" label="PPB_FileChooser(Dev);0.5"/>
+  <int value="28187368" label="PPB_IMEInputEvent(Dev);0.2"/>
+  <int value="36133501" label="PPB_MediaStreamVideoTrack;1.0"/>
+  <int value="37307420" label="PPB_Scrollbar(Dev);0.5"/>
+  <int value="59327104" label="PPB_Messaging;1.2"/>
+  <int value="62905097" label="PPB_TrueTypeFont(Dev);0.1"/>
+  <int value="79708274" label="PPB_TCPSocket;1.1"/>
+  <int value="110360074" label="PPB_Var;1.1"/>
+  <int value="125017713" label="PPB_CameraCapabilities_Private;0.1"/>
+  <int value="126651696" label="PPB_ContentDecryptor_Private;0.12"/>
+  <int value="138418890" label="PPB_Memory(Dev);0.1"/>
+  <int value="150724524" label="PPB_Graphics2D;1.2"/>
+  <int value="153443470" label="PPB_URLResponseInfo;1.0"/>
+  <int value="153532707" label="PPB_Buffer(Dev);0.4"/>
+  <int value="156766028" label="PPB_UMA_Private;0.3"/>
+  <int value="162107265" label="PPB_NetworkMonitor;1.0"/>
+  <int value="180906214" label="PPB_Instance_Private;0.1"/>
+  <int value="206043276" label="PPB_CompositorLayer;0.1"/>
+  <int value="221802429" label="PPB_URLUtil(Dev);0.7"/>
+  <int value="225125520" label="PPB_Find(Private);0.3"/>
+  <int value="226206264" label="PPB_FileRef;1.1"/>
+  <int value="229560990" label="PPB_Var(Deprecated);0.3"/>
+  <int value="250764663" label="PPB_Graphics2D(Dev);0.2"/>
+  <int value="320267009" label="PPB_Flash_File_ModuleLocal;3"/>
+  <int value="344923193" label="PPB_CompositorLayer;0.2"/>
+  <int value="348907389" label="PPB_TCPSocket_Private;0.4"/>
+  <int value="382780521" label="PPB_FileRef;1.2"/>
+  <int value="415548516" label="PPB_MessageLoop;1.0"/>
+  <int value="434146763" label="PPB_BrowserFont_Trusted;1.0"/>
+  <int value="495324603" label="PPB_Widget(Dev);0.4"/>
+  <int value="556941117" label="PPB_IMEInputEvent;1.0"/>
+  <int value="588532407" label="PPB_Graphics2D;1.1"/>
+  <int value="596770967" label="PPB_X509Certificate_Private;0.1"/>
+  <int value="612625164" label="PPB_InputEvent;1.0"/>
+  <int value="615811055" label="PPB_Flash_MessageLoop;0.1"/>
+  <int value="617438958" label="PPB_VideoDecoder;1.0"/>
+  <int value="629092173" label="PPB_VideoCapture(Dev);0.3"/>
+  <int value="630100238" label="PPB_AudioBuffer;0.1"/>
+  <int value="631212065" label="PPB_MouseInputEvent;1.0"/>
+  <int value="632306545" label="PPB_FileRef;1.0"/>
+  <int value="656561383" label="PPB_FlashFullscreen;1.0"/>
+  <int value="657117235" label="PPB_Flash_DRM;1.0"/>
+  <int value="668624105" label="PPB_Flash_DeviceID;1.0"/>
+  <int value="706893509" label="PPB_ContentDecryptor_Private;0.11"/>
+  <int value="714324031" label="PPB_Graphics3D;1.0"/>
+  <int value="724664149" label="PPB_Flash_Menu;0.2"/>
+  <int value="732838108" label="PPB_IsolatedFileSystem_Private;0.2"/>
+  <int value="760024173" label="PPB_FileIO;1.0"/>
+  <int value="760246876" label="PPB_OpenGLES2VertexArrayObject;1.0"/>
+  <int value="763746388" label="PPB_NaCl_Private;1.0"/>
+  <int value="772423590" label="PPB_TouchInputEvent;1.0"/>
+  <int value="780912189" label="PPB_Alarms(Dev);0.1"/>
+  <int value="795366801" label="PPB_Trace_Event(Dev);0.2"/>
+  <int value="804011173" label="PPB_Gamepad;1.0"/>
+  <int value="810111568" label="PPB_Messaging;1.0"/>
+  <int value="829878300" label="PPB_TCPSocket;1.0"/>
+  <int value="835840137" label="PPB_WebSocket;1.0"/>
+  <int value="844787073" label="PPB_TextInput(Dev);0.2"/>
+  <int value="856177441" label="PPB_VarArray;1.0"/>
+  <int value="857934187" label="PPB_Ext_Socket(Dev);0.1"/>
+  <int value="866907383" label="PPB_View;1.2"/>
+  <int value="883046945" label="PPB_OpenGLES2ChromiumMapSub;1.0"/>
+  <int value="890225106" label="PPB_FileChooserTrusted;0.6"/>
+  <int value="893629850" label="PPB_VarArrayBuffer;1.0"/>
+  <int value="897332014" label="PPB_Zoom(Dev);0.2"/>
+  <int value="906618937" label="PPB_Find_Private;0.3"/>
+  <int value="910782902" label="PPB_AudioFrame;0.1"/>
+  <int value="913922409" label="PPB_NetworkProxy;1.0"/>
+  <int value="916446405" label="PPB_URLUtil(Dev);0.6"/>
+  <int value="929640141" label="PPB_VideoDestination_Private;0.1"/>
+  <int value="930528031" label="PPB_OpenGLES2DrawBuffers(Dev);1.0"/>
+  <int value="930786862" label="PPB_Flash_Clipboard;5.0"/>
+  <int value="941275733" label="PPB_Flash;12.6"/>
+  <int value="943174056" label="PPB_VideoDecoder;0.2"/>
+  <int value="944161065" label="PPB_Flash_DRM;1.1"/>
+  <int value="946515854" label="PPB_View(Dev);0.1"/>
+  <int value="948969343" label="PPB_OpenGLES2;1.0"/>
+  <int value="961061294" label="PPB_Var;1.2"/>
+  <int value="961317980" label="PPB_Fullscreen;1.0"/>
+  <int value="964595048" label="PPB_BrokerTrusted;0.2"/>
+  <int value="965548627" label="PPB_Audio;1.1"/>
+  <int value="972914533" label="PPB_TextInputController;1.0"/>
+  <int value="997459960" label="PPB_FileChooserTrusted;0.5"/>
+  <int value="1008493701" label="PPB_UDPSocket;1.0"/>
+  <int value="1017579801" label="PPB_OpenGLES2FramebufferBlit;1.0"/>
+  <int value="1032125598" label="PPB_HostResolver;1.0"/>
+  <int value="1032205959" label="PPB_UDPSocket;1.1"/>
+  <int value="1039206341" label="PPB_UDPSocket_Private;0.2"/>
+  <int value="1042058362" label="PPB_Core;1.0"/>
+  <int value="1050892821" label="PPB_OpenGLES2InstancedArrays;1.0"/>
+  <int value="1055791466" label="PPB_CursorControl(Dev);0.4"/>
+  <int value="1065040273" label="PPB_KeyboardInputEvent;1.2"/>
+  <int value="1086644401" label="PPB_Proxy_Private;6"/>
+  <int value="1094761313" label="PPB_URLLoaderTrusted;0.3"/>
+  <int value="1099975614" label="PPB_Flash;12.5"/>
+  <int value="1111997633" label="PPB_AudioInput(Dev);0.4"/>
+  <int value="1155638369" label="PPB_WheelInputEvent;1.0"/>
+  <int value="1161845861" label="PPB_NetAddress_Private;1.0"/>
+  <int value="1173327824" label="PPB_OpenGLES2ChromiumEnableFeature;1.0"/>
+  <int value="1188712923" label="PPB_Talk_Private;2.0"/>
+  <int value="1218354710" label="PPB_VideoFrame;0.1"/>
+  <int value="1260990020" label="PPB_Ext_Socket(Dev);0.2"/>
+  <int value="1262240942" label="PPB_FileIO;1.1"/>
+  <int value="1262834677" label="PPB_CameraDevice_Private;0.1"/>
+  <int value="1272679676" label="PPB_TCPSocket_Private;0.5"/>
+  <int value="1296231808" label="PPB_VideoDecoder;0.1"/>
+  <int value="1304992407" label="PPB_UDPSocket;1.2"/>
+  <int value="1316246754" label="PPB_KeyboardInputEvent;1.0"/>
+  <int value="1316320941" label="PPB_Graphics2D(Dev);0.1"/>
+  <int value="1321620067" label="PPB_Instance;1.0"/>
+  <int value="1328369437" label="PPB_Talk_Private;1.0"/>
+  <int value="1337084425" label="PPB_View;1.0"/>
+  <int value="1354526686" label="PPB_FileIO_Private;0.1"/>
+  <int value="1357207230" label="PPB_DeviceRef(Dev);0.1"/>
+  <int value="1358195444" label="PPB_CharSet_Trusted;1.0"/>
+  <int value="1360443600" label="PPB_OpenGLES2FramebufferMultisample;1.0"/>
+  <int value="1374404330" label="PPB_BrokerTrusted;0.3"/>
+  <int value="1374976378" label="PPB_OpenGLES2Query;1.0"/>
+  <int value="1423820530" label="PPB_ContentDecryptor_Private;0.14"/>
+  <int value="1437724812" label="PPB_AudioConfig;1.0"/>
+  <int value="1443771913" label="PPB_NetAddress;1.0"/>
+  <int value="1502481774" label="PPB_OpenGLES2ChromiumMapSub(Dev);1.0"/>
+  <int value="1504691399" label="PPB_Flash;13.0"/>
+  <int value="1505595424" label="PPB_Crypto(Dev);0.1"/>
+  <int value="1508192415" label="PPB_VarDictionary;1.0"/>
+  <int value="1519132417" label="PPB_FileSystem;1.0"/>
+  <int value="1520420939" label="PPB_MouseCursor;1.0"/>
+  <int value="1528832860" label="PPB_FileChooser(Dev);0.6"/>
+  <int value="1534600005" label="PPB_AudioEncoder;0.1"/>
+  <int value="1577776196" label="PPB_InputEvent_Private;0.1"/>
+  <int value="1616589391" label="PPB_TCPServerSocket_Private;0.2"/>
+  <int value="1641037564" label="PPB_VideoSource_Private;0.1"/>
+  <int value="1645591549" label="PPB_Widget(Dev);0.3"/>
+  <int value="1659973365" label="PPB_ImageCapture_Private;0.1"/>
+  <int value="1665257952" label="PPB_VideoDecoder;1.1"/>
+  <int value="1677958987" label="PPB_ImageData;1.0"/>
+  <int value="1680873803" label="PPB_Console;1.0"/>
+  <int value="1681523535" label="PPB_TCPSocket;1.2"/>
+  <int value="1703245231" label="PPB_NetworkList;1.0"/>
+  <int value="1714657156" label="PPB_MediaStreamAudioTrack;0.1"/>
+  <int value="1721408268" label="PPB_URLLoader;1.0"/>
+  <int value="1735606779" label="PPB_VideoEncoder;0.1"/>
+  <int value="1753813390" label="PPB_Flash_Clipboard;4.0"/>
+  <int value="1773992510" label="PPB_PDF;1"/>
+  <int value="1775059283" label="PPB_Flash_FontFile;0.1"/>
+  <int value="1779899536" label="PPB_Flash_Print;1.0"/>
+  <int value="1821321578" label="PPB_UMA_Private;0.2"/>
+  <int value="1822250569" label="PPB_Trace_Event(Dev);0.1"/>
+  <int value="1827038364" label="PPB_DisplayColorProfile_Private;0.1"/>
+  <int value="1838344955" label="PPB_Flash;12.4"/>
+  <int value="1845295664" label="PPB_Ext_CrxFileSystem_Private;0.1"/>
+  <int value="1866591098" label="PPB_FileRefPrivate;0.1"/>
+  <int value="1870131254" label="PPB_MouseLock;1.0"/>
+  <int value="1930785273" label="PPB_Var;1.0"/>
+  <int value="1944731926" label="PPB_URLRequestInfo;1.0"/>
+  <int value="1955790313" label="PPB_MediaStreamVideoTrack;0.1"/>
+  <int value="1970082102" label="PPB_TCPServerSocket_Private;0.1"/>
+  <int value="1978180250" label="PPB_Flash_Clipboard;5.1"/>
+  <int value="1980463089" label="PPB_View;1.1"/>
+  <int value="1981643755" label="PPB_FileMapping;0.1"/>
+  <int value="1990584694" label="PPB_VpnProvider;0.1"/>
+  <int value="1994108724" label="PPB_Flash_File_FileRef;2"/>
+  <int value="1997668256" label="PPB_GLESChromiumTextureMapping(Dev);0.1"/>
+  <int value="1998274350" label="PPB_Font(Dev);0.6"/>
+  <int value="2001322203" label="PPB_Messaging;1.1"/>
+  <int value="2003778556" label="PPB_MouseInputEvent;1.1"/>
+  <int value="2005291722" label="PPB_NetAddress_Private;1.1"/>
+  <int value="2012645499" label="PPB_Find(Dev);0.3"/>
+  <int value="2019398562" label="PPB_TCPSocket_Private;0.3"/>
+  <int value="2023751176" label="PPB_Printing(Dev);0.7"/>
+  <int value="2024537413" label="PPB_Graphics2D;1.0"/>
+  <int value="2026777995" label="PPB_VideoDecoder(Dev);0.16"/>
+  <int value="2027770764" label="PPB_UDPSocket_Private;0.3"/>
+  <int value="2031327332" label="PPB_TextInput(Dev);0.1"/>
+  <int value="2056532375" label="PPB_Audio;1.0"/>
+  <int value="2062775054" label="PPB_IMEInputEvent(Dev);0.1"/>
+  <int value="2070539867" label="PPB_ContentDecryptor_Private;0.13"/>
+  <int value="2070630224" label="PPB_AudioInput(Dev);0.3"/>
+  <int value="2095945999" label="PPB_NetAddress_Private;0.1"/>
+  <int value="2098849894" label="PPB_ContentDecryptor_Private;0.10"/>
+  <int value="2123225074" label="PPB_HostResolver_Private;0.1"/>
+  <int value="2126196629" label="PPB_UDPSocket_Private;0.4"/>
+</enum>
+
+<enum name="PermissionAction" type="int">
+  <int value="0" label="GRANTED"/>
+  <int value="1" label="DENIED"/>
+  <int value="2" label="DISMISSED"/>
+  <int value="3" label="IGNORED"/>
+  <int value="4" label="REVOKED"/>
+</enum>
+
+<enum name="PermissionRequestType" type="int">
+  <int value="0" label="PERMISSION_BUBBLE_UNKNOWN"/>
+  <int value="1" label="PERMISSION_BUBBLE_MULTIPLE"/>
+  <int value="2" label="PERMISSION_BUBBLE_UNUSED_PERMISSION"/>
+  <int value="3" label="PERMISSION_BUBBLE_QUOTA"/>
+  <int value="4" label="PERMISSION_BUBBLE_DOWNLOAD"/>
+  <int value="5" label="PERMISSION_BUBBLE_MEDIA_STREAM"/>
+  <int value="6" label="PERMISSION_BUBBLE_REGISTER_PROTOCOL_HANDLER"/>
+  <int value="7" label="PERMISSION_BUBBLE_PERMISSION_GEOLOCATION"/>
+  <int value="8" label="PERMISSION_BUBBLE_PERMISSION_MIDI_SYSEX"/>
+  <int value="9" label="PERMISSION_BUBBLE_PERMISSION_NOTIFICATIONS"/>
+  <int value="10"
+      label="PERMISSION_BUBBLE_PERMISSION_PROTECTED_MEDIA_IDENTIFIER"/>
+  <int value="11" label="PERMISSION_BUBBLE_PERMISSION_PUSH_MESSAGING"/>
+</enum>
+
+<enum name="PermissionStatus" type="int">
+  <int value="0" label="PERMISSION_STATUS_GRANTED"/>
+  <int value="1" label="PERMISSION_STATUS_DENIED"/>
+  <int value="2" label="PERMISSION_STATUS_ASK"/>
+</enum>
+
+<enum name="PermissionType" type="int">
+  <int value="0" label="PERMISSION_UNKNOWN"/>
+  <int value="1" label="PERMISSION_MIDI_SYSEX"/>
+  <int value="2" label="PERMISSION_PUSH_MESSAGING"/>
+  <int value="3" label="PERMISSION_NOTIFICATIONS"/>
+  <int value="4" label="PERMISSION_GEOLOCATION"/>
+  <int value="5" label="PERMISSION_PROTECTED_MEDIA_IDENTIFIER"/>
+  <int value="6" label="PERMISSION_MIDI"/>
+  <int value="7" label="PERMISSION_DURABLE_STORAGE"/>
+  <int value="8" label="PERMISSION_AUDIO_CAPTURE"/>
+  <int value="9" label="PERMISSION_VIDEO_CAPTURE"/>
+  <int value="10" label="PERMISSION_BACKGROUND_SYNC"/>
+  <int value="11" label="PERMISSION_FLASH"/>
+</enum>
+
+<enum name="PersistentHistogramsInitResult" type="int">
+  <int value="0" label="Local-Memory Success"/>
+  <int value="1" label="Local-Memory Failure"/>
+  <int value="2" label="Mapped-File Success"/>
+  <int value="3" label="Mapped-File Failure"/>
+</enum>
+
+<enum name="PhotoEditorFileType" type="int">
+  <int value="0" label="jpg"/>
+  <int value="1" label="png"/>
+  <int value="2" label="gif"/>
+  <int value="3" label="bmp"/>
+  <int value="4" label="webp"/>
+  <int value="5" label="other"/>
+</enum>
+
+<enum name="PhotoEditorLoadMode" type="int">
+  <int value="0" label="From full resolution cache"/>
+  <int value="1" label="From screen resolution cache"/>
+  <int value="2" label="From file"/>
+  <int value="3" label="Other"/>
+</enum>
+
+<enum name="PhotoEditorSaveResult" type="int">
+  <int value="0" label="Failure"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="Other"/>
+</enum>
+
+<enum name="PhotoEditorToolType" type="int">
+  <int value="0" label="Auto-fix"/>
+  <int value="1" label="Crop"/>
+  <int value="2" label="Brightness"/>
+  <int value="3" label="Rotate left"/>
+  <int value="4" label="Rotate right"/>
+  <int value="5" label="Rotate undo"/>
+  <int value="6" label="Rotate redo"/>
+  <int value="7" label="Share"/>
+  <int value="8" label="Other"/>
+</enum>
+
+<enum name="PhysicalWebActivityReferer" type="int">
+  <int value="0" label="REFERER_UNDEFINED"/>
+  <int value="1" label="REFERER_NOTIFICATION"/>
+  <int value="2" label="REFERER_OPTIN"/>
+  <int value="3" label="REFERER_PREFERENCE"/>
+  <int value="4" label="REFERER_DIAGNOSTICS"/>
+</enum>
+
+<enum name="PhysicalWebPreferenceStatus" type="int">
+  <int value="0" label="OFF"/>
+  <int value="1" label="ON"/>
+  <int value="2" label="ONBOARDING"/>
+</enum>
+
+<enum name="PingResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Response started"/>
+  <int value="2" label="Timed out"/>
+  <int value="3" label="Canceled"/>
+  <int value="4" label="Failed"/>
+  <int value="5" label="Uncompleted"/>
+</enum>
+
+<enum name="PipelineStatus" type="int">
+  <int value="0" label="PIPELINE_OK"/>
+  <int value="1" label="PIPELINE_ERROR_URL_NOT_FOUND"/>
+  <int value="2" label="PIPELINE_ERROR_NETWORK"/>
+  <int value="3" label="PIPELINE_ERROR_DECODE"/>
+  <int value="5" label="PIPELINE_ERROR_ABORT"/>
+  <int value="6" label="PIPELINE_ERROR_INITIALIZATION_FAILED"/>
+  <int value="7" label="PIPELINE_ERROR_REQUIRED_FILTER_MISSING"/>
+  <int value="8" label="PIPELINE_ERROR_COULD_NOT_RENDER"/>
+  <int value="9" label="PIPELINE_ERROR_READ"/>
+  <int value="10" label="PIPELINE_ERROR_OPERATION_PENDING"/>
+  <int value="11" label="PIPELINE_ERROR_INVALID_STATE"/>
+  <int value="12" label="DEMUXER_ERROR_COULD_NOT_OPEN"/>
+  <int value="13" label="DEMUXER_ERROR_COULD_NOT_PARSE"/>
+  <int value="14" label="DEMUXER_ERROR_NO_SUPPORTED_STREAMS"/>
+  <int value="15" label="DECODER_ERROR_NOT_SUPPORTED"/>
+  <int value="16" label="CHUNK_DEMUXER_ERROR_APPEND_FAILED"/>
+  <int value="17" label="CHUNK_DEMUXER_ERROR_EOS_STATUS_DECODE_ERROR"/>
+  <int value="18" label="CHUNK_DEMUXER_ERROR_EOS_STATUS_NETWORK_ERROR"/>
+  <int value="19" label="AUDIO_RENDERER_ERROR"/>
+  <int value="20" label="AUDIO_RENDERER_ERROR_SPLICE_FAILED"/>
+</enum>
+
+<enum name="Platform.BootMode.FirmwareWriteProtect" type="int">
+  <int value="0" label="Off"/>
+  <int value="1" label="On"/>
+  <int value="2" label="Zero length range"/>
+  <int value="3" label="Error"/>
+</enum>
+
+<enum name="Platform.BootMode.SwitchStatus" type="int">
+  <int value="0" label="Off"/>
+  <int value="1" label="On"/>
+  <int value="2" label="Error"/>
+</enum>
+
+<enum name="PlatformFileError" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="FAILED"/>
+  <int value="2" label="IN_USE"/>
+  <int value="3" label="EXISTS"/>
+  <int value="4" label="NOT_FOUND"/>
+  <int value="5" label="ACCESS_DENIED"/>
+  <int value="6" label="TOO_MANY_OPENED"/>
+  <int value="7" label="NO_MEMORY"/>
+  <int value="8" label="NO_SPACE"/>
+  <int value="9" label="NOT_A_DIRECTORY"/>
+  <int value="10" label="INVALID_OPERATION"/>
+  <int value="11" label="SECURITY"/>
+  <int value="12" label="ABORT"/>
+  <int value="13" label="NOT_A_FILE"/>
+  <int value="14" label="NOT_EMPTY"/>
+  <int value="15" label="INVALID_URL"/>
+  <int value="16" label="I/O"/>
+</enum>
+
+<enum name="PlatformNotificationStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Service Worker not found"/>
+  <int value="2" label="Service Worker error"/>
+  <int value="3" label="event.waitUntil promise rejected"/>
+  <int value="4" label="Database error"/>
+</enum>
+
+<enum name="PlatformStateStoreLoadResult" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="CLEARED_DATA">
+    Platform data cleared for new profile.
+  </int>
+  <int value="2" label="CLEARED_NO_DATA">
+    Empty platform data cleared for new profile.
+  </int>
+  <int value="3" label="DATA_CLEAR_FAILED">
+    Failed to clear data for new profile.
+  </int>
+  <int value="4" label="OPEN_FAILED">Failed to open data store.</int>
+  <int value="5" label="READ_FAILED">Failed to read from data store.</int>
+  <int value="6" label="PARSE_ERROR">Data could not be parsed.</int>
+</enum>
+
+<enum name="PluginAvailabilityStatus" type="int">
+  <int value="0" label="PLUGIN_NOT_REGISTERED"/>
+  <int value="1" label="PLUGIN_AVAILABLE"/>
+  <int value="2" label="PLUGIN_DISABLED"/>
+</enum>
+
+<enum name="PluginGroup" type="int">
+  <int value="0" label="Other Plugin"/>
+  <int value="1" label="Adobe Reader"/>
+  <int value="2" label="Java"/>
+  <int value="3" label="Quicktime"/>
+  <int value="4" label="Shockwave"/>
+  <int value="5" label="Real Player"/>
+  <int value="6" label="Silverlight"/>
+  <int value="7" label="Windows Media Player"/>
+  <int value="8" label="Google Talk"/>
+  <int value="9" label="Google Earth"/>
+</enum>
+
+<enum name="PluginListError" type="int">
+  <int value="0" label="NoError"/>
+  <int value="1" label="JsonInvalidEscape"/>
+  <int value="2" label="JsonSyntaxError"/>
+  <int value="3" label="JsonUnexpectedToken"/>
+  <int value="4" label="JsonTrailingComma"/>
+  <int value="5" label="JsonTooMuchNesting"/>
+  <int value="6" label="JsonUnexpectedDataAfterRoot"/>
+  <int value="7" label="JsonUnsupportedEncoding"/>
+  <int value="8" label="JsonUnquotedDictionaryKey"/>
+  <int value="9" label="SchemaError"/>
+</enum>
+
+<enum name="PluginLoadResult" type="int">
+  <int value="0" label="LOAD_SUCCESS"/>
+  <int value="1" label="LOAD_FAILED"/>
+  <int value="2" label="ENTRY_POINT_MISSING"/>
+  <int value="3" label="INIT_FAILED"/>
+  <int value="4" label="FILE_MISSING"/>
+</enum>
+
+<enum name="PluginPowerSaverPeripheralHeuristicDecision" type="int">
+  <int value="0" label="Peripheral"/>
+  <int value="1" label="Essential Same-Origin"/>
+  <int value="2" label="Essential Cross-Origin Big"/>
+  <int value="3" label="Essential Cross-Origin Whitelisted"/>
+  <int value="4" label="Essential Cross-Origin Tiny"/>
+  <int value="5" label="Essential Unknown Size"/>
+</enum>
+
+<enum name="PluginPowerSaverPosterParamPresence" type="int">
+  <int value="0" label="No poster param. Plugin power saver disabled."/>
+  <int value="1" label="No poster param. Plugin power saver enabled."/>
+  <int value="2" label="Poster param exists. Plugin power saver disabled."/>
+  <int value="3" label="Poster param exists. Plugin power saver enabled."/>
+</enum>
+
+<enum name="PluginPowerSaverUnthrottleMethod" type="int">
+  <int value="0" label="Never Unthrottled"/>
+  <int value="1" label="Unthrottled by Click"/>
+  <int value="2" label="Unthrottled by Retroactive Whitelist"/>
+  <int value="3" label="Unthrottled by Audio Playback"/>
+  <int value="4" label="Unthrottled by Size Change"/>
+  <int value="5" label="Unthrottled by Omnibox icon"/>
+</enum>
+
+<enum name="PNaClOptionsOptLevelEnum" type="int">
+  <int value="0" label="0"/>
+  <int value="1" label="1"/>
+  <int value="2" label="2"/>
+  <int value="3" label="3"/>
+  <int value="4" label="Default / Unknown"/>
+</enum>
+
+<enum name="PNaClTranslationCacheEnum" type="int">
+  <int value="0" label="Miss"/>
+  <int value="1" label="Hit"/>
+</enum>
+
+<enum name="PointerSensitivity" type="int">
+  <int value="1" label="1"/>
+  <int value="2" label="2"/>
+  <int value="3" label="3"/>
+  <int value="4" label="4"/>
+  <int value="5" label="5"/>
+</enum>
+
+<enum name="PolicyLoadStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="No Policy File"/>
+  <int value="2" label="Load Error"/>
+</enum>
+
+<enum name="PolicyValidationStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Bad Initial Signature"/>
+  <int value="2" label="Bad Signature"/>
+  <int value="3" label="Policy Error Code"/>
+  <int value="4" label="Payload Parse Error"/>
+  <int value="5" label="Wrong Policy Type"/>
+  <int value="6" label="Wrong Settings Entity ID"/>
+  <int value="7" label="Bad Timestamp"/>
+  <int value="8" label="Wrong Token"/>
+  <int value="9" label="Wrong Username"/>
+  <int value="10" label="Policy Parse Error"/>
+  <int value="11" label="Bad Key Validation Signature"/>
+</enum>
+
+<enum name="Ports" type="int">
+  <int value="80" label="Port 80"/>
+  <int value="443" label="Port 443"/>
+</enum>
+
+<enum name="PostMergeVerificationOutcome" type="int">
+  <int value="0" label="Undefined"/>
+  <int value="1" label="Succeeded"/>
+  <int value="2" label="No accounts found"/>
+  <int value="3" label="Missing primary account"/>
+  <int value="4" label="Primary account is not the first"/>
+  <int value="5" label="Verification failed"/>
+  <int value="6" label="Connection failed"/>
+  <int value="7" label="Overflow"/>
+</enum>
+
+<enum name="PostSubmitNavigation" type="int">
+  <int value="0" label="Same domain"/>
+  <int value="1" label="Different domain"/>
+</enum>
+
+<enum name="PowerBrightnessAdjust" type="int">
+  <int value="0" label="Brightness Down"/>
+  <int value="1" label="Brightness Up"/>
+  <int value="2" label="Brightness Absolute"/>
+</enum>
+
+<enum name="PowerChargerType" type="int">
+  <int value="0" label="Unknown charger"/>
+  <int value="1" label="MAINS charger"/>
+  <int value="2" label="USB Charger"/>
+  <int value="3" label="Unconfirmed Spring Charger"/>
+  <int value="4" label="Safe Spring Charger"/>
+</enum>
+
+<enum name="PowerwashDialogViewType" type="int">
+  <int value="0" label="Invoked on settings page"/>
+  <int value="1" label="Shortcut. Confirmation for powerwash only."/>
+  <int value="2" label="Shortcut. Confirmation for powerwash and rollback."/>
+  <int value="3" label="Shortcut. Offer. Rollback unavailable."/>
+  <int value="4" label="Shortcut. Offer. Rollback available."/>
+  <int value="5" label="Shortcut. Restart required."/>
+</enum>
+
+<enum name="PrecacheEvents" type="int">
+  <int value="0" label="PRECACHE_TASK_STARTED_PERIODIC"/>
+  <int value="1" label="PRECACHE_TASK_STARTED_ONEOFF"/>
+  <int value="2" label="PRECACHE_TASK_STARTED_DUPLICATE"/>
+  <int value="3" label="PRECACHE_TASK_LOAD_LIBRARY_FAIL"/>
+  <int value="4" label="PRECACHE_CANCEL_NO_UNMETERED_NETWORK"/>
+  <int value="5" label="PRECACHE_CANCEL_NO_POWER"/>
+  <int value="6" label="PRECACHE_CANCEL_DISABLED_PREF"/>
+  <int value="7" label="DISABLED_IN_PRECACHE_PREF"/>
+  <int value="8" label="SYNC_SERVICE_TIMEOUT"/>
+  <int value="9" label="PRECACHE_SESSION_TIMEOUT"/>
+  <int value="10" label="PRECACHE_SESSION_STARTED"/>
+  <int value="11" label="PERIODIC_TASK_SCHEDULE_BOOT_SIGNAL"/>
+  <int value="12" label="PERIODIC_TASK_SCHEDULE_BOOT_SIGNAL_FAIL"/>
+  <int value="13" label="PERIODIC_TASK_SCHEDULE_UPGRADE"/>
+  <int value="14" label="PERIODIC_TASK_SCHEDULE_UPGRADE_FAIL"/>
+  <int value="15" label="ONEOFF_TASK_SCHEDULE"/>
+  <int value="16" label="ONEOFF_TASK_SCHEDULE_FAIL"/>
+  <int value="17" label="PRECACHE_SESSION_COMPLETE"/>
+  <int value="18" label="PRECACHE_SESSION_INCOMPLETE"/>
+</enum>
+
+<enum name="PreconnectedNavigation" type="int">
+  <int value="0" label="No recent pre-connect to the page"/>
+  <int value="1" label="Page nav. preceded by a pre-connect"/>
+</enum>
+
+<enum name="PreconnectMotivation" type="int">
+  <int value="0" label="MOUSE_OVER_MOTIVATED"/>
+  <int value="1" label="PAGE_SCAN_MOTIVATED"/>
+  <int value="2" label="UNIT_TEST_MOTIVATED"/>
+  <int value="3" label="LINKED_MAX_MOTIVATED"/>
+  <int value="4" label="OMNIBOX_MOTIVATED"/>
+  <int value="5" label="STARTUP_LIST_MOTIVATED"/>
+  <int value="6" label="EARLY_LOAD_MOTIVATED"/>
+  <int value="7" label="NO_PREFETCH_MOTIVATION"/>
+  <int value="8" label="STATIC_REFERAL_MOTIVATED"/>
+  <int value="9" label="LEARNED_REFERAL_MOTIVATED"/>
+  <int value="10" label="SELF_REFERAL_MOTIVATED"/>
+</enum>
+
+<enum name="PreconnectSubresourceEval" type="int">
+  <int value="0" label="PRECONNECTION"/>
+  <int value="1" label="PRERESOLUTION"/>
+  <int value="2" label="TOO_NEW"/>
+</enum>
+
+<enum name="PreconnectTriggerUsed" type="int">
+  <int value="0" label="The pre-connect triggered host was not accessed"/>
+  <int value="1" label="The pre-connect triggered host was accessed"/>
+</enum>
+
+<enum name="PredictionStatus" type="int">
+  <int value="0" label="No prediction"/>
+  <int value="1" label="Successful prediction"/>
+  <int value="2" label="Wrong prediction"/>
+</enum>
+
+<enum name="PrefetchStatus" type="int">
+  <int value="0" label="undefined"/>
+  <int value="1" label="success from cache"/>
+  <int value="2" label="success from network"/>
+  <int value="3" label="canceled in-flight"/>
+  <int value="4" label="success already prefetched"/>
+</enum>
+
+<enum name="PrefHashStoreVersion" type="int">
+  <int value="0" label="VERSION_UNINITIALIZED"/>
+  <int value="1" label="VERSION_PRE_MIGRATION"/>
+  <int value="2" label="VERSION_LATEST"/>
+</enum>
+
+<enum name="PrerenderCookieSendType" type="int">
+  <obsolete>
+    Deprecated March 13 2015.
+  </obsolete>
+  <int value="0" label="no cookies sent"/>
+  <int value="1" label="first party cookies sent"/>
+  <int value="2" label="third party cookies sent"/>
+  <int value="3" label="third party cookies sent for blocking resource"/>
+</enum>
+
+<enum name="PrerenderCookieStatus" type="int">
+  <obsolete>
+    Deprecated March 13 2015.
+  </obsolete>
+  <int value="0" label="no action"/>
+  <int value="1" label="[main frame send]"/>
+  <int value="2" label="[main frame change]"/>
+  <int value="3" label="[main frame send, main frame change]"/>
+  <int value="4" label="[other send]"/>
+  <int value="5" label="[main frame send, other send]"/>
+  <int value="6" label="[main frame change, other send]"/>
+  <int value="7" label="[main frame send, main frame change, other send]"/>
+  <int value="8" label="[other change]"/>
+  <int value="9" label="[main frame send, other change]"/>
+  <int value="10" label="[main frame change, other change]"/>
+  <int value="11" label="[main frame send, main frame change, other change]"/>
+  <int value="12" label="[other send, other change]"/>
+  <int value="13" label="[main frame send, other send, other change]"/>
+  <int value="14" label="[main frame change, other send, other change]"/>
+  <int value="15"
+      label="[main frame send, main frame change, other send, other change]"/>
+</enum>
+
+<enum name="PrerenderEvent" type="int">
+  <obsolete>
+    Deprecated Dec 12 2014.
+  </obsolete>
+  <int value="0" label="Swapin no delegate"/>
+  <int value="1" label="Swapin candidate"/>
+  <int value="2" label="Swapin candidate namespace matces"/>
+  <int value="3" label="Swapin no merge pending"/>
+  <int value="4" label="Swapin merging disabled"/>
+  <int value="5" label="Swapin issuing merge"/>
+  <int value="6" label="Merge for swapin candidate"/>
+  <int value="7" label="Merge result no pending swapin"/>
+  <int value="8" label="Merge result timeout cb"/>
+  <int value="9" label="Merge result result cb"/>
+  <int value="10" label="Merge result timed out"/>
+  <int value="11" label="Merge result merge done"/>
+  <int value="12" label="Merge result: namespace not found"/>
+  <int value="13" label="Merge result: namespace not alias"/>
+  <int value="14" label="Merge result: not logging"/>
+  <int value="15" label="Merge result: no transactions"/>
+  <int value="16" label="Merge result: too many transactions"/>
+  <int value="17" label="Merge result: not mergeable"/>
+  <int value="18" label="Merge result: mergeable"/>
+  <int value="19" label="Merge result merge failed"/>
+  <int value="20" label="Merge result swapping in"/>
+  <int value="21" label="Merge result swapin successful"/>
+  <int value="22" label="Merge result swapin failed"/>
+</enum>
+
+<enum name="PrerenderFinalStatus" type="int">
+  <int value="0" label="USED"/>
+  <int value="1" label="TIMED_OUT"/>
+  <int value="2" label="EVICTED"/>
+  <int value="3" label="MANAGER_SHUTDOWN"/>
+  <int value="4" label="CLOSED"/>
+  <int value="5" label="CREATE_NEW_WINDOW"/>
+  <int value="6" label="PROFILE_DESTROYED"/>
+  <int value="7" label="APP_TERMINATING"/>
+  <int value="8" label="JAVASCRIPT_ALERT"/>
+  <int value="9" label="AUTH_NEEDED"/>
+  <int value="10" label="HTTPS"/>
+  <int value="11" label="DOWNLOAD"/>
+  <int value="12" label="MEMORY_LIMIT_EXCEEDED"/>
+  <int value="13" label="JS_OUT_OF_MEMORY"/>
+  <int value="14" label="RENDERER_UNRESPONSIVE"/>
+  <int value="15" label="TOO_MANY_PROCESSES"/>
+  <int value="16" label="RATE_LIMIT_EXCEEDED"/>
+  <int value="17" label="PENDING_SKIPPED"/>
+  <int value="18" label="CONTROL_GROUP"/>
+  <int value="19" label="HTML5_MEDIA"/>
+  <int value="20" label="SOURCE_RENDER_VIEW_CLOSED"/>
+  <int value="21" label="RENDERER_CRASHED"/>
+  <int value="22" label="UNSUPPORTED_SCHEME"/>
+  <int value="23" label="INVALID_HTTP_METHOD"/>
+  <int value="24" label="WINDOW_PRINT"/>
+  <int value="25" label="RECENTLY_VISITED"/>
+  <int value="26" label="WINDOW_OPENER"/>
+  <int value="27" label="PAGE_ID_CONFLICT"/>
+  <int value="28" label="SAFE_BROWSING"/>
+  <int value="29" label="FRAGMENT_MISMATCH"/>
+  <int value="30" label="SSL_CLIENT_CERTIFICATE_REQUESTED"/>
+  <int value="31" label="CACHE_OR_HISTORY_CLEARED"/>
+  <int value="32" label="CANCELLED"/>
+  <int value="33" label="SSL_ERROR"/>
+  <int value="34" label="CROSS_SITE_NAVIGATION_PENDING"/>
+  <int value="35" label="DEVTOOLS_ATTACHED"/>
+  <int value="36" label="SESSION_STORAGE_NAMESPACE_MISMATCH"/>
+  <int value="37" label="NO_USE_GROUP"/>
+  <int value="38" label="MATCH_COMPLETE_DUMMY"/>
+  <int value="39" label="DUPLICATE"/>
+  <int value="40" label="OPEN_URL"/>
+  <int value="41" label="WOULD_HAVE_BEEN_USED"/>
+  <int value="42" label="REGISTER_PROTOCOL_HANDLER"/>
+  <int value="43" label="CREATING_AUDIO_STREAM"/>
+  <int value="44" label="PAGE_BEING_CAPTURED"/>
+  <int value="45" label="BAD_DEFERRED_REDIRECT"/>
+  <int value="46" label="NAVIGATION_UNCOMMITTED"/>
+  <int value="47" label="NEW_NAVIGATION_ENTRY"/>
+  <int value="48" label="COOKIE_STORE_NOT_LOADED"/>
+  <int value="49" label="COOKIE_CONFLICT"/>
+  <int value="50" label="NON_EMPTY_BROWSING_INSTANCE"/>
+  <int value="51" label="NAVIGATION_INTERCEPTED"/>
+  <int value="52" label="PRERENDERING_DISABLED"/>
+  <int value="53" label="CELLULAR_NETWORK"/>
+  <int value="54" label="BLOCK_THIRD_PARTY_COOKIES"/>
+  <int value="55" label="CREDENTIAL_MANAGER_API"/>
+  <int value="56" label="NOSTATE_PREFETCH_FINISHED"/>
+</enum>
+
+<enum name="PrerenderHoverEvent" type="int">
+  <obsolete>
+    deprecated May 10 2012
+  </obsolete>
+  <int value="0" label="HOVER_EVENT_START"/>
+  <int value="1" label="HOVER_EVENT_TOO_SHORT"/>
+  <int value="2" label="HOVER_EVENT_REPLACED"/>
+  <int value="3" label="HOVER_EVENT_CLICK"/>
+</enum>
+
+<enum name="PrerenderLocalPredictorEvents" type="int">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <int value="0" label="Constructed"/>
+  <int value="1" label="Init scheduled"/>
+  <int value="2" label="Init started"/>
+  <int value="3" label="Init failed: no history"/>
+  <int value="4" label="Init succeeded"/>
+  <int value="5" label="AddVisit"/>
+  <int value="6" label="AddVisit initialized"/>
+  <int value="7" label="AddVisit prerender identified"/>
+  <int value="8" label="AddVisit relevant transition"/>
+  <int value="9" label="AddVisit identified prerender candidate"/>
+  <int value="10" label="AddVisit prerendering"/>
+  <int value="11" label="Got prerender url"/>
+  <int value="12" label="Error: no prerender url for PLT"/>
+  <int value="13" label="AddVisit prerender rextended"/>
+  <int value="14" label="URL lookup result"/>
+  <int value="15" label="URL lookup result: root page"/>
+  <int value="16" label="URL lookup result: http"/>
+  <int value="17" label="URL lookup result: has query string"/>
+  <int value="18" label="URL lookup result: contains logout"/>
+  <int value="19" label="URL lookup result: contians login"/>
+  <int value="20" label="Start url lookup"/>
+  <int value="21" label="AddVisit not root page"/>
+  <int value="22" label="Whitelist error"/>
+  <int value="23" label="Whitelist ok"/>
+  <int value="24" label="URL lookup result: on whitelist"/>
+  <int value="25" label="URL lookup result: on whitelist root page"/>
+  <int value="26" label="URL lookup result: extended root page"/>
+  <int value="27" label="URL lookup result: root page http"/>
+  <int value="28" label="URL lookup failed"/>
+  <int value="29" label="URL lookup no source webcontents found"/>
+  <int value="30" label="URL lookup no logged in table found"/>
+  <int value="31" label="URL lookup issuing logged in lookup"/>
+  <int value="32" label="Continue prerender check started"/>
+  <int value="33" label="Continue prerender check no url"/>
+  <int value="34" label="Continue prerender check priority too low"/>
+  <int value="35" label="Continue prerender check urls identical but fragemet"/>
+  <int value="36" label="Continue prerender check https"/>
+  <int value="37" label="Continue prerender check root page"/>
+  <int value="38" label="Continue prerender check logout url"/>
+  <int value="39" label="Continue prerender check login url"/>
+  <int value="40" label="Continue prerender check not logged in"/>
+  <int value="41" label="Continue prerender check fallthrough no prerender"/>
+  <int value="42" label="Continue prerender check issuing prerender"/>
+  <int value="43" label="Issuing prerender"/>
+  <int value="44" label="No prerender candidates"/>
+  <int value="45" label="Got history issuing lookup"/>
+  <int value="46" label="Tab Helper URL seen"/>
+  <int value="47" label="Tab Helper URL seen match"/>
+  <int value="48" label="Tab Helper URL seen namespace match"/>
+  <int value="49" label="URL lookup multiple source webcontents"/>
+  <int value="50" label="Continue prerender check side-effect free whitelist"/>
+  <int value="51" label="Continue prerender check Examine next URL"/>
+  <int value="52" label="Issuing prerender, already prerendering"/>
+  <int value="53" label="Issuing prerender, new prerender"/>
+  <int value="54" label="Issuing prerender, cancelled old prerender"/>
+  <int value="55" label="Continue prerender check fallthrough prerendering"/>
+  <int value="56" label="URL lookup success"/>
+  <int value="57" label="Prerender Service disabled"/>
+  <int value="58" label="Prerender Service issued lookup"/>
+  <int value="59" label="Prerender Service lookup timed out"/>
+  <int value="60" label="Prerender Service received result"/>
+  <int value="61" label="Prerender Service no record for result"/>
+  <int value="62" label="Prerender Service parsed correctly"/>
+  <int value="63" label="Prerender Service parse error"/>
+  <int value="64" label="Prerender Service parse error incorrect JSON"/>
+  <int value="65" label="Prerender Service hinting timed out"/>
+  <int value="66" label="Prerender Service hinting url lookup timed out"/>
+  <int value="67" label="Prerender Service candidate url lookup timed out"/>
+  <int value="68" label="Continue prerender check service whitelist"/>
+  <int value="69" label="Continue prerender check next URL local"/>
+  <int value="70" label="Continue prerender check next URL service"/>
+  <int value="71" label="AddVisit relevant transition repeat URL"/>
+  <int value="72" label="AddVisit relevant transition new URL"/>
+  <int value="73" label="Tab Helper namespace mismatch: no namespace"/>
+  <int value="74" label="Tab Helper namespace mismatch: merge issued"/>
+  <int value="75" label="Namespace mismatch: merge result received"/>
+  <int value="76" label="Namespace mismatch: merge result namespace not found"/>
+  <int value="77" label="Namespace mismatch: merge result not logging"/>
+  <int value="78" label="Namespace mismatch: merge result no transactions"/>
+  <int value="79"
+      label="Namespace mismatch: merge result too many transactions"/>
+  <int value="80" label="Namespace mismatch: merge result not mergeable"/>
+  <int value="81" label="Namespace mismatch: merge result mergeable"/>
+  <int value="82" label="Init failed unencrypted sync not enabled"/>
+  <int value="83" label="Continue prerender check next URL not skipped"/>
+  <int value="84" label="Prerender Service returned hinting candidates"/>
+  <int value="85" label="Namespace mismatch: merge result namespace not alias"/>
+  <int value="86" label="Tab Helper URL seen entry"/>
+  <int value="87" label="Tab Helper URL seen match browser navigation"/>
+  <int value="88" label="Tab Helper URL seen namespace match entry"/>
+  <int value="89"
+      label="Tab Helper URL seen namespace match browser navigation"/>
+  <int value="90" label="Prefetch List item added"/>
+  <int value="91" label="Prefetch list seen tab contents"/>
+  <int value="92" label="Prefetch list seen history"/>
+  <int value="93" label="Issue Prerender called"/>
+  <int value="94" label="Issue Prerender prefetch enabled"/>
+  <int value="95" label="Issue Prerender prefetch issued"/>
+</enum>
+
+<enum name="PrerenderLocalVisitCoreTransition" type="int">
+  <obsolete>
+    Deprecated Nov 16 2012
+  </obsolete>
+  <int value="0" label="LINK"/>
+  <int value="1" label="TYPED"/>
+  <int value="2" label="AUTO_BOOKMARK"/>
+  <int value="3" label="AUTO_SUBFRAME"/>
+  <int value="4" label="MANUAL_SUBFRAME"/>
+  <int value="5" label="GENERATED"/>
+  <int value="6" label="START_PAGE"/>
+  <int value="7" label="FORM_SUBMIT"/>
+  <int value="8" label="RELOAD"/>
+  <int value="9" label="KEYWORD"/>
+  <int value="10" label="GENERATED"/>
+</enum>
+
+<enum name="PrerenderLocalVisitEvents" type="int">
+  <obsolete>
+    Deprecated Nov 16 2012
+  </obsolete>
+  <int value="0" label="V1_VISIT"/>
+  <int value="1" label="V1_PRERENDER_STARTED_1"/>
+  <int value="2" label="V1_PRERENDER_USED_1"/>
+  <int value="3" label="V1_PRERENDER_STARTED_3"/>
+  <int value="4" label="V1_PRERENDER_USED_3"/>
+  <int value="5" label="V1_PRERENDER_STARTED_5"/>
+  <int value="6" label="V1_PRERENDER_USED_5"/>
+  <int value="10" label="VISIT"/>
+  <int value="11" label="VISIT_EXCLUDE_BACK_FORWARD"/>
+  <int value="12" label="VISIT_EXCLUDE_HOME_PAGE"/>
+  <int value="13" label="VISIT_EXCLUDE_REDIRECT_CHAIN"/>
+  <int value="14" label="PRERENDER_STARTED_1"/>
+  <int value="15" label="PRERENDER_USED_1"/>
+  <int value="16" label="PRERENDER_STARTED_3"/>
+  <int value="17" label="PRERENDER_USED_3"/>
+  <int value="18" label="PRERENDER_STARTED_5"/>
+  <int value="19" label="PRERENDER_USED_5"/>
+</enum>
+
+<enum name="PrerenderMode" type="int">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <int value="0" label="PRERENDER_MODE_DISABLED"/>
+  <int value="1" label="PRERENDER_MODE_ENABLED"/>
+  <int value="2" label="PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP"/>
+  <int value="3" label="PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP"/>
+  <int value="4" label="PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP"/>
+  <int value="5" label="PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP"/>
+  <int value="6" label="PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP"/>
+  <int value="7" label="PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP"/>
+  <int value="8" label="PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP"/>
+</enum>
+
+<enum name="PrerenderPageviewEvents" type="int">
+  <obsolete>
+    deprecated Nov 16 2012
+  </obsolete>
+  <int value="0" label="PAGEVIEW_EVENT_NEW_URL"/>
+  <int value="1" label="PAGEVIEW_EVENT_TOP_SITE_NEW_URL"/>
+  <int value="2" label="PAGEVIEW_EVENT_LOAD_START"/>
+  <int value="3" label="PAGEVIEW_EVENT_TOP_SITE_LOAD_START"/>
+</enum>
+
+<enum name="PrerenderRelTypes" type="int">
+  <int value="0" label="PRERENDER_REL_TYPE_NONE"/>
+  <int value="1" label="PRERENDER_REL_TYPE_PRERENDER"/>
+  <int value="2" label="PRERENDER_REL_TYPE_NEXT"/>
+  <int value="3" label="PRERENDER_REL_TYPE_PRERENDER_AND_NEXT"/>
+</enum>
+
+<enum name="PrerenderSchemeCancelReason" type="int">
+  <int value="0" label="EXTERNAL_PROTOCOL"/>
+  <int value="1" label="DATA"/>
+  <int value="2" label="BLOB"/>
+  <int value="3" label="FILE"/>
+  <int value="4" label="FILESYSTEM"/>
+  <int value="5" label="WEBSOCKET"/>
+  <int value="6" label="FTP"/>
+  <int value="7" label="CHROME"/>
+  <int value="8" label="CHROME_EXTENSION"/>
+  <int value="9" label="ABOUT"/>
+  <int value="10" label="UNKNOWN"/>
+</enum>
+
+<enum name="PrerenderTabHelperEvents" type="int">
+  <obsolete>
+    Deprecated April 2015
+  </obsolete>
+  <int value="0" label="Table requested"/>
+  <int value="1" label="Table present"/>
+  <int value="2" label="Mainframe change"/>
+  <int value="3" label="Mainframe change, logged in"/>
+  <int value="4" label="Mainframe commit"/>
+  <int value="5" label="Mainframe commit, logged in"/>
+  <int value="6" label="Login action added"/>
+  <int value="7" label="Login action added, Mainframe"/>
+  <int value="8" label="Login action added, Mainframe, pw empty"/>
+  <int value="9" label="Login action added, Subframe"/>
+  <int value="10" label="Login action added, Subframe, pw empty"/>
+</enum>
+
+<enum name="PresentationResult" type="int">
+  <int value="0" label="Requested"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="SuccessAlreadyPresenting"/>
+  <int value="3" label="VRDisplayCannotPresent"/>
+  <int value="4" label="PresentationNotSupportedByDisplay"/>
+  <int value="5" label="VRDisplayNotFound"/>
+  <int value="6" label="NotInitiatedByUserGesture"/>
+  <int value="7" label="InvalidNumberOfLayers"/>
+  <int value="8" label="InvalidLayerSource"/>
+  <int value="9" label="LayerSourceMissingWebGLContext"/>
+  <int value="10" label="InvalidLayerBounds"/>
+  <int value="11" label="ServiceInactive"/>
+  <int value="12" label="RequestDenied"/>
+</enum>
+
+<enum name="PreTapEvents" type="int">
+  <int value="0" label="no event"/>
+  <int value="1" label="tapdown"/>
+  <int value="2" label="tapunconfirmed"/>
+  <int value="3" label="tapdown + tapunconfirmed"/>
+</enum>
+
+<enum name="PreviewsContextMenuActionLoFi" type="int">
+  <int value="0" label="'Load image' context menu item shown"/>
+  <int value="1" label="'Load image' context menu item clicked"/>
+  <int value="2"
+      label="Pages where the user has clicked 'Load image' at least once"/>
+  <int value="3" label="'Load images' context menu item shown"/>
+  <int value="4" label="'Load images' context menu item clicked"/>
+</enum>
+
+<enum name="PreviewsEligibilityReason" type="int">
+  <int value="0" label="Preview Allowed."/>
+  <int value="1" label="Blacklist not created."/>
+  <int value="2" label="Blacklist data not loaded yet from disk."/>
+  <int value="3" label="User opted out of a preview recently."/>
+  <int value="4" label="User is blacklisted for all hosts."/>
+  <int value="5" label="User is blacklisted for the specific host."/>
+  <int value="6" label="The network quality estimate is not available."/>
+  <int value="7" label="The network is not slow enough to show previews."/>
+</enum>
+
+<enum name="PreviewsInfoBarAction" type="int">
+  <int value="0" label="Infobar shown"/>
+  <int value="1" label="Infobar 'Load original' clicked"/>
+  <int value="2" label="Infobar dismissed by user"/>
+  <int value="3" label="Infobar dismissed by navigation"/>
+</enum>
+
+<enum name="PreviewsUserOptedOut" type="int">
+  <int value="0" label="The user did not choose to reload the full page."/>
+  <int value="1" label="The user chose to reload the full page."/>
+</enum>
+
+<enum name="PrinterServiceEventType" type="int">
+  <int value="0" label="Printer added"/>
+  <int value="1" label="Page displayed (Deprecated)"/>
+  <int value="2" label="Printer supported notification shown"/>
+  <int value="3" label="Printer not supported notification shown"/>
+  <int value="4" label="Printer provider Web Store app launched"/>
+</enum>
+
+<enum name="PrintPreviewFailureType" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Bad settings from print preview tab"/>
+  <int value="2" label="Copy metadata failed (Deprecated)"/>
+  <int value="3" label="Metafile init failed"/>
+  <int value="4" label="0-page preview"/>
+  <int value="5" label="Mac draft metafile init failed (Deprecated)"/>
+  <int value="6" label="PreviewPageRendered with no metafile"/>
+  <int value="7" label="UpdatePrintSettings failed"/>
+  <int value="8" label="Received bad printer settings"/>
+</enum>
+
+<enum name="PrintPreviewFontTypeType" type="int">
+  <int value="0" label="TYPE1"/>
+  <int value="1" label="TYPE1_CID"/>
+  <int value="2" label="CFF"/>
+  <int value="3" label="TRUETYPE"/>
+  <int value="4" label="OTHER"/>
+  <int value="5" label="NOT_EMBEDDABLE"/>
+</enum>
+
+<enum name="PrintPreviewGcpPromoBuckets" type="int">
+  <int value="0" label="PROMO_SHOWN"/>
+  <int value="1" label="PROMO_CLICKED"/>
+  <int value="2" label="PROMO_CLOSED"/>
+</enum>
+
+<enum name="PrintPreviewHelperEvents" type="int">
+  <int value="0" label="PREVIEW_EVENT_REQUESTED"/>
+  <int value="1" label="PREVIEW_EVENT_CACHE_HIT"/>
+  <int value="2" label="PREVIEW_EVENT_CREATE_DOCUMENT"/>
+  <int value="3" label="PREVIEW_EVENT_NEW_SETTINGS"/>
+</enum>
+
+<enum name="PrintPreviewPrintDestinationBuckets" type="int">
+  <int value="0" label="DESTINATION_SHOWN"/>
+  <int value="1" label="DESTINATION_CLOSED_CHANGED"/>
+  <int value="2" label="DESTINATION_CLOSED_UNCHANGED"/>
+  <int value="3" label="SIGNIN_PROMPT"/>
+  <int value="4" label="SIGNIN_TRIGGERED"/>
+  <int value="5" label="PRIVET_DUPLICATE_SELECTED"/>
+  <int value="6" label="CLOUD_DUPLICATE_SELECTED"/>
+  <int value="7" label="REGISTER_PROMO_SHOWN"/>
+  <int value="8" label="REGISTER_PROMO_SELECTED"/>
+  <int value="9" label="ACCOUNT_CHANGED"/>
+  <int value="10" label="ADD_ACCOUNT_SELECTED"/>
+  <int value="11" label="INVITATION_AVAILABLE"/>
+  <int value="12" label="INVITATION_ACCEPTED"/>
+  <int value="13" label="INVITATION_REJECTED"/>
+</enum>
+
+<enum name="PrintPreviewPrintSettingsUiBuckets" type="int">
+  <int value="0" label="ADVANCED_SETTINGS_DIALOG_SHOWN"/>
+  <int value="1" label="ADVANCED_SETTINGS_DIALOG_CANCELED"/>
+  <int value="2" label="MORE_SETTINGS_CLICKED"/>
+  <int value="3" label="LESS_SETTINGS_CLICKED"/>
+  <int value="4" label="PRINT_WITH_SETTINGS_EXPANDED"/>
+  <int value="5" label="PRINT_WITH_SETTINGS_COLLAPSED"/>
+</enum>
+
+<enum name="PrintPreviewUserActionType" type="int">
+  <int value="0" label="PRINT_TO_PRINTER"/>
+  <int value="1" label="PRINT_TO_PDF"/>
+  <int value="2" label="CANCEL"/>
+  <int value="3" label="FALLBACK_TO_ADVANCED_SETTINGS_DIALOG"/>
+  <int value="4" label="PREVIEW_FAILED"/>
+  <int value="5" label="PREVIEW_STARTED"/>
+  <int value="6" label="INITIATOR_TAB_CRASHED_UNUSED"/>
+  <int value="7" label="INITIATOR_TAB_CLOSED"/>
+  <int value="8" label="PRINT_WITH_CLOUD_PRINT"/>
+  <int value="9" label="PRINT_WITH_PRIVET"/>
+  <int value="10" label="PRINT_WITH_EXTENSION"/>
+</enum>
+
+<enum name="PrintSettings" type="int">
+  <int value="0" label="LANDSCAPE"/>
+  <int value="1" label="PORTRAIT"/>
+  <int value="2" label="COLOR"/>
+  <int value="3" label="BLACK_AND_WHITE"/>
+  <int value="4" label="COLLATE"/>
+  <int value="5" label="SIMPLEX"/>
+  <int value="6" label="DUPLEX"/>
+  <int value="7" label="TOTAL"/>
+  <int value="8" label="HEADERS_AND_FOOTERS"/>
+  <int value="9" label="CSS_BACKGROUND"/>
+  <int value="10" label="SELECTION_ONLY"/>
+  <int value="11" label="EXTERNAL_PDF_PREVIEW"/>
+  <int value="12" label="PAGE_RANGE"/>
+  <int value="13" label="DEFAULT_MEDIA"/>
+  <int value="14" label="NON_DEFAULT_MEDIA"/>
+  <int value="15" label="COPIES"/>
+  <int value="16" label="NON_DEFAULT_MARGINS"/>
+  <int value="17" label="DISTILL_PAGE_UNUSED"/>
+  <int value="18" label="SCALING"/>
+</enum>
+
+<enum name="PrivetNotificationsEvent" type="int">
+  <int value="0" label="PRIVET_SERVICE_STARTED"/>
+  <int value="1" label="PRIVET_LISTER_STARTED"/>
+  <int value="2" label="PRIVET_DEVICE_CHANGED"/>
+  <int value="3" label="PRIVET_INFO_DONE"/>
+  <int value="4" label="PRIVET_NOTIFICATION_SHOWN"/>
+  <int value="5" label="PRIVET_NOTIFICATION_CANCELED"/>
+  <int value="6" label="PRIVET_NOTIFICATION_CLICKED"/>
+  <int value="7" label="PRIVET_DISABLE_NOTIFICATIONS_CLICKED"/>
+</enum>
+
+<enum name="ProcessDetailedExitStatus" type="int">
+  <int value="0" label="Empty minidump in running app"/>
+  <int value="1" label="Empty minidump in paused app"/>
+  <int value="2" label="Empty minidump in background app"/>
+  <int value="3" label="Valid minidump in running app"/>
+  <int value="4" label="Valid minidump in paused app"/>
+  <int value="5" label="Valid minidump in background app"/>
+</enum>
+
+<enum name="ProcessNameHash" type="int">
+  <summary>
+    The hash of a lower case process name generated using metrics::HashName.
+  </summary>
+  <int value="-2031320757" label="naio.exe"/>
+  <int value="-1975402871" label="windbg.exe"/>
+  <int value="-1883802758" label="chrome.exe"/>
+  <int value="-1861811955" label="origin.exe"/>
+  <int value="-1794024814" label="avpui.exe"/>
+  <int value="-1728702815" label="devenv.exe"/>
+  <int value="-1700192260" label="outlook.exe"/>
+  <int value="-1524496827" label="client.exe"/>
+  <int value="-1478451048" label="nexus.exe"/>
+  <int value="-1121730033" label="firefox.exe"/>
+  <int value="-1119614451" label="idman.exe"/>
+  <int value="-958751916" label="qq.exe"/>
+  <int value="-642217101" label="new_chrome.exe"/>
+  <int value="-590220378" label="phped.exe"/>
+  <int value="-569935454" label="itype.exe"/>
+  <int value="-319883659" label="perl.exe"/>
+  <int value="-214303849" label="userinit.exe"/>
+  <int value="-113003297" label="launchy.exe"/>
+  <int value="-105465200" label="discord.exe"/>
+  <int value="-84282901" label="cmd.exe"/>
+  <int value="-46738700" label="svchost.exe"/>
+  <int value="-918169" label="wlmail.exe"/>
+  <int value="0" label="Unknown"/>
+  <int value="98111354" label="explorer.exe"/>
+  <int value="160270488" label="node.exe"/>
+  <int value="169714319" label="idea.exe"/>
+  <int value="179238190" label="botweb.exe"/>
+  <int value="309035343" label="mailbird.exe"/>
+  <int value="373915621" label="skype.exe"/>
+  <int value="533327338" label="raidcall.exe"/>
+  <int value="575047983" label="tween.exe"/>
+  <int value="683573237" label="dropbox.exe"/>
+  <int value="693432326" label="steam.exe"/>
+  <int value="729198307" label="excel.exe"/>
+  <int value="742620152" label="python.exe"/>
+  <int value="747859312" label="courier.exe"/>
+  <int value="1000072556" label="java.exe"/>
+  <int value="1408608854" label="old_chrome.exe"/>
+  <int value="1412988381" label="claunch.exe"/>
+  <int value="1590408389" label="services.exe"/>
+  <int value="1614875030" label="taskeng.exe"/>
+  <int value="1630952668" label="line.exe"/>
+  <int value="1641914182" label="winword.exe"/>
+  <int value="1660748446" label="acad.exe"/>
+  <int value="1775984853" label="spotify.exe"/>
+  <int value="1896894115" label="filmora.exe"/>
+  <int value="1914315258" label="cdb.exe"/>
+  <int value="1941932935" label="javaw.exe"/>
+  <int value="1943061727" label="fiddler.exe"/>
+  <int value="1976535553" label="jsvmail.exe"/>
+  <int value="2011028983" label="pcman.exe"/>
+</enum>
+
+<enum name="ProcessType" type="int">
+  <obsolete>
+    Deprecated 3/2013. No longer generated.
+  </obsolete>
+  <summary>
+    The value for type comes from the ProcessType enum in
+    content/public/common/process_type.h.
+  </summary>
+  <int value="1" label="UNKNOWN"/>
+  <int value="2" label="BROWSER"/>
+  <int value="3" label="RENDER"/>
+  <int value="4" label="PLUGIN"/>
+  <int value="5" label="WORKER"/>
+  <int value="6" label="NACL"/>
+  <int value="7" label="UTILITY"/>
+  <int value="8" label="PROFILE_IMPORT"/>
+  <int value="9" label="ZYGOTE"/>
+  <int value="10" label="SANDBOX_HELPER"/>
+  <int value="11" label="NACL_BROKER_PROCESS"/>
+  <int value="12" label="GPU_PROCESS"/>
+  <int value="13" label="PPAPI_PLUGIN_PROCESS"/>
+</enum>
+
+<enum name="ProcessType2" type="int">
+  <summary>
+    The value for type comes from the ProcessType enum in
+    content/public/common/process_type.h.
+  </summary>
+  <int value="1" label="UNKNOWN"/>
+  <int value="2" label="BROWSER"/>
+  <int value="3" label="RENDER"/>
+  <int value="4" label="PLUGIN"/>
+  <int value="5" label="WORKER"/>
+  <int value="6" label="UTILITY"/>
+  <int value="7" label="ZYGOTE"/>
+  <int value="8" label="SANDBOX_HELPER"/>
+  <int value="9" label="GPU_PROCESS"/>
+  <int value="10" label="PPAPI_PLUGIN_PROCESS"/>
+  <int value="11" label="PPAPI_BROKER_PROCESS"/>
+  <int value="12" label="PROFILE_IMPORT"/>
+  <int value="13" label="NACL"/>
+  <int value="14" label="NACL_BROKER_PROCESS"/>
+</enum>
+
+<enum name="ProfileAddNewUser" type="int">
+  <int value="0" label="Add new user from icon menu"/>
+  <int value="1" label="Add new user from title bar menu"/>
+  <int value="2" label="Add new user from settings dialog"/>
+  <int value="3" label="Add new user from the User Manager"/>
+  <int value="4" label="Auto-created after deleting last user"/>
+</enum>
+
+<enum name="ProfileAndroidAccountManagementMenu" type="int">
+  <int value="0" label="Opened Menu">
+    User arrived at the Account management screen.
+  </int>
+  <int value="1" label="Add Account">
+    User arrived at the Account management screen, and clicked Add account.
+  </int>
+  <int value="2" label="Go Incognito">
+    User arrived at the Account management screen, and clicked Go incognito.
+  </int>
+  <int value="3" label="Primary Account">
+    User arrived at the Account management screen, and clicked on primary.
+  </int>
+  <int value="4" label="Secondary Account">
+    User arrived at the Account management screen, and clicked on secondary.
+  </int>
+  <int value="5" label="Toggled Signout">
+    User arrived at the Account management screen, toggled Chrome signout.
+  </int>
+  <int value="6" label="Confirm Signout">
+    User toggled Chrome signout, and clicked Signout.
+  </int>
+  <int value="7" label="Cancel Signout">
+    User toggled Chrome signout, and clicked Cancel.
+  </int>
+</enum>
+
+<enum name="ProfileAuth" type="int">
+  <int value="0" label="Authentication was unnecessary (profile not locked)"/>
+  <int value="1" label="Authentication performed using local credentials"/>
+  <int value="2" label="Authentication performed on-line"/>
+  <int value="3" label="Authentication failed"/>
+  <int value="4" label="Authentication failed due to being offline"/>
+</enum>
+
+<enum name="ProfileAvatar" type="int">
+  <int value="0" label="Generic"/>
+  <int value="1" label="Generic Aqua"/>
+  <int value="2" label="Generic Blue"/>
+  <int value="3" label="Generic Green"/>
+  <int value="4" label="Generic Orange"/>
+  <int value="5" label="Generic Purple"/>
+  <int value="6" label="Generic Red"/>
+  <int value="7" label="Generic Yellow"/>
+  <int value="8" label="Secret Agent"/>
+  <int value="9" label="Superhero"/>
+  <int value="10" label="Volleyball"/>
+  <int value="11" label="Businessman"/>
+  <int value="12" label="Ninja"/>
+  <int value="13" label="Alien"/>
+  <int value="14" label="Super Awesome Cool Smiley Face"/>
+  <int value="15" label="Flower"/>
+  <int value="16" label="Pizza"/>
+  <int value="17" label="Soccer"/>
+  <int value="18" label="Burger"/>
+  <int value="19" label="Cat"/>
+  <int value="20" label="Cupcake"/>
+  <int value="21" label="Dog"/>
+  <int value="22" label="Horse"/>
+  <int value="23" label="Margarita"/>
+  <int value="24" label="Note"/>
+  <int value="25" label="Sun And Cloud"/>
+  <int value="26" label="Unknown"/>
+  <int value="27" label="GAIA"/>
+</enum>
+
+<enum name="ProfileCreateResult" type="int">
+  <int value="0" label="Failed locally"/>
+  <int value="1" label="Failed remotely"/>
+  <int value="2" label="Created but not initialized (should never happen)"/>
+  <int value="3" label="Succeeded"/>
+  <int value="4" label="Canceled"/>
+</enum>
+
+<enum name="ProfileDeleteAction" type="int">
+  <int value="0" label="Settings Page">
+    The user confirmed deletion of a profile from the settings page. This metric
+    is recorded even if profile deletion is cancelled after the confirmation.
+  </int>
+  <int value="1" label="User Manager">
+    The user confirmed deletion of a profile from the User Manager. This metric
+    is recorded even if profile deletion is cancelled after the confirmation.
+  </int>
+  <int value="2" label="User Manager Warning Shown">
+    The user clicked 'Remove this person' in the user manager and was shown the
+    profile deletion warning. No profile deletion action has been started yet.
+  </int>
+  <int value="3" label="Settings Page Warning Shown">
+    The user clicked 'Remove...' or the 'X' in the settings page and was shown
+    the profile deletion warning. No profile deletion action has been started
+    yet.
+  </int>
+  <int value="4" label="Aborted after confirmation">
+    The user confirmed the deletion of a profile in either the settings page or
+    the User Manager, but clicked 'Stay' in an OnBeforeUnload dialog. Since the
+    browsing window of the profile was still open, profile deletion was
+    cancelled.
+  </int>
+</enum>
+
+<enum name="ProfileDesktopMenu" type="int">
+  <int value="0" label="Locked in Menu">
+    User opened the user menu, and clicked lock.
+  </int>
+  <int value="1" label="Remove Account in Menu">
+    User opened the user menu, and removed an account.
+  </int>
+  <int value="2" label="Add Account in Menu">
+    User opened the user menu, and started adding an account.
+  </int>
+  <int value="3" label="Edit Profile Name in Menu">
+    User opened the user menu, and changed the profile name.
+  </int>
+  <int value="4" label="Edit Profile Image in Menu">
+    User opened the user menu, and started selecting a new profile image.
+  </int>
+  <int value="5" label="Open User Manager in Menu">
+    User opened the user menu, and opened the User Manager.
+  </int>
+  <int value="6" label="Go Incognito from Menu">
+    User opened the user menu, and selected Go Incognito.
+  </int>
+</enum>
+
+<enum name="ProfileErrorType" type="int">
+  <int value="0" label="History error"/>
+  <int value="1" label="Preferences error"/>
+  <int value="2" label="Webdata autofill DB error"/>
+  <int value="3" label="Webdata token DB error"/>
+  <int value="4" label="Webdata DB error"/>
+  <int value="5" label="Webdata keyword DB error"/>
+</enum>
+
+<enum name="ProfileGaiaPhotoOptions" type="int">
+  <int value="0" label="User opted to use GAIA photo"/>
+  <int value="1" label="User opted not to use GAIA photo"/>
+</enum>
+
+<enum name="ProfileImageDownloadResult" type="int">
+  <int value="0" label="DownloadSuccessChanged">
+    <summary>
+      Reported when image download succeeds and the image is newer than what we
+      already have so we update it.
+    </summary>
+  </int>
+  <int value="1" label="DownloadSuccess">
+    <summary>Reported anytime we download profile image successfully.</summary>
+  </int>
+  <int value="2" label="DownloadFailure">
+    <summary>Download failed because of network errors.</summary>
+  </int>
+  <int value="3" label="DownloadDefault">
+    <summary>
+      We didn't download the image because it's the default one.
+    </summary>
+  </int>
+</enum>
+
+<enum name="ProfileNetUserCount" type="int">
+  <int value="0" label="Added new user"/>
+  <int value="1" label="Deleted a profile"/>
+</enum>
+
+<enum name="ProfileNewAvatarMenuNotYou" type="int">
+  <int value="0" label="View 'Not You?' Bubble">
+    User views the 'Not You?' bubble.
+  </int>
+  <int value="1" label="Back">
+    User selects back from within the 'Not You?' bubble.
+  </int>
+  <int value="2" label="Add Person">
+    User adds a person from within the 'Not You?' bubble.
+  </int>
+  <int value="3" label="Disconnect">
+    User chooses to disconnect (sign out) from within the 'Not You?' bubble.
+  </int>
+</enum>
+
+<enum name="ProfileNewAvatarMenuSignin" type="int">
+  <int value="0" label="View Signin Bubble">
+    User viewed the signin bubble after successfully using the inline signin.
+  </int>
+  <int value="1" label="Dismiss">
+    User selected ok to dismiss the signin bubble.
+  </int>
+  <int value="2" label="Settings">
+    User opened the settings from the signin bubble.
+  </int>
+</enum>
+
+<enum name="ProfileNewAvatarMenuUpgrade" type="int">
+  <int value="0" label="View Upgrade Bubble">
+    User views the upgrade bubble.
+  </int>
+  <int value="1" label="Dismiss">User dismissed the upgrade bubble.</int>
+  <int value="2" label="What's New">
+    User selects 'What's New' in the upgrade bubble.
+  </int>
+  <int value="3" label="Not You?">
+    User selects 'Not You?' in the upgrade bubble.
+  </int>
+</enum>
+
+<enum name="ProfileOpen" type="int">
+  <int value="0" label="Add new user"/>
+  <int value="1" label="Add new user from icon menu"/>
+  <int value="2" label="Add new user from title bar menu"/>
+  <int value="3" label="Switch profile from icon menu"/>
+  <int value="4" label="Switch profile from title bar menu"/>
+  <int value="5" label="Opened the avatar bubble menu from NTP"/>
+  <int value="6" label="Opened the avatar bubble menu from icon"/>
+  <int value="7" label="Deleted a profile"/>
+</enum>
+
+<enum name="ProfileOpenMethod" type="int">
+  <int value="0" label="Opened the avatar menu from NTP"/>
+  <int value="1" label="Opened the avatar menu from avatar button"/>
+  <int value="2" label="Switch to profile from icon menu"/>
+  <int value="3" label="Switch to profile from title bar menu"/>
+  <int value="4" label="Switch to profile from Mac OS X Dock menu"/>
+  <int value="5" label="Opened the User Manager"/>
+  <int value="6" label="Switch to profile via User Manager"/>
+  <int value="7" label="Switch to locked profile via User Manager"/>
+  <int value="8" label="Switch to Guest profile"/>
+  <int value="9" label="Switch to profile from context menu"/>
+</enum>
+
+<enum name="ProfileResetRequestOriginEnum" type="int">
+  <int value="0" label="Unspecified"/>
+  <int value="1" label="Unknown"/>
+  <int value="2" label="User click"/>
+  <int value="3" label="CCT"/>
+  <int value="4" label="Triggered reset"/>
+</enum>
+
+<enum name="ProfileSigninStatus" type="int">
+  <int value="0" label="All profiles signed in"/>
+  <int value="1" label="All profiles not signed in"/>
+  <int value="2" label="Mixed signin status"/>
+  <int value="3" label="Unknown signin status"/>
+  <int value="4" label="Error getting signin status"/>
+</enum>
+
+<enum name="ProfileSync" type="int">
+  <int value="0" label="Signed in to sync"/>
+  <int value="1" label="Signed in to sync from original profile"/>
+  <int value="2" label="Signed in to sync from secondary profile"/>
+  <int value="3" label="Customized sync options"/>
+  <int value="4" label="Chose what to sync"/>
+  <int value="5" label="Encrypted all data"/>
+  <int value="6" label="Selected a passphrase"/>
+</enum>
+
+<enum name="ProfileSyncCustomize" type="int">
+  <int value="0" label="Customized sync options"/>
+  <int value="1" label="Chose what to sync"/>
+  <int value="2" label="Encrypted all data"/>
+  <int value="3" label="Selected a passphrase"/>
+</enum>
+
+<enum name="ProfileType" type="int">
+  <int value="0" label="Original (default) profile"/>
+  <int value="1" label="Secondary (user-created) profile"/>
+</enum>
+
+<enum name="ProfileUpgradeEnrollment" type="int">
+  <int value="0" label="User viewed the Upgrade promo card in the user menu."/>
+  <int value="1" label="User selected to view the intro tutorial."/>
+  <int value="2" label="User opted into New Profile Management by Promo card."/>
+  <int value="3" label="User closed the Upgrade card."/>
+  <int value="4" label="User disabled New Profiles Management."/>
+  <int value="5" label="User elected to send feedback."/>
+</enum>
+
+<enum name="ProtectorError" type="int">
+  <obsolete>
+    Deprecated 8/2013. No longer generated.
+  </obsolete>
+  <summary>
+    Codes for errors Protector detects about settings it protects. See
+    chrome/browser/protector/histograms.h for the corresponding enum.
+  </summary>
+  <int value="0" label="Backup invalid"/>
+  <int value="1" label="Value changed"/>
+  <int value="2" label="Value valid"/>
+  <int value="3" label="Value is valid and zero"/>
+</enum>
+
+<enum name="ProtocolVersion" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="HTTP 1.1"/>
+  <int value="2" label="SPDY 2.0"/>
+  <int value="3" label="SPDY 3.0"/>
+  <int value="4" label="SPDY 3.1"/>
+  <int value="5" label="SPDY 4.0"/>
+</enum>
+
+<enum name="ProvisionalLoadEvent" type="int">
+  <int value="0" label="Stopped no error">
+    This should represent the provisional load being stopped by the user, but
+    should not occur pre-PlzNavigate.
+  </int>
+  <int value="1" label="Load failed: ERR_ABORTED">
+    The provisional load failed with net::ERR_ABORTED. Note that ERR_ABORTED
+    includes downloads, 204s, and other non user-initiated abort conditions
+    (crbug.com/542369)
+  </int>
+  <int value="2" label="Load failed: not ERR_ABORTED">
+    The provisional load failed with an error other than net::ERR_ABORTED
+  </int>
+  <int value="3" label="Load successfully committed"/>
+</enum>
+
+<enum name="ProvisionalSaveFailure" type="int">
+  <int value="0" label="SAVING_DISABLED"/>
+  <int value="1" label="EMPTY_PASSWORD"/>
+  <int value="2" label="NO_MATCHING_FORM"/>
+  <int value="3" label="MATCHING_NOT_COMPLETE"/>
+  <int value="4" label="FORM_BLACKLISTED"/>
+  <int value="5" label="INVALID_FORM"/>
+  <int value="6" label="AUTOCOMPLETE_OFF"/>
+  <int value="7" label="SYNC_CREDENTIALS"/>
+</enum>
+
+<enum name="ProxyStatus" type="int">
+  <int value="0" label="PROXY_STATUS_IGNORED"/>
+  <int value="1" label="PROXY_UNINITIALIZED"/>
+  <int value="2" label="PROXY_NOT_USED"/>
+  <int value="3" label="PROXY_PAC_RESOLVER"/>
+  <int value="4" label="PROXY_HAS_RULES"/>
+</enum>
+
+<enum name="PublicKeyPinFailedDomain" type="int">
+  <int value="0" label="DOMAIN_NOT_PINNED"/>
+  <int value="1" label="DOMAIN_GOOGLE_COM"/>
+  <int value="2" label="DOMAIN_ANDROID_COM"/>
+  <int value="3" label="DOMAIN_GOOGLE_ANALYTICS_COM"/>
+  <int value="4" label="DOMAIN_GOOGLEPLEX_COM"/>
+  <int value="5" label="DOMAIN_YTIMG_COM"/>
+  <int value="6" label="DOMAIN_GOOGLEUSERCONTENT_COM"/>
+  <int value="7" label="DOMAIN_YOUTUBE_COM"/>
+  <int value="8" label="DOMAIN_GOOGLEAPIS_COM"/>
+  <int value="9" label="DOMAIN_GOOGLEADSERVICES_COM"/>
+  <int value="10" label="DOMAIN_GOOGLECODE_COM"/>
+  <int value="11" label="DOMAIN_APPSPOT_COM"/>
+  <int value="12" label="DOMAIN_GOOGLESYNDICATION_COM"/>
+  <int value="13" label="DOMAIN_DOUBLECLICK_NET"/>
+  <int value="14" label="DOMAIN_GSTATIC_COM"/>
+  <int value="15" label="DOMAIN_GMAIL_COM"/>
+  <int value="16" label="DOMAIN_GOOGLEMAIL_COM"/>
+  <int value="17" label="DOMAIN_GOOGLEGROUPS_COM"/>
+  <int value="18" label="DOMAIN_TORPROJECT_ORG"/>
+  <int value="19" label="DOMAIN_TWITTER_COM"/>
+  <int value="20" label="DOMAIN_TWIMG_COM"/>
+  <int value="21" label="DOMAIN_AKAMAIHD_NET"/>
+  <int value="22" label="DOMAIN_TOR2WEB_ORG"/>
+  <int value="23" label="DOMAIN_YOUTU_BE"/>
+  <int value="24" label="DOMAIN_GOOGLECOMMERCE_COM"/>
+  <int value="25" label="DOMAIN_URCHIN_COM"/>
+  <int value="26" label="DOMAIN_GOO_GL"/>
+  <int value="27" label="DOMAIN_G_CO"/>
+  <int value="28" label="DOMAIN_GOOGLE_AC"/>
+  <int value="29" label="DOMAIN_GOOGLE_AD"/>
+  <int value="30" label="DOMAIN_GOOGLE_AE"/>
+  <int value="31" label="DOMAIN_GOOGLE_AF"/>
+  <int value="32" label="DOMAIN_GOOGLE_AG"/>
+  <int value="33" label="DOMAIN_GOOGLE_AM"/>
+  <int value="34" label="DOMAIN_GOOGLE_AS"/>
+  <int value="35" label="DOMAIN_GOOGLE_AT"/>
+  <int value="36" label="DOMAIN_GOOGLE_AZ"/>
+  <int value="37" label="DOMAIN_GOOGLE_BA"/>
+  <int value="38" label="DOMAIN_GOOGLE_BE"/>
+  <int value="39" label="DOMAIN_GOOGLE_BF"/>
+  <int value="40" label="DOMAIN_GOOGLE_BG"/>
+  <int value="41" label="DOMAIN_GOOGLE_BI"/>
+  <int value="42" label="DOMAIN_GOOGLE_BJ"/>
+  <int value="43" label="DOMAIN_GOOGLE_BS"/>
+  <int value="44" label="DOMAIN_GOOGLE_BY"/>
+  <int value="45" label="DOMAIN_GOOGLE_CA"/>
+  <int value="46" label="DOMAIN_GOOGLE_CAT"/>
+  <int value="47" label="DOMAIN_GOOGLE_CC"/>
+  <int value="48" label="DOMAIN_GOOGLE_CD"/>
+  <int value="49" label="DOMAIN_GOOGLE_CF"/>
+  <int value="50" label="DOMAIN_GOOGLE_CG"/>
+  <int value="51" label="DOMAIN_GOOGLE_CH"/>
+  <int value="52" label="DOMAIN_GOOGLE_CI"/>
+  <int value="53" label="DOMAIN_GOOGLE_CL"/>
+  <int value="54" label="DOMAIN_GOOGLE_CM"/>
+  <int value="55" label="DOMAIN_GOOGLE_CN"/>
+  <int value="56" label="DOMAIN_CO_AO"/>
+  <int value="57" label="DOMAIN_CO_BW"/>
+  <int value="58" label="DOMAIN_CO_CK"/>
+  <int value="59" label="DOMAIN_CO_CR"/>
+  <int value="60" label="DOMAIN_CO_HU"/>
+  <int value="61" label="DOMAIN_CO_ID"/>
+  <int value="62" label="DOMAIN_CO_IL"/>
+  <int value="63" label="DOMAIN_CO_IM"/>
+  <int value="64" label="DOMAIN_CO_IN"/>
+  <int value="65" label="DOMAIN_CO_JE"/>
+  <int value="66" label="DOMAIN_CO_JP"/>
+  <int value="67" label="DOMAIN_CO_KE"/>
+  <int value="68" label="DOMAIN_CO_KR"/>
+  <int value="69" label="DOMAIN_CO_LS"/>
+  <int value="70" label="DOMAIN_CO_MA"/>
+  <int value="71" label="DOMAIN_CO_MZ"/>
+  <int value="72" label="DOMAIN_CO_NZ"/>
+  <int value="73" label="DOMAIN_CO_TH"/>
+  <int value="74" label="DOMAIN_CO_TZ"/>
+  <int value="75" label="DOMAIN_CO_UG"/>
+  <int value="76" label="DOMAIN_CO_UK"/>
+  <int value="77" label="DOMAIN_CO_UZ"/>
+  <int value="78" label="DOMAIN_CO_VE"/>
+  <int value="79" label="DOMAIN_CO_VI"/>
+  <int value="80" label="DOMAIN_CO_ZA"/>
+  <int value="81" label="DOMAIN_CO_ZM"/>
+  <int value="82" label="DOMAIN_CO_ZW"/>
+  <int value="83" label="DOMAIN_COM_AF"/>
+  <int value="84" label="DOMAIN_COM_AG"/>
+  <int value="85" label="DOMAIN_COM_AI"/>
+  <int value="86" label="DOMAIN_COM_AR"/>
+  <int value="87" label="DOMAIN_COM_AU"/>
+  <int value="88" label="DOMAIN_COM_BD"/>
+  <int value="89" label="DOMAIN_COM_BH"/>
+  <int value="90" label="DOMAIN_COM_BN"/>
+  <int value="91" label="DOMAIN_COM_BO"/>
+  <int value="92" label="DOMAIN_COM_BR"/>
+  <int value="93" label="DOMAIN_COM_BY"/>
+  <int value="94" label="DOMAIN_COM_BZ"/>
+  <int value="95" label="DOMAIN_COM_CN"/>
+  <int value="96" label="DOMAIN_COM_CO"/>
+  <int value="97" label="DOMAIN_COM_CU"/>
+  <int value="98" label="DOMAIN_COM_CY"/>
+  <int value="99" label="DOMAIN_COM_DO"/>
+  <int value="100" label="DOMAIN_COM_EC"/>
+  <int value="101" label="DOMAIN_COM_EG"/>
+  <int value="102" label="DOMAIN_COM_ET"/>
+  <int value="103" label="DOMAIN_COM_FJ"/>
+  <int value="104" label="DOMAIN_COM_GE"/>
+  <int value="105" label="DOMAIN_COM_GH"/>
+  <int value="106" label="DOMAIN_COM_GI"/>
+  <int value="107" label="DOMAIN_COM_GR"/>
+  <int value="108" label="DOMAIN_COM_GT"/>
+  <int value="109" label="DOMAIN_COM_HK"/>
+  <int value="110" label="DOMAIN_COM_IQ"/>
+  <int value="111" label="DOMAIN_COM_JM"/>
+  <int value="112" label="DOMAIN_COM_JO"/>
+  <int value="113" label="DOMAIN_COM_KH"/>
+  <int value="114" label="DOMAIN_COM_KW"/>
+  <int value="115" label="DOMAIN_COM_LB"/>
+  <int value="116" label="DOMAIN_COM_LY"/>
+  <int value="117" label="DOMAIN_COM_MT"/>
+  <int value="118" label="DOMAIN_COM_MX"/>
+  <int value="119" label="DOMAIN_COM_MY"/>
+  <int value="120" label="DOMAIN_COM_NA"/>
+  <int value="121" label="DOMAIN_COM_NF"/>
+  <int value="122" label="DOMAIN_COM_NG"/>
+  <int value="123" label="DOMAIN_COM_NI"/>
+  <int value="124" label="DOMAIN_COM_NP"/>
+  <int value="125" label="DOMAIN_COM_NR"/>
+  <int value="126" label="DOMAIN_COM_OM"/>
+  <int value="127" label="DOMAIN_COM_PA"/>
+  <int value="128" label="DOMAIN_COM_PE"/>
+  <int value="129" label="DOMAIN_COM_PH"/>
+  <int value="130" label="DOMAIN_COM_PK"/>
+  <int value="131" label="DOMAIN_COM_PL"/>
+  <int value="132" label="DOMAIN_COM_PR"/>
+  <int value="133" label="DOMAIN_COM_PY"/>
+  <int value="134" label="DOMAIN_COM_QA"/>
+  <int value="135" label="DOMAIN_COM_RU"/>
+  <int value="136" label="DOMAIN_COM_SA"/>
+  <int value="137" label="DOMAIN_COM_SB"/>
+  <int value="138" label="DOMAIN_COM_SG"/>
+  <int value="139" label="DOMAIN_COM_SL"/>
+  <int value="140" label="DOMAIN_COM_SV"/>
+  <int value="141" label="DOMAIN_COM_TJ"/>
+  <int value="142" label="DOMAIN_COM_TN"/>
+  <int value="143" label="DOMAIN_COM_TR"/>
+  <int value="144" label="DOMAIN_COM_TW"/>
+  <int value="145" label="DOMAIN_COM_UA"/>
+  <int value="146" label="DOMAIN_COM_UY"/>
+  <int value="147" label="DOMAIN_COM_VC"/>
+  <int value="148" label="DOMAIN_COM_VE"/>
+  <int value="149" label="DOMAIN_COM_VN"/>
+  <int value="150" label="DOMAIN_GOOGLE_CV"/>
+  <int value="151" label="DOMAIN_GOOGLE_CZ"/>
+  <int value="152" label="DOMAIN_GOOGLE_DE"/>
+  <int value="153" label="DOMAIN_GOOGLE_DJ"/>
+  <int value="154" label="DOMAIN_GOOGLE_DK"/>
+  <int value="155" label="DOMAIN_GOOGLE_DM"/>
+  <int value="156" label="DOMAIN_GOOGLE_DZ"/>
+  <int value="157" label="DOMAIN_GOOGLE_EE"/>
+  <int value="158" label="DOMAIN_GOOGLE_ES"/>
+  <int value="159" label="DOMAIN_GOOGLE_FI"/>
+  <int value="160" label="DOMAIN_GOOGLE_FM"/>
+  <int value="161" label="DOMAIN_GOOGLE_FR"/>
+  <int value="162" label="DOMAIN_GOOGLE_GA"/>
+  <int value="163" label="DOMAIN_GOOGLE_GE"/>
+  <int value="164" label="DOMAIN_GOOGLE_GG"/>
+  <int value="165" label="DOMAIN_GOOGLE_GL"/>
+  <int value="166" label="DOMAIN_GOOGLE_GM"/>
+  <int value="167" label="DOMAIN_GOOGLE_GP"/>
+  <int value="168" label="DOMAIN_GOOGLE_GR"/>
+  <int value="169" label="DOMAIN_GOOGLE_GY"/>
+  <int value="170" label="DOMAIN_GOOGLE_HK"/>
+  <int value="171" label="DOMAIN_GOOGLE_HN"/>
+  <int value="172" label="DOMAIN_GOOGLE_HR"/>
+  <int value="173" label="DOMAIN_GOOGLE_HT"/>
+  <int value="174" label="DOMAIN_GOOGLE_HU"/>
+  <int value="175" label="DOMAIN_GOOGLE_IE"/>
+  <int value="176" label="DOMAIN_GOOGLE_IM"/>
+  <int value="177" label="DOMAIN_GOOGLE_INFO"/>
+  <int value="178" label="DOMAIN_GOOGLE_IQ"/>
+  <int value="179" label="DOMAIN_GOOGLE_IS"/>
+  <int value="180" label="DOMAIN_GOOGLE_IT"/>
+  <int value="181" label="DOMAIN_IT_AO"/>
+  <int value="182" label="DOMAIN_GOOGLE_JE"/>
+  <int value="183" label="DOMAIN_GOOGLE_JO"/>
+  <int value="184" label="DOMAIN_GOOGLE_JOBS"/>
+  <int value="185" label="DOMAIN_GOOGLE_JP"/>
+  <int value="186" label="DOMAIN_GOOGLE_KG"/>
+  <int value="187" label="DOMAIN_GOOGLE_KI"/>
+  <int value="188" label="DOMAIN_GOOGLE_KZ"/>
+  <int value="189" label="DOMAIN_GOOGLE_LA"/>
+  <int value="190" label="DOMAIN_GOOGLE_LI"/>
+  <int value="191" label="DOMAIN_GOOGLE_LK"/>
+  <int value="192" label="DOMAIN_GOOGLE_LT"/>
+  <int value="193" label="DOMAIN_GOOGLE_LU"/>
+  <int value="194" label="DOMAIN_GOOGLE_LV"/>
+  <int value="195" label="DOMAIN_GOOGLE_MD"/>
+  <int value="196" label="DOMAIN_GOOGLE_ME"/>
+  <int value="197" label="DOMAIN_GOOGLE_MG"/>
+  <int value="198" label="DOMAIN_GOOGLE_MK"/>
+  <int value="199" label="DOMAIN_GOOGLE_ML"/>
+  <int value="200" label="DOMAIN_GOOGLE_MN"/>
+  <int value="201" label="DOMAIN_GOOGLE_MS"/>
+  <int value="202" label="DOMAIN_GOOGLE_MU"/>
+  <int value="203" label="DOMAIN_GOOGLE_MV"/>
+  <int value="204" label="DOMAIN_GOOGLE_MW"/>
+  <int value="205" label="DOMAIN_GOOGLE_NE"/>
+  <int value="206" label="DOMAIN_NE_JP"/>
+  <int value="207" label="DOMAIN_GOOGLE_NET"/>
+  <int value="208" label="DOMAIN_GOOGLE_NL"/>
+  <int value="209" label="DOMAIN_GOOGLE_NO"/>
+  <int value="210" label="DOMAIN_GOOGLE_NR"/>
+  <int value="211" label="DOMAIN_GOOGLE_NU"/>
+  <int value="212" label="DOMAIN_OFF_AI"/>
+  <int value="213" label="DOMAIN_GOOGLE_PK"/>
+  <int value="214" label="DOMAIN_GOOGLE_PL"/>
+  <int value="215" label="DOMAIN_GOOGLE_PN"/>
+  <int value="216" label="DOMAIN_GOOGLE_PS"/>
+  <int value="217" label="DOMAIN_GOOGLE_PT"/>
+  <int value="218" label="DOMAIN_GOOGLE_RO"/>
+  <int value="219" label="DOMAIN_GOOGLE_RS"/>
+  <int value="220" label="DOMAIN_GOOGLE_RU"/>
+  <int value="221" label="DOMAIN_GOOGLE_RW"/>
+  <int value="222" label="DOMAIN_GOOGLE_SC"/>
+  <int value="223" label="DOMAIN_GOOGLE_SE"/>
+  <int value="224" label="DOMAIN_GOOGLE_SH"/>
+  <int value="225" label="DOMAIN_GOOGLE_SI"/>
+  <int value="226" label="DOMAIN_GOOGLE_SK"/>
+  <int value="227" label="DOMAIN_GOOGLE_SM"/>
+  <int value="228" label="DOMAIN_GOOGLE_SN"/>
+  <int value="229" label="DOMAIN_GOOGLE_SO"/>
+  <int value="230" label="DOMAIN_GOOGLE_ST"/>
+  <int value="231" label="DOMAIN_GOOGLE_TD"/>
+  <int value="232" label="DOMAIN_GOOGLE_TG"/>
+  <int value="233" label="DOMAIN_GOOGLE_TK"/>
+  <int value="234" label="DOMAIN_GOOGLE_TL"/>
+  <int value="235" label="DOMAIN_GOOGLE_TM"/>
+  <int value="236" label="DOMAIN_GOOGLE_TN"/>
+  <int value="237" label="DOMAIN_GOOGLE_TO"/>
+  <int value="238" label="DOMAIN_GOOGLE_TP"/>
+  <int value="239" label="DOMAIN_GOOGLE_TT"/>
+  <int value="240" label="DOMAIN_GOOGLE_US"/>
+  <int value="241" label="DOMAIN_GOOGLE_UZ"/>
+  <int value="242" label="DOMAIN_GOOGLE_VG"/>
+  <int value="243" label="DOMAIN_GOOGLE_VU"/>
+  <int value="244" label="DOMAIN_GOOGLE_WS"/>
+  <int value="245" label="DOMAIN_CHROMIUM_ORG"/>
+  <int value="246" label="DOMAIN_CRYPTO_CAT"/>
+  <int value="247" label="DOMAIN_LAVABIT_COM"/>
+  <int value="248" label="DOMAIN_GOOGLETAGMANAGER_COM"/>
+  <int value="249" label="DOMAIN_GOOGLETAGSERVICES_COM"/>
+  <int value="250" label="DOMAIN_DROPBOX_COM"/>
+  <int value="251" label="DOMAIN_YOUTUBE_NOCOOKIE_COM"/>
+  <int value="252" label="DOMAIN_2MDN_NET"/>
+  <int value="253" label="DOMAIN_FACEBOOK_COM"/>
+  <int value="254" label="DOMAIN_SPIDEROAK_COM"/>
+</enum>
+
+<enum name="PushDeliveryStatus" type="int">
+  <int value="0" label="Successful"/>
+  <int value="1" label="Message was invalid"/>
+  <int value="2" label="App id was unknown"/>
+  <int value="3" label="Origin no longer has permission"/>
+  <int value="4" label="Service Worker not found"/>
+  <int value="5" label="Service Worker error"/>
+  <int value="6" label="event.waitUntil promise rejected"/>
+</enum>
+
+<enum name="PushGetRegistrationStatus" type="int">
+  <int value="0" label="Successful"/>
+  <int value="1" label="No push service"/>
+  <int value="2" label="Storage error"/>
+  <int value="3" label="Registration not found"/>
+  <int value="4" label="Registration not found (no incognito push service)"/>
+  <int value="5" label="Unable to retrieve the public key"/>
+</enum>
+
+<enum name="PushRegistrationStatus" type="int">
+  <int value="0" label="Successful - from push service"/>
+  <int value="1" label="Service Worker not found"/>
+  <int value="2" label="No push service"/>
+  <int value="3" label="Registration limit reached"/>
+  <int value="4" label="Permission denied"/>
+  <int value="5" label="Push service error"/>
+  <int value="6" label="No sender id provided"/>
+  <int value="7" label="Storage error"/>
+  <int value="8" label="Successful - from cache"/>
+  <int value="9" label="Network error"/>
+  <int value="10" label="Permission denied (no incognito push service)"/>
+  <int value="11" label="Unable to retrieve the public key"/>
+  <int value="12" label="Empty or missing manifest"/>
+  <int value="13" label="Mismatched sender id"/>
+</enum>
+
+<enum name="PushUnregistrationReason" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="JavaScript API"/>
+  <int value="2" label="Permission revoked"/>
+  <int value="3" label="Incoming message app id was unknown"/>
+  <int value="4" label="Incoming message origin no longer has permission"/>
+  <int value="5" label="Incoming message Service Worker not found"/>
+</enum>
+
+<enum name="PushUnregistrationStatus" type="int">
+  <int value="0" label="Successful - from push service"/>
+  <int value="1" label="Successful - was not registered"/>
+  <int value="2" label="Pending - will retry network error"/>
+  <int value="3" label="Service Worker not found"/>
+  <int value="4" label="No push service"/>
+  <int value="5" label="Pending - will retry push service error"/>
+  <int value="6" label="Storage error"/>
+  <int value="7" label="Network error"/>
+</enum>
+
+<enum name="PushUserVisibleStatus" type="int">
+  <int value="0" label="Required and shown"/>
+  <int value="1" label="Not required but shown"/>
+  <int value="2" label="Not required and not shown"/>
+  <int value="3" label="Required but not shown - used grace"/>
+  <int value="4" label="Required but not shown - grace exceeded"/>
+</enum>
+
+<enum name="QuicAddressMismatch" type="int">
+  <int value="0" label="Address mismatch: IPv4 IPv4"/>
+  <int value="1" label="Address mismatch: IPv6 IPv6"/>
+  <int value="2" label="Address mismatch: IPv4 IPv6"/>
+  <int value="3" label="Address mismatch: IPv6 IPv4"/>
+  <int value="4" label="Port mismatch: IPv4 IPv4"/>
+  <int value="5" label="Port mismatch: IPv6 IPv6"/>
+  <int value="6" label="Address and port match: IPv4 IPv4"/>
+  <int value="7" label="Address and port match: IPv6 IPv6"/>
+</enum>
+
+<enum name="QuicAlternativeProxyUsage" type="int">
+  <int value="0" label="ALTERNATIVE_PROXY_USAGE_NO_RACE"/>
+  <int value="1" label="ALTERNATIVE_PROXY_USAGE_WON_RACE"/>
+  <int value="2" label="ALTERNATIVE_PROXY_USAGE_LOST_RACE"/>
+</enum>
+
+<enum name="QuicBadPacketLossEvents" type="int">
+  <int value="1" label="ONE_PACKET_LOST"/>
+  <int value="2" label="TWO_PACKETS_LOST"/>
+  <int value="3" label="THREE_PACKETS_LOST"/>
+  <int value="4" label="FOUR_PACKETS_LOST"/>
+  <int value="5" label="FIVE_PACKETS_LOST"/>
+</enum>
+
+<enum name="QuicConnectionMigrationStatus" type="int">
+  <int value="0" label="NO_MIGRATABLE_STREAMS"/>
+  <int value="1" label="ALREADY_MIGRATED"/>
+  <int value="2" label="INTERNAL_ERROR"/>
+  <int value="3" label="TOO_MANY_CHANGES"/>
+  <int value="4" label="SUCCESS"/>
+  <int value="5" label="NON_MIGRATABLE_STREAM"/>
+  <int value="6" label="DISABLED"/>
+  <int value="7" label="MIGRATION_STATUS_NO_ALTERNATE_NETWORK"/>
+</enum>
+
+<enum name="QuicDisabledReason" type="int">
+  <int value="1" label="Public reset post handshake"/>
+  <int value="2" label="Timeout with open streams"/>
+  <int value="3" label="Bad packet loss rate"/>
+</enum>
+
+<enum name="QuicDiskCacheAPICall" type="int">
+  <int value="0" label="Start"/>
+  <int value="1" label="WaitForDataReady"/>
+  <int value="2" label="Parse"/>
+  <int value="3" label="WaitForDataReadyCancel"/>
+  <int value="4" label="ReadyToPersist"/>
+  <int value="5" label="Persist"/>
+  <int value="6" label="ExternalCacheHit"/>
+  <int value="7" label="ResetWaitForDataReady"/>
+</enum>
+
+<enum name="QuicDiskCacheEntryState" type="int">
+  <int value="0" label="Opened"/>
+  <int value="1" label="Closed"/>
+</enum>
+
+<enum name="QuicDiskCacheFailureReason" type="int">
+  <int value="0" label="WAIT_FOR_DATA_READY_INVALID_ARGUMENT_FAILURE"/>
+  <int value="1" label="GET_BACKEND_FAILURE"/>
+  <int value="2" label="OPEN_FAILURE"/>
+  <int value="3" label="CREATE_OR_OPEN_FAILURE"/>
+  <int value="4" label="PARSE_NO_DATA_FAILURE"/>
+  <int value="5" label="PARSE_FAILURE"/>
+  <int value="6" label="READ_FAILURE"/>
+  <int value="7" label="READY_TO_PERSIST_FAILURE"/>
+  <int value="8" label="PERSIST_NO_BACKEND_FAILURE"/>
+  <int value="9" label="WRITE_FAILURE"/>
+  <int value="10" label="NO_FAILURE"/>
+  <int value="11" label="PARSE_DATA_DECODE_FAILURE"/>
+</enum>
+
+<enum name="QuicErrorCodes" type="int">
+  <int value="0" label="NO_ERROR"/>
+  <int value="1" label="INTERNAL_ERROR"/>
+  <int value="2" label="STREAM_DATA_AFTER_TERMINATION"/>
+  <int value="3" label="INVALID_PACKET_HEADER"/>
+  <int value="4" label="INVALID_FRAME_DATA"/>
+  <int value="5" label="INVALID_FEC_DATA"/>
+  <int value="6" label="INVALID_RST_STREAM_DATA"/>
+  <int value="7" label="INVALID_CONNECTION_CLOSE_DATA"/>
+  <int value="8" label="INVALID_GOAWAY_DATA"/>
+  <int value="9" label="INVALID_ACK_DATA"/>
+  <int value="10" label="INVALID_VERSION_NEGOTIATION_PACKET"/>
+  <int value="11" label="INVALID_PUBLIC_RST_PACKET"/>
+  <int value="12" label="DECRYPTION_FAILURE"/>
+  <int value="13" label="ENCRYPTION_FAILURE"/>
+  <int value="14" label="PACKET_TOO_LARGE"/>
+  <int value="15" label="PACKET_FOR_NONEXISTENT_STREAM"/>
+  <int value="16" label="PEER_GOING_AWAY"/>
+  <int value="17" label="INVALID_STREAM_ID"/>
+  <int value="18" label="TOO_MANY_OPEN_STREAMS"/>
+  <int value="19" label="PUBLIC_RESET"/>
+  <int value="20" label="INVALID_VERSION"/>
+  <int value="21" label="STREAM_RST_BEFORE_HEADERS_DECOMPRESSED"/>
+  <int value="22" label="INVALID_HEADER_ID"/>
+  <int value="23" label="INVALID_NEGOTIATED_VALUE"/>
+  <int value="24" label="DECOMPRESSION_FAILURE"/>
+  <int value="25" label="NETWORK_IDLE_TIMEOUT"/>
+  <int value="26" label="ERROR_MIGRATING_ADDRESS"/>
+  <int value="27" label="PACKET_WRITE_ERROR"/>
+  <int value="28" label="HANDSHAKE_FAILED"/>
+  <int value="29" label="CRYPTO_TAGS_OUT_OF_ORDER"/>
+  <int value="30" label="CRYPTO_TOO_MANY_ENTRIES"/>
+  <int value="31" label="CRYPTO_INVALID_VALUE_LENGTH"/>
+  <int value="32" label="CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE"/>
+  <int value="33" label="INVALID_CRYPTO_MESSAGE_TYPE"/>
+  <int value="34" label="INVALID_CRYPTO_MESSAGE_PARAMETER"/>
+  <int value="35" label="CRYPTO_MESSAGE_PARAMETER_NOT_FOUND"/>
+  <int value="36" label="CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP"/>
+  <int value="37" label="CRYPTO_MESSAGE_INDEX_NOT_FOUND"/>
+  <int value="38" label="CRYPTO_INTERNAL_ERROR"/>
+  <int value="39" label="CRYPTO_VERSION_NOT_SUPPORTED"/>
+  <int value="40" label="CRYPTO_NO_SUPPORT"/>
+  <int value="41" label="CRYPTO_TOO_MANY_REJECTS"/>
+  <int value="42" label="PROOF_INVALID"/>
+  <int value="43" label="CRYPTO_DUPLICATE_TAG"/>
+  <int value="44" label="CRYPTO_ENCRYPTION_LEVEL_INCORRECT"/>
+  <int value="45" label="CRYPTO_SERVER_CONFIG_EXPIRED"/>
+  <int value="46" label="INVALID_STREAM_DATA"/>
+  <int value="47" label="INVALID_CONGESTION_FEEDBACK_DATA"/>
+  <int value="48" label="MISSING_PAYLOAD"/>
+  <int value="49" label="INVALID_PRIORITY"/>
+  <int value="50" label="INVALID_STREAM_FRAME"/>
+  <int value="51" label="PACKET_READ_ERROR"/>
+  <int value="52" label="INVALID_CHANNEL_ID_SIGNATURE"/>
+  <int value="53" label="CRYPTO_SYMMETRIC_KEY_SETUP_FAILED"/>
+  <int value="54" label="CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO"/>
+  <int value="55" label="VERSION_NEGOTIATION_MISMATCH"/>
+  <int value="56" label="INVALID_HEADERS_STREAM_DATA"/>
+  <int value="57" label="INVALID_WINDOW_UPDATE_DATA"/>
+  <int value="58" label="INVALID_BLOCKED_DATA"/>
+  <int value="59" label="FLOW_CONTROL_ERROR"/>
+  <int value="60" label="INVALID_STOP_WAITING_DATA"/>
+  <int value="61" label="UNENCRYPTED_STREAM_DATA"/>
+  <int value="62" label="CONNECTION_IP_POOLED"/>
+  <int value="63" label="FLOW_CONTROL_SENT_TOO_MUCH_DATA"/>
+  <int value="64" label="FLOW_CONTROL_INVALID_WINDOW"/>
+  <int value="65" label="CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE"/>
+  <int value="66" label="TOO_MANY_UNFINISHED_STREAMS"/>
+  <int value="67" label="HANDSHAKE_TIMEOUT"/>
+  <int value="68" label="TOO_MANY_OUTSTANDING_SENT_PACKETS"/>
+  <int value="69" label="TOO_MANY_OUTSTANDING_RECEIVED_PACKETS"/>
+  <int value="70" label="CONNECTION_CANCELLED"/>
+  <int value="71" label="BAD_PACKET_LOSS_RATE"/>
+  <int value="72" label="CRYPTO_HANDSHAKE_STATELESS_REJECT"/>
+  <int value="73" label="PUBLIC_RESETS_POST_HANDSHAKE"/>
+  <int value="74" label="TIMEOUTS_WITH_OPEN_STREAMS"/>
+  <int value="75" label="FAILED_TO_SERIALIZE_PACKET"/>
+  <int value="76" label="TOO_MANY_AVAILABLE_STREAMS"/>
+  <int value="77" label="UNENCRYPTED_FEC_DATA"/>
+  <int value="78" label="INVALID_PATH_CLOSE_DATA"/>
+  <int value="79" label="BAD_MULTIPATH_FLAG"/>
+  <int value="80" label="IP_ADDRESS_CHANGED"/>
+  <int value="81" label="CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS"/>
+  <int value="82" label="CONNECTION_MIGRATION_TOO_MANY_CHANGES"/>
+  <int value="83" label="CONNECTION_MIGRATION_NO_NEW_NETWORK"/>
+  <int value="84" label="CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM"/>
+  <int value="85" label="TOO_MANY_RTOS"/>
+  <int value="86" label="ERROR_MIGRATING_PORT"/>
+  <int value="87" label="OVERLAPPING_STREAM_DATA"/>
+  <int value="88" label="ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA"/>
+  <int value="89" label="MAYBE_CORRUPTED_MEMORY"/>
+  <int value="90" label="CRYPTO_CHLO_TOO_LARGE"/>
+  <int value="91" label="MULTIPATH_PATH_DOES_NOT_EXIST"/>
+  <int value="92" label="MULTIPATH_PATH_NOT_ACTIVE"/>
+  <int value="93" label="TOO_MANY_FRAME_GAPS"/>
+  <int value="94" label="UNSUPPORTED_PROOF_DEMAND"/>
+</enum>
+
+<enum name="QuicHandshakeFailureReason" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="BLACK_HOLE"/>
+  <int value="2" label="PUBLIC_RESET"/>
+</enum>
+
+<enum name="QuicHandshakeState" type="int">
+  <int value="0" label="STARTED"/>
+  <int value="1" label="ENCRYPTION_ESTABLISHED"/>
+  <int value="2" label="HANDSHAKE_CONFIRMED"/>
+  <int value="3" label="FAILED"/>
+</enum>
+
+<enum name="QuickofficeErrorTypes" type="int">
+  <int value="0" label="doc uncaught js exception"/>
+  <int value="1" label="docx uncaught js exception"/>
+  <int value="2" label="docm uncaught js exception"/>
+  <int value="3" label="xls uncaught js exception"/>
+  <int value="4" label="xlsx uncaught js exception"/>
+  <int value="5" label="xlsm uncaught js exception"/>
+  <int value="6" label="ppt uncaught js exception"/>
+  <int value="7" label="pptx uncaught js exception"/>
+  <int value="8" label="pptm uncaught js exception"/>
+  <int value="9" label="pps uncaught js exception"/>
+  <int value="10" label="ppsx uncaught js exception"/>
+  <int value="11" label="ppsm uncaught js exception"/>
+  <int value="12" label="doc suspected corrupt file"/>
+  <int value="13" label="docx suspected corrupt file"/>
+  <int value="14" label="docm suspected corrupt file"/>
+  <int value="15" label="xls suspected corrupt file"/>
+  <int value="16" label="xlsx suspected corrupt file"/>
+  <int value="17" label="xlsm suspected corrupt file"/>
+  <int value="18" label="ppt suspected corrupt file"/>
+  <int value="19" label="pptx suspected corrupt file"/>
+  <int value="20" label="pptm suspected corrupt file"/>
+  <int value="21" label="pps suspected corrupt file"/>
+  <int value="22" label="ppsx suspected corrupt file"/>
+  <int value="23" label="ppsm suspected corrupt file"/>
+  <int value="24" label="doc qowt ui warning"/>
+  <int value="25" label="docx qowt ui warning"/>
+  <int value="26" label="docm qowt ui warning"/>
+  <int value="27" label="xls qowt ui warning"/>
+  <int value="28" label="xlsx qowt ui warning"/>
+  <int value="29" label="xlsm qowt ui warning"/>
+  <int value="30" label="ppt qowt ui warning"/>
+  <int value="31" label="pptx qowt ui warning"/>
+  <int value="32" label="pptm qowt ui warning"/>
+  <int value="33" label="pps qowt ui warning"/>
+  <int value="34" label="ppsx qowt ui warning"/>
+  <int value="35" label="ppsm qowt ui warning"/>
+  <int value="36" label="doc nacl error"/>
+  <int value="37" label="docx nacl error"/>
+  <int value="38" label="docm nacl error"/>
+  <int value="39" label="xls nacl error"/>
+  <int value="40" label="xlsx nacl error"/>
+  <int value="41" label="xlsm nacl error"/>
+  <int value="42" label="ppt nacl error"/>
+  <int value="43" label="pptx nacl error"/>
+  <int value="44" label="pptm nacl error"/>
+  <int value="45" label="pps nacl error"/>
+  <int value="46" label="ppsx nacl error"/>
+  <int value="47" label="ppsm nacl error"/>
+  <int value="48" label="doc nacl crash"/>
+  <int value="49" label="docx nacl crash"/>
+  <int value="50" label="docm nacl crash"/>
+  <int value="51" label="xls nacl crash"/>
+  <int value="52" label="xlsx nacl crash"/>
+  <int value="53" label="xlsm nacl crash"/>
+  <int value="54" label="ppt nacl crash"/>
+  <int value="55" label="pptx nacl crash"/>
+  <int value="56" label="pptm nacl crash"/>
+  <int value="57" label="pps nacl crash"/>
+  <int value="58" label="ppsx nacl crash"/>
+  <int value="59" label="ppsm nacl crash"/>
+  <int value="60" label="doc invalid file format"/>
+  <int value="61" label="docx invalid file format"/>
+  <int value="62" label="docm invalid file format"/>
+  <int value="63" label="xls invalid file format"/>
+  <int value="64" label="xlsx invalid file format"/>
+  <int value="65" label="xlsm invalid file format"/>
+  <int value="66" label="ppt invalid file format"/>
+  <int value="67" label="pptx invalid file format"/>
+  <int value="68" label="pptm invalid file format"/>
+  <int value="69" label="pps invalid file format"/>
+  <int value="70" label="ppsx invalid file format"/>
+  <int value="71" label="ppsm invalid file format"/>
+  <int value="72" label="doc editing dom sync error"/>
+  <int value="73" label="docx editing dom sync error"/>
+  <int value="74" label="docm editing dom sync error"/>
+  <int value="75" label="xls editing dom sync error"/>
+  <int value="76" label="xlsx editing dom sync error"/>
+  <int value="77" label="xlsm editing dom sync error"/>
+  <int value="78" label="ppt editing dom sync error"/>
+  <int value="79" label="pptx editing dom sync error"/>
+  <int value="80" label="pptm editing dom sync error"/>
+  <int value="81" label="pps editing dom sync error"/>
+  <int value="82" label="ppsx editing dom sync error"/>
+  <int value="83" label="ppsm editing dom sync error"/>
+</enum>
+
+<enum name="QuickofficeFileFormat" type="int">
+  <int value="0" label="doc"/>
+  <int value="1" label="docx"/>
+  <int value="2" label="docm"/>
+  <int value="3" label="xls"/>
+  <int value="4" label="xlsx"/>
+  <int value="5" label="xlsm"/>
+  <int value="6" label="ppt"/>
+  <int value="7" label="pptx"/>
+  <int value="8" label="pptm"/>
+  <int value="9" label="pps"/>
+  <int value="10" label="ppsx"/>
+  <int value="11" label="ppsm"/>
+  <int value="12" label="csv"/>
+</enum>
+
+<enum name="QuicRejectReasons" type="int">
+  <int value="1" label="CLIENT_NONCE_UNKNOWN_FAILURE"/>
+  <int value="2" label="CLIENT_NONCE_INVALID_FAILURE"/>
+  <int value="4" label="CLIENT_NONCE_NOT_UNIQUE_FAILURE"/>
+  <int value="8" label="CLIENT_NONCE_INVALID_ORBIT_FAILURE"/>
+  <int value="16" label="CLIENT_NONCE_INVALID_TIME_FAILURE"/>
+  <int value="32" label="CLIENT_NONCE_STRIKE_REGISTER_TIMEOUT"/>
+  <int value="64" label="CLIENT_NONCE_STRIKE_REGISTER_FAILURE"/>
+  <int value="128" label="SERVER_NONCE_DECRYPTION_FAILURE"/>
+  <int value="256" label="SERVER_NONCE_INVALID_FAILURE"/>
+  <int value="512" label="SERVER_NONCE_NOT_UNIQUE_FAILURE"/>
+  <int value="1024" label="SERVER_NONCE_INVALID_TIME_FAILURE"/>
+  <int value="2048" label="SERVER_CONFIG_INCHOATE_HELLO_FAILURE"/>
+  <int value="4096" label="SERVER_CONFIG_UNKNOWN_CONFIG_FAILURE"/>
+  <int value="8192" label="SOURCE_ADDRESS_TOKEN_INVALID_FAILURE"/>
+  <int value="16384" label="SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
+  <int value="16512"
+      label="SERVER_NONCE_DECRYPTION_FAILURE+SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
+  <int value="32768" label="SOURCE_ADDRESS_TOKEN_PARSE_FAILURE"/>
+  <int value="65536" label="SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE"/>
+  <int value="65664"
+      label="SERVER_NONCE_DECRYPTION_FAILURE+SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE"/>
+  <int value="131072" label="SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE"/>
+  <int value="262144" label="SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE"/>
+  <int value="524288" label="SERVER_NONCE_REQUIRED_FAILURE"/>
+  <int value="540672"
+      label="SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE+SERVER_NONCE_REQUIRED_FAILURE"/>
+  <int value="589824"
+      label="SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE+SERVER_NONCE_REQUIRED_FAILURE"/>
+  <int value="786432"
+      label="SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE+SERVER_NONCE_REQUIRED_FAILURE"/>
+  <int value="1048576" label="INVALID_EXPECTED_LEAF_CERTIFICATE"/>
+  <int value="1064960"
+      label="INVALID_EXPECTED_LEAF_CERTIFICATE+SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
+  <int value="1114112"
+      label="SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE+INVALID_EXPECTED_LEAF_CERTIFICATE"/>
+  <int value="1310720"
+      label="SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE+INVALID_EXPECTED_LEAF_CERTIFICATE"/>
+  <int value="1572864"
+      label="SERVER_NONCE_REQUIRED_FAILURE+INVALID_EXPECTED_LEAF_CERTIFICATE"/>
+  <int value="1589248"
+      label="INVALID_EXPECTED_LEAF_CERTIFICATE+SERVER_NONCE_REQUIRED_FAILURE+SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE"/>
+</enum>
+
+<enum name="QuicRstStreamErrorCodes" type="int">
+  <int value="0" label="NO_ERROR"/>
+  <int value="1" label="ERROR_PROCESSING_STREAM"/>
+  <int value="2" label="MULTIPLE_TERMINATION_OFFSETS"/>
+  <int value="3" label="BAD_APPLICATION_PAYLOAD"/>
+  <int value="4" label="CONNECTION_ERROR"/>
+  <int value="5" label="PEER_GOING_AWAY"/>
+  <int value="6" label="CANCELLED"/>
+  <int value="7" label="RST_FLOW_CONTROL_ACCOUNTING"/>
+</enum>
+
+<enum name="QuicServerConfigState" type="int">
+  <int value="0" label="SERVER_CONFIG_EMPTY"/>
+  <int value="1" label="SERVER_CONFIG_INVALID"/>
+  <int value="2" label="SERVER_CONFIG_CORRUPTED"/>
+  <int value="3" label="SERVER_CONFIG_EXPIRED"/>
+  <int value="4" label="SERVER_CONFIG_INVALID_EXPIRY"/>
+  <int value="5" label="SERVER_CONFIG_VALID"/>
+</enum>
+
+<enum name="QuicSessionErrorCodes" type="int">
+  <int value="0" label="CONNECTING_SOCKET"/>
+  <int value="1" label="SETTING_RECEIVE_BUFFER"/>
+  <int value="2" label="SETTING_SEND_BUFFER"/>
+  <int value="3" label="SETTING_DO_NOT_FRAGMENT"/>
+</enum>
+
+<enum name="QuicSessionLocations" type="int">
+  <int value="0" label="DESTRUCTOR"/>
+  <int value="1" label="ADD_OBSERVER"/>
+  <int value="2" label="TRY_CREATE_STREAM"/>
+  <int value="3" label="CREATE_OUTGOING_RELIABLE_STREAM"/>
+  <int value="4" label="NOTIFY_FACTORY_OF_SESSION_CLOSED_LATER"/>
+  <int value="5" label="NOTIFY_FACTORY_OF_SESSION_CLOSED"/>
+</enum>
+
+<enum name="QuotaOriginTypes" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="None"/>
+  <int value="2" label="google.com durable"/>
+  <int value="3" label="non-google.com durable"/>
+  <int value="4" label="google.com unlimitedStorage app/ext"/>
+  <int value="5" label="non-google.com unlimitedStorage app/ext"/>
+  <int value="6" label="In use"/>
+</enum>
+
+<enum name="RapporDiscardReason" type="int">
+  <int value="0" label="Upload Success"/>
+  <int value="1" label="Upload Rejected"/>
+  <int value="2" label="Queue Overflowed"/>
+</enum>
+
+<enum name="RapporLoadResultType" type="int">
+  <int value="0" label="LOAD_SUCCESS"/>
+  <int value="1" label="LOAD_EMPTY_VALUE"/>
+  <int value="2" label="LOAD_CORRUPT_VALUE"/>
+</enum>
+
+<enum name="RecentTabsAction" type="int">
+  <int value="0" label="Local Session Tab"/>
+  <int value="1" label="Other Device Tab"/>
+  <int value="2" label="Restore Window"/>
+  <int value="3" label="Show More"/>
+</enum>
+
+<enum name="RecoveryComponentEvent" type="int">
+  <int value="0" label="RunningNonElevated"/>
+  <int value="1" label="ElevationNeeded"/>
+  <int value="2" label="RunFailed"/>
+  <int value="3" label="RunSucceeded"/>
+  <int value="4" label="RunSkipped"/>
+  <int value="5" label="RunningElevated"/>
+  <int value="6" label="RunElevatedFailed"/>
+  <int value="7" label="RunElevatedSucceeded"/>
+  <int value="8" label="RunElevatedSkipped"/>
+  <int value="9" label="DownloadError"/>
+</enum>
+
+<enum name="RefcountOperation" type="int">
+  <int value="0" label="Decrement"/>
+  <int value="1" label="Increment"/>
+</enum>
+
+<enum name="RemotePlaybackDeviceType" type="int">
+  <int value="0" label="Cast Generic Media Player"/>
+  <int value="1" label="Cast YouTube Player"/>
+  <int value="2" label="Non-Cast YouTube Player"/>
+</enum>
+
+<enum name="RemotePlaybackUrlResolveResult" type="int">
+  <int value="0" label="Successfully Resolved"/>
+  <int value="1" label="Malformed or empty Url"/>
+  <int value="2" label="No CORS header when required"/>
+  <int value="3" label="CORS header incompatible with Chromecast"/>
+  <int value="4" label="The response code indicated failure"/>
+  <int value="5" label="IO exception while fetching the url"/>
+  <int value="6" label="Unknown media type"/>
+</enum>
+
+<enum name="RendererSchedulerTaskQueueType" type="int">
+  <int value="0" label="Control"/>
+  <int value="1" label="Default"/>
+  <int value="2" label="DefaultLoading"/>
+  <int value="3" label="DefaultTimer"/>
+  <int value="4" label="Unthrottled"/>
+  <int value="5" label="FrameLoading"/>
+  <int value="6" label="FrameTimer"/>
+  <int value="7" label="FrameUnthrottled"/>
+  <int value="8" label="Compositor"/>
+  <int value="9" label="Idle"/>
+  <int value="10" label="Test"/>
+</enum>
+
+<enum name="RendererType" type="int">
+  <int value="1" label="Normal renderer"/>
+  <int value="2" label="Extension renderer"/>
+</enum>
+
+<enum name="RendererUnresponsiveType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Pending in-flight events"/>
+  <int value="2" label="Waiting for dialog closed"/>
+  <int value="3" label="Suppressed dialogs in unload events"/>
+  <int value="4" label="During BeforeUnload"/>
+  <int value="5" label="During Unload"/>
+  <int value="6" label="While closing the page"/>
+</enum>
+
+<enum name="RenderViewContextMenuItem" type="int">
+  <int value="0" label="IDC_CONTENT_CONTEXT_CUSTOM_FIRST"/>
+  <int value="1" label="IDC_EXTENSIONS_CONTEXT_CUSTOM_FIRST"/>
+  <int value="2" label="IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_FIRST"/>
+  <int value="3" label="IDC_CONTENT_CONTEXT_OPENLINKNEWTAB"/>
+  <int value="4" label="IDC_CONTENT_CONTEXT_OPENLINKNEWWINDOW"/>
+  <int value="5" label="IDC_CONTENT_CONTEXT_OPENLINKOFFTHERECORD"/>
+  <int value="6" label="IDC_CONTENT_CONTEXT_SAVELINKAS"/>
+  <int value="7" label="IDC_CONTENT_CONTEXT_SAVEAVAS"/>
+  <int value="8" label="IDC_CONTENT_CONTEXT_SAVEIMAGEAS"/>
+  <int value="9" label="IDC_CONTENT_CONTEXT_COPYLINKLOCATION"/>
+  <int value="10" label="IDC_CONTENT_CONTEXT_COPYIMAGELOCATION"/>
+  <int value="11" label="IDC_CONTENT_CONTEXT_COPYAVLOCATION"/>
+  <int value="12" label="IDC_CONTENT_CONTEXT_COPYIMAGE"/>
+  <int value="13" label="IDC_CONTENT_CONTEXT_OPENIMAGENEWTAB"/>
+  <int value="14" label="IDC_CONTENT_CONTEXT_OPENAVNEWTAB"/>
+  <int value="15" label="IDC_CONTENT_CONTEXT_PLAYPAUSE"/>
+  <int value="16" label="IDC_CONTENT_CONTEXT_MUTE"/>
+  <int value="17" label="IDC_CONTENT_CONTEXT_LOOP"/>
+  <int value="18" label="IDC_CONTENT_CONTEXT_CONTROLS"/>
+  <int value="19" label="IDC_CONTENT_CONTEXT_ROTATECW"/>
+  <int value="20" label="IDC_CONTENT_CONTEXT_ROTATECCW"/>
+  <int value="21" label="IDC_BACK"/>
+  <int value="22" label="IDC_FORWARD"/>
+  <int value="23" label="IDC_SAVE_PAGE"/>
+  <int value="24" label="IDC_RELOAD"/>
+  <int value="25" label="IDC_CONTENT_CONTEXT_RELOAD_PACKAGED_APP"/>
+  <int value="26" label="IDC_CONTENT_CONTEXT_RESTART_PACKAGED_APP"/>
+  <int value="27" label="IDC_PRINT"/>
+  <int value="28" label="IDC_VIEW_SOURCE"/>
+  <int value="29" label="IDC_CONTENT_CONTEXT_INSPECTELEMENT"/>
+  <int value="30" label="IDC_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE"/>
+  <int value="31" label="IDC_CONTENT_CONTEXT_VIEWPAGEINFO"/>
+  <int value="32" label="IDC_CONTENT_CONTEXT_TRANSLATE"/>
+  <int value="33" label="IDC_CONTENT_CONTEXT_RELOADFRAME"/>
+  <int value="34" label="IDC_CONTENT_CONTEXT_VIEWFRAMESOURCE"/>
+  <int value="35" label="IDC_CONTENT_CONTEXT_VIEWFRAMEINFO"/>
+  <int value="36" label="IDC_CONTENT_CONTEXT_UNDO"/>
+  <int value="37" label="IDC_CONTENT_CONTEXT_REDO"/>
+  <int value="38" label="IDC_CONTENT_CONTEXT_CUT"/>
+  <int value="39" label="IDC_CONTENT_CONTEXT_COPY"/>
+  <int value="40" label="IDC_CONTENT_CONTEXT_PASTE"/>
+  <int value="41" label="IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE"/>
+  <int value="42" label="IDC_CONTENT_CONTEXT_DELETE"/>
+  <int value="43" label="IDC_CONTENT_CONTEXT_SELECTALL"/>
+  <int value="44" label="IDC_CONTENT_CONTEXT_SEARCHWEBFOR"/>
+  <int value="45" label="IDC_CONTENT_CONTEXT_GOTOURL"/>
+  <int value="46" label="IDC_CONTENT_CONTEXT_LANGUAGE_SETTINGS"/>
+  <int value="47" label="IDC_CONTENT_CONTEXT_PROTOCOL_HANDLER_SETTINGS"/>
+  <int value="48" label="IDC_CONTENT_CONTEXT_ADDSEARCHENGINE"/>
+  <int value="49" label="IDC_CONTENT_CONTEXT_SPEECH_INPUT_FILTER_PROFANITIES"/>
+  <int value="50" label="IDC_CONTENT_CONTEXT_SPEECH_INPUT_ABOUT"/>
+  <int value="51" label="IDC_SPEECH_INPUT_MENU"/>
+  <int value="52" label="IDC_CONTENT_CONTEXT_OPENLINKWITH"/>
+  <int value="53" label="IDC_CHECK_SPELLING_WHILE_TYPING"/>
+  <int value="54" label="IDC_SPELLCHECK_MENU"/>
+  <int value="55" label="IDC_CONTENT_CONTEXT_SPELLING_TOGGLE"/>
+  <int value="56" label="IDC_SPELLCHECK_LANGUAGES_FIRST"/>
+  <int value="57" label="IDC_CONTENT_CONTEXT_SEARCHWEBFORIMAGE"/>
+  <int value="58" label="IDC_SPELLCHECK_SUGGESTION"/>
+  <int value="59" label="IDC_SPELLCHECK_ADD_TO_DICTIONARY"/>
+  <int value="60" label="IDC_SPELLPANEL_TOGGLE"/>
+  <int value="61" label="IDC_CONTENT_CONTEXT_OPENORIGINALIMAGENEWTAB"/>
+  <int value="62" label="IDC_WRITING_DIRECTION_MENU"/>
+  <int value="63" label="IDC_WRITING_DIRECTION_DEFAULT"/>
+  <int value="64" label="IDC_WRITING_DIRECTION_LTR"/>
+  <int value="65" label="IDC_WRITING_DIRECTION_RTL"/>
+  <int value="66" label="IDC_CONTENT_CONTEXT_LOAD_ORIGINAL_IMAGE"/>
+  <int value="67" label="IDC_CONTENT_CONTEXT_FORCESAVEPASSWORD"/>
+  <int value="68" label="IDC_ROUTE_MEDIA"/>
+  <int value="69" label="IDC_CONTENT_CONTEXT_COPYLINKTEXT"/>
+  <int value="70" label="IDC_CONTENT_CONTEXT_OPENLINKINPROFILE"/>
+  <int value="71" label="IDC_OPEN_LINK_IN_PROFILE_FIRST"/>
+  <int value="72" label="IDC_CONTENT_CONTEXT_GENERATEPASSWORD"/>
+  <int value="73" label="IDC_SPELLCHECK_MULTI_LINGUAL"/>
+  <int value="74" label="IDC_CONTENT_CONTEXT_OPEN_WITH1"/>
+  <int value="75" label="IDC_CONTENT_CONTEXT_OPEN_WITH2"/>
+  <int value="76" label="IDC_CONTENT_CONTEXT_OPEN_WITH3"/>
+  <int value="77" label="IDC_CONTENT_CONTEXT_OPEN_WITH4"/>
+  <int value="78" label="IDC_CONTENT_CONTEXT_OPEN_WITH5"/>
+  <int value="79" label="IDC_CONTENT_CONTEXT_OPEN_WITH6"/>
+  <int value="80" label="IDC_CONTENT_CONTEXT_OPEN_WITH7"/>
+  <int value="81" label="IDC_CONTENT_CONTEXT_OPEN_WITH8"/>
+  <int value="82" label="IDC_CONTENT_CONTEXT_OPEN_WITH9"/>
+  <int value="83" label="IDC_CONTENT_CONTEXT_OPEN_WITH10"/>
+  <int value="84" label="IDC_CONTENT_CONTEXT_OPEN_WITH11"/>
+  <int value="85" label="IDC_CONTENT_CONTEXT_OPEN_WITH12"/>
+  <int value="86" label="IDC_CONTENT_CONTEXT_OPEN_WITH13"/>
+  <int value="87" label="IDC_CONTENT_CONTEXT_OPEN_WITH14"/>
+  <int value="88" label="IDC_CONTENT_CONTEXT_EXIT_FULLSCREEN"/>
+</enum>
+
+<enum name="ReportProcessingResult" type="int">
+  <int value="0" label="Success">A report was created and uploaded</int>
+  <int value="1" label="Suppressed">
+    A report was not uploaded because the CSD Whitelist killswitch was present
+  </int>
+  <int value="2" label="InvalidRequest">
+    A report was not uploaded because it could not be serialized
+  </int>
+  <int value="3" label="Cancelled">
+    A report upload was cancelled due to service shutdown
+  </int>
+  <int value="4" label="RequestFailed">A report upload failed</int>
+  <int value="5" label="InvalidResponse">
+    The response from a report upload was invalid
+  </int>
+  <int value="6" label="NoDownload">
+    A report was not uploaded because no binary download was found to report
+  </int>
+</enum>
+
+<enum name="RequestedImageMimeType" type="int">
+  <int value="0" label="Png"/>
+  <int value="1" label="Jpeg"/>
+  <int value="2" label="Webp"/>
+  <int value="3" label="Gif"/>
+  <int value="4" label="Bmp"/>
+  <int value="5" label="Ico"/>
+  <int value="6" label="Tiff"/>
+  <int value="7" label="Unknown"/>
+</enum>
+
+<enum name="RequestMediaKeySystemAccessStatus" type="int">
+  <int value="0" label="Requested"/>
+  <int value="1" label="Supported"/>
+</enum>
+
+<enum name="ResolutionCategory" type="int">
+  <int value="0" label="RESOLVE_SUCCESS"/>
+  <int value="1" label="RESOLVE_FAIL"/>
+  <int value="2" label="RESOLVE_SPECULATIVE_SUCCESS"/>
+  <int value="3" label="RESOLVE_SPECULATIVE_FAIL"/>
+</enum>
+
+<enum name="ResolutionUnspecWasteCategory" type="int">
+  <int value="0" label="AF_WASTE_IPV4_ONLY">
+    Running in a IPv4-only configuration.  No waste.
+  </int>
+  <int value="1" label="AF_WASTE_CACHE_IPV4">
+    Cache contained an UNSPEC result for this IPv4 lookup.  Waste.
+  </int>
+  <int value="2" label="AF_WASTE_CACHE_UNSPEC">
+    Cache contained an IPv4 result for this UNSPEC lookup.  Waste.
+  </int>
+  <int value="3" label="AF_WASTE_JOB_IPV4">
+    Job pool contained an UNSPEC job for this IPv4 lookup.  Waste.
+  </int>
+  <int value="4" label="AF_WASTE_JOB_UNSPEC">
+    Job pool contained an IPv4 job for this UNSPEC lookup.  Waste.
+  </int>
+  <int value="5" label="AF_WASTE_NONE_IPV4">
+    A new job was needed for this IPv4 lookup.  No waste.
+  </int>
+  <int value="6" label="AF_WASTE_NONE_UNSPEC">
+    A new job was needed for this UNSPEC lookup.  No waste.
+  </int>
+</enum>
+
+<enum name="ResourceHasClient" type="int">
+  <int value="0" label="No client"/>
+  <int value="1" label="Has client"/>
+</enum>
+
+<enum name="ResourceLoaderInliningStatus" type="int">
+  <int value="0" label="Applicable"/>
+  <int value="1" label="EarlyAllocation"/>
+  <int value="2" label="UnknownContentLength"/>
+  <int value="3" label="LargeContent"/>
+  <int value="4" label="HasTransferEncoding"/>
+  <int value="5" label="HasContentEncoding"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorMainFrameRequestStats" type="int">
+  <int value="0" label="MAIN_FRAME_REQUEST_STATS_TOTAL_REQUESTS"/>
+  <int value="1" label="MAIN_FRAME_REQUEST_STATS_PROCESSED_REQUESTS"/>
+  <int value="2" label="MAIN_FRAME_REQUEST_STATS_TOTAL_REDIRECTS"/>
+  <int value="3" label="MAIN_FRAME_REQUEST_STATS_PROCESSED_REDIRECTS"/>
+  <int value="4" label="MAIN_FRAME_REQUEST_STATS_TOTAL_RESPONSES"/>
+  <int value="5" label="MAIN_FRAME_REQUEST_STATS_PROCESSED_RESPONSES"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorNavigationEvent" type="int">
+  <int value="0" label="NAVIGATION_EVENT_REQUEST_STARTED"/>
+  <int value="1" label="NAVIGATION_EVENT_REQUEST_REDIRECTED"/>
+  <int value="2" label="NAVIGATION_EVENT_REQUEST_REDIRECTED_EMPTY_URL"/>
+  <int value="3" label="NAVIGATION_EVENT_REQUEST_EXPIRED"/>
+  <int value="4" label="NAVIGATION_EVENT_RESPONSE_STARTED"/>
+  <int value="5" label="NAVIGATION_EVENT_ONLOAD"/>
+  <int value="6" label="NAVIGATION_EVENT_ONLOAD_EMPTY_URL"/>
+  <int value="7" label="NAVIGATION_EVENT_ONLOAD_UNTRACKED_URL"/>
+  <int value="8" label="NAVIGATION_EVENT_ONLOAD_TRACKED_URL"/>
+  <int value="9" label="NAVIGATION_EVENT_SHOULD_TRACK_URL"/>
+  <int value="10" label="NAVIGATION_EVENT_SHOULD_NOT_TRACK_URL"/>
+  <int value="11" label="NAVIGATION_EVENT_URL_TABLE_FULL"/>
+  <int value="12" label="NAVIGATION_EVENT_HAVE_PREDICTIONS_FOR_URL"/>
+  <int value="13" label="NAVIGATION_EVENT_NO_PREDICTIONS_FOR_URL"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorNavigationStatus" type="int">
+  <int value="0" label="NAVIGATION_STATUS_COMPLETE"/>
+  <int value="1" label="NAVIGATION_STATUS_COMPLETE_ABANDONED"/>
+  <int value="2" label="NAVIGATION_STATUS_ABANDONED"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorNetworkType" type="int">
+  <int value="-2" label="CONNECTION_ALL"/>
+  <int value="-1" label="CONNECTION_CELLULAR"/>
+  <int value="0" label="CONNECTION_UNKNOWN"/>
+  <int value="1" label="CONNECTION_ETHERNET"/>
+  <int value="2" label="CONNECTION_WIFI"/>
+  <int value="3" label="CONNECTION_2G"/>
+  <int value="4" label="CONNECTION_3G"/>
+  <int value="5" label="CONNECTION_4G"/>
+  <int value="6" label="CONNECTION_NONE"/>
+  <int value="7" label="CONNECTION_BLUETOOTH"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorReportingEvent" type="int">
+  <int value="0" label="REPORTING_EVENT_ALL_HISTORY_CLEARED"/>
+  <int value="1" label="REPORTING_EVENT_PARTIAL_HISTORY_CLEARED"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorRequestStats" type="int">
+  <int value="0" label="REQUEST_STATS_TOTAL_RESPONSES"/>
+  <int value="1" label="REQUEST_STATS_TOTAL_PROCESSED_RESPONSES"/>
+  <int value="2" label="REQUEST_STATS_NO_RESOURCE_REQUEST_INFO"/>
+  <int value="3" label="REQUEST_STATS_NO_RENDER_VIEW_ID_FROM_REQUEST_INFO"/>
+</enum>
+
+<enum name="ResourcePrefetchPredictorResourceStatus" type="int">
+  <int value="0" label="RESOURCE_STATUS_HANDLED"/>
+  <int value="1" label="RESOURCE_STATUS_NOT_HTTP_PAGE"/>
+  <int value="2" label="RESOURCE_STATUS_NOT_HTTP_RESOURCE"/>
+  <int value="4" label="RESOURCE_STATUS_UNSUPPORTED_MIME_TYPE"/>
+  <int value="8" label="RESOURCE_STATUS_NOT_GET"/>
+  <int value="16" label="RESOURCE_STATUS_URL_TOO_LONG"/>
+  <int value="32" label="RESOURCE_STATUS_NOT_CACHEABLE"/>
+  <int value="64" label="RESOURCE_STATUS_HEADERS_MISSING"/>
+</enum>
+
+<enum name="ResourceReporterCpuUsage" type="int">
+  <int value="0" label="0-10%"/>
+  <int value="1" label="10%-30%"/>
+  <int value="2" label="30%-60%"/>
+  <int value="4" label="&gt;60%"/>
+</enum>
+
+<enum name="ResourceReporterMemoryUsage" type="int">
+  <int value="0" label="0-200MB"/>
+  <int value="1" label="200MB-400MB"/>
+  <int value="2" label="400MB-600MB"/>
+  <int value="4" label="600MB-800MB"/>
+  <int value="8" label="800MB-1GB"/>
+  <int value="16" label="&gt;1GB."/>
+</enum>
+
+<enum name="ResourceType" type="int">
+  <int value="0" label="Main resource"/>
+  <int value="1" label="Image"/>
+  <int value="2" label="CSSS"/>
+  <int value="3" label="Script"/>
+  <int value="4" label="Font"/>
+  <int value="5" label="Raw"/>
+  <int value="6" label="SVG"/>
+  <int value="7" label="XSL"/>
+  <int value="8" label="Link prefetch"/>
+  <int value="9" label="Link subresource"/>
+  <int value="10" label="Text track"/>
+  <int value="11" label="ImportResource"/>
+  <int value="12" label="Media"/>
+  <int value="13" label="Manifest"/>
+</enum>
+
+<enum name="RestoredCachedStyleSheet" type="int">
+  <int value="0" label="No usable cache found"/>
+  <int value="1" label="Cached StyleSheetContents was reused"/>
+</enum>
+
+<enum name="RevalidationPolicy" type="int">
+  <int value="0" label="Use"/>
+  <int value="1" label="Revalidate"/>
+  <int value="2" label="Reload"/>
+  <int value="3" label="Load"/>
+</enum>
+
+<enum name="RunningMode" type="int">
+  <obsolete>
+    Removed 9/2016.
+  </obsolete>
+  <int value="0" label="Document Mode"/>
+  <int value="1" label="Tabbed Mode"/>
+</enum>
+
+<enum name="SadTabEvent" type="int">
+  <int value="0" label="Displayed"/>
+  <int value="1" label="Button clicked"/>
+  <int value="2" label="Learn more clicked"/>
+</enum>
+
+<enum name="SadTabKind" type="int">
+  <int value="0" label="Crash (Aw, Snap!)"/>
+  <int value="1" label="Kill (He's dead, Jim!)"/>
+</enum>
+
+<enum name="SafeBrowsingParseV4HashResult" type="int">
+  <int value="0" label="PARSE_FROM_STRING_ERROR"/>
+  <int value="1" label="UNEXPECTED_THREAT_ENTRY_TYPE_ERROR"/>
+  <int value="2" label="UNEXPECTED_THREAT_TYPE_ERROR"/>
+  <int value="3" label="UNEXPECTED_PLATFORM_TYPE_ERROR"/>
+  <int value="4" label="NO_METADATA_ERROR"/>
+  <int value="5" label="INCONSISTENT_THREAT_TYPE_ERROR"/>
+  <int value="6" label="UNEXPECTED_METADATA_VALUE_ERROR"/>
+  <int value="7" label="NO_THREAT_ERROR"/>
+</enum>
+
+<enum name="SafeBrowsingParseV4UpdateResult" type="int">
+  <int value="0" label="PARSE_FROM_STRING_ERROR"/>
+  <int value="1" label="NO_PLATFORM_TYPE_ERROR"/>
+  <int value="2" label="NO_THREAT_ENTRY_TYPE_ERROR"/>
+  <int value="3" label="NO_THREAT_TYPE_ERROR"/>
+  <int value="4" label="NO_STATE_ERROR"/>
+</enum>
+
+<enum name="SafeBrowsingV4ApplyUpdateResult" type="int">
+  <int value="0" label="APPLY_UPDATE_SUCCESS"/>
+  <int value="1" label="UNEXPECTED_APPLY_UPDATE_FAILURE"/>
+  <int value="2" label="PREFIX_SIZE_TOO_SMALL_FAILURE"/>
+  <int value="3" label="PREFIX_SIZE_TOO_LARGE_FAILURE"/>
+  <int value="4" label="ADDITIONS_SIZE_UNEXPECTED_FAILURE"/>
+  <int value="5" label="ADDITIONS_HAS_EXISTING_PREFIX_FAILURE"/>
+  <int value="6" label="UNEXPECTED_RESPONSE_TYPE_FAILURE"/>
+  <int value="7" label="REMOVALS_INDEX_TOO_LARGE_FAILURE"/>
+  <int value="8" label="RICE_DECODING_FAILURE"/>
+  <int value="9" label="UNEXPECTED_COMPRESSION_TYPE_ADDITIONS_FAILURE"/>
+  <int value="10" label="UNEXPECTED_COMPRESSION_TYPE_REMOVALS_FAILURE"/>
+  <int value="11" label="CHECKSUM_MISMATCH_FAILURE"/>
+</enum>
+
+<enum name="SafeBrowsingV4DecodeResult" type="int">
+  <int value="0" label="DECODE_SUCCESS"/>
+  <int value="1" label="DECODE_NO_MORE_ENTRIES_FAILURE"/>
+  <int value="2" label="DECODE_REQUESTED_TOO_MANY_BITS_FAILURE"/>
+  <int value="3" label="DECODE_RAN_OUT_OF_BITS_FAILURE"/>
+  <int value="4" label="NUM_ENTRIES_NEGATIVE_FAILURE"/>
+  <int value="5" label="RICE_PARAMETER_NON_POSITIVE_FAILURE"/>
+  <int value="6" label="ENCODED_DATA_UNEXPECTED_EMPTY_FAILURE"/>
+  <int value="7" label="DECODED_INTEGER_OVERFLOW_FAILURE"/>
+</enum>
+
+<enum name="SafeBrowsingV4FullHashCacheResult" type="int">
+  <int value="0" label="FULL_HASH_CACHE_MISS"/>
+  <int value="1" label="FULL_HASH_CACHE_HIT"/>
+  <int value="2" label="FULL_HASH_NEGATIVE_CACHE_HIT"/>
+</enum>
+
+<enum name="SafeBrowsingV4GetHashCheckResult" type="int">
+  <int value="0" label="GET_HASH_CHECK_EMPTY"/>
+  <int value="1" label="GET_HASH_CHECK_HIT"/>
+  <int value="2" label="GET_HASH_CHECK_MISS"/>
+</enum>
+
+<enum name="SafeBrowsingV4OperationResult" type="int">
+  <int value="0" label="STATUS_200"/>
+  <int value="1" label="PARSE_ERROR (subset of STATUS_200)"/>
+  <int value="2" label="NETWORK_ERROR"/>
+  <int value="3" label="HTTP_ERROR"/>
+  <int value="4" label="BACKOFF_ERROR"/>
+  <int value="5" label="MIN_WAIT_DURATION_ERROR"/>
+  <int value="6" label="ALREADY_PENDING_ERROR"/>
+</enum>
+
+<enum name="SafeBrowsingV4StoreReadResult" type="int">
+  <int value="0" label="READ_SUCCESS"/>
+  <int value="1" label="UNEXPECTED_READ_FAILURE"/>
+  <int value="2" label="FILE_UNREADABLE_FAILURE"/>
+  <int value="3" label="FILE_EMPTY_FAILURE"/>
+  <int value="4" label="PROTO_PARSING_FAILURE"/>
+  <int value="5" label="UNEXPECTED_MAGIC_NUMBER_FAILURE"/>
+  <int value="6" label="FILE_VERSION_TOO_LOW_FAILURE"/>
+  <int value="7" label="HASH_PREFIX_INFO_MISSING_FAILURE"/>
+  <int value="8" label="HASH_PREFIX_MAP_GENERATION_FAILURE"/>
+</enum>
+
+<enum name="SafeBrowsingV4StoreWriteResult" type="int">
+  <int value="0" label="WRITE_SUCCESS"/>
+  <int value="1" label="UNEXPECTED_WRITE_FAILURE"/>
+  <int value="2" label="INVALID_RESPONSE_TYPE_FAILURE"/>
+  <int value="3" label="UNEXPECTED_BYTES_WRITTEN_FAILURE"/>
+  <int value="4" label="UNABLE_TO_RENAME_FAILURE"/>
+</enum>
+
+<enum name="SavePasswordPromptResponseType" type="int">
+  <int value="0" label="NO_RESPONSE"/>
+  <int value="1" label="REMEMBER_PASSWORD"/>
+  <int value="2" label="DONT_REMEMBER_PASSWORD"/>
+</enum>
+
+<enum name="SB2BloomFailure" type="int">
+  <obsolete>
+    Bloom filter support deleted in October 2012.
+  </obsolete>
+  <int value="0" label="READ_OPEN"/>
+  <int value="1" label="READ_VERSION"/>
+  <int value="2" label="READ_NUM_KEYS"/>
+  <int value="3" label="READ_KEY"/>
+  <int value="4" label="READ_DATA_MINSIZE"/>
+  <int value="5" label="READ_DATA_MAXSIZE"/>
+  <int value="6" label="READ_DATA_SHORT"/>
+  <int value="7" label="READ_DATA"/>
+</enum>
+
+<enum name="SB2BloomFilterFalsePositives" type="int">
+  <obsolete>
+    Bloom filter support deleted in October 2012.
+  </obsolete>
+  <int value="0" label="ALL_MISSES"/>
+  <int value="1" label="FALSE_POSITIVE_MISSES"/>
+</enum>
+
+<enum name="SB2DatabaseFailure" type="int">
+  <int value="0" label="FAILURE_DATABASE_CORRUPT"/>
+  <int value="1" label="FAILURE_DATABASE_CORRUPT_HANDLER"/>
+  <int value="2" label="FAILURE_BROWSE_DATABASE_UPDATE_BEGIN"/>
+  <int value="3" label="FAILURE_BROWSE_DATABASE_UPDATE_FINISH"/>
+  <int value="4" label="FAILURE_DATABASE_FILTER_MISSING_OBSOLETE"/>
+  <int value="5" label="FAILURE_DATABASE_FILTER_READ_OBSOLETE"/>
+  <int value="6" label="FAILURE_DATABASE_FILTER_WRITE_OBSOLETE"/>
+  <int value="7" label="FAILURE_DATABASE_FILTER_DELETE"/>
+  <int value="8" label="FAILURE_DATABASE_STORE_MISSING"/>
+  <int value="9" label="FAILURE_DATABASE_STORE_DELETE"/>
+  <int value="10" label="FAILURE_DOWNLOAD_DATABASE_UPDATE_BEGIN"/>
+  <int value="11" label="FAILURE_DOWNLOAD_DATABASE_UPDATE_FINISH"/>
+  <int value="12" label="FAILURE_WHITELIST_DATABASE_UPDATE_BEGIN"/>
+  <int value="13" label="FAILURE_WHITELIST_DATABASE_UPDATE_FINISH"/>
+  <int value="14" label="FAILURE_BROWSE_PREFIX_SET_READ"/>
+  <int value="15" label="FAILURE_BROWSE_PREFIX_SET_WRITE"/>
+  <int value="16" label="FAILURE_BROWSE_PREFIX_SET_DELETE"/>
+  <int value="17" label="FAILURE_EXTENSION_BLACKLIST_UPDATE_BEGIN"/>
+  <int value="18" label="FAILURE_EXTENSION_BLACKLIST_UPDATE_FINISH"/>
+  <int value="19" label="FAILURE_EXTENSION_BLACKLIST_DELETE"/>
+  <int value="20" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_BEGIN"/>
+  <int value="21" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_UPDATE_FINISH"/>
+  <int value="22" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_DELETE"/>
+  <int value="23" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_READ"/>
+  <int value="24" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_WRITE"/>
+  <int value="25" label="FAILURE_SIDE_EFFECT_FREE_WHITELIST_PREFIX_SET_DELETE"/>
+  <int value="26" label="FAILURE_IP_BLACKLIST_UPDATE_BEGIN"/>
+  <int value="27" label="FAILURE_IP_BLACKLIST_UPDATE_FINISH"/>
+  <int value="28" label="FAILURE_IP_BLACKLIST_UPDATE_INVALID"/>
+  <int value="29" label="FAILURE_IP_BLACKLIST_DELETE"/>
+  <int value="30" label="FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_BEGIN"/>
+  <int value="31" label="FAILURE_UNWANTED_SOFTWARE_DATABASE_UPDATE_FINISH"/>
+  <int value="32" label="FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_READ"/>
+  <int value="33" label="FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_WRITE"/>
+  <int value="34" label="FAILURE_UNWANTED_SOFTWARE_PREFIX_SET_DELETE"/>
+  <int value="35" label="FAILURE_RESOURCE_BLACKLIST_UPDATE_BEGIN"/>
+  <int value="36" label="FAILURE_RESOURCE_BLACKLIST_UPDATE_FINISH"/>
+  <int value="37" label="FAILURE_RESOURCE_BLACKLIST_DELETE"/>
+  <int value="38" label="FAILURE_MODULE_WHITELIST_DELETE"/>
+</enum>
+
+<enum name="SB2DownloadChecks" type="int">
+  <int value="0" label="URL_CHECKS_TOTAL"/>
+  <int value="1" label="URL_CHECKS_CANCELED"/>
+  <int value="2" label="URL_CHECKS_MALWARE"/>
+  <int value="3" label="HASH_CHECKS_TOTAL"/>
+  <int value="4" label="HASH_CHECKS_MALWARE"/>
+</enum>
+
+<enum name="SB2FilterLoad" type="int">
+  <int value="0" label="ALL"/>
+  <int value="1" label="PREFIX_SET"/>
+  <int value="2" label="BLOOM_FILTER"/>
+</enum>
+
+<enum name="SB2FormatEvent" type="int">
+  <summary>
+    Track information for various error cases in the safe-browsing store.
+  </summary>
+  <int value="0" label="FILE_CORRUPT">Store corruption detected</int>
+  <int value="1" label="SQLITE_CORRUPT">
+    SQLite store orruption detected (obsolete)
+  </int>
+  <int value="2" label="FOUND_SQLITE">SQLite store found (obsolete)</int>
+  <int value="3" label="FOUND_UNKNOWN">Store format unknown at open</int>
+  <int value="4" label="SQLITE_DELETED">
+    Deleted SQLite-format store (obsolete)
+  </int>
+  <int value="5" label="SQLITE_DELETE_FAILED">
+    Deletion of SQLite-format store failed (obsolete)
+  </int>
+  <int value="6" label="SQLITE_DELETED_ORIGINAL">
+    Deleted pre-release SQLite store (obsolete)
+  </int>
+  <int value="7" label="SQLITE_DELETE_ORIGINAL_FAILED">
+    Deletion of pre-release SQLite store failed (obsolete)
+  </int>
+  <int value="8" label="VALIDITY_CHECKSUM_FAILURE">
+    Failed explicit checksum check on failed update from server
+  </int>
+  <int value="9" label="UPDATE_CHECKSUM_FAILURE">
+    Failed checksum check while merging new data into store
+  </int>
+  <int value="10" label="HEADER_CHECKSUM_FAILURE">
+    Failed header checksum check when opening store
+  </int>
+  <int value="11" label="FOUND_DEPRECATED">
+    Store with valid magic number has deprecated version number
+  </int>
+</enum>
+
+<enum name="SB2GetHashResult" type="int">
+  <int value="0" label="STATUS_200"/>
+  <int value="1" label="STATUS_204"/>
+  <int value="2" label="FULL_HASH_EMPTY (sum of STATUS_204, *_ERROR)"/>
+  <int value="3" label="FULL_HASH_HIT (subset of STATUS_200)"/>
+  <int value="4" label="FULL_HASH_MISS (subset of STATUS_200)"/>
+  <int value="5" label="PARSE_ERROR (subset of STATUS_200)"/>
+  <int value="6" label="NETWORK_ERROR"/>
+  <int value="7" label="HTTP_ERROR"/>
+  <int value="8" label="BACKOFF_ERROR"/>
+</enum>
+
+<enum name="SB2InterstitialAction" type="int">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <int value="0" label="MALWARE_SHOW"/>
+  <int value="1" label="MALWARE_DONT_PROCEED"/>
+  <int value="2" label="MALWARE_FORCED_DONT_PROCEED"/>
+  <int value="3" label="MALWARE_PROCEED"/>
+  <int value="4" label="MULTIPLE_SHOW"/>
+  <int value="5" label="MULTIPLE_DONT_PROCEED"/>
+  <int value="6" label="MULTIPLE_FORCED_DONT_PROCEED"/>
+  <int value="7" label="MULTIPLE_PROCEED"/>
+  <int value="8" label="PHISHING_SHOW"/>
+  <int value="9" label="PHISHING_DONT_PROCEED"/>
+  <int value="10" label="PHISHING_FORCED_DONT_PROCEED"/>
+  <int value="11" label="PHISHING_PROCEED"/>
+  <int value="12" label="MALWARE_SHOW_ADVANCED"/>
+  <int value="13" label="MULTIPLE_SHOW_ADVANCED"/>
+  <int value="14" label="PHISHING_SHOW_ADVANCED"/>
+</enum>
+
+<enum name="SB2InterstitialActionDetails" type="int">
+  <obsolete>
+    Deprecated 9/2014.
+  </obsolete>
+  <int value="0" label="MALWARE_SHOW_NEW_SITE"/>
+  <int value="1" label="MALWARE_PROCEED_NEW_SITE"/>
+  <int value="2" label="MALWARE_SHOW_CROSS_SITE"/>
+  <int value="3" label="MALWARE_PROCEED_CROSS_SITE"/>
+  <int value="4" label="PHISHING_SHOW_NEW_SITE"/>
+  <int value="5" label="PHISHING_PROCEED_NEW_SITE"/>
+  <int value="6" label="PHISHING_SHOW_CROSS_SITE"/>
+  <int value="7" label="PHISHING_PROCEED_CROSS_SITE"/>
+</enum>
+
+<enum name="SB2PrefixSetEvent" type="int">
+  <obsolete>
+    Deprecated 9/2012. No longer generated.
+  </obsolete>
+  <int value="0" label="PREFIX_SET_HIT"/>
+  <int value="1" label="BLOOM_HIT"/>
+  <int value="2" label="BLOOM_MISS_PREFIX_SET_HIT"/>
+  <int value="3" label="BLOOM_MISS_PREFIX_HIT_INVALID"/>
+  <int value="4" label="GETPREFIXES_BROKEN"/>
+  <int value="5" label="GETPREFIXES_BROKEN_SIZE"/>
+  <int value="6" label="GETPREFIXES_FIRST_BROKEN"/>
+  <int value="7" label="SBPREFIX_WAS_BROKEN"/>
+  <int value="8" label="GETPREFIXES_BROKEN_SORTING"/>
+  <int value="9" label="GETPREFIXES_BROKEN_DUPLICATION"/>
+  <int value="10" label="GETPREFIX_UNSORTED_IS_DELTA"/>
+  <int value="11" label="GETPREFIX_UNSORTED_IS_INDEX"/>
+  <int value="12" label="CREATE_PREFIX_SET_CHECKSUM"/>
+  <int value="13" label="CREATE_BLOOM_FILTER_CHECKSUM"/>
+  <int value="14" label="CREATE_ADD_PREFIXES_CHECKSUM"/>
+  <int value="15" label="CREATE_PREFIXES_CHECKSUM"/>
+  <int value="16" label="GET_PREFIXES_CHECKSUM"/>
+  <int value="17" label="MISMATCH_PREFIX_SET_CHECKSUM"/>
+  <int value="18" label="MISMATCH_BLOOM_FILTER_CHECKSUM"/>
+  <int value="19" label="BLOOM_MISS_PREFIX_HIT"/>
+</enum>
+
+<enum name="SB2RemoteCallResult" type="int">
+  <int value="0" label="INTERNAL_ERROR"/>
+  <int value="1" label="TIMEOUT"/>
+  <int value="2" label="SAFE"/>
+  <int value="3" label="UNSAFE"/>
+  <int value="4" label="JSON_EMPTY"/>
+  <int value="5" label="JSON_FAILED_TO_PARSE"/>
+  <int value="6" label="JSON_UNKNOWN_THREAT"/>
+  <int value="7" label="UNSUPPORTED"/>
+</enum>
+
+<enum name="SB2RemoteCallThreatSubType" type="int">
+  <int value="0" label="No subtype added"/>
+  <int value="1" label="Potentially Harmful App Landing URL"/>
+  <int value="2" label="Potentially Harmful App Distribution URL"/>
+  <int value="3" label="Unknown"/>
+  <int value="4" label="Social Engineering Ads URL"/>
+  <int value="5" label="Social Engineering Landing URL"/>
+  <int value="6" label="Phishing URL"/>
+</enum>
+
+<enum name="SB2SideEffectFreeWhitelistStatus" type="int">
+  <int value="0" label="Enabled"/>
+  <int value="1" label="Disabled"/>
+</enum>
+
+<enum name="SB2UpdateResult" type="int">
+  <int value="0" label="FAIL"/>
+  <int value="1" label="SUCCESS"/>
+  <int value="2" label="BACKUP_CONNECT_FAIL"/>
+  <int value="3" label="BACKUP_CONNECT_SUCCESS"/>
+  <int value="4" label="BACKUP_HTTP_FAIL"/>
+  <int value="5" label="BACKUP_HTTP_SUCCESS"/>
+  <int value="6" label="BACKUP_NETWORK_FAIL"/>
+  <int value="7" label="BACKUP_NETWORK_SUCCESS"/>
+</enum>
+
+<enum name="SBClientDetectionPreClassificationCheckFail" type="int">
+  <int value="0" label="PROXY_FETCH"/>
+  <int value="1" label="PRIVATE_IP"/>
+  <int value="2" label="OFF_THE_RECORD"/>
+  <int value="3" label="MATCH_CSD_WHITELIST"/>
+  <int value="4" label="TOO_MANY_REPORTS"/>
+  <int value="5" label="UNSUPPORTED_MIME_TYPE"/>
+  <int value="6" label="NO_DATABASE_MANAGER"/>
+  <int value="7" label="KILLSWITCH"/>
+  <int value="8" label="CANCEL"/>
+  <int value="9" label="RESULT_FROM_CACHE"/>
+  <int value="10" label="NOT_HTTP_URL"/>
+</enum>
+
+<enum name="SBClientDownloadCheckDownloadStats" type="int">
+  <int value="0" label="INVALID_URL"/>
+  <int value="1" label="SB_DISABLED"/>
+  <int value="2" label="WHITELISTED_URL"/>
+  <int value="3" label="WHITELISTED_REFERRER"/>
+  <int value="4" label="INVALID_REQUEST_PROTO"/>
+  <int value="5" label="SERVER_PING_FAILED"/>
+  <int value="6" label="INVALID_RESPONSE_PROTO"/>
+  <int value="7" label="NOT_BINARY_FILE"/>
+  <int value="8" label="REQUEST_CANCELED"/>
+  <int value="9" label="DOWNLOAD_DANGEROUS"/>
+  <int value="10" label="DOWNLOAD_SAFE"/>
+  <int value="11" label="EMPTY_URL_CHAIN"/>
+  <int value="12" label="HTTPS_URL (deprecated)"/>
+  <int value="13" label="PING_DISABLED"/>
+  <int value="14" label="TRUSTED_EXECUTABLE"/>
+  <int value="15" label="OS_NOT_SUPPORTED"/>
+  <int value="16" label="DOWNLOAD_UNCOMMON"/>
+  <int value="17" label="DOWNLOAD_NOT_SUPPORTED"/>
+  <int value="18" label="INVALID_RESPONSE_VERDICT"/>
+  <int value="19" label="ARCHIVE_WITHOUT_BINARIES"/>
+  <int value="20" label="DOWNLOAD_DANGEROUS_HOST"/>
+  <int value="21" label="DOWNLOAD_POTENTIALLY_UNWANTED"/>
+  <int value="22" label="UNSUPPORTED_URL_SCHEME"/>
+  <int value="23" label="MANUAL_BLACKLIST"/>
+  <int value="24" label="LOCAL_FILE"/>
+  <int value="25" label="REMOTE_FILE"/>
+  <int value="26" label="SAMPLED_UNSUPPORTED_FILE"/>
+  <int value="27" label="VERDICT_UNKNOWN"/>
+</enum>
+
+<enum name="SBClientDownloadCheckResult" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="SAFE"/>
+  <int value="2" label="DANGEROUS"/>
+  <int value="3" label="UNCOMMON"/>
+  <int value="4" label="DANGEROUS_HOST"/>
+  <int value="5" label="POTENTIALLY_UNWANTED"/>
+</enum>
+
+<enum name="SBClientDownloadExtensions" type="int">
+  <int value="-1" label="File extension not categorized"/>
+  <int value="0" label="EXE"/>
+  <int value="1" label="MSI"/>
+  <int value="2" label="CAB"/>
+  <int value="3" label="SYS"/>
+  <int value="4" label="SCR"/>
+  <int value="5" label="DRV"/>
+  <int value="6" label="BAT"/>
+  <int value="7" label="ZIP"/>
+  <int value="8" label="RAR"/>
+  <int value="9" label="DLL"/>
+  <int value="10" label="PIF"/>
+  <int value="11" label="COM"/>
+  <int value="12" label="JAR"/>
+  <int value="13" label="CLASS"/>
+  <int value="14" label="PDF"/>
+  <int value="15" label="VB"/>
+  <int value="16" label="REG"/>
+  <int value="17" label="GRP"/>
+  <int value="18" label="OTHER"/>
+  <int value="19" label="CRX"/>
+  <int value="20" label="APK"/>
+  <int value="21" label="DMG"/>
+  <int value="22" label="PKG"/>
+  <int value="23" label="TORRENT"/>
+  <int value="24" label="WEBSITE"/>
+  <int value="25" label="URL"/>
+  <int value="26" label="VBE"/>
+  <int value="27" label="VBS"/>
+  <int value="28" label="JS"/>
+  <int value="29" label="JSE"/>
+  <int value="30" label="MHT"/>
+  <int value="31" label="MHTML"/>
+  <int value="32" label="MSC"/>
+  <int value="33" label="MSP"/>
+  <int value="34" label="MST"/>
+  <int value="35" label="BAS"/>
+  <int value="36" label="HTA"/>
+  <int value="37" label="MSH"/>
+  <int value="38" label="MSH1"/>
+  <int value="39" label="MSH1XML"/>
+  <int value="40" label="MSH2"/>
+  <int value="41" label="MSH2XML"/>
+  <int value="42" label="MSHXML"/>
+  <int value="43" label="PS1"/>
+  <int value="44" label="PS1XML"/>
+  <int value="45" label="PS2"/>
+  <int value="46" label="PS2XML"/>
+  <int value="47" label="PSC1"/>
+  <int value="48" label="PSC2"/>
+  <int value="49" label="SCF"/>
+  <int value="50" label="SCT"/>
+  <int value="51" label="WSF"/>
+  <int value="52" label="7Z"/>
+  <int value="53" label="XZ"/>
+  <int value="54" label="GZ"/>
+  <int value="55" label="TGZ"/>
+  <int value="56" label="BZ2"/>
+  <int value="57" label="TAR"/>
+  <int value="58" label="ARJ"/>
+  <int value="59" label="LZH"/>
+  <int value="60" label="LHA"/>
+  <int value="61" label="WIM"/>
+  <int value="62" label="Z"/>
+  <int value="63" label="LZMA"/>
+  <int value="64" label="CPIO"/>
+  <int value="65" label="CMD"/>
+  <int value="66" label="APP"/>
+  <int value="67" label="OSX -- Not supported"/>
+  <int value="68" label="SWF"/>
+  <int value="69" label="SPL"/>
+  <int value="70" label="APPLICATION"/>
+  <int value="71" label="ASP"/>
+  <int value="72" label="ASX"/>
+  <int value="73" label="CFG"/>
+  <int value="74" label="CHI"/>
+  <int value="75" label="CHM"/>
+  <int value="76" label="CPL"/>
+  <int value="77" label="FXP"/>
+  <int value="78" label="HLP"/>
+  <int value="79" label="HTT"/>
+  <int value="80" label="INF"/>
+  <int value="81" label="INI"/>
+  <int value="82" label="INS"/>
+  <int value="83" label="ISP"/>
+  <int value="84" label="LNK"/>
+  <int value="85" label="LOCAL"/>
+  <int value="86" label="MANIFEST"/>
+  <int value="87" label="MAU"/>
+  <int value="88" label="MMC"/>
+  <int value="89" label="MOF"/>
+  <int value="90" label="OCX"/>
+  <int value="91" label="OPS"/>
+  <int value="92" label="PCD"/>
+  <int value="93" label="PLG"/>
+  <int value="94" label="PRF"/>
+  <int value="95" label="PRG"/>
+  <int value="96" label="PST"/>
+  <int value="97" label="CRT"/>
+  <int value="98" label="ADE"/>
+  <int value="99" label="ADP"/>
+  <int value="100" label="MAD"/>
+  <int value="101" label="MAF"/>
+  <int value="102" label="MAG"/>
+  <int value="103" label="MAM"/>
+  <int value="104" label="MAQ"/>
+  <int value="105" label="MAR"/>
+  <int value="106" label="MAS"/>
+  <int value="107" label="MAT"/>
+  <int value="108" label="MAV"/>
+  <int value="109" label="MAW"/>
+  <int value="110" label="MDA"/>
+  <int value="111" label="MDB"/>
+  <int value="112" label="MDE"/>
+  <int value="113" label="MDT"/>
+  <int value="114" label="MDW"/>
+  <int value="115" label="MDZ"/>
+  <int value="116" label="SHB"/>
+  <int value="117" label="SHS"/>
+  <int value="118" label="VSD"/>
+  <int value="119" label="VSMACROS"/>
+  <int value="120" label="VSS"/>
+  <int value="121" label="VST"/>
+  <int value="122" label="VSW"/>
+  <int value="123" label="WS"/>
+  <int value="124" label="WSC"/>
+  <int value="125" label="WSH"/>
+  <int value="126" label="XBAP"/>
+  <int value="127" label="XNK"/>
+  <int value="128" label="JNLP"/>
+  <int value="129" label="PL"/>
+  <int value="130" label="PY"/>
+  <int value="131" label="PYC"/>
+  <int value="132" label="PYW"/>
+  <int value="133" label="RB"/>
+  <int value="134" label="BASH"/>
+  <int value="135" label="CSH"/>
+  <int value="136" label="KSH"/>
+  <int value="137" label="SH"/>
+  <int value="138" label="SHAR"/>
+  <int value="139" label="TCSH"/>
+  <int value="140" label="COMMAND"/>
+  <int value="141" label="DEB"/>
+  <int value="142" label="RPM"/>
+  <int value="143" label="DEX"/>
+  <int value="144" label="APPREF_MS"/>
+  <int value="145" label="GADGET"/>
+  <int value="146" label="EFI"/>
+  <int value="147" label="FON"/>
+  <int value="148" label="BZIP2"/>
+  <int value="149" label="GZIP"/>
+  <int value="150" label="TAZ"/>
+  <int value="151" label="TBZ"/>
+  <int value="152" label="TBZ2"/>
+  <int value="153" label="PARTIAL"/>
+  <int value="154" label="SVG"/>
+  <int value="155" label="XML"/>
+  <int value="156" label="XRM_MS"/>
+  <int value="157" label="XSL"/>
+  <int value="158" label="ACTION"/>
+  <int value="159" label="BIN"/>
+  <int value="160" label="INX"/>
+  <int value="161" label="IPA -- Not supported"/>
+  <int value="162" label="ISU"/>
+  <int value="163" label="JOB"/>
+  <int value="164" label="OUT"/>
+  <int value="165" label="PAD -- Not supported"/>
+  <int value="166" label="PAF"/>
+  <int value="167" label="RGS"/>
+  <int value="168" label="U3P"/>
+  <int value="169" label="VBSCRIPT"/>
+  <int value="170" label="WORKFLOW"/>
+  <int value="171" label="001"/>
+  <int value="172" label="ACE"/>
+  <int value="173" label="ARC"/>
+  <int value="174" label="B64"/>
+  <int value="175" label="BALZ"/>
+  <int value="176" label="BHX"/>
+  <int value="177" label="BZ"/>
+  <int value="178" label="FAT"/>
+  <int value="179" label="HFS"/>
+  <int value="180" label="HQX"/>
+  <int value="181" label="ISO"/>
+  <int value="182" label="LPAQ1"/>
+  <int value="183" label="LPAQ5"/>
+  <int value="184" label="LPAQ8"/>
+  <int value="185" label="MIM"/>
+  <int value="186" label="NTFS"/>
+  <int value="187" label="PAQ8F"/>
+  <int value="188" label="PAQ8JD"/>
+  <int value="189" label="PAQ8L"/>
+  <int value="190" label="PAQ8O"/>
+  <int value="191" label="PEA"/>
+  <int value="192" label="PET"/>
+  <int value="193" label="PUP"/>
+  <int value="194" label="QUAD"/>
+  <int value="195" label="R00"/>
+  <int value="196" label="R01"/>
+  <int value="197" label="R02"/>
+  <int value="198" label="R03"/>
+  <int value="199" label="R04"/>
+  <int value="200" label="R05"/>
+  <int value="201" label="R06"/>
+  <int value="202" label="R07"/>
+  <int value="203" label="R08"/>
+  <int value="204" label="R09"/>
+  <int value="205" label="R10"/>
+  <int value="206" label="R11"/>
+  <int value="207" label="R12"/>
+  <int value="208" label="R13"/>
+  <int value="209" label="R14"/>
+  <int value="210" label="R15"/>
+  <int value="211" label="R16"/>
+  <int value="212" label="R17"/>
+  <int value="213" label="R18"/>
+  <int value="214" label="R19"/>
+  <int value="215" label="R20"/>
+  <int value="216" label="R21"/>
+  <int value="217" label="R22"/>
+  <int value="218" label="R23"/>
+  <int value="219" label="R24"/>
+  <int value="220" label="R25"/>
+  <int value="221" label="R26"/>
+  <int value="222" label="R27"/>
+  <int value="223" label="R28"/>
+  <int value="224" label="R29"/>
+  <int value="225" label="SLP"/>
+  <int value="226" label="SQUASHFS"/>
+  <int value="227" label="SWM"/>
+  <int value="228" label="TPZ"/>
+  <int value="229" label="TXZ"/>
+  <int value="230" label="TZ"/>
+  <int value="231" label="UDF"/>
+  <int value="232" label="UU"/>
+  <int value="233" label="UUE"/>
+  <int value="234" label="VHD"/>
+  <int value="235" label="VMDK"/>
+  <int value="236" label="WRC"/>
+  <int value="237" label="XAR"/>
+  <int value="238" label="XXE"/>
+  <int value="239" label="ZIPX"/>
+  <int value="240" label="ZPAQ"/>
+  <int value="241" label="RELS"/>
+  <int value="242" label="MSG"/>
+  <int value="243" label="EML"/>
+  <int value="244" label="RTF"/>
+  <int value="245" label="VHDX"/>
+  <int value="246" label="SEARCH_MS"/>
+  <int value="247" label="IMG"/>
+  <int value="248" label="SMI"/>
+  <int value="249" label="SPARSEBUNDLE"/>
+  <int value="250" label="SPARSEIMAGE"/>
+  <int value="251" label="CDR"/>
+  <int value="252" label="DMGPART"/>
+  <int value="253" label="DVDR"/>
+  <int value="254" label="DART"/>
+  <int value="255" label="DC42"/>
+  <int value="256" label="DISKCOPY42"/>
+  <int value="257" label="IMGPART"/>
+  <int value="258" label="NDIF"/>
+  <int value="259" label="UDIF"/>
+  <int value="260" label="TOAST"/>
+  <int value="261" label="RUN"/>
+  <int value="262" label="AD"/>
+  <int value="263" label="MPKG"/>
+  <int value="264" label="AS"/>
+  <int value="265" label="CPGZ"/>
+  <int value="266" label="PAX"/>
+  <int value="267" label="XIP"/>
+  <int value="268" label="DOCX"/>
+  <int value="269" label="DOCM"/>
+  <int value="270" label="DOTT"/>
+  <int value="271" label="DOTM"/>
+  <int value="272" label="DOCB"/>
+  <int value="273" label="XLSX"/>
+  <int value="274" label="XLSM"/>
+  <int value="275" label="XLTX"/>
+  <int value="276" label="XLTM"/>
+  <int value="277" label="PPTX"/>
+  <int value="278" label="PPTM"/>
+  <int value="279" label="POTX"/>
+  <int value="280" label="PPAM"/>
+  <int value="281" label="PPSX"/>
+  <int value="282" label="SLDX"/>
+  <int value="283" label="SLDM"/>
+</enum>
+
+<enum name="SBClientDownloadIsSignedBinary" type="int">
+  <int value="0" label="Unsigned"/>
+  <int value="1" label="Signed"/>
+</enum>
+
+<enum name="SBClientDownloadPPAPIDownloadRequestOutcome" type="int">
+  <int value="0" label="(unknown)"/>
+  <int value="1" label="Request destroyed before completion"/>
+  <int value="2" label="Unsupported file type"/>
+  <int value="3" label="Timed out"/>
+  <int value="4" label="Whitelisted URL"/>
+  <int value="5" label="Request was malformed"/>
+  <int value="6" label="Network request failed"/>
+  <int value="7" label="Response was malformed"/>
+  <int value="8" label="Succeeded"/>
+</enum>
+
+<enum name="SBClientMalwareSentReports" type="int">
+  <int value="0" label="Sent"/>
+  <int value="1" label="Hit limit"/>
+  <int value="2" label="Failed serialization"/>
+</enum>
+
+<enum name="SBClientPhishingCancelClassificationReason" type="int">
+  <int value="0" label="NAVIGATE_AWAY"/>
+  <int value="1" label="NAVIGATE_WITHIN_PAGE"/>
+  <int value="2" label="PAGE_RECAPTURED"/>
+  <int value="3" label="SHUTDOWN"/>
+  <int value="4" label="NEW_PHISHING_SCORER"/>
+</enum>
+
+<enum name="SBClientPhishingClientModelStatus" type="int">
+  <int value="0" label="MODEL_SUCCESS"/>
+  <int value="1" label="MODEL_NOT_CHANGED"/>
+  <int value="2" label="MODEL_FETCH_FAILED"/>
+  <int value="3" label="MODEL_EMPTY"/>
+  <int value="4" label="MODEL_TOO_LARGE"/>
+  <int value="5" label="MODEL_PARSE_ERROR"/>
+  <int value="6" label="MODEL_MISSING_FIELDS"/>
+  <int value="7" label="MODEL_INVALID_VERSION_NUMBER"/>
+  <int value="8" label="BAD_HASH_IDS"/>
+</enum>
+
+<enum name="SBClientPhishingScorerCreationStatus" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="MODEL_OPEN_FAIL"/>
+  <int value="2" label="MODEL_FILE_EMPTY"/>
+  <int value="3" label="MODEL_FILE_TOO_LARGE"/>
+  <int value="4" label="MODEL_PARSE_ERROR"/>
+  <int value="5" label="MODEL_MISSING_FIELDS"/>
+</enum>
+
+<enum name="SBClientPhishingSkipClassificationReason" type="int">
+  <int value="0" label="Not skipped"/>
+  <int value="1" label="Skipped: HTTPS"/>
+  <int value="2" label="Skipped: Not a GET request"/>
+</enum>
+
+<enum name="SBDownloadFeedbackUploadResult" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="UPLOAD_SUCCESS"/>
+  <int value="2" label="UPLOAD_CANCELLED"/>
+  <int value="3" label="UPLOAD_METADATA_NET_ERROR"/>
+  <int value="4" label="UPLOAD_METADATA_RESPONSE_ERROR"/>
+  <int value="5" label="UPLOAD_FILE_NET_ERROR"/>
+  <int value="6" label="UPLOAD_FILE_RESPONSE_ERROR"/>
+  <int value="7" label="UPLOAD_COMPLETE_RESPONSE_ERROR"/>
+</enum>
+
+<enum name="SBFileTypeUpdateResult" type="int">
+  <int value="1" label="SUCCESS"/>
+  <int value="2" label="FAILED_EMPTY"/>
+  <int value="3" label="FAILED_PROTO_PARSE"/>
+  <int value="4" label="FAILED_DELTA_CHECK"/>
+  <int value="5" label="FAILED_VERSION_CHECK"/>
+  <int value="6" label="FAILED_DEFAULT_SETTING_SET"/>
+  <int value="7" label="FAILED_WRONG_SETTINGS_COUNT"/>
+  <int value="8" label="SKIPPED_VERSION_CHECK_EQUAL"/>
+</enum>
+
+<enum name="ScheduledNavigationType" type="int">
+  <int value="0" label="(no gesture) ScheduledReload"/>
+  <int value="1" label="(no gesture) ScheduledFormSubmission"/>
+  <int value="2" label="(no gesture) ScheduledURLNavigation"/>
+  <int value="3" label="(no gesture) ScheduledRedirect"/>
+  <int value="4" label="(no gesture) ScheduledLocationChange"/>
+  <int value="5" label="(no gesture) ScheduledPageBlock"/>
+  <int value="6" label="(gesture) ScheduledReload"/>
+  <int value="7" label="(gesture) ScheduledFormSubmission"/>
+  <int value="8" label="(gesture) ScheduledURLNavigation"/>
+  <int value="9" label="(gesture) ScheduledRedirect"/>
+  <int value="10" label="(gesture) ScheduledLocationChange"/>
+  <int value="11" label="(gesture) ScheduledPageBlock"/>
+</enum>
+
+<enum name="ScrollThread" type="int">
+  <int value="0" label="Scroll on impl-thread"/>
+  <int value="1" label="Scroll on main-thread"/>
+</enum>
+
+<enum name="SCTCanBeChecked" type="int">
+  <int value="0" label="No valid STH"/>
+  <int value="1" label="Requires newer STH"/>
+  <int value="2" label="Can be checked for inclusion"/>
+</enum>
+
+<enum name="SCTOrigin" type="int">
+  <int value="0" label="SCT_EMBEDDED"/>
+  <int value="1" label="SCT_FROM_TLS_EXTENSION"/>
+  <int value="2" label="SCT_FROM_OCSP_RESPONSE"/>
+</enum>
+
+<enum name="SCTVerifyStatus" type="int">
+  <int value="0" label="SCT_STATUS_NONE"/>
+  <int value="1" label="SCT_STATUS_LOG_UNKNOWN"/>
+  <int value="2" label="DEPRECATED: SCT_STATUS_INVALID"/>
+  <int value="3" label="SCT_STATUS_OK"/>
+  <int value="4" label="SCT_STATUS_INVALID_SIGNATURE"/>
+  <int value="5" label="SCT_STATUS_INVALID_TIMESTAMP"/>
+</enum>
+
+<enum name="SdchDictionaryFate" type="int">
+  <summary>
+    Fate of an Sdch dictionary, on load and eviction. See
+    net/sdch/sdch_owner.cc.
+  </summary>
+  <int value="1" label="GET_IGNORED"/>
+  <int value="2" label="FETCH_FAILED"/>
+  <int value="3" label="FETCH_IGNORED_NO_SPACE"/>
+  <int value="4" label="FETCH_MANAGER_REFUSED"/>
+  <int value="5" label="ADD_RESPONSE_TRIGGERRED"/>
+  <int value="6" label="EVICT_FOR_DICT"/>
+  <int value="7" label="EVICT_FOR_MEMORY"/>
+  <int value="8" label="EVICT_FOR_DESTRUCTION"/>
+  <int value="9" label="ADD_PERSISTENCE_TRIGGERRED"/>
+  <int value="10" label="UNLOAD_FOR_DESTRUCTION"/>
+</enum>
+
+<enum name="SdchPersistenceFailureReason" type="int">
+  <summary>
+    Errors that can occur when reading in or writing out persisted dictionary
+    information. See enum in net/sdch/sdch_owner.h for more information.
+  </summary>
+  <int value="1" label="NO_FILE"/>
+  <int value="2" label="READ_FAILED"/>
+  <int value="3" label="WRITE_FAILED"/>
+  <int value="4" label="OTHER"/>
+</enum>
+
+<enum name="SdchProblemCode" type="int">
+  <summary>
+    SDCH problem codes, listed in net/base/sdch_problem_code_list.h
+  </summary>
+  <int value="1" label="ADDED_CONTENT_ENCODING"/>
+  <int value="2" label="FIXED_CONTENT_ENCODING"/>
+  <int value="3" label="FIXED_CONTENT_ENCODINGS"/>
+  <int value="4" label="DECODE_HEADER_ERROR"/>
+  <int value="5" label="DECODE_BODY_ERROR"/>
+  <int value="6" label="OPTIONAL_GUNZIP_ENCODING_ADDED"/>
+  <int value="7" label="BINARY_ADDED_CONTENT_ENCODING"/>
+  <int value="8" label="BINARY_FIXED_CONTENT_ENCODING"/>
+  <int value="9" label="BINARY_FIXED_CONTENT_ENCODINGS"/>
+  <int value="10" label="DICTIONARY_FOUND_HAS_WRONG_DOMAIN"/>
+  <int value="11" label="DICTIONARY_FOUND_HAS_WRONG_PORT_LIST"/>
+  <int value="12" label="DICTIONARY_FOUND_HAS_WRONG_PATH"/>
+  <int value="13" label="DICTIONARY_FOUND_HAS_WRONG_SCHEME"/>
+  <int value="14" label="DICTIONARY_HASH_NOT_FOUND"/>
+  <int value="15" label="DICTIONARY_HASH_MALFORMED"/>
+  <int value="16" label="defunct (DICTIONARY_FOUND_EXPIRED)"/>
+  <int value="20" label="DICTIONARY_HAS_NO_HEADER"/>
+  <int value="21" label="DICTIONARY_HEADER_LINE_MISSING_COLON"/>
+  <int value="22" label="DICTIONARY_MISSING_DOMAIN_SPECIFIER"/>
+  <int value="23" label="DICTIONARY_SPECIFIES_TOP_LEVEL_DOMAIN"/>
+  <int value="24" label="DICTIONARY_DOMAIN_NOT_MATCHING_SOURCE_URL"/>
+  <int value="25" label="DICTIONARY_PORT_NOT_MATCHING_SOURCE_URL"/>
+  <int value="26" label="DICTIONARY_HAS_NO_TEXT"/>
+  <int value="27" label="DICTIONARY_REFERER_URL_HAS_DOT_IN_PREFIX"/>
+  <int value="28" label="DICTIONARY_UNSUPPORTED_VERSION"/>
+  <int value="30" label="DICTIONARY_LOAD_ATTEMPT_FROM_DIFFERENT_HOST"/>
+  <int value="31" label="DICTIONARY_SELECTED_FOR_SSL"/>
+  <int value="32" label="DICTIONARY_ALREADY_LOADED"/>
+  <int value="33" label="DICTIONARY_SELECTED_FROM_NON_HTTP"/>
+  <int value="34" label="defunct (DICTIONARY_IS_TOO_LARGE)">
+    Recorded in separate histogram; see Sdch3.DictionaryFate.
+  </int>
+  <int value="35" label="defunct (DICTIONARY_COUNT_EXCEEDED)">
+    Recorded in separate histogram; see Sdch3.DictionaryFate.
+  </int>
+  <int value="36" label="defunct">
+    DICTIONARY_PREVIOUSLY_SCHEDULED_TO_DOWNLOAD used instead
+  </int>
+  <int value="37" label="defunct">
+    DICTIONARY_PREVIOUSLY_SCHEDULED_TO_DOWNLOAD used instead
+  </int>
+  <int value="38" label="DICTIONARY_FETCH_READ_FAILED-defunct">
+    Used to indicate a broken false return from URLRequest::Read(); no longer
+    checking that return value.
+  </int>
+  <int value="39" label="DICTIONARY_PREVIOUSLY_SCHEDULED_TO_DOWNLOAD"/>
+  <int value="40" label="ATTEMPT_TO_DECODE_NON_HTTP_DATA"/>
+  <int value="44" label="DICTIONARY_NO_ROOM"/>
+  <int value="50" label="MULTIENCODING_FOR_NON_SDCH_REQUEST"/>
+  <int value="51" label="SDCH_CONTENT_ENCODE_FOR_NON_SDCH_REQUEST"/>
+  <int value="52" label="UNADVERTISED_DICTIONARY_USED"/>
+  <int value="53" label="UNADVERTISED_DICTIONARY_USED_CACHED"/>
+  <int value="61" label="DOMAIN_BLACKLIST_INCLUDES_TARGET"/>
+  <int value="70" label="META_REFRESH_RECOVERY"/>
+  <int value="71" label="defunct">
+    Almost the same as META_REFRESH_UNSUPPORTED
+  </int>
+  <int value="72" label="defunct">
+    Almost the same as CACHED_META_REFRESH_UNSUPPORTED
+  </int>
+  <int value="73" label="defunct">
+    PASSING_THROUGH_NON_SDCH plus DISCARD_TENTATIVE_SDCH
+  </int>
+  <int value="74" label="META_REFRESH_UNSUPPORTED"/>
+  <int value="75" label="CACHED_META_REFRESH_UNSUPPORTED"/>
+  <int value="76" label="PASSING_THROUGH_NON_SDCH"/>
+  <int value="77" label="INCOMPLETE_SDCH_CONTENT"/>
+  <int value="78" label="PASS_THROUGH_404_CODE"/>
+  <int value="79" label="PASS_THROUGH_OLD_CACHED"/>
+  <int value="80" label="META_REFRESH_CACHED_RECOVERY"/>
+  <int value="81" label="defunct (DISCARD_TENTATIVE_SDCH)">
+    Now tracked by ResponseCorruptionDetection.* histograms.
+  </int>
+  <int value="90" label="defunct (UNFLUSHED_CONTENT)"/>
+  <int value="91" label="MISSING_TIME_STATS"/>
+  <int value="92" label="CACHE_DECODED"/>
+  <int value="93" label="defunct (OVER_10_MINUTES)"/>
+  <int value="94" label="UNINITIALIZED"/>
+  <int value="95" label="PRIOR_TO_DICTIONARY"/>
+  <int value="96" label="DECODE_ERROR"/>
+  <int value="100" label="LATENCY_TEST_DISALLOWED"/>
+  <int value="105" label="defunct (DISABLED)">
+    No longer centrally tracked, since SDCH is enabled or disabled per
+    URLRequestContext.
+  </int>
+  <int value="106" label="defunct (SECURE_SCHEME_NOT_SUPPORTED)">
+    SDCH support is now always enabled for secure schemes.
+  </int>
+  <int value="107" label="DICTIONARY_USED_AFTER_DELETION"/>
+</enum>
+
+<enum name="SdchResponseCorruptionDetectionCauses" type="int">
+  <summary>
+    SDCH decode corruption detection cases, listed in net/filter/sdch_filter.cc.
+    See also comments in SdchFilter::ReadFilteredData in the same file.
+  </summary>
+  <int value="1" label="RESPONSE_404"/>
+  <int value="2" label="RESPONSE_NOT_200"/>
+  <int value="3" label="RESPONSE_OLD_UNENCODED"/>
+  <int value="4" label="RESPONSE_TENTATIVE_SDCH"/>
+  <int value="5" label="RESPONSE_NO_DICTIONARY"/>
+  <int value="6" label="RESPONSE_CORRUPT_SDCH"/>
+  <int value="7" label="RESPONSE_ENCODING_LIE"/>
+</enum>
+
+<enum name="SearchAccessPoint" type="int">
+  <int value="0" label="Omnibox"/>
+  <int value="1" label="Omnibox Instant"/>
+  <int value="2" label="Direct Navigation"/>
+  <int value="3" label="Direct Navigation Instant"/>
+  <int value="4" label="Home Page"/>
+  <int value="5" label="Home Page Instant"/>
+  <int value="6" label="Search App"/>
+  <int value="7" label="Search App Instant"/>
+  <int value="8" label="Other"/>
+  <int value="9" label="Other Instant"/>
+</enum>
+
+<enum name="SearchEngine" type="int">
+  <obsolete>
+    Deprecated 8/2013. No longer generated.
+  </obsolete>
+  <summary>
+    Indices of most popular prepopulated search engines as defined in
+    components/search_engines/search_engine_type.h.
+  </summary>
+  <int value="0" label="OTHER"/>
+  <int value="1" label="GOOGLE"/>
+  <int value="2" label="YAHOO"/>
+  <int value="3" label="YAHOOJP"/>
+  <int value="4" label="BING"/>
+  <int value="5" label="ASK"/>
+  <int value="6" label="YANDEX"/>
+  <int value="7" label="SEZNAM"/>
+  <int value="8" label="CENTRUM"/>
+  <int value="9" label="NETSPRINT"/>
+  <int value="10" label="VIRGILIO"/>
+  <int value="11" label="MAILRU"/>
+  <int value="12" label="ABCSOK"/>
+  <int value="13" label="ALTAVISTA"/>
+  <int value="14" label="BAIDU"/>
+  <int value="15" label="DAUM"/>
+  <int value="16" label="DELFI"/>
+  <int value="17" label="DIRI"/>
+  <int value="18" label="GOO"/>
+  <int value="19" label="IN"/>
+  <int value="20" label="NAJDI"/>
+  <int value="21" label="NAVER"/>
+  <int value="22" label="NETI"/>
+  <int value="23" label="OK"/>
+  <int value="24" label="POGODAK"/>
+  <int value="25" label="POGODOK_MK"/>
+  <int value="26" label="RAMBLER"/>
+  <int value="27" label="SANOOK"/>
+  <int value="28" label="SAPO"/>
+  <int value="29" label="TUT"/>
+  <int value="30" label="WALLA"/>
+  <int value="31" label="ZOZNAM"/>
+  <int value="32" label="YAHOOQC"/>
+  <int value="33" label="NONE"/>
+</enum>
+
+<enum name="SecurityInterstitialDecision" type="int">
+  <int value="0" label="SHOW"/>
+  <int value="1" label="PROCEED"/>
+  <int value="2" label="DONT_PROCEED"/>
+  <int value="3" label="PROCEEDING_DISABLED"/>
+</enum>
+
+<enum name="SecurityInterstitialInteraction" type="int">
+  <int value="0" label="TOTAL_VISITS"/>
+  <int value="1" label="SHOW_ADVANCED"/>
+  <int value="2" label="SHOW_PRIVACY"/>
+  <int value="3" label="SHOW_DIAGNOSTIC"/>
+  <int value="4" label="SHOW_LEARN_MORE"/>
+  <int value="5" label="RELOAD"/>
+  <int value="6" label="OPEN_TIME_SETTINGS"/>
+  <int value="7" label="SET_EXTENDED_REPORTING_ENABLED"/>
+  <int value="8" label="SET_EXTENDED_REPORTING_DISABLED"/>
+  <int value="9" label="EXTENDED_REPORTING_IS_ENABLED"/>
+  <int value="10" label="REPORT_PHISHING_ERROR"/>
+  <int value="11" label="SHOW_WHITEPAPER"/>
+</enum>
+
+<enum name="ServiceProcessEventType" type="int">
+  <int value="0" label="SERVICE_EVENT_INITIALIZE"/>
+  <int value="1" label="SERVICE_EVENT_ENABLED_ON_LAUNCH"/>
+  <int value="2" label="SERVICE_EVENT_ENABLE"/>
+  <int value="3" label="SERVICE_EVENT_DISABLE"/>
+  <int value="4" label="SERVICE_EVENT_DISABLE_BY_POLICY"/>
+  <int value="5" label="SERVICE_EVENT_LAUNCH"/>
+  <int value="6" label="SERVICE_EVENT_LAUNCHED"/>
+  <int value="7" label="SERVICE_EVENT_LAUNCH_FAILED"/>
+  <int value="8" label="SERVICE_EVENT_CHANNEL_CONNECTED"/>
+  <int value="9" label="SERVICE_EVENT_CHANNEL_ERROR"/>
+  <int value="10" label="SERVICE_EVENT_INFO_REQUEST"/>
+  <int value="11" label="SERVICE_EVENT_INFO_REPLY"/>
+  <int value="12" label="SERVICE_EVENT_HISTOGRAMS_REQUEST"/>
+  <int value="13" label="SERVICE_EVENT_HISTOGRAMS_REPLY"/>
+  <int value="14" label="SERVICE_PRINTERS_REQUEST"/>
+  <int value="15" label="SERVICE_PRINTERS_REPLY"/>
+</enum>
+
+<enum name="ServicesCustomizationLoadResult" type="int">
+  <int value="0" label="Manifest loaded successfully"/>
+  <int value="1" label="Manifest not found on server"/>
+  <int value="2" label="Manifest parsing error"/>
+  <int value="3" label="Failed to load manifest after N retries"/>
+</enum>
+
+<enum name="ServiceUtilityProcessHostEventType" type="int">
+  <int value="0" label="SERVICE_UTILITY_STARTED"/>
+  <int value="1" label="SERVICE_UTILITY_DISCONNECTED"/>
+  <int value="2" label="SERVICE_UTILITY_METAFILE_REQUEST"/>
+  <int value="3" label="SERVICE_UTILITY_METAFILE_SUCCEEDED"/>
+  <int value="4" label="SERVICE_UTILITY_METAFILE_FAILED"/>
+  <int value="5" label="SERVICE_UTILITY_CAPS_REQUEST"/>
+  <int value="6" label="SERVICE_UTILITY_CAPS_SUCCEEDED"/>
+  <int value="7" label="SERVICE_UTILITY_CAPS_FAILED"/>
+  <int value="8" label="SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST"/>
+  <int value="9" label="SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED"/>
+  <int value="10" label="SERVICE_UTILITY_SEMANTIC_CAPS_FAILED"/>
+  <int value="11" label="SERVICE_UTILITY_FAILED_TO_START"/>
+</enum>
+
+<enum name="ServiceWorkerCacheErrorType" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Exists Error"/>
+  <int value="2" label="Storage Error"/>
+  <int value="3" label="Not Found Error"/>
+  <int value="4" label="Quota Exceeded Error"/>
+</enum>
+
+<enum name="ServiceWorkerCacheResponseType" type="int">
+  <int value="0" label="Basic"/>
+  <int value="1" label="CORS"/>
+  <int value="2" label="Default"/>
+  <int value="3" label="Error"/>
+  <int value="4" label="Opaque"/>
+  <int value="5" label="OpaqueRedirect"/>
+</enum>
+
+<enum name="ServiceWorkerDatabaseStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Not Found Error"/>
+  <int value="2" label="IO Error"/>
+  <int value="3" label="Corruption Error"/>
+  <int value="4" label="Operation Error"/>
+  <int value="5" label="Not Supported Error"/>
+</enum>
+
+<enum name="ServiceWorkerDeleteAndStartOverResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Failed to delete ServiceWorkerDatabase"/>
+  <int value="2" label="Failed to delete ServiceWorkerDiskCache"/>
+</enum>
+
+<enum name="ServiceWorkerDiskCacheMigrationResult" type="int">
+  <obsolete>
+    Deprecated because the migrator was removed as of 12/2015.
+  </obsolete>
+  <int value="0" label="MIGRATION_OK"/>
+  <int value="1" label="MIGRATION_NOT_NECESSARY"/>
+  <int value="2" label="MIGRATION_ERROR_MIGRATION_FAILED"/>
+  <int value="3" label="MIGRATION_ERROR_UPDATE_DATABASE"/>
+</enum>
+
+<enum name="ServiceWorkerDiskCacheMigrationStatus" type="int">
+  <obsolete>
+    Deprecated because the migrator was removed as of 12/2015.
+  </obsolete>
+  <int value="0" label="MIGRATION_STATUS_OK"/>
+  <int value="1" label="MIGRATION_ERROR_FAILED"/>
+  <int value="2" label="MIGRATION_ERROR_MOVE_DISKCACHE"/>
+  <int value="3" label="MIGRATION_ERROR_INIT_SRC_DISKCACHE"/>
+  <int value="4" label="MIGRATION_ERROR_INIT_DEST_DISKCACHE"/>
+  <int value="5" label="MIGRATION_ERROR_OPEN_NEXT_ENTRY"/>
+  <int value="6" label="MIGRATION_ERROR_READ_ENTRY_KEY"/>
+  <int value="7" label="MIGRATION_ERROR_READ_RESPONSE_INFO"/>
+  <int value="8" label="MIGRATION_ERROR_WRITE_RESPONSE_INFO"/>
+  <int value="9" label="MIGRATION_ERROR_WRITE_RESPONSE_METADATA"/>
+  <int value="10" label="MIGRATION_ERROR_READ_RESPONSE_DATA"/>
+  <int value="11" label="MIGRATION_ERROR_WRITE_RESPONSE_DATA"/>
+</enum>
+
+<enum name="ServiceWorkerEventHandleRatioType" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Some"/>
+  <int value="2" label="All"/>
+</enum>
+
+<enum name="ServiceWorkerMetrics.EventType" type="int">
+  <int value="0" label="ACTIVATE"/>
+  <int value="1" label="INSTALL"/>
+  <int value="2" label="FETCH (unused)"/>
+  <int value="3" label="SYNC"/>
+  <int value="4" label="NOTIFICATION_CLICK"/>
+  <int value="5" label="PUSH"/>
+  <int value="6" label="GEOFENCING (unused)"/>
+  <int value="7" label="SERVICE_PORT_CONNECT (unused)"/>
+  <int value="8" label="MESSAGE"/>
+  <int value="9" label="NOTIFICATION_CLOSE"/>
+  <int value="10" label="FETCH_MAIN_FRAME"/>
+  <int value="11" label="FETCH_SUB_FRAME"/>
+  <int value="12" label="FETCH_SHARED_WORKER"/>
+  <int value="13" label="FETCH_SUB_RESOURCE"/>
+  <int value="14" label="UNKNOWN"/>
+  <int value="15" label="FOREIGN_FETCH"/>
+  <int value="16" label="FETCH_WAITUNTIL"/>
+  <int value="17" label="FOREIGN_FETCH_WAITUNTIL"/>
+  <int value="18" label="NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
+  <int value="19" label="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
+  <int value="20" label="NAVIGATION_HINT_LINK_TAP_DOWN"/>
+</enum>
+
+<enum name="ServiceWorkerReadResponseResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Read headers error"/>
+  <int value="2" label="Read data error"/>
+</enum>
+
+<enum name="ServiceWorkerResponseError" type="int">
+  <int value="0" label="ErrorUnknown"/>
+  <int value="1" label="ErrorPromiseRejected"/>
+  <int value="2" label="ErrorDefaultPrevented"/>
+  <int value="3" label="ErrorNoV8Instance"/>
+  <int value="4" label="ErrorResponseTypeError"/>
+  <int value="5" label="ErrorResponseTypeOpaque"/>
+  <int value="6" label="ErrorResponseTypeNotBasicOrDefault"/>
+  <int value="7" label="ErrorBodyUsed"/>
+  <int value="8" label="ErrorResponseTypeOpaqueForClientRequest"/>
+  <int value="9" label="ErrorResponseTypeOpaqueRedirect"/>
+  <int value="10" label="ErrorBodyLocked"/>
+</enum>
+
+<enum name="ServiceWorkerSite" type="int">
+  <int value="0" label="Other (unused)"/>
+  <int value="1" label="NewTabPage"/>
+  <int value="2" label="WithFetchHandler"/>
+  <int value="3" label="WithoutFetchHandler"/>
+  <int value="4" label="Google+"/>
+  <int value="5" label="Inbox"/>
+  <int value="6" label="Google Docs and Drive"/>
+</enum>
+
+<enum name="ServiceWorkerStatusCode" type="int">
+  <int value="0" label="SERVICE_WORKER_OK"/>
+  <int value="1" label="SERVICE_WORKER_ERROR_FAILED"/>
+  <int value="2" label="SERVICE_WORKER_ERROR_ABORT"/>
+  <int value="3" label="SERVICE_WORKER_ERROR_START_WORKER_FAILED"/>
+  <int value="4" label="SERVICE_WORKER_ERROR_PROCESS_NOT_FOUND"/>
+  <int value="5" label="SERVICE_WORKER_ERROR_NOT_FOUND"/>
+  <int value="6" label="SERVICE_WORKER_ERROR_EXISTS"/>
+  <int value="7" label="SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED"/>
+  <int value="8" label="SERVICE_WORKER_ERROR_ACTIVATE_WORKER_FAILED"/>
+  <int value="9" label="SERVICE_WORKER_ERROR_IPC_FAILED"/>
+  <int value="10" label="SERVICE_WORKER_ERROR_NETWORK"/>
+  <int value="11" label="SERVICE_WORKER_ERROR_SECURITY"/>
+  <int value="12" label="SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED"/>
+  <int value="13" label="SERVICE_WORKER_ERROR_STATE"/>
+  <int value="14" label="SERVICE_WORKER_ERROR_TIMEOUT"/>
+  <int value="15" label="SERVICE_WORKER_ERROR_SCRIPT_EVALUATE_FAILED"/>
+  <int value="16" label="SERVICE_WORKER_ERROR_DISK_CACHE"/>
+  <int value="17" label="SERVICE_WORKER_ERROR_REDUNDANT"/>
+  <int value="18" label="SERVICE_WORKER_ERROR_DISALLOWED"/>
+  <int value="19" label="SERVICE_WORKER_ERROR_DISABLED_WORKER (unused)"/>
+</enum>
+
+<enum name="ServiceWorkerStoppedStatus" type="int">
+  <int value="0" label="NORMAL"/>
+  <int value="1" label="DETACH_BY_REGISTRY"/>
+  <int value="2" label="TIMEOUT"/>
+</enum>
+
+<enum name="ServiceWorkerStopStatus" type="int">
+  <obsolete>
+    Deprecated Oct 2015. No longer generated in the code.
+  </obsolete>
+  <int value="0" label="STOP_STATUS_STOPPING"/>
+  <int value="1" label="STOP_STATUS_STOPPED"/>
+  <int value="2" label="STOP_STATUS_STALLED"/>
+  <int value="3" label="STOP_STATUS_STALLED_THEN_STOPPED"/>
+</enum>
+
+<enum name="ServiceWorkerURLRequestJobResult" type="int">
+  <int value="0" label="REQUEST_JOB_FALLBACK_RESPONSE"/>
+  <int value="1" label="REQUEST_JOB_FALLBACK_FOR_CORS"/>
+  <int value="2" label="REQUEST_JOB_HEADERS_ONLY_RESPONSE"/>
+  <int value="3" label="REQUEST_JOB_STREAM_RESPONSE"/>
+  <int value="4" label="REQUEST_JOB_BLOB_RESPONSE"/>
+  <int value="5" label="REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO"/>
+  <int value="6" label="REQUEST_JOB_ERROR_BAD_BLOB"/>
+  <int value="7" label="REQUEST_JOB_ERROR_NO_PROVIDER_HOST"/>
+  <int value="8" label="REQUEST_JOB_ERROR_NO_ACTIVE_VERSION"/>
+  <int value="9" label="REQUEST_JOB_ERROR_NO_REQUEST"/>
+  <int value="10" label="REQUEST_JOB_ERROR_FETCH_EVENT_DISPATCH"/>
+  <int value="11" label="REQUEST_JOB_ERROR_BLOB_READ"/>
+  <int value="12" label="REQUEST_JOB_ERROR_STREAM_ABORTED"/>
+  <int value="13" label="REQUEST_JOB_ERROR_KILLED"/>
+  <int value="14" label="REQUEST_JOB_ERROR_KILLED_WITH_BLOB"/>
+  <int value="15" label="REQUEST_JOB_ERROR_KILLED_WITH_STREAM"/>
+  <int value="16" label="REQUEST_JOB_ERROR_DESTROYED"/>
+  <int value="17" label="REQUEST_JOB_ERROR_DESTROYED_WITH_BLOB"/>
+  <int value="18" label="REQUEST_JOB_ERROR_DESTROYED_WITH_STREAM"/>
+  <int value="19" label="REQUEST_JOB_ERROR_BAD_DELEGATE"/>
+  <int value="20" label="REQUEST_JOB_ERROR_REQUEST_BODY_BLOB_FAILED"/>
+</enum>
+
+<enum name="ServiceWorkerWriteResponseResult" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Write headers error"/>
+  <int value="2" label="Write data error"/>
+</enum>
+
+<enum name="SessionCrashedBubbleUserAction" type="int">
+  <int value="0" label="The bubble was shown"/>
+  <int value="1" label="There was an error when showing the bubble."/>
+  <int value="2" label="The Restore button was clicked"/>
+  <int value="3" label="User was already opted in to UMA"/>
+  <int value="4" label="User chose to opt in to UMA"/>
+  <int value="5" label="User clicked on the help button"/>
+  <int value="6" label="User ignored or closed the bubble"/>
+  <int value="7" label="The bar with UMA opt-in option was shown."/>
+</enum>
+
+<enum name="SessionRestoreActions" type="int">
+  <int value="0" label="A session restore was started"/>
+  <int value="1" label="A session restore deferred one or more tabs"/>
+</enum>
+
+<enum name="SessionRestoreTabActions" type="int">
+  <int value="0" label="A tab was created"/>
+  <int value="1" label="A tab's content was automatically loaded"/>
+  <int value="2" label="The loading of a tab's content was deferred"/>
+  <int value="3" label="A deferred tab's content was loaded via user action"/>
+  <int value="4" label="A tab's content automatically started to load"/>
+</enum>
+
+<enum name="SessionStartupPref" type="int">
+  <int value="0" label="Open home page (unused)"/>
+  <int value="1" label="Continue from last opened pages"/>
+  <int value="4" label="Open URLs"/>
+  <int value="5" label="Open new tab page"/>
+</enum>
+
+<enum name="SessionStartupType" type="int">
+  <obsolete>
+    Deprecated 8/2013. No longer generated.
+  </obsolete>
+  <int value="0" label="New Tab page"/>
+  <int value="1" label="Homepage (DEPRECATED)"/>
+  <int value="2" label="Last session"/>
+  <int value="3" label="Specified URLs"/>
+</enum>
+
+<enum name="SessionStorageDatabaseOpen" type="int">
+  <int value="0" label="OK">Succesfully opened the database.</int>
+  <int value="1" label="Recovered">
+    Failed to open the existing db, deleted it, and created a new empty db.
+  </int>
+  <int value="2" label="Total Fail">
+    Failed to open the database and also failed to delete and start over.
+  </int>
+</enum>
+
+<enum name="SetDefaultAttemptResult" type="int">
+  <obsolete>
+    Deprecated 2016/03. Replaced by DefaultWebClientState.
+  </obsolete>
+  <int value="0" label="Success">Chrome was set as the default web client.</int>
+  <int value="1" label="Already default">
+    Chrome was already the default web client. This counts as a successful
+    attempt.
+  </int>
+  <int value="2" label="Failure">
+    Chrome was not set as the default web client.
+  </int>
+  <int value="3" label="Abandoned">
+    The attempt was abandoned because the observer was destroyed.
+  </int>
+  <int value="4" label="Launch failure">
+    Failed to launch the process to set Chrome as the default web client
+    asynchronously.
+  </int>
+  <int value="5" label="Other worker">
+    Another worker is already in progress to make Chrome the default web client.
+  </int>
+  <int value="6" label="Retry">
+    The user initiated another attempt while the asynchronous operation was
+    already in progress.
+  </int>
+  <int value="7" label="No errors, not default">
+    No errors were encountered yet Chrome is still not the default web client.
+  </int>
+</enum>
+
+<enum name="SettingsInteractionConcludeReason" type="int">
+  <int value="0" label="Registry watcher">
+    A change to the protocol registry key was detected.
+  </int>
+  <int value="1" label="Timeout">
+    The timer fired before a change to the protocol registry key was detected.
+  </int>
+</enum>
+
+<enum name="SettingsSections" type="int">
+  <summary>
+    A collection of sections from chrome://settings. Used for metrics about
+    searching within the settings options.
+  </summary>
+  <int value="0" label="No Match Found"/>
+  <int value="1" label="Unknown Section"/>
+  <int value="2" label="Network CROS"/>
+  <int value="3" label="Proxy"/>
+  <int value="4" label="Appearance"/>
+  <int value="5" label="Device"/>
+  <int value="6" label="Search"/>
+  <int value="7" label="Sync Users"/>
+  <int value="8" label="Set Default Browser"/>
+  <int value="9" label="Date Time"/>
+  <int value="10" label="Device Control"/>
+  <int value="11" label="Privacy"/>
+  <int value="12" label="Bluetooth Devices"/>
+  <int value="13" label="Passwords and Autofill"/>
+  <int value="14" label="Easy Unlock"/>
+  <int value="15" label="Web Content"/>
+  <int value="16" label="Network"/>
+  <int value="17" label="Languages"/>
+  <int value="18" label="Downloads"/>
+  <int value="19" label="Certificates"/>
+  <int value="20" label="Cloudprint Options"/>
+  <int value="21" label="A11y"/>
+  <int value="22" label="Factory Reset"/>
+  <int value="23" label="System"/>
+  <int value="24" label="Reset Profile"/>
+  <int value="25" label="Sync"/>
+  <int value="26" label="Startup"/>
+  <int value="27" label="Mouselock"/>
+  <int value="28" label="Page Zoom Levels"/>
+  <int value="29" label="Status"/>
+  <int value="30" label="Main"/>
+  <int value="31" label="Pointer Touchpad"/>
+  <int value="32" label="Pointer Mouse"/>
+  <int value="33" label="Prefs Blocked Languages"/>
+  <int value="34" label="Prefs Language Blacklist"/>
+  <int value="35" label="Prefs Site Blacklist"/>
+  <int value="36" label="Prefs Whitelists"/>
+  <int value="37" label="Prefs Supported Languages"/>
+  <int value="38" label="Prefs Cld Version"/>
+  <int value="39" label="Prefs Cld Data Source"/>
+  <int value="40" label="Prefs Dump"/>
+</enum>
+
+<enum name="SetupInstallResult" type="int">
+  <int value="0" label="First install of Chrome succeeded."/>
+  <int value="1" label="Same version reinstalled for repair."/>
+  <int value="2" label="Chrome successfully updated to new version."/>
+  <int value="3" label="No work done; launched existing Chrome."/>
+  <int value="4" label="Higher version of Chrome already exists."/>
+  <int value="5" label="User level install already exists."/>
+  <int value="6" label="Machine level install already exists."/>
+  <int value="7" label="Install/update failed."/>
+  <int value="8" label="Failed to patch setup.exe."/>
+  <int value="9" label="Current OS not supported."/>
+  <int value="10" label="OS API call failed."/>
+  <int value="11" label="Unable to get Temp directory."/>
+  <int value="12" label="Failed to uncompress Chrome archive."/>
+  <int value="13" label="Something wrong with the installer archive."/>
+  <int value="14" label="User trying system level install is not Admin."/>
+  <int value="15" label="Chrome not installed (during uninstall)."/>
+  <int value="16" label="Chrome currently running (during uninstall)."/>
+  <int value="17" label="User has confirmed Chrome uninstall."/>
+  <int value="18" label="User okayed uninstall and profile deletion."/>
+  <int value="19" label="Chrome successfully uninstalled."/>
+  <int value="20" label="Chrome uninstallation failed."/>
+  <int value="21" label="User cancelled Chrome uninstallation."/>
+  <int value="22" label="Unknown status (this should never happen)."/>
+  <int value="23" label="Rename of new_chrome.exe to chrome.exe worked."/>
+  <int value="24" label="Rename of new_chrome.exe failed."/>
+  <int value="25" label="EULA dialog was not accepted by user."/>
+  <int value="26" label="EULA dialog was accepted by user."/>
+  <int value="27" label="EULA accepted with the crash option selected."/>
+  <int value="28" label="Installation directory is in use by another process."/>
+  <int value="29" label="Uninstallation required a reboot."/>
+  <int value="30" label="Chrome successfully updated but old version running."/>
+  <int value="31" label="Chrome repair failed as Chrome was running."/>
+  <int value="32" label="Setup has been re-launched as the interactive user."/>
+  <int value="33"
+      label="The chrome-sxs option provided does not work with other command
+             line options."/>
+  <int value="42" label="Failed to apply a diff patch."/>
+  <int value="47"
+      label="A non-install option was called with an invalid installer state."/>
+  <int value="49"
+      label="The arguments of --patch were missing or they were invalid for
+             any reason."/>
+  <int value="50"
+      label="No previous version archive found for differential update."/>
+  <int value="51"
+      label="No multi-install products to update. The binaries will be
+             uninstalled if they are not in use."/>
+  <int value="52" label="The binaries were uninstalled."/>
+  <int value="53" label="An unsupported legacy option was given."/>
+  <int value="54" label="Current CPU not supported."/>
+  <int value="55" label="Autoupdates are now enabled."/>
+  <int value="56" label="Autoupdates could not be enabled."/>
+  <int value="57"
+      label="Unpacking the (possibly patched) uncompressed archive failed."/>
+</enum>
+
+<enum name="SetupSingletonAcquisitionResult" type="int">
+  <int value="0" label="The setup singleton was acquired successfully."/>
+  <int value="1" label="Acquisition of the exit event mutex timed out."/>
+  <int value="2" label="Acquisition of the setup mutex timed out."/>
+  <int value="3" label="Creation of the setup mutex failed."/>
+  <int value="4" label="Creation of the exit event failed."/>
+  <int value="5" label="Creation of the exit event mutex failed."/>
+</enum>
+
+<enum name="SHA1Status" type="int">
+  <summary>
+    Whether or not SHA-1 was present in a certificate chain and, if it was, when
+    the leaf certificate expired.
+  </summary>
+  <int value="0" label="Not present"/>
+  <int value="1" label="Expires after Jan 1, 2017"/>
+  <int value="2" label="Expires between Jun 1, 2016 and Jan 1, 2017"/>
+  <int value="3" label="Expires between Jan 1, 2016 and Jun 1, 2016"/>
+  <int value="4" label="Expires before Jan 1, 2016"/>
+</enum>
+
+<enum name="ShaderModel" type="int">
+  <summary>The GPU's Direct3D shader model version.</summary>
+  <int value="0" label="SHADER_MODEL_UNKNOWN"/>
+  <int value="1" label="SHADER_MODEL_2_0"/>
+  <int value="2" label="SHADER_MODEL_3_0"/>
+  <int value="3" label="SHADER_MODEL_4_0"/>
+  <int value="4" label="SHADER_MODEL_4_1"/>
+  <int value="5" label="SHADER_MODEL_5_0"/>
+</enum>
+
+<enum name="SharedMemoryCreateError" type="int">
+  <int value="0" label="SUCCESS">
+    The shared memory region was successfully created.
+  </int>
+  <int value="1" label="SIZE_ZERO">Failure because the size was zero.</int>
+  <int value="2" label="SIZE_TOO_LARGE">
+    Failure because the size was too large.
+  </int>
+  <int value="3" label="INITIALIZE_ACL_FAILURE">
+    Failure to initialize an ACL.
+  </int>
+  <int value="4" label="INITIALIZE_SECURITY_DESC_FAILURE">
+    Failure to initialize the security descriptor.
+  </int>
+  <int value="5" label="SET_SECURITY_DESC_FAILURE">
+    Failure to set the security descriptor.
+  </int>
+  <int value="6" label="CREATE_FILE_MAPPING_FAILURE">
+    Failure to create the file mapping.
+  </int>
+  <int value="7" label="REDUCE_PERMISSIONS_FAILURE">
+    Failure to reduce the permissions on the file mapping.
+  </int>
+  <int value="8" label="ALREADY_EXISTS">
+    The shared memory region already exists.
+  </int>
+</enum>
+
+<enum name="ShelfAlignmentValue" type="int">
+  <summary>
+    The alignment of the shelf area (see ash/launcher/launcher_view.cc).
+  </summary>
+  <int value="0" label="Bottom"/>
+  <int value="1" label="Left"/>
+  <int value="2" label="Right"/>
+</enum>
+
+<enum name="ShillSuspendTerminationDarkResumeActionResult" type="int">
+  <summary>
+    The termination/suspend/dark resume action result types come from
+    SuspendActionResult in shill/metrics.h
+  </summary>
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+</enum>
+
+<enum name="ShouldAllowOpenURLFailureReason" type="int">
+  <summary>
+    Specifies the reason why the web-accessible resource check in
+    ShouldAllowOpenURL fails.
+  </summary>
+  <int value="0" label="Request is to filesystem: URL with extension origin"/>
+  <int value="1" label="Request is to blob: URL with extension origin"/>
+  <int value="2"
+      label="Resource is not web-accessible and site URL has scheme that used
+             to be allowed"/>
+  <int value="3" label="Resource is not web-accessible (most common)"/>
+</enum>
+
+<enum name="ShutdownReason" type="int">
+  <summary>
+    The reason that the Chrome OS power manager shut down or rebooted the
+    system.
+  </summary>
+  <int value="0" label="User request"/>
+  <int value="1" label="State transition"/>
+  <int value="2" label="Low battery"/>
+  <int value="3" label="Suspend failures"/>
+  <int value="4" label="Dark resume"/>
+  <int value="5" label="System update"/>
+  <int value="6" label="Dark resume failed"/>
+</enum>
+
+<enum name="ShutdownType" type="int">
+  <int value="0" label="Not valid">Invalid value.</int>
+  <int value="1" label="Window close">The last browser window was closed.</int>
+  <int value="2" label="Browser exit">User clicked on the Exit menu item.</int>
+  <int value="3" label="End session">OS is logging off or shutting down.</int>
+</enum>
+
+<enum name="SideloadUIEvents" type="int">
+  <int value="0" label="Extension installed"/>
+  <int value="1" label="Extension ignored"/>
+  <int value="2" label="Extension re-enabled"/>
+  <int value="3" label="Extension uninstalled"/>
+</enum>
+
+<enum name="SideloadWipeoutBubble" type="int">
+  <int value="0" label="Learn more"/>
+  <int value="1" label="Settings page"/>
+  <int value="2" label="Dismiss"/>
+</enum>
+
+<enum name="SigninAccessPoint" type="int">
+  <int value="0" label="Start page"/>
+  <int value="1" label="NTP Link"/>
+  <int value="2" label="Menu"/>
+  <int value="3" label="Settings"/>
+  <int value="4" label="Supervised user"/>
+  <int value="5" label="Extension install bubble"/>
+  <int value="6" label="Extensions"/>
+  <int value="7" label="Apps page link"/>
+  <int value="8" label="Bookmark bubble"/>
+  <int value="9" label="Bookmark manager"/>
+  <int value="10" label="Avatar bubble sign in"/>
+  <int value="11" label="User manager"/>
+  <int value="12" label="Devices page"/>
+  <int value="13" label="Cloud print"/>
+  <int value="14" label="Content area"/>
+  <int value="15" label="Signin promo"/>
+  <int value="16" label="Recent tabs"/>
+  <int value="17" label="Typed URL with unknown access point"/>
+  <int value="18" label="Password bubble"/>
+  <int value="19" label="Autofill dropdown"/>
+  <int value="20" label="NTP Content Suggestions"/>
+  <int value="21" label="Re-signin infobar"/>
+  <int value="22" label="Tab switcher"/>
+</enum>
+
+<enum name="SigninAccountEquality" type="int">
+  <int value="0" label="Both Equal"/>
+  <int value="1" label="Both Different"/>
+  <int value="2" label="Only Same Email"/>
+  <int value="3" label="Only Same Id"/>
+  <int value="4" label="Email Fallback"/>
+</enum>
+
+<enum name="SigninAccountReconcilorState" type="int">
+  <int value="0" label="OK">
+    The account reconcilor has finished running and is up-to-date.
+  </int>
+  <int value="1" label="Running">
+    The account reconcilor is running and gathering informations.
+  </int>
+  <int value="2" label="Error">
+    The account reconcilor has encountered an error and stopped.
+  </int>
+</enum>
+
+<enum name="SigninChoice" type="int">
+  <int value="0" label="Cancel"/>
+  <int value="1" label="Continue"/>
+  <int value="2" label="New Profile"/>
+</enum>
+
+<enum name="SigninFlowConfirmations" type="int">
+  <int value="0" label="Shown"/>
+  <int value="1" label="OK"/>
+  <int value="2" label="Return"/>
+  <int value="3" label="Advanced"/>
+  <int value="4" label="Close"/>
+  <int value="5" label="Escape"/>
+  <int value="6" label="Undo"/>
+  <int value="7" label="Learn more"/>
+  <int value="8" label="Learn more ok"/>
+  <int value="9" label="Learn more return"/>
+  <int value="10" label="Learn more advanced"/>
+  <int value="11" label="Learn more close"/>
+  <int value="12" label="Learn more escape"/>
+  <int value="13" label="Learn more undo"/>
+</enum>
+
+<enum name="SigninHelperFlow" type="int">
+  <int value="0" label="Shown">The signin flow was shown to the user.</int>
+  <int value="1" label="Accepted">The user pressed accept to sign in.</int>
+  <int value="2" label="Rejected">The user pressed the reject to sign in.</int>
+  <int value="3" label="Dismissed">
+    The user pressed the X button to dismiss the signin promo.
+  </int>
+  <int value="4" label="Ignored">
+    The user completely ignored the signin promo. Either they navigated away, or
+    they used the page as is.
+  </int>
+  <int value="5" label="Learn More">
+    The user clicked on the learn more link in the signin promo.
+  </int>
+  <int value="6" label="Accept with Defaults">
+    The sync was started with default settings.
+  </int>
+  <int value="7" label="Accept with Advanced">
+    The sync was started with advanced settings.
+  </int>
+  <int value="8" label="Auto-Accept with Defaults">
+    The sync was started through auto-accept with default settings.
+  </int>
+  <int value="9" label="Auto-Accept with Advanced">
+    The sync was started through auto-accept with advanced settings.
+  </int>
+  <int value="10" label="Undo">The sync was aborted with an undo button.</int>
+</enum>
+
+<enum name="SigninInvestigatedScenario" type="int">
+  <int value="0" label="Upgrade low risk"/>
+  <int value="1" label="Upgrade high risk"/>
+  <int value="2" label="Same account"/>
+  <int value="3" label="Different account"/>
+</enum>
+
+<enum name="SigninReason" type="int">
+  <int value="0" label="Signin primary account"/>
+  <int value="1" label="Add secondary account"/>
+  <int value="2" label="Reauthentication"/>
+  <int value="3" label="Unlock profile"/>
+  <int value="4" label="Typed URL with unknown reason"/>
+</enum>
+
+<enum name="SigninReauthStates" type="int">
+  <int value="0" label="Account mismatch"/>
+  <int value="1" label="Reauth Shown"/>
+</enum>
+
+<enum name="SigninSignoutProfile" type="int">
+  <int value="0" label="Preference changed">
+    The preference or policy controlling if signin is valid has changed.
+  </int>
+  <int value="1" label="Google service pattern changed">
+    The valid username pattern for signing in to the Google service changed.
+  </int>
+  <int value="2" label="Signin preference changed during signin">
+    The preference or policy controlling if signin is valid changed during the
+    signin process.
+  </int>
+  <int value="3" label="User clicked signout">User clicked to signout.</int>
+  <int value="4" label="Signin aborted">
+    The signin process was aborted, but signin had succeeded, so signout. This
+    may be due to a server response, policy definition or user action.
+  </int>
+  <int value="5" label="Server forced">
+    The sync server caused the profile to be signed out.
+  </int>
+  <int value="6" label="Credentials transfered">
+    The credentials are being transfered to a new profile, so the old one is
+    signed out.
+  </int>
+</enum>
+
+<enum name="SigninSource" type="int">
+  <int value="0" label="Start page"/>
+  <int value="1" label="NTP Link"/>
+  <int value="2" label="Menu"/>
+  <int value="3" label="Settings"/>
+  <int value="4" label="Extension install bubble"/>
+  <int value="5" label="App launcher"/>
+  <int value="6" label="Apps page link"/>
+  <int value="7" label="Bookmark bubble"/>
+  <int value="8" label="Avatar bubble sign in"/>
+  <int value="9" label="Avatar bubble add account"/>
+  <int value="10" label="Devices page"/>
+  <int value="11" label="Reauth"/>
+  <int value="12" label="Unknown"/>
+</enum>
+
+<enum name="SigninXDevicePromoEligibility" type="int">
+  <int value="0" label="Eligible">The user is eligible for the promo.</int>
+  <int value="1" label="Opted Out">
+    The profile has previously opted out of the promo.
+  </int>
+  <int value="2" label="Signed In">The profile is already signed in.</int>
+  <int value="3" label="Not Single GAIA Account">
+    The profile does not have a single, peristent GAIA cookie.
+  </int>
+  <int value="4" label="Unknown count of devices">
+    Yet to determine how many devices the user has.
+  </int>
+  <int value="5" label="Error fetching device activity">
+    An error was returned trying to determine the account's devices.
+  </int>
+  <int value="6" label="Throttled fetching device activity">
+    The call to get device activity was throttled, and never executed.
+  </int>
+  <int value="7" label="Zero devices found">The user has no devices.</int>
+  <int value="8" label="No devices active">
+    The user has no device that was recently active.
+  </int>
+</enum>
+
+<enum name="SigninXDevicePromoInitialized" type="int">
+  <int value="0" label="Initialized">
+    The promo was initialized successfully.
+  </int>
+  <int value="1" label="Opted Out">
+    The profile is opted out, so the promo didn't initialize.
+  </int>
+  <int value="2" label="No variations config">
+    Unable to read the variations configuration.
+  </int>
+</enum>
+
+<enum name="SimpleCache.EntryCreatedAndStream2Omitted" type="int">
+  <int value="0" label="Stream 2 file was present"/>
+  <int value="1" label="Empty stream 2 file was omitted"/>
+</enum>
+
+<enum name="SimpleCache.EntryOpenedAndStream2Removed" type="int">
+  <int value="0" label="Stream 2 file was already omitted or not empty"/>
+  <int value="1" label="Empty stream 2 file removed"/>
+</enum>
+
+<enum name="SimpleCache.FileDescriptorLimitStatus" type="int">
+  <int value="0" label="Unsupported"/>
+  <int value="1" label="Supported but failed"/>
+  <int value="2" label="Succeeded"/>
+</enum>
+
+<enum name="SimpleCacheHeaderSizeChange" type="int">
+  <int value="0" label="Written for the first time"/>
+  <int value="1" label="Rewritten with same size"/>
+  <int value="2" label="Rewritten with larger size"/>
+  <int value="3" label="Rewritten with smaller size"/>
+  <int value="4" label="Unexpected header stream write"/>
+</enum>
+
+<enum name="SimpleCacheIndexInitializeMethod" type="int">
+  <int value="0" label="Directory Scan"/>
+  <int value="1" label="Index File"/>
+  <int value="2" label="New Cache"/>
+</enum>
+
+<enum name="SimpleCacheIndexWriteReason" type="int">
+  <int value="0" label="Shutdown"/>
+  <int value="1" label="Startup Merge"/>
+  <int value="2" label="Saved While Idle"/>
+  <int value="3" label="Stopped (Android only)"/>
+</enum>
+
+<enum name="SimpleCacheOpenEntryIndexState" type="int">
+  <int value="0" label="No index"/>
+  <int value="1" label="Hit"/>
+  <int value="2" label="Miss"/>
+</enum>
+
+<enum name="SimpleCacheReadParallelizable" type="int">
+  <int value="0" label="Standalone Read (obsolete)"/>
+  <int value="1" label="Follows read"/>
+  <int value="2" label="Follows conflicting write"/>
+  <int value="3" label="Follows non conflicting write"/>
+  <int value="4" label="Follows other operation"/>
+  <int value="5" label="Read alone in queue"/>
+</enum>
+
+<enum name="SimpleCacheReadResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Invalid Argument"/>
+  <int value="2" label="Nonblocking Empty Return"/>
+  <int value="3" label="Invalid State"/>
+  <int value="4" label="Fast Empty Return"/>
+  <int value="5" label="Synchronous Read Failure"/>
+  <int value="6" label="Synchronous Checksum Failure"/>
+</enum>
+
+<enum name="SimpleCacheStaleIndexQuality" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Missed Entries"/>
+  <int value="2" label="Extra Entries"/>
+  <int value="3" label="Both"/>
+</enum>
+
+<enum name="SimpleCacheSyncCheckEOFResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Read Failure"/>
+  <int value="2" label="Magic Number Mismatch"/>
+  <int value="3" label="CRC Mismatch"/>
+</enum>
+
+<enum name="SimpleCacheSyncCloseResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Write Failure"/>
+</enum>
+
+<enum name="SimpleCacheSyncCreateResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Platform File Error"/>
+  <int value="2" label="Can't Write Header"/>
+  <int value="3" label="Can't Write Key"/>
+</enum>
+
+<enum name="SimpleCacheSyncOpenResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Platform File Error"/>
+  <int value="2" label="Can't Read Header"/>
+  <int value="3" label="Bad Magic Number"/>
+  <int value="4" label="Bad Version"/>
+  <int value="5" label="Can't Read Key"/>
+  <int value="6" label="Key Mismatch"/>
+  <int value="7" label="Hash Mismatch"/>
+  <int value="8" label="Sparse Open Failed"/>
+</enum>
+
+<enum name="SimpleCacheSyncSHA256Result" type="int">
+  <int value="0" label="Not Present"/>
+  <int value="1" label="Matched"/>
+  <int value="2" label="Did Not Match"/>
+</enum>
+
+<enum name="SimpleCacheSyncWriteResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Pretruncate Failure"/>
+  <int value="2" label="Write Failure"/>
+  <int value="3" label="Truncate Failure"/>
+  <int value="4" label="Lazy Stream Entry Doomed"/>
+  <int value="5" label="Lazy Create Failure"/>
+  <int value="6" label="Lazy Initialization Failure"/>
+</enum>
+
+<enum name="SimpleCacheWriteDependencyType" type="int">
+  <int value="0" label="First operation in the queue (Optimistic)"/>
+  <int value="1" label="Follows conflicting optimistic write"/>
+  <int value="2" label="Follows non conflicting optimistic write"/>
+  <int value="3" label="Follows conflicting conservative write"/>
+  <int value="4" label="Follows non conflicting conservative write"/>
+  <int value="5" label="Follows conflicting read"/>
+  <int value="6" label="Follows non conflicting read"/>
+  <int value="7" label="Follows other operation"/>
+</enum>
+
+<enum name="SimpleCacheWriteResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Invalid Argument"/>
+  <int value="2" label="Over Max Size"/>
+  <int value="3" label="Bad State"/>
+  <int value="4" label="Synchronous Write Failure"/>
+  <int value="5" label="Fast Empty Return (Success)"/>
+</enum>
+
+<enum name="SimpleGeolocationRequestEvent" type="int">
+  <int value="0" label="Request start"/>
+  <int value="1" label="Response success"/>
+  <int value="2" label="Response not OK"/>
+  <int value="3" label="Response empty"/>
+  <int value="4" label="Response malformed"/>
+</enum>
+
+<enum name="SimpleGeolocationRequestHasWiFiAccessPoints" type="int">
+  <int value="0" label="No WiFi data in request."/>
+  <int value="1" label="WiFi data present."/>
+</enum>
+
+<enum name="SimpleGeolocationRequestResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+  <int value="2" label="Server error"/>
+  <int value="3" label="Request is cancelled."/>
+</enum>
+
+<enum name="SimpleIndexState" type="int">
+  <int value="0" label="Corrupt"/>
+  <int value="1" label="Stale"/>
+  <int value="2" label="Fresh"/>
+  <int value="3" label="Fresh index with cache updated since backend start"/>
+</enum>
+
+<enum name="SiteEngagementServiceEngagementType" type="int">
+  <int value="0" label="Navigation"/>
+  <int value="1" label="Keypress"/>
+  <int value="2" label="Mouse down"/>
+  <int value="3" label="Tap gesture"/>
+  <int value="4" label="Scroll (mouse wheel or touch)"/>
+  <int value="5" label="Media (foreground tab)"/>
+  <int value="6" label="Media (background tab)"/>
+  <int value="7" label="Webapp shortcut launch"/>
+</enum>
+
+<enum name="SiteIsolationMimeType" type="int">
+  <int value="0" label="HTML"/>
+  <int value="1" label="XML"/>
+  <int value="2" label="JSON"/>
+  <int value="3" label="Plain"/>
+  <int value="4" label="Others"/>
+</enum>
+
+<enum name="SkiaFilterQuality" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="Low"/>
+  <int value="2" label="Medium"/>
+  <int value="3" label="High"/>
+</enum>
+
+<enum name="SkiaLockTexturePath" type="int">
+  <int value="0" label="Failure"/>
+  <int value="1" label="Pre-Existing"/>
+  <int value="2" label="Native"/>
+  <int value="3" label="Compressed"/>
+  <int value="4" label="YUV"/>
+  <int value="5" label="RGBA"/>
+</enum>
+
+<enum name="SkiaScaleFactor" type="int">
+  <int value="0" label="Upscale"/>
+  <int value="1" label="No Scale"/>
+  <int value="2" label="Downscale"/>
+  <int value="3" label="Large Downscale"/>
+</enum>
+
+<enum name="SnackbarIdentifier" type="int">
+  <int value="-2" label="TEST_SNACKBAR"/>
+  <int value="-1" label="UNKNOWN"/>
+  <int value="0" label="BOOKMARK_ADDED"/>
+  <int value="1" label="BOOKMARK_DELETE_UNDO"/>
+  <int value="2" label="NTP_MOST_VISITED_DELETE_UNDO"/>
+  <int value="3" label="OFFLINE_PAGE_RELOAD"/>
+  <int value="4" label="AUTO_LOGIN"/>
+  <int value="5" label="OMNIBOX_GEOLOCATION"/>
+  <int value="6" label="LOFI"/>
+  <int value="7" label="DATA_USE_STARTED"/>
+  <int value="8" label="DATA_USE_ENDED"/>
+  <int value="9" label="DOWNLOAD_SUCCEEDED"/>
+  <int value="10" label="DOWNLOAD_FAILED"/>
+  <int value="11" label="TAB_CLOSE_UNDO"/>
+  <int value="12" label="TAB_CLOSE_ALL_UNDO"/>
+  <int value="13" label="DOWNLOAD_DELETE_UNDO"/>
+  <int value="14" label="SPECIAL_LOCALE"/>
+  <int value="15" label="BLIMP"/>
+  <int value="16" label="DATA_REDUCTION_PROMO"/>
+</enum>
+
+<enum name="SnippetOpenMethod" type="int">
+  <int value="0" label="Plain click"/>
+  <int value="1" label="New Window"/>
+  <int value="2" label="New Tab"/>
+  <int value="3" label="Incognito Tab"/>
+  <int value="4" label="Save for Offline"/>
+</enum>
+
+<enum name="SnippetsInteractions" type="int">
+  <int value="0" label="Snippets were shown to the user"/>
+  <int value="1" label="User scrolled through the snippets"/>
+  <int value="2" label="User clicked on a snippet into the host website"/>
+  <int value="3" label="User swiped a snippet away (obsolete)"/>
+  <int value="4" label="User swiped a snippet away after visiting"/>
+  <int value="5" label="User swiped a snippet away without visiting"/>
+  <int value="6"
+      label="User scrolled below the fold (max once per NTP load). Obsolete."/>
+</enum>
+
+<enum name="SocketErrorCode" type="int">
+  <int value="0" label="ERR_MSG_TOO_BIG"/>
+  <int value="1" label="ERR_ADDRESS_UNREACHABLE"/>
+  <int value="2" label="ERR_ADDRESS_INVALID"/>
+  <int value="3" label="ERR_INTERNET_DISCONNECTED"/>
+  <int value="4" label="ERR_TIMED_OUT"/>
+  <int value="5" label="ERR_INSUFFICIENT_RESOURCES"/>
+  <int value="6" label="ERR_OUT_OF_MEMORY"/>
+  <int value="7" label="ERR_OTHER"/>
+</enum>
+
+<enum name="SocketStreamConnectionType" type="int">
+  <int value="0" label="None"/>
+  <int value="1" label="All"/>
+  <int value="2" label="Tunnel"/>
+  <int value="3" label="SOCKS"/>
+  <int value="4" label="SSL"/>
+  <int value="5" label="Secure proxy"/>
+</enum>
+
+<enum name="SocketStreamProtocolType" type="int">
+  <int value="0" label="unknown"/>
+  <int value="1" label="ws"/>
+  <int value="2" label="wss"/>
+</enum>
+
+<enum name="SoftwareImageDecodeState" type="int">
+  <int value="0" label="Wasted"/>
+  <int value="1" label="Used"/>
+  <int value="2" label="Used, relock failed"/>
+  <int value="3" label="Wasted, relocked"/>
+  <int value="4" label="Used, relocked"/>
+</enum>
+
+<enum name="SoftwareReporterExperimentError" type="int">
+  <int value="1" label="Bad tag"/>
+  <int value="2" label="Bad parameters"/>
+</enum>
+
+<enum name="SoftwareReporterLogsUploadEnabled" type="int">
+  <int value="0" label="Enabled"/>
+  <int value="1" label="SBER Disabled"/>
+  <int value="2" label="Recently sent logs"/>
+</enum>
+
+<enum name="SoftwareReporterLogsUploadResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Request failed"/>
+  <int value="2" label="Invalid response"/>
+  <int value="3" label="Timed out"/>
+  <int value="4" label="Internal error"/>
+  <int value="5" label="Report too large"/>
+  <int value="6" label="No network"/>
+</enum>
+
+<enum name="SoftwareReporterLogsUploadResultRegistryError" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Invalid registry key"/>
+  <int value="2" label="Value not found"/>
+  <int value="3" label="Value out of bounds"/>
+</enum>
+
+<enum name="SpdyFrameFlowControlState" type="int">
+  <int value="0" label="Send not stalled"/>
+  <int value="1" label="Send stalled by stream"/>
+  <int value="2" label="Send stalled by session"/>
+  <int value="3" label="Send stalled by stream and session"/>
+</enum>
+
+<enum name="SpdyIPPoolDomainMatch" type="int">
+  <int value="0" label="mismatch"/>
+  <int value="1" label="match"/>
+</enum>
+
+<!-- Replaced by SpdyProtocolErrorDetails2 on 2013-04-19. -->
+
+<enum name="SpdyProtocolErrorDetails" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Invalid Control Frame"/>
+  <int value="2" label="Control Frame Payload Too Large"/>
+  <int value="3" label="Zlib Init Failure"/>
+  <int value="4" label="Unsupported Version"/>
+  <int value="5" label="Decompress Failure"/>
+  <int value="6" label="Compress Failure"/>
+  <int value="7" label="Credential Frame Corrupt"/>
+  <int value="8" label="Invalid Data Frame Flags"/>
+<!-- r181910 added an enum value here, so don't trust the counts for
+     the values below for Chrome builds after that revision. -->
+
+  <int value="9" label="Invalid Status Code"/>
+  <int value="10" label="Protocol Error"/>
+  <int value="11" label="Invalid Stream"/>
+  <int value="12" label="Refused Stream"/>
+  <int value="13" label="Unsupported Version"/>
+  <int value="14" label="Cancel"/>
+  <int value="15" label="Internal Error"/>
+  <int value="16" label="Flow Control Error"/>
+  <int value="17" label="Stream In Use"/>
+  <int value="18" label="Stream Already Closed"/>
+  <int value="19" label="Invalid Credentials"/>
+  <int value="20" label="Frame Too Large"/>
+  <int value="21" label="Unexpected Ping"/>
+  <int value="22" label="Rst Stream For Non Active Stream"/>
+  <int value="23" label="Spdy Compression Failure"/>
+  <int value="24" label="Request For Secure Content Over Insecure Session"/>
+  <int value="25" label="Protocol Error Syn Reply Not Received"/>
+  <int value="26" label="Num Spdy Protocol Error Details"/>
+</enum>
+
+<enum name="SpdyProtocolErrorDetails2" type="int">
+<!-- SpdyFramer::SpdyErrors -->
+
+  <int value="0" label="No error"/>
+  <int value="1" label="Invalid Control Frame"/>
+  <int value="2" label="Control Frame Payload Too Large"/>
+  <int value="3" label="Zlib Init Failure"/>
+  <int value="4" label="Unsupported Version"/>
+  <int value="5" label="Decompress Failure"/>
+  <int value="6" label="Compress Failure"/>
+  <int value="7" label="Credential Frame Corrupt"/>
+  <int value="8" label="Invalid Data Frame Flags"/>
+  <int value="9" label="Invalid Control Frame Flags"/>
+<!-- SpdyRstStreamStatus -->
+
+  <int value="10" label="(Unused)"/>
+  <int value="11" label="Protocol Error"/>
+  <int value="12" label="Invalid Stream"/>
+  <int value="13" label="Refused Stream"/>
+  <int value="14" label="Unsupported Version"/>
+  <int value="15" label="Cancel"/>
+  <int value="16" label="Internal Error"/>
+  <int value="17" label="Flow Control Error"/>
+  <int value="18" label="Stream In Use"/>
+  <int value="19" label="Stream Already Closed"/>
+  <int value="20" label="Invalid Credentials"/>
+  <int value="21" label="Frame Too Large"/>
+<!-- SpdySession errors -->
+
+  <int value="22" label="Unexpected Ping"/>
+  <int value="23" label="Rst Stream For Non Active Stream"/>
+  <int value="24" label="Spdy Compression Failure"/>
+  <int value="25" label="Request For Secure Content Over Insecure Session"/>
+  <int value="26" label="Syn Reply Not Received"/>
+  <int value="27" label="Invalid Window Update Size"/>
+  <int value="28" label="Receive Window Size Violation"/>
+<!-- More SpdyFramer::SpdyErrors -->
+
+  <int value="29" label="GoAway Frame Corrupt"/>
+  <int value="30" label="RstStream Frame Corrupt"/>
+  <int value="31" label="Unexpected Frame (Expected Continuation)"/>
+<!-- More SpdyRstStreamStatus -->
+
+  <int value="32" label="Timeout waiting for settings acknowledgement"/>
+  <int value="33"
+      label="Connection established in response to CONNECT request was
+             abnormally closed"/>
+  <int value="34" label="Peer exhibiting suspect behavior."/>
+  <int value="35" label="Inadequate security."/>
+  <int value="36" label="HTTP/1.1 required."/>
+<!-- More SpdyFramer::SpdyErrors -->
+
+  <int value="37" label="Invalid control frame size."/>
+  <int value="38" label="Invalid stream ID."/>
+  <int value="39" label="Invalid padding length."/>
+  <int value="40" label="Oversized payload."/>
+<!-- More SpdyRstStreamStatus -->
+
+  <int value="41" label="No error."/>
+</enum>
+
+<enum name="SpdyProtocolVersion" type="int">
+  <summary>
+    SPDY protocol version identifier, including major and minor protocol
+    numbers, and draft versions where appropriate.
+  </summary>
+  <int value="0" label="SPDY 2.0"/>
+  <int value="1" label="SPDY 3.0"/>
+  <int value="2" label="SPDY 3.1"/>
+  <int value="3" label="HTTP/2 draft-14"/>
+  <int value="4" label="HTTP/2 draft-15"/>
+  <int value="5" label="HTTP/2 draft-16"/>
+  <int value="6" label="HTTP/2 draft-17"/>
+  <int value="7" label="HTTP/2"/>
+</enum>
+
+<enum name="SpdySessionGet" type="int">
+  <int value="0" label="created new"/>
+  <int value="1" label="found existing"/>
+  <int value="2" label="found existing from IP Pool"/>
+  <int value="3" label="imported from socket"/>
+</enum>
+
+<enum name="SpdySettingsReceived" type="int">
+  <int value="0" label="not received"/>
+  <int value="1" label="received"/>
+</enum>
+
+<enum name="SpdySettingsSent" type="int">
+  <int value="0" label="not sent"/>
+  <int value="1" label="sent"/>
+</enum>
+
+<enum name="SpecialLocalePromoAction" type="int">
+  <int value="0" label="Use Sogou"/>
+  <int value="1" label="Keep Google"/>
+  <int value="2" label="Settings"/>
+  <int value="3" label="Back key"/>
+</enum>
+
+<enum name="SpecialShFileOperationCodes" type="int">
+  <summary>Legacy error codes still returned by |ShFileOperation()|</summary>
+  <int value="5" label="Access denied (Win32)"/>
+  <int value="32" label="Sharing violation (Win32)"/>
+  <int value="87" label="Invalid parameter (Win32)"/>
+  <int value="113" label="Source and Destination are same file"/>
+  <int value="114" label="Multiple source mapped to single destination"/>
+  <int value="115" label="Rename to different directory"/>
+  <int value="116" label="Source root"/>
+  <int value="117" label="Canceled by user"/>
+  <int value="118" label="Destination is subtree of source"/>
+  <int value="120" label="Denied by security settings"/>
+  <int value="121" label="Path length exceeded MAX_PATH"/>
+  <int value="122" label="Multiple destination paths"/>
+  <int value="124" label="Path invalid"/>
+  <int value="125" label="Source and destination have same parent"/>
+  <int value="126" label="Destination exists"/>
+  <int value="128" label="Destination exists as folder"/>
+  <int value="129" label="Name length exceeded MAX_PATH"/>
+  <int value="130" label="Destination read-only CD-ROM"/>
+  <int value="131" label="Destination read-only DVD"/>
+  <int value="132" label="Destination writable CD-ROM"/>
+  <int value="133" label="File too large"/>
+  <int value="134" label="Source read-only CD-ROM"/>
+  <int value="135" label="Source read-only DVD"/>
+  <int value="136" label="Source writable CD-ROM"/>
+  <int value="183" label="Operation exceeded MAX_PATH"/>
+  <int value="1026" label="Invalid path / unknown"/>
+  <int value="65536" label="Unspecified destination error"/>
+  <int value="65652" label="Destination root"/>
+</enum>
+
+<enum name="SpeculativeRestoreApplicability" type="int">
+  <int value="0" label="Applicable"/>
+  <int value="1" label="Not applicable (tablet)"/>
+  <int value="2" label="Not applicable (low-memory device)"/>
+  <int value="3" label="Not applicable (bandwidth management)"/>
+</enum>
+
+<enum name="SpeculativeRestorePredictionAccuracy" type="int">
+  <int value="0" label="Hit"/>
+  <int value="1" label="Miss (different tab)"/>
+  <int value="2" label="Miss (tab not switched)"/>
+</enum>
+
+<enum name="SpeculativeRestoreTabStatus" type="int">
+  <int value="0" label="Already loaded"/>
+  <int value="1" label="Needs restore"/>
+</enum>
+
+<enum name="SplashscreenColorStatus" type="int">
+  <int value="0" label="Default color"/>
+  <int value="1" label="Custom color"/>
+</enum>
+
+<enum name="SplashscreenHidesReason" type="int">
+  <int value="0" label="First Paint"/>
+  <int value="1" label="Page Load Finished"/>
+  <int value="2" label="Page Load Failed"/>
+  <int value="3" label="Crash"/>
+</enum>
+
+<enum name="SplashscreenIconType" type="int">
+  <int value="0" label="No splashscreen icon"/>
+  <int value="1" label="Fallback icon"/>
+  <int value="2" label="Custom icon"/>
+  <int value="3" label="Small custom icon"/>
+</enum>
+
+<enum name="SqliteErrorCode" type="int">
+  <summary>Error codes returned by SQLite - see sqlite3.h</summary>
+  <int value="0" label="SQLITE_OK">Successful result</int>
+  <int value="1" label="SQLITE_ERROR">SQL error or missing database</int>
+  <int value="2" label="SQLITE_INTERNAL">
+    NOT USED. Internal logic error in SQLite
+  </int>
+  <int value="3" label="SQLITE_PERM">Access permission denied</int>
+  <int value="4" label="SQLITE_ABORT">Callback routine requested an abort</int>
+  <int value="5" label="SQLITE_BUSY">The database file is locked</int>
+  <int value="6" label="SQLITE_LOCKED">A table in the database is locked</int>
+  <int value="7" label="SQLITE_NOMEM">A malloc() failed</int>
+  <int value="8" label="SQLITE_READONLY">
+    Attempt to write a readonly database
+  </int>
+  <int value="9" label="SQLITE_INTERRUPT">
+    Operation terminated by sqlite3_interrupt()
+  </int>
+  <int value="10" label="SQLITE_IOERR">
+    Some kind of disk I/O error occurred
+  </int>
+  <int value="11" label="SQLITE_CORRUPT">
+    The database disk image is malformed
+  </int>
+  <int value="12" label="SQLITE_NOTFOUND">
+    NOT USED. Table or record not found
+  </int>
+  <int value="13" label="SQLITE_FULL">
+    Insertion failed because database is full
+  </int>
+  <int value="14" label="SQLITE_CANTOPEN">Unable to open the database file</int>
+  <int value="15" label="SQLITE_PROTOCOL">
+    NOT USED. Database lock protocol error
+  </int>
+  <int value="16" label="SQLITE_EMPTY">Database is empty</int>
+  <int value="17" label="SQLITE_SCHEMA">The database schema changed</int>
+  <int value="18" label="SQLITE_TOOBIG">String or BLOB exceeds size limit</int>
+  <int value="19" label="SQLITE_CONSTRAINT">
+    Abort due to contraint violation
+  </int>
+  <int value="20" label="SQLITE_MISMATCH">Data type mismatch</int>
+  <int value="21" label="SQLITE_MISUSE">Library used incorrectly</int>
+  <int value="22" label="SQLITE_NOLFS">
+    Uses OS features not supported on host
+  </int>
+  <int value="23" label="SQLITE_AUTH">Authorization denied</int>
+  <int value="24" label="SQLITE_FORMAT">Auxiliary database format error</int>
+  <int value="25" label="SQLITE_RANGE">
+    2nd parameter to sqlite3_bind() out of range
+  </int>
+  <int value="26" label="SQLITE_NOTADB">
+    File opened that is not a database file
+  </int>
+  <int value="27" label="SQLITE_NOTICE">Notifications from sqlite3_log()</int>
+  <int value="28" label="SQLITE_WARNING">Warnings from sqlite3_log()</int>
+  <int value="100" label="SQLITE_ROW">sqlite3_step() has another row ready</int>
+  <int value="101" label="SQLITE_DONE">
+    sqlite3_step() has finished executing
+  </int>
+  <int value="261" label="SQLITE_BUSY_RECOVERY">TBD</int>
+  <int value="262" label="SQLITE_LOCKED_SHAREDCACHE">TBD</int>
+  <int value="264" label="SQLITE_READONLY_RECOVERY">TBD</int>
+  <int value="266" label="SQLITE_IOERR_READ">Error reading from file</int>
+  <int value="267" label="SQLITE_CORRUPT_VTAB">TBD</int>
+  <int value="270" label="SQLITE_CANTOPEN_NOTEMPDIR">TBD</int>
+  <int value="275" label="SQLITE_CONSTRAINT_CHECK">TBD</int>
+  <int value="279" label="SQLITE_AUTH_USER">TBD</int>
+  <int value="283" label="SQLITE_NOTICE_RECOVER_WAL">TBD</int>
+  <int value="284" label="SQLITE_WARNING_AUTOINDEX">TBD</int>
+  <int value="516" label="SQLITE_ABORT_ROLLBACK">TBD</int>
+  <int value="517" label="SQLITE_BUSY_SNAPSHOT">TBD</int>
+  <int value="520" label="SQLITE_READONLY_CANTLOCK">TBD</int>
+  <int value="522" label="SQLITE_IOERR_SHORT_READ">Short read from file</int>
+  <int value="526" label="SQLITE_CANTOPEN_ISDIR">
+    Database file is directory
+  </int>
+  <int value="531" label="SQLITE_CONSTRAINT_COMMITHOOK">TBD</int>
+  <int value="539" label="SQLITE_NOTICE_RECOVER_ROLLBACK">TBD</int>
+  <int value="776" label="SQLITE_READONLY_ROLLBACK">
+    Cannot rollback due to readonly file
+  </int>
+  <int value="778" label="SQLITE_IOERR_WRITE">
+    Error writing to file (other than SQLITE_FULL)
+  </int>
+  <int value="782" label="SQLITE_CANTOPEN_FULLPATH">TBD</int>
+  <int value="787" label="SQLITE_CONSTRAINT_FOREIGNKEY">
+    Constraint failure due to foreign key violation
+  </int>
+  <int value="1032" label="SQLITE_READONLY_DBMOVED">
+    Readonly because database file was moved or unlinked while open
+  </int>
+  <int value="1034" label="SQLITE_IOERR_FSYNC">Error syncing to disk</int>
+  <int value="1038" label="SQLITE_CANTOPEN_CONVPATH">TBD</int>
+  <int value="1043" label="SQLITE_CONSTRAINT_FUNCTION">TBD</int>
+  <int value="1290" label="SQLITE_IOERR_DIR_FSYNC">
+    Error syncing directory changes to disk
+  </int>
+  <int value="1299" label="SQLITE_CONSTRAINT_NOTNULL">
+    NOTNULL constraint violated
+  </int>
+  <int value="1546" label="SQLITE_IOERR_TRUNCATE">Error truncating file</int>
+  <int value="1555" label="SQLITE_CONSTRAINT_PRIMARYKEY">
+    Primary key not unique
+  </int>
+  <int value="1802" label="SQLITE_IOERR_FSTAT">Error reading file metadata</int>
+  <int value="1811" label="SQLITE_CONSTRAINT_TRIGGER">
+    Constraint failed due to trigger raise
+  </int>
+  <int value="2058" label="SQLITE_IOERR_UNLOCK">Error unlocking file</int>
+  <int value="2067" label="SQLITE_CONSTRAINT_UNIQUE">
+    Unique constraint failed
+  </int>
+  <int value="2314" label="SQLITE_IOERR_RDLOCK">
+    Error getting read lock - should not be possible
+  </int>
+  <int value="2323" label="SQLITE_CONSTRAINT_VTAB">TBD</int>
+  <int value="2570" label="SQLITE_IOERR_DELETE">Error deleting file</int>
+  <int value="2579" label="SQLITE_CONSTRAINT_ROWID">Rowid not unique</int>
+  <int value="2826" label="SQLITE_IOERR_BLOCKED">
+    Deadlock due to other process access to SQLite files
+  </int>
+  <int value="3082" label="SQLITE_IOERR_NOMEM">Error mapping shared memory</int>
+  <int value="3338" label="SQLITE_IOERR_ACCESS">
+    Error getting file attributes (other than not found)
+  </int>
+  <int value="3594" label="SQLITE_IOERR_CHECKRESERVEDLOCK">
+    Error while querying lock status
+  </int>
+  <int value="3850" label="SQLITE_IOERR_LOCK">Error acquiring lock</int>
+  <int value="4106" label="SQLITE_IOERR_CLOSE">Error closing file</int>
+  <int value="4362" label="SQLITE_IOERR_DIR_CLOSE">Unused</int>
+  <int value="4618" label="SQLITE_IOERR_SHMOPEN">Error mmapping file</int>
+  <int value="4874" label="SQLITE_IOERR_SHMSIZE">
+    Error in stat while mmapping file
+  </int>
+  <int value="5130" label="SQLITE_IOERR_SHMLOCK">Unused</int>
+  <int value="5386" label="SQLITE_IOERR_SHMMAP">TBD</int>
+  <int value="5642" label="SQLITE_IOERR_SEEK">TBD</int>
+  <int value="5898" label="SQLITE_IOERR_DELETE_NOENT">TBD</int>
+  <int value="6154" label="SQLITE_IOERR_MMAP">TBD</int>
+  <int value="6410" label="SQLITE_IOERR_GETTEMPPATH">TBD</int>
+  <int value="6666" label="SQLITE_IOERR_CONVPATH">TBD</int>
+</enum>
+
+<enum name="SqliteIOERRCode" type="int">
+  <obsolete>
+    Replaced 5/14/2013 by expanded Sqlite.Error histogram.
+  </obsolete>
+  <summary>Extended error codes returned by SQLite - see sqlite3.h</summary>
+  <int value="0" label="SQLITE_IOERR">No extended code given</int>
+  <int value="1" label="SQLITE_IOERR_READ">Error reading from file</int>
+  <int value="2" label="SQLITE_IOERR_SHORT_READ">Short read from file</int>
+  <int value="3" label="SQLITE_IOERR_WRITE">
+    Error writing to file (other than SQLITE_FULL)
+  </int>
+  <int value="4" label="SQLITE_IOERR_FSYNC">Error syncing to disk</int>
+  <int value="5" label="SQLITE_IOERR_DIR_FSYNC">
+    Error syncing directory changes to disk
+  </int>
+  <int value="6" label="SQLITE_IOERR_TRUNCATE">Error truncating file</int>
+  <int value="7" label="SQLITE_IOERR_FSTAT">Error reading file metadata</int>
+  <int value="8" label="SQLITE_IOERR_UNLOCK">Error unlocking file</int>
+  <int value="9" label="SQLITE_IOERR_RDLOCK">
+    Error getting read lock - should not be possible
+  </int>
+  <int value="10" label="SQLITE_IOERR_DELETE">Error deleting file</int>
+  <int value="11" label="SQLITE_IOERR_BLOCKED">
+    Deadlock due to other process access to SQLite files
+  </int>
+  <int value="12" label="SQLITE_IOERR_NOMEM">Error mapping shared memory</int>
+  <int value="13" label="SQLITE_IOERR_ACCESS">
+    Error getting file attributes (other than not found)
+  </int>
+  <int value="14" label="SQLITE_IOERR_CHECKRESERVEDLOCK">
+    Error while querying lock status
+  </int>
+  <int value="15" label="SQLITE_IOERR_LOCK">Error acquiring lock</int>
+  <int value="16" label="SQLITE_IOERR_CLOSE">Error closing file</int>
+  <int value="17" label="SQLITE_IOERR_DIR_CLOSE">Unused</int>
+  <int value="18" label="SQLITE_IOERR_SHMOPEN">Error mmapping file</int>
+  <int value="19" label="SQLITE_IOERR_SHMSIZE">
+    Error in stat while mmapping file
+  </int>
+  <int value="20" label="SQLITE_IOERR_SHMLOCK">Unused</int>
+</enum>
+
+<enum name="SqliteRecoveryEventEnum" type="int">
+  <summary>
+    Track successful completion or failure of sql::Recovery implementation.
+  </summary>
+  <int value="0" label="RECOVERY_SUCCESS_BEGIN">
+    sql::Recovery::Init() (helper for Begin()) completely successfully.
+  </int>
+  <int value="1" label="RECOVERY_FAILED_OPEN_TEMPORARY">
+    Failed to open temporary database to recover into.
+  </int>
+  <int value="2" label="RECOVERY_FAILED_VIRTUAL_TABLE_INIT">
+    Failed to initialize recover vtable subsystem for connection.
+  </int>
+  <int value="3" label="RECOVERY_FAILED_VIRTUAL_TABLE_SYSTEM_SQLITE">
+    USE_SYSTEM_SQLITE in force, recovery virtual table not available.
+  </int>
+  <int value="4" label="RECOVERY_FAILED_WRITABLE_SCHEMA">
+    Failed to enable writable_schema.
+  </int>
+  <int value="5" label="RECOVERY_FAILED_ATTACH">
+    Failed to attach corrupt database to recovery database.
+  </int>
+  <int value="6" label="RECOVERY_SUCCESS_BACKUP">
+    sql::Recovery::Backup() (helper for Recovered()) completely successfully.
+  </int>
+  <int value="7" label="RECOVERY_FAILED_BACKUP_INIT">
+    Failed sqlite3_backup_init().  Error code in Sqlite.RecoveryHandle.
+  </int>
+  <int value="8" label="RECOVERY_FAILED_BACKUP_STEP">
+    Failed sqlite3_backup_step().  Error code in Sqlite.RecoveryStep.
+  </int>
+  <int value="9" label="RECOVERY_SUCCESS_AUTORECOVER">
+    sql::Recovery::AutoRecoverTable() completed successfully.
+  </int>
+  <int value="10" label="RECOVERY_FAILED_AUTORECOVER_UNRECOGNIZED_TYPE">
+    Failed sqlite3_backup_step().  Error code in Sqlite.RecoveryStep.
+  </int>
+  <int value="11" label="RECOVERY_FAILED_AUTORECOVER_MISSING_TABLE">
+    AutoRecoverTable() could not find the target table.
+  </int>
+  <int value="12" label="RECOVERY_FAILED_AUTORECOVER_CREATE">
+    AutoRecoverTable() failed creating recovery vtable.
+  </int>
+  <int value="13" label="RECOVERY_FAILED_AUTORECOVER_INSERT">
+    AutoRecoverTable() failed copying data from recovery to target table.
+  </int>
+  <int value="14" label="RECOVERY_FAILED_AUTORECOVER_DROP">
+    AutoRecoverTable() failed to drop recovery table.
+  </int>
+  <int value="15" label="RECOVERY_SUCCESS_SETUP_META">
+    sql::Recovery::SetupMeta() completed successfully.
+  </int>
+  <int value="16" label="RECOVERY_FAILED_META_CREATE">
+    SetupMeta() failed to create meta recovery table.
+  </int>
+  <int value="17" label="RECOVERY_SUCCESS_META_VERSION">
+    GetMetaVersionNumber() found no version row in meta table.
+  </int>
+  <int value="18" label="RECOVERY_FAILED_META_QUERY">
+    GetMetaVersionNumber() failed querying recovery meta table.
+  </int>
+  <int value="19" label="RECOVERY_FAILED_META_NO_VERSION">
+    GetMetaVersionNumber() found no version row in meta table.
+  </int>
+  <int value="20" label="RECOVERY_SUCCESS_AUTORECOVERDB">
+    sql::Recovery::RecoverDatabaseOrRaze() completed successfully.
+  </int>
+  <int value="21" label="RECOVERY_FAILED_AUTORECOVERDB_BEGIN">
+    Autorecover could not setup the database for recovery attempt.
+  </int>
+  <int value="22" label="RECOVERY_FAILED_AUTORECOVERDB_SCHEMASELECT">
+    Autorecover could not read corrupt db schema.
+  </int>
+  <int value="23" label="RECOVERY_FAILED_AUTORECOVERDB_SCHEMACREATE">
+    Autorecover could not create new db schema.
+  </int>
+  <int value="24" label="RECOVERY_FAILED_AUTORECOVERDB_NAMESELECT">
+    Autorecover could not read table names from corrupt db.
+  </int>
+  <int value="25" label="RECOVERY_FAILED_AUTORECOVERDB_TABLE">
+    Autorecover failed when recovering a table.
+  </int>
+  <int value="26" label="RECOVERY_FAILED_AUTORECOVERDB_SEQUENCE">
+    Autorecover failed when recovering sequence table.
+  </int>
+  <int value="27" label="RECOVERY_FAILED_AUTORECOVERDB_AUX">
+    Autorecover failed when recovering triggers, views, or virtual tables.
+  </int>
+</enum>
+
+<enum name="SqliteStatsEnum" type="int">
+  <summary/>
+  <int value="0" label="EVENT_STATEMENT_RUN">
+    Count statements initiated by Step(), Run(), or Execute*().
+  </int>
+  <int value="1" label="EVENT_STATEMENT_ROWS">
+    Count steps which returned SQLITE_ROW.
+  </int>
+  <int value="2" label="EVENT_STATEMENT_SUCCESS">
+    Count statements which ran to completion with no errors.
+  </int>
+  <int value="3" label="EVENT_EXECUTE">Count calls to Execute*().</int>
+  <int value="4" label="EVENT_CHANGES_AUTOCOMMIT">
+    Count rows changed without an explicit transaction.
+  </int>
+  <int value="5" label="EVENT_CHANGES">
+    Count rows changed in an explicit transaction.
+  </int>
+  <int value="6" label="EVENT_BEGIN">Explicit transactions begun.</int>
+  <int value="7" label="EVENT_COMMIT">Explicit transactions committed.</int>
+  <int value="8" label="EVENT_ROLLBACK">Explicit transactions rolled back.</int>
+  <int value="9" label="EVENT_MMAP_META_MISSING">
+    No meta table in mmap probe.
+  </int>
+  <int value="10" label="EVENT_MMAP_META_FAILURE_READ">
+    Failed to read meta table in mmap probe.
+  </int>
+  <int value="11" label="EVENT_MMAP_META_FAILURE_UPDATE">
+    Failed to update meta table in mmap probe.
+  </int>
+  <int value="12" label="EVENT_MMAP_VFS_FAILURE">
+    Failed to access SQLite vfs in mmap probe.
+  </int>
+  <int value="13" label="EVENT_MMAP_FAILED">
+    Found cached failure status in mmap probe.
+  </int>
+  <int value="14" label="EVENT_MMAP_FAILED_NEW">
+    Error while reading database in mmap probe.
+  </int>
+  <int value="15" label="EVENT_MMAP_SUCCESS_NEW">
+    Successfully read to end of database in mmap probe.
+  </int>
+  <int value="16" label="EVENT_MMAP_SUCCESS_PARTIAL">
+    Successfully read some of database in mmap probe.
+  </int>
+  <int value="17" label="EVENT_MMAP_SUCCESS_NO_PROGRESS">
+    Exhausted read quota in mmap probe.
+  </int>
+  <int value="18" label="EVENT_MMAP_STATUS_FAILURE_READ">
+    Failed to read status view in mmap probe.
+  </int>
+  <int value="19" label="EVENT_MMAP_STATUS_FAILURE_UPDATE">
+    Failed to update status view in mmap probe.
+  </int>
+</enum>
+
+<enum name="SqliteVersionDeprecation" type="int">
+  <summary>Sqlite database version deprecation status</summary>
+  <int value="0" label="DEPRECATION_DATABASE_NOT_EMPTY">
+    Database has tables, but no meta table.
+  </int>
+  <int value="1" label="DEPRECATION_DATABASE_UNKNOWN">
+    Failure figuring out if database has tables.
+  </int>
+  <int value="2" label="DEPRECATION_FAILED_VERSION">
+    Failed querying meta table.
+  </int>
+  <int value="3" label="DEPRECATION_NO_VERSION">
+    No version row in meta table.
+  </int>
+  <int value="4" label="DEPRECATION_RAZED">Raze succeeded.</int>
+  <int value="5" label="DEPRECATION_RAZE_FAILED">Raze failed.</int>
+</enum>
+
+<enum name="SRIResourceIntegrityMismatchEvent" type="int">
+  <int value="0" label="CHECKING_FOR_INTEGRITY_MISMATCH"/>
+  <int value="1" label="REFETCH_DUE_TO_INTEGRITY_MISMATCH"/>
+</enum>
+
+<enum name="SRTCompleted" type="int">
+  <int value="0" label="Not Completed"/>
+  <int value="1" label="Completed"/>
+  <int value="2" label="Completed Later"/>
+</enum>
+
+<enum name="SRTPromptUsage" type="int">
+  <int value="0" label="Shown"/>
+  <int value="1" label="Accepted"/>
+  <int value="2" label="Denied"/>
+  <int value="3" label="Fell back to download page."/>
+  <int value="4" label="SRT download unavailable, no prompt shown."/>
+  <int value="5" label="Closed"/>
+  <int value="6" label="Shown from menu."/>
+</enum>
+
+<enum name="SSLAuthRootConsistency" type="int">
+  <summary>
+    The results of comparing the built-in list of known Windows roots against
+    programatically detecting the built-in status.
+  </summary>
+  <int value="0" label="Not AuthRoot, not built-in">
+    Not detected as from AuthRoot, nor built-in
+    (BUILT_IN_PROPERTY_NOT_FOUND_BUILTIN_NOT_SET)
+  </int>
+  <int value="1" label="Not AuthRoot, but built-in">
+    Not detected as from AuthRoot, but built-in
+    (BUILT_IN_PROPERTY_NOT_FOUND_BUILTIN_SET)
+  </int>
+  <int value="2" label="AuthRoot, not built-in">
+    Detected as from AuthRoot, but not built-in
+    (BUILT_IN_PROPERTY_FOUND_BUILTIN_NOT_SET)
+  </int>
+  <int value="3" label="AuthRoot, built-in">
+    Detected as from AuthRoot and also built-in
+    (BUILT_IN_PROPERTY_FOUND_BUILTIN_SET)
+  </int>
+</enum>
+
+<enum name="SSLCaptivePortal" type="int">
+  <int value="0" label="All captive portal events (CAPTIVE_PORTAL_ALL)"/>
+  <int value="1"
+      label="Chrome captive portal detection enabled
+             (CAPTIVE_PORTAL_DETECTION_ENABLED)"/>
+  <int value="2"
+      label="Chrome captive portal detection enabled on an overridable SSL
+             error page (CAPTIVE_PORTAL_DETECTION_ENABLED_OVERRIDABLE)">
+    This is a subset of CAPTIVE_PORTAL_DETECTION_ENABLED (bucket 1), the only
+    difference is that it is for overridable errors.
+  </int>
+  <int value="3"
+      label="Received a captive portal probe result.
+             (CAPTIVE_PORTAL_PROBE_COMPLETED)">
+    Was the captive portal probe completed before the interstitial was closed?
+    Captive Portal won't be detected unless ::Observe is triggered which might
+    be a few seconds later.
+  </int>
+  <int value="4"
+      label="Received a captive portal result on an overridable SSL error page
+             (CAPTIVE_PORTAL_PROBE_COMPLETED_OVERRIDABLE)">
+    This is a subset of CAPTIVE_PORTAL_PROBE_COMPLETED (bucket 3), the only
+    difference is that it is for overridable errors.
+  </int>
+  <int value="5"
+      label="Received no response or Non-HTTP login page
+             (CAPTIVE_PORTAL_NO_RESPONSE)"/>
+  <int value="6"
+      label="Received no response or Non-HTTP login page on an overridable
+             SSL error page (CAPTIVE_PORTAL_NO_RESPONSE_OVERRIDABLE)"/>
+  <int value="7" label="Detected captive portal (CAPTIVE_PORTAL_DETECTED)"/>
+  <int value="8"
+      label="Detected captive portal on an overridable SSL error page
+             (CAPTIVE_PORTAL_DETECTED_OVERRIDABLE)">
+    This is a subset of CAPTIVE_PORTAL_DETECTED (bucket 7), the only difference
+    is that it is for overridable errors.
+  </int>
+</enum>
+
+<enum name="SSLCipherSuite" type="int">
+  <summary>SSL/TLS cipher suites from the IANA registry</summary>
+  <int value="10" label="TLS_RSA_WITH_3DES_EDE_CBC_SHA"/>
+  <int value="22" label="TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"/>
+  <int value="47" label="TLS_RSA_WITH_AES_128_CBC_SHA"/>
+  <int value="51" label="TLS_DHE_RSA_WITH_AES_128_CBC_SHA"/>
+  <int value="53" label="TLS_RSA_WITH_AES_256_CBC_SHA"/>
+  <int value="57" label="TLS_DHE_RSA_WITH_AES_256_CBC_SHA"/>
+  <int value="60" label="TLS_RSA_WITH_AES_128_CBC_SHA256"/>
+  <int value="61" label="TLS_RSA_WITH_AES_256_CBC_SHA256"/>
+  <int value="103" label="TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"/>
+  <int value="107" label="TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"/>
+  <int value="156" label="TLS_RSA_WITH_AES_128_GCM_SHA256"/>
+  <int value="157" label="TLS_RSA_WITH_AES_256_GCM_SHA384"/>
+  <int value="158" label="TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"/>
+  <int value="159" label="TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"/>
+  <int value="4865" label="TLS_AES_128_GCM_SHA256"/>
+  <int value="4866" label="TLS_AES_256_GCM_SHA384"/>
+  <int value="4867" label="TLS_CHACHA20_POLY1305_SHA256"/>
+  <int value="5815"
+      label="TLS_CECPQ1_RSA_WITH_CHACHA20_POLY1305_SHA256 (experimental)"/>
+  <int value="5816"
+      label="TLS_CECPQ1_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (experimental)"/>
+  <int value="5817"
+      label="TLS_CECPQ1_RSA_WITH_AES_256_GCM_SHA384 (experimental)"/>
+  <int value="5818"
+      label="TLS_CECPQ1_ECDSA_WITH_AES_256_GCM_SHA384 (experimental)"/>
+  <int value="49159" label="TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"/>
+  <int value="49160" label="TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"/>
+  <int value="49161" label="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"/>
+  <int value="49162" label="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"/>
+  <int value="49169" label="TLS_ECDHE_RSA_WITH_RC4_128_SHA"/>
+  <int value="49170" label="TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"/>
+  <int value="49171" label="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"/>
+  <int value="49172" label="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"/>
+  <int value="49187" label="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"/>
+  <int value="49188" label="TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"/>
+  <int value="49191" label="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"/>
+  <int value="49192" label="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"/>
+  <int value="49195" label="TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"/>
+  <int value="49196" label="TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"/>
+  <int value="49199" label="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"/>
+  <int value="49200" label="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"/>
+  <int value="52243"
+      label="TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 (non-standard)"/>
+  <int value="52244"
+      label="TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 (non-standard)"/>
+  <int value="52245" label="TLS_DHE_RSA_WITH_CHACHA20_POLY1305 (non-standard)"/>
+  <int value="52392" label="TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"/>
+  <int value="52393" label="TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"/>
+</enum>
+
+<enum name="SSLErrorCauses" type="int">
+  <int value="0" label="CLOCK_PAST: System clock set early">
+    This cause is recorded if the SSL error is CERT_DATE_INVALID and Chrome had
+    reason to believe that the system clock was behind.  Methods of detecting
+    clock inaccuracy have changed over time.
+  </int>
+  <int value="1" label="CLOCK_FUTURE: System clock set late">
+    This cause is recorded if the SSL error is CERT_DATE_INVALID and Chrome had
+    reason to believe that the system clock was behind.  Methods of detecting
+    clock inaccuracy have changed over time.
+  </int>
+  <int value="2"
+      label="WWW_SUBDOMAIN_MATCH: Difference between the URL and the DNS is
+             www">
+    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
+    hostname differs from one of the DNS names in the certificate (CN or SANs)
+    only by the presence or absence of the single-label prefix &quot;www&quot;.
+    This case is not recored if the host name is not a known TLD.
+  </int>
+  <int value="3" label="SUBDOMAIN_MATCH: The URL is a subdomain of the DNS">
+    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
+    difference between the URL and the DNS name is not &quot;www&quot;. This
+    case is not recorded if the host name is not a known TLD.
+  </int>
+  <int value="4"
+      label="SUBDOMAIN_INVERSE_MATCH: The DNS is a subdomain of the URL">
+    This cause is recorded if the ssl error is CERT_COMMON_NAME_INVALID and the
+    difference between the DNS name and the URL is not &quot;www&quot;. This
+    case is not recorded if the host name is not a known TLD.
+  </int>
+  <int value="5"
+      label="SUBDOMAIN_OUTSIDE_WILDCARD: The URL is outside the scope of the
+             wildcard certificate">
+    This cause is recorded only if the ssl error is CERT_COMMON_NAME_INVALID, we
+    have received a wildcard certificate and the scope of a wildcard certificate
+    is too narrow for the hostname. This case is not recorded if the host name
+    is not a known TLD.
+  </int>
+  <int value="6"
+      label="HOST_NAME_NOT_KNOWN_TLD: The host name is not a known TLD">
+    This cause is recorded only for CERT_COMMON_NAME_INVALID errors.
+  </int>
+  <int value="7"
+      label="LIKELY_MULTI_TENANT_HOSTING: The certificate is a shared
+             certificate">
+    This cause is recorded only for CERT_COMMON_NAME_INVALID errors. It is
+    possible that this error overlaps with others but it is not likely because
+    of the heuristics which decide as to what constitutes a shared certificate.
+    In cases of overlap, we emit to only one bucket.
+  </int>
+  <int value="8" label="LOCALHOST: The user is trying to connect to local host">
+    This cause is recorded only for CERT_AUTHORITY_INVALID errors.
+  </int>
+  <int value="9" label="PRIVATE_URL: The user is trying to connect to a VPN">
+    This cause is recorded only for CERT_AUTHORITY_INVALID errors. The user did
+    not receive a certificate signed by a valid CA.
+  </int>
+  <int value="10"
+      label="AUTHORTIY_ERROR_CAPTIVE_PORTAL: Captive portal was detected">
+    This cause is recorded only for CERT_AUTHORITY_INVALID errors. (Deprecated
+    in M47.)
+  </int>
+  <int value="11" label="SELF_SIGNED: The cert is self-signed">
+    This cause is recorded only for CERT_AUTHORITY_INVALID errors.
+  </int>
+  <int value="12" label="EXPIRED_RECENTLY: Cert expired within last 28 days.">
+
+  </int>
+  <int value="13"
+      label="LIKELY_SAME_DOMAIN: Cert likely belongs to the same domain">
+    This case is recorded if the SSL error is CERT_COMMON_NAME_INVALID error and
+    the hostname in request URL has the same domain (effective TLD + 1 label) as
+    the common name or at least one of the subject alternative names in
+    certificate. This case is not recorded if the host name is not a known tld.
+  </int>
+</enum>
+
+<enum name="SSLErrorHandlerEvent" type="int">
+  <int value="0" label="HANDLE_ALL"/>
+  <int value="1" label="SHOW_CAPTIVE_PORTAL_INTERSTITIAL_NONOVERRIDABLE"/>
+  <int value="2" label="SHOW_CAPTIVE_PORTAL_INTERSTITIAL_OVERRIDABLE"/>
+  <int value="3" label="SHOW_SSL_INTERSTITIAL_NONOVERRIDABLE"/>
+  <int value="4" label="SHOW_SSL_INTERSTITIAL_OVERRIDABLE"/>
+  <int value="5" label="WWW_MISMATCH_FOUND"/>
+  <int value="6" label="WWW_MISMATCH_URL_AVAILABLE"/>
+  <int value="7" label="WWW_MISMATCH_URL_NOT_AVAILABLE"/>
+  <int value="8" label="SHOW_BAD_CLOCK"/>
+</enum>
+
+<enum name="SSLErrorTypes" type="int">
+  <int value="0" label="CERT_COMMON_NAME_INVALID"/>
+  <int value="1" label="CERT_DATE_INVALID"/>
+  <int value="2" label="CERT_AUTHORITY_INVALID"/>
+  <int value="3" label="CERT_CONTAINS_ERRORS"/>
+  <int value="4" label="CERT_NO_REVOCATION_MECHANISM"/>
+  <int value="5" label="CERT_UNABLE_TO_CHECK_REVOCATION"/>
+  <int value="6" label="CERT_REVOKED"/>
+  <int value="7" label="CERT_INVALID"/>
+  <int value="8" label="CERT_WEAK_SIGNATURE_ALGORITHM"/>
+  <int value="9" label="CERT_WEAK_KEY"/>
+  <int value="10" label="CERT_NAME_CONSTRAINT_VIOLATION"/>
+  <int value="11" label="UNKNOWN"/>
+  <int value="12" label="CERT_WEAK_KEY_DH"/>
+  <int value="13" label="CERT_PINNED_KEY_MISSING"/>
+  <int value="14" label="CERT_VALIDITY_TOO_LONG"/>
+</enum>
+
+<enum name="SSLFailureState" type="int">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <int value="0" label="No failure"/>
+  <int value="1" label="Unknown failure"/>
+  <int value="2" label="Failed to process ClientHello"/>
+  <int value="3" label="Buggy AES-GCM"/>
+  <int value="4" label="Failed with client authentication"/>
+  <int value="5" label="Session version mismatch"/>
+  <int value="6" label="Failed with Next Proto Negotiation"/>
+</enum>
+
+<enum name="SSLGoodCertSeenEvent" type="int">
+  <int value="0" label="NO_PREVIOUS_EXCEPTION"/>
+  <int value="1" label="HAD_PREVIOUS_EXCEPTION"/>
+</enum>
+
+<enum name="SSLHashAlgorithm" type="int">
+  <obsolete>
+    Removed June 2016.
+  </obsolete>
+  <int value="0" label="None (unused)"/>
+  <int value="1" label="MD5"/>
+  <int value="2" label="SHA-1"/>
+  <int value="3" label="SHA-224"/>
+  <int value="4" label="SHA-256"/>
+  <int value="5" label="SHA-384"/>
+  <int value="6" label="SHA-512"/>
+</enum>
+
+<enum name="SSLIsExpiredAndDecision" type="int">
+  <int value="0" label="EXPIRED_AND_PROCEED"/>
+  <int value="1" label="EXPIRED_AND_DO_NOT_PROCEED"/>
+  <int value="2" label="NOT_EXPIRED_AND_PROCEED"/>
+  <int value="3" label="NOT_EXPIRED_AND_DO_NOT_PROCEED"/>
+</enum>
+
+<enum name="SSLNegotiatedAlpnProtocol" type="int">
+  <int value="0" label="ALPN not used"/>
+  <int value="1" label="HTTP/1.1 negotiated via ALPN"/>
+  <int value="2" label="HTTP/2 negotiated via ALPN"/>
+</enum>
+
+<enum name="SSLOrQUICVersion" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="SSL 2.0"/>
+  <int value="2" label="SSL 3.0"/>
+  <int value="3" label="TLS 1.0"/>
+  <int value="4" label="TLS 1.1"/>
+  <int value="5" label="TLS 1.2"/>
+  <int value="6" label="TLS 1.3"/>
+  <int value="7" label="QUIC"/>
+</enum>
+
+<enum name="SSLProtocolNegotiation" type="int">
+  <int value="1" label="ALPN, HTTP/1.1"/>
+  <int value="100" label="ALPN, SPDY 2.0"/>
+  <int value="101" label="ALPN, SPDY 3.0"/>
+  <int value="102" label="ALPN, SPDY 3.1"/>
+  <int value="103" label="ALPN, HTTP/2 draft-14"/>
+  <int value="104" label="ALPN, HTTP/2 draft-15"/>
+  <int value="107" label="ALPN, HTTP/2"/>
+  <int value="200" label="ALPN, QUIC/1 + SPDY/3"/>
+  <int value="501" label="NPN, HTTP/1.1"/>
+  <int value="600" label="NPN, SPDY 2.0"/>
+  <int value="601" label="NPN, SPDY 3.0"/>
+  <int value="602" label="NPN, SPDY 3.1"/>
+  <int value="603" label="NPN, HTTP/2 draft-14"/>
+  <int value="604" label="NPN, HTTP/2 draft-15"/>
+  <int value="607" label="NPN, HTTP/2"/>
+  <int value="700" label="NPN, QUIC/1 + SPDY/3"/>
+  <int value="1001" label="NPN, fallback to HTTP/1.1"/>
+  <int value="1100" label="NPN, fallback to SPDY 2.0"/>
+  <int value="1101" label="NPN, fallback to SPDY 3.0"/>
+  <int value="1102" label="NPN, fallback to SPDY 3.1"/>
+  <int value="1103" label="NPN, fallback to HTTP/2 draft-14"/>
+  <int value="1104" label="NPN, fallback to HTTP/2 draft-15"/>
+  <int value="1107" label="NPN, fallback to HTTP/2"/>
+  <int value="1200" label="NPN, fallback to QUIC/1 + SPDY/3"/>
+</enum>
+
+<enum name="SSLResponseTypesV2" type="int">
+  <int value="0" label="SHOW_ALL"/>
+  <int value="1" label="SHOW_OVERRIDABLE"/>
+  <int value="2" label="PROCEED_OVERRIDABLE"/>
+  <int value="3" label="PROCEED_NAME"/>
+  <int value="4" label="PROCEED_DATE"/>
+  <int value="5" label="PROCEED_AUTHORITY"/>
+  <int value="6" label="DONT_PROCEED_OVERRIDABLE"/>
+  <int value="7" label="DONT_PROCEED_NAME"/>
+  <int value="8" label="DONT_PROCEED_DATE"/>
+  <int value="9" label="DONT_PROCEED_AUTHORITY"/>
+  <int value="10" label="MORE"/>
+  <int value="11" label="SHOW_UNDERSTAND"/>
+  <int value="12" label="SHOW_INTERNAL_HOSTNAME">
+    As of M40, this now also includes dotless domains.
+  </int>
+  <int value="13" label="PROCEED_INTERNAL_HOSTNAME">
+    As of M40, this now also includes dotless domains.
+  </int>
+  <int value="14" label="SHOW_NEW_SITE"/>
+  <int value="15" label="PROCEED_NEW_SITE"/>
+  <int value="16"
+      label="User manually typed proceed (PROCEED_MANUAL_NONOVERRIDABLE)"/>
+  <int value="17"
+      label="Chrome captive portal detection enabled
+             (DEPRECATED_CAPTIVE_PORTAL_DETECTION_ENABLED)"/>
+  <int value="18"
+      label="Chrome captive portal detection enabled on an overridable SSL
+             error page
+             (DEPRECATED_CAPTIVE_PORTAL_DETECTION_ENABLED_OVERRIDABLE)"/>
+  <int value="19"
+      label="Received a captive portal result
+             (DEPRECATED_CAPTIVE_PORTAL_PROBE_COMPLETED)"/>
+  <int value="20"
+      label="Received a captive portal result on an overridable SSL error
+             page (DEPRECATED_CAPTIVE_PORTAL_PROBE_COMPLETED_OVERRIDABLE)"/>
+  <int value="21"
+      label="Received no response or Non-HTTP login page
+             (DEPRECATED_CAPTIVE_PORTAL_NO_RESPONSE)"/>
+  <int value="22"
+      label="Received no response or Non-HTTP login page on an overridable
+             SSL error page
+             (DEPRECATED_CAPTIVE_PORTAL_NO_RESPONSE_OVERRIDABLE)"/>
+  <int value="23"
+      label="Detected captive portal (DEPRECATED_CAPTIVE_PORTAL_DETECTED)"/>
+  <int value="24"
+      label="Detected captive portal on an overridable SSL error page
+             (DEPRECATED_CAPTIVE_PORTAL_DETECTED_OVERRIDABLE)"/>
+  <int value="25"
+      label="Displayed clock interstitial. (DISPLAYED_CLOCK_INTERSTITIAL)"/>
+</enum>
+
+<enum name="SSLSignatureAlgorithm" type="int">
+  <int value="513" label="rsa_pkcs1_sha1"/>
+  <int value="515" label="ecdsa_sha1"/>
+  <int value="1025" label="rsa_pkcs1_sha256"/>
+  <int value="1027" label="ecdsa_secp256r1_sha256"/>
+  <int value="1281" label="rsa_pkcs1_sha384"/>
+  <int value="1283" label="ecdsa_secp384r1_sha384"/>
+  <int value="1537" label="rsa_pkcs1_sha512"/>
+  <int value="1539" label="ecdsa_secp521r1_sha512"/>
+  <int value="1792" label="rsa_pss_sha256 (old)"/>
+  <int value="1793" label="rsa_pss_sha384 (old)"/>
+  <int value="1794" label="rsa_pss_sha512 (old)"/>
+  <int value="2052" label="rsa_pss_sha256"/>
+  <int value="2053" label="rsa_pss_sha384"/>
+  <int value="2054" label="rsa_pss_sha512"/>
+</enum>
+
+<enum name="StarsLaunchLocation" type="int">
+  <int value="0" label="All Items"/>
+  <int value="1" label="Uncategorized"/>
+  <int value="2" label="Folder"/>
+  <int value="3" label="Filter"/>
+  <int value="4" label="Search"/>
+  <int value="5" label="Bookmark Editor"/>
+  <int value="6" label="Omnibox"/>
+</enum>
+
+<enum name="StartupProfilingFinishReason" type="int">
+  <int value="0" label="Done (all metrics gathered)"/>
+  <int value="1"
+      label="Abandoned because blocking UI was displayed on startup"/>
+  <int value="2" label="Abandoned because profiled content was hidden"/>
+  <int value="3" label="Abandoned because profiled content was destroyed"/>
+  <int value="4"
+      label="Abandoned because profiled content was navigated away from"/>
+  <int value="5"
+      label="Abandoned because profiled content failed to load its main
+             resource"/>
+</enum>
+
+<enum name="StartupTemperature" type="int">
+  <int value="0" label="Cold startup (mostly hard faults)"/>
+  <int value="1" label="Warm startup (nearly no hard faults)"/>
+  <int value="2" label="Lukewarm startup (in between cold and warm)"/>
+</enum>
+
+<enum name="StartupURLsMigration" type="int">
+  <int value="0" label="Performed migration"/>
+  <int value="1" label="No migration value"/>
+  <int value="2" label="Reset migration"/>
+</enum>
+
+<enum name="State" type="int">
+  <int value="0" label="Canceled"/>
+  <int value="1" label="Dropped"/>
+  <int value="2" label="Created"/>
+  <int value="3" label="Unknown"/>
+  <int value="4" label="Initializing"/>
+  <int value="5" label="Connecting"/>
+  <int value="6" label="Authenticated"/>
+  <int value="7" label="Connected"/>
+  <int value="8" label="Closed"/>
+  <int value="9" label="Failed"/>
+</enum>
+
+<enum name="StateStoreInitResult" type="int">
+  <int value="0"
+      label="Kept pref: platform-specific store non-existent or not
+             supported."/>
+  <int value="1" label="Erased pref: platform-specific store was empty"/>
+  <int value="2" label="Overwrote pref: platform-specific store differed"/>
+  <int value="3" label="No pref change: was equal to platform-specific store"/>
+</enum>
+
+<enum name="StayVsLeave" type="int">
+  <int value="0" label="Stay on the current page"/>
+  <int value="1" label="Leave the current page"/>
+</enum>
+
+<enum name="StyleSheetCacheStatus" type="int">
+  <int value="0" label="No usable cache found"/>
+  <int value="1" label="DiskCache served the CSS source"/>
+  <int value="2" label="MemoryCached StyleSheetContents was reused"/>
+</enum>
+
+<enum name="SubresourceFilterActivationState" type="int">
+  <int value="0" label="Disabled"/>
+  <int value="1" label="DryRun"/>
+  <int value="2" label="Enabled"/>
+</enum>
+
+<enum name="SubresourceFilterWriteRulesetResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="FailedCreatingScratchDir"/>
+  <int value="2" label="FailedWritingRulesetData"/>
+  <int value="3" label="FailedWritingLicense"/>
+  <int value="4" label="FailedReplaceFile"/>
+  <int value="5" label="FailedDeletePreexisting"/>
+  <int value="6" label="FailedOpeningUnindexedRuleset"/>
+  <int value="7" label="FailedParsingUnindexedRuleset"/>
+  <int value="8" label="FailedCreatingVersionDir"/>
+  <int value="9" label="FailedCreatingSentinelFile"/>
+  <int value="10" label="FailedDeletingSentinelFile"/>
+  <int value="11" label="AbortedBecauseSentinelFileWasPresent"/>
+</enum>
+
+<enum name="SuggestAppsDialogCloseReason" type="int">
+  <int value="0" label="Unknown error"/>
+  <int value="1" label="Item installed"/>
+  <int value="2" label="User cancelled"/>
+  <int value="3" label="Webstore link clicked"/>
+</enum>
+
+<enum name="SuggestAppsDialogInstall" type="int">
+  <int value="0" label="Install succeeded"/>
+  <int value="1" label="Install cancelled"/>
+  <int value="2" label="Install failed"/>
+</enum>
+
+<enum name="SuggestAppsDialogLoad" type="int">
+  <int value="0" label="Load succeeded"/>
+  <int value="1" label="Load cancelled"/>
+  <int value="2" label="Load failed"/>
+</enum>
+
+<enum name="SuggestionsResponseState" type="int">
+  <int value="0" label="Empty response received from the server."/>
+  <int value="1" label="Invalid response received from the server."/>
+  <int value="2" label="Valid response received from the server."/>
+</enum>
+
+<enum name="SupervisedUserSafetyFilterResult" type="int">
+  <int value="100" label="LINK_ALLOWED">Link; Allowed as safe</int>
+  <int value="101" label="TYPED_ALLOWED">Typed URL; Allowed as safe</int>
+  <int value="102" label="AUTO_BOOKMARK_ALLOWED">Bookmark; Allowed as safe</int>
+  <int value="103" label="AUTO_SUBFRAME_ALLOWED">
+    Subframe navigation; Allowed as safe
+  </int>
+  <int value="104" label="MANUAL_SUBFRAME_ALLOWED">
+    Manual subframe navigation; Allowed as safe
+  </int>
+  <int value="105" label="GENERATED_ALLOWED">
+    Generated from Omnibox; Allowed as safe
+  </int>
+  <int value="106" label="AUTO_TOPLEVEL_ALLOWED">
+    Automatic toplevel navigation; Allowed as safe
+  </int>
+  <int value="107" label="FORM_SUBMIT_ALLOWED">
+    Form submission; Allowed as safe
+  </int>
+  <int value="108" label="RELOAD_ALLOWED">Reload; Allowed as safe</int>
+  <int value="109" label="KEYWORD_ALLOWED">
+    Omnibox keyword; Allowed as safe
+  </int>
+  <int value="110" label="KEYWORD_GENERATED_ALLOWED">
+    URL generated from Omnibox keyword; Allowed as safe
+  </int>
+  <int value="199" label="OTHER_ALLOWED">Other navigation; Allowed as safe</int>
+  <int value="200" label="LINK_ALLOWED_UNKNOWN">
+    Link; Allowed by default (safety state unknown)
+  </int>
+  <int value="201" label="TYPED_ALLOWED_UNKNOWN">
+    Typed URL; Allowed by default (safety state unknown)
+  </int>
+  <int value="202" label="AUTO_BOOKMARK_ALLOWED_UNKNOWN">
+    Bookmark; Allowed by default (safety state unknown)
+  </int>
+  <int value="203" label="AUTO_SUBFRAME_ALLOWED_UNKNOWN">
+    Subframe navigation; Allowed by default (safety state unknown)
+  </int>
+  <int value="204" label="MANUAL_SUBFRAME_ALLOWED_UNKNOWN">
+    Manual subframe navigation; Allowed by default (safety state unknown)
+  </int>
+  <int value="205" label="GENERATED_ALLOWED_UNKNOWN">
+    Generated from Omnibox; Allowed by default (safety state unknown)
+  </int>
+  <int value="206" label="AUTO_TOPLEVEL_ALLOWED_UNKNOWN">
+    Automatic toplevel navigation; Allowed by default (safety state unknown)
+  </int>
+  <int value="207" label="FORM_SUBMIT_ALLOWED_UNKNOWN">
+    Form submission; Allowed by default (safety state unknown)
+  </int>
+  <int value="208" label="RELOAD_ALLOWED_UNKNOWN">
+    Reload; Allowed by default (safety state unknown)
+  </int>
+  <int value="209" label="KEYWORD_ALLOWED_UNKNOWN">
+    Omnibox keyword; Allowed by default (safety state unknown)
+  </int>
+  <int value="210" label="KEYWORD_GENERATED_ALLOWED_UNKNOWN">
+    URL generated from Omnibox keyword; Allowed by default (safety state
+    unknown)
+  </int>
+  <int value="299" label="OTHER_ALLOWED_UNKNOWN">
+    Other navigation; Allowed by default (safety state unknown)
+  </int>
+  <int value="300" label="LINK_BLOCKED_BLACKLIST">
+    Link; Blocked by static blacklist
+  </int>
+  <int value="301" label="TYPED_BLOCKED_BLACKLIST">
+    Typed URL; Blocked by static blacklist
+  </int>
+  <int value="302" label="AUTO_BOOKMARK_BLOCKED_BLACKLIST">
+    Bookmark; Blocked by static blacklist
+  </int>
+  <int value="303" label="AUTO_SUBFRAME_BLOCKED_BLACKLIST">
+    Subframe navigation; Blocked by static blacklist
+  </int>
+  <int value="304" label="MANUAL_SUBFRAME_BLOCKED_BLACKLIST">
+    Manual subframe navigation; Blocked by static blacklist
+  </int>
+  <int value="305" label="GENERATED_BLOCKED_BLACKLIST">
+    Generated from Omnibox; Blocked by static blacklist
+  </int>
+  <int value="306" label="AUTO_TOPLEVEL_BLOCKED_BLACKLIST">
+    Automatic toplevel navigation; Blocked by static blacklist
+  </int>
+  <int value="307" label="FORM_SUBMIT_BLOCKED_BLACKLIST">
+    Form submission; Blocked by static blacklist
+  </int>
+  <int value="308" label="RELOAD_BLOCKED_BLACKLIST">
+    Reload; Blocked by static blacklist
+  </int>
+  <int value="309" label="KEYWORD_BLOCKED_BLACKLIST">
+    Omnibox keyword; Blocked by static blacklist
+  </int>
+  <int value="310" label="KEYWORD_GENERATED_BLOCKED_BLACKLIST">
+    URL generated from Omnibox keyword; Blocked by static blacklist
+  </int>
+  <int value="399" label="OTHER_BLOCKED_BLACKLIST">
+    Other navigation; Blocked by static blacklist
+  </int>
+  <int value="400" label="LINK_BLOCKED_SAFESITES">
+    Link; Blocked by SafeSites
+  </int>
+  <int value="401" label="TYPED_BLOCKED_SAFESITES">
+    Typed URL; Blocked by SafeSites
+  </int>
+  <int value="402" label="AUTO_BOOKMARK_BLOCKED_SAFESITES">
+    Bookmark; Blocked by SafeSites
+  </int>
+  <int value="403" label="AUTO_SUBFRAME_BLOCKED_SAFESITES">
+    Subframe navigation; Blocked by SafeSites
+  </int>
+  <int value="404" label="MANUAL_SUBFRAME_BLOCKED_SAFESITES">
+    Manual subframe navigation; Blocked by SafeSites
+  </int>
+  <int value="405" label="GENERATED_BLOCKED_SAFESITES">
+    Generated from Omnibox; Blocked by SafeSites
+  </int>
+  <int value="406" label="AUTO_TOPLEVEL_BLOCKED_SAFESITES">
+    Automatic toplevel navigation; Blocked by SafeSites
+  </int>
+  <int value="407" label="FORM_SUBMIT_BLOCKED_SAFESITES">
+    Form submission; Blocked by SafeSites
+  </int>
+  <int value="408" label="RELOAD_BLOCKED_SAFESITES">
+    Reload; Blocked by SafeSites
+  </int>
+  <int value="409" label="KEYWORD_BLOCKED_SAFESITES">
+    Omnibox keyword; Blocked by SafeSites
+  </int>
+  <int value="410" label="KEYWORD_GENERATED_BLOCKED_SAFESITES">
+    URL generated from Omnibox keyword; Blocked by SafeSites
+  </int>
+  <int value="499" label="OTHER_BLOCKED_SAFESITES">
+    Other navigation; Blocked by SafeSites
+  </int>
+  <int value="500" label="LINK_BLOCKED_MANUAL">
+    Link; Blocked by manual exception
+  </int>
+  <int value="501" label="TYPED_BLOCKED_MANUAL">
+    Typed URL; Blocked by manual exception
+  </int>
+  <int value="502" label="AUTO_BOOKMARK_BLOCKED_MANUAL">
+    Bookmark; Blocked by manual exception
+  </int>
+  <int value="503" label="AUTO_SUBFRAME_BLOCKED_MANUAL">
+    Subframe navigation; Blocked by manual exception
+  </int>
+  <int value="504" label="MANUAL_SUBFRAME_BLOCKED_MANUAL">
+    Manual subframe navigation; Blocked by manual exception
+  </int>
+  <int value="505" label="GENERATED_BLOCKED_MANUAL">
+    Generated from Omnibox; Blocked by manual exception
+  </int>
+  <int value="506" label="AUTO_TOPLEVEL_BLOCKED_MANUAL">
+    Automatic toplevel navigation; Blocked by manual exception
+  </int>
+  <int value="507" label="FORM_SUBMIT_BLOCKED_MANUAL">
+    Form submission; Blocked by manual exception
+  </int>
+  <int value="508" label="RELOAD_BLOCKED_MANUAL">
+    Reload; Blocked by manual exception
+  </int>
+  <int value="509" label="KEYWORD_BLOCKED_MANUAL">
+    Omnibox keyword; Blocked by manual exception
+  </int>
+  <int value="510" label="KEYWORD_GENERATED_BLOCKED_MANUAL">
+    URL generated from Omnibox keyword; Blocked by manual exception
+  </int>
+  <int value="599" label="OTHER_BLOCKED_MANUAL">
+    Other navigation; Blocked by manual exception
+  </int>
+  <int value="600" label="LINK_BLOCKED_DEFAULT">
+    Link; Blocked by global settings
+  </int>
+  <int value="601" label="TYPED_BLOCKED_DEFAULT">
+    Typed URL; Blocked by global settings
+  </int>
+  <int value="602" label="AUTO_BOOKMARK_BLOCKED_DEFAULT">
+    Bookmark; Blocked by global settings
+  </int>
+  <int value="603" label="AUTO_SUBFRAME_BLOCKED_DEFAULT">
+    Subframe navigation; Blocked by global settings
+  </int>
+  <int value="604" label="MANUAL_SUBFRAME_BLOCKED_DEFAULT">
+    Manual subframe navigation; Blocked by global settings
+  </int>
+  <int value="605" label="GENERATED_BLOCKED_DEFAULT">
+    Generated from Omnibox; Blocked by global settings
+  </int>
+  <int value="606" label="AUTO_TOPLEVEL_BLOCKED_DEFAULT">
+    Automatic toplevel navigation; Blocked by global settings
+  </int>
+  <int value="607" label="FORM_SUBMIT_BLOCKED_DEFAULT">
+    Form submission; Blocked by global settings
+  </int>
+  <int value="608" label="RELOAD_BLOCKED_DEFAULT">
+    Reload; Blocked by global settings
+  </int>
+  <int value="609" label="KEYWORD_BLOCKED_DEFAULT">
+    Omnibox keyword; Blocked by global settings
+  </int>
+  <int value="610" label="KEYWORD_GENERATED_BLOCKED_DEFAULT">
+    URL generated from Omnibox keyword; Blocked by global settings
+  </int>
+  <int value="699" label="OTHER_BLOCKED_DEFAULT">
+    Other navigation; Blocked by global settings
+  </int>
+  <int value="700" label="LINK_ALLOWED_WHITELIST">
+    Link; Allowed by whitelist
+  </int>
+  <int value="701" label="TYPED_ALLOWED_WHITELIST">
+    Typed URL; Allowed by whitelist
+  </int>
+  <int value="702" label="AUTO_BOOKMARK_ALLOWED_WHITELIST">
+    Bookmark; Allowed by whitelist
+  </int>
+  <int value="703" label="AUTO_SUBFRAME_ALLOWED_WHITELIST">
+    Subframe navigation; Allowed by whitelist
+  </int>
+  <int value="704" label="MANUAL_SUBFRAME_ALLOWED_WHITELIST">
+    Manual subframe navigation; Allowed by whitelist
+  </int>
+  <int value="705" label="GENERATED_ALLOWED_WHITELIST">
+    Generated from Omnibox; Allowed by whitelist
+  </int>
+  <int value="706" label="AUTO_TOPLEVEL_ALLOWED_WHITELIST">
+    Automatic toplevel navigation; Allowed by whitelist
+  </int>
+  <int value="707" label="FORM_SUBMIT_ALLOWED_WHITELIST">
+    Form submission; Allowed by whitelist
+  </int>
+  <int value="708" label="RELOAD_ALLOWED_WHITELIST">
+    Reload; Allowed by whitelist
+  </int>
+  <int value="709" label="KEYWORD_ALLOWED_WHITELIST">
+    Omnibox keyword; Allowed by whitelist
+  </int>
+  <int value="710" label="KEYWORD_GENERATED_ALLOWED_WHITELIST">
+    URL generated from Omnibox keyword; Allowed by whitelist
+  </int>
+  <int value="799" label="OTHER_ALLOWED_WHITELIST">
+    Other navigation; Allowed by whitelist
+  </int>
+</enum>
+
+<enum name="SuspendAttempt" type="int">
+  <int value="0" label="Attempted"/>
+</enum>
+
+<enum name="SuspendResult" type="int">
+  <int value="0" label="Succeeded"/>
+  <int value="1" label="Failed"/>
+  <int value="2" label="Canceled (before writing wakeup count)"/>
+  <int value="3" label="Canceled (after writing wakeup count)"/>
+</enum>
+
+<enum name="SuspendStatus" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+  <int value="2" label="Cancelled"/>
+  <int value="3" label="Attempted"/>
+</enum>
+
+<enum name="SwReporterRunningTimeRegistryError" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Registry key invalid"/>
+  <int value="2" label="Missing start time"/>
+  <int value="3" label="Missing end time"/>
+  <int value="4" label="Missing start and end times"/>
+</enum>
+
+<enum name="SwReporterStep" type="int">
+  <int value="0" label="Explicit request"/>
+  <int value="1" label="Startup retry"/>
+  <int value="2" label="Retried too many times"/>
+  <int value="3" label="Start execution"/>
+  <int value="4" label="Failed to start"/>
+  <int value="5" label="Registry exit code"/>
+  <int value="6" label="Reset retries"/>
+  <int value="7" label="Begin SRT download"/>
+  <int value="8" label="No browser to show prompt"/>
+  <int value="9" label="No local state"/>
+  <int value="10" label="No prompt needed"/>
+  <int value="11" label="No prompt field trial"/>
+  <int value="12" label="Already prompted"/>
+  <int value="13" label="Daily run"/>
+  <int value="14" label="Added to menu"/>
+</enum>
+
+<enum name="SyncAttachmentStoreResult" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="UNSPECIFIED_ERROR"/>
+  <int value="2" label="STORE_INITIALIZATION_FAILED"/>
+</enum>
+
+<enum name="SyncAuthError" type="int">
+  <int value="0"
+      label="Number of times clients have encountered an Auth error."/>
+  <int value="1" label="Number of times clients have fixed an auth error."/>
+</enum>
+
+<enum name="SyncBackendInitializeRestoreState" type="int">
+  <int value="0" label="Expected restored types and found some"/>
+  <int value="1" label="Expected restored types but found none"/>
+  <int value="2" label="Did not expect restored types and found none"/>
+  <int value="3" label="Did not expect restored types but found some"/>
+</enum>
+
+<enum name="SyncBookmarkModelSyncState" type="int">
+  <summary>
+    The state of the local bookmark model version compared to Sync. Corresponds
+    to NativeModelSyncState in bookmark_model_associator.h.
+  </summary>
+  <int value="0" label="Local version is unset"/>
+  <int value="1" label="Local version is in sync"/>
+  <int value="2" label="Local version is behind"/>
+  <int value="3" label="Local version is ahead"/>
+</enum>
+
+<enum name="SyncConfigureResult" type="int">
+  <summary>
+    Sync data type configure results. The codes are listed in
+    data_type_controller.h with more details.
+  </summary>
+  <int value="0" label="OK"/>
+  <int value="1" label="OK_FIRST_RUN"/>
+  <int value="2" label="ASSOCIATION_FAILED"/>
+  <int value="3" label="ABORTED"/>
+  <int value="4" label="UNRECOVERABLE_ERROR"/>
+  <int value="5" label="NEEDS_CRYPTO"/>
+  <int value="6" label="RUNTIME_ERROR"/>
+</enum>
+
+<enum name="SyncConflictResolutions" type="int">
+  <summary>
+    Sync conflict resolutions. The codes are listed in conflict_resolution.h,
+    and correspond to all the different ways a sync conflict can be resolved.
+  </summary>
+  <int value="0" label="Changes match"/>
+  <int value="1" label="Use local"/>
+  <int value="2" label="Use remote"/>
+  <int value="3" label="Use new"/>
+</enum>
+
+<enum name="SyncCryptographerPendingKeysState" type="int">
+  <int value="0" label="Does not have pending keys"/>
+  <int value="1" label="Has pending keys"/>
+</enum>
+
+<enum name="SyncCryptographerReadyState" type="int">
+  <int value="0" label="Not Ready"/>
+  <int value="1" label="Ready"/>
+</enum>
+
+<enum name="SyncCustomEncryptionEvent" type="int">
+  <int value="0" label="Default setup with an implicit passphrase"/>
+  <int value="1" label="Advanced setup with a custom passphrase"/>
+</enum>
+
+<enum name="SyncDeferredInitTrigger" type="int">
+  <int value="0" label="Data type requested init."/>
+  <int value="1" label="Fallback timer triggered init."/>
+</enum>
+
+<enum name="SyncDirectoryOpenResult" type="int">
+  <summary>Possible outcomes of an attempt to load the sync directory.</summary>
+  <int value="0" label="FIRST_TRY_SUCCESS"/>
+  <int value="1" label="SECOND_TRY_SUCCESS"/>
+  <int value="2" label="SECOND_TRY_FAILURE"/>
+</enum>
+
+<enum name="SyncedNotificationActionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Notification clicked"/>
+  <int value="2" label="Notification button clicked"/>
+  <int value="3" label="Notification closed by user"/>
+  <int value="4" label="Notification closed by system"/>
+</enum>
+
+<enum name="SyncedSearchEngineDeleteEvent" type="int">
+  <summary>Possible events that delete a synced search engine.</summary>
+  <int value="0" label="USER_INITIATED"/>
+  <int value="1" label="PRE_SYNC_DELETE"/>
+  <int value="2" label="EMPTY_FIELD"/>
+</enum>
+
+<enum name="SyncErrorInfobarTypes" type="int">
+  <summary>Possible errors that can trigger a sync error infobar.</summary>
+  <int value="1" label="Sign in needs update"/>
+  <int value="2" label="Service unavailable"/>
+  <int value="3" label="Needs passphrase"/>
+  <int value="4" label="Unrecoverable error"/>
+</enum>
+
+<enum name="SyncEventCode" type="int">
+  <summary>
+    Sync UI events. The codes are listed in profile_syncer_service.h with more
+    details.
+  </summary>
+  <int value="1" label="START_FROM_NTP"/>
+  <int value="2" label="START_FROM_WRENCH"/>
+  <int value="3" label="START_FROM_OPTIONS"/>
+  <int value="10" label="CANCEL_FROM_SIGNON_WITHOUT_AUTH"/>
+  <int value="11" label="CANCEL_DURING_SIGNON"/>
+  <int value="12" label="CANCEL_DURING_SIGNON_AFTER_MERGE"/>
+  <int value="20" label="STOP_FROM_OPTIONS"/>
+  <int value="21" label="STOP_FROM_ADVANCED_DIALOG"/>
+  <int value="30" label="MERGE_AND_SYNC_NEEDED"/>
+</enum>
+
+<enum name="SyncFaviconsAvailable" type="int">
+  <int value="0" label="Synced favicons full"/>
+  <int value="1" label="Synced favicons not full"/>
+</enum>
+
+<enum name="SyncFSConflictResolutionPolicy" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="LastWriteWin"/>
+  <int value="2" label="Manual"/>
+</enum>
+
+<enum name="SyncFSRemoteServiceState" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="TemporaryUnavailable"/>
+  <int value="2" label="AuthenticationRequired"/>
+  <int value="3" label="Disabled"/>
+</enum>
+
+<enum name="SyncInitialState" type="int">
+  <int value="0" label="Can attempt to start"/>
+  <int value="1" label="No signed in user"/>
+  <int value="2" label="Turned off by user"/>
+  <int value="3" label="Turned off and setup not completed"/>
+  <int value="4" label="Must confirm sync settings"/>
+  <int value="5" label="Disallowed by enterprise policy"/>
+  <int value="6" label="Disallowed by the platform"/>
+</enum>
+
+<enum name="SyncKeystoreDecryptionFailure" type="int">
+  <int value="0" label="No keystore key"/>
+  <int value="1" label="Unknown reason"/>
+</enum>
+
+<enum name="SyncModelTypes" type="int">
+  <int value="0" label="Unspecified"/>
+  <int value="1" label="Top level folder"/>
+  <int value="2" label="Bookmarks"/>
+  <int value="3" label="Preferences"/>
+  <int value="4" label="Passwords"/>
+  <int value="5" label="Autofill Profile"/>
+  <int value="6" label="Autocomplete"/>
+  <int value="7" label="Themes"/>
+  <int value="8" label="Typed URLs"/>
+  <int value="9" label="Extensions"/>
+  <int value="10" label="Search Engines"/>
+  <int value="11" label="Sessions"/>
+  <int value="12" label="Apps"/>
+  <int value="13" label="App Settings"/>
+  <int value="14" label="Extension Settings"/>
+  <int value="15" label="App Notifications"/>
+  <int value="16" label="History Delete Directives"/>
+  <int value="17" label="Nigori"/>
+  <int value="18" label="Device Information"/>
+  <int value="19" label="Experiments"/>
+  <int value="20" label="Synced Notifications"/>
+  <int value="21" label="Priority Preferences"/>
+  <int value="22" label="Dictionary"/>
+  <int value="23" label="Favicon Images"/>
+  <int value="24" label="Favicon Tracking"/>
+  <int value="25" label="Proxy Tabs"/>
+  <int value="26" label="Managed User Settings"/>
+  <int value="27" label="Managed Users"/>
+  <int value="28" label="Articles"/>
+  <int value="29" label="App list"/>
+  <int value="30" label="Managed User Shared Settings"/>
+  <int value="31" label="Synced Notification App Info"/>
+  <int value="32" label="Wifi Credentials"/>
+  <int value="33" label="Managed User Whitelists"/>
+  <int value="34" label="Autofill Wallet"/>
+  <int value="35" label="Autofill Wallet Metadata"/>
+  <int value="38" label="Reading List"/>
+</enum>
+
+<enum name="SyncNigoriMigrationResult" type="int">
+  <int value="0" label="Failed to set default encryption key"/>
+  <int value="1" label="Failed to set nondefault encryption key"/>
+  <int value="2" label="Failed to extract keystore decryptor"/>
+  <int value="3" label="Failed to extract encryption keybag"/>
+  <int value="4"
+      label="Successfully migrated to non-backwards compatible keystore mode"/>
+  <int value="5"
+      label="Successfully migrated to backwards compatible keystore mode"/>
+  <int value="6" label="Successfully migrated with frozen implicit passphrase"/>
+  <int value="7" label="Successfully migrated with custom passphrase"/>
+</enum>
+
+<enum name="SyncNigoriMigrationState" type="int">
+  <int value="0" label="Fully migrated"/>
+  <int value="1" label="Not migrated due to cryptographer not ready"/>
+  <int value="2" label="Not migrated due to missing keystore key"/>
+  <int value="3" label="Not migrated for an unknown reason"/>
+</enum>
+
+<enum name="SyncPassphraseDismissal" type="int">
+  <int value="0" label="Passphrase accepted"/>
+  <int value="1" label="Cancel with wrong passphrase error"/>
+  <int value="2" label="Cancel without any passphrase attempted"/>
+  <int value="3" label="Followed reset link"/>
+</enum>
+
+<enum name="SyncPassphraseType" type="int">
+  <int value="0" label="IMPLICIT_PASSPHRASE"/>
+  <int value="1" label="KEYSTORE_PASSPHRASE"/>
+  <int value="2" label="FROZEN_IMPLICIT_PASSPHRASE"/>
+  <int value="3" label="CUSTOM_PASSPHRASE"/>
+</enum>
+
+<enum name="SyncPromoAction" type="int">
+  <int value="0" label="The promo was shown to the user"/>
+  <int value="1" label="The user clicked the promo to sign in"/>
+</enum>
+
+<enum name="SyncSimpleConflictResolutions" type="int">
+  <summary>
+    Sync simple conflict resolutions. The codes are listed in
+    conflict_resolver.h, and correspond to the different methods we have for
+    resolving simple sync conflicts.
+  </summary>
+  <int value="0" label="Overwrite local"/>
+  <int value="1" label="Overwrite server"/>
+  <int value="2" label="Undelete"/>
+  <int value="3" label="Ignore encryption"/>
+  <int value="4" label="Nigori merge"/>
+  <int value="5" label="Changes match"/>
+</enum>
+
+<enum name="SyncStartResult" type="int">
+  <summary>
+    Sync data type start results. The codes are listed in data_type_controller.h
+    with more details.
+  </summary>
+  <int value="0" label="OK"/>
+  <int value="1" label="OK_FIRST_RUN"/>
+  <int value="2" label="BUSY"/>
+  <int value="3" label="NOT_ENABLED"/>
+  <int value="4" label="ASSOCIATION_FAILED"/>
+  <int value="5" label="ABORTED"/>
+  <int value="6" label="UNRECOVERABLE_ERROR"/>
+  <int value="7" label="NEEDS_CRYPTO"/>
+</enum>
+
+<enum name="SyncStopSource" type="int">
+  <int value="0" label="Profile destruction"/>
+  <int value="1" label="Sign out"/>
+  <int value="2" label="Birthday error"/>
+  <int value="3" label="Chrome sync settings"/>
+  <int value="4" label="Android Chrome sync setting"/>
+  <int value="5" label="Android master sync setting"/>
+</enum>
+
+<enum name="SyncUnrecoverableErrorReason" type="int">
+  <summary>Reasons for sync unrecoverable errors.</summary>
+  <int value="0" label="No error"/>
+  <int value="1" label="Syncer error"/>
+  <int value="2" label="Backend initialization error"/>
+  <int value="3" label="Configuration retry"/>
+  <int value="4" label="Configuration failure"/>
+  <int value="5" label="Actionable error"/>
+</enum>
+
+<enum name="SystemLogPIIType" type="int">
+  <obsolete>
+    Deprecated and removed from code as of 01/2016.
+  </obsolete>
+  <int value="0" label="Email address"/>
+  <int value="1" label="IP address"/>
+  <int value="2" label="Web URL"/>
+  <int value="3" label="SSID"/>
+</enum>
+
+<enum name="SystemMenuDefaultViewRows" type="int">
+  <int value="0" label="NOT_RECORDED - Should not be recorded"/>
+  <int value="1" label="TEST - Should not be recorded"/>
+  <int value="2" label="Accessibility"/>
+  <int value="3" label="Audio"/>
+  <int value="4" label="Bluetooth"/>
+  <int value="5" label="Caps lock"/>
+  <int value="6" label="Cast"/>
+  <int value="7" label="Date"/>
+  <int value="8" label="Display settings"/>
+  <int value="9" label="Display brightness"/>
+  <int value="10" label="Enterprise"/>
+  <int value="11" label="IME"/>
+  <int value="12" label="Multi profile media"/>
+  <int value="13" label="Network"/>
+  <int value="14" label="Settings"/>
+  <int value="15" label="Update"/>
+  <int value="16" label="Power"/>
+  <int value="17" label="Rotation lock"/>
+  <int value="18" label="Screen capture"/>
+  <int value="19" label="Screen share"/>
+  <int value="20" label="Session length limit"/>
+  <int value="21" label="SMS"/>
+  <int value="22" label="Supervised user"/>
+  <int value="23" label="Tracing"/>
+  <int value="24" label="User"/>
+  <int value="25" label="VPN"/>
+</enum>
+
+<enum name="TabBackgroundLoadStatus" type="int">
+  <int value="0" label="Loaded on creation and shown"/>
+  <int value="1" label="Loaded on creation and lost"/>
+  <int value="2" label="Not loaded on creation"/>
+</enum>
+
+<enum name="TabDiscardingEvents" type="int">
+  <int value="0" label="Switched to an active tab"/>
+  <int value="1" label="Switched to a discarded tab"/>
+  <int value="2" label="Discarded a tab"/>
+  <int value="3"
+      label="Discarded a tab playing audio (included in the previous one)"/>
+</enum>
+
+<enum name="TabRendererCrashStatus" type="int">
+  <int value="0" label="Shown in foreground app"/>
+  <int value="1" label="Hidden in foreground app"/>
+  <int value="2" label="Hidden in background app"/>
+</enum>
+
+<enum name="TabRendererExitStatus" type="int">
+  <int value="0" label="OOM protected in running app"/>
+  <int value="1" label="OOM protected in paused app"/>
+  <int value="2" label="OOM protected in background app"/>
+  <int value="3" label="Not protected in running app"/>
+  <int value="4" label="Not protected in paused app"/>
+  <int value="5" label="Not protected in background app"/>
+</enum>
+
+<enum name="TabRestoreResult" type="int">
+  <int value="0" label="Failure (other)"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="Failure due to network connectivity"/>
+</enum>
+
+<enum name="TabRestoreUserAction" type="int">
+  <int value="0" label="Wait for completion"/>
+  <int value="1" label="Leave tab (close tab/switch tab/go to tab switcher)"/>
+  <int value="2" label="Leave Chrome"/>
+</enum>
+
+<enum name="TabStatus" type="int">
+  <int value="0" label="Memory resident"/>
+  <int value="1" label="Evicted and reloaded"/>
+  <int value="2" label="Reloaded due to cold start"/>
+  <int value="3" label="Partially evicted"/>
+  <int value="4" label="Reloaded due to backgrounding"/>
+  <int value="5" label="Reloaded due to incognito"/>
+  <int value="6" label="Reloaded due to cold start (fg tab on start)"/>
+  <int value="7" label="Reloaded due to cold start (bg tab on switch)"/>
+  <int value="8" label="Lazy load for 'Open in new tab'"/>
+  <int value="9" label="Stopped due to page loading when backgrounding"/>
+  <int value="10" label="Evicted due to page loading when backgrounding"/>
+  <int value="11" label="Evicted due to OS terminating the renderer."/>
+</enum>
+
+<enum name="TabStripState" type="int">
+  <int value="0" label="Initial state"/>
+  <int value="1" label="Tab is active, shown foreground."/>
+  <int value="2" label="Tab is inactive, in background."/>
+  <int value="3" label="Tab is detached from tab-strip."/>
+  <int value="4" label="Tab is closed."/>
+</enum>
+
+<enum name="TabSwitchedToForegroundLaunchedWithURL" type="int">
+  <obsolete>
+    Deprecated as of 04/2014.
+  </obsolete>
+  <int value="0" label="Launched without an URL"/>
+  <int value="1" label="Launched with an URL"/>
+</enum>
+
+<enum name="TabSwitchedToForegroundRevisit" type="int">
+  <obsolete>
+    Deprecated as of 04/2014.
+  </obsolete>
+  <int value="0" label="First time"/>
+  <int value="1" label="Revisit"/>
+</enum>
+
+<enum name="TapDelayType" type="int">
+  <int value="0" label="Delayed Tap"/>
+  <int value="1" label="Undelayed Tap"/>
+</enum>
+
+<enum name="TcpSocketStatus" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Fast Connection Return"/>
+  <int value="2" label="Slow Connection Return"/>
+  <int value="3" label="Connection Error"/>
+  <int value="4" label="Syn Data Acknowledged"/>
+  <int value="5" label="Syn Data Nacked"/>
+  <int value="6" label="Syn Data Getsockopt Failed"/>
+  <int value="7" label="No Syn Data + Ack (can't happen)"/>
+  <int value="8" label="No Syn Data + Nack"/>
+  <int value="9" label="No Syn Data + Getsockopt Failed"/>
+  <int value="10" label="Fast Connect + Read Failed"/>
+  <int value="11" label="Slow Connect + Read Failed"/>
+  <int value="12" label="Previously Failed"/>
+</enum>
+
+<enum name="TempFileFailure" type="int">
+  <int value="0" label="Creating"/>
+  <int value="1" label="Opening"/>
+  <int value="2" label="Closing (unused)"/>
+  <int value="3" label="Writing"/>
+  <int value="4" label="Renaming"/>
+  <int value="5" label="Flushing"/>
+</enum>
+
+<enum name="ThreadType" type="int">
+  <int value="0" label="UI"/>
+  <int value="1" label="Blocking"/>
+</enum>
+
+<enum name="ThrottleInfobarResponse" type="int">
+  <int value="0" label="No response"/>
+  <int value="1" label="Try again"/>
+  <int value="2" label="Wait"/>
+  <int value="3" label="Infobar dismissed"/>
+</enum>
+
+<enum name="TileMemoryBudget" type="int">
+  <int value="0" label="Within memory budget"/>
+  <int value="1" label="Exceeded memory budget"/>
+</enum>
+
+<enum name="TimeZoneRequestEvent" type="int">
+  <int value="0" label="Request start"/>
+  <int value="1" label="Response success"/>
+  <int value="2" label="Response not OK"/>
+  <int value="3" label="Response empty"/>
+  <int value="4" label="Response malformed"/>
+</enum>
+
+<enum name="TimeZoneRequestResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+  <int value="2" label="Server error"/>
+  <int value="3" label="Request is cancelled."/>
+</enum>
+
+<enum name="TLSRenegotiationPatched" type="int">
+  <int value="0" label="Not renegotiation patched"/>
+  <int value="1" label="Renegotiation patched"/>
+</enum>
+
+<enum name="TokenBinding.KeyMatch" type="int">
+  <int value="0" label="No keys"/>
+  <int value="1" label="Keys match"/>
+  <int value="2" label="Socket (Channel ID) key missing"/>
+  <int value="3" label="Request (Token Binding) key missing"/>
+  <int value="4" label="Keys present but don't match"/>
+  <int value="5" label="Error looking up request key"/>
+</enum>
+
+<enum name="TokenBinding.StoreEphemerality" type="int">
+  <int value="0" label="CID_EPHEMERAL_COOKIE_EPHEMERAL">
+    This value has been deprecated and replaced by EPHEMERAL_MATCH and
+    EPHEMERAL_MISMATCH.
+  </int>
+  <int value="1" label="CID_EPHEMERAL_COOKIE_PERSISTENT"/>
+  <int value="2" label="CID_PERSISTENT_COOKIE_EPHEMERAL"/>
+  <int value="3" label="CID_PERSISTENT_COOKIE_PERSISTENT">
+    This value has been deprecated and replaced by PERSISTENT_MATCH and
+    PERSISTENT_MISMATCH.
+  </int>
+  <int value="4" label="NO_COOKIE_STORE"/>
+  <int value="5" label="NO_CHANNEL_ID_STORE"/>
+  <int value="6" label="KNOWN_MISMATCH"/>
+  <int value="7" label="EPHEMERAL_MATCH"/>
+  <int value="8" label="EPHEMERAL_MISMATCH"/>
+  <int value="9" label="PERSISTENT_MATCH"/>
+  <int value="10" label="PERSISTENT_MISMATCH"/>
+  <int value="11" label="EPHEMERAL_UNKNOWN"/>
+  <int value="12" label="PERSISTENT_UNKNOWN"/>
+</enum>
+
+<enum name="TokenBinding.Support" type="int">
+  <int value="0" label="DISABLED"/>
+  <int value="1" label="CLIENT_ONLY"/>
+  <int value="2" label="CLIENT_AND_SERVER"/>
+  <int value="3" label="CLIENT_NO_CHANNEL_ID_SERVICE"/>
+</enum>
+
+<enum name="TouchEventDispatchResultType" type="int">
+  <int value="0" label="Unhandled touch events"/>
+  <int value="1" label="Handled touch events"/>
+</enum>
+
+<enum name="TouchEventsState" type="int">
+  <int value="0" label="Enabled"/>
+  <int value="1" label="Automatic - enabled (deprecated)"/>
+  <int value="2" label="Automatic - disabled (deprecated)"/>
+  <int value="3" label="Disabled"/>
+</enum>
+
+<enum name="TouchpadDeviceState" type="int">
+  <int value="0" label="NO_TP_PRESENT_NO_TP_EXPECTED">
+    No touchpad detected on a device without built-in touchpad
+  </int>
+  <int value="1" label="TP_PRESENT_NO_TP_EXPECTED">
+    External touchpad detected on a device without built-in touchpad
+  </int>
+  <int value="2" label="NO_TP_PRESENT_TP_EXPECTED_BOOT">
+    Built-in touchpad not detected at boot time on a device with built-in
+    touchpad (touchpad failure at boot time)
+  </int>
+  <int value="3" label="TP_PRESENT_TP_EXPECTED_BOOT">
+    Built-in touchpad detected at boot time on a device with built-in touchpad
+  </int>
+  <int value="4" label="NO_TP_PRESENT_TP_EXPECTED_RESUME">
+    Built-in touchpad not detected at resume time on a device with built-in
+    touchpad (touchpad failure at resume time)
+  </int>
+  <int value="5" label="TP_PRESENT_TP_EXPECTED_RESUME">
+    Built-in touchpad detected at resume time on a device with built-in touchpad
+  </int>
+</enum>
+
+<enum name="TouchpadProblemType" type="int">
+  <int value="0" label="All events">
+    All observed input events from touchpad. Serves as a reference.
+  </int>
+  <int value="1" label="Noisy Ground">
+    The touchpad noise events (e.g. abrupt cursor jumps) caused by the noisy
+    ground.
+  </int>
+</enum>
+
+<enum name="TouchTargetAndDispatchResultType" type="int">
+  <int value="0"
+      label="Non-root-scroller, non-scrollable document, not handled"/>
+  <int value="1"
+      label="Non-root-scroller, non-scrollable document, handled application"/>
+  <int value="2" label="Non-root-scroller, scrollable document, not handled"/>
+  <int value="3"
+      label="Non-root-scroller, scrollable document, handled application"/>
+  <int value="4" label="Root-scroller, non-scrollable document, not handled"/>
+  <int value="5"
+      label="Root-scroller, non-scrollable document, handled application"/>
+  <int value="6" label="Root-scroller, scrollable document, not handled"/>
+  <int value="7"
+      label="Root-scroller, scrollable document, handled application"/>
+</enum>
+
+<enum name="TouchTargetAndDispatchResultType2" type="int">
+  <int value="0"
+      label="Capturing Non-root-scroller, non-scrollable document, already
+             handled"/>
+  <int value="1"
+      label="Capturing Non-root-scroller, non-scrollable document, not
+             handled"/>
+  <int value="2"
+      label="Capturing Non-root-scroller, non-scrollable document, handled
+             application"/>
+  <int value="3"
+      label="Capturing Non-root-scroller, scrollable document, already
+             handled"/>
+  <int value="4"
+      label="Capturing Non-root-scroller, scrollable document, not handled"/>
+  <int value="5"
+      label="Capturing Non-root-scroller, scrollable document, handled
+             application"/>
+  <int value="6"
+      label="Capturing Root-scroller, non-scrollable document, already
+             handled"/>
+  <int value="7"
+      label="Capturing Root-scroller, non-scrollable document, not handled"/>
+  <int value="8"
+      label="Capturing Root-scroller, non-scrollable document, handled
+             application"/>
+  <int value="9"
+      label="Capturing Root-scroller, scrollable document, already handled"/>
+  <int value="10"
+      label="Capturing Root-scroller, scrollable document, not handled"/>
+  <int value="11"
+      label="Capturing Root-scroller, scrollable document, handled
+             application"/>
+  <int value="12"
+      label="Non-root-scroller, non-scrollable document, already handled"/>
+  <int value="13"
+      label="Non-root-scroller, non-scrollable document, not handled"/>
+  <int value="14"
+      label="Non-root-scroller, non-scrollable document, handled application"/>
+  <int value="15"
+      label="Non-root-scroller, scrollable document, already handled"/>
+  <int value="16" label="Non-root-scroller, scrollable document, not handled"/>
+  <int value="17"
+      label="Non-root-scroller, scrollable document, handled application"/>
+  <int value="18"
+      label="Root-scroller, non-scrollable document, already handled"/>
+  <int value="19" label="Root-scroller, non-scrollable document, not handled"/>
+  <int value="20"
+      label="Root-scroller, non-scrollable document, handled application"/>
+  <int value="21" label="Root-scroller, scrollable document, already handled"/>
+  <int value="22" label="Root-scroller, scrollable document, not handled"/>
+  <int value="23"
+      label="Root-scroller, scrollable document, handled application"/>
+  <int value="24"
+      label="Bubbling Non-root-scroller, non-scrollable document, already
+             handled"/>
+  <int value="25"
+      label="Bubbling Non-root-scroller, non-scrollable document, not handled"/>
+  <int value="26"
+      label="Bubbling Non-root-scroller, non-scrollable document, handled
+             application"/>
+  <int value="27"
+      label="Bubbling Non-root-scroller, scrollable document, already handled"/>
+  <int value="28"
+      label="Bubbling Non-root-scroller, scrollable document, not handled"/>
+  <int value="29"
+      label="Bubbling Non-root-scroller, scrollable document, handled
+             application"/>
+  <int value="30"
+      label="Bubbling Root-scroller, non-scrollable document, already handled"/>
+  <int value="31"
+      label="Bubbling Root-scroller, non-scrollable document, not handled"/>
+  <int value="32"
+      label="Bubbling Root-scroller, non-scrollable document, handled
+             application"/>
+  <int value="33"
+      label="Bubbling Root-scroller, scrollable document, already handled"/>
+  <int value="34"
+      label="Bubbling Root-scroller, scrollable document, not handled"/>
+  <int value="35"
+      label="Bubbling Root-scroller, scrollable document, handled application"/>
+</enum>
+
+<enum name="TPMResultCodeEnum" type="int">
+  <int value="0" label="TPM_SUCCESS"/>
+  <int value="1" label="TPM_E_AUTHFAIL"/>
+  <int value="2" label="TPM_E_BADINDEX"/>
+  <int value="3" label="TPM_E_BAD_PARAMETER"/>
+  <int value="4" label="TPM_E_AUDITFAILURE"/>
+  <int value="5" label="TPM_E_CLEAR_DISABLED"/>
+  <int value="6" label="TPM_E_DEACTIVATED"/>
+  <int value="7" label="TPM_E_DISABLED"/>
+  <int value="8" label="TPM_E_DISABLED_CMD"/>
+  <int value="9" label="TPM_E_FAIL"/>
+  <int value="10" label="TPM_E_BAD_ORDINAL"/>
+  <int value="11" label="TPM_E_INSTALL_DISABLED"/>
+  <int value="12" label="TPM_E_INVALID_KEYHANDLE"/>
+  <int value="13" label="TPM_E_KEYNOTFOUND"/>
+  <int value="14" label="TPM_E_INAPPROPRIATE_ENC"/>
+  <int value="15" label="TPM_E_MIGRATEFAIL"/>
+  <int value="16" label="TPM_E_INVALID_PCR_INFO"/>
+  <int value="17" label="TPM_E_NOSPACE"/>
+  <int value="18" label="TPM_E_NOSRK"/>
+  <int value="19" label="TPM_E_NOTSEALED_BLOB"/>
+  <int value="20" label="TPM_E_OWNER_SET"/>
+  <int value="21" label="TPM_E_RESOURCES"/>
+  <int value="22" label="TPM_E_SHORTRANDOM"/>
+  <int value="23" label="TPM_E_SIZE"/>
+  <int value="24" label="TPM_E_WRONGPCRVAL"/>
+  <int value="25" label="TPM_E_BAD_PARAM_SIZE"/>
+  <int value="26" label="TPM_E_SHA_THREAD"/>
+  <int value="27" label="TPM_E_SHA_ERROR"/>
+  <int value="28" label="TPM_E_FAILEDSELFTEST"/>
+  <int value="29" label="TPM_E_AUTH2FAIL"/>
+  <int value="30" label="TPM_E_BADTAG"/>
+  <int value="31" label="TPM_E_IOERROR"/>
+  <int value="32" label="TPM_E_ENCRYPT_ERROR"/>
+  <int value="33" label="TPM_E_DECRYPT_ERROR"/>
+  <int value="34" label="TPM_E_INVALID_AUTHHANDLE"/>
+  <int value="35" label="TPM_E_NO_ENDORSEMENT"/>
+  <int value="36" label="TPM_E_INVALID_KEYUSAGE"/>
+  <int value="37" label="TPM_E_WRONG_ENTITYTYPE"/>
+  <int value="38" label="TPM_E_INVALID_POSTINIT"/>
+  <int value="39" label="TPM_E_INAPPROPRIATE_SIG"/>
+  <int value="40" label="TPM_E_BAD_KEY_PROPERTY"/>
+  <int value="41" label="TPM_E_BAD_MIGRATION"/>
+  <int value="42" label="TPM_E_BAD_SCHEME"/>
+  <int value="43" label="TPM_E_BAD_DATASIZE"/>
+  <int value="44" label="TPM_E_BAD_MODE"/>
+  <int value="45" label="TPM_E_BAD_PRESENCE"/>
+  <int value="46" label="TPM_E_BAD_VERSION"/>
+  <int value="47" label="TPM_E_NO_WRAP_TRANSPORT"/>
+  <int value="48" label="TPM_E_AUDITFAIL_UNSUCCESSFUL"/>
+  <int value="49" label="TPM_E_AUDITFAIL_SUCCESSFUL"/>
+  <int value="50" label="TPM_E_NOTRESETABLE"/>
+  <int value="51" label="TPM_E_NOTLOCAL"/>
+  <int value="52" label="TPM_E_BAD_TYPE"/>
+  <int value="53" label="TPM_E_INVALID_RESOURCE"/>
+  <int value="54" label="TPM_E_NOTFIPS"/>
+  <int value="55" label="TPM_E_INVALID_FAMILY"/>
+  <int value="56" label="TPM_E_NO_NV_PERMISSION"/>
+  <int value="57" label="TPM_E_REQUIRES_SIGN"/>
+  <int value="58" label="TPM_E_KEY_NOTSUPPORTED"/>
+  <int value="59" label="TPM_E_AUTH_CONFLICT"/>
+  <int value="60" label="TPM_E_AREA_LOCKED"/>
+  <int value="61" label="TPM_E_BAD_LOCALITY"/>
+  <int value="62" label="TPM_E_READ_ONLY"/>
+  <int value="63" label="TPM_E_PER_NOWRITE"/>
+  <int value="64" label="TPM_E_FAMILYCOUNT"/>
+  <int value="65" label="TPM_E_WRITE_LOCKED"/>
+  <int value="66" label="TPM_E_BAD_ATTRIBUTES"/>
+  <int value="67" label="TPM_E_INVALID_STRUCTURE"/>
+  <int value="68" label="TPM_E_KEY_OWNER_CONTROL"/>
+  <int value="69" label="TPM_E_BAD_COUNTER"/>
+  <int value="70" label="TPM_E_NOT_FULLWRITE"/>
+  <int value="71" label="TPM_E_CONTEXT_GAP"/>
+  <int value="72" label="TPM_E_MAXNVWRITES"/>
+  <int value="73" label="TPM_E_NOOPERATOR"/>
+  <int value="74" label="TPM_E_RESOURCEMISSING"/>
+  <int value="75" label="TPM_E_DELEGATE_LOCK"/>
+  <int value="76" label="TPM_E_DELEGATE_FAMILY"/>
+  <int value="77" label="TPM_E_DELEGATE_ADMIN"/>
+  <int value="78" label="TPM_E_TRANSPORT_NOTEXCLUSIVE"/>
+  <int value="79" label="TPM_E_OWNER_CONTROL"/>
+  <int value="80" label="TPM_E_DAA_RESOURCES"/>
+  <int value="81" label="TPM_E_DAA_INPUT_DATA0"/>
+  <int value="82" label="TPM_E_DAA_INPUT_DATA1"/>
+  <int value="83" label="TPM_E_DAA_ISSUER_SETTINGS"/>
+  <int value="84" label="TPM_E_DAA_TPM_SETTINGS"/>
+  <int value="85" label="TPM_E_DAA_STAGE"/>
+  <int value="86" label="TPM_E_DAA_ISSUER_VALIDITY"/>
+  <int value="87" label="TPM_E_DAA_WRONG_W"/>
+  <int value="88" label="TPM_E_BAD_HANDLE"/>
+  <int value="89" label="TPM_E_BAD_DELEGATE"/>
+  <int value="90" label="TPM_E_BADCONTEXT"/>
+  <int value="91" label="TPM_E_TOOMANYCONTEXTS"/>
+  <int value="92" label="TPM_E_MA_TICKET_SIGNATURE"/>
+  <int value="93" label="TPM_E_MA_DESTINATION"/>
+  <int value="94" label="TPM_E_MA_SOURCE"/>
+  <int value="95" label="TPM_E_MA_AUTHORITY"/>
+  <int value="97" label="TPM_E_PERMANENTEK"/>
+  <int value="98" label="TPM_E_BAD_SIGNATURE"/>
+  <int value="99" label="TPM_E_NOCONTEXTSPACE"/>
+  <int value="2048" label="TPM_E_RETRY"/>
+  <int value="2049" label="TPM_E_NEEDS_SELFTEST"/>
+  <int value="2050" label="TPM_E_DOING_SELFTEST"/>
+  <int value="2051" label="TPM_E_DEFEND_LOCK_RUNNING"/>
+</enum>
+
+<enum name="TrackedPreference" type="int">
+  <int value="0" label="kShowHomeButton"/>
+  <int value="1" label="kHomePageIsNewTabPage"/>
+  <int value="2" label="kHomePage"/>
+  <int value="3" label="kRestoreOnStartup"/>
+  <int value="4" label="kURLsToRestoreOnStartup"/>
+  <int value="5" label="extensions::pref_names::kExtensions"/>
+  <int value="6" label="kGoogleServicesLastUsername"/>
+  <int value="7" label="kSearchProviderOverrides"/>
+  <int value="8" label="kDefaultSearchProviderSearchURL"/>
+  <int value="9" label="kDefaultSearchProviderKeyword"/>
+  <int value="10" label="kDefaultSearchProviderName"/>
+  <int value="11" label="kPinnedTabs"/>
+  <int value="12" label="kKnownDisabled (Obsolete 07/2014)"/>
+  <int value="13" label="kProfileResetPromptMemento (Obsolete 11/2015)"/>
+  <int value="14" label="kDefaultSearchProviderDataPrefName"/>
+  <int value="15" label="kPreferenceResetTime"/>
+  <int value="16" label="kSafeBrowsingIncidentReportSent"/>
+  <int value="17" label="kSyncRemainingRollbackTries"/>
+  <int value="18" label="kSafeBrowsingIncidentsSent"/>
+  <int value="19" label="kSwReporterPromptVersion"/>
+  <int value="20" label="kSwReporterPromptReason"/>
+  <int value="21" label="kGoogleServicesUsername"/>
+  <int value="22" label="kSwReporterPromptSeed"/>
+  <int value="23" label="kGoogleServicesAccountId"/>
+  <int value="24" label="kGoogleServicesLastAccountId"/>
+</enum>
+
+<enum name="TranslateBubbleUiEvent" type="int">
+  <int value="1" label="Switch to Options page"/>
+  <int value="2" label="Leave Options page"/>
+  <int value="3" label="Advanced Link clicked"/>
+  <int value="4" label="Always Translate checked"/>
+  <int value="5" label="Always Translate unchecked"/>
+  <int value="6" label="Nope menu clicked"/>
+  <int value="7" label="Never Translate Language menu clicked"/>
+  <int value="8" label="Never Translate This Site menu clicked"/>
+  <int value="9" label="Translate button clicked"/>
+  <int value="10" label="Done button clicked"/>
+  <int value="11" label="Cancel button clicked"/>
+  <int value="12" label="Close button clicked"/>
+  <int value="13" label="Try Again button clicked"/>
+  <int value="14" label="Show Original button clicked"/>
+  <int value="15" label="Language Settings link clicked"/>
+  <int value="16" label="Source Language menu clicked"/>
+  <int value="17" label="Target Language menu clicked"/>
+  <int value="18" label="Page Action icon activated"/>
+  <int value="19" label="Page Action icon deactivated"/>
+  <int value="20" label="Bubble was shown"/>
+  <int value="21" label="Bubble not shown: window is no longer valid"/>
+  <int value="22" label="Bubble not shown: window is minimized"/>
+  <int value="23" label="Bubble not shown: window is not active"/>
+  <int value="24" label="Bubble not shown: web contents not active"/>
+  <int value="25" label="Bubble not shown: editable field is active"/>
+</enum>
+
+<enum name="TranslateError" type="int">
+  <int value="0" label="No error"/>
+  <int value="1" label="Network error"/>
+  <int value="2" label="Initialization error"/>
+  <int value="3" label="Unknown language"/>
+  <int value="4" label="Unsupported language"/>
+  <int value="5" label="Identical language"/>
+  <int value="6" label="Translation error"/>
+</enum>
+
+<enum name="TranslateInitiationStatus" type="int">
+  <int value="0" label="Completely disabled by prefs"/>
+  <int value="1" label="Completely disabled by switch"/>
+  <int value="2" label="Disabled by user configuration"/>
+  <int value="3" label="Unsupported Language"/>
+  <int value="4" label="Unsupported URL"/>
+  <int value="5" label="Do nothing for similar languages"/>
+  <int value="6" label="Do nothing for accepted languages"/>
+  <int value="7" label="Auto translation by user configuration"/>
+  <int value="8" label="Auto translation by linked from a translated page"/>
+  <int value="9" label="Show infobar"/>
+  <int value="10" label="MIME-type is not supported"/>
+  <int value="11" label="Disabled by Key"/>
+  <int value="12" label="Language in ULP"/>
+  <int value="13" label="Aborted by translate ranker"/>
+</enum>
+
+<enum name="TranslateLanguage" type="int">
+  <int value="0" label="No language code"/>
+  <int value="1" label="Valid language code"/>
+  <int value="2" label="Invalid language code"/>
+</enum>
+
+<enum name="TranslateLanguageDetectionTiming" type="int">
+  <int value="0" label="On time"/>
+  <int value="1" label="Deferred"/>
+  <int value="2" label="Resumed"/>
+</enum>
+
+<enum name="TranslateLanguageVerification" type="int">
+  <int value="0" label="CLD is disabled"/>
+  <int value="1" label="No Content-Language"/>
+  <int value="2" label="CLD can not determine a language"/>
+  <int value="3" label="CLD agrees with Content-Language"/>
+  <int value="4" label="CLD disagrees with Content-Language"/>
+  <int value="5" label="CLD can be trusted"/>
+  <int value="6" label="CLD can complement a sub code"/>
+</enum>
+
+<enum name="TranslateRankerModelStatus" type="int">
+  <int value="0" label="OK"/>
+  <int value="1" label="Download Throttled"/>
+  <int value="2" label="Download Failed"/>
+  <int value="3" label="Parse Failed"/>
+  <int value="4" label="Validation Failed"/>
+</enum>
+
+<enum name="TranslateScheme" type="int">
+  <int value="0" label="http"/>
+  <int value="1" label="https"/>
+  <int value="2" label="unexpected other schemes"/>
+</enum>
+
+<enum name="TrimMemoryLevel" type="int">
+  <summary>
+    The level provided by Android's ComponentCallbacks2.onTrimMemory().
+  </summary>
+  <int value="5" label="TRIM_MEMORY_RUNNING_MODERATE"/>
+  <int value="10" label="TRIM_MEMORY_RUNNING_LOW"/>
+  <int value="15" label="TRIM_MEMORY_RUNNING_CRITICAL"/>
+  <int value="40" label="TRIM_MEMORY_BACKGROUND"/>
+  <int value="60" label="TRIM_MEMORY_MODERATE"/>
+  <int value="80" label="TRIM_MEMORY_COMPLETE"/>
+</enum>
+
+<enum name="UIEventType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Touch released"/>
+  <int value="2" label="Touch pressed"/>
+  <int value="3" label="Touch moved"/>
+  <int value="4" label="Touch stationary"/>
+  <int value="5" label="Touch cancelled"/>
+  <int value="6" label="Gesture scroll begin"/>
+  <int value="7" label="Gesture scroll end"/>
+  <int value="8" label="Gesture scroll update"/>
+  <int value="9" label="Gesture tap"/>
+  <int value="10" label="Gesture tap down"/>
+  <int value="11" label="Gesture finger down"/>
+  <int value="12" label="Gesture finger up"/>
+  <int value="13" label="Gesture double tap"/>
+  <int value="14" label="Gesture triple tap"/>
+  <int value="15" label="Gesture two-finger tap"/>
+  <int value="16" label="Gesture pinch begin"/>
+  <int value="17" label="Gesture pinch end"/>
+  <int value="18" label="Gesture pinch update (2 fingers)"/>
+  <int value="19" label="Long press"/>
+  <int value="20" label="Multi-finger swipe (2 fingers)"/>
+  <int value="21" label="Scroll"/>
+  <int value="22" label="Scroll fling start"/>
+  <int value="23" label="Scroll fling cancel"/>
+  <int value="24" label="Multi-finger swipe (3 fingers)"/>
+  <int value="25" label="Multi-finger swipe (4+ fingers)"/>
+  <int value="26" label="Gesture scroll update (2 fingers)"/>
+  <int value="27" label="Gesture scroll update (3 fingers)"/>
+  <int value="28" label="Gesture scroll update (4+ fingers)"/>
+  <int value="29" label="Gesture pinch update (3 fingers)"/>
+  <int value="30" label="Gesture pinch update (4+ fingers)"/>
+  <int value="31" label="Long tap"/>
+  <int value="32" label="Show Press"/>
+  <int value="33" label="Tap Cancel"/>
+  <int value="34" label="Edge swipe"/>
+  <int value="35" label="One-finger swipe"/>
+  <int value="36" label="Tap unconfirmed"/>
+</enum>
+
+<enum name="UmaCleanExitConsistency" type="int">
+  <int value="0" label="Dirty/Dirty (Registry/Local State)"/>
+  <int value="1" label="Dirty/Clean (Registry/Local State)"/>
+  <int value="2" label="Clean/Dirty (Registry/Local State)"/>
+  <int value="3" label="Clean/Clean (Registry/Local State)"/>
+  <int value="4" label="Missing/Dirty (Registry/Local State)"/>
+  <int value="5" label="Missing/Clean (Registry/Local State)"/>
+</enum>
+
+<enum name="UmaEntropySourceType" type="int">
+  <int value="0" label="No entropy source (never hit)"/>
+  <int value="1" label="Low Entropy Source"/>
+  <int value="2" label="High Entropy Source"/>
+</enum>
+
+<enum name="UmaInitSequence" type="int">
+  <int value="0" label="Timer fired first"/>
+  <int value="1" label="Init task completed first"/>
+</enum>
+
+<enum name="UmaMachineIdState" type="int">
+  <int value="0" label="ID generation failed"/>
+  <int value="1" label="No stored value"/>
+  <int value="2" label="Machine ID changed"/>
+  <int value="3" label="Machine ID unchanged"/>
+</enum>
+
+<enum name="UmaUploadResponseStatus" type="int">
+  <int value="0" label="Unknown failure"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="Bad request"/>
+  <int value="3" label="No response"/>
+</enum>
+
+<enum name="UncacheableReason" type="int">
+  <int value="0" label="kNoData"/>
+  <int value="1" label="kPre11PartialResponse"/>
+  <int value="2" label="kNoStrongValidatorOnPartialResponse"/>
+  <int value="3" label="kShortMaxAge"/>
+  <int value="4" label="kExpiresTooSoon"/>
+  <int value="5" label="kHasMustRevalidate"/>
+  <int value="6" label="kNoCache"/>
+  <int value="7" label="kNoStore"/>
+</enum>
+
+<enum name="UniformityTrialGroupNotActive" type="int">
+  <int value="0" label="Invalid"/>
+  <int value="1" label="Group not reported"/>
+  <int value="2" label="Trial was disabled"/>
+  <int value="3" label="Group not reported and trial was disabled"/>
+</enum>
+
+<enum name="UnlockType" type="int">
+  <int value="0" label="Password"/>
+  <int value="1" label="Pin"/>
+</enum>
+
+<enum name="UnPackStatus" type="int">
+  <int value="0" label="No Error"/>
+  <int value="1" label="Archive file not found"/>
+  <int value="2" label="Archive file can not be opened"/>
+  <int value="3" label="Archive can not be opened by extract tool."/>
+  <int value="4" label="File can not be extracted"/>
+  <int value="5" label="Mapped file IO Exception"/>
+  <int value="6" label="Can not get the name of extracted file"/>
+  <int value="7" label="Can not create extracted file on disk"/>
+  <int value="8" label="Can not write the extracted file on disk"/>
+  <int value="9" label="Can not set the extract time to file"/>
+  <int value="10" label="Can not close extracted file"/>
+</enum>
+
+<enum name="UpdateEngineAttemptResult" type="int">
+  <int value="0" label="Update Succeeded"/>
+  <int value="1" label="Internal Error"/>
+  <int value="2" label="Payload Download Error"/>
+  <int value="3" label="Metadata Malformed"/>
+  <int value="4" label="Operation Malformed"/>
+  <int value="5" label="Operation Execution Error"/>
+  <int value="6" label="Metadata Verification Failed"/>
+  <int value="7" label="Payload Verification Failed"/>
+  <int value="8" label="Verification Failed"/>
+  <int value="9" label="Post-install Failed"/>
+  <int value="10" label="Abnormal Termination"/>
+</enum>
+
+<enum name="UpdateEngineCertificateCheckStatus" type="int">
+  <int value="0" label="Valid certificate">
+    The certificate is valid and the same as seen before or the first time we
+    see a certificate.
+  </int>
+  <int value="1" label="Changed certificate">
+    The certificate is valid, but is different than a previously seen
+    certificate for the selected server.
+  </int>
+  <int value="2" label="Certificate check failed">
+    The certificate validation failed.
+  </int>
+</enum>
+
+<enum name="UpdateEngineCheckReaction" type="int">
+  <int value="0" label="Updating"/>
+  <int value="1" label="Ignoring"/>
+  <int value="2" label="Deferring"/>
+  <int value="3" label="Backing Off"/>
+</enum>
+
+<enum name="UpdateEngineCheckResult" type="int">
+  <int value="0" label="Update Available"/>
+  <int value="1" label="No Update Available"/>
+  <int value="2" label="Response Download Error"/>
+  <int value="3" label="Response Parsing Error"/>
+  <int value="4" label="Reboot Pending"/>
+</enum>
+
+<enum name="UpdateEngineConnectionType" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Ethernet"/>
+  <int value="2" label="Wifi"/>
+  <int value="3" label="WiMAX"/>
+  <int value="4" label="Bluetooth"/>
+  <int value="5" label="Cellular"/>
+  <int value="6" label="Tethered (Ethernet)"/>
+  <int value="7" label="Tethered (Wifi)"/>
+</enum>
+
+<enum name="UpdateEngineDownloadErrorCode" type="int">
+  <int value="0" label="Download Error"/>
+  <int value="100" label="Input Malformed (Internal Error)"/>
+  <int value="101" label="Unknown HTTP Status (not 200-599)"/>
+  <int value="400" label="Bad Request (HTTP Status 400)"/>
+  <int value="401" label="Unauthorized (HTTP Status 401)"/>
+  <int value="402" label="Payment Required (HTTP Status 402)"/>
+  <int value="403" label="Forbidden (HTTP Status 403)"/>
+  <int value="404" label="Not Found (HTTP Status 404)"/>
+  <int value="405" label="Method Not Allowed (HTTP Status 405)"/>
+  <int value="406" label="Not Acceptable (HTTP Status 406)"/>
+  <int value="407" label="Proxy Auth Req (HTTP Status 407)"/>
+  <int value="408" label="Request Timeout (HTTP Status 408)"/>
+  <int value="409" label="Conflict (HTTP Status 409)"/>
+  <int value="410" label="Gone (HTTP Status 410)"/>
+  <int value="500" label="Internal Server Error (HTTP Status 500)"/>
+  <int value="501" label="Not Implemented (HTTP Status 501)"/>
+  <int value="502" label="Bad Gateway (HTTP Status 502)"/>
+  <int value="503" label="Service Unavailable (HTTP Status 503)"/>
+  <int value="504" label="Gateway Timeout (HTTP Status 504)"/>
+</enum>
+
+<enum name="UpdateEngineDownloadSource" type="int">
+  <int value="0" label="HTTPS Server"/>
+  <int value="1" label="HTTP Server"/>
+  <int value="2" label="HTTP Peer"/>
+</enum>
+
+<enum name="UpdateEngineDownloadSources" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="HTTPS Server Only"/>
+  <int value="2" label="HTTP Server Only"/>
+  <int value="3" label="HTTP Server, HTTPS Server"/>
+  <int value="4" label="HTTP Peer Only"/>
+  <int value="5" label="HTTP Peer and HTTPS Server"/>
+  <int value="6" label="HTTP Peer and HTTP Server"/>
+  <int value="7" label="HTTP Peer, HTTPS Server, and HTTP Server"/>
+</enum>
+
+<enum name="UpdateEngineErrorCode" type="int">
+  <int value="0" label="kErrorCodeSuccess"/>
+  <int value="1" label="kErrorCodeError"/>
+  <int value="2" label="kErrorCodeOmahaRequestError"/>
+  <int value="3" label="kErrorCodeOmahaResponseHandlerError"/>
+  <int value="4" label="kErrorCodeFilesystemCopierError"/>
+  <int value="5" label="kErrorCodePostinstallRunnerError"/>
+  <int value="6" label="kErrorCodeSetBootableFlagError"/>
+  <int value="7" label="kErrorCodeInstallDeviceOpenError"/>
+  <int value="8" label="kErrorCodeKernelDeviceOpenError"/>
+  <int value="9" label="kErrorCodeDownloadTransferError"/>
+  <int value="10" label="kErrorCodePayloadHashMismatchError"/>
+  <int value="11" label="kErrorCodePayloadSizeMismatchError"/>
+  <int value="12" label="kErrorCodeDownloadPayloadVerificationError"/>
+  <int value="13" label="kErrorCodeDownloadNewPartitionInfoError"/>
+  <int value="14" label="kErrorCodeDownloadWriteError"/>
+  <int value="15" label="kErrorCodeNewRootfsVerificationError"/>
+  <int value="16" label="kErrorCodeNewKernelVerificationError"/>
+  <int value="17" label="kErrorCodeSignedDeltaPayloadExpectedError"/>
+  <int value="18" label="kErrorCodeDownloadPayloadPubKeyVerificationError"/>
+  <int value="19" label="kErrorCodePostinstallBootedFromFirmwareB"/>
+  <int value="20" label="kErrorCodeDownloadStateInitializationError"/>
+  <int value="21" label="kErrorCodeDownloadInvalidMetadataMagicString"/>
+  <int value="22" label="kErrorCodeDownloadSignatureMissingInManifest"/>
+  <int value="23" label="kErrorCodeDownloadManifestParseError"/>
+  <int value="24" label="kErrorCodeDownloadMetadataSignatureError"/>
+  <int value="25" label="kErrorCodeDownloadMetadataSignatureVerificationError"/>
+  <int value="26" label="kErrorCodeDownloadMetadataSignatureMismatch"/>
+  <int value="27" label="kErrorCodeDownloadOperationHashVerificationError"/>
+  <int value="28" label="kErrorCodeDownloadOperationExecutionError"/>
+  <int value="29" label="kErrorCodeDownloadOperationHashMismatch"/>
+  <int value="30" label="kErrorCodeOmahaRequestEmptyResponseError"/>
+  <int value="31" label="kErrorCodeOmahaRequestXMLParseError"/>
+  <int value="32" label="kErrorCodeDownloadInvalidMetadataSize"/>
+  <int value="33" label="kErrorCodeDownloadInvalidMetadataSignature"/>
+  <int value="34" label="kErrorCodeOmahaRequestResponseInvalid"/>
+  <int value="35" label="kErrorCodeOmahaUpdateIgnoredPerPolicy"/>
+  <int value="36" label="kErrorCodeOmahaUpdateDeferredPerPolicy"/>
+  <int value="37" label="kErrorCodeOmahaErrorInHTTPResponse"/>
+  <int value="38" label="kErrorCodeDownloadOperationHashMissingError"/>
+  <int value="39" label="kErrorCodeDownloadMetadataSignatureMissingError"/>
+  <int value="40" label="kErrorCodeOmahaUpdateDeferredForBackoff"/>
+  <int value="41" label="kErrorCodePostinstallPowerwashError"/>
+  <int value="42" label="kErrorCodeUpdateCanceledByChannelChange"/>
+  <int value="43" label="kErrorCodePostinstallFirmwareRONotUpdatable"/>
+  <int value="44" label="kErrorCodeUnsupportedMajorPayloadVersion"/>
+  <int value="45" label="kErrorCodeUnsupportedMinorPayloadVersion"/>
+  <int value="46" label="kErrorCodeOmahaRequestXMLHasEntityDecl"/>
+  <int value="47" label="kErrorCodeFilesystemVerifierError"/>
+  <int value="48" label="kErrorCodeUserCanceled"/>
+  <int value="49" label="kErrorCodeNonCriticalUpdateInOOBE"/>
+</enum>
+
+<enum name="UpdateEngineInstallDateProvisioningSource" type="int">
+  <int value="0" label="Omaha Response"/>
+  <int value="1" label="OOBE Marker"/>
+</enum>
+
+<enum name="UpdateEnginePayloadFormat" type="int">
+  <int value="0" label="Full"/>
+  <int value="1" label="Delta"/>
+  <int value="2" label="Forced Full"/>
+</enum>
+
+<enum name="UpdatePasswordSubmissionEvent" type="int">
+  <int value="0" label="NO_ACCOUNTS_CLICKED_UPDATE"/>
+  <int value="1" label="NO_ACCOUNTS_CLICKED_NOPE"/>
+  <int value="2" label="NO_ACCOUNTS_NO_INTERACTION"/>
+  <int value="3" label="ONE_ACCOUNT_CLICKED_UPDATE"/>
+  <int value="4" label="ONE_ACCOUNT_CLICKED_NOPE"/>
+  <int value="5" label="ONE_ACCOUNT_NO_INTERACTION"/>
+  <int value="6" label="MULTIPLE_ACCOUNTS_CLICKED_UPDATE"/>
+  <int value="7" label="MULTIPLE_ACCOUNTS_CLICKED_NOPE"/>
+  <int value="8" label="MULTIPLE_ACCOUNTS_NO_INTERACTION"/>
+  <int value="9" label="PASSWORD_OVERRIDDEN_CLICKED_UPDATE"/>
+  <int value="10" label="PASSWORD_OVERRIDDEN_CLICKED_NOPE"/>
+  <int value="11" label="PASSWORD_OVERRIDDEN_NO_INTERACTION"/>
+</enum>
+
+<enum name="UpdatePolicy" type="int">
+  <int value="0" label="UPDATES_DISABLED"/>
+  <int value="1" label="AUTOMATIC_UPDATES"/>
+  <int value="2" label="MANUAL_UPDATES_ONLY"/>
+  <int value="3" label="AUTO_UPDATES_ONLY"/>
+</enum>
+
+<enum name="UrlResolutionResult" type="int">
+  <int value="0" label="Absolute URL"/>
+  <int value="1" label="Resolutions Differ"/>
+  <int value="2" label="Resolutions Agree"/>
+</enum>
+
+<enum name="URLSchemeForHistogram" type="int">
+  <int value="0" label="kUnknownURLScheme"/>
+  <int value="1" label="kMissingURLScheme"/>
+  <int value="2" label="kHttpURLScheme"/>
+  <int value="3" label="kHttpsURLScheme"/>
+  <int value="4" label="kFtpURLScheme"/>
+  <int value="5" label="kChromeExtensionURLScheme"/>
+  <int value="6" label="kJavascriptURLScheme"/>
+  <int value="7" label="kFileURLScheme"/>
+  <int value="8" label="kBlobURLScheme"/>
+  <int value="9" label="kDataURLScheme"/>
+  <int value="10" label="kFileSystemScheme"/>
+</enum>
+
+<enum name="UsedInDraw" type="int">
+  <int value="0" label="Was not used in draw"/>
+  <int value="1" label="Was used in draw"/>
+</enum>
+
+<enum name="UserCertContentDisposition" type="int">
+  <int value="0" label="No Content-Disposition"/>
+  <int value="1" label="Content-Disposition"/>
+</enum>
+
+<enum name="UserChannels" type="int">
+  <int value="-1" label="Unknown"/>
+  <int value="0" label="Canary"/>
+  <int value="1" label="Dev"/>
+  <int value="2" label="Beta"/>
+  <int value="3" label="Stable"/>
+</enum>
+
+<enum name="UserGestureRequirement" type="int">
+  <int value="0" label="Required and available"/>
+  <int value="1" label="Required and not available"/>
+  <int value="2" label="Not required and available"/>
+  <int value="3" label="Not required and not available"/>
+</enum>
+
+<enum name="UserInitiatedEvent" type="int">
+  <int value="0" label="WiFi Scan"/>
+</enum>
+
+<enum name="UserPodsDisplay" type="int">
+  <int value="0" label="Enabled by local settings"/>
+  <int value="1" label="Enabled by domain policy"/>
+  <int value="2" label="Disabled by local settings"/>
+  <int value="3" label="Disabled by domain policy"/>
+</enum>
+
+<enum name="UserSelectableSyncType" type="int">
+  <int value="0" label="Bookmarks"/>
+  <int value="1" label="Preferences"/>
+  <int value="2" label="Passwords"/>
+  <int value="3" label="Autofill"/>
+  <int value="4" label="Themes"/>
+  <int value="5" label="Omnibox History"/>
+  <int value="6" label="Extensions"/>
+  <int value="7" label="Open Tabs"/>
+  <int value="8" label="Apps"/>
+</enum>
+
+<enum name="UserType" type="int">
+  <int value="0" label="Regular"/>
+  <int value="1" label="Guest"/>
+  <int value="2" label="Retail Mode"/>
+  <int value="3" label="Public Account"/>
+  <int value="4" label="Locally Managed"/>
+  <int value="5" label="Kiosk App"/>
+  <int value="6" label="Regular Supervised"/>
+</enum>
+
+<enum name="V8CodeCacheRejectReason" type="int">
+  <int value="1" label="MAGIC_NUMBER_MISMATCH">
+    Reject due to magic number mismatch
+  </int>
+  <int value="2" label="VERSION_MISMATCH">
+    Reject due to version hash mismatch
+  </int>
+  <int value="3" label="SOURCE_MISMATCH">
+    Reject due to source hash mismatch
+  </int>
+  <int value="4" label="CPU_FEATURES_MISMATCH">
+    Reject due to CPU features mismatch
+  </int>
+  <int value="5" label="FLAGS_MISMATCH">Reject due to flags hash mismatch</int>
+  <int value="6" label="CHECKSUM_MISMATCH">Reject due to checksum mismatch</int>
+  <int value="7" label="INVALID_HEADER">Invalid header</int>
+</enum>
+
+<enum name="V8DebugFeature" type="int">
+  <int value="1" label="kActive">Debugger has been active</int>
+  <int value="2" label="kBreakPoint">
+    Debugger has been used to set break points
+  </int>
+  <int value="3" label="kStepping">
+    Debugger has been used to step through Javascript code
+  </int>
+  <int value="4" label="kHeapSnapshot">
+    Heap profiler has been used to take heap snapshots
+  </int>
+  <int value="5" label="kAllocationTracking">
+    Heap profiler has been used to track allocations
+  </int>
+  <int value="6" label="kProfiler">
+    Cpu profiler has been used to profile execution
+  </int>
+  <int value="7" label="kLiveEdit">
+    LiveEdit has been used to replace Javascript code on-the-fly
+  </int>
+</enum>
+
+<enum name="V8InitializerLoadV8SnapshotResult" type="int">
+  <int value="0" label="SUCCESS">Load succeeded</int>
+  <int value="1" label="FAILED_OPEN">Failure to open snapshot file</int>
+  <int value="2" label="FAILED_MAP">Failed to map snapshot</int>
+  <int value="3" label="FAILED_VERIFY">Failed to verify snapshot</int>
+</enum>
+
+<enum name="V8InitializerOpenV8FileResult" type="int">
+  <int value="0" label="OPENED">Opened without issue</int>
+  <int value="1" label="OPENED_RETRY">Opened after one or more retries</int>
+  <int value="2" label="FAILED_IN_USE">Failed because file in use</int>
+  <int value="3" label="FAILED_OTHER">Failed for other reason</int>
+</enum>
+
+<enum name="VAJDADecoderFailure" type="int">
+  <int value="0" label="VAAPI_ERROR"/>
+</enum>
+
+<enum name="ValidateMenuItemSelectorType" type="int">
+  <int value="0"
+      label="The menu items' associated action is an unknown selector."/>
+  <int value="1" label="The menu item's associated action is -newProfile."/>
+  <int value="2" label="The menu item's associated action is -editProfile."/>
+  <int value="3"
+      label="The menu item's associated action is -switchToProfileFromMenu."/>
+  <int value="4"
+      label="The menu item's associated action is -switchToProfileFromDock."/>
+</enum>
+
+<enum name="ValidationFailures" type="int">
+  <int value="0" label="DBus"/>
+  <int value="1" label="Load Key"/>
+</enum>
+
+<enum name="VariationSeedSignature" type="int">
+  <int value="0" label="Signature Missing"/>
+  <int value="1" label="Signature Decode Failed"/>
+  <int value="2" label="Invalid Signature"/>
+  <int value="3" label="Invalid Signature for Seed"/>
+  <int value="4" label="Valid Signature for Seed"/>
+</enum>
+
+<enum name="VariationsFirstRunResult" type="int">
+  <int value="0" label="Seed imported successfully"/>
+  <int value="1" label="Seed import failed - no callback (Obsolete)"/>
+  <int value="2" label="Seed import failed - no first run seed"/>
+  <int value="3" label="Seed import failed - failed to store seed"/>
+</enum>
+
+<enum name="VariationsFirstRunSeedFetchResult" type="int">
+  <int value="-3" label="UnknownHostException fetching seed"/>
+  <int value="-2" label="SocketTimeoutException fetching seed"/>
+  <int value="-1" label="IOException fetching seed"/>
+  <int value="200" label="200: OK"/>
+  <int value="201" label="201: Created"/>
+  <int value="202" label="202: Accepted"/>
+  <int value="203" label="203: Non-Authoritative Information"/>
+  <int value="204" label="204: No Content"/>
+  <int value="205" label="205: Reset Content"/>
+  <int value="206" label="206: Partial Content"/>
+  <int value="300" label="300: Multiple Choices"/>
+  <int value="301" label="301: Moved Permanently"/>
+  <int value="302" label="302: Found"/>
+  <int value="303" label="303: See Other"/>
+  <int value="304" label="304: Not Modified"/>
+  <int value="305" label="305: Use Proxy"/>
+  <int value="306" label="306: (Unused)"/>
+  <int value="307" label="307: Temporary Redirect"/>
+  <int value="400" label="400: Bad Request"/>
+  <int value="401" label="401: Unauthorized"/>
+  <int value="402" label="402: Payment Required"/>
+  <int value="403" label="403: Forbidden"/>
+  <int value="404" label="404: Not Found"/>
+  <int value="405" label="405: Method Not Allowed"/>
+  <int value="406" label="406: Not Acceptable"/>
+  <int value="407" label="407: Proxy Authentication Required"/>
+  <int value="408" label="408: Request Timeout"/>
+  <int value="409" label="409: Conflict"/>
+  <int value="410" label="410: Gone"/>
+  <int value="411" label="411: Length Required"/>
+  <int value="412" label="412: Precondition Failed"/>
+  <int value="413" label="413: Request Entity Too Large"/>
+  <int value="414" label="414: Request-URI Too Long"/>
+  <int value="415" label="415: Unsupported Media Type"/>
+  <int value="416" label="416: Requested Range Not Satisfiable"/>
+  <int value="417" label="417: Expectation Failed"/>
+  <int value="500" label="500: Internal Server Error"/>
+  <int value="501" label="501: Not Implemented"/>
+  <int value="502" label="502: Bad Gateway"/>
+  <int value="503" label="503: Service Unavailable"/>
+  <int value="504" label="504: Gateway Timeout"/>
+  <int value="505" label="505: HTTP Version Not Supported"/>
+</enum>
+
+<enum name="VariationsPermanentConsistencyCountryResult" type="int">
+  <int value="0" label="Saved pref missing and no country code in seed"/>
+  <int value="1" label="Saved pref missing and country code in seed"/>
+  <int value="2" label="Saved pref invalid and no country code in seed"/>
+  <int value="3" label="Saved pref invalid and country code in seed"/>
+  <int value="4"
+      label="Saved pref present for current version and no country code in
+             seed"/>
+  <int value="5"
+      label="Saved pref present for different version and no country code in
+             seed"/>
+  <int value="6"
+      label="Saved pref present for current version and country code in seed
+             matches"/>
+  <int value="7"
+      label="Saved pref present for current version and country code in seed
+             is different"/>
+  <int value="8"
+      label="Saved pref present for different version and country code in
+             seed matches"/>
+  <int value="9"
+      label="Saved pref present for different version and country code in
+             seed is different"/>
+</enum>
+
+<enum name="VariationsResourceRequestsAllowedState" type="int">
+  <int value="0" label="Requests allowed"/>
+  <int value="1" label="Requests not allowed (Obsolete 11/2013)"/>
+  <int value="2" label="Notified that requests became allowed"/>
+  <int value="3" label="Requests not allowed: EULA not accepted"/>
+  <int value="4" label="Requests not allowed: network down"/>
+  <int value="5" label="Requests not allowed: disabled by command line"/>
+</enum>
+
+<enum name="VariationsSeedDateChange" type="int">
+  <int value="0" label="No previous date"/>
+  <int value="1" label="New date older than old date"/>
+  <int value="2" label="Same day"/>
+  <int value="3" label="Day changed"/>
+</enum>
+
+<enum name="VariationsSeedEmpty" type="int">
+  <int value="0" label="Seed Not Empty"/>
+  <int value="1" label="Seed Empty"/>
+  <int value="2" label="Seed Corrupt (Obsolete)"/>
+  <int value="3" label="Seed Signature Verification Failed"/>
+  <int value="4" label="Seed Corrupt Base64 Data"/>
+  <int value="5" label="Seed Corrupt Protobuf"/>
+  <int value="6" label="Seed Corrupt Gzip Data"/>
+</enum>
+
+<enum name="VariationsSeedExpiry" type="int">
+  <int value="0" label="Not Expired"/>
+  <int value="1" label="Fetch Time Missing"/>
+  <int value="2" label="Expired"/>
+</enum>
+
+<enum name="VariationsSeedStoreResult" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Failed - Empty Seed"/>
+  <int value="2" label="Failed - Parse Error"/>
+  <int value="3" label="Failed - Signature Mismatch"/>
+  <int value="4" label="Failed - Gzip Compress Error"/>
+  <int value="5" label="Delta Count"/>
+  <int value="6" label="Failed - Delta: Read Seed"/>
+  <int value="7" label="Failed - Delta: Apply"/>
+  <int value="8" label="Failed - Delta: Store Seed"/>
+  <int value="9" label="Failed - Gzip Uncompress Error"/>
+  <int value="10" label="Failed - Empty Gzip Contents"/>
+  <int value="11" label="Failed - Unsupported Seed Format"/>
+</enum>
+
+<enum name="VaryType" type="int">
+  <int value="0" label="No Vary header present"/>
+  <int value="1" label="Vary:User-Agent"/>
+  <int value="2" label="Other"/>
+</enum>
+
+<enum name="VAVDADecoderFailure" type="int">
+  <int value="0" label="VAAPI_ERROR"/>
+</enum>
+
+<enum name="VAVDAH264DecoderFailure" type="int">
+  <int value="0" label="FRAME_MBS_ONLY_FLAG_NOT_ONE"/>
+  <int value="1" label="GAPS_IN_FRAME_NUM"/>
+  <int value="2" label="MID_STREAM_RESOLUTION_CHANGE"/>
+  <int value="3" label="INTERLACED_STREAM"/>
+  <int value="4" label="VAAPI_ERROR"/>
+</enum>
+
+<enum name="VAVEAEncoderFailure" type="int">
+  <int value="0" label="VAAPI_ERROR"/>
+</enum>
+
+<enum name="VerifyWakeOnWiFiSettingsResult" type="int">
+  <summary>
+    The result of NIC wake on WiFi settings verification. Corresponds to
+    VerifyWakeOnWiFiSettingsResult in shill/metrics.h
+  </summary>
+  <int value="0" label="Success"/>
+  <int value="1" label="Failure"/>
+</enum>
+
+<enum name="VideoCaptureEvent" type="int">
+  <int value="0" label="Starting video capture"/>
+  <int value="1" label="Stopping video capture normally"/>
+  <int value="2" label="Stopping video capture due to error"/>
+  <int value="3" label="Video capture device stopped. No frames produced."/>
+  <int value="4" label="Desktop/Tab capture stopped. No frames produced."/>
+</enum>
+
+<enum name="VideoCodec" type="int">
+  <int value="0" label="kUnknownVideoCodec"/>
+  <int value="1" label="kCodecH264"/>
+  <int value="2" label="kCodecVC1"/>
+  <int value="3" label="kCodecMPEG2"/>
+  <int value="4" label="kCodecMPEG4"/>
+  <int value="5" label="kCodecTheora"/>
+  <int value="6" label="kCodecVP8"/>
+  <int value="7" label="kCodecVP9"/>
+  <int value="8" label="kCodecHEVC"/>
+</enum>
+
+<enum name="VideoCodecProfile" type="int">
+  <int value="0" label="H.264 Baseline"/>
+  <int value="1" label="H.264 Main"/>
+  <int value="2" label="H.264 Extended"/>
+  <int value="3" label="H.264 High"/>
+  <int value="4" label="H.264 High10"/>
+  <int value="5" label="H.264 High422"/>
+  <int value="6" label="H.264 High444"/>
+  <int value="7" label="H.264 ScalableBaseline"/>
+  <int value="8" label="H.264 ScalableHigh"/>
+  <int value="9" label="H.264 StereoHigh"/>
+  <int value="10" label="H.264 MultiviewHigh"/>
+  <int value="11" label="VP8"/>
+  <int value="12" label="VP9 Profile0"/>
+  <int value="13" label="VP9 Profile1"/>
+  <int value="14" label="VP9 Profile2"/>
+  <int value="15" label="VP9 Profile3"/>
+  <int value="16" label="HEVC Main"/>
+  <int value="17" label="HEVC Main10"/>
+  <int value="18" label="HEVC Main Still-picture"/>
+</enum>
+
+<enum name="VideoDecodeAcceleratorError" type="int">
+  <int value="1" label="Illegal state">
+    An operation was attempted during an incompatible decoder state.
+  </int>
+  <int value="2" label="Invalid argument">
+    Invalid argument was passed to an API method.
+  </int>
+  <int value="3" label="Unreadable input">Encoded input is unreadable.</int>
+  <int value="4" label="Platform failure">
+    A failure occurred at the browser layer or lower. Examples of such failures
+    include GPU hardware failures, GPU driver failures, GPU library failures,
+    browser programming errors, and so on.
+  </int>
+</enum>
+
+<enum name="VideoFormat" type="int">
+  <obsolete>
+    Deprecated as of 05/2015. Substituted by VideoFramePixelFormat.
+  </obsolete>
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="YV12"/>
+  <int value="2" label="I420"/>
+  <int value="3" label="YV16"/>
+  <int value="4" label="YV12A"/>
+  <int value="5" label="YV24"/>
+  <int value="6" label="NV12"/>
+  <int value="7" label="ARGB"/>
+  <int value="8" label="HOLE"/>
+  <int value="9" label="NATIVE_TEXTURE"/>
+</enum>
+
+<enum name="VideoFrameColorSpace" type="int">
+  <int value="0" label="Unspecified, usually Rec 601"/>
+  <int value="1" label="Jpeg"/>
+  <int value="2" label="HD Rec 709"/>
+  <int value="3" label="SD Rec 601"/>
+</enum>
+
+<enum name="VideoFramePixelFormat" type="int">
+  <obsolete>
+    Deprecated as of 08/2015. Substituted by VideoPixelFormatUnion.
+  </obsolete>
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="YV12"/>
+  <int value="2" label="I420"/>
+  <int value="3" label="YV16"/>
+  <int value="4" label="YV12A"/>
+  <int value="5" label="YV24"/>
+  <int value="6" label="NV12 (Mac only)"/>
+  <int value="7" label="ARGB"/>
+  <int value="8" label="xRGB"/>
+  <int value="9" label="UYVY"/>
+</enum>
+
+<enum name="VideoPixelFormat" type="int">
+  <obsolete>
+    Deprecated as of 05/2015. Substituted by VideoFormat.
+  </obsolete>
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="YV12"/>
+  <int value="2" label="YV16"/>
+  <int value="3" label="I420"/>
+  <int value="4" label="YV12A"/>
+  <int value="5" label="HOLE"/>
+  <int value="6" label="NATIVE_TEXTURE"/>
+  <int value="7" label="YV12J"/>
+  <int value="8" label="NV12"/>
+  <int value="9" label="YV24"/>
+  <int value="10" label="ARGB"/>
+  <int value="11" label="YV12HD"/>
+</enum>
+
+<enum name="VideoPixelFormatUnion" type="int">
+  <int value="0" label="UNKNOWN"/>
+  <int value="1" label="I420"/>
+  <int value="2" label="YV12"/>
+  <int value="3" label="YV16"/>
+  <int value="4" label="YV12A"/>
+  <int value="5" label="YV24"/>
+  <int value="6" label="NV12"/>
+  <int value="7" label="NV21"/>
+  <int value="8" label="UYVY"/>
+  <int value="9" label="YUY2"/>
+  <int value="10" label="ARGB"/>
+  <int value="11" label="XRGB"/>
+  <int value="12" label="RGB24"/>
+  <int value="13" label="RGB32"/>
+  <int value="14" label="MJPEG"/>
+  <int value="15" label="MT21"/>
+  <int value="16" label="YUV420P9"/>
+  <int value="17" label="YUV420P10"/>
+  <int value="18" label="YUV422P9"/>
+  <int value="19" label="YUV422P10"/>
+  <int value="20" label="YUV444P9"/>
+  <int value="21" label="YUV444P10"/>
+  <int value="22" label="YUV420P12"/>
+  <int value="23" label="YUV422P12"/>
+  <int value="24" label="YUV444P12"/>
+  <int value="25" label="Y8"/>
+  <int value="26" label="Y16"/>
+</enum>
+
+<enum name="VideoPlayerCastAPIExtensionStatus" type="int">
+  <int value="0" label="Skipped (Cast extension is unavailable)"/>
+  <int value="1" label="Installation failed"/>
+  <int value="2" label="Load failed"/>
+  <int value="3" label="Loaded successfully (newly installed)"/>
+  <int value="4" label="Loaded successfully (already installed)"/>
+</enum>
+
+<enum name="VideoPlayerPlayType" type="int">
+  <int value="0" label="Local playback"/>
+  <int value="1" label="Play on cast device"/>
+</enum>
+
+<enum name="VideoRotation" type="int">
+  <int value="0" label="VIDEO_ROTATION_0"/>
+  <int value="1" label="VIDEO_ROTATION_90"/>
+  <int value="2" label="VIDEO_ROTATION_180"/>
+  <int value="3" label="VIDEO_ROTATION_270"/>
+</enum>
+
+<enum name="ViewFileType" type="int">
+  <int value="0" label="other"/>
+  <int value="1" label=".3ga"/>
+  <int value="2" label=".3gp"/>
+  <int value="3" label=".aac"/>
+  <int value="4" label=".alac"/>
+  <int value="5" label=".asf"/>
+  <int value="6" label=".avi"/>
+  <int value="7" label=".bmp"/>
+  <int value="8" label=".csv"/>
+  <int value="9" label=".doc"/>
+  <int value="10" label=".docx"/>
+  <int value="11" label=".flac"/>
+  <int value="12" label=".gif"/>
+  <int value="13" label=".jpeg"/>
+  <int value="14" label=".jpg"/>
+  <int value="15" label=".log"/>
+  <int value="16" label=".m3u"/>
+  <int value="17" label=".m3u8"/>
+  <int value="18" label=".m4a"/>
+  <int value="19" label=".m4v"/>
+  <int value="20" label=".mid"/>
+  <int value="21" label=".mkv"/>
+  <int value="22" label=".mov"/>
+  <int value="23" label=".mp3"/>
+  <int value="24" label=".mp4"/>
+  <int value="25" label=".mpg"/>
+  <int value="26" label=".odf"/>
+  <int value="27" label=".odp"/>
+  <int value="28" label=".ods"/>
+  <int value="29" label=".odt"/>
+  <int value="30" label=".oga"/>
+  <int value="31" label=".ogg"/>
+  <int value="32" label=".ogv"/>
+  <int value="33" label=".pdf"/>
+  <int value="34" label=".png"/>
+  <int value="35" label=".ppt"/>
+  <int value="36" label=".pptx"/>
+  <int value="37" label=".ra"/>
+  <int value="38" label=".ram"/>
+  <int value="39" label=".rar"/>
+  <int value="40" label=".rm"/>
+  <int value="41" label=".rtf"/>
+  <int value="42" label=".wav"/>
+  <int value="43" label=".webm"/>
+  <int value="44" label=".webp"/>
+  <int value="45" label=".wma"/>
+  <int value="46" label=".wmv"/>
+  <int value="47" label=".xls"/>
+  <int value="48" label=".xlsx"/>
+  <int value="49" label=".crdownload"/>
+  <int value="50" label=".crx"/>
+  <int value="51" label=".dmg"/>
+  <int value="52" label=".exe"/>
+  <int value="53" label=".html"/>
+  <int value="54" label=".htm"/>
+  <int value="55" label=".jar"/>
+  <int value="56" label=".ps"/>
+  <int value="57" label=".torrent"/>
+  <int value="58" label=".txt"/>
+  <int value="59" label=".zip"/>
+</enum>
+
+<enum name="VisibleTab" type="int">
+  <int value="0" label="Custom Tab"/>
+  <int value="1" label="Chrome Tab"/>
+</enum>
+
+<enum name="VPNDriver" type="int">
+  <int value="0" label="OpenVPN"/>
+  <int value="1" label="L2TP/IPSec"/>
+</enum>
+
+<enum name="VPNRemoteAuthenticationType" type="int">
+  <int value="0" label="OpenVPN Default"/>
+  <int value="1" label="OpenVPN Certificate"/>
+  <int value="2" label="L2TP/IPSec Default"/>
+  <int value="3" label="L2TP/IPSec Certificate"/>
+  <int value="4" label="L2TP/IPSec PSK"/>
+</enum>
+
+<enum name="VPNUserAuthenticationType" type="int">
+  <int value="0" label="OpenVPN None"/>
+  <int value="1" label="OpenVPN Certificate"/>
+  <int value="2" label="OpenVPN Username/Password"/>
+  <int value="3" label="OpenVPN Username/Password/OTP"/>
+  <int value="4" label="L2TP/IPSec None"/>
+  <int value="5" label="L2TP/IPSec Certificate"/>
+  <int value="6" label="L2TP/IPSec Username/Password"/>
+</enum>
+
+<enum name="VRViewerType" type="int">
+  <int value="0" label="UNKNOWN_TYPE"/>
+  <int value="1" label="CARDBOARD"/>
+  <int value="2" label="DAYDREAM"/>
+</enum>
+
+<enum name="VTVDAInitializationFailureType" type="int">
+  <int value="0" label="Successfully Initialized"/>
+  <int value="1" label="Framework Load Error"/>
+  <int value="2" label="Hardware Session Error"/>
+  <int value="3" label="Software Session Error"/>
+</enum>
+
+<enum name="VTVDASessionFailureType" type="int">
+  <int value="0" label="Successfully Initialized"/>
+  <int value="1" label="Platform Error"/>
+  <int value="2" label="Invalid Stream"/>
+  <int value="3" label="Unsupported Stream Parameters"/>
+  <int value="4" label="Decode Error"/>
+  <int value="5" label="Unsupported Stream"/>
+</enum>
+
+<enum name="WakeOnWiFiFeaturesEnabledState" type="int">
+  <summary>
+    The wake on WiFi features enabled in shill, which come from
+    WakeOnWiFiFeaturesEnabledState in shill/metrics.h
+  </summary>
+  <int value="0" label="None"/>
+  <int value="1" label="Packet"/>
+  <int value="2" label="DarkConnect"/>
+  <int value="3" label="Packet and DarkConnect"/>
+</enum>
+
+<enum name="WakeOnWiFiThrottled" type="int">
+  <summary>
+    Whether or not wake on WiFi was disabled during suspend because of excessive
+    dark resume wakes. Corresponds to WakeOnWiFiThrottled in shill/metrics.h
+  </summary>
+  <int value="0"
+      label="False (Wake on WiFi was not disabled due to excessive dark
+             resume wakes"/>
+  <int value="1"
+      label="True (Wake on WiFi was disabled due to exessive dark resume
+             wakes"/>
+</enum>
+
+<enum name="WakeReasonReceivedBeforeOnDarkResume" type="int">
+  <int value="0" label="Wake reason not received before OnDarkResume"/>
+  <int value="1" label="Wake reason received before OnDarkResume"/>
+</enum>
+
+<enum name="WalletApiCall" type="int">
+  <int value="0" label="Unknown API call"/>
+  <int value="1" label="Accept Legal Documents"/>
+  <int value="2" label="Authenticate Instrument"/>
+  <int value="3" label="Get Full Wallet"/>
+  <int value="4" label="Get Wallet Items"/>
+  <int value="5" label="Save to Wallet"/>
+</enum>
+
+<enum name="WalletErrors" type="int">
+  <int value="0" label="Baseline: Issued request"/>
+  <int value="1" label="Fatal error (deprecated)"/>
+  <int value="2" label="Malformed response"/>
+  <int value="3" label="Network error"/>
+  <int value="4" label="Bad request"/>
+  <int value="5" label="Internal error"/>
+  <int value="6" label="Invalid params"/>
+  <int value="7" label="Service unavailable"/>
+  <int value="8" label="Spending limit exceeded"/>
+  <int value="9" label="Unsupported API version"/>
+  <int value="10" label="Unknown error"/>
+  <int value="11" label="Unsupported merchant"/>
+  <int value="12" label="Unsupported buyer legal address"/>
+  <int value="13" label="Unverified know your customer status"/>
+</enum>
+
+<enum name="WalletRequiredActions" type="int">
+  <int value="0" label="Baseline: Issued request"/>
+  <int value="1" label="Unknown"/>
+  <int value="2" label="GAIA auth"/>
+  <int value="3" label="Passive GAIA auth"/>
+  <int value="4" label="Set up Wallet"/>
+  <int value="5" label="Accept ToS"/>
+  <int value="6" label="Update expiration date"/>
+  <int value="7" label="Upgrade min address"/>
+  <int value="8" label="Choose another instrument or address"/>
+  <int value="9" label="Verify CVV"/>
+  <int value="10" label="Invalid form field"/>
+  <int value="11" label="Require phone number"/>
+</enum>
+
+<enum name="WallpaperLayout" type="int">
+  <int value="0" label="Center"/>
+  <int value="1" label="Center Cropped"/>
+  <int value="2" label="Stretch"/>
+  <int value="3" label="Tile"/>
+</enum>
+
+<enum name="WallpaperType" type="int">
+  <int value="0" label="Daily (unused)"/>
+  <int value="1" label="Customized"/>
+  <int value="2" label="Default"/>
+  <int value="3" label="Unknown (unused)"/>
+  <int value="4" label="Online"/>
+  <int value="5" label="Policy"/>
+</enum>
+
+<enum name="WarmupStateOnLaunch" type="int">
+  <int value="0" label="No Session, No Warmup"/>
+  <int value="1" label="No Session, Warmup"/>
+  <int value="2" label="Session, No Warmup, Warmup called from another UID"/>
+  <int value="3" label="Session, No Warmup"/>
+  <int value="4" label="Session, Warmup"/>
+</enum>
+
+<enum name="WebApkInstallEvent" type="int">
+  <int value="0" label="Infobar is ignored"/>
+  <int value="1" label="Infobar is dismissed before installation"/>
+  <int value="2" label="Infobar is dismissed during installation"/>
+  <int value="3" label="Success"/>
+  <int value="4" label="Failed"/>
+</enum>
+
+<enum name="WebApkInstallInfoBarShown" type="int">
+  <int value="0" label="WebApk infobar shown from the app banner"/>
+  <int value="1" label="WebApk infobar shown from the add to homescreen menu"/>
+</enum>
+
+<enum name="WebApkInstallSource" type="int">
+  <int value="0" label="Installation started from the app banner"/>
+  <int value="1" label="Installation started from the add to homescreen menu"/>
+</enum>
+
+<enum name="WebApkUserAction" type="int">
+  <int value="0" label="Open a previously installed WebAPK"/>
+  <int value="1" label="Dismiss to open a previously installed WebAPK"/>
+  <int value="2" label="Open a newly installed WebAPK"/>
+  <int value="3" label="Dismiss to open a newly installed WebAPK"/>
+</enum>
+
+<enum name="WebAudioAutoplayStatus" type="int">
+  <int value="0" label="The AudioContext failed to autoplay"/>
+  <int value="1" label="Failed to autoplay but start() called on user gesture"/>
+  <int value="2" label="The AudioContext successfully autoplayed"/>
+</enum>
+
+<enum name="WebBluetoothConnectGATTOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Device no longer in range"/>
+  <int value="2" label="Unknown Error"/>
+  <int value="3" label="In Progress"/>
+  <int value="4" label="Failed"/>
+  <int value="5" label="Auth Failed"/>
+  <int value="6" label="Auth Canceled"/>
+  <int value="7" label="Auth Rejected"/>
+  <int value="8" label="Auth Timeout"/>
+  <int value="9" label="Unsupported Device"/>
+  <int value="10" label="Invalid Attribute Length"/>
+  <int value="11" label="Congested Connection"/>
+  <int value="12" label="Insufficient Encryption"/>
+  <int value="13" label="Invalid Offset"/>
+  <int value="14" label="Read Not Permitted"/>
+  <int value="15" label="Unsupported Request"/>
+  <int value="16" label="Write Not Permitted"/>
+</enum>
+
+<enum name="WebBluetoothFunction" type="int">
+  <int value="0" label="requestDevice()"/>
+  <int value="1" label="RemoteGATTServer.connect()"/>
+  <int value="2" label="RemoteGATTServer.getPrimaryService()"/>
+  <int value="3" label="RemoteGATTService.getCharacteristic()"/>
+  <int value="4" label="RemoteGATTCharacteristic.readValue()"/>
+  <int value="5" label="RemoteGATTCharacteristic.writeValue()"/>
+  <int value="6" label="RemoteGATTCharacteristic.startNotifications()"/>
+  <int value="7" label="RemoteGATTCharacteristic.stopNotifications()"/>
+  <int value="8" label="RemoteGATTServer.disconnect()"/>
+  <int value="9" label="RemoteGATTService.getCharacteristics()"/>
+  <int value="10" label="RemoteGATTServer.getPrimaryServices()"/>
+</enum>
+
+<enum name="WebBluetoothGATTOperationOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="No Device"/>
+  <int value="2" label="No Service"/>
+  <int value="3" label="No Characteristic"/>
+  <int value="4" label="No Descriptor"/>
+  <int value="5" label="Unknown"/>
+  <int value="6" label="Failed"/>
+  <int value="7" label="In Progress"/>
+  <int value="8" label="Invalid Length"/>
+  <int value="9" label="Not Permitted"/>
+  <int value="10" label="Not Authorized"/>
+  <int value="11" label="Not Paired"/>
+  <int value="12" label="Not Supported"/>
+  <int value="13" label="Blocklisted"/>
+</enum>
+
+<enum name="WebBluetoothGetCharacteristicOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="No device"/>
+  <int value="2" label="No service"/>
+  <int value="3" label="Not found"/>
+  <int value="4" label="Blocklisted"/>
+  <int value="5" label="No characteristics"/>
+</enum>
+
+<enum name="WebBluetoothGetPrimaryServiceOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="Device no longer in range."/>
+  <int value="2" label="Not found"/>
+  <int value="3" label="No services"/>
+</enum>
+
+<enum name="WebBluetoothRequestDeviceOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="No Bluetooth adapter"/>
+  <int value="2" label="No RenderFrameHost for message source"/>
+  <int value="3" label="(Obsolete) Discovery start failed"/>
+  <int value="4" label="(Obsolete) Discovery stop failed"/>
+  <int value="5" label="(Obsolete) No matching devices found"/>
+  <int value="6" label="Bluetooth Adapter not present"/>
+  <int value="7" label="(Obsolete) Bluetooth Adapter was off"/>
+  <int value="8"
+      label="Chosen device vanished between discovery and user selection"/>
+  <int value="9" label="Chooser cancelled"/>
+  <int value="10"
+      label="Chooser insta-closed because Chrome isn't allowed to ask for
+             permission to scan for BT devices"/>
+  <int value="11" label="Blocklisted service UUID in filter"/>
+  <int value="12" label="Bluetooth Overview Help link pressed."/>
+  <int value="13" label="Adapter Off Help link pressed."/>
+  <int value="14" label="Need Location Help link pressed."/>
+  <int value="15"
+      label="Chooser insta-closed because user or enterprise policy has
+             disabled it"/>
+  <int value="16" label="Web Bluetooth kill switch enabled"/>
+  <int value="17" label="Web Bluetooth chooser event handler invalid"/>
+  <int value="18" label="Bluetooth Low Energy not available"/>
+  <int value="19" label="Chooser re-scan link pressed."/>
+</enum>
+
+<enum name="WebBluetoothRSSISignalStrengthLevel" type="int">
+  <int value="0" label="&lt;= minimum RSSI; displayed as level 0"/>
+  <int value="1" label="RSSI displayed as level 0"/>
+  <int value="2" label="RSSI displayed as level 1"/>
+  <int value="3" label="RSSI displayed as level 2"/>
+  <int value="4" label="RSSI displayed as level 3"/>
+  <int value="5" label="RSSI displayed as level 4"/>
+  <int value="6" label="&gt;= maximium RSSI; displayed as level 4"/>
+</enum>
+
+<enum name="WebCertVerifyAgreement" type="int">
+  <int value="0" label="Accepted by both iOS and NSS."/>
+  <int value="1" label="Rejected by both iOS and NSS."/>
+  <int value="2" label="Accepted only by iOS (rejected by NSS)."/>
+  <int value="3" label="Accepted only by NSS (rejected by iOS)."/>
+</enum>
+
+<enum name="WebContentsState" type="int">
+  <int value="0" label="No WebContents"/>
+  <int value="1" label="Prerendered WebContents"/>
+  <int value="2" label="Spare WebContents"/>
+</enum>
+
+<enum name="WebFontCacheHit" type="int">
+  <int value="0" label="Miss"/>
+  <int value="1" label="Hit disk cache"/>
+  <int value="2" label="Served from data URL"/>
+  <int value="3" label="Hit memory cache"/>
+</enum>
+
+<enum name="WebFontDiskCacheHit" type="int">
+  <int value="0" label="Not in the cache"/>
+  <int value="1" label="In the cache"/>
+  <int value="2" label="Previously in the cache"/>
+</enum>
+
+<enum name="WebFontInterventionResult" type="int">
+  <int value="0" label="Wasn't triggered, and does not time out"/>
+  <int value="1" label="Wasn't triggered, but time out"/>
+  <int value="2" label="Was triggered, but would not time out"/>
+  <int value="3" label="Was triggered, and would time out"/>
+</enum>
+
+<enum name="WebFontPackageFormat" type="int">
+  <int value="0" label="Unknown / Decode error"/>
+  <int value="1" label="SFNT"/>
+  <int value="2" label="WOFF"/>
+  <int value="3" label="WOFF 2.0"/>
+  <int value="4" label="SVG"/>
+</enum>
+
+<enum name="WebFontUsageType" type="int">
+  <int value="0" label="Styled, and used"/>
+  <int value="1" label="Styled, but not used"/>
+  <int value="2" label="Not styled, but used"/>
+</enum>
+
+<enum name="WebHistoryStatus" type="int">
+  <int value="0" label="WEB_HISTORY_QUERY_FAILED">Failed</int>
+  <int value="1" label="WEB_HISTORY_QUERY_SUCCEEDED">Succeeded</int>
+  <int value="2" label="WEB_HISTORY_QUERY_TIMED_OUT">Timed out</int>
+</enum>
+
+<enum name="WebRtcAudioCodecs" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Opus"/>
+  <int value="2" label="iSAC"/>
+  <int value="3" label="pcmA"/>
+  <int value="4" label="pcmU"/>
+  <int value="5" label="g722"/>
+  <int value="6" label="iLBC"/>
+</enum>
+
+<enum name="WebRtcBweType" type="int">
+  <int value="0" label="Receiver, no extension"/>
+  <int value="1" label="Receiver, transmission offset"/>
+  <int value="2" label="Receiver, absolute send time"/>
+  <int value="3" label="Sender, transport sequence number"/>
+</enum>
+
+<enum name="WebRtcH264DecoderImplEvent" type="int">
+  <int value="0" label="Init"/>
+  <int value="1" label="Error"/>
+</enum>
+
+<enum name="WebRtcH264EncoderImplEvent" type="int">
+  <int value="0" label="Init"/>
+  <int value="1" label="Error"/>
+</enum>
+
+<enum name="WebRtcVideoCodecs" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="VP8"/>
+  <int value="2" label="VP9"/>
+  <int value="3" label="H264"/>
+</enum>
+
+<enum name="WebShareMethod" type="int">
+  <int value="0" label="Share"/>
+</enum>
+
+<enum name="WebShareOutcome" type="int">
+  <int value="0" label="Success"/>
+  <int value="1" label="UnknownFailure"/>
+  <int value="2" label="Canceled"/>
+</enum>
+
+<enum name="WebsiteSettingsAction" type="int">
+  <int value="0" label="Opened"/>
+  <int value="1" label="Selected Permissions tab"/>
+  <int value="2" label="Selected Connection tab"/>
+  <int value="3" label="Connection tab shown immediately"/>
+  <int value="4" label="Cookies dialog opened"/>
+  <int value="5" label="Changed permission"/>
+  <int value="6" label="Certificate dialog opened"/>
+  <int value="7" label="Transparency viewer opened"/>
+  <int value="8" label="Connection help opened"/>
+  <int value="9" label="Site settings opened"/>
+  <int value="10" label="Security details opened"/>
+</enum>
+
+<enum name="WebSocketHandshakeResult" type="int">
+  <int value="0" label="Incomplete"/>
+  <int value="1" label="Normal"/>
+  <int value="2" label="Failed"/>
+  <int value="3" label="Connected"/>
+</enum>
+
+<enum name="WebSocketNewHandshakeResult" type="int">
+  <int value="0" label="INCOMPLETE">Incomplete</int>
+  <int value="1" label="CONNECTED">Connected</int>
+  <int value="2" label="FAILED">Failed</int>
+</enum>
+
+<enum name="WebSocketNewPerMessageDeflateContextTakeoverMode" type="int">
+  <int value="0" label="Do not take over"/>
+  <int value="1" label="Take over"/>
+</enum>
+
+<enum name="WebSocketPerMessageDeflateContextTakeOverMode" type="int">
+  <int value="0" label="Do not take over"/>
+  <int value="1" label="Take over"/>
+</enum>
+
+<enum name="WebSocketReceiveType" type="int">
+  <int value="0" label="String"/>
+  <int value="1" label="ArrayBuffer"/>
+  <int value="2" label="Blob"/>
+</enum>
+
+<enum name="WebSocketSendType" type="int">
+  <int value="0" label="String"/>
+  <int value="1" label="ArrayBuffer"/>
+  <int value="2" label="ArrayBufferView"/>
+  <int value="3" label="Blob"/>
+</enum>
+
+<enum name="WebUIUrlHashes" type="int">
+  <int value="-2103246641" label="chrome://signin-internals/"/>
+  <int value="-2034706497" label="chrome://net-internals/"/>
+  <int value="-1911971715" label="chrome://history/"/>
+  <int value="-1887206190" label="chrome://nfc-debug/"/>
+  <int value="-1808179141" label="chrome://password-manager-internals/"/>
+  <int value="-1743341803" label="chrome://bookmarks/"/>
+  <int value="-1729122580" label="chrome://chrome-urls/"/>
+  <int value="-1700864659" label="chrome://slow/"/>
+  <int value="-1697077152" label="chrome://device-log/"/>
+  <int value="-1690355375" label="chrome://mobilesetup/"/>
+  <int value="-1681544613" label="chrome://print/"/>
+  <int value="-1647734092" label="chrome://net-export/"/>
+  <int value="-1591890659" label="chrome://syncfs-internals/"/>
+  <int value="-1493822642" label="chrome://invalidations/"/>
+  <int value="-1440785181" label="chrome://profile-signin-confirmation/"/>
+  <int value="-1398642514" label="chrome://gesture/"/>
+  <int value="-1382906531" label="chrome://managed-user-passphrase/"/>
+  <int value="-1379571130" label="chrome://newtab/"/>
+  <int value="-1378421581" label="chrome://media-router/"/>
+  <int value="-1313432739" label="chrome://plugins/"/>
+  <int value="-1169621742" label="chrome://linux-proxy-config/"/>
+  <int value="-1108319739" label="chrome://sync-internals/"/>
+  <int value="-1082746738" label="chrome://credits/"/>
+  <int value="-1078583150" label="chrome://view-cert-dialog/"/>
+  <int value="-986409800" label="chrome://identity-internals/"/>
+  <int value="-969979971" label="chrome://sandbox/"/>
+  <int value="-946383082" label="chrome://translate-internals/"/>
+  <int value="-936786926" label="chrome://settings/"/>
+  <int value="-902637811" label="chrome://appcache-internals/"/>
+  <int value="-891260101" label="chrome://inspect/"/>
+  <int value="-853789543" label="chrome://bluetooth-pairing/"/>
+  <int value="-823585847" label="chrome://chrome-signin/"/>
+  <int value="-756514973" label="chrome://version/"/>
+  <int value="-753390931" label="chrome://interstitials/"/>
+  <int value="-727952446" label="chrome://nacl/"/>
+  <int value="-707542503" label="chrome://choose-mobile-network/"/>
+  <int value="-672072143" label="chrome://site-engagement/"/>
+  <int value="-661305899" label="chrome://set-time/"/>
+  <int value="-644310325" label="chrome://os-credits/"/>
+  <int value="-624584089"
+      label="chrome-extension://eemcgdkfndhakfknompkggombfjjjeno/ (Bookmark
+             Manager)"/>
+  <int value="-606058756" label="chrome://accessibility/"/>
+  <int value="-516792794" label="chrome://downloads/"/>
+  <int value="-512782085" label="chrome://salsa/"/>
+  <int value="-451371558" label="chrome://serviceworker-internals/"/>
+  <int value="-377028639" label="chrome://copresence/"/>
+  <int value="-359703631" label="chrome://slow_trace/"/>
+  <int value="-245337017" label="chrome://user-actions/"/>
+  <int value="-206925255" label="chrome://popular-sites-internals/"/>
+  <int value="-176639700" label="chrome://omnibox/"/>
+  <int value="-106823253" label="chrome://conflicts/"/>
+  <int value="-90956977" label="chrome://dns/"/>
+  <int value="-42737706" label="chrome://extensions-frame/"/>
+  <int value="-2353438" label="chrome://sim-unlock/"/>
+  <int value="1377205" label="chrome://history-frame/"/>
+  <int value="34035361" label="chrome://apps/"/>
+  <int value="43923599" label="chrome://tracing/"/>
+  <int value="58807865" label="chrome://local-state/"/>
+  <int value="112165789" label="chrome://device-emulator/"/>
+  <int value="114748825" label="chrome-devtools://devtools/"/>
+  <int value="164517522" label="chrome://discards/"/>
+  <int value="171659041" label="chrome://webrtc-device-provider/"/>
+  <int value="253258497" label="chrome://components/"/>
+  <int value="260253931" label="chrome://devices/"/>
+  <int value="325375649" label="chrome://settings-frame/"/>
+  <int value="361621847" label="chrome://make-metro/"/>
+  <int value="554090510" label="chrome://first-run/"/>
+  <int value="581234974" label="chrome://tcmalloc/"/>
+  <int value="646837226" label="chrome://crashes/"/>
+  <int value="659389881" label="chrome://gpu/"/>
+  <int value="689991895" label="chrome://supervised-user-internals/"/>
+  <int value="742272091" label="chrome://extensions/"/>
+  <int value="784140714" label="chrome://predictors/"/>
+  <int value="812624791" label="chrome://dom-distiller/"/>
+  <int value="918960088" label="chrome://instant/"/>
+  <int value="943766809" label="chrome://view-cert/"/>
+  <int value="977219287" label="chrome://memory/"/>
+  <int value="985294599" label="chrome://webrtc-logs/"/>
+  <int value="1055519744" label="chrome://webrtc-internals/"/>
+  <int value="1109407387" label="chrome://keyboardoverlay/"/>
+  <int value="1211642987" label="chrome://voicesearch/"/>
+  <int value="1213428635" label="chrome://memory-redirect/"/>
+  <int value="1281801197" label="chrome://terms/"/>
+  <int value="1340926535" label="chrome://network/"/>
+  <int value="1354146226" label="chrome://tab-modal-confirm-dialog/"/>
+  <int value="1371905827" label="chrome://flags/"/>
+  <int value="1396129399" label="chrome://flash/"/>
+  <int value="1403605293" label="chrome://proxy-settings/"/>
+  <int value="1427179406" label="chrome://gcm-internals/"/>
+  <int value="1454088830" label="chrome://uber-frame/"/>
+  <int value="1457759734" label="chrome://user-manager/"/>
+  <int value="1463418339" label="chrome://proximity-auth/"/>
+  <int value="1466599095" label="chrome://oobe/"/>
+  <int value="1467342679" label="chrome://memory-internals/"/>
+  <int value="1540230808" label="chrome://power/"/>
+  <int value="1568301017" label="chrome://media-internals/"/>
+  <int value="1585293659" label="chrome://system/"/>
+  <int value="1603463396" label="chrome://help-frame/"/>
+  <int value="1615939424" label="chrome://chrome/"/>
+  <int value="1628875649" label="chrome://quota-internals/"/>
+  <int value="1631369147" label="chrome://domain-reliability-internals/"/>
+  <int value="1662453825" label="chrome://indexeddb-internals/"/>
+  <int value="1687272877" label="chrome://syncresources/"/>
+  <int value="1725906496" label="chrome://imageburner/"/>
+  <int value="1765337366" label="chrome://certificate-manager/"/>
+  <int value="1797107942" label="chrome://md-settings/"/>
+  <int value="1887784693" label="chrome://policy/"/>
+  <int value="1926101309" label="chrome://cryptohome/"/>
+  <int value="1961263039" label="chrome://profiler/"/>
+  <int value="1975618905" label="chrome://app-list/"/>
+  <int value="2114840772" label="chrome://drive-internals/"/>
+  <int value="3251925547" label="chrome://offline-internals/"/>
+</enum>
+
+<enum name="WebUsbChooserClosed" type="int">
+  <int value="0" label="User cancelled"/>
+  <int value="1" label="User cancelled, no devices available"/>
+  <int value="2" label="Permission granted"/>
+  <int value="3" label="Ephemeral permission granted"/>
+</enum>
+
+<enum name="WebUsbNotificationClosed" type="int">
+  <int value="0" label="Closed by system"/>
+  <int value="1" label="Closed by user"/>
+  <int value="2" label="Clicked"/>
+</enum>
+
+<enum name="WebUsbPermissionRevoked" type="int">
+  <int value="0" label="Revoked permission"/>
+  <int value="1" label="Revoked ephemeral permission"/>
+</enum>
+
+<enum name="WelcomeSignInPromptOutcome" type="int">
+  <int value="0" label="User navigated away from page"/>
+  <int value="1" label="User declined prompt"/>
+  <int value="2" label="User completed sign in flow"/>
+</enum>
+
+<enum name="WhitelistedDownloadType" type="int">
+  <int value="0" label="Does not match any whitelists"/>
+  <int value="1" label="URL whitelist"/>
+  <int value="2" label="Signature whitelist"/>
+</enum>
+
+<enum name="WiFiApMode" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Managed"/>
+  <int value="2" label="AdHoc"/>
+</enum>
+
+<enum name="WiFiConnectionStatusAfterWake" type="int">
+  <int value="0" label="Connected (Wake On WiFi enabled)"/>
+  <int value="1" label="Not connected (Wake On WiFi enabled)"/>
+  <int value="2" label="Connected (Wake On WiFi disabled)"/>
+  <int value="3" label="Not connected (Wake On WiFi disabled)"/>
+</enum>
+
+<enum name="WiFiReasonCode" type="int">
+  <int value="0" label="kReasonReserved0"/>
+  <int value="1" label="kReasonCodeUnspecified"/>
+  <int value="2" label="kReasonCodePreviousAuthenticationInvalid"/>
+  <int value="3" label="kReasonCodeSenderHasLeft"/>
+  <int value="4" label="kReasonCodeInactivity"/>
+  <int value="5" label="kReasonCodeTooManySTAs"/>
+  <int value="6" label="kReasonCodeNonAuthenticated"/>
+  <int value="7" label="kReasonCodeNonAssociated"/>
+  <int value="8" label="kReasonCodeDisassociatedHasLeft"/>
+  <int value="9" label="kReasonCodeReassociationNotAuthenticated"/>
+  <int value="10" label="kReasonCodeUnacceptablePowerCapability"/>
+  <int value="11" label="kReasonCodeUnacceptableSupportedChannelInfo"/>
+  <int value="12" label="kReasonReserved12"/>
+  <int value="13" label="kReasonCodeInvalidInfoElement"/>
+  <int value="14" label="kReasonCodeMICFailure"/>
+  <int value="15" label="kReasonCode4WayTimeout"/>
+  <int value="16" label="kReasonCodeGroupKeyHandshakeTimeout"/>
+  <int value="17" label="kReasonCodeDifferenIE"/>
+  <int value="18" label="kReasonCodeGroupCipherInvalid"/>
+  <int value="19" label="kReasonCodePairwiseCipherInvalid"/>
+  <int value="20" label="kReasonCodeAkmpInvalid"/>
+  <int value="21" label="kReasonCodeUnsupportedRsnIeVersion"/>
+  <int value="22" label="kReasonCodeInvalidRsnIeCaps"/>
+  <int value="23" label="kReasonCode8021XAuth"/>
+  <int value="24" label="kReasonCodeCipherSuiteRejected"/>
+  <int value="25" label="kReasonReserved25"/>
+  <int value="26" label="kReasonReserved26"/>
+  <int value="27" label="kReasonReserved27"/>
+  <int value="28" label="kReasonReserved28"/>
+  <int value="29" label="kReasonReserved29"/>
+  <int value="30" label="kReasonReserved30"/>
+  <int value="31" label="kReasonReserved31"/>
+  <int value="32" label="kReasonCodeUnspecifiedQoS"/>
+  <int value="33" label="kReasonCodeQoSBandwidth"/>
+  <int value="34" label="kReasonCodeiPoorConditions"/>
+  <int value="35" label="kReasonCodeOutsideTxop"/>
+  <int value="36" label="kReasonCodeStaLeaving"/>
+  <int value="37" label="kReasonCodeUnacceptableMechanism"/>
+  <int value="38" label="kReasonCodeSetupRequired"/>
+  <int value="39" label="kReasonCodeTimeout"/>
+  <int value="45" label="kReasonCodeCipherSuiteNotSupported"/>
+</enum>
+
+<enum name="WiFiScanResult" type="int">
+  <int value="0" label="ProgressiveScan connected"/>
+  <int value="1" label="ProgressiveScan error then FullScan didn't connect"/>
+  <int value="2" label="ProgressiveScan error then FullScan connected"/>
+  <int value="3"
+      label="ProgressiveScan didn't connect then FullScan didn't connect"/>
+  <int value="4"
+      label="ProgressiveScan didn't connect then FullScan connected"/>
+  <int value="5" label="FullScan didn't connect"/>
+  <int value="6" label="FullScan connected"/>
+  <int value="7" label="Internal error"/>
+</enum>
+
+<enum name="WiFiStatusType" type="int">
+  <int value="0" label="kStatusCodeTypeByAp"/>
+  <int value="1" label="kStatusCodeTypeByClient"/>
+  <int value="2" label="kStatusCodeTypeByUser"/>
+  <int value="3" label="kStatusCodeTypeConsideredDead"/>
+</enum>
+
+<enum name="Win8PageLoadType" type="int">
+  <int value="0" label="Metro"/>
+  <int value="1" label="Desktop"/>
+  <int value="2" label="Metro Aura"/>
+  <int value="3" label="Desktop Aura"/>
+</enum>
+
+<enum name="WindowOpenDisposition" type="int">
+  <int value="0" label="Unknown"/>
+  <int value="1" label="Current Tab"/>
+  <int value="2" label="Singleton Tab"/>
+  <int value="3" label="New Foreground Tab"/>
+  <int value="4" label="New Background Tab"/>
+  <int value="5" label="New Popup"/>
+  <int value="6" label="New Window"/>
+  <int value="7" label="Save To Disk"/>
+  <int value="8" label="Off The Record"/>
+  <int value="9" label="Ignore Action"/>
+</enum>
+
+<enum name="WindowsExitCode" type="int">
+  <int value="-2147483645" label="0x80000003 - STATUS_BREAKPOINT"/>
+  <int value="-1073741819" label="0xC0000005 - STATUS_ACCESS_VIOLATION"/>
+  <int value="-1073740972" label="0xC0000354 - STATUS_DEBUGGER_INACTIVE"/>
+  <int value="-1073740791" label="0xC0000409 - STATUS_STACK_BUFFER_OVERRUN"/>
+  <int value="-1073740777"
+      label="0xC0000417 - STATUS_INVALID_CRUNTIME_PARAMETER"/>
+  <int value="-805306369" label="0xCFFFFFFF - Hung browser killed."/>
+  <int value="-36863" label="0xFFFF7001 - Crashpad kCrashExitCodeNoDump."/>
+  <int value="-36862" label="0xFFFF7002 - Crashpad kFailedTerminationCode."/>
+  <int value="0" label="content::RESULT_CODE_NORMAL_EXIT"/>
+  <int value="1" label="content::RESULT_CODE_KILLED"/>
+  <int value="2" label="content::RESULT_CODE_HUNG"/>
+  <int value="3" label="content::RESULT_CODE_KILLED_BAD_MESSAGE"/>
+  <int value="4" label="chrome::RESULT_CODE_INVALID_CMDLINE_URL"/>
+  <int value="5" label="chrome::RESULT_CODE_BAD_PROCESS_TYPE"/>
+  <int value="6" label="chrome::RESULT_CODE_MISSING_DATA"/>
+  <int value="7" label="chrome::RESULT_CODE_SHELL_INTEGRATION_FAILED"/>
+  <int value="8" label="chrome::RESULT_CODE_MACHINE_LEVEL_INSTALL_EXISTS"/>
+  <int value="9" label="chrome::RESULT_CODE_UNINSTALL_CHROME_ALIVE"/>
+  <int value="10" label="chrome::RESULT_CODE_UNINSTALL_USER_CANCEL"/>
+  <int value="11" label="chrome::RESULT_CODE_UNINSTALL_DELETE_PROFILE"/>
+  <int value="12" label="chrome::RESULT_CODE_UNSUPPORTED_PARAM"/>
+  <int value="13" label="chrome::RESULT_CODE_IMPORTER_HUNG"/>
+  <int value="14" label="chrome::RESULT_CODE_RESPAWN_FAILED"/>
+  <int value="15" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP1"/>
+  <int value="16" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP2"/>
+  <int value="17" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP3"/>
+  <int value="18" label="chrome::RESULT_CODE_NORMAL_EXIT_EXP4"/>
+  <int value="19" label="chrome::RESULT_CODE_NORMAL_EXIT_CANCEL"/>
+  <int value="20" label="chrome::RESULT_CODE_PROFILE_IN_USE"/>
+  <int value="21" label="chrome::RESULT_CODE_PACK_EXTENSION_ERROR"/>
+  <int value="22" label="chrome::RESULT_CODE_UNINSTALL_EXTENSION_ERROR"/>
+  <int value="23" label="chrome::RESULT_CODE_NORMAL_EXIT_PROCESS_NOTIFIED"/>
+  <int value="24" label="chrome::RESULT_CODE_NOTUSED_1"/>
+  <int value="25" label="chrome::RESULT_CODE_INSTALL_FROM_WEBSTORE_ERROR_2"/>
+  <int value="26" label="chrome::RESULT_CODE_NOTUSED_2"/>
+  <int value="27" label="chrome::RESULT_CODE_EULA_REFUSED"/>
+  <int value="28" label="chrome::RESULT_CODE_SXS_MIGRATION_FAILED"/>
+  <int value="29" label="chrome::RESULT_CODE_ACTION_DISALLOWED_BY_POLICY"/>
+  <int value="30" label="chrome::RESULT_CODE_INVALID_SANDBOX_STATE"/>
+  <int value="259" label="0x103 - STILL_ACTIVE."/>
+  <int value="85436397" label="0x517a7ed - Crashpad simulated exception"/>
+  <int value="1073807364" label="0x40010004 - DBG_TERMINATE_PROCESS"/>
+</enum>
+
+<enum name="WindowsVersion" type="int">
+  <int value="0" label="Pre-XP"/>
+  <int value="1" label="XP"/>
+  <int value="2" label="2003 Server"/>
+  <int value="3" label="Vista"/>
+  <int value="4" label="Windows 7"/>
+  <int value="5" label="Windows 8"/>
+  <int value="6" label="Windows 8.1"/>
+  <int value="7" label="Windows 10"/>
+  <int value="8" label="Windows 10 TH2"/>
+</enum>
+
+<enum name="WindowType" type="int">
+  <int value="0" label="Other"/>
+  <int value="1" label="Browser"/>
+  <int value="2" label="Hosted App"/>
+  <int value="3" label="Packaged App"/>
+</enum>
+
+<enum name="WinGetLastError" type="int">
+  <int value="0" label="SUCCESS"/>
+  <int value="1" label="INVALID_FUNCTION"/>
+  <int value="2" label="FILE_NOT_FOUND"/>
+  <int value="3" label="PATH_NOT_FOUND"/>
+  <int value="4" label="TOO_MANY_OPEN_FILES"/>
+  <int value="5" label="ACCESS_DENIED"/>
+  <int value="6" label="INVALID_HANDLE"/>
+  <int value="7" label="ARENA_TRASHED"/>
+  <int value="8" label="NOT_ENOUGH_MEMORY"/>
+  <int value="9" label="INVALID_BLOCK"/>
+  <int value="10" label="BAD_ENVIRONMENT"/>
+  <int value="11" label="BAD_FORMAT"/>
+  <int value="12" label="INVALID_ACCESS"/>
+  <int value="13" label="INVALID_DATA"/>
+  <int value="14" label="OUTOFMEMORY"/>
+  <int value="15" label="INVALID_DRIVE"/>
+  <int value="16" label="CURRENT_DIRECTORY"/>
+  <int value="17" label="NOT_SAME_DEVICE"/>
+  <int value="18" label="NO_MORE_FILES"/>
+  <int value="19" label="WRITE_PROTECT"/>
+  <int value="20" label="BAD_UNIT"/>
+  <int value="21" label="NOT_READY"/>
+  <int value="22" label="BAD_COMMAND"/>
+  <int value="23" label="CRC"/>
+  <int value="24" label="BAD_LENGTH"/>
+  <int value="25" label="SEEK"/>
+  <int value="26" label="NOT_DOS_DISK"/>
+  <int value="27" label="SECTOR_NOT_FOUND"/>
+  <int value="28" label="OUT_OF_PAPER"/>
+  <int value="29" label="WRITE_FAULT"/>
+  <int value="30" label="READ_FAULT"/>
+  <int value="31" label="GEN_FAILURE"/>
+  <int value="32" label="SHARING_VIOLATION"/>
+  <int value="33" label="LOCK_VIOLATION"/>
+  <int value="34" label="WRONG_DISK"/>
+  <int value="36" label="SHARING_BUFFER_EXCEEDED"/>
+  <int value="38" label="HANDLE_EOF"/>
+  <int value="39" label="HANDLE_DISK_FULL"/>
+  <int value="50" label="NOT_SUPPORTED"/>
+  <int value="51" label="REM_NOT_LIST"/>
+  <int value="52" label="DUP_NAME"/>
+  <int value="53" label="BAD_NETPATH"/>
+  <int value="54" label="NETWORK_BUSY"/>
+  <int value="55" label="DEV_NOT_EXIST"/>
+  <int value="56" label="TOO_MANY_CMDS"/>
+  <int value="57" label="ADAP_HDW_ERR"/>
+  <int value="58" label="BAD_NET_RESP"/>
+  <int value="59" label="UNEXP_NET_ERR"/>
+  <int value="60" label="BAD_REM_ADAP"/>
+  <int value="61" label="PRINTQ_FULL"/>
+  <int value="62" label="NO_SPOOL_SPACE"/>
+  <int value="63" label="PRINT_CANCELLED"/>
+  <int value="64" label="NETNAME_DELETED"/>
+  <int value="65" label="NETWORK_ACCESS_DENIED"/>
+  <int value="66" label="BAD_DEV_TYPE"/>
+  <int value="67" label="BAD_NET_NAME"/>
+  <int value="68" label="TOO_MANY_NAMES"/>
+  <int value="69" label="TOO_MANY_SESS"/>
+  <int value="70" label="SHARING_PAUSED"/>
+  <int value="71" label="REQ_NOT_ACCEP"/>
+  <int value="72" label="REDIR_PAUSED"/>
+  <int value="80" label="FILE_EXISTS"/>
+  <int value="82" label="CANNOT_MAKE"/>
+  <int value="83" label="FAIL_I24"/>
+  <int value="84" label="OUT_OF_STRUCTURES"/>
+  <int value="85" label="ALREADY_ASSIGNED"/>
+  <int value="86" label="INVALID_PASSWORD"/>
+  <int value="87" label="INVALID_PARAMETER"/>
+  <int value="88" label="NET_WRITE_FAULT"/>
+  <int value="89" label="NO_PROC_SLOTS"/>
+  <int value="100" label="TOO_MANY_SEMAPHORES"/>
+  <int value="101" label="EXCL_SEM_ALREADY_OWNED"/>
+  <int value="102" label="SEM_IS_SET"/>
+  <int value="103" label="TOO_MANY_SEM_REQUESTS"/>
+  <int value="104" label="INVALID_AT_INTERRUPT_TIME"/>
+  <int value="105" label="SEM_OWNER_DIED"/>
+  <int value="106" label="SEM_USER_LIMIT"/>
+  <int value="107" label="DISK_CHANGE"/>
+  <int value="108" label="DRIVE_LOCKED"/>
+  <int value="109" label="BROKEN_PIPE"/>
+  <int value="110" label="OPEN_FAILED"/>
+  <int value="111" label="BUFFER_OVERFLOW"/>
+  <int value="112" label="DISK_FULL"/>
+  <int value="113" label="NO_MORE_SEARCH_HANDLES"/>
+  <int value="114" label="INVALID_TARGET_HANDLE"/>
+  <int value="117" label="INVALID_CATEGORY"/>
+  <int value="118" label="INVALID_VERIFY_SWITCH"/>
+  <int value="119" label="BAD_DRIVER_LEVEL"/>
+  <int value="120" label="CALL_NOT_IMPLEMENTED"/>
+  <int value="121" label="SEM_TIMEOUT"/>
+  <int value="122" label="INSUFFICIENT_BUFFER"/>
+  <int value="123" label="INVALID_NAME"/>
+  <int value="124" label="INVALID_LEVEL"/>
+  <int value="125" label="NO_VOLUME_LABEL"/>
+  <int value="126" label="MOD_NOT_FOUND"/>
+  <int value="127" label="PROC_NOT_FOUND"/>
+  <int value="128" label="WAIT_NO_CHILDREN"/>
+  <int value="129" label="CHILD_NOT_COMPLETE"/>
+  <int value="130" label="DIRECT_ACCESS_HANDLE"/>
+  <int value="131" label="NEGATIVE_SEEK"/>
+  <int value="132" label="SEEK_ON_DEVICE"/>
+  <int value="133" label="IS_JOIN_TARGET"/>
+  <int value="134" label="IS_JOINED"/>
+  <int value="135" label="IS_SUBSTED"/>
+  <int value="136" label="NOT_JOINED"/>
+  <int value="137" label="NOT_SUBSTED"/>
+  <int value="138" label="JOIN_TO_JOIN"/>
+  <int value="139" label="SUBST_TO_SUBST"/>
+  <int value="140" label="JOIN_TO_SUBST"/>
+  <int value="141" label="SUBST_TO_JOIN"/>
+  <int value="142" label="BUSY_DRIVE"/>
+  <int value="143" label="SAME_DRIVE"/>
+  <int value="144" label="DIR_NOT_ROOT"/>
+  <int value="145" label="DIR_NOT_EMPTY"/>
+  <int value="146" label="IS_SUBST_PATH"/>
+  <int value="147" label="IS_JOIN_PATH"/>
+  <int value="148" label="PATH_BUSY"/>
+  <int value="149" label="IS_SUBST_TARGET"/>
+  <int value="150" label="SYSTEM_TRACE"/>
+  <int value="151" label="INVALID_EVENT_COUNT"/>
+  <int value="152" label="TOO_MANY_MUXWAITERS"/>
+  <int value="153" label="INVALID_LIST_FORMAT"/>
+  <int value="154" label="LABEL_TOO_LONG"/>
+  <int value="155" label="TOO_MANY_TCBS"/>
+  <int value="156" label="SIGNAL_REFUSED"/>
+  <int value="157" label="DISCARDED"/>
+  <int value="158" label="NOT_LOCKED"/>
+  <int value="159" label="BAD_THREADID_ADDR"/>
+  <int value="160" label="BAD_ARGUMENTS"/>
+  <int value="161" label="BAD_PATHNAME"/>
+  <int value="162" label="SIGNAL_PENDING"/>
+  <int value="164" label="MAX_THRDS_REACHED"/>
+  <int value="167" label="LOCK_FAILED"/>
+  <int value="170" label="BUSY"/>
+  <int value="171" label="DEVICE_SUPPORT_IN_PROGRESS"/>
+  <int value="173" label="CANCEL_VIOLATION"/>
+  <int value="174" label="ATOMIC_LOCKS_NOT_SUPPORTED"/>
+  <int value="180" label="INVALID_SEGMENT_NUMBER"/>
+  <int value="182" label="INVALID_ORDINAL"/>
+  <int value="183" label="ALREADY_EXISTS"/>
+  <int value="186" label="INVALID_FLAG_NUMBER"/>
+  <int value="187" label="SEM_NOT_FOUND"/>
+  <int value="188" label="INVALID_STARTING_CODESEG"/>
+  <int value="189" label="INVALID_STACKSEG"/>
+  <int value="190" label="INVALID_MODULETYPE"/>
+  <int value="191" label="INVALID_EXE_SIGNATURE"/>
+  <int value="192" label="EXE_MARKED_INVALID"/>
+  <int value="193" label="BAD_EXE_FORMAT"/>
+  <int value="194" label="ITERATED_DATA_EXCEEDS_64k"/>
+  <int value="195" label="INVALID_MINALLOCSIZE"/>
+  <int value="196" label="DYNLINK_FROM_INVALID_RING"/>
+  <int value="197" label="IOPL_NOT_ENABLED"/>
+  <int value="198" label="INVALID_SEGDPL"/>
+  <int value="199" label="AUTODATASEG_EXCEEDS_64k"/>
+  <int value="200" label="RING2SEG_MUST_BE_MOVABLE"/>
+  <int value="201" label="RELOC_CHAIN_XEEDS_SEGLIM"/>
+  <int value="202" label="INFLOOP_IN_RELOC_CHAIN"/>
+  <int value="203" label="ENVVAR_NOT_FOUND"/>
+  <int value="205" label="NO_SIGNAL_SENT"/>
+  <int value="206" label="FILENAME_EXCED_RANGE"/>
+  <int value="207" label="RING2_STACK_IN_USE"/>
+  <int value="208" label="META_EXPANSION_TOO_LONG"/>
+  <int value="209" label="INVALID_SIGNAL_NUMBER"/>
+  <int value="210" label="THREAD_1_INACTIVE"/>
+  <int value="212" label="LOCKED"/>
+  <int value="214" label="TOO_MANY_MODULES"/>
+  <int value="215" label="NESTING_NOT_ALLOWED"/>
+  <int value="216" label="EXE_MACHINE_TYPE_MISMATCH"/>
+  <int value="217" label="EXE_CANNOT_MODIFY_SIGNED_BINARY"/>
+  <int value="218" label="EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY"/>
+  <int value="220" label="FILE_CHECKED_OUT"/>
+  <int value="221" label="CHECKOUT_REQUIRED"/>
+  <int value="222" label="BAD_FILE_TYPE"/>
+  <int value="223" label="FILE_TOO_LARGE"/>
+  <int value="224" label="FORMS_AUTH_REQUIRED"/>
+  <int value="225" label="VIRUS_INFECTED"/>
+  <int value="226" label="VIRUS_DELETED"/>
+  <int value="229" label="PIPE_LOCAL"/>
+  <int value="230" label="BAD_PIPE"/>
+  <int value="231" label="PIPE_BUSY"/>
+  <int value="232" label="NO_DATA"/>
+  <int value="233" label="PIPE_NOT_CONNECTED"/>
+  <int value="234" label="MORE_DATA"/>
+  <int value="240" label="VC_DISCONNECTED"/>
+  <int value="254" label="INVALID_EA_NAME"/>
+  <int value="255" label="EA_LIST_INCONSISTENT"/>
+  <int value="258" label="TIMEOUT"/>
+  <int value="259" label="NO_MORE_ITEMS"/>
+  <int value="266" label="CANNOT_COPY"/>
+  <int value="267" label="DIRECTORY"/>
+  <int value="275" label="EAS_DIDNT_FIT"/>
+  <int value="276" label="EA_FILE_CORRUPT"/>
+  <int value="277" label="EA_TABLE_FULL"/>
+  <int value="278" label="INVALID_EA_HANDLE"/>
+  <int value="282" label="EAS_NOT_SUPPORTED"/>
+  <int value="288" label="NOT_OWNER"/>
+  <int value="298" label="TOO_MANY_POSTS"/>
+  <int value="299" label="PARTIAL_COPY"/>
+  <int value="300" label="OPLOCK_NOT_GRANTED"/>
+  <int value="301" label="INVALID_OPLOCK_PROTOCOL"/>
+  <int value="302" label="DISK_TOO_FRAGMENTED"/>
+  <int value="303" label="DELETE_PENDING"/>
+  <int value="304"
+      label="INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING"/>
+  <int value="305" label="SHORT_NAMES_NOT_ENABLED_ON_VOLUME"/>
+  <int value="306" label="SECURITY_STREAM_IS_INCONSISTENT"/>
+  <int value="307" label="INVALID_LOCK_RANGE"/>
+  <int value="308" label="IMAGE_SUBSYSTEM_NOT_PRESENT"/>
+  <int value="309" label="NOTIFICATION_GUID_ALREADY_DEFINED"/>
+  <int value="310" label="INVALID_EXCEPTION_HANDLER"/>
+  <int value="311" label="DUPLICATE_PRIVILEGES"/>
+  <int value="312" label="NO_RANGES_PROCESSED"/>
+  <int value="313" label="NOT_ALLOWED_ON_SYSTEM_FILE"/>
+  <int value="314" label="DISK_RESOURCES_EXHAUSTED"/>
+  <int value="315" label="INVALID_TOKEN"/>
+  <int value="316" label="DEVICE_FEATURE_NOT_SUPPORTED"/>
+  <int value="317" label="MR_MID_NOT_FOUND"/>
+  <int value="318" label="SCOPE_NOT_FOUND"/>
+  <int value="319" label="UNDEFINED_SCOPE"/>
+  <int value="320" label="INVALID_CAP"/>
+  <int value="321" label="DEVICE_UNREACHABLE"/>
+  <int value="322" label="DEVICE_NO_RESOURCES"/>
+  <int value="323" label="DATA_CHECKSUM_ERROR"/>
+  <int value="324" label="INTERMIXED_KERNEL_EA_OPERATION"/>
+  <int value="326" label="FILE_LEVEL_TRIM_NOT_SUPPORTED"/>
+  <int value="327" label="OFFSET_ALIGNMENT_VIOLATION"/>
+  <int value="328" label="INVALID_FIELD_IN_PARAMETER_LIST"/>
+  <int value="329" label="OPERATION_IN_PROGRESS"/>
+  <int value="330" label="BAD_DEVICE_PATH"/>
+  <int value="331" label="TOO_MANY_DESCRIPTORS"/>
+  <int value="332" label="SCRUB_DATA_DISABLED"/>
+  <int value="333" label="NOT_REDUNDANT_STORAGE"/>
+  <int value="334" label="RESIDENT_FILE_NOT_SUPPORTED"/>
+  <int value="335" label="COMPRESSED_FILE_NOT_SUPPORTED"/>
+  <int value="336" label="DIRECTORY_NOT_SUPPORTED"/>
+  <int value="337" label="NOT_READ_FROM_COPY"/>
+  <int value="350" label="FAIL_NOACTION_REBOOT"/>
+  <int value="351" label="FAIL_SHUTDOWN"/>
+  <int value="352" label="FAIL_RESTART"/>
+  <int value="353" label="MAX_SESSIONS_REACHED"/>
+  <int value="400" label="THREAD_MODE_ALREADY_BACKGROUND"/>
+  <int value="401" label="THREAD_MODE_NOT_BACKGROUND"/>
+  <int value="402" label="PROCESS_MODE_ALREADY_BACKGROUND"/>
+  <int value="403" label="PROCESS_MODE_NOT_BACKGROUND"/>
+  <int value="487" label="INVALID_ADDRESS"/>
+  <int value="500" label="USER_PROFILE_LOAD"/>
+  <int value="534" label="ARITHMETIC_OVERFLOW"/>
+  <int value="535" label="PIPE_CONNECTED"/>
+  <int value="536" label="PIPE_LISTENING"/>
+  <int value="537" label="VERIFIER_STOP"/>
+  <int value="538" label="ABIOS_ERROR"/>
+  <int value="539" label="WX86_WARNING"/>
+  <int value="540" label="WX86_ERROR"/>
+  <int value="541" label="TIMER_NOT_CANCELED"/>
+  <int value="542" label="UNWIND"/>
+  <int value="543" label="BAD_STACK"/>
+  <int value="544" label="INVALID_UNWIND_TARGET"/>
+  <int value="545" label="INVALID_PORT_ATTRIBUTES"/>
+  <int value="546" label="PORT_MESSAGE_TOO_LONG"/>
+  <int value="547" label="INVALID_QUOTA_LOWER"/>
+  <int value="548" label="DEVICE_ALREADY_ATTACHED"/>
+  <int value="549" label="INSTRUCTION_MISALIGNMENT"/>
+  <int value="550" label="PROFILING_NOT_STARTED"/>
+  <int value="551" label="PROFILING_NOT_STOPPED"/>
+  <int value="552" label="COULD_NOT_INTERPRET"/>
+  <int value="553" label="PROFILING_AT_LIMIT"/>
+  <int value="554" label="CANT_WAIT"/>
+  <int value="555" label="CANT_TERMINATE_SELF"/>
+  <int value="556" label="UNEXPECTED_MM_CREATE_ERR"/>
+  <int value="557" label="UNEXPECTED_MM_MAP_ERROR"/>
+  <int value="558" label="UNEXPECTED_MM_EXTEND_ERR"/>
+  <int value="559" label="BAD_FUNCTION_TABLE"/>
+  <int value="560" label="NO_GUID_TRANSLATION"/>
+  <int value="561" label="INVALID_LDT_SIZE"/>
+  <int value="563" label="INVALID_LDT_OFFSET"/>
+  <int value="564" label="INVALID_LDT_DESCRIPTOR"/>
+  <int value="565" label="TOO_MANY_THREADS"/>
+  <int value="566" label="THREAD_NOT_IN_PROCESS"/>
+  <int value="567" label="PAGEFILE_QUOTA_EXCEEDED"/>
+  <int value="568" label="LOGON_SERVER_CONFLICT"/>
+  <int value="569" label="SYNCHRONIZATION_REQUIRED"/>
+  <int value="570" label="NET_OPEN_FAILED"/>
+  <int value="571" label="IO_PRIVILEGE_FAILED"/>
+  <int value="572" label="CONTROL_C_EXIT"/>
+  <int value="573" label="MISSING_SYSTEMFILE"/>
+  <int value="574" label="UNHANDLED_EXCEPTION"/>
+  <int value="575" label="APP_INIT_FAILURE"/>
+  <int value="576" label="PAGEFILE_CREATE_FAILED"/>
+  <int value="577" label="INVALID_IMAGE_HASH"/>
+  <int value="578" label="NO_PAGEFILE"/>
+  <int value="579" label="ILLEGAL_FLOAT_CONTEXT"/>
+  <int value="580" label="NO_EVENT_PAIR"/>
+  <int value="581" label="DOMAIN_CTRLR_CONFIG_ERROR"/>
+  <int value="582" label="ILLEGAL_CHARACTER"/>
+  <int value="583" label="UNDEFINED_CHARACTER"/>
+  <int value="584" label="FLOPPY_VOLUME"/>
+  <int value="585" label="BIOS_FAILED_TO_CONNECT_INTERRUPT"/>
+  <int value="586" label="BACKUP_CONTROLLER"/>
+  <int value="587" label="MUTANT_LIMIT_EXCEEDED"/>
+  <int value="588" label="FS_DRIVER_REQUIRED"/>
+  <int value="589" label="CANNOT_LOAD_REGISTRY_FILE"/>
+  <int value="590" label="DEBUG_ATTACH_FAILED"/>
+  <int value="591" label="SYSTEM_PROCESS_TERMINATED"/>
+  <int value="592" label="DATA_NOT_ACCEPTED"/>
+  <int value="593" label="VDM_HARD_ERROR"/>
+  <int value="594" label="DRIVER_CANCEL_TIMEOUT"/>
+  <int value="595" label="REPLY_MESSAGE_MISMATCH"/>
+  <int value="596" label="LOST_WRITEBEHIND_DATA"/>
+  <int value="597" label="CLIENT_SERVER_PARAMETERS_INVALID"/>
+  <int value="598" label="NOT_TINY_STREAM"/>
+  <int value="599" label="STACK_OVERFLOW_READ"/>
+  <int value="600" label="CONVERT_TO_LARGE"/>
+  <int value="601" label="FOUND_OUT_OF_SCOPE"/>
+  <int value="602" label="ALLOCATE_BUCKET"/>
+  <int value="603" label="MARSHALL_OVERFLOW"/>
+  <int value="604" label="INVALID_VARIANT"/>
+  <int value="605" label="BAD_COMPRESSION_BUFFER"/>
+  <int value="606" label="AUDIT_FAILED"/>
+  <int value="607" label="TIMER_RESOLUTION_NOT_SET"/>
+  <int value="608" label="INSUFFICIENT_LOGON_INFO"/>
+  <int value="609" label="BAD_DLL_ENTRYPOINT"/>
+  <int value="610" label="BAD_SERVICE_ENTRYPOINT"/>
+  <int value="611" label="IP_ADDRESS_CONFLICT1"/>
+  <int value="612" label="IP_ADDRESS_CONFLICT2"/>
+  <int value="613" label="REGISTRY_QUOTA_LIMIT"/>
+  <int value="614" label="NO_CALLBACK_ACTIVE"/>
+  <int value="615" label="PWD_TOO_SHORT"/>
+  <int value="616" label="PWD_TOO_RECENT"/>
+  <int value="617" label="PWD_HISTORY_CONFLICT"/>
+  <int value="618" label="UNSUPPORTED_COMPRESSION"/>
+  <int value="619" label="INVALID_HW_PROFILE"/>
+  <int value="620" label="INVALID_PLUGPLAY_DEVICE_PATH"/>
+  <int value="621" label="QUOTA_LIST_INCONSISTENT"/>
+  <int value="622" label="EVALUATION_EXPIRATION"/>
+  <int value="623" label="ILLEGAL_DLL_RELOCATION"/>
+  <int value="624" label="DLL_INIT_FAILED_LOGOFF"/>
+  <int value="625" label="VALIDATE_CONTINUE"/>
+  <int value="626" label="NO_MORE_MATCHES"/>
+  <int value="627" label="RANGE_LIST_CONFLICT"/>
+  <int value="628" label="SERVER_SID_MISMATCH"/>
+  <int value="629" label="CANT_ENABLE_DENY_ONLY"/>
+  <int value="630" label="FLOAT_MULTIPLE_FAULTS"/>
+  <int value="631" label="FLOAT_MULTIPLE_TRAPS"/>
+  <int value="632" label="NOINTERFACE"/>
+  <int value="633" label="DRIVER_FAILED_SLEEP"/>
+  <int value="634" label="CORRUPT_SYSTEM_FILE"/>
+  <int value="635" label="COMMITMENT_MINIMUM"/>
+  <int value="636" label="PNP_RESTART_ENUMERATION"/>
+  <int value="637" label="SYSTEM_IMAGE_BAD_SIGNATURE"/>
+  <int value="638" label="PNP_REBOOT_REQUIRED"/>
+  <int value="639" label="INSUFFICIENT_POWER"/>
+  <int value="640" label="MULTIPLE_FAULT_VIOLATION"/>
+  <int value="641" label="SYSTEM_SHUTDOWN"/>
+  <int value="642" label="PORT_NOT_SET"/>
+  <int value="643" label="DS_VERSION_CHECK_FAILURE"/>
+  <int value="644" label="RANGE_NOT_FOUND"/>
+  <int value="646" label="NOT_SAFE_MODE_DRIVER"/>
+  <int value="647" label="FAILED_DRIVER_ENTRY"/>
+  <int value="648" label="DEVICE_ENUMERATION_ERROR"/>
+  <int value="649" label="MOUNT_POINT_NOT_RESOLVED"/>
+  <int value="650" label="INVALID_DEVICE_OBJECT_PARAMETER"/>
+  <int value="651" label="MCA_OCCURED"/>
+  <int value="652" label="DRIVER_DATABASE_ERROR"/>
+  <int value="653" label="SYSTEM_HIVE_TOO_LARGE"/>
+  <int value="654" label="DRIVER_FAILED_PRIOR_UNLOAD"/>
+  <int value="655" label="VOLSNAP_PREPARE_HIBERNATE"/>
+  <int value="656" label="HIBERNATION_FAILURE"/>
+  <int value="657" label="PWD_TOO_LONG"/>
+  <int value="665" label="FILE_SYSTEM_LIMITATION"/>
+  <int value="668" label="ASSERTION_FAILURE"/>
+  <int value="669" label="ACPI_ERROR"/>
+  <int value="670" label="WOW_ASSERTION"/>
+  <int value="671" label="PNP_BAD_MPS_TABLE"/>
+  <int value="672" label="PNP_TRANSLATION_FAILED"/>
+  <int value="673" label="PNP_IRQ_TRANSLATION_FAILED"/>
+  <int value="674" label="PNP_INVALID_ID"/>
+  <int value="675" label="WAKE_SYSTEM_DEBUGGER"/>
+  <int value="676" label="HANDLES_CLOSED"/>
+  <int value="677" label="EXTRANEOUS_INFORMATION"/>
+  <int value="678" label="RXACT_COMMIT_NECESSARY"/>
+  <int value="679" label="MEDIA_CHECK"/>
+  <int value="680" label="GUID_SUBSTITUTION_MADE"/>
+  <int value="681" label="STOPPED_ON_SYMLINK"/>
+  <int value="682" label="LONGJUMP"/>
+  <int value="683" label="PLUGPLAY_QUERY_VETOED"/>
+  <int value="684" label="UNWIND_CONSOLIDATE"/>
+  <int value="685" label="REGISTRY_HIVE_RECOVERED"/>
+  <int value="686" label="DLL_MIGHT_BE_INSECURE"/>
+  <int value="687" label="DLL_MIGHT_BE_INCOMPATIBLE"/>
+  <int value="688" label="DBG_EXCEPTION_NOT_HANDLED"/>
+  <int value="689" label="DBG_REPLY_LATER"/>
+  <int value="690" label="DBG_UNABLE_TO_PROVIDE_HANDLE"/>
+  <int value="691" label="DBG_TERMINATE_THREAD"/>
+  <int value="692" label="DBG_TERMINATE_PROCESS"/>
+  <int value="693" label="DBG_CONTROL_C"/>
+  <int value="694" label="DBG_PRINTEXCEPTION_C"/>
+  <int value="695" label="DBG_RIPEXCEPTION"/>
+  <int value="696" label="DBG_CONTROL_BREAK"/>
+  <int value="697" label="DBG_COMMAND_EXCEPTION"/>
+  <int value="698" label="OBJECT_NAME_EXISTS"/>
+  <int value="699" label="THREAD_WAS_SUSPENDED"/>
+  <int value="700" label="IMAGE_NOT_AT_BASE"/>
+  <int value="701" label="RXACT_STATE_CREATED"/>
+  <int value="702" label="SEGMENT_NOTIFICATION"/>
+  <int value="703" label="BAD_CURRENT_DIRECTORY"/>
+  <int value="704" label="FT_READ_RECOVERY_FROM_BACKUP"/>
+  <int value="705" label="FT_WRITE_RECOVERY"/>
+  <int value="706" label="IMAGE_MACHINE_TYPE_MISMATCH"/>
+  <int value="707" label="RECEIVE_PARTIAL"/>
+  <int value="708" label="RECEIVE_EXPEDITED"/>
+  <int value="709" label="RECEIVE_PARTIAL_EXPEDITED"/>
+  <int value="710" label="EVENT_DONE"/>
+  <int value="711" label="EVENT_PENDING"/>
+  <int value="712" label="CHECKING_FILE_SYSTEM"/>
+  <int value="713" label="FATAL_APP_EXIT"/>
+  <int value="714" label="PREDEFINED_HANDLE"/>
+  <int value="715" label="WAS_UNLOCKED"/>
+  <int value="716" label="SERVICE_NOTIFICATION"/>
+  <int value="717" label="WAS_LOCKED"/>
+  <int value="718" label="LOG_HARD_ERROR"/>
+  <int value="719" label="ALREADY_WIN32"/>
+  <int value="720" label="IMAGE_MACHINE_TYPE_MISMATCH_EXE"/>
+  <int value="721" label="NO_YIELD_PERFORMED"/>
+  <int value="722" label="TIMER_RESUME_IGNORED"/>
+  <int value="723" label="ARBITRATION_UNHANDLED"/>
+  <int value="724" label="CARDBUS_NOT_SUPPORTED"/>
+  <int value="725" label="MP_PROCESSOR_MISMATCH"/>
+  <int value="726" label="HIBERNATED"/>
+  <int value="727" label="RESUME_HIBERNATION"/>
+  <int value="728" label="FIRMWARE_UPDATED"/>
+  <int value="729" label="DRIVERS_LEAKING_LOCKED_PAGES"/>
+  <int value="730" label="WAKE_SYSTEM"/>
+  <int value="731" label="WAIT_1"/>
+  <int value="732" label="WAIT_2"/>
+  <int value="733" label="WAIT_3"/>
+  <int value="734" label="WAIT_63"/>
+  <int value="735" label="ABANDONED_WAIT_0"/>
+  <int value="736" label="ABANDONED_WAIT_63"/>
+  <int value="737" label="USER_APC"/>
+  <int value="738" label="KERNEL_APC"/>
+  <int value="739" label="ALERTED"/>
+  <int value="740" label="ELEVATION_REQUIRED"/>
+  <int value="741" label="REPARSE"/>
+  <int value="742" label="OPLOCK_BREAK_IN_PROGRESS"/>
+  <int value="743" label="VOLUME_MOUNTED"/>
+  <int value="744" label="RXACT_COMMITTED"/>
+  <int value="745" label="NOTIFY_CLEANUP"/>
+  <int value="746" label="PRIMARY_TRANSPORT_CONNECT_FAILED"/>
+  <int value="747" label="PAGE_FAULT_TRANSITION"/>
+  <int value="748" label="PAGE_FAULT_DEMAND_ZERO"/>
+  <int value="749" label="PAGE_FAULT_COPY_ON_WRITE"/>
+  <int value="750" label="PAGE_FAULT_GUARD_PAGE"/>
+  <int value="751" label="PAGE_FAULT_PAGING_FILE"/>
+  <int value="752" label="CACHE_PAGE_LOCKED"/>
+  <int value="753" label="CRASH_DUMP"/>
+  <int value="754" label="BUFFER_ALL_ZEROS"/>
+  <int value="755" label="REPARSE_OBJECT"/>
+  <int value="756" label="RESOURCE_REQUIREMENTS_CHANGED"/>
+  <int value="757" label="TRANSLATION_COMPLETE"/>
+  <int value="758" label="NOTHING_TO_TERMINATE"/>
+  <int value="759" label="PROCESS_NOT_IN_JOB"/>
+  <int value="760" label="PROCESS_IN_JOB"/>
+  <int value="761" label="VOLSNAP_HIBERNATE_READY"/>
+  <int value="762" label="FSFILTER_OP_COMPLETED_SUCCESSFULLY"/>
+  <int value="763" label="INTERRUPT_VECTOR_ALREADY_CONNECTED"/>
+  <int value="764" label="INTERRUPT_STILL_CONNECTED"/>
+  <int value="765" label="WAIT_FOR_OPLOCK"/>
+  <int value="766" label="DBG_EXCEPTION_HANDLED"/>
+  <int value="767" label="DBG_CONTINUE"/>
+  <int value="768" label="CALLBACK_POP_STACK"/>
+  <int value="769" label="COMPRESSION_DISABLED"/>
+  <int value="770" label="CANTFETCHBACKWARDS"/>
+  <int value="771" label="CANTSCROLLBACKWARDS"/>
+  <int value="772" label="ROWSNOTRELEASED"/>
+  <int value="773" label="BAD_ACCESSOR_FLAGS"/>
+  <int value="774" label="ERRORS_ENCOUNTERED"/>
+  <int value="775" label="NOT_CAPABLE"/>
+  <int value="776" label="REQUEST_OUT_OF_SEQUENCE"/>
+  <int value="777" label="VERSION_PARSE_ERROR"/>
+  <int value="778" label="BADSTARTPOSITION"/>
+  <int value="779" label="MEMORY_HARDWARE"/>
+  <int value="780" label="DISK_REPAIR_DISABLED"/>
+  <int value="781"
+      label="INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE"/>
+  <int value="782" label="SYSTEM_POWERSTATE_TRANSITION"/>
+  <int value="783" label="SYSTEM_POWERSTATE_COMPLEX_TRANSITION"/>
+  <int value="784" label="MCA_EXCEPTION"/>
+  <int value="785" label="ACCESS_AUDIT_BY_POLICY"/>
+  <int value="786" label="ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY"/>
+  <int value="787" label="ABANDON_HIBERFILE"/>
+  <int value="788" label="LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED"/>
+  <int value="789" label="LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR"/>
+  <int value="790" label="LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR"/>
+  <int value="791" label="BAD_MCFG_TABLE"/>
+  <int value="792" label="DISK_REPAIR_REDIRECTED"/>
+  <int value="793" label="DISK_REPAIR_UNSUCCESSFUL"/>
+  <int value="794" label="CORRUPT_LOG_OVERFULL"/>
+  <int value="795" label="CORRUPT_LOG_CORRUPTED"/>
+  <int value="796" label="CORRUPT_LOG_UNAVAILABLE"/>
+  <int value="797" label="CORRUPT_LOG_DELETED_FULL"/>
+  <int value="798" label="CORRUPT_LOG_CLEARED"/>
+  <int value="799" label="ORPHAN_NAME_EXHAUSTED"/>
+  <int value="800" label="OPLOCK_SWITCHED_TO_NEW_HANDLE"/>
+  <int value="801" label="CANNOT_GRANT_REQUESTED_OPLOCK"/>
+  <int value="802" label="CANNOT_BREAK_OPLOCK"/>
+  <int value="803" label="OPLOCK_HANDLE_CLOSED"/>
+  <int value="804" label="NO_ACE_CONDITION"/>
+  <int value="805" label="INVALID_ACE_CONDITION"/>
+  <int value="806" label="FILE_HANDLE_REVOKED"/>
+  <int value="807" label="IMAGE_AT_DIFFERENT_BASE"/>
+  <int value="994" label="EA_ACCESS_DENIED"/>
+  <int value="995" label="OPERATION_ABORTED"/>
+  <int value="996" label="IO_INCOMPLETE"/>
+  <int value="997" label="IO_PENDING"/>
+  <int value="998" label="NOACCESS"/>
+  <int value="999" label="SWAPERROR"/>
+</enum>
+
+<enum name="WinJumplistCategory" type="int">
+  <int value="0" label="Recently Closed"/>
+  <int value="1" label="Most Visited"/>
+  <int value="2" label="People"/>
+</enum>
+
+<enum name="WorkerThreadExitCode" type="int">
+  <int value="0" label="NotTerminated"/>
+  <int value="1" label="GracefullyTerminated"/>
+  <int value="2" label="SyncForciblyTerminated"/>
+  <int value="3" label="AsyncForciblyTerminated"/>
+</enum>
+
+<enum name="WrenchMenuAction" type="int">
+  <int value="0" label="New tab"/>
+  <int value="1" label="New window"/>
+  <int value="2" label="New incognito window"/>
+  <int value="3" label="Show bookmark bar"/>
+  <int value="4" label="Show bookmark manager"/>
+  <int value="5" label="Import settings"/>
+  <int value="6" label="Bookmark page"/>
+  <int value="7" label="Bookmark all tabs"/>
+  <int value="8" label="Pin to start screen"/>
+  <int value="9" label="Restore tab"/>
+  <int value="10" label="Win desktop restart"/>
+  <int value="11" label="Win8 metro restart"/>
+  <int value="12" label="Win chromeos restart"/>
+  <int value="13" label="Distill page"/>
+  <int value="14" label="Save page"/>
+  <int value="15" label="Find"/>
+  <int value="16" label="Print"/>
+  <int value="17" label="Cut"/>
+  <int value="18" label="Copy"/>
+  <int value="19" label="Paste"/>
+  <int value="20" label="Create hosted app"/>
+  <int value="21" label="Create shortcuts"/>
+  <int value="22" label="Manage extensions"/>
+  <int value="23" label="Task manager"/>
+  <int value="24" label="Clear browsing data"/>
+  <int value="25" label="View source"/>
+  <int value="26" label="Dev tools"/>
+  <int value="27" label="Dev tools console"/>
+  <int value="28" label="Dev tools devices"/>
+  <int value="29" label="Profiling enabled"/>
+  <int value="30" label="Zoom minus"/>
+  <int value="31" label="Zoom plus"/>
+  <int value="32" label="Fullscreen"/>
+  <int value="33" label="Show history"/>
+  <int value="34" label="Show downloads"/>
+  <int value="35" label="Show sync setup"/>
+  <int value="36" label="Options"/>
+  <int value="37" label="About"/>
+  <int value="38" label="Help page via menu"/>
+  <int value="39" label="Feedback"/>
+  <int value="40" label="Toggle request tablet site"/>
+  <int value="41" label="Recent tab"/>
+  <int value="42" label="Open a bookmark"/>
+  <int value="43" label="Exit"/>
+  <int value="44" label="Upgrade browser"/>
+  <int value="45" label="Cast"/>
+</enum>
+
+<enum name="XMLHttpRequestHeaderValueCategoryInRFC7230" type="int">
+  <int value="0" label="Header Value Invalid"/>
+  <int value="1" label="Header Value Affected By Normalization"/>
+  <int value="2" label="Header Value Valid"/>
+</enum>
+
+<enum name="XMLHttpRequestSendArrayBufferOrView" type="int">
+  <int value="0" label="XMLHttpRequestSendArrayBuffer"/>
+  <int value="1" label="XMLHttpRequestSendArrayBufferView"/>
+</enum>
+
+<enum name="YouTubeRewriteStatus" type="int">
+  <int value="0" label="Success">Embed was properly rewritten.</int>
+  <int value="1" label="Success, params were rewritten">
+    Embed was rewritten but the params had to be fixed.
+  </int>
+  <int value="2" label="Success, had JS API enabled">
+    Embed was rewritten even though JS API was enabled (Android only).
+  </int>
+  <int value="3" label="Embed not rewritten, JS API enabled">
+    Embed was not rewritten because JS API was enabled.
+  </int>
+</enum>
+
+</enums>
+
+<!-- Histogram suffixes list -->
+
+<histogram_suffixes_list>
+
+<histogram_suffixes name="AccountInvestigationReportingType">
+  <suffix name="OnChange"
+      label="Driven from a change in signin status or change in content area
+             GAIA accounts."/>
+  <suffix name="Periodic" label="Emitted once per 24 hours."/>
+  <affected-histogram name="Signin.CookieJar.ChromeAccountRelation"/>
+  <affected-histogram name="Signin.CookieJar.SignedInCount"/>
+  <affected-histogram name="Signin.CookieJar.SignedOutCount"/>
+  <affected-histogram name="Signin.CookieJar.StableAge"/>
+  <affected-histogram name="Signin.CookieJar.TotalCount"/>
+  <affected-histogram name="Signin.IsShared"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ActiveNetworkState">
+  <suffix name="Offline"
+      label="network manager thinks that the active network is offline"/>
+  <suffix name="Online"
+      label="network manager thinks that the active network is online"/>
+  <suffix name="RestrictedPool"
+      label="network manager thinks that the active network is behind portal"/>
+  <affected-histogram name="CaptivePortal.OOBE.DiscrepancyWithShill"/>
+  <affected-histogram name="CaptivePortal.Session.DiscrepancyWithShill"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AffiliationDummyData" separator=".">
+  <suffix name="OnStartup"
+      label="with the dummy data being requested shortly after start-up"/>
+  <suffix name="Periodic"
+      label="with the dummy data being requested periodically later"/>
+  <affected-histogram
+      name="PasswordManager.AffiliationDummyData.RequestResultCount"/>
+  <affected-histogram
+      name="PasswordManager.AffiliationDummyData.RequestSuccess"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AlternateProtocol">
+  <suffix name="AlternateProtocol_spdy"
+      label="with alternate protocol available but http is used"/>
+  <suffix name="AlternateProtocol_http"
+      label="(with alternate protocol available and spdy is used"/>
+  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
+  <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
+  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AndroidBootProgressEvents" separator="_">
+  <suffix name="ams_ready" label="For the boot_progress_ams_ready event."/>
+  <suffix name="enable_screen"
+      label="For the boot_progress_enable_screen event."/>
+  <suffix name="pms_data_scan_start"
+      label="For the boot_progress_pms_data_scan_start event."/>
+  <suffix name="pms_ready" label="For the boot_progress_pms_ready event."/>
+  <suffix name="pms_scan_end"
+      label="For the boot_progress_pms_scan_end event."/>
+  <suffix name="pms_start" label="For the boot_progress_pms_start event."/>
+  <suffix name="pms_system_scan_start"
+      label="For the boot_progress_pms_system_scan_start event."/>
+  <suffix name="preload_end" label="For the boot_progress_preload_end event."/>
+  <suffix name="preload_start"
+      label="For the boot_progress_preload_start event."/>
+  <suffix name="start" label="For the boot_progress_start event."/>
+  <suffix name="system_run" label="For the boot_progress_system_run event."/>
+  <affected-histogram name="Arc.boot_progress"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AndroidCrashUploadTypes">
+  <suffix name="Browser" label="Measures browser crash uploads."/>
+  <suffix name="GPU" label="Measures GPU crash uploads."/>
+  <suffix name="Other" label="Measures other crash uploads."/>
+  <suffix name="Renderer" label="Measures renderer crash uploads."/>
+  <affected-histogram name="Tab.AndroidCrashUpload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AndroidDownloadTypes" separator=".">
+  <suffix name="Audio"/>
+  <suffix name="Document"/>
+  <suffix name="Image"/>
+  <suffix name="OfflinePage"/>
+  <suffix name="Other"/>
+  <suffix name="Total"/>
+  <suffix name="Video"/>
+  <affected-histogram name="Android.DownloadManager.InitialCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AndroidGATTEvents" separator=".">
+  <suffix name="onCharacteristicRead.Status"/>
+  <suffix name="onCharacteristicWrite.Status"/>
+  <suffix name="onConnectionStateChange.Status.Connected"
+      label="While Connected"/>
+  <suffix name="onConnectionStateChange.Status.Disconnected"
+      label="While Disonnected"/>
+  <suffix name="onConnectionStateChange.Status.InvalidState"
+      label="While InvalidState"/>
+  <suffix name="onDescriptorRead.Status"/>
+  <suffix name="onDescriptorWrite.Status"/>
+  <suffix name="onServicesDiscovered.Status.Connected" label="While Connected"/>
+  <suffix name="onServicesDiscovered.Status.Disconnected"
+      label="While Disconnected"/>
+  <affected-histogram name="Bluetooth.Web.Android"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AndroidGetAccountsTypes">
+  <suffix name="AccountManager" label="Using Android AccountManager API"/>
+  <suffix name="GoogleAuthUtil" label="Using GoogleAuthUtil API"/>
+  <affected-histogram name="Signin.AndroidGetAccountsTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AndroidTabPersistentStoreTime" separator=".">
+  <suffix name="CleanupAllEncryptedTime">
+    <obsolete>
+      Original code deleted in a refactoring.
+    </obsolete>
+  </suffix>
+  <suffix name="LoadStateInternalPrefetchTime"/>
+  <suffix name="LoadStateInternalTime"/>
+  <suffix name="LoadStateTime"/>
+  <suffix name="MergeStateInternalTime"/>
+  <suffix name="MergeStateInternalFetchTime"/>
+  <suffix name="ReadMergedStateTime"/>
+  <suffix name="ReadSavedStateTime"/>
+  <suffix name="RestoreTabPrefetchTime"/>
+  <suffix name="RestoreTabTime"/>
+  <suffix name="SaveListTime"/>
+  <suffix name="SaveStateTime"/>
+  <suffix name="SaveTabsTime"/>
+  <affected-histogram name="Android.StrictMode.TabPersistentStore"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AppListFirstPaintWarmStartFast" separator="">
+  <suffix name="" label="Normal start."/>
+  <suffix name="Fast"
+      label="Fast start by skipping normal chrome.dll startup."/>
+  <affected-histogram name="Startup.AppListFirstPaintWarmStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AsyncDNSPref">
+  <suffix name="Disabled"/>
+  <suffix name="Enabled"/>
+  <affected-histogram name="AsyncDNS.PrefDefaultSource"/>
+  <affected-histogram name="AsyncDNS.PrefSource"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AsyncSlowStart">
+  <suffix name="AsyncSlowStart" label="Async Slow Start on"/>
+  <suffix name="AsyncSlowStart_off" label="Async Slow Start off"/>
+  <suffix name="AsyncSlowStart_on" label="Async Slow Start on"/>
+  <affected-histogram name="Net.Transaction_Connected_New"/>
+  <affected-histogram name="Renderer4.StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AttemptResultCode">
+  <obsolete>
+    Deprecated 2016/03. The async set-as-default experiments are finished.
+  </obsolete>
+  <suffix name="Success"/>
+  <suffix name="Failure"/>
+  <suffix name="Abandoned"/>
+  <suffix name="Retry"/>
+  <suffix name="NoErrorsNotDefault"/>
+  <affected-histogram name="DefaultBrowser.AsyncSetAsDefault.Duration"/>
+  <affected-histogram name="DefaultBrowser.SetDefaultAsyncDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AudioLatency" separator=".">
+  <suffix name="LatencyExactMs" label="Exact latency in milliseconds"/>
+  <suffix name="LatencyInteractive" label="Interactive latency"/>
+  <suffix name="LatencyRtc" label="RTC latency"/>
+  <suffix name="LatencyPlayback" label="Playback latency"/>
+  <affected-histogram name="Media.Audio.Render.BrowserCallbackRegularity"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillCreditCardInfoBarSaveType" separator=".">
+  <suffix name="Local" label="Local credit card save"/>
+  <suffix name="Server" label="Server/upload credit card save"/>
+  <affected-histogram name="Autofill.CreditCardInfoBar"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillDataAvailability" separator=".">
+  <suffix name="WithNoData" label="no autofill data"/>
+  <suffix name="WithOnlyServerData" label="only server autofill data"/>
+  <suffix name="WithOnlyLocalData" label="only local autofill data"/>
+  <suffix name="WithBothServerAndLocalData"
+      label="both server and local autofill data"/>
+  <affected-histogram name="Autofill.FormEvents.Address"/>
+  <affected-histogram name="Autofill.FormEvents.CreditCard"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillPayloadCompressionType" separator=".">
+  <suffix name="Query" label="Query request compression"/>
+  <suffix name="Upload" label="Upload request compression"/>
+  <affected-histogram name="Autofill.PayloadCompressionRatio"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillRealPanResultGroups" separator=".">
+  <suffix name="Failure" label="Failure"/>
+  <suffix name="NetworkError" label="Network errors"/>
+  <suffix name="Success" label="Success"/>
+  <affected-histogram name="Autofill.UnmaskPrompt.GetRealPanDuration"/>
+  <affected-histogram name="Autofill.UnmaskPrompt.UnmaskingDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillSaveCreditCardPromptDestination"
+    separator=".">
+  <suffix name="Local" label="to local storage"/>
+  <suffix name="Upload" label="to upload"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillSaveCreditCardPromptShow" separator=".">
+  <suffix name="FirstShow"
+      label="first time prompt is shown for a single credit card submit"/>
+  <suffix name="Reshows" label="all shows after the first one, combined"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillServerExperiments">
+  <obsolete>
+    Deprecated as of at least 2013. Current autofill experiments rely on Finch
+    rather than a custom experimentation setup.
+  </obsolete>
+  <suffix name="ar06" label="Acceptance ratio: 0.6"/>
+  <suffix name="ar1" label="Acceptance ratio: 1.0"/>
+  <suffix name="ar2" label="Acceptance ratio: 2.0"/>
+  <suffix name="ar4" label="Acceptance ratio: 4.0"/>
+  <suffix name="ar04wr3fs4"
+      label="Acceptance ratio: 0.4; winner lead ratio: 3.0; min form score: 4"/>
+  <suffix name="ar05wlr15"
+      label="Acceptance ratio: 0.5; winner lead ratio: 1.5"/>
+  <suffix name="ar05wlr25"
+      label="Acceptance ratio: 0.5; winner lead ratio: 2.5"/>
+  <suffix name="ar05wr15fs5"
+      label="Acceptance ratio: 0.5; winner lead ratio: 1.5; min form score: 5"/>
+  <suffix name="fp05" label="Probability picker algorithm, p=0.5"/>
+  <suffix name="fp025" label="Probability picker algorithm, p=0.25"/>
+  <suffix name="fp05cc03"
+      label="Probability picker algorithm, p=0.5; p_ccname=0.3"/>
+  <suffix name="fp05cco03"
+      label="Probability picker algorithm, p=0.5;
+             p_ccname_given_other_cc_fields=0.3"/>
+  <suffix name="fp05cco03cstd"
+      label="Probability picker algorithm, p=0.5;
+             p_ccname_given_other_cc_fields=0.3; with fallback to the default
+             algorithm"/>
+  <suffix name="fp05cc03e1"
+      label="Probability picker algorithm, p=0.5 for cc and company name
+             fields; p_ccname_given_other_cc_fields=0.3; with fallback to the
+             default algorithm;"/>
+  <suffix name="tbar1" label="Use only Toolbar upload data"/>
+  <affected-histogram name="Autofill.Quality"/>
+  <affected-histogram name="AutoFill.Quality"/>
+  <affected-histogram name="Autofill.Quality.HeuristicType"/>
+  <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
+  <affected-histogram name="Autofill.Quality.PredictedType"/>
+  <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
+  <affected-histogram name="Autofill.Quality.ServerType"/>
+  <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillStoredServerCardType" separator=".">
+  <suffix name="Masked" label="Masked cards"/>
+  <suffix name="Unmasked" label="Unmasked cards (locally cached)"/>
+  <affected-histogram name="Autofill.StoredServerCreditCardCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="AutofillUnmaskPromptCloseReasonEvents" separator=".">
+  <suffix name="Failure" label="Failure"/>
+  <suffix name="NoAttempts" label="No attempts"/>
+  <suffix name="Success" label="Success"/>
+  <suffix name="AbandonUnmasking" label="Abandon unmasking"/>
+  <affected-histogram name="Autofill.UnmaskPrompt.Duration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BadBlockCounts" separator=".">
+  <suffix name="Backupsys" label="backupsys partition"/>
+  <suffix name="Bbt" label="bbt partition"/>
+  <suffix name="Block0" label="block0 partition"/>
+  <suffix name="Bootloader" label="bootloader partition"/>
+  <suffix name="Cache" label="cache partition"/>
+  <suffix name="Factory_store" label="factory_store partition"/>
+  <suffix name="Fts" label="fts partition"/>
+  <suffix name="Kernel" label="kernel partition"/>
+  <suffix name="Postbootloader" label="postbootloader partition"/>
+  <suffix name="Postbootloader-B" label="postbootloader-B partition"/>
+  <suffix name="Prebootloader" label="prebootloader partition"/>
+  <suffix name="Recovery" label="recovery partition"/>
+  <suffix name="Rootfs" label="rootfs partition"/>
+  <suffix name="Total" label="total partition"/>
+  <suffix name="TZ" label="TZ partition"/>
+  <suffix name="TZ-B" label="TZ-B partition"/>
+  <suffix name="Userdata" label="userdata partition"/>
+  <affected-histogram name="Platform.Storage.Flash.BadBlocks"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BatchStunPingParameters" separator=".">
+  <suffix name="1ms.1" label="1ms gap, 1st batch"/>
+  <suffix name="1ms.2" label="1ms gap, 2nd batch"/>
+  <suffix name="1ms.3" label="1ms gap, 3rd batch"/>
+  <suffix name="5ms.1" label="5ms gap, 1st batch"/>
+  <suffix name="5ms.2" label="5ms gap, 2nd batch"/>
+  <suffix name="5ms.3" label="5ms gap, 3rd batch"/>
+  <suffix name="10ms.1" label="10ms gap, 1st batch"/>
+  <suffix name="10ms.2" label="10ms gap, 2nd batch"/>
+  <suffix name="10ms.3" label="10ms gap, 3rd batch"/>
+  <suffix name="25ms.1" label="25ms gap, 1st batch"/>
+  <suffix name="25ms.2" label="25ms gap, 2nd batch"/>
+  <suffix name="25ms.3" label="25ms gap, 3rd batch"/>
+  <suffix name="50ms.1" label="50ms gap, 1st batch"/>
+  <suffix name="50ms.2" label="50ms gap, 2nd batch"/>
+  <suffix name="50ms.3" label="50ms gap, 3rd batch"/>
+  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.NoNAT"/>
+  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.NonSymNAT"/>
+  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.SymNAT"/>
+  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent.UnknownNAT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasDrawImageType" separator=".">
+  <suffix name="Canvas"/>
+  <suffix name="ImageBitmap"/>
+  <suffix name="Others"/>
+  <suffix name="SVG"/>
+  <suffix name="Video"/>
+  <affected-histogram name="Blink.Canvas.DrawImage"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasDurationBySource" separator=".">
+  <suffix name="CPU"/>
+  <suffix name="DisplayList"/>
+  <suffix name="GPU"/>
+  <affected-histogram name="Blink.Canvas.DrawImage.Canvas"/>
+  <affected-histogram name="Blink.Canvas.DrawImage.ImageBitmap"/>
+  <affected-histogram name="Blink.Canvas.DrawImage.Others"/>
+  <affected-histogram name="Blink.Canvas.DrawImage.SVG"/>
+  <affected-histogram name="Blink.Canvas.DrawImage.Video"/>
+  <affected-histogram name="Blink.Canvas.GetImageData"/>
+  <affected-histogram name="Blink.Canvas.PutImageData"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasOffscreenCommitType" separator=".">
+  <suffix name="GPUCanvasGPUCompositingMain"/>
+  <suffix name="GPUCanvasGPUCompositingWorker"/>
+  <suffix name="GPUCanvasSoftwareCompositingMain"/>
+  <suffix name="GPUCanvasSoftwareCompositingWorker"/>
+  <suffix name="SoftwareCanvasGPUCompositingMain"/>
+  <suffix name="SoftwareCanvasGPUCompositingWorker"/>
+  <suffix name="SoftwareCanvasSoftwareCompositingMain"/>
+  <suffix name="SoftwareCanvasSoftwareCompositingWorker"/>
+  <affected-histogram name="Blink.Canvas.OffscreenCommitTimer"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasToBlobIdleEncodAndDelayType" separator=".">
+  <suffix name="JPEG"/>
+  <suffix name="PNG"/>
+  <affected-histogram name="Blink.Canvas.ToBlob.IdleEncodeDuration"/>
+  <affected-histogram name="Blink.Canvas.ToBlob.InitiateEncodingDelay"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasToBlobType" separator=".">
+  <suffix name="JPEG"/>
+  <suffix name="PNG"/>
+  <suffix name="WEBP"/>
+  <affected-histogram name="Blink.Canvas.ToBlobDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkCanvasToDataURLTime" separator=".">
+  <suffix name="BMP">
+    <obsolete>
+      Removed in Oct 2016
+    </obsolete>
+  </suffix>
+  <suffix name="GIF">
+    <obsolete>
+      Removed in Oct 2016
+    </obsolete>
+  </suffix>
+  <suffix name="ICON">
+    <obsolete>
+      Removed in Oct 2016
+    </obsolete>
+  </suffix>
+  <suffix name="JPEG"/>
+  <suffix name="PNG"/>
+  <suffix name="TIFF">
+    <obsolete>
+      Removed in Oct 2016
+    </obsolete>
+  </suffix>
+  <suffix name="Unknown">
+    <obsolete>
+      Removed in Oct 2016
+    </obsolete>
+  </suffix>
+  <suffix name="WEBP"/>
+  <affected-histogram name="Blink.Canvas.ToDataURL"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="BlinkGCReason">
+  <suffix name="IdleGC" label="Idle GC"/>
+  <suffix name="PreciseGC" label="Precise GC"/>
+  <suffix name="ConservativeGC" label="Conservative GC"/>
+  <suffix name="ForcedGC" label="Forced GC for testing"/>
+  <suffix name="MemoryPressureGC" label="Memory pressure GC"/>
+  <suffix name="PageNavigationGC" label="Page navigation GC"/>
+  <affected-histogram name="BlinkGC.CollectionRate"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CachedResourceType" separator=".">
+  <suffix name="JavaScript"
+      label="Showing cache patterns only for JavaScript resources."/>
+  <suffix name="CSS" label="Showing cache patterns only for CSS resources."/>
+  <suffix name="MainFrameHTML"
+      label="Showing cache patterns only for main-frame HTML resources."/>
+  <suffix name="NonMainFrameHTML"
+      label="Showing cache patterns only for non-main-frame HTML resources."/>
+  <suffix name="Image"
+      label="Showing cache patterns only for image resources."/>
+  <suffix name="TinyImage"
+      label="Showing cache patterns only for image resources with
+             content-length less than 100 bytes."/>
+  <suffix name="NonTinyImage"
+      label="Showing cache patterns only for image resources with
+             content-length &gt;= 100 bytes."/>
+  <suffix name="Font" label="Showing cache patterns only for font resources."/>
+  <suffix name="Audio"
+      label="Showing cache patterns only for audio resources."/>
+  <suffix name="Video"
+      label="Showing cache patterns only for video resources."/>
+  <affected-histogram name="HttpCache.Pattern"/>
+  <affected-histogram
+      name="HttpCache.StaleEntry.FreshnessPeriodsSinceLastUsed"/>
+  <affected-histogram name="HttpCache.ValidationCause"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CacheInstance" separator="." ordering="prefix">
+  <suffix name="App"
+      label="Collected from the HTML5 Application Cache instance."/>
+  <suffix name="Http" label="Collected from the HTTP Cache instance."/>
+  <suffix name="Media" label="Collected from the Media Cache instance."/>
+  <affected-histogram name="SimpleCache.CacheSizeOnInit"/>
+  <affected-histogram name="SimpleCache.CheckCRCResult"/>
+  <affected-histogram name="SimpleCache.CreationToIndex"/>
+  <affected-histogram name="SimpleCache.CreationToIndexFail"/>
+  <affected-histogram name="SimpleCache.EntryCreatedAndStream2Omitted"/>
+  <affected-histogram name="SimpleCache.EntryCreationResult"/>
+  <affected-histogram name="SimpleCache.EntryCreationTime"/>
+  <affected-histogram name="SimpleCache.EntryOpenedAndStream2Removed"/>
+  <affected-histogram name="SimpleCache.EntryOperationsPending"/>
+  <affected-histogram name="SimpleCache.Eviction.CacheSizeOnStart"/>
+  <affected-histogram name="SimpleCache.Eviction.CacheSizeOnStart2"/>
+  <affected-histogram name="SimpleCache.Eviction.EntryCount"/>
+  <affected-histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart"/>
+  <affected-histogram name="SimpleCache.Eviction.MaxCacheSizeOnStart2"/>
+  <affected-histogram name="SimpleCache.Eviction.Result"/>
+  <affected-histogram name="SimpleCache.Eviction.SizeOfEvicted"/>
+  <affected-histogram name="SimpleCache.Eviction.SizeOfEvicted2"/>
+  <affected-histogram name="SimpleCache.Eviction.SizeWhenDone"/>
+  <affected-histogram name="SimpleCache.Eviction.SizeWhenDone2"/>
+  <affected-histogram name="SimpleCache.Eviction.TimeToDone"/>
+  <affected-histogram name="SimpleCache.Eviction.TimeToSelectEntries"/>
+  <affected-histogram name="SimpleCache.FileDescriptorLimitHard"/>
+  <affected-histogram name="SimpleCache.FileDescriptorLimitSoft"/>
+  <affected-histogram name="SimpleCache.FileDescriptorLimitStatus"/>
+  <affected-histogram name="SimpleCache.GlobalOpenEntryCount"/>
+  <affected-histogram name="SimpleCache.HeaderSize"/>
+  <affected-histogram name="SimpleCache.HeaderSizeChange"/>
+  <affected-histogram name="SimpleCache.HeaderSizeDecreaseAbsolute"/>
+  <affected-histogram name="SimpleCache.HeaderSizeDecreasePercentage"/>
+  <affected-histogram name="SimpleCache.HeaderSizeIncreaseAbsolute"/>
+  <affected-histogram name="SimpleCache.HeaderSizeIncreasePercentage"/>
+  <affected-histogram name="SimpleCache.IndexCorrupt"/>
+  <affected-histogram name="SimpleCache.IndexCreatedEntryCount"/>
+  <affected-histogram name="SimpleCache.IndexEntriesLoaded"/>
+  <affected-histogram name="SimpleCache.IndexEntriesRestored"/>
+  <affected-histogram name="SimpleCache.IndexFileStateOnLoad"/>
+  <affected-histogram name="SimpleCache.IndexInitializationWaiters"/>
+  <affected-histogram name="SimpleCache.IndexInitializeMethod"/>
+  <affected-histogram name="SimpleCache.IndexLoadTime"/>
+  <affected-histogram name="SimpleCache.IndexNumEntriesOnInit"/>
+  <affected-histogram name="SimpleCache.IndexNumEntriesOnWrite"/>
+  <affected-histogram name="SimpleCache.IndexRestoreTime"/>
+  <affected-histogram name="SimpleCache.IndexWriteInterval.Background"/>
+  <affected-histogram name="SimpleCache.IndexWriteInterval.Foreground"/>
+  <affected-histogram name="SimpleCache.IndexWriteReason"/>
+  <affected-histogram name="SimpleCache.IndexWriteReasonAtLoad"/>
+  <affected-histogram name="SimpleCache.IndexWriteToDiskTime.Background"/>
+  <affected-histogram name="SimpleCache.IndexWriteToDiskTime.Foreground"/>
+  <affected-histogram name="SimpleCache.KeyMatchedOnOpen"/>
+  <affected-histogram name="SimpleCache.LastClusterLossPercent"/>
+  <affected-histogram name="SimpleCache.LastClusterSize"/>
+  <affected-histogram name="SimpleCache.MaxCacheSizeOnInit"/>
+  <affected-histogram name="SimpleCache.OpenEntryIndexState"/>
+  <affected-histogram name="SimpleCache.PercentFullOnInit"/>
+  <affected-histogram name="SimpleCache.ReadIsParallelizable"/>
+  <affected-histogram name="SimpleCache.ReadResult"/>
+  <affected-histogram name="SimpleCache.StaleIndexExtraEntryCount"/>
+  <affected-histogram name="SimpleCache.StaleIndexMissedEntryCount"/>
+  <affected-histogram name="SimpleCache.StaleIndexQuality"/>
+  <affected-histogram name="SimpleCache.SyncCheckEOFHasCrc"/>
+  <affected-histogram name="SimpleCache.SyncCheckEOFResult"/>
+  <affected-histogram name="SimpleCache.SyncCloseResult"/>
+  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError"/>
+  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError_WithIndex"/>
+  <affected-histogram
+      name="SimpleCache.SyncCreatePlatformFileError_WithoutIndex"/>
+  <affected-histogram name="SimpleCache.SyncCreateResult"/>
+  <affected-histogram name="SimpleCache.SyncCreateResult_WithIndex"/>
+  <affected-histogram name="SimpleCache.SyncCreateResult_WithoutIndex"/>
+  <affected-histogram name="SimpleCache.SyncKeySHA256Result"/>
+  <affected-histogram name="SimpleCache.SyncOpenEntryAge"/>
+  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError"/>
+  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError_WithIndex"/>
+  <affected-histogram
+      name="SimpleCache.SyncOpenPlatformFileError_WithoutIndex"/>
+  <affected-histogram name="SimpleCache.SyncOpenResult"/>
+  <affected-histogram name="SimpleCache.SyncOpenResult_WithIndex"/>
+  <affected-histogram name="SimpleCache.SyncOpenResult_WithoutIndex"/>
+  <affected-histogram name="SimpleCache.SyncWriteResult"/>
+  <affected-histogram name="SimpleCache.WriteDependencyType"/>
+  <affected-histogram name="SimpleCache.WriteResult"/>
+  <affected-histogram name="SimpleCache.WriteResult2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CacheListSize">
+  <obsolete>
+    Experiments no longer active.
+  </obsolete>
+  <suffix name="CacheListSize_12" label="Control"/>
+  <suffix name="CacheListSize_13" label="Extended deleted list (2x)"/>
+  <suffix name="CacheListSize_14" label="Out of the experiment"/>
+  <affected-histogram name="DiskCache.TotalIOTime"/>
+  <affected-histogram name="Net.HttpJob.TotalTime"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.BeginToFinish_Reload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CacheSensitivityAnalysis">
+  <obsolete>
+    Experiments no longer active.
+  </obsolete>
+  <suffix name="No" label="Turned off"/>
+  <suffix name="Control" label="Control group"/>
+  <suffix name="ControlA" label="Control, Group A"/>
+  <suffix name="ControlB" label="Control, Group B"/>
+  <suffix name="100" label="100% slowdown"/>
+  <suffix name="100A" label="100% slowdown, Group A"/>
+  <suffix name="100B" label="100% slowdown, Group B"/>
+  <suffix name="200A" label="200% slowdown, Group A"/>
+  <suffix name="200B" label="200% slowdown, Group B"/>
+  <suffix name="400A" label="400% slowdown, Group A"/>
+  <suffix name="400B" label="400% slowdown, Group B"/>
+  <affected-histogram name="Net.HttpJob.TotalTime"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
+  <affected-histogram name="PLT.BeginToFinish_CacheSensitivity"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_CacheSensitivity"/>
+  <affected-histogram name="PLT.BeginToFirstPaint_CacheSensitivity"/>
+  <affected-histogram name="PLT.CommitToFirstPaint_CacheSensitivity"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CacheSensitivityHistograms">
+  <suffix name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.BeginToFirstPaint"/>
+  <affected-histogram name="PLT.CommitToFirstPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CacheSensitivityHistograms">
+  <suffix name="CacheSensitivity" label="Cache Sensivitiy Analysis"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.BeginToFirstPaint"/>
+  <affected-histogram name="PLT.CommitToFirstPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CacheThrottle">
+  <suffix name="CacheThrottle_On" label="Throttling payload requests."/>
+  <suffix name="CacheThrottle_Off" label="Control group."/>
+  <affected-histogram name="DiskCache.TotalIOTime"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinish_HistoryLoad"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.BeginToFinish_Reload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CanvasRequestedImageMimeTypeFunctions">
+  <suffix name="toDataURL" label="Image formats passed to canvas.toDataURL"/>
+  <suffix name="toBlobCallback"
+      label="Image formats passed to canvas.toBlob (callback)"/>
+  <affected-histogram name="Canvas.RequestedImageMimeTypes"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CertificateTypeAlgorithms" separator=".">
+  <owner>rsleevi@chromium.org</owner>
+  <suffix name="DH" label="DH"/>
+  <suffix name="DSA" label="DSA"/>
+  <suffix name="ECDH" label="ECDH"/>
+  <suffix name="ECDSA" label="ECDSA"/>
+  <suffix name="RSA" label="RSA"/>
+  <suffix name="Unknown" label="SPKI unrecognized by cert library"/>
+  <suffix name="Unsupported" label="Un-histogrammed type - please fix"/>
+  <affected-histogram name="CertificateType.BR.Intermediate"/>
+  <affected-histogram name="CertificateType.BR.Leaf"/>
+  <affected-histogram name="CertificateType.BR.Root"/>
+  <affected-histogram name="CertificateType.NonBR.Intermediate"/>
+  <affected-histogram name="CertificateType.NonBR.Leaf"/>
+  <affected-histogram name="CertificateType.NonBR.Root"/>
+  <affected-histogram name="CertificateType2.BR.Intermediate"/>
+  <affected-histogram name="CertificateType2.BR.Leaf"/>
+  <affected-histogram name="CertificateType2.BR.Root"/>
+  <affected-histogram name="CertificateType2.NonBR.Intermediate"/>
+  <affected-histogram name="CertificateType2.NonBR.Leaf"/>
+  <affected-histogram name="CertificateType2.NonBR.Root"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CertificateTypeBRValidity" separator=".">
+  <obsolete>
+    Deprecated as of 8/2013. This histogram only considered the leaf certificate
+    expiry date as a proxy for whether a certificate was in-scope for the BRs,
+    but did not consider the issuance date. As some CAs have issued long-lived
+    certs prior to the BRs, this disproportionately reported those certs as
+    being subject to the BRs, but non-compliant, when in reality they're not
+    subject.
+  </obsolete>
+  <suffix name="BR"
+      label="The *leaf* certificate of the chain expires after 2013-12-31,
+             meaning that it should be in scope for the Baseline
+             Requirement's key size requirements"/>
+  <suffix name="NonBR"
+      label="The *leaf* certificate of the chain expires on or before
+             2013-12-31"/>
+  <affected-histogram name="CertificateType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CertificateTypeBRValidity2" separator=".">
+  <suffix name="BR"
+      label="The *leaf* certificate of the chain expires after 2013-12-31 and
+             was issued on or after 2012-07-01, as judged by the notBefore,
+             meaning that it should be in scope for the Baseline
+             Requirement's key size requirements"/>
+  <suffix name="NonBR"
+      label="The *leaf* certificate of the chain expires on or before
+             2013-12-31 or was issued before 2012-07-01"/>
+  <affected-histogram name="CertificateType2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CertificateTypeChainPosition" separator=".">
+  <suffix name="Intermediate" label="Intermediate's SPKI"/>
+  <suffix name="Leaf" label="Leaf's SPKI"/>
+  <suffix name="Root" label="Root's SPKI"/>
+  <affected-histogram name="CertificateType.BR"/>
+  <affected-histogram name="CertificateType.NonBR"/>
+  <affected-histogram name="CertificateType2.BR"/>
+  <affected-histogram name="CertificateType2.NonBR"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CertIo" separator="">
+  <obsolete>
+    Deprecated as of 01/2016. CertCacheTrial has been removed.
+    https://crbug.com/522312
+  </obsolete>
+  <suffix name="ReadSuccess"
+      label="success rate of reading a certificate from the disk cache"/>
+  <suffix name="ReadFailure"
+      label="failure rate of reading a certificate from the disk cache"/>
+  <suffix name="WriteSuccess"
+      label="success rate of writing a certificate to the disk cache"/>
+  <suffix name="WriteFailure"
+      label="failure rate of writing a certificate to the disk cache"/>
+  <affected-histogram name="DiskBasedCertCache.CertIo"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ChromeActivityName" separator=".">
+  <suffix name="ChromeTabbedActivity"
+      label="Activity launched in TABBED mode on Android"/>
+  <suffix name="DocumentActivity"
+      label="Activity launched in DOCUMENT mode (Tabs and apps together) on
+             Android"/>
+  <suffix name="CustomTabActivity"
+      label="Activity launched with a CUSTOM TAB on Android"/>
+  <affected-histogram name="MobileStartup.ToolbarFirstDrawTime"/>
+  <affected-histogram name="MobileStartup.ToolbarFirstFocusTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ChromeOS.MachineIdRegen.AgeSeconds">
+  <suffix name="Network"/>
+  <suffix name="Periodic"/>
+  <suffix name="Unknown"/>
+  <affected-histogram name="ChromeOS.MachineIdRegen.AgeSeconds"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Clients.StaleWhileRevalidateExperiment" separator="."
+    ordering="prefix">
+  <suffix name="Clients.StaleWhileRevalidateExperiment"
+      label="Timing was recorded on one of the domains of focus for
+             stale-while-revalidate"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ClockResolution" separator=".">
+  <obsolete>
+    These were temporary metrics intended to understand whether high/low
+    resolution clocks adversely impact page load metrics. After collecting a few
+    months of data it was determined that clock resolution doesn't adversely
+    impact our metrics, and that these histograms were no longer needed.
+  </obsolete>
+  <suffix name="HighResolutionClock"
+      label="base::TimeTicks::IsHighResolution() is true for this measurement"/>
+  <suffix name="LowResolutionClock"
+      label="base::TimeTicks::IsHighResolution() is false for this
+             measurement"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CloudPrintRequests" separator=".">
+  <suffix name="Register" label="Register request"/>
+  <suffix name="UpdatePrinter" label="Update printer request"/>
+  <suffix name="DownloadData" label="Download data request"/>
+  <suffix name="Other" label="Other requests"/>
+  <affected-histogram name="CloudPrint.UrlFetcherDownloadSize"/>
+  <affected-histogram name="CloudPrint.UrlFetcherRequestTime"/>
+  <affected-histogram name="CloudPrint.UrlFetcherRetries"/>
+  <affected-histogram name="CloudPrint.UrlFetcherUploadSize"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CompositorTimingHistoryProcess" separator="."
+    ordering="prefix">
+  <suffix name="Browser"/>
+  <suffix name="Renderer"/>
+  <affected-histogram name="Scheduling.ActivateDuration2"/>
+  <affected-histogram name="Scheduling.BeginMainFrameIntervalCritical2"/>
+  <affected-histogram name="Scheduling.BeginMainFrameIntervalNotCritical2"/>
+  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical2"/>
+  <affected-histogram
+      name="Scheduling.BeginMainFrameQueueDurationNotCritical2"/>
+  <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration2"/>
+  <affected-histogram name="Scheduling.CommitInterval2"/>
+  <affected-histogram name="Scheduling.CommitToReadyToActivateDuration2"/>
+  <affected-histogram name="Scheduling.DrawDuration2"/>
+  <affected-histogram name="Scheduling.DrawInterval2"/>
+  <affected-histogram name="Scheduling.MainAndImplFrameTimeDelta2"/>
+  <affected-histogram name="Scheduling.PrepareTilesDuration2"/>
+  <affected-histogram name="Scheduling.SwapAckWasFast"/>
+  <affected-histogram name="Scheduling.SwapToAckLatency2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CompositorTimingHistoryProcess2" separator="."
+    ordering="prefix">
+  <suffix name="Browser"/>
+  <suffix name="Renderer"/>
+  <affected-histogram name="Scheduling.PendingTreeDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CompositorTimingHistoryProcessObsolete" separator="."
+    ordering="prefix">
+  <obsolete>
+    These used an old bucketing scheme that that had too many buckets and were
+    an inefficient usage of UMA bandwidth. They have been replaced by new
+    metrics of the same name with a &quot;2&quot; appended to them.
+  </obsolete>
+  <suffix name="Browser"/>
+  <suffix name="Renderer"/>
+  <affected-histogram name="Scheduling.ActivateDuration"/>
+  <affected-histogram name="Scheduling.BeginMainFrameIntervalCritical"/>
+  <affected-histogram name="Scheduling.BeginMainFrameIntervalNotCritical"/>
+  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationCritical"/>
+  <affected-histogram name="Scheduling.BeginMainFrameQueueDurationNotCritical"/>
+  <affected-histogram name="Scheduling.BeginMainFrameStartToCommitDuration"/>
+  <affected-histogram name="Scheduling.BeginMainFrameToCommitDuration"/>
+  <affected-histogram name="Scheduling.CommitInterval"/>
+  <affected-histogram name="Scheduling.CommitToReadyToActivateDuration"/>
+  <affected-histogram name="Scheduling.DrawDuration"/>
+  <affected-histogram name="Scheduling.DrawInterval"/>
+  <affected-histogram name="Scheduling.MainAndImplFrameTimeDelta"/>
+  <affected-histogram name="Scheduling.PrepareTilesDuration"/>
+  <affected-histogram name="Scheduling.SwapToAckLatency"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CompositorTimingHistorySubcategory" separator=".">
+  <obsolete>
+    Estimates don't need long term monitoring.
+  </obsolete>
+  <suffix name="NotUsedForEstimate"
+      label="Samples that don't affect estimates. For example, because we are
+             coming out of idle."/>
+  <suffix name="Overestimate"
+      label="Tracks when the compositor's estimates were too high and by how
+             much."/>
+  <suffix name="Underestimate"
+      label="Tracks when the compositor's estimates were too low and by how
+             much."/>
+  <affected-histogram name="Scheduling.Browser.ActivateDuration"/>
+  <affected-histogram name="Scheduling.Browser.BeginMainFrameToCommitDuration"/>
+  <affected-histogram
+      name="Scheduling.Browser.CommitToReadyToActivateDuration"/>
+  <affected-histogram name="Scheduling.Browser.DrawDuration"/>
+  <affected-histogram name="Scheduling.Browser.PrepareTilesDuration"/>
+  <affected-histogram name="Scheduling.Renderer.ActivateDuration"/>
+  <affected-histogram
+      name="Scheduling.Renderer.BeginMainFrameToCommitDuration"/>
+  <affected-histogram
+      name="Scheduling.Renderer.CommitToReadyToActivateDuration"/>
+  <affected-histogram name="Scheduling.Renderer.DrawDuration"/>
+  <affected-histogram name="Scheduling.Renderer.PrepareTilesDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CompositorTimingHistorySubcategory2" separator=".">
+  <obsolete>
+    Estimates don't need long term monitoring.
+  </obsolete>
+  <suffix name="NotUsedForEstimate"
+      label="Samples that don't affect estimates. For example, because we are
+             coming out of idle."/>
+  <affected-histogram
+      name="Scheduling.Browser.BeginMainFrameQueueDurationCritical"/>
+  <affected-histogram
+      name="Scheduling.Browser.BeginMainFrameQueueDurationNotCritical"/>
+  <affected-histogram
+      name="Scheduling.Browser.BeginMainFrameStartToCommitDuration"/>
+  <affected-histogram
+      name="Scheduling.Renderer.BeginMainFrameQueueDurationCritical"/>
+  <affected-histogram
+      name="Scheduling.Renderer.BeginMainFrameQueueDurationNotCritical"/>
+  <affected-histogram
+      name="Scheduling.Renderer.BeginMainFrameStartToCommitDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ConnCountImpact">
+  <suffix name="conn_count_16" label="with 16 persistent connections per host"/>
+  <suffix name="conn_count_4" label="with 4 persistent connections per host"/>
+  <suffix name="conn_count_5" label="with 5 persistent connections per host"/>
+  <suffix name="conn_count_6" label="with 6 persistent connections per host"/>
+  <suffix name="conn_count_7" label="with 7 persistent connections per host"/>
+  <suffix name="conn_count_8" label="with 8 persistent connections per host"/>
+  <suffix name="conn_count_9" label="with 9 persistent connections per host"/>
+  <affected-histogram name="Net.Transaction_Connected_New"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="Renderer4.Abandoned"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ConnectivityDiagnostics" separator=".">
+  <suffix name="0" label="INTERNET_DISCONNECTED"/>
+  <suffix name="1" label="CHROME_VERSION"/>
+  <suffix name="2" label="CHROMEOS_VERSION"/>
+  <suffix name="3" label="DNS_RESOLVER_PRESENT"/>
+  <suffix name="4" label="CAPTIVE_PORTAL_DNS"/>
+  <suffix name="5" label="CAPTIVE_PORTAL_HTTP"/>
+  <suffix name="6" label="FIREWALL_80"/>
+  <suffix name="7" label="FIREWALL_443"/>
+  <suffix name="8" label="RESOLVER_LATENCY"/>
+  <suffix name="9" label="HTTP_LATENCY"/>
+  <suffix name="10" label="NIC_SIGNAL_STRENGTH"/>
+  <suffix name="11" label="PING_GATEWAY"/>
+  <affected-histogram name="ConnectivityDiagnostics.TestVerdict"/>
+  <affected-histogram name="ConnectivityDiagnostics.TimeTaken"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ConnnectBackupJobs">
+  <suffix name="ConnectBackupJobsEnabled"/>
+  <suffix name="ConnectBackupJobsDisabled"/>
+  <affected-histogram name="Net.PreconnectUtilization"/>
+  <affected-histogram name="Net.PreconnectUtilization2"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.LoadType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ContentSettingsType" separator=".">
+  <suffix name="app-banner" label="App banner exceptions"/>
+  <suffix name="autoplay" label="Autoplay exception"/>
+  <suffix name="auto-select-certificate" label="Auto-select cert exceptions"/>
+  <suffix name="automatic-downloads" label="Automatic downloads exceptions"/>
+  <suffix name="background-sync" label="Background sync exceptions"/>
+  <suffix name="bluetooth-guard" label="Bluetooth guard exceptions"/>
+  <suffix name="cookies" label="Cookies exceptions"/>
+  <suffix name="durable-storage" label="Durable Storage Exceptions"/>
+  <suffix name="fullscreen" label="Fullscreen exceptions"/>
+  <suffix name="geolocation" label="Geolocation exceptions"/>
+  <suffix name="images" label="Images exceptions"/>
+  <suffix name="javascript" label="JavaScript exceptions"/>
+  <suffix name="keygen" label="Keygen exceptions"/>
+  <suffix name="media-stream-camera" label="Camera exceptions"/>
+  <suffix name="media-stream-mic" label="Microphone exceptions"/>
+  <suffix name="midi-sysex" label="Midi exceptions"/>
+  <suffix name="mixed-script" label="Mixed script exceptions"/>
+  <suffix name="mouselock" label="Mouse lock exceptions"/>
+  <suffix name="notifications" label="Notification exceptions"/>
+  <suffix name="plugins" label="Plugins exceptions"/>
+  <suffix name="popups" label="Popups exceptions"/>
+  <suffix name="ppapi-broker" label="Ppapi broker exceptions"/>
+  <suffix name="protected-media-identifier" label="Protected media exceptions"/>
+  <suffix name="protocol-handler" label="Protocol handler exceptions"/>
+  <suffix name="push-messaging" label="Push messaging exceptions"/>
+  <suffix name="site-engagement" label="Site engagement exceptions"/>
+  <suffix name="ssl-cert-decisions" label="SSL cert decisions exceptions"/>
+  <suffix name="usb-chooser-data" label="USB chooser data exceptions"/>
+  <affected-histogram name="ContentSettings.Exceptions"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ContentSuggestionCategory" separator=".">
+  <suffix name="RecentTabs" label="Recent (offline) tabs"/>
+  <suffix name="Downloads" label="Downloads"/>
+  <suffix name="Bookmarks" label="Bookmarks"/>
+  <suffix name="PhysicalWeb" label="Physical Web pages"/>
+  <suffix name="Articles" label="Articles for you"/>
+  <suffix name="ForeignTabs" label="Open tabs on other devices"/>
+  <suffix name="Experimental" label="Experimental"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.CountOnNtpOpened"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.DismissedUnvisited"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.DismissedVisited"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpened"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpenedAge"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.MenuOpenedScore"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.MoreButtonClicked"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.MoreButtonShown"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.OpenDisposition"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.Opened"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedAge"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.OpenedScore"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.Shown"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.ShownAge"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.ShownScore"/>
+  <affected-histogram name="NewTabPage.ContentSuggestions.VisitDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ContextMenuType" separator=".">
+  <suffix name="Link"
+      label="The context menu was shown for a (non-image) link"/>
+  <suffix name="Image"
+      label="The context menu was shown for a (non-link) image"/>
+  <suffix name="ImageLink"
+      label="The context menu was shown for an image which is also a link"/>
+  <suffix name="Video" label="The context menu was shown for a video"/>
+  <suffix name="SelectedText"
+      label="The context menu was shown for a text selection"/>
+  <affected-histogram name="ContextMenu.SelectedOption"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ContextType" separator=".">
+  <suffix name="BrowserCompositor"
+      label="A BrowserCompositor GPU command buffer context"/>
+  <suffix name="BrowserMainThread"
+      label="A BrowserMainThread GPU command buffer context"/>
+  <suffix name="RenderCompositor"
+      label="A RenderCompositor GPU command buffer context"/>
+  <suffix name="RenderMainThread"
+      label="A RenderMainThread GPU command buffer context"/>
+  <suffix name="RenderWorker"
+      label="A RenderWorker GPU command buffer context"/>
+  <suffix name="Unknown" label="A GPU command buffer context of unknown type"/>
+  <suffix name="VideoAccelerator"
+      label="A VideoAccelerator GPU command buffer context"/>
+  <suffix name="VideoCapture"
+      label="A VideoCapture GPU command buffer context"/>
+  <suffix name="WebGL" label="A WebGL GPU command buffer context"/>
+  <suffix name="Media" label="The media worker command buffer context"/>
+  <suffix name="BlimpRenderCompositor"
+      label="BlimpCompositor compositor command buffer context"/>
+  <suffix name="BlimpRenderWorker"
+      label="BlimpCompositor worker command buffer context"/>
+  <affected-histogram name="GPU.ContextLost"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ContextualSearchQuickActionCategory" separator=".">
+  <suffix name="Address"/>
+  <suffix name="Email"/>
+  <suffix name="Event"/>
+  <suffix name="Phone"/>
+  <suffix name="None"/>
+  <affected-histogram name="Search.ContextualSearchQuickActions.Clicked"/>
+  <affected-histogram
+      name="Search.ContextualSearchQuickActions.IntentResolution"/>
+  <affected-histogram name="Search.ContextualSearchQuickActions.ResultsSeen"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CreditCardScanSuccess">
+  <suffix name="Completed" label="Credit card scan completed."/>
+  <suffix name="Cancelled" label="Credit card scan was cancelled."/>
+  <affected-histogram name="Autofill.ScanCreditCard.Duration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CrosFirstRunStep" separator="">
+  <suffix name="AppList"/>
+  <suffix name="Tray"/>
+  <suffix name="Help"/>
+  <affected-histogram name="CrosFirstRun.TimeSpentOnStep"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="CurrentTabState">
+  <suffix name="Initial" label="For a tab that is just being created."/>
+  <suffix name="Active"
+      label="For an active tab which is shown foreground in a browser window."/>
+  <suffix name="Inactive"
+      label="For tabs in background and not shown to user."/>
+  <suffix name="Detached"
+      label="For a tab that is being dragged by user to outside of the
+             browser window."/>
+  <affected-histogram name="Tabs.StateTransfer.Target"/>
+  <affected-histogram name="Tabs.StateTransfer.Time"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy">
+  <obsolete>
+    Deprecated 9/2016.
+  </obsolete>
+  <suffix name="DataReductionProxy"
+      label="Only page loads through the data reduction proxy are considered."/>
+  <suffix name="HTTPS_DataReductionProxy"
+      label="Only page loads through the data reduction proxy through an HTTP
+             tunnel for HTTPS origins are considered."/>
+  <affected-histogram name="PLT.NT_Connect"/>
+  <affected-histogram name="PLT.NT_DelayBeforeConnect"/>
+  <affected-histogram name="PLT.NT_DelayBeforeDomainLookup"/>
+  <affected-histogram name="PLT.NT_DelayBeforeDomLoading"/>
+  <affected-histogram name="PLT.NT_DelayBeforeFetch"/>
+  <affected-histogram name="PLT.NT_DelayBeforeFetchRedirect"/>
+  <affected-histogram name="PLT.NT_DelayBeforeLoadEvent"/>
+  <affected-histogram name="PLT.NT_DelayBeforeRequest"/>
+  <affected-histogram name="PLT.NT_DomainLookup"/>
+  <affected-histogram name="PLT.NT_DomContentLoaded"/>
+  <affected-histogram name="PLT.NT_DomInteractive"/>
+  <affected-histogram name="PLT.NT_DomLoading"/>
+  <affected-histogram name="PLT.NT_LoadEvent"/>
+  <affected-histogram name="PLT.NT_Redirect"/>
+  <affected-histogram name="PLT.NT_Request"/>
+  <affected-histogram name="PLT.NT_Response"/>
+  <affected-histogram name="PLT.PT_BeginToCommit"/>
+  <affected-histogram name="PLT.PT_BeginToFinish"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
+  <affected-histogram name="PLT.PT_CommitToFinish"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
+  <affected-histogram name="PLT.PT_FinishDocToFinish"/>
+  <affected-histogram name="PLT.PT_RequestToCommit"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
+  <affected-histogram name="PLT.PT_RequestToFinish"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
+  <affected-histogram name="PLT.PT_RequestToStart"/>
+  <affected-histogram name="PLT.PT_StartToCommit"/>
+  <affected-histogram name="PLT.PT_StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes
+    name="DataReductionProxy.LoFi.Accuracy.DifferentRecordingIntervals"
+    separator=".">
+  <suffix name="15"
+      label="Recorded approximately 15 seconds after navigation start"/>
+  <suffix name="30"
+      label="Recorded approximately 30 seconds after navigation start"/>
+  <suffix name="60"
+      label="Recorded approximately 60 seconds after navigation start"/>
+  <affected-histogram name="DataReductionProxy.LoFi.Accuracy"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy.MimeType">
+  <suffix name="Application" label="Application mime-type"/>
+  <suffix name="Unknown"
+      label="Deprecated. Moved to UnknownMime in M46. Unknown mime-type"/>
+  <suffix name="UnknownMime" label="Unknown mime-type"/>
+  <suffix name="Video" label="Video mime-type"/>
+  <affected-histogram name="Net.DailyContentLength"/>
+  <affected-histogram name="Net.DailyContentLength_DataReductionProxyEnabled"/>
+  <affected-histogram name="Net.DailyContentLength_ViaDataReductionProxy"/>
+  <affected-histogram name="Net.DailyOriginalContentLength"/>
+  <affected-histogram
+      name="Net.DailyOriginalContentLength_DataReductionProxyEnabled"/>
+  <affected-histogram
+      name="Net.DailyOriginalContentLength_ViaDataReductionProxy"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy.NetworkTypes" separator=".">
+  <suffix name="Unknown" label="On Unknown network"/>
+  <suffix name="Ethernet" label="On Ethernet network"/>
+  <suffix name="WiFi" label="On WiFi network"/>
+  <suffix name="2G" label="On 2G network"/>
+  <suffix name="3G" label="On 3G Network"/>
+  <suffix name="4G" label="On 4G network"/>
+  <suffix name="None" label="With no detected network"/>
+  <suffix name="Bluetooth" label="On Bluetooth network"/>
+  <affected-histogram name="DataReductionProxy.AutoLoFiAccuracy"/>
+  <affected-histogram name="DataReductionProxy.AutoLoFiRequestHeaderState"/>
+  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.15"/>
+  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.30"/>
+  <affected-histogram name="DataReductionProxy.LoFi.Accuracy.60"/>
+  <affected-histogram name="DataReductionProxy.LoFi.ImplicitOptOutAction"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy.WithValidOCL.LoFiOn" separator=".">
+  <suffix name="LoFiOn"
+      label="Only page loads through the data reduction proxy with Lo-Fi On
+             are considered."/>
+  <affected-histogram name="Net.HttpContentLengthDifferenceWithValidOCL"/>
+  <affected-histogram name="Net.HttpContentLengthWithValidOCL"/>
+  <affected-histogram name="Net.HttpOriginalContentLengthWithValidOCL"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy_AutoLoFi" separator="_">
+  <obsolete>
+    Deprecated 09/2016.
+  </obsolete>
+  <suffix name="DataReductionProxy_AutoLoFiOn"
+      label="Only page loads through the data reduction proxy with auto LoFi
+             enabled are considered."/>
+  <suffix name="DataReductionProxy_AutoLoFiOff"
+      label="Only page loads through the data reduction proxy with auto LoFi
+             disabled are considered."/>
+  <suffix name="HTTPS_DataReductionProxy_AutoLoFiOn"
+      label="Only page loads through the data reduction proxy through an HTTP
+             tunnel for HTTPS origins with auto LoFi enabled are considered."/>
+  <suffix name="HTTPS_DataReductionProxy_AutoLoFiOff"
+      label="Only page loads through the data reduction proxy through an HTTP
+             tunnel for HTTPS origins with auto LoFi disabled are considered."/>
+  <affected-histogram name="PLT.BeginToFirstPaint"/>
+  <affected-histogram name="PLT.PT_BeginToFinish"/>
+  <affected-histogram name="PLT.PT_CommitToFinish"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
+  <affected-histogram name="PLT.PT_RequestToFinish"/>
+  <affected-histogram name="PLT.PT_StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy_TamperingFingerprints"
+    separator="_">
+  <suffix name="ChromeProxy"
+      label="for each carrier, number of tamperings detected on Chrome-Proxy
+             header"/>
+  <suffix name="ContentLength"
+      label="for each carrier, total number of responses whose Content-Length
+             header has been tampered with"/>
+  <suffix name="ContentLength_CSS"
+      label="for each carrier, number of CSS responses whose Content-Length
+             header has been tampered with"/>
+  <suffix name="ContentLength_Image"
+      label="for each carrier, number of image responses whose Content-Length
+             header has been tampered with"/>
+  <suffix name="ContentLength_Image_GIF"
+      label="for each carrier, number of GIF image responses whose
+             Content-Length header has been tampered with"/>
+  <suffix name="ContentLength_Image_JPG"
+      label="for each carrier, number of JPEG image responses whose
+             Content-Length header has been tampered with"/>
+  <suffix name="ContentLength_Image_PNG"
+      label="for each carrier, number of PNG image responses whose
+             Content-Length header has been tampered with"/>
+  <suffix name="ContentLength_Image_WEBP"
+      label="for each carrier, number of WebP image responses whose
+             Content-Length header has been tampered with"/>
+  <suffix name="ContentLength_Video"
+      label="for each carrier, number of video responses whose Content-Length
+             header has been tampered with"/>
+  <suffix name="CompressionRatio_Image"
+      label="the histogram of compression ratio of images"/>
+  <suffix name="CompressionRatio_Image_GIF"
+      label="the histogram of compression ratio of GIF images"/>
+  <suffix name="CompressionRatio_Image_JPG"
+      label="the histogram of compression ratio of JPG images"/>
+  <suffix name="CompressionRatio_Image_PNG"
+      label="the histogram of compression ratio of PNG images"/>
+  <suffix name="CompressionRatio_Image_WEBP"
+      label="the histogram of compression ratio of WEBP images"/>
+  <suffix name="CompressionRatio_Video"
+      label="the histogram of compression ratio of videos"/>
+  <suffix name="CompressionRatio_Image_0_10KB"
+      label="the histogram of compression ratio of images whose sizes are in
+             the range of 0-10KB"/>
+  <suffix name="CompressionRatio_Image_10_100KB"
+      label="the histogram of compression ratio of images whose sizes are in
+             the range of 10-100KB"/>
+  <suffix name="CompressionRatio_Image_100_500KB"
+      label="the histogram of compression ratio of images whose sizes are in
+             the range of 100-500KB"/>
+  <suffix name="CompressionRatio_Image_500KB"
+      label="the histogram of compression ratio of images whose sizes are
+             larger than 500KB"/>
+  <suffix name="ContentLength_JS"
+      label="for each carrier, number of JavaScript responses whose
+             Content-Length header has been tampered with"/>
+  <suffix name="ContentLength_Other"
+      label="for each carrier, number of other type responses whose
+             Content-Length header has been tampered with"/>
+  <suffix name="OtherHeaders"
+      label="for each carrier, number of tamperings detected on a list of
+             headers"/>
+  <suffix name="Via"
+      label="for each carrier, number of tamperings detected on Via header"/>
+  <suffix name="Via_Missing"
+      label="for each carrier, number of responses whose data reduction
+             proxy's Via header is missing"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTPS"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy_TamperingTotal" separator="_">
+  <suffix name="Total" label="total number of tamperings detected"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP_CSS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_0_10KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_100_500KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_10_100KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_500KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_GIF"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_JPG"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_PNG"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Image_WEBP"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP_JS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTP_Video"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS_CSS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_0_10KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_100_500KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_10_100KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_500KB"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_GIF"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_JPG"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_PNG"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Image_WEBP"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS_JS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperDetectionHTTPS_Video"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTP"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionPassHTTPS"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_ChromeProxy"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_CSS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_Image"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_JS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTP_ContentLength_Other"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTP_OtherHeaders"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_Via"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTP_Via_Missing"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_ChromeProxy"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_CSS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_Image"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_JS"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_ContentLength_Other"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_OtherHeaders"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperedHTTPS_Via"/>
+  <affected-histogram
+      name="DataReductionProxy.HeaderTamperedHTTPS_Via_Missing"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxy_TotalCounts" separator="_">
+  <suffix name="JS" label="JavaScript count"/>
+  <suffix name="CSS" label="CSS count"/>
+  <suffix name="Image" label="image count"/>
+  <suffix name="Image_GIF" label="GIF image count"/>
+  <suffix name="Image_JPG" label="JPG image count"/>
+  <suffix name="Image_PNG" label="PNG image count"/>
+  <suffix name="Image_WEBP" label="WEBP image count"/>
+  <suffix name="Video" label="Video count"/>
+  <suffix name="Image_0_10KB" label="image counts of 0-10KB"/>
+  <suffix name="Image_10_100KB" label="image counts of 10-100KB"/>
+  <suffix name="Image_100_500KB" label="image counts of 100-500KB"/>
+  <suffix name="Image_500KB" label="image counts of more than 500KB"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTP"/>
+  <affected-histogram name="DataReductionProxy.HeaderTamperDetectionHTTPS"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxyBypassedBytes" separator=".">
+  <suffix name="SSL" label="Bypass due to SSL"/>
+  <suffix name="LocalBypassRules"
+      label="Bypass due to client-side bypass rules or because the proxy
+             config was missing at the client"/>
+  <suffix name="ManagedProxyConfig"
+      label="Deprecated 1/9/2014 (M-41). Bypass due to a managed config"/>
+  <suffix name="ProxyOverridden"
+      label="Bypass due to another proxy taking precedence"/>
+  <suffix name="Current" label="Bypass due to explicit instruction"/>
+  <suffix name="CurrentAudioVideo"
+      label="Bypass due to explicit instruction for audio/video"/>
+  <suffix name="CurrentApplicationOctetStream"
+      label="Bypass due to explicit instruction for
+             'application/octet-stream' content type"/>
+  <suffix name="ShortAll" label="Short bypass"/>
+  <suffix name="ShortTriggeringRequest"
+      label="Triggering request short bypass"/>
+  <suffix name="ShortAudioVideo"
+      label="Triggering request short bypass due to audio/video"/>
+  <suffix name="MediumAll" label="Medium bypass"/>
+  <suffix name="MediumTriggeringRequest"
+      label="Triggering request medium bypass"/>
+  <suffix name="LongAll" label="Long bypass"/>
+  <suffix name="LongTriggeringRequest" label="Triggering request long bypass"/>
+  <suffix name="MissingViaHeader4xx"
+      label="Bypass due to a 4xx missing via header"/>
+  <suffix name="MissingViaHeaderOther"
+      label="Bypass due to other missing via header"/>
+  <suffix name="Malformed407"
+      label="Bypass due to 407 response from proxy without a challenge"/>
+  <suffix name="Status500HttpInternalServerError"
+      label="Bypass due to internal server error"/>
+  <suffix name="Status502HttpBadGateway"
+      label="Bypass because the request URI was too long"/>
+  <suffix name="Status503HttpServiceUnavailable"
+      label="Bypass due to a 503 response"/>
+  <suffix name="NetworkErrorTimedOut" label="Bypass due to network timeout"/>
+  <suffix name="NetworkErrorProxyConnectionFailed"
+      label="Bypass due to failed proxy connection"/>
+  <suffix name="NetworkErrorProxyCertificateInvalid"
+      label="Bypass due to invalid proxy certificate"/>
+  <suffix name="NetworkErrorOther" label="Bypass due to any network error"/>
+  <affected-histogram name="DataReductionProxy.BypassedBytes"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxyConfigFetchLostBytes" separator="_">
+  <obsolete>
+    Removed in Feb 2016.
+  </obsolete>
+  <suffix name="0" label="Bucket 0 for gathering multiple data points."/>
+  <suffix name="1" label="Bucket 1 for gathering multiple data points."/>
+  <suffix name="2" label="Bucket 2 for gathering multiple data points."/>
+  <suffix name="3" label="Bucket 3 for gathering multiple data points."/>
+  <suffix name="4" label="Bucket 4 for gathering multiple data points."/>
+  <suffix name="5" label="Bucket 5 for gathering multiple data points."/>
+  <suffix name="6" label="Bucket 6 for gathering multiple data points."/>
+  <suffix name="7" label="Bucket 7 for gathering multiple data points."/>
+  <suffix name="8" label="Bucket 8 for gathering multiple data points."/>
+  <suffix name="9" label="Bucket 9 for gathering multiple data points."/>
+  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesCL"/>
+  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesDiff"/>
+  <affected-histogram name="DataReductionProxy.ConfigFetchLostBytesOCL"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxyMissingViaHeaderBytes"
+    separator=".">
+  <suffix name="4xx" label="Response with 4xx response code"/>
+  <suffix name="Other" label="Other response"/>
+  <affected-histogram name="DataReductionProxy.MissingViaHeader.Bytes"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxyMissingViaHeaderResponseCode"
+    separator=".">
+  <suffix name="Primary" label="Primary data reduction proxy"/>
+  <suffix name="Fallback" label="Fallback data reduction proxy"/>
+  <affected-histogram name="DataReductionProxy.MissingViaHeader.ResponseCode"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataReductionProxyRequestCompletionErrorCodes"
+    separator=".">
+  <suffix name="Primary" label="Primary data reduction proxy"/>
+  <suffix name="Fallback" label="Fallback data reduction proxy"/>
+  <affected-histogram name="DataReductionProxy.RequestCompletionErrorCodes"/>
+</histogram_suffixes>
+
+<histogram_suffixes
+    name="DataReductionProxyRequestCompletionErrorCodesMainFrame" separator=".">
+  <suffix name="Primary" label="Primary data reduction proxy"/>
+  <suffix name="Fallback" label="Fallback data reduction proxy"/>
+  <affected-histogram
+      name="DataReductionProxy.RequestCompletionErrorCodes.MainFrame"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataSaverEnabled" separator=".">
+  <suffix name="DataSaverEnabled" label="Data Saver is enabled"/>
+  <suffix name="DataSaverDisabled" label="Data Saver is disabled"/>
+  <affected-histogram name="Previews.ContentLength"/>
+  <affected-histogram name="Previews.DataInflation"/>
+  <affected-histogram name="Previews.DataInflationPercent"/>
+  <affected-histogram name="Previews.DataSavings"/>
+  <affected-histogram name="Previews.DataSavingsPercent"/>
+  <affected-histogram name="Previews.OriginalContentLength"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataUsageReportSubmissionBytes" separator=".">
+  <suffix name="Failed"
+      label="Platform external data use observer reported the submission as
+             failed"/>
+  <suffix name="Lost"
+      label="Lost before it could be submitted to platform external data use
+             observer"/>
+  <suffix name="Successful"
+      label="Platform external data use observer reported the submission as
+             successful"/>
+  <suffix name="TimedOut"
+      label="Submission of the report to the platform external data use
+             observer timed out"/>
+  <affected-histogram name="DataUsage.ReportSubmission.Bytes"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataUse.Bytes" separator=".">
+  <suffix name="Delegate" label="As reported by the network delegate."/>
+  <suffix name="OS"
+      label="As reported by the operating system. Currently logged only on
+             Android."/>
+  <affected-histogram name="DataUse.BytesReceived"/>
+  <affected-histogram name="DataUse.BytesSent"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataUse.Dimensions" separator=".">
+  <suffix name="Upstream.Background.NotCellular"/>
+  <suffix name="Upstream.Background.Cellular"/>
+  <suffix name="Upstream.Foreground.NotCellular"/>
+  <suffix name="Upstream.Foreground.Cellular"/>
+  <suffix name="Downstream.Background.NotCellular"/>
+  <suffix name="Downstream.Background.Cellular"/>
+  <suffix name="Downstream.Foreground.NotCellular"/>
+  <suffix name="Downstream.Foreground.Cellular"/>
+  <suffix name="Upstream.Unknown.NotCellular"/>
+  <suffix name="Upstream.Unknown.Cellular"/>
+  <suffix name="Downstream.Unknown.NotCellular"/>
+  <suffix name="Downstream.Unknown.Cellular"/>
+  <affected-histogram name="DataUse.MessageSize.AllServices"/>
+  <affected-histogram name="DataUse.TrafficSize.System"/>
+  <affected-histogram name="DataUse.TrafficSize.User"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataUse.Service.Types" separator=".">
+  <suffix name="NotTagged"/>
+  <suffix name="Suggestions"/>
+  <suffix name="Translate"/>
+  <suffix name="Sync"/>
+  <suffix name="Omnibox"/>
+  <suffix name="Invalidation"/>
+  <suffix name="Rappor"/>
+  <suffix name="Variations"/>
+  <suffix name="UMA"/>
+  <suffix name="DomainReliability"/>
+  <suffix name="ProfileDownloader"/>
+  <suffix name="GoogleURLTracker"/>
+  <suffix name="Autofill"/>
+  <suffix name="Policy"/>
+  <suffix name="SpellChecker"/>
+  <suffix name="NTPSnippets"/>
+  <affected-histogram name="DataUse.MessageSize"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DataUse.TrafficSource" separator=".">
+  <suffix name="System"/>
+  <suffix name="User"/>
+  <affected-histogram name="DataUse.BackgroundToDataRecievedPerByte"/>
+  <affected-histogram name="DataUse.BackgroundToFirstDownstream"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DefaultAppsExperiment">
+  <suffix name="NoDefaultApps" label="User's without default apps installed"/>
+  <suffix name="WithDefaultApps" label="User's with default apps installed"/>
+  <affected-histogram name="Extensions.AppTabLaunchType"/>
+  <affected-histogram name="Extensions.ExtensionInstalled"/>
+  <affected-histogram name="Extensions.ExtensionUninstalled"/>
+  <affected-histogram name="NewTabPage.DefaultPageType"/>
+  <affected-histogram name="NewTabPage.SelectedPageType"/>
+  <affected-histogram name="NtpHandler.AttachShownPageType"/>
+  <affected-histogram name="NtpHandler.SelectedShownPageType"/>
+  <affected-histogram name="Profile.AppCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DefaultPinnedApps">
+  <obsolete>
+    Deprecated as of 12/2013. Default pinned apps trial is finished.
+  </obsolete>
+  <suffix name="Existing"/>
+  <suffix name="Control"/>
+  <suffix name="Alternate"/>
+  <affected-histogram name="Cros.ClickOnShelf"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DeprecatedPrerenderSource" ordering="prefix">
+  <obsolete>
+    Deprecated August 2016
+  </obsolete>
+  <suffix name="" label="All prerenders."/>
+  <suffix name="exp1" label="Likelihood threshold experiment 1.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp2" label="Likelihood threshold experiment 2.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp3" label="Likelihood threshold experiment 3.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp4" label="Likelihood threshold experiment 4.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp5" label="Likelihood threshold experiment 5.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp6" label="Likelihood threshold experiment 6.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp7" label="Likelihood threshold experiment 7.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp8" label="Likelihood threshold experiment 8.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="exp9" label="Likelihood threshold experiment 9.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="gws" label="GWS triggered prerender."/>
+  <suffix name="externalrequest" label="Externally triggered prerender."/>
+  <suffix name="externalrequestforced"
+      label="Forced prerender regardless of network."/>
+  <suffix name="Instant" label="Instant search prerender."/>
+  <suffix name="localpredictor" label="Local predictor triggered prerender.">
+    <obsolete>
+      Deprecated April 2015
+    </obsolete>
+  </suffix>
+  <suffix name="omnibox" label="Triggered from the omnibox."/>
+  <suffix name="wash" label="Multiple sources could have triggered."/>
+  <suffix name="web" label="Link triggered prerender."/>
+  <suffix name="webcross"
+      label="Link triggered prerender, rel=prerender, cross domain."/>
+  <suffix name="websame"
+      label="Link triggered prerender, rel=prerender, same domain."/>
+  <suffix name="webnext" label="Link triggered prerender, rel=next."/>
+  <suffix name="offline"
+      label="Prerender triggered for saving a page for offline use."/>
+  <affected-histogram name="Prerender.FinalStatus_Prerender5minTTL"/>
+  <affected-histogram name="Prerender.FinalStatus_PrerenderControl"/>
+  <affected-histogram name="Prerender.FinalStatus_PrerenderEnabled"/>
+  <affected-histogram name="Prerender.FinalStatus_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.FinalStatus_PrerenderMulti"/>
+  <affected-histogram name="Prerender.FinalStatus_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
+  <affected-histogram
+      name="Prerender.FinalStatusMatchComplete_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.FinalStatusMatchComplete_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.FinalStatusMatchComplete_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.FinalStatusMatchComplete_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderMulti"/>
+  <affected-histogram name="Prerender.FinalStatusMatchComplete_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
+  <affected-histogram
+      name="Prerender.FractionPixelsFinalAtSwapin_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.FractionPixelsFinalAtSwapin_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent_Prerender5minTTL"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderControl"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.LocalPredictorEvent_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderMulti"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.PerceivedPLT_Prerender5minTTL"/>
+  <affected-histogram name="Prerender.PerceivedPLT_PrerenderControl"/>
+  <affected-histogram name="Prerender.PerceivedPLT_PrerenderEnabled"/>
+  <affected-histogram name="Prerender.PerceivedPLT_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.PerceivedPLT_PrerenderMulti"/>
+  <affected-histogram name="Prerender.PerceivedPLT_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMiss_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMiss_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissAnyOnly_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissBoth_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissBoth_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched_Prerender5minTTL"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderControl"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatched_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderMulti"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatchedComplete_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatchedComplete_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatchedComplete_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatchedComplete_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatchedComplete_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTMatchedComplete_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.PerceivedPLTWindowed_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTWindowNotMatched_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTWindowNotMatched_PrerenderNoUse"/>
+  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
+  <affected-histogram
+      name="Prerender.PercentLoadDoneAtSwapin_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PercentLoadDoneAtSwapin_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PercentLoadDoneAtSwapin_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PercentLoadDoneAtSwapin_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderMulti"/>
+  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.PrerenderNotSwappedInPLT_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.PrerenderNotSwappedInPLT_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.PrerenderNotSwappedInPLT_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.PrerenderNotSwappedInPLT_PrerenderMatchComplete"/>
+  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderMulti"/>
+  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingBaselinePLT_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingBaselinePLT_PrerenderNoUse"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingPLT_Prerender5minTTL"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderControl"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderEnabled"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMatchComplete"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderMulti"/>
+  <affected-histogram
+      name="Prerender.SimulatedLocalBrowsingPLT_PrerenderNoUse"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DiskUsagePerUserCount" separator=".">
+  <suffix name="1User" label="Only 1 user exists on device."/>
+  <suffix name="2Users" label="2 users exist on device."/>
+  <suffix name="3Users" label="3 users exist on device."/>
+  <suffix name="4Users" label="4 users exist on device."/>
+  <suffix name="5Users" label="5 users exist on device."/>
+  <suffix name="6Users" label="6 users exist on device."/>
+  <suffix name="7OrMoreUsers" label="7 or more users exist on device."/>
+  <affected-histogram name="Platform.DiskUsage.Cache_Avg"/>
+  <affected-histogram name="Platform.DiskUsage.Cache_Max"/>
+  <affected-histogram name="Platform.DiskUsage.Downloads_Avg"/>
+  <affected-histogram name="Platform.DiskUsage.Downloads_Max"/>
+  <affected-histogram name="Platform.DiskUsage.GCache_Avg"/>
+  <affected-histogram name="Platform.DiskUsage.GCache_Max"/>
+  <affected-histogram name="Platform.DiskUsage.LeastUsedAccountDays"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DNS.HostCache.UpdateStale.AddressListDeltaType">
+  <suffix name="Identical" label="Same addresses, in the same order."/>
+  <suffix name="Reordered" label="Same addresses, in a different order."/>
+  <suffix name="Overlap" label="Some same addreses, some different."/>
+  <suffix name="Disjoint" label="All different addresses."/>
+  <affected-histogram name="DNS.HostCache.UpdateStale.ExpiredBy"/>
+  <affected-histogram name="DNS.HostCache.UpdateStale.NetworkChanges"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DnsImpact2">
+  <suffix name="disabled_prefetch"
+      label="DNS pre-resolving is disabled in these clients"/>
+  <suffix name="disabled_prefetch_4_connections"
+      label="DNS pre-resolving is disabled in these clients, and a maximum of
+             4 connections per host was allowed"/>
+  <suffix name="enabled_prefetch_4_connections"
+      label="a maximum of 4 connections per host was allowed in these clients"/>
+  <suffix name="parallel_4_prefetch"
+      label="DNS pre-resolving was only doing 4 concurrent speculative
+             resolutions in this test"/>
+  <affected-histogram name="Net.Dns_Resolution_And_TCP_Connection_Latency"/>
+  <affected-histogram name="Net.TCP_Connection_Idle_Sockets">
+    <with-suffix name="disabled_prefetch"/>
+    <with-suffix name="disabled_prefetch_4_connections"/>
+    <with-suffix name="enabled_prefetch_4_connections"/>
+  </affected-histogram>
+  <affected-histogram name="Net.TCP_Connection_Latency"/>
+  <affected-histogram name="Net.Transaction_Connected"/>
+  <affected-histogram name="Net.Transaction_Connected_New"/>
+  <affected-histogram name="Net.Transaction_Connected_New_b"/>
+  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
+  <affected-histogram name="Net.Transaction_Latency"/>
+  <affected-histogram name="Net.Transaction_Latency_b"/>
+  <affected-histogram name="Net.Transaction_Latency_Total"/>
+  <affected-histogram name="Net.Transaction_Latency_Total_New_Connection"/>
+  <affected-histogram
+      name="Net.Transaction_Latency_Total_New_Connection_Under_10"/>
+  <affected-histogram name="Net.Transaction_Latency_Total_Under_10"/>
+  <affected-histogram name="Net.Transaction_Latency_Under_10"/>
+  <affected-histogram name="PLT.RequestToFinish">
+    <with-suffix name="parallel_4_prefetch"/>
+  </affected-histogram>
+</histogram_suffixes>
+
+<histogram_suffixes name="DnsImpact3">
+  <suffix name="disabled_prefetch" label="with DNS pre-resolving disabled"/>
+  <suffix name="parallel_4_prefetch"
+      label="with only 4 concurrent speculative resolutions done in parallel"/>
+  <affected-histogram name="Net.Transaction_Connected_New">
+    <with-suffix name="disabled_prefetch"/>
+  </affected-histogram>
+  <affected-histogram name="Renderer2.FinishDocToFinish"/>
+  <affected-histogram name="Renderer2.RequestToFinish"/>
+  <affected-histogram name="Renderer2.RequestToFinish_L">
+    <with-suffix name="disabled_prefetch"/>
+  </affected-histogram>
+  <affected-histogram name="Renderer2.RequestToFirstLayout"/>
+  <affected-histogram name="Renderer2.RequestToStart"/>
+  <affected-histogram name="Renderer2.StartToFinish"/>
+  <affected-histogram name="Renderer2.StartToFinishDoc"/>
+  <affected-histogram name="Renderer2.StartToFirstLayout"/>
+  <affected-histogram name="Renderer4.RequestToFinish">
+    <with-suffix name="parallel_4_prefetch"/>
+  </affected-histogram>
+  <affected-histogram name="Renderer4.StartToFinish">
+    <with-suffix name="parallel_4_prefetch"/>
+  </affected-histogram>
+</histogram_suffixes>
+
+<histogram_suffixes name="DnsParallelism">
+  <suffix name="parallel_10"
+      label="with only 10 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_14"
+      label="with only 14 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_20"
+      label="with only 20 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_6"
+      label="with only 6 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_7"
+      label="with only 7 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_8"
+      label="with only 8 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_9"
+      label="with only 9 concurrent resolutions done in parallel"/>
+  <suffix name="parallel_default"
+      label="with the default number of concurrent resolutions done in
+             parallel"/>
+  <affected-histogram name="DNS.ResolveCategory"/>
+  <affected-histogram name="DNS.ResolveSuccess"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DocsSpecific" separator="">
+  <suffix name="Docs" label="Only for docs.google.com"/>
+  <affected-histogram name="appcache.MainResourceResponseRetrieval"/>
+  <affected-histogram name="appcache.SubResourceResponseRetrieval"/>
+  <affected-histogram name="appcache.UpdateJobResult"/>
+  <affected-histogram name="appcache.UpdateProgressAtPointOfFaliure"/>
+  <affected-histogram name="appcache.UpdateWasOffOriginAtPointOfFailure"/>
+  <affected-histogram name="appcache.UpdateWasStalledAtPointOfFailure"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DomainGoogle" separator="">
+  <suffix name="Google" label="only Google cookies are recorded."/>
+  <suffix name="Other" label="only NON-Google cookies are recorded."/>
+  <affected-histogram name="Cookie.ReinstatedCookies"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DownloadDangerPromptResponse" separator=".">
+  <suffix name="Proceed"
+      label="The user clicked through and recovered the download."/>
+  <suffix name="Shown" label="The user was shown the prompt."/>
+  <affected-histogram name="Download.DownloadDangerPrompt.DangerousContent"/>
+  <affected-histogram name="Download.DownloadDangerPrompt.DangerousFile"/>
+  <affected-histogram name="Download.DownloadDangerPrompt.DangerousHost"/>
+  <affected-histogram name="Download.DownloadDangerPrompt.DangerousURL"/>
+  <affected-histogram name="Download.DownloadDangerPrompt.PotentiallyUnwanted"/>
+  <affected-histogram name="Download.DownloadDangerPrompt.UncommonContent"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DownloadDangerPromptType" separator=".">
+  <suffix name="DangerousContent" label="File marked DANGEROUS_CONTENT"/>
+  <suffix name="DangerousFile" label="File marked DANGEROUS_FILE"/>
+  <suffix name="DangerousHost" label="File marked DANGEROUS_HOST"/>
+  <suffix name="DangerousURL" label="File marked DANGEROUS_URL"/>
+  <suffix name="PotentiallyUnwanted" label="File marked POTENTIALLY_UNWANTED"/>
+  <suffix name="UncommonContent" label="File marked UNCOMMON_CONTENT"/>
+  <affected-histogram name="Download.DownloadDangerPrompt"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="DownloadWithUnsupportedScheme" separator=".">
+  <suffix name="ContentScheme" label="downloads with content scheme"/>
+  <suffix name="ContentIdScheme" label="downloads with cid scheme"/>
+  <suffix name="LocalFileScheme" label="downloads with file:/// scheme"/>
+  <suffix name="RemoteFileScheme" label="downloads with file:// scheme"/>
+  <suffix name="FileSystemScheme" label="downloads with filesystem scheme"/>
+  <suffix name="FtpScheme" label="downloads with ftp scheme"/>
+  <suffix name="GopherScheme" label="downloads with gopher scheme"/>
+  <suffix name="JavaScriptScheme" label="downloads with javascript scheme"/>
+  <suffix name="WSOrWSSScheme" label="downloads with ws or wss scheme"/>
+  <suffix name="OtherUnsupportedScheme" label="Other unsupported schemes"/>
+  <affected-histogram name="SBClientDownload.UnsupportedScheme"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="EmePromise" separator=".">
+  <suffix name="CloseSession" label="CloseSession promises only."/>
+  <suffix name="CreateSession" label="CreateSession promises only.">
+    <obsolete>
+      Replaced by GenerateRequest.
+    </obsolete>
+  </suffix>
+  <suffix name="GenerateRequest" label="GenerateRequest promises only."/>
+  <suffix name="LoadSession" label="LoadSession promises only."/>
+  <suffix name="RemoveSession" label="RemoveSession promises only."/>
+  <suffix name="UpdateSession" label="UpdateSession promises only."/>
+  <affected-histogram name="Media.EME.ClearKey"/>
+  <affected-histogram name="Media.EME.Unknown"/>
+  <affected-histogram name="Media.EME.Widevine"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="EngagementScoreBuckets">
+  <owner>calamity@chromium.org</owner>
+  <suffix name="0"/>
+  <suffix name="10"/>
+  <suffix name="20"/>
+  <suffix name="30"/>
+  <suffix name="40"/>
+  <suffix name="50"/>
+  <suffix name="60"/>
+  <suffix name="70"/>
+  <suffix name="80"/>
+  <suffix name="90"/>
+  <suffix name="100"/>
+  <affected-histogram name="SiteEngagementService.EngagementScoreBucket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="EventLatencyOS" separator=".">
+  <suffix name="MOUSE_WHEEL"/>
+  <suffix name="TOUCH_MOVED"/>
+  <suffix name="TOUCH_PRESSED"/>
+  <suffix name="TOUCH_RELEASED"/>
+  <affected-histogram name="Event.Latency.OS"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExitFunnels" separator=".">
+  <suffix name="BackgroundOff"/>
+  <suffix name="BackgroundOn"/>
+  <suffix name="BrowserExit"/>
+  <suffix name="EndSession"/>
+  <suffix name="ES_CloseApp"/>
+  <suffix name="ES_Critical"/>
+  <suffix name="ES_Logoff"/>
+  <suffix name="ES_Other"/>
+  <suffix name="HungBrowserTerminated"/>
+  <suffix name="KillProcess"/>
+  <suffix name="LastWindowClose"/>
+  <suffix name="MessageWindowHung"/>
+  <suffix name="MessageWindowNotFound"/>
+  <suffix name="MessageWindowVanished"/>
+  <suffix name="ProcessSingletonIsShuttingDown"/>
+  <suffix name="RendezvousToHungBrowser"/>
+  <suffix name="SessionEnding"/>
+  <suffix name="TraybarEndSession"/>
+  <suffix name="TraybarExit"/>
+  <suffix name="WatcherEndSession"/>
+  <suffix name="WatcherLogoff"/>
+  <suffix name="WatcherQueryEndSession"/>
+  <suffix name="WM_ENDSESSION"/>
+  <affected-histogram name="Stability.ExitFunnel"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExtensionFunctionExecutionTime" separator=".">
+  <suffix name="1msTo5ms"
+      label="Execution took between 1ms and 5ms (tolerable)."/>
+  <suffix name="5msTo10ms" label="Execution took between 5ms and 10ms (slow)."/>
+  <suffix name="LessThan1ms" label="Execution took less than 1ms (fast)."/>
+  <suffix name="Over10ms" label="Execution took over 10ms (glacial)."/>
+  <affected-histogram name="Extensions.Functions.FailedTime"/>
+  <affected-histogram name="Extensions.Functions.SucceededTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExtensionMessagingPortCreationTime" separator=".">
+  <suffix name="Normal"
+      label="Created during any time other than the 'unload' or
+             'beforeunload' handlers."/>
+  <suffix name="InBeforeUnload"
+      label="Created during an event handler for the 'beforeunload' event."/>
+  <suffix name="InUnload"
+      label="Created during an event handler for the 'unload' event."/>
+  <affected-histogram name="Extensions.Messaging.ExtensionPortsCreated"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExtensionMessagingPortType" separator=".">
+  <suffix name="Extension" label="A port opened to an extension context."/>
+  <suffix name="NativeApp" label="A port opened to a native application."/>
+  <suffix name="Tab" label="A port opened to a tab context."/>
+  <affected-histogram name="Extensions.Messaging.GetPortIdAsyncTime"/>
+  <affected-histogram name="Extensions.Messaging.GetPortIdSyncTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExtensionsDatabaseOpen" separator=".">
+  <suffix name="Rules" label="Rules backing stores"/>
+  <suffix name="Settings" label="Settings backing stores"/>
+  <suffix name="State" label="State backing stores"/>
+  <affected-histogram name="Extensions.Database.Open"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExtensionsDatabaseRestore" separator=".">
+  <suffix name="Rules" label="Rules backing stores"/>
+  <suffix name="Settings" label="Settings backing stores"/>
+  <suffix name="State" label="State backing stores"/>
+  <affected-histogram name="Extensions.Database.Restore"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExtensionWebUiPageType" separator=".">
+  <suffix name="MD" label="The Material Design chrome://extensions page."/>
+  <suffix name="Uber" label="The Uber chrome://extensions page."/>
+  <affected-histogram name="Extensions.WebUi.DocumentLoadedInMainFrameTime"/>
+  <affected-histogram name="Extensions.WebUi.LoadCompletedInMainFrame"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ExternalExtensionEvent" separator="">
+  <suffix name="NonWebstore"
+      label="sideloaded extensions that don't update from the webstore"/>
+  <suffix name="Webstore"
+      label="sideloaded extensions that update from the webstore"/>
+  <affected-histogram name="Extensions.ExternalExtensionEvent"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="FieldPredictionSubmissionEvents" separator=".">
+  <suffix name="NoSubmission" label="No observed submission."/>
+  <suffix name="BasedOnAutocomplete"
+      label="Quality metrics based on autocomplete attributes."/>
+  <affected-histogram
+      name="Autofill.NumberOfEditedAutofilledFieldsAtSubmission"/>
+  <affected-histogram name="Autofill.Quality.HeuristicType"/>
+  <affected-histogram name="Autofill.Quality.HeuristicType.ByFieldType"/>
+  <affected-histogram name="Autofill.Quality.PredictedType"/>
+  <affected-histogram name="Autofill.Quality.PredictedType.ByFieldType"/>
+  <affected-histogram name="Autofill.Quality.ServerType"/>
+  <affected-histogram name="Autofill.Quality.ServerType.ByFieldType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="FileBrowserLoad" separator=".">
+  <suffix name="Construct"
+      label="Time spent constructing the main Javascript object."/>
+  <suffix name="DOM" label="Time to initialize DOM."/>
+  <suffix name="FileSystem"
+      label="Deprecated as of 9/2013. Time to get access to the local file
+             system."/>
+  <suffix name="Parse" label="Time to parse Javascript and CSS."/>
+  <suffix name="Roots" label="Time to enumerate file system roots."/>
+  <suffix name="Total"
+      label="Total load time from the moment the Javascript started parsing
+             till the moment the empty file list is displayed."/>
+  <affected-histogram name="FileBrowser.Load"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="FirstPacketSplit">
+  <suffix name="first_packet_intact"
+      label="with GET/POST headers often using only 1 packet"/>
+  <suffix name="first_packet_split"
+      label="with all GET/POST requests using at least 2 packets"/>
+  <affected-histogram name="Renderer4.Abandoned"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="Renderer4.LoadType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="FromGWS">
+  <suffix name="FromGWS"
+      label="Only page loads that are a result of a navigation from a web
+             search are considered."/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.BeginToFirstPaint"/>
+  <affected-histogram name="PLT.CommitToFirstPaint"/>
+  <affected-histogram name="PLT.PT_BeginToCommit"/>
+  <affected-histogram name="PLT.PT_BeginToFinish"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
+  <affected-histogram name="PLT.PT_CommitToFinish"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
+  <affected-histogram name="PLT.PT_RequestToCommit"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
+  <affected-histogram name="PLT.PT_RequestToFinish"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
+  <affected-histogram name="PLT.PT_RequestToStart"/>
+  <affected-histogram name="PLT.PT_StartToCommit"/>
+  <affected-histogram name="PLT.PT_StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="GLApisWithErrorReporting">
+  <suffix name="TexImage2D" label="All GL APIs that allocate a 2D texture."/>
+  <suffix name="TexImage3D" label="All GL APIs that allocate a 3D texture."/>
+  <affected-histogram name="GPU.Error"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="GlobalSdch">
+  <suffix name="global_disable_sdch" label="with SDCH completely disabled"/>
+  <suffix name="global_enable_sdch"
+      label="with SDCH support for applicable sites"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoad"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadCacheOnly"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadCacheOnly"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_NormalLoad"/>
+  <affected-histogram name="PLT.LoadType"/>
+  <affected-histogram name="PLT.RequestToFinish"/>
+  <affected-histogram name="PLT.StartToFinish"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadCacheOnly"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadCacheOnly"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadStaleOk"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
+  <affected-histogram name="Renderer4.LoadType"/>
+  <affected-histogram name="Renderer4.RequestToFinish"/>
+  <affected-histogram name="Renderer4.StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="GoogleSearchVariations">
+  <owner>kmadhusu@chromium.org</owner>
+  <suffix name="_PrerenderDisabled"
+      label="Counts number of Google searches from various access points in
+             the Android Chrome browser when prerendering is disabled via
+             &quot;Bandwidth management&quot; settings or &quot;Privacy&quot;
+             settings. Only recorded on Android."/>
+  <suffix name="_PrerenderEnabled"
+      label="Counts number of Google searches from various access points in
+             the Android Chrome browser when prerendering is enabled via
+             &quot;Bandwidth management&quot; settings or &quot;Privacy&quot;
+             settings. Only recorded on Android."/>
+  <affected-histogram name="GoogleSearch.AccessPoint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="GWSChromeJointExperiment">
+  <suffix name="Experiment1"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment2"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment3"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment4"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment5"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment6"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment7"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment8"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment9"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment10"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment11"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment12"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment13"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment14"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment15"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment16"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment17"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment18"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment19"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <suffix name="Experiment20"
+      label="Only page loads that are a result of a navigation from a web
+             search under a specific web search/Chrome joint experiment.
+             Unused at this moment."/>
+  <affected-histogram name="PLT.BeginToFinish_FromGWS"/>
+  <affected-histogram name="PLT.BeginToFinish_NoPreview"/>
+  <affected-histogram name="PLT.BeginToFinish_Preview"/>
+  <affected-histogram name="PLT.BeginToFinish_WithPreview"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_FromGWS"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_NoPreview"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_Preview"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_WithPreview"/>
+  <affected-histogram name="PLT.BeginToFirstPaint_FromGWS"/>
+  <affected-histogram name="PLT.BeginToFirstPaint_NoPreview"/>
+  <affected-histogram name="PLT.BeginToFirstPaint_Preview"/>
+  <affected-histogram name="PLT.BeginToFirstPaint_WithPreview"/>
+  <affected-histogram name="PLT.CommitToFirstPaint_FromGWS"/>
+  <affected-histogram name="PLT.CommitToFirstPaint_NoPreview"/>
+  <affected-histogram name="PLT.CommitToFirstPaint_Preview"/>
+  <affected-histogram name="PLT.CommitToFirstPaint_WithPreview"/>
+  <affected-histogram name="PLT.PT_BeginToCommit_FromGWS"/>
+  <affected-histogram name="PLT.PT_BeginToCommit_NoPreview"/>
+  <affected-histogram name="PLT.PT_BeginToCommit_Preview"/>
+  <affected-histogram name="PLT.PT_BeginToCommit_WithPreview"/>
+  <affected-histogram name="PLT.PT_BeginToFinish_FromGWS"/>
+  <affected-histogram name="PLT.PT_BeginToFinish_NoPreview"/>
+  <affected-histogram name="PLT.PT_BeginToFinish_Preview"/>
+  <affected-histogram name="PLT.PT_BeginToFinish_WithPreview"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc_FromGWS"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc_NoPreview"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc_Preview"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc_WithPreview"/>
+  <affected-histogram name="PLT.PT_CommitToFinish_FromGWS"/>
+  <affected-histogram name="PLT.PT_CommitToFinish_NoPreview"/>
+  <affected-histogram name="PLT.PT_CommitToFinish_Preview"/>
+  <affected-histogram name="PLT.PT_CommitToFinish_WithPreview"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc_FromGWS"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc_NoPreview"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc_Preview"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc_WithPreview"/>
+  <affected-histogram name="PLT.PT_RequestToCommit_FromGWS"/>
+  <affected-histogram name="PLT.PT_RequestToCommit_NoPreview"/>
+  <affected-histogram name="PLT.PT_RequestToCommit_Preview"/>
+  <affected-histogram name="PLT.PT_RequestToCommit_WithPreview"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_FromGWS"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_NoPreview"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_Preview"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded_WithPreview"/>
+  <affected-histogram name="PLT.PT_RequestToFinish_FromGWS"/>
+  <affected-histogram name="PLT.PT_RequestToFinish_NoPreview"/>
+  <affected-histogram name="PLT.PT_RequestToFinish_Preview"/>
+  <affected-histogram name="PLT.PT_RequestToFinish_WithPreview"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc_FromGWS"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc_NoPreview"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc_Preview"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc_WithPreview"/>
+  <affected-histogram name="PLT.PT_RequestToStart_FromGWS"/>
+  <affected-histogram name="PLT.PT_RequestToStart_NoPreview"/>
+  <affected-histogram name="PLT.PT_RequestToStart_Preview"/>
+  <affected-histogram name="PLT.PT_RequestToStart_WithPreview"/>
+  <affected-histogram name="PLT.PT_StartToCommit_FromGWS"/>
+  <affected-histogram name="PLT.PT_StartToCommit_NoPreview"/>
+  <affected-histogram name="PLT.PT_StartToCommit_Preview"/>
+  <affected-histogram name="PLT.PT_StartToCommit_WithPreview"/>
+  <affected-histogram name="PLT.PT_StartToFinish_FromGWS"/>
+  <affected-histogram name="PLT.PT_StartToFinish_NoPreview"/>
+  <affected-histogram name="PLT.PT_StartToFinish_Preview"/>
+  <affected-histogram name="PLT.PT_StartToFinish_WithPreview"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="HadUserInput" separator=".">
+  <suffix name="HadUserInput" label="Had user input"/>
+  <suffix name="NoUserInput" label="No user input"/>
+  <affected-histogram
+      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="HandshakeConfirmed" separator=".">
+  <suffix name="HandshakeConfirmed" label="the handshake was confirmed"/>
+  <affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeClient"/>
+  <affected-histogram name="Net.QuicSession.ConnectionCloseErrorCodeServer"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="HistogramInconsistencies" separator=".">
+  <suffix name="Cronet" label="Cronet histograms."/>
+  <affected-histogram name="Histogram.InconsistenciesBrowser"/>
+  <affected-histogram name="Histogram.InconsistenciesBrowserUnique"/>
+  <affected-histogram name="Histogram.InconsistentSnapshotBrowser"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="HttpCacheAccessToDoneCases" separator=".">
+  <suffix name="SentRequest" label="The request was sent over the network."/>
+  <suffix name="Used"
+      label="A cache entry was used without using the network."/>
+  <affected-histogram name="HttpCache.AccessToDone"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="HttpCacheBeforeSendCases" separator=".">
+  <suffix name="CantConditionalize"
+      label="A cached resource existed but no conditional request could be
+             written."/>
+  <suffix name="NotCached" label="There was no pre-existing disk cache entry."/>
+  <suffix name="Updated"
+      label="A cached resource existed and was updated over the network."/>
+  <suffix name="Validated"
+      label="A cached resource existed and was validated over the network."/>
+  <affected-histogram name="HttpCache.BeforeSend"/>
+  <affected-histogram name="HttpCache.PercentBeforeSend"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="HttpPipeliningCompatibility">
+  <suffix name="disable_test" label="Do nothing"/>
+  <suffix name="enable_test" label="Test connection for HTTP pipelining"/>
+  <affected-histogram name="NetConnectivity.Pipeline.0.NetworkError"/>
+  <affected-histogram name="NetConnectivity.Pipeline.0.ResponseCode"/>
+  <affected-histogram name="NetConnectivity.Pipeline.0.Status"/>
+  <affected-histogram name="NetConnectivity.Pipeline.1.NetworkError"/>
+  <affected-histogram name="NetConnectivity.Pipeline.1.ResponseCode"/>
+  <affected-histogram name="NetConnectivity.Pipeline.1.Status"/>
+  <affected-histogram name="NetConnectivity.Pipeline.2.NetworkError"/>
+  <affected-histogram name="NetConnectivity.Pipeline.2.ResponseCode"/>
+  <affected-histogram name="NetConnectivity.Pipeline.2.Status"/>
+  <affected-histogram name="NetConnectivity.Pipeline.3.NetworkError"/>
+  <affected-histogram name="NetConnectivity.Pipeline.3.ResponseCode"/>
+  <affected-histogram name="NetConnectivity.Pipeline.3.Status"/>
+  <affected-histogram name="NetConnectivity.Pipeline.4.NetworkError"/>
+  <affected-histogram name="NetConnectivity.Pipeline.4.ResponseCode"/>
+  <affected-histogram name="NetConnectivity.Pipeline.4.Status"/>
+  <affected-histogram name="NetConnectivity.Pipeline.5.NetworkError"/>
+  <affected-histogram name="NetConnectivity.Pipeline.5.ResponseCode"/>
+  <affected-histogram name="NetConnectivity.Pipeline.5.Status"/>
+  <affected-histogram name="NetConnectivity.Pipeline.AllHTTP11"/>
+  <affected-histogram name="NetConnectivity.Pipeline.CanarySuccess"/>
+  <affected-histogram name="NetConnectivity.Pipeline.Depth"/>
+  <affected-histogram name="NetConnectivity.Pipeline.Success"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IdleSktToImpact">
+  <suffix name="idle_timeout_5"
+      label="with 5-second unused idle socket timeout"/>
+  <suffix name="idle_timeout_10"
+      label="with 10-second unused idle socket timeout"/>
+  <suffix name="idle_timeout_20"
+      label="with 20-second unused idle socket timeout"/>
+  <suffix name="idle_timeout_60"
+      label="with 60-second unused idle socket timeout"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ImageDecoderFileTypes" separator=".">
+  <suffix name="BMP" label="Image decoded as BMP"/>
+  <suffix name="GIF" label="Image decoded as GIF"/>
+  <suffix name="ICO" label="Image decoded as ICO"/>
+  <suffix name="JPEG" label="Image decoded as JPEG"/>
+  <suffix name="PNG" label="Image decoded as PNG"/>
+  <affected-histogram name="Blink.DecodedImage.CanvasExpanded"/>
+  <affected-histogram name="Blink.DecodedImage.EffectiveDimensionsLocation"/>
+  <affected-histogram name="Blink.DecodedImage.XCanvasExpansion"/>
+  <affected-histogram name="Blink.DecodedImage.YCanvasExpansion"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IMEAutoCorrect" separator=".">
+  <suffix name="AC0" label="The auto-correct level is 0"/>
+  <suffix name="AC1" label="The auto-correct level is 1"/>
+  <suffix name="AC2" label="The auto-correct level is 2"/>
+  <affected-histogram name="InputMethod.Commit.Index.FR"/>
+  <affected-histogram name="InputMethod.Commit.Index.US"/>
+  <affected-histogram name="InputMethod.Commit.Type.FR"/>
+  <affected-histogram name="InputMethod.Commit.Type.US"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IMEMajorNames" separator=".">
+  <suffix name="US" label="The US keyboard input method"/>
+  <suffix name="FR" label="The French keyboard input method"/>
+  <suffix name="Pinyin" label="The Chinse Pinyin input method"/>
+  <affected-histogram name="InputMethod.Commit.Index"/>
+  <affected-histogram name="InputMethod.Commit.Type"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IMEVKLatency" separator=".">
+  <suffix name="BackgroundSettingsFetched"
+      label="Latency for settings fetched from background"/>
+  <suffix name="HtmlLoaded" label="Latency for the page is loaded"/>
+  <suffix name="KeyboardCreated" label="Latency for the keyboard is created"/>
+  <suffix name="KeyboardShown" label="Latency for keyboard is shown"/>
+  <suffix name="KeysetLoaded" label="Latency for keyset config is loaded"/>
+  <suffix name="LayoutLoaded" label="Latency for layout definition is loaded"/>
+  <affected-histogram name="InputMethod.VirtualKeyboard.InitLatency"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ImmediatePageLoadTiming" separator=".">
+  <obsolete>
+    Deprecated by PageLoad.PaintTiming.NavigationToFirstContentfulPaint.
+  </obsolete>
+  <suffix name="Immediate"
+      label="Logged immediately after a timing update is observed, unlike
+             normal PageLoad timing metrics, which are logged at the end of a
+             page's lifetime. This metric is temporary and is intended to
+             help loading-dev to understand the impact of logging metrics at
+             the end of a page load."/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IndexedDBLevelDBErrnoMethods" separator=".">
+  <suffix name="NewLogger" label="ChromiumEnv::NewLogger"/>
+  <suffix name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
+  <suffix name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
+  <suffix name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
+  <suffix name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
+  <suffix name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
+  <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/>
+  <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
+  <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
+  <suffix name="WritableFileSyncParent"
+      label="ChromiumWritableFile::SyncParent"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.Errno"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.Errno"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.Errno"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IndexedDBLevelDBPFEMethods" separator=".">
+  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
+  <suffix name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
+  <suffix name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
+  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
+  <suffix name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
+  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
+  <suffix name="NewAppendableFile" label="ChromiumEnv::NewAppendableFile"/>
+  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
+  <suffix name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
+  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
+  <suffix name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.PFE"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.PFE"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.PFE"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="InstallerDownloadSources" separator="">
+  <suffix name="HttpPeer" label="Download Source: HTTP Peer"/>
+  <suffix name="HttpServer" label="Download Source: HTTP Server"/>
+  <suffix name="HttpsServer" label="Download Source: HTTPS Server"/>
+  <affected-histogram name="Installer.SuccessfulMBsDownloadedFrom"/>
+  <affected-histogram name="Installer.TotalMBsDownloadedFrom"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Instant">
+  <suffix name="Extended" label="Suggestions + Results"/>
+  <suffix name="Instant" label="Results"/>
+  <affected-histogram name="Instant.SessionsStorageNamespace"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="InstantExtended_QuerytoQuery">
+  <obsolete>
+    All relevant histograms have been marked as obsolete as of Sep 2016.
+  </obsolete>
+  <owner>macourteau@chromium.org</owner>
+  <suffix name="400" label="Omnibox width &lt; 400"/>
+  <suffix name="700" label="Omnibox width &lt; 700"/>
+  <suffix name="1200" label="Omnibox width &lt; 1200"/>
+  <suffix name="large" label="Omnibox width &gt;= 1200"/>
+  <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoQuery"/>
+  <affected-histogram name="InstantExtended.PercentageMatchV2_QuerytoURL"/>
+  <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoQuery"/>
+  <affected-histogram name="InstantExtended.PercentageMatchV2_URLtoURL"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="InstantSearchClicks">
+  <obsolete>
+    Deprecated as of 7/2015.
+  </obsolete>
+  <suffix name="WithPreview"
+      label="Only page loads through data reduction proxy that are result of
+             navigation from web search and preview version of the page shown
+             are considered."/>
+  <suffix name="Preview"
+      label="Only page loads through data reduction proxy that are result of
+             navigation from web search and preview version of the page shown
+             are considered."/>
+  <suffix name="NoPreview"
+      label="Only page loads through data reduction proxy that are result of
+             navigation from web search and preview version of the page shown
+             are considered."/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
+  <affected-histogram name="PLT.BeginToFirstPaint"/>
+  <affected-histogram name="PLT.CommitToFirstPaint"/>
+  <affected-histogram name="PLT.PT_BeginToCommit"/>
+  <affected-histogram name="PLT.PT_BeginToFinish"/>
+  <affected-histogram name="PLT.PT_BeginToFinishDoc"/>
+  <affected-histogram name="PLT.PT_CommitToFinish"/>
+  <affected-histogram name="PLT.PT_CommitToFinishDoc"/>
+  <affected-histogram name="PLT.PT_RequestToCommit"/>
+  <affected-histogram name="PLT.PT_RequestToDomContentLoaded"/>
+  <affected-histogram name="PLT.PT_RequestToFinish"/>
+  <affected-histogram name="PLT.PT_RequestToFinishDoc"/>
+  <affected-histogram name="PLT.PT_RequestToStart"/>
+  <affected-histogram name="PLT.PT_StartToCommit"/>
+  <affected-histogram name="PLT.PT_StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IntentToFirstCommitZoom" separator=".">
+  <owner>lizeb@chromium.org</owner>
+  <owner>pasko@chromium.org</owner>
+  <suffix name="ZoomedIn" label="Zoomed in view: shorter range, more buckets."/>
+  <suffix name="ZoomedOut"
+      label="Zoomed out view: longer time range, less buckets."/>
+  <affected-histogram
+      name="ChromeGeneratedCustomTab.IntentToFirstCommitNavigationTime2"/>
+  <affected-histogram name="CustomTabs.IntentToFirstCommitNavigationTime2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="InterProcessTimeTicksConversionType">
+  <owner>ppi@chromium.org</owner>
+  <suffix name="BrowserToRenderer"/>
+  <suffix name="RendererToBrowser"/>
+  <affected-histogram name="InterProcessTimeTicks.BrowserAhead"/>
+  <affected-histogram name="InterProcessTimeTicks.BrowserBehind"/>
+  <affected-histogram name="InterProcessTimeTicks.IsSkewAdditive"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Interval" separator="_">
+  <obsolete>
+    Removed 10/2016.
+  </obsolete>
+  <suffix name="Interval" label="Interval between two consecutive connects is"/>
+  <affected-histogram name="Net.TCP_Connection_Latency"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Interval_20ms_plus_and_minus" separator="_">
+  <obsolete>
+    Removed 11/2016.
+  </obsolete>
+  <suffix name="Interval_20ms_Minus"
+      label="Interval between two consecutive connects is less than 20ms."/>
+  <suffix name="Interval_20ms_Plus"
+      label="Interval between two consecutive connects is greater than or
+             equal to 20ms."/>
+  <affected-histogram name="Net.TCP_Connection_Latency"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Interval_lt_gt_20ms" separator="_">
+  <obsolete>
+    Removed 11/2016.
+  </obsolete>
+  <suffix name="LessThanOrEqual_10ms" label="less than or equal to 10ms."/>
+  <suffix name="LessThanOrEqual_20ms"
+      label="more than 10ms, and less than or equal to 20ms."/>
+  <suffix name="GreaterThan_20ms" label="greater than 20ms."/>
+  <affected-histogram name="Net.TCP_Connection_Latency_Interval"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IOMode" separator=".">
+  <suffix name="Synchronous"/>
+  <suffix name="Asynchronous"/>
+  <affected-histogram name="Net.QuicSession.PacketWriteTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="iOS_PLT" separator="">
+  <owner>pauljensen@chromium.org</owner>
+  <suffix name="" label="not using Data Reduction Proxy"/>
+  <suffix name="_DataReductionProxy" label="using Data Reduction Proxy"/>
+  <affected-histogram name="Tabs.iOS_PostRedirectPLT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IPProtocolType" separator="_">
+  <suffix name="UDP"/>
+  <suffix name="TCP"/>
+  <affected-histogram name="WebRTC.PeerConnection.CandidatePairType"/>
+  <affected-histogram name="WebRTC.SystemMaxConsecutiveBytesDelayed"/>
+  <affected-histogram name="WebRTC.SystemPercentPacketsDelayed"/>
+  <affected-histogram name="WebRTC.SystemSendPacketDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="IPv6_Probe">
+  <suffix name="IPv6_probe_skipped"
+      label="with IPv6 not probed, and default OS settings used"/>
+  <suffix name="IPv6_probe_done"
+      label="with IPv6 probed for and possibly disabled"/>
+  <affected-histogram name="DNS.PrefetchResolution"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="JSDialogs.DialogType" separator=".">
+  <suffix name="Alert"/>
+  <suffix name="Confirm"/>
+  <suffix name="Prompt"/>
+  <affected-histogram name="JSDialogs.IsForemost"/>
+  <affected-histogram name="JSDialogs.SiteEngagementOfDialogs"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="JSDialogs.EngagementList" separator=".">
+  <suffix name="EngagementNone" label="site engagement = 0"/>
+  <suffix name="EngagementLessThanOne" label="site engagement &lt; 1"/>
+  <suffix name="EngagementOneToFive" label="site engagement &gt;= 1, &lt; 5"/>
+  <suffix name="EngagementHigher" label="site engagement &gt;= 5"/>
+  <affected-histogram name="JSDialogs.CharacterCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="JSDialogs.FrameType" separator=".">
+  <suffix name="MainFrame" label="dialog spawned by the main frame"/>
+  <suffix name="Subframe" label="dialog spawned by a subframe"/>
+  <affected-histogram name="JSDialogs.CharacterCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="JSDialogs.LeaveStay" separator=".">
+  <suffix name="Leave" label="user opted to leave the page"/>
+  <suffix name="Stay" label="user opted to stay on the page"/>
+  <affected-histogram name="JSDialogs.SiteEngagementOfBeforeUnload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="JSDialogs.UserGestureSinceLoad" separator=".">
+  <suffix name="UserGestureSinceLoad"/>
+  <suffix name="NoUserGestureSinceLoad"/>
+  <affected-histogram name="JSDialogs.CharacterCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LateBindingExperiment">
+  <suffix name="disable_late_binding" label="socket late binding is disabled"/>
+  <suffix name="enable_late_binding" label="socket late binding is enabled"/>
+  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
+  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
+  <affected-histogram name="Net.SocketIdleTimeOnIOError2_ReusedSocket"/>
+  <affected-histogram name="Net.SocketIdleTimeOnIOError2_UnusedSocket"/>
+  <affected-histogram name="Net.TCPSocketType"/>
+  <affected-histogram name="Net.Transaction_Connected"/>
+  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
+  <affected-histogram name="Net.TransportSocketRequestTime"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoad"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="Renderer4.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="Renderer4.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoad"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadNormal"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_LinkLoadReload"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc_NormalLoad"/>
+  <affected-histogram name="Renderer4.RequestToFinish"/>
+  <affected-histogram name="Renderer4.StartToFinish"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBBFEMethods" separator=".">
+  <owner>cmumford@chromium.org</owner>
+  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
+  <suffix name="DeleteDir" label="ChromiumEnv::DeleteDir"/>
+  <suffix name="DeleteFile" label="ChromiumEnv::DeleteFile"/>
+  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
+  <suffix name="GetFileSize" label="ChromiumEnv::GetFileSize"/>
+  <suffix name="GetTestDirectory" label="ChromiumEnv::GetTestDirectory"/>
+  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
+  <suffix name="NewAppendableFile" label="ChromiumEnv::NewAppendableFile"/>
+  <suffix name="NewLogger" label="ChromiumEnv::NewLogger"/>
+  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
+  <suffix name="NewSequentialFile" label="ChromiumEnv::NewSequentialFile"/>
+  <suffix name="NewWritableFile" label="ChromiumEnv::NewWritableFile"/>
+  <suffix name="RandomAccessFileRead" label="ChromiumRandomAccessFile::Read"/>
+  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
+  <suffix name="SequentialFileRead" label="ChromiumSequentialFile::Read"/>
+  <suffix name="SequentialFileSkip" label="ChromiumSequentialFile::Skip"/>
+  <suffix name="UnlockFile" label="ChromiumEnv::UnlockFile"/>
+  <suffix name="WritableFileAppend" label="ChromiumWritableFile::Append"/>
+  <suffix name="WritableFileClose" label="ChromiumWritableFile::Close"/>
+  <suffix name="WritableFileFlush" label="ChromiumWritableFile::Flush"/>
+  <suffix name="WritableFileSync" label="ChromiumWritableFile::Sync"/>
+  <suffix name="WritableFileSyncParent"
+      label="ChromiumWritableFile::SyncParent"/>
+  <affected-histogram name="LevelDBEnv.IDB.IOError.BFE"/>
+  <affected-histogram name="LevelDBEnv.IOError.BFE"/>
+  <affected-histogram name="LevelDBEnv.ServiceWorker.IOError.BFE"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBOpenErrors.BFE"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBReadErrors.BFE"/>
+  <affected-histogram name="WebCore.IndexedDB.LevelDBWriteErrors.BFE"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBEnvBackupRestore" separator="">
+  <obsolete>
+    Deprecated 08/2016.
+  </obsolete>
+  <suffix name="Backup" label="Backing up an ldb file."/>
+  <suffix name="Restore" label="Restoring an ldb file."/>
+  <affected-histogram name="LevelDBEnv.IDB.Table"/>
+  <affected-histogram name="LevelDBEnv.ServiceWorker.Table"/>
+  <affected-histogram name="LevelDBEnv.Table"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBEnvMaxFDs" separator=".">
+  <suffix name="Success"
+      label="This histogram shows the limit when open succeeded."/>
+  <suffix name="TooManyOpened"
+      label="This histogram shows the limit when open failed because the
+             limit had been reached."/>
+  <suffix name="OtherError"
+      label="This histogram shows the limit when open failed for reasons
+             other than exceeding the limit."/>
+  <affected-histogram name="LevelDBEnv.IDB.MaxFDs"/>
+  <affected-histogram name="LevelDBEnv.MaxFDs"/>
+  <affected-histogram name="LevelDBEnv.ServiceWorker.MaxFDs"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBEnvPlatformFileErrors" separator="">
+  <suffix name="CreateDir" label="ChromiumEnv::CreateDir"/>
+  <suffix name="GetChildren" label="ChromiumEnv::GetChildren"/>
+  <suffix name="LockFile" label="ChromiumEnv::LockFile"/>
+  <suffix name="NewRandomAccessFile" label="ChromiumEnv::NewRandomAccessFile"/>
+  <suffix name="RenameFile" label="ChromiumEnv::RenameFile"/>
+  <affected-histogram name="LevelDBEnv.IDB.IOError."/>
+  <affected-histogram name="LevelDBEnv.IOError."/>
+  <affected-histogram name="LevelDBEnv.ServiceWorker.IOError."/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBEnvRetry" separator="">
+  <suffix name="RenameFile" label="RenameFile"/>
+  <suffix name="LockFile" label="LockFile"/>
+  <suffix name="CreateDir" label="CreateDir"/>
+  <affected-histogram name="LevelDBEnv.IDB.RetryRecoveredFromErrorIn"/>
+  <affected-histogram name="LevelDBEnv.IDB.TimeUntilSuccessFor"/>
+  <affected-histogram name="LevelDBEnv.RetryRecoveredFromErrorIn"/>
+  <affected-histogram
+      name="LevelDBEnv.ServiceWorker.RetryRecoveredFromErrorIn"/>
+  <affected-histogram name="LevelDBEnv.ServiceWorker.TimeUntilSuccessFor"/>
+  <affected-histogram name="LevelDBEnv.TimeUntilSuccessFor"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBEnvRetryTimes" separator="">
+  <obsolete>
+    Deprecated 2013-04 in favor of LevelDBEnvRetry.
+  </obsolete>
+  <suffix name="Rename" label="RenameFile"/>
+  <suffix name="LockFile" label="LockFile"/>
+  <affected-histogram name="LevelDBEnv.IDB.TimeTo"/>
+  <affected-histogram name="LevelDBEnv.TimeTo"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LevelDBOpenResults">
+  <suffix name="DomDistillerStore" label="Databases for DomDistillerStore"/>
+  <suffix name="GCMKeyStore" label="Databases for GCMKeyStore"/>
+  <suffix name="ImageManager" label="Databases for ImageManager"/>
+  <suffix name="OfflinePageMetadataStore"
+      label="Databases for OfflinePageMetadataStore"/>
+  <suffix name="UsageReportsBufferBackend"
+      label="The result of the first attempt to open the usage reports buffer
+             backend database."/>
+  <suffix name="BudgetManager"
+      label="Database for storing budget information for origins."/>
+  <affected-histogram name="LevelDB.Open"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LocalStorageCachePurgeReason" separator=".">
+  <suffix name="AggressivePurgeTriggered"
+      label="Aggressive purge was triggered on memory pressure."/>
+  <suffix name="AreaCountLimitExceeded"
+      label="Storage areas count exceeded limit."/>
+  <suffix name="InactiveOnLowEndDevice"
+      label="Inactive areas found in low end device."/>
+  <suffix name="ModeratePurgeTriggered"
+      label="Moderate purge was triggered on memory pressure."/>
+  <suffix name="SizeLimitExceeded" label="Cache size exceeded limit."/>
+  <affected-histogram name="LocalStorage.BrowserLocalStorageCachePurgedInKB"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LocalStorageSizes" separator="">
+  <suffix name="Under100KB" label="DB size under 100KB"/>
+  <suffix name="100KBTo1MB" label="DB size between 100KB and 1MB"/>
+  <suffix name="1MBTo5MB" label="DB size between 1MB and 5MB"/>
+  <affected-histogram name="LocalStorage.BrowserTimeToPrimeLocalStorage"/>
+  <affected-histogram name="LocalStorage.MojoTimeToPrimeFor"/>
+  <affected-histogram name="LocalStorage.RendererTimeToPrimeLocalStorage"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LockExistingCachedImage" separator=".">
+  <suffix name="Software.EVENTUALLY" label="Eventually bin for software"/>
+  <suffix name="Software.NOW" label="Now bin for software"/>
+  <suffix name="Software.SOON" label="Soon bin for software"/>
+  <affected-histogram name="Renderer4.LockExistingCachedImage"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="LowMemoryMargin">
+  <suffix name="default" label="Low memory margin set to the system default"/>
+  <suffix name="off" label="Low memory notification disabled"/>
+  <suffix name="0mb" label="Low memory margin set to 0MB"/>
+  <suffix name="25mb" label="Low memory margin set to 25MB"/>
+  <suffix name="50mb" label="Low memory margin set to 50MB"/>
+  <suffix name="100mb" label="Low memory margin set to 100MB"/>
+  <suffix name="200mb" label="Low memory margin set to 200MB"/>
+  <affected-histogram name="Tabs.Discard.DiscardCount"/>
+  <affected-histogram name="Tabs.Discard.InitialTime2"/>
+  <affected-histogram name="Tabs.Discard.IntervalTime2"/>
+  <affected-histogram name="Tabs.Discard.MemAnonymousMB"/>
+  <affected-histogram name="Tabs.Discard.MemAvailableMB"/>
+  <affected-histogram name="Tabs.Discard.TabCount"/>
+  <affected-histogram name="Tabs.SadTab.CrashCreated"/>
+  <affected-histogram name="Tabs.SadTab.KillCreated"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ManifestProperties" separator=".">
+  <suffix name="name"/>
+  <suffix name="short_name"/>
+  <suffix name="start_url"/>
+  <suffix name="display"/>
+  <suffix name="orientation"/>
+  <suffix name="icons"/>
+  <suffix name="gcm_sender_id"/>
+  <affected-histogram name="Manifest.HasProperty"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MediaAudioInputControllerTime" separator=".">
+  <suffix name="CloseTime" label="Measures the time taken for DoClose()."/>
+  <suffix name="CreateTime" label="Measures the time taken for DoCreate()."/>
+  <suffix name="RecordTime" label="Measures the time taken for DoRecord()."/>
+  <affected-histogram name="Media.AudioInputController"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MediaAudioInputDeviceManagerTime" separator=".">
+  <suffix name="OpenOnDeviceThreadTime"
+      label="Measures the time taken for OpenOnDeviceThread()."/>
+  <suffix name="EnumerateOnDeviceThreadTime"
+      label="Measures the time taken for EnumerateOnDeviceThread()."/>
+  <affected-histogram name="Media.AudioInputDeviceManager"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MediaAudioOutputControllerTime" separator=".">
+  <suffix name="CloseTime" label="Measures the time taken for DoClose()."/>
+  <suffix name="CreateTime" label="Measures the time taken for DoCreate()."/>
+  <suffix name="DeviceChangeTime"
+      label="Measures the time taken for OnDeviceChange()."/>
+  <suffix name="PauseTime" label="Measures the time taken for DoPause()."/>
+  <suffix name="PlayTime"
+      label="Measures the time taken for DoPlay(). Technically only the
+             worker method AudioOutputController::PollAndStartIfDataReady()."/>
+  <affected-histogram name="Media.AudioOutputController"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MediaPipelineStatusForStreams" separator=".">
+  <suffix name="AudioVideo.Other"
+      label="PipelineStatus for the codecs that dont have an explicit metric."/>
+  <suffix name="AudioVideo.VP8.SW"
+      label="PipelineStatus for AV streams with VP8 software decoder."/>
+  <suffix name="AudioVideo.VP8.HW"
+      label="PipelineStatus for AV streams with VP8 hardware decoder."/>
+  <suffix name="AudioVideo.VP8.DDS.SW"
+      label="PipelineStatus for AV streams with VP8 software codec and that
+             go through the DecryptingDemuxerStream (DDS)."/>
+  <suffix name="AudioVideo.VP8.DDS.HW"
+      label="PipelineStatus for AV streams with VP8 hardware codec and that
+             go through the DecryptingDemuxerStream (DDS)."/>
+  <suffix name="AudioVideo.VP8.DVD"
+      label="PipelineStatus for AV streams with VP8 codec and that go through
+             the DecryptingVideoDecoder (DVD)."/>
+  <suffix name="AudioVideo.VP9.SW"
+      label="PipelineStatus for AV streams with VP9 software decoder."/>
+  <suffix name="AudioVideo.VP9.HW"
+      label="PipelineStatus for AV streams with VP9 hardware decoder."/>
+  <suffix name="AudioVideo.VP9.DDS.SW"
+      label="PipelineStatus for AV streams with VP9 codec and that go through
+             the DecryptingDemuxerStream (DDS)."/>
+  <suffix name="AudioVideo.VP9.DDS.HW"
+      label="PipelineStatus for AV streams with VP9 hardware codec and that
+             go through the DecryptingDemuxerStream (DDS)."/>
+  <suffix name="AudioVideo.VP9.DVD"
+      label="PipelineStatus for AV streams with VP9 software codec and that
+             go through the DecryptingVideoDecoder (DVD)."/>
+  <suffix name="AudioVideo.H264.SW"
+      label="PipelineStatus for software decoded AV streams with H264
+             decoder."/>
+  <suffix name="AudioVideo.H264.HW"
+      label="PipelineStatus for hardware decoded AV streams with H264
+             decoder."/>
+  <suffix name="AudioVideo.H264.DDS.SW"
+      label="PipelineStatus for AV streams with H264 software decoder and
+             that go through the DecryptingDemuxerStream (DDS)."/>
+  <suffix name="AudioVideo.H264.DDS.HW"
+      label="PipelineStatus for AV streams with H264 hardware decoder and
+             that go through the DecryptingDemuxerStream (DDS)."/>
+  <suffix name="AudioVideo.H264.DVD"
+      label="PipelineStatus for AV streams with H264 decoder and that go
+             through the DecryptingVideoDecoder (DVD)."/>
+  <suffix name="AudioOnly" label="PipelineStatus for Audio-only streams."/>
+  <suffix name="VideoOnly" label="PipelineStatus for Video-only streams."/>
+  <suffix name="Unsupported" label="PipelineStatus for unsupported streams."/>
+  <affected-histogram name="Media.PipelineStatus"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MediaVideoCaptureManagerTime" separator=".">
+  <suffix name="StartDeviceTime"
+      label="Measures the time taken for DoStartDeviceOnDeviceThread()."/>
+  <suffix name="StopDeviceTime"
+      label="Measures the time taken for DoStopDeviceOnDeviceThread()."/>
+  <suffix name="GetAvailableDevicesInfoOnDeviceThreadTime"
+      label="Measures the time taken to enumerate devices and their
+             capabilities, between EnumerateDevices() and
+             OnDevicesInfoEnumerated()."/>
+  <affected-histogram name="Media.VideoCaptureManager"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MediaWatchTimeCategories" separator=".">
+  <suffix name="Audio.All"
+      label="Watch time for all media with only an audio track."/>
+  <suffix name="Audio.AC"
+      label="Watch time for all media with only an audio track on AC power."/>
+  <suffix name="Audio.Battery"
+      label="Watch time for all media with only an audio track on battery
+             power."/>
+  <suffix name="Audio.MSE"
+      label="Watch time for MSE media with only an audio track."/>
+  <suffix name="Audio.SRC"
+      label="Watch time for SRC media with only an audio track."/>
+  <suffix name="Audio.EME"
+      label="Watch time for EME media with only an audio track."/>
+  <suffix name="AudioVideo.All"
+      label="Watch time for all media with both an audio and video track."/>
+  <suffix name="AudioVideo.AC"
+      label="Watch time for all media with both an audio and video track on
+             AC power."/>
+  <suffix name="AudioVideo.Battery"
+      label="Watch time for all media with both an audio and video track on
+             battery power."/>
+  <suffix name="AudioVideo.MSE"
+      label="Watch time for MSE media with both an audio and video track."/>
+  <suffix name="AudioVideo.SRC"
+      label="Watch time for SRC media with both an audio and video track."/>
+  <suffix name="AudioVideo.EME"
+      label="Watch time for EME media with both an audio and video track."/>
+  <affected-histogram name="Media.WatchTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MemoryStateTransition" separator=".">
+  <suffix name="NormalToThrottled"/>
+  <suffix name="NormalToSuspended"/>
+  <suffix name="ThrottledToNormal"/>
+  <suffix name="ThrottledToSuspended"/>
+  <suffix name="SuspendedToNormal"/>
+  <suffix name="SuspendedToThrottled"/>
+  <affected-histogram name="Memory.Coordinator.StateDuration"/>
+  <affected-histogram name="Memory.Coordinator.TotalPrivate"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MobileDownloadBytesDownloadedTypes" separator=".">
+  <suffix name="ChromeNetworkStack.Failure"/>
+  <suffix name="ChromeNetworkStack.Success"/>
+  <suffix name="DownloadManager.Failure"/>
+  <suffix name="DownloadManager.Success"/>
+  <affected-histogram name="MobileDownload.BytesDownloaded"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MobileDownloadDownloadTimeTypes" separator=".">
+  <suffix name="ChromeNetworkStack.Cancel"/>
+  <suffix name="ChromeNetworkStack.Failure"/>
+  <suffix name="ChromeNetworkStack.Success"/>
+  <suffix name="DownloadManager.Failure"/>
+  <suffix name="DownloadManager.Success"/>
+  <affected-histogram name="MobileDownload.DownloadTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MobileDownloadInterruptionsCountTypes" separator=".">
+  <suffix name="ChromeNetworkStack.Cancel"/>
+  <suffix name="ChromeNetworkStack.Failure"/>
+  <suffix name="ChromeNetworkStack.Success"/>
+  <affected-histogram name="MobileDownload.InterruptionsCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MobileFreEntryType" separator=".">
+  <suffix name="MainIntent" label="Icon click"/>
+  <suffix name="ViewIntent" label="VIEW intent"/>
+  <affected-histogram name="MobileFre.Progress"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MobileFreSignInChoiceEntryType" separator=".">
+  <obsolete>
+    Removed from code as of 08/2016.
+  </obsolete>
+  <suffix name="MainIntent" label="Icon click"/>
+  <suffix name="ViewIntent" label="VIEW intent"/>
+  <affected-histogram name="MobileFre.SignInChoice"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="MobileFreSignInChoiceNumberOfAccounts" separator=".">
+  <obsolete>
+    Removed from code as of 08/2016.
+  </obsolete>
+  <suffix name="ZeroAccounts" label="Zero accounts"/>
+  <suffix name="OneAccount" label="One account"/>
+  <suffix name="ManyAccounts" label="Two or more accounts"/>
+  <affected-histogram name="MobileFre.SignInChoice.MainIntent"/>
+  <affected-histogram name="MobileFre.SignInChoice.ViewIntent"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ModuleIntegrityVerificationType" separator=".">
+  <suffix name="WithoutByteSet"
+      label="The version of the Module Integrity Verifier that doesn't use a
+             hash set to track relocations."/>
+  <suffix name="WithByteSet"
+      label="The version of the Module Integrity Verifier that uses a hash set
+             to track relocations.">
+    <obsolete>
+      Deprecated and removed from code as of 05/2015.
+    </obsolete>
+  </suffix>
+  <affected-histogram name="ModuleIntegrityVerification.BytesModified"/>
+  <affected-histogram name="ModuleIntegrityVerification.Difference"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NatType" separator=".">
+  <suffix name="NoNAT"/>
+  <suffix name="UnknownNAT"/>
+  <suffix name="SymNAT"/>
+  <suffix name="NonSymNAT"/>
+  <affected-histogram name="WebRTC.Stun.BatchSuccessPercent"/>
+  <affected-histogram name="WebRTC.Stun.ResponseLatency"/>
+  <affected-histogram name="WebRTC.Stun.SuccessPercent"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NavigationCharacteristic">
+  <suffix name="ExistingRenderer_BeforeUnloadDiscounted"
+      label="Navigation reused an existing renderer process. Time spent in
+             beforeunload subtracted."/>
+  <suffix name="NewRenderer_BeforeUnloadDiscounted"
+      label="Navigation spawned a new renderer process. Time spent in
+             beforeunload subtracted."/>
+  <suffix name="SessionRestored_BeforeUnloadDiscounted"
+      label="Navigation caused by restoring a tab from a previous session
+             (whether from a crash or a continued session) either spawning or
+             reusing a renderer. Time spent in beforeunload subtracted."/>
+  <suffix name="SessionRestored"
+      label="Navigation caused by restoring a tab from a previous session
+             (whether from a crash or a continued session) either spawning or
+             reusing a renderer. Time spent in beforeunload subtracted.">
+    <obsolete>
+      Replaced by the likely named entry. It had a misleading name as it also
+      has the before-unload time discounted.
+    </obsolete>
+  </suffix>
+  <affected-histogram name="Navigation.TimeToCommit"/>
+  <affected-histogram name="Navigation.TimeToURLJobStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Net.BidirectionalStreamExperiment" separator=".">
+  <owner>xunjieli@chromium.org</owner>
+  <suffix name="QUIC" label="Bidirectional streams that use QUIC protocol"/>
+  <suffix name="HTTP2" label="Bidirectional stream that use HTTP2 protocol"/>
+  <affected-histogram name="Net.BidirectionalStream.ReceivedBytes"/>
+  <affected-histogram name="Net.BidirectionalStream.SentBytes"/>
+  <affected-histogram name="Net.BidirectionalStream.TimeToReadEnd"/>
+  <affected-histogram name="Net.BidirectionalStream.TimeToReadStart"/>
+  <affected-histogram name="Net.BidirectionalStream.TimeToSendEnd"/>
+  <affected-histogram name="Net.BidirectionalStream.TimeToSendStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Net.QuicClientHelloRejectReasons.QuicIsSecureOrNot"
+    separator=".">
+  <owner>rtenneti@chromium.org</owner>
+  <suffix name="Insecure" label="for insecure QUIC.">
+    <obsolete>
+      Deprecated and removed from code as of 10/2015.
+    </obsolete>
+  </suffix>
+  <suffix name="Secure" label="for secure QUIC."/>
+  <suffix name="TooMany"
+      label="for secure QUIC when there were too many rejects."/>
+  <affected-histogram name="Net.QuicClientHelloRejectReasons"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Net.QuicSession.21CumulativePackets" separator="_">
+  <owner>rch@chromium.org</owner>
+  <suffix name="First21"
+      label="Only the first group of 21 packets in a connection via"/>
+  <suffix name="Some21s"
+      label="After the first 21, this records data for some groups of 21
+             consecutive sequence nmubers, arriving via."/>
+  <affected-histogram name="Net.QuicSession.21CumulativePacketsReceived"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Net.QuicSession.6PacketPatterns" separator="_">
+  <owner>rch@chromium.org</owner>
+  <suffix name="First6"
+      label="Only the first group of 6 packets in a connection via"/>
+  <suffix name="Some6s"
+      label="After the first 6, this records patterns for some groups of 6
+             consecutive sequence numbers, arriving via."/>
+  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Net.QuicSession.PacketReceived" separator="_">
+  <owner>rch@chromium.org</owner>
+  <suffix name="Ack"
+      label="Only packets that were received by Chrome as well being part of
+             connections via"/>
+  <suffix name="Nack"
+      label="Only packets that were missed by Chrome as well being part of
+             connections via"/>
+  <suffix name="IsAnAck"
+      label="Only packets that were probably solo ACK packets when recieved
+             by Chrome as well being part of connections via"/>
+  <suffix name="IsNotAck"
+      label="Only packets that were probably NOT solo ACK packets when
+             recieved by Chrome as well being part of connections via"/>
+  <affected-histogram name="Net.QuicSession.PacketReceived"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Net.QuicSession.PacketReceived_CONNECTION_TYPE"
+    separator="_">
+  <owner>rch@chromium.org</owner>
+  <suffix name="CONNECTION_UNKNOWN" label="WiFi are tallied."/>
+  <suffix name="CONNECTION_ETHERNET"
+      label="ethernet are tallied, but this may include connections to a WiFi
+             bridge."/>
+  <suffix name="CONNECTION_WIFI"
+      label="WiFi are tallied, but this may include connections to a mobile
+             hotspot. Also check similar histograms that end in WIFI_802.11*
+             for more details on some platforms."/>
+  <suffix name="CONNECTION_WIFI_ANCIENT"
+      label="802.11 that are no longer standard are tallied."/>
+  <suffix name="CONNECTION_WIFI_802.11a" label="802.11a are tallied."/>
+  <suffix name="CONNECTION_WIFI_802.11b" label="802.11b are tallied."/>
+  <suffix name="CONNECTION_WIFI_802.11g" label="802.11g are tallied."/>
+  <suffix name="CONNECTION_WIFI_802.11n" label="802.11n are tallied."/>
+  <suffix name="CONNECTION_2G" label="mobile 2G are tallied."/>
+  <suffix name="CONNECTION_3G" label="mobile 3G are tallied."/>
+  <suffix name="CONNECTION_4G" label="mobile 4G are tallied."/>
+  <suffix name="CONNECTION_NONE"
+      label="NO(?) network are tallied (should be empty)."/>
+  <suffix name="CONNECTION_BLUETOOTH"
+      label="Bluetooth are tallied, but this may include connections to a
+             mobile hotspot."/>
+  <affected-histogram
+      name="Net.QuicSession.21CumulativePacketsReceived_First21"/>
+  <affected-histogram
+      name="Net.QuicSession.21CumulativePacketsReceived_Some21s"/>
+  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived_First6"/>
+  <affected-histogram name="Net.QuicSession.6PacketsPatternsReceived_Some6s"/>
+  <affected-histogram name="Net.QuicSession.PacketLossRate"/>
+  <affected-histogram name="Net.QuicSession.PacketReceived_Ack"/>
+  <affected-histogram name="Net.QuicSession.PacketReceived_IsAnAck"/>
+  <affected-histogram name="Net.QuicSession.PacketReceived_IsNotAck"/>
+  <affected-histogram name="Net.QuicSession.PacketReceived_Nack"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity" separator=".">
+  <suffix name="53.100B" label="100 bytes of data on port 53."/>
+  <suffix name="53.100B.NoProxy"
+      label="100 bytes of data on port 53 with no proxy."/>
+  <suffix name="53.1K" label="1K bytes of data on port 53."/>
+  <suffix name="53.1K.NoProxy"
+      label="1K bytes of data on port 53 with no proxy."/>
+  <suffix name="53.100B.RTT"
+      label="100 bytes of data on port 53 successfully."/>
+  <suffix name="53.100B.RTT.NoProxy"
+      label="100 bytes of data on port 53 successfully with no proxy."/>
+  <suffix name="53.1K.RTT" label="1K bytes of data on port 53 successfully."/>
+  <suffix name="53.1K.RTT.NoProxy"
+      label="1K bytes of data on port 53 successfully with no proxy."/>
+  <suffix name="587.100B" label="100 bytes of data on port 587."/>
+  <suffix name="587.100B.NoProxy"
+      label="100 bytes of data on port 587 with no proxy."/>
+  <suffix name="587.1K" label="1K bytes of data on port 587."/>
+  <suffix name="587.1K.NoProxy"
+      label="1K bytes of data on port 587 with no proxy."/>
+  <suffix name="587.100B.RTT"
+      label="100 bytes of data on port 587 successfully."/>
+  <suffix name="587.100B.RTT.NoProxy"
+      label="100 bytes of data on port 587 successfully with no proxy."/>
+  <suffix name="587.1K.RTT" label="1K bytes of data on port 587 successfully."/>
+  <suffix name="587.1K.RTT.NoProxy"
+      label="1K bytes of data on port 587 successfully with no proxy."/>
+  <suffix name="6121.100B" label="100 bytes of data on port 6121."/>
+  <suffix name="6121.100B.NoProxy"
+      label="100 bytes of data on port 6121 with no proxy."/>
+  <suffix name="6121.1K" label="1K bytes of data on port 6121."/>
+  <suffix name="6121.1K.NoProxy"
+      label="1K bytes of data on port 6121 with no proxy."/>
+  <suffix name="6121.100B.RTT"
+      label="100 bytes of data on port 6121 successfully."/>
+  <suffix name="6121.100B.RTT.NoProxy"
+      label="100 bytes of data on port 6121 successfully with no proxy."/>
+  <suffix name="6121.1K.RTT"
+      label="1K bytes of data on port 6121 successfully."/>
+  <suffix name="6121.1K.RTT.NoProxy"
+      label="1K bytes of data on port 6121 successfully with no proxy."/>
+  <suffix name="80.100B" label="100 bytes of data on port 80."/>
+  <suffix name="80.100B.NoProxy"
+      label="100 bytes of data on port 80 with no proxy."/>
+  <suffix name="80.1K" label="1K bytes of data on port 80."/>
+  <suffix name="80.1K.NoProxy"
+      label="1K bytes of data on port 80 with no proxy."/>
+  <suffix name="80.100B.RTT"
+      label="100 bytes of data on port 80 successfully."/>
+  <suffix name="80.100B.RTT.NoProxy"
+      label="100 bytes of data on port 80 successfully with no proxy."/>
+  <suffix name="80.1K.RTT" label="1K bytes of data on port 80 successfully."/>
+  <suffix name="80.1K.RTT.NoProxy"
+      label="1K bytes of data on port 80 successfully with no proxy."/>
+  <suffix name="8080.100B" label="100 bytes of data on port 8080."/>
+  <suffix name="8080.100B.NoProxy"
+      label="100 bytes of data on port 8080 with no proxy."/>
+  <suffix name="8080.1K" label="1K bytes of data on port 8080."/>
+  <suffix name="8080.1K.NoProxy"
+      label="1K bytes of data on port 8080 with no proxy."/>
+  <suffix name="8080.100B.RTT"
+      label="100 bytes of data on port 8080 successfully."/>
+  <suffix name="8080.100B.RTT.NoProxy"
+      label="100 bytes of data on port 8080 successfully with no proxy."/>
+  <suffix name="8080.1K.RTT"
+      label="1K bytes of data on port 8080 successfully."/>
+  <suffix name="8080.1K.RTT.NoProxy"
+      label="1K bytes of data on port 8080 successfully with no proxy."/>
+  <affected-histogram name="NetConnectivity.TCP.Status"/>
+  <affected-histogram name="NetConnectivity.TCP.Success"/>
+  <affected-histogram name="NetConnectivity.UDP.PacketLoss"/>
+  <affected-histogram name="NetConnectivity.UDP.PacketLoss6"/>
+  <affected-histogram name="NetConnectivity.UDP.Status"/>
+  <affected-histogram name="NetConnectivity.UDP.Success"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity2" separator=".">
+  <suffix name="AcksReceivedFromFirst2Packets" label="2 packets."/>
+  <suffix name="AcksReceivedFromFirst3Packets" label="3 packets."/>
+  <suffix name="AcksReceivedFromFirst4Packets" label="4 packets."/>
+  <suffix name="AcksReceivedFromFirst5Packets" label="5 packets."/>
+  <suffix name="AcksReceivedFromFirst6Packets" label="6 packets."/>
+  <suffix name="AcksReceivedFromFirst7Packets" label="7 packets."/>
+  <suffix name="AcksReceivedFromFirst8Packets" label="8 packets."/>
+  <suffix name="AcksReceivedFromFirst9Packets" label="9 packets."/>
+  <suffix name="AcksReceivedFromFirst10Packets" label="10 packets."/>
+  <suffix name="AcksReceivedFromFirst11Packets" label="11 packets."/>
+  <suffix name="AcksReceivedFromFirst12Packets" label="12 packets."/>
+  <suffix name="AcksReceivedFromFirst13Packets" label="13 packets."/>
+  <suffix name="AcksReceivedFromFirst14Packets" label="14 packets."/>
+  <suffix name="AcksReceivedFromFirst15Packets" label="15 packets."/>
+  <suffix name="AcksReceivedFromFirst16Packets" label="16 packets."/>
+  <suffix name="AcksReceivedFromFirst17Packets" label="17 packets."/>
+  <suffix name="AcksReceivedFromFirst18Packets" label="18 packets."/>
+  <suffix name="AcksReceivedFromFirst19Packets" label="19 packets."/>
+  <suffix name="AcksReceivedFromFirst20Packets" label="20 packets."/>
+  <suffix name="AcksReceivedFromFirst21Packets" label="21 packets."/>
+  <affected-histogram name="NetConnectivity.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity2a" separator=".">
+  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
+  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
+  <suffix name="6121.1K" label="1K bytes of data is sent on port 6121."/>
+  <affected-histogram name="NetConnectivity2.Sent21.AckReceivedForNthPacket"/>
+  <affected-histogram name="NetConnectivity2.Sent21.GotAnAck"/>
+  <affected-histogram name="NetConnectivity2.Sent21.PacketsSent"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity2b" separator=".">
+  <suffix name="AcksReceivedFromFirst2Packets.6121.100B"
+      label="2 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst3Packets.6121.100B"
+      label="3 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst4Packets.6121.100B"
+      label="4 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst5Packets.6121.100B"
+      label="5 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst6Packets.6121.100B"
+      label="6 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst7Packets.6121.100B"
+      label="7 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst8Packets.6121.100B"
+      label="8 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst9Packets.6121.100B"
+      label="9 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst10Packets.6121.100B"
+      label="10 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst11Packets.6121.100B"
+      label="11 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst12Packets.6121.100B"
+      label="12 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst13Packets.6121.100B"
+      label="13 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst14Packets.6121.100B"
+      label="14 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst15Packets.6121.100B"
+      label="15 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst16Packets.6121.100B"
+      label="16 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst17Packets.6121.100B"
+      label="17 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst18Packets.6121.100B"
+      label="18 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst19Packets.6121.100B"
+      label="19 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst20Packets.6121.100B"
+      label="20 packets. 100 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst21Packets.6121.100B"
+      label="21 packets. 100 bytes of data is sent on port 6121."/>
+  <affected-histogram name="NetConnectivity2.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity2c" separator=".">
+  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
+  <suffix name="6121.100B.NoProxy"
+      label="100 bytes of data is sent on port 6121 with no proxy."/>
+  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
+  <suffix name="6121.500B.NoProxy"
+      label="500 bytes of data is sent on port 6121 with no proxy."/>
+  <suffix name="6121.1K" label="1K bytes of data is sent on port 6121."/>
+  <suffix name="6121.1K.NoProxy"
+      label="1K bytes of data is sent on port 6121 with no proxy."/>
+  <affected-histogram name="NetConnectivity2.Send6.PacketsSent"/>
+  <affected-histogram name="NetConnectivity2.Send6.SeriesAcked"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity2d" separator=".">
+  <suffix name="AcksReceivedFromFirst2Packets.6121.500B"
+      label="2 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst3Packets.6121.500B"
+      label="3 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst4Packets.6121.500B"
+      label="4 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst5Packets.6121.500B"
+      label="5 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst6Packets.6121.500B"
+      label="6 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst7Packets.6121.500B"
+      label="7 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst8Packets.6121.500B"
+      label="8 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst9Packets.6121.500B"
+      label="9 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst10Packets.6121.500B"
+      label="10 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst11Packets.6121.500B"
+      label="11 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst12Packets.6121.500B"
+      label="12 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst13Packets.6121.500B"
+      label="13 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst14Packets.6121.500B"
+      label="14 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst15Packets.6121.500B"
+      label="15 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst16Packets.6121.500B"
+      label="16 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst17Packets.6121.500B"
+      label="17 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst18Packets.6121.500B"
+      label="18 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst19Packets.6121.500B"
+      label="19 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst20Packets.6121.500B"
+      label="20 packets. 500 bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst21Packets.6121.500B"
+      label="21 packets. 500 bytes of data is sent on port 6121."/>
+  <affected-histogram name="NetConnectivity2.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity2e" separator=".">
+  <suffix name="AcksReceivedFromFirst2Packets.6121.1K"
+      label="2 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst3Packets.6121.1K"
+      label="3 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst4Packets.6121.1K"
+      label="4 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst5Packets.6121.1K"
+      label="5 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst6Packets.6121.1K"
+      label="6 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst7Packets.6121.1K"
+      label="7 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst8Packets.6121.1K"
+      label="8 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst9Packets.6121.1K"
+      label="9 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst10Packets.6121.1K"
+      label="10 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst11Packets.6121.1K"
+      label="11 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst12Packets.6121.1K"
+      label="12 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst13Packets.6121.1K"
+      label="13 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst14Packets.6121.1K"
+      label="14 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst15Packets.6121.1K"
+      label="15 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst16Packets.6121.1K"
+      label="16 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst17Packets.6121.1K"
+      label="17 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst18Packets.6121.1K"
+      label="18 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst19Packets.6121.1K"
+      label="19 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst20Packets.6121.1K"
+      label="20 packets. 1K bytes of data is sent on port 6121."/>
+  <suffix name="AcksReceivedFromFirst21Packets.6121.1K"
+      label="21 packets. 1K bytes of data is sent on port 6121."/>
+  <affected-histogram name="NetConnectivity2.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3a" separator=".">
+  <suffix name="NonPacedPacket"
+      label="In this histogram results are only shown if at least two packets
+             were ACKed in the Startup Test. Packets were sent as rapidly as
+             possible."/>
+  <suffix name="PacedPacket"
+      label="In this histogram results are only shown if at least two packets
+             were ACKed in the Startup Test. Packets are sent at equal
+             intervals. The interval is selected to match the bandwidth
+             discovered during the StartPacket test."/>
+  <suffix name="StartPacket"
+      label="Packets are sent as rapidly as possible, just after successfully
+             sending an UMA upload. Each packet was numbered, as was its ACK
+             sent back by Google. If no packets (of the 21) were ever ACKed,
+             then the port is assumed to be blocked, and no data is recorded
+             in this histogram."/>
+  <affected-histogram name="NetConnectivity3"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3aa" separator=".">
+  <suffix name="Sent21"
+      label="This histogram shows the number of echo responses received from
+             the first"/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket"/>
+  <affected-histogram name="NetConnectivity3.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3AckReceivedForNthPacket"
+    separator=".">
+  <suffix name="Sent21.AckReceivedForNthPacket"
+      label="Each packet was numbered, as was its ACK sent back by Google.
+             This histogram records, for each packet number, how often we
+             received an ACK for that packet."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket"/>
+  <affected-histogram name="NetConnectivity3.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3AcksReceivedFromFirst" separator=".">
+  <suffix name="AcksReceivedFromFirst02Packets" label="2 packets."/>
+  <suffix name="AcksReceivedFromFirst03Packets" label="3 packets."/>
+  <suffix name="AcksReceivedFromFirst04Packets" label="4 packets."/>
+  <suffix name="AcksReceivedFromFirst05Packets" label="5 packets."/>
+  <suffix name="AcksReceivedFromFirst06Packets" label="6 packets."/>
+  <suffix name="AcksReceivedFromFirst07Packets" label="7 packets."/>
+  <suffix name="AcksReceivedFromFirst08Packets" label="8 packets."/>
+  <suffix name="AcksReceivedFromFirst09Packets" label="9 packets."/>
+  <suffix name="AcksReceivedFromFirst10Packets" label="10 packets."/>
+  <suffix name="AcksReceivedFromFirst11Packets" label="11 packets."/>
+  <suffix name="AcksReceivedFromFirst12Packets" label="12 packets."/>
+  <suffix name="AcksReceivedFromFirst13Packets" label="13 packets."/>
+  <suffix name="AcksReceivedFromFirst14Packets" label="14 packets."/>
+  <suffix name="AcksReceivedFromFirst15Packets" label="15 packets."/>
+  <suffix name="AcksReceivedFromFirst16Packets" label="16 packets."/>
+  <suffix name="AcksReceivedFromFirst17Packets" label="17 packets."/>
+  <suffix name="AcksReceivedFromFirst18Packets" label="18 packets."/>
+  <suffix name="AcksReceivedFromFirst19Packets" label="19 packets."/>
+  <suffix name="AcksReceivedFromFirst20Packets" label="20 packets."/>
+  <suffix name="AcksReceivedFromFirst21Packets" label="21 packets."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3GotAnAck" separator=".">
+  <suffix name="Sent21.GotAnAck"
+      label="The histogram shows if we ever got an ACK for a packet in our
+             series of 21."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket"/>
+  <affected-histogram name="NetConnectivity3.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3PacketDelay1" separator=".">
+  <suffix name="Sent21.443"
+      label="This histogram shows the difference between the time when we
+             have received 1st byte from the server and the last time when we
+             have received data from the server on port 443."/>
+  <suffix name="Sent21.6121"
+      label="This histogram shows the difference between the time when we
+             have received 1st byte from the server and the last time when we
+             have received data from the server on port 6121."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket"/>
+  <affected-histogram name="NetConnectivity3.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3PacketDelay2" separator=".">
+  <suffix name="443.100B.PacketDelay"
+      label="100 bytes of data is sent on port 443."/>
+  <suffix name="443.1200B.PacketDelay"
+      label="1200 bytes of data is sent on port 443."/>
+  <suffix name="443.500B.PacketDelay"
+      label="500 bytes of data is sent on port 443."/>
+  <suffix name="6121.100B.PacketDelay"
+      label="100 bytes of data is sent on port 6121."/>
+  <suffix name="6121.1200B.PacketDelay"
+      label="1200 bytes of data is sent on port 6121."/>
+  <suffix name="6121.500B.PacketDelay"
+      label="500 bytes of data is sent on port 6121."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3PacketRTT" separator=".">
+  <suffix name="Sent21.Success.RTT" label="The histogram shows the RTT for"/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket"/>
+  <affected-histogram name="NetConnectivity3.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3Packets" separator=".">
+  <suffix name="Packet01" label="1st packet."/>
+  <suffix name="Packet02" label="2nd packet."/>
+  <suffix name="Packet03" label="3rd packet."/>
+  <suffix name="Packet10" label="10th packet."/>
+  <suffix name="Packet20" label="20th packet."/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.Success.RTT"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.Success.RTT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3PacketsSent" separator=".">
+  <suffix name="Sent21.PacketsSent"
+      label="This histogram records how many packets (out of 21 attempted)
+             were sent to the server via UDP."/>
+  <suffix name="Send6.SeriesAcked"
+      label="Chrome sends 6 UDP packets in a row to test to see if there is a
+             probabalistic dependency in packet loss for consecutive packets.
+             We record a bit vector of packets received, where the least
+             significant bit is a 1 if the first packet was received, etc.
+             For example, if all packets other than packet 2 and 4 are
+             responded to, then we'd have a sample (in binary) of 110101B, or
+             53."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket"/>
+  <affected-histogram name="NetConnectivity3.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3PacketsSentBytes" separator=".">
+  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
+  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
+  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
+  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
+  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
+  <suffix name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AckReceivedForNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket.Sent21.GotAnAck"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.PacketsSent"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity3.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AckReceivedForNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.AcksReceivedFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.GotAnAck"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket.Sent21.PacketsSent"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity3.PacedPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AckReceivedForNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.AcksReceivedFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.GotAnAck"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Sent21.PacketsSent"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity3.StartPacket.Sent21.Success.RTT.Packet20"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity3Send6Acked" separator=".">
+  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
+  <suffix name="443.100B.NoProxy"
+      label="100 bytes of data is sent on port 443 with no proxy."/>
+  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
+  <suffix name="443.500B.NoProxy"
+      label="500 bytes of data is sent on port 443 with no proxy."/>
+  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
+  <suffix name="443.1200B.NoProxy"
+      label="1200 bytes of data is sent on port 443 with no proxy."/>
+  <suffix name="6121.100B" label="100 bytes of data is sent on port 6121."/>
+  <suffix name="6121.100B.NoProxy"
+      label="100 bytes of data is sent on port 6121 with no proxy."/>
+  <suffix name="6121.500B" label="500 bytes of data is sent on port 6121."/>
+  <suffix name="6121.500B.NoProxy"
+      label="500 bytes of data is sent on port 6121 with no proxy."/>
+  <suffix name="6121.1200B" label="1200 bytes of data is sent on port 6121."/>
+  <suffix name="6121.1200B.NoProxy"
+      label="1200 bytes of data is sent on port 6121 with no proxy."/>
+  <affected-histogram name="NetConnectivity3.NonPacedPacket.Send6.SeriesAcked"/>
+  <affected-histogram name="NetConnectivity3.PacedPacket.Send6.SeriesAcked"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Send6.PacketsSent"/>
+  <affected-histogram name="NetConnectivity3.StartPacket.Send6.SeriesAcked"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4a" separator=".">
+  <suffix name="NATBind.Sent2"
+      label="Two packets were sent spreading over a random period, to test if
+             the NAT dropped the binding. Afterwords, an extra (short) packet
+             was sent with renewed NAT binding to test whether the network
+             that was used to deliver the first packet is still connected.
+             Results are only shown in this histogram if at least ten packets
+             were received in the StartPacket test."/>
+  <suffix name="NonPacedPacket"
+      label="21 Packets were sent as rapidly as possible. Results are only
+             shown in this histogram if at least two packets were received in
+             the StartPacket Test."/>
+  <suffix name="PacedPacket"
+      label="21 Packets were sent at equal intervals, which were selected to
+             match the bandwidth discovered during the StartPacket test.
+             Results are only shown in this histogram if at least two packets
+             were received in the StartPacket Test."/>
+  <suffix name="StartPacket"
+      label="21 Packets were sent as rapidly as possible, just after the
+             client successfully sent a UMA upload. Each packet was numbered
+             when it was sent by Google."/>
+  <affected-histogram name="NetConnectivity4"/>
+  <affected-histogram name="NetConnectivity5"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4NATBindPacketReceives" separator=".">
+  <suffix name="Bind.Failure"
+      label="Only when the second packet never arrived (we wait for 10 extra
+             seconds) and the first and the extra (short) packets arrived did
+             we record the duration in seconds between the sendings of the
+             first two packets in this histogram."/>
+  <suffix name="Bind.Success"
+      label="Only when all three packets including the extra (short) packet
+             arrived did we record the duration in seconds between the
+             sendings of the first two packets in this histogram."/>
+  <suffix name="Connectivity.Failure"
+      label="Only when the extra (short) packet (with renewed NAT binding)
+             never arrived (we wait for 10 extra seconds) did we record the
+             duration in seconds between the sendings of the first two
+             packets in this histogram."/>
+  <suffix name="Connectivity.Success"
+      label="Only when the extra (short) packet arrived did we record the
+             duration in seconds between the sendings of the first two
+             packets in this histogram."/>
+  <suffix name="SendToLastRecvDelay"
+      label="This histogram records the time duration (in milliseconds)
+             between the client sending the request and the receiving of the
+             second packet sent from the server, excluding the idle time
+             between sendings of the first two packets. Results are only
+             shown if the first two packets are both received."/>
+  <affected-histogram name="NetConnectivity4.NATBind.Sent2"/>
+  <affected-histogram name="NetConnectivity5.NATBind.Sent2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketFirst6" separator=".">
+  <suffix name="First6.SeriesRecv"
+      label="This histogram records a bit vector of the first 6 packets sent,
+             where the least significant bit is a 1 if the first packet was
+             received, etc. For example, if all packets other than packet 2
+             and 4 are received, then we'd have a sample (in binary) of
+             110101B, or 53."/>
+  <suffix name="Sent21"
+      label="This histogram shows the number of packets received from the
+             first"/>
+  <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket"/>
+  <affected-histogram name="NetConnectivity4.StartPacket"/>
+  <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket"/>
+  <affected-histogram name="NetConnectivity5.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketReceives" separator=".">
+  <suffix name="NumRecvFromFirst01Packets" label="1 packet."/>
+  <suffix name="NumRecvFromFirst02Packets" label="2 packets."/>
+  <suffix name="NumRecvFromFirst03Packets" label="3 packets."/>
+  <suffix name="NumRecvFromFirst04Packets" label="4 packets."/>
+  <suffix name="NumRecvFromFirst05Packets" label="5 packets."/>
+  <suffix name="NumRecvFromFirst06Packets" label="6 packets."/>
+  <suffix name="NumRecvFromFirst07Packets" label="7 packets."/>
+  <suffix name="NumRecvFromFirst08Packets" label="8 packets."/>
+  <suffix name="NumRecvFromFirst09Packets" label="9 packets."/>
+  <suffix name="NumRecvFromFirst10Packets" label="10 packets."/>
+  <suffix name="NumRecvFromFirst11Packets" label="11 packets."/>
+  <suffix name="NumRecvFromFirst12Packets" label="12 packets."/>
+  <suffix name="NumRecvFromFirst13Packets" label="13 packets."/>
+  <suffix name="NumRecvFromFirst14Packets" label="14 packets."/>
+  <suffix name="NumRecvFromFirst15Packets" label="15 packets."/>
+  <suffix name="NumRecvFromFirst16Packets" label="16 packets."/>
+  <suffix name="NumRecvFromFirst17Packets" label="17 packets."/>
+  <suffix name="NumRecvFromFirst18Packets" label="18 packets."/>
+  <suffix name="NumRecvFromFirst19Packets" label="19 packets."/>
+  <suffix name="NumRecvFromFirst20Packets" label="20 packets."/>
+  <suffix name="NumRecvFromFirst21Packets" label="21 packets."/>
+  <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.Sent21"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketRTT" separator=".">
+  <suffix name="Sent21.GotAPacket"
+      label="The histogram shows if we ever got at least one packet in our
+             series of 21."/>
+  <suffix name="Sent21.PacketDelay"
+      label="The histogram shows the average inter-arrival time between every
+             two consecutive packets we receive in our series of 21
+             multiplied by 20 (so this is essentially the time duration
+             between the first and the last received packets)."/>
+  <suffix name="Sent21.PacketsRecv"
+      label="The histogram shows how many packets we receive in our series of
+             21."/>
+  <suffix name="Sent21.RecvNthPacket"
+      label="Each packet was numbered when it was sent by Google. This
+             histogram records, for each packet number, how often we received
+             that packet."/>
+  <suffix name="Sent21.SendToLastRecvDelay"
+      label="This histogram records the time duration between the client
+             sending the request and the receiving of the last packet sent
+             from the server, excluding the total pacing time requested by
+             the client. Results are only shown if at least two packets are
+             received."/>
+  <suffix name="Sent21.Success.RTT"
+      label="The histogram shows the RTT for the"/>
+  <affected-histogram name="NetConnectivity4.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket"/>
+  <affected-histogram name="NetConnectivity4.StartPacket"/>
+  <affected-histogram name="NetConnectivity5.NonPacedPacket"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket"/>
+  <affected-histogram name="NetConnectivity5.StartPacket"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketRTTSeries" separator=".">
+  <suffix name="Packet01" label="1st packet."/>
+  <suffix name="Packet02" label="2nd packet."/>
+  <suffix name="Packet03" label="3rd packet."/>
+  <suffix name="Packet10" label="10th packet."/>
+  <suffix name="Packet20" label="20th packet."/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.Success.RTT"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.Success.RTT"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.Success.RTT"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.Success.RTT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketsAll" separator=".">
+  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
+  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
+  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
+  <suffix name="80.100B" label="100 bytes of data is sent on port 80."/>
+  <suffix name="80.1200B" label="1200 bytes of data is sent on port 80."/>
+  <suffix name="80.500B" label="500 bytes of data is sent on port 80."/>
+  <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Failure"/>
+  <affected-histogram name="NetConnectivity4.NATBind.Sent2.Bind.Success"/>
+  <affected-histogram
+      name="NetConnectivity4.NATBind.Sent2.Connectivity.Failure"/>
+  <affected-histogram
+      name="NetConnectivity4.NATBind.Sent2.Connectivity.Success"/>
+  <affected-histogram
+      name="NetConnectivity4.NATBind.Sent2.SendToLastRecvDelay"/>
+  <affected-histogram name="NetConnectivity4.NonPacedPacket.Sent21.GotAPacket"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.PacketDelay"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.PacketsRecv"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.RecvNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity4.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.GotAPacket"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketDelay"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.PacketsRecv"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.Sent21.RecvNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.SendToLastRecvDelay"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity4.PacedPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.GotAPacket"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketDelay"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.PacketsRecv"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.Sent21.RecvNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.SendToLastRecvDelay"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity4.StartPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Failure"/>
+  <affected-histogram name="NetConnectivity5.NATBind.Sent2.Bind.Success"/>
+  <affected-histogram
+      name="NetConnectivity5.NATBind.Sent2.Connectivity.Failure"/>
+  <affected-histogram
+      name="NetConnectivity5.NATBind.Sent2.Connectivity.Success"/>
+  <affected-histogram
+      name="NetConnectivity5.NATBind.Sent2.SendToLastRecvDelay"/>
+  <affected-histogram name="NetConnectivity5.NonPacedPacket.Sent21.GotAPacket"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst01Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.NumRecvFromFirst21Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.PacketDelay"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.PacketsRecv"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.RecvNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.SendToLastRecvDelay"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity5.NonPacedPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.GotAPacket"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst01Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.NumRecvFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketDelay"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.PacketsRecv"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.Sent21.RecvNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.SendToLastRecvDelay"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity5.PacedPacket.Sent21.Success.RTT.Packet20"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.GotAPacket"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst01Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst02Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst03Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst04Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst05Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst06Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst07Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst08Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst09Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst10Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst11Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst12Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst13Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst14Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst15Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst16Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst17Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst18Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst19Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst20Packets"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.NumRecvFromFirst21Packets"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketDelay"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.PacketsRecv"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.Sent21.RecvNthPacket"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.SendToLastRecvDelay"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet01"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet02"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet03"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet10"/>
+  <affected-histogram
+      name="NetConnectivity5.StartPacket.Sent21.Success.RTT.Packet20"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketSizeTest" separator=".">
+  <suffix name="PacketSizeTest.Connectivity.Failure"
+      label="This histogram records the size of the packet size that was not
+             received from the server."/>
+  <suffix name="PacketSizeTest.Connectivity.Success"
+      label="This histogram records the size of the packet size that was
+             received from the server."/>
+  <affected-histogram name="NetConnectivity4"/>
+  <affected-histogram name="NetConnectivity5"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4PacketSizeTestPort" separator=".">
+  <suffix name="443" label="Packet is sent on port 443."/>
+  <suffix name="80" label="Packet is sent on port 80."/>
+  <affected-histogram
+      name="NetConnectivity4.PacketSizeTest.Connectivity.Failure"/>
+  <affected-histogram
+      name="NetConnectivity4.PacketSizeTest.Connectivity.Success"/>
+  <affected-histogram
+      name="NetConnectivity5.PacketSizeTest.Connectivity.Failure"/>
+  <affected-histogram
+      name="NetConnectivity5.PacketSizeTest.Connectivity.Success"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetConnectivity4SeriesRecv" separator=".">
+  <suffix name="443.100B" label="100 bytes of data is sent on port 443."/>
+  <suffix name="443.100B.NoProxy"
+      label="100 bytes of data is sent on port 443 with no proxy."/>
+  <suffix name="443.1200B" label="1200 bytes of data is sent on port 443."/>
+  <suffix name="443.1200B.NoProxy"
+      label="1200 bytes of data is sent on port 443 with no proxy."/>
+  <suffix name="443.500B" label="500 bytes of data is sent on port 443."/>
+  <suffix name="443.500B.NoProxy"
+      label="500 bytes of data is sent on port 443 with no proxy."/>
+  <suffix name="80.100B" label="100 bytes of data is sent on port 80."/>
+  <suffix name="80.100B.NoProxy"
+      label="100 bytes of data is sent on port 80 with no proxy."/>
+  <suffix name="80.1200B" label="1200 bytes of data is sent on port 80."/>
+  <suffix name="80.1200B.NoProxy"
+      label="1200 bytes of data is sent on port 80 with no proxy."/>
+  <suffix name="80.500B" label="500 bytes of data is sent on port 80."/>
+  <suffix name="80.500B.NoProxy"
+      label="500 bytes of data is sent on port 80 with no proxy."/>
+  <affected-histogram name="NetConnectivity4.NonPacedPacket.First6.SeriesRecv"/>
+  <affected-histogram name="NetConnectivity4.PacedPacket.First6.SeriesRecv"/>
+  <affected-histogram name="NetConnectivity4.StartPacket.First6.SeriesRecv"/>
+  <affected-histogram name="NetConnectivity5.NonPacedPacket.First6.SeriesRecv"/>
+  <affected-histogram name="NetConnectivity5.PacedPacket.First6.SeriesRecv"/>
+  <affected-histogram name="NetConnectivity5.StartPacket.First6.SeriesRecv"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetErrorCodeSubtype" separator="." ordering="prefix">
+  <owner>csharrison@chromium.org</owner>
+  <suffix name="NTP.Google" label="The Google web NTP"/>
+  <suffix name="NTP.ThirdParty"
+      label="The NTP served by a third party (e.g. Bing)"/>
+  <suffix name="NTP.Local" label="The local NTP"/>
+  <affected-histogram name="Net.RequestTime2.ErrAborted"/>
+  <affected-histogram name="Net.RequestTime2.Success"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetProxyResolverExecutionTime">
+  <suffix name="UrlOver2K" label="URL length was over 2K"/>
+  <suffix name="UrlOver4K" label="URL length was over 4K"/>
+  <suffix name="UrlOver8K" label="URL length was over 8K"/>
+  <suffix name="UrlOver128K" label="URL length was over 128K"/>
+  <affected-histogram name="Net.ProxyResolver.ExecutionTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetQuicDiskCacheBackend" separator=".">
+  <owner>rtenneti@chromium.org</owner>
+  <suffix name="NoBackend" label="DiskCache didn't have a backend"/>
+  <suffix name="DiskCache" label="DiskCache backend is using disk cache."/>
+  <suffix name="MemoryCache" label="DiskCache backend is using memory cache."/>
+  <suffix name="PropertiesBasedCache" label="Preferences based cache is used."/>
+  <suffix name="WaitForDataReady"
+      label="Tracks the last failure reason until WaitForDataReady or its
+             callback is executed. This is recorded when data is ready in
+             WaitForDataReady or when the callback is executed"/>
+  <affected-histogram name="Net.QuicDiskCache.APICall"/>
+  <affected-histogram name="Net.QuicDiskCache.FailureReason"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetRequestTime" separator=".">
+  <suffix name="ErrAborted" label="Request aborted"/>
+  <suffix name="ErrConnectionReset" label="Connection reset"/>
+  <suffix name="ErrConnectionTimedOut" label="Request connection timed out"/>
+  <suffix name="ErrInternetDisconnected" label="Internet disconnected"/>
+  <suffix name="ErrNameNotResolved" label="Request domain not resolved"/>
+  <suffix name="ErrTimedOut" label="Request timed out"/>
+  <suffix name="MiscError" label="Uncategorized error"/>
+  <suffix name="Success" label="Success"/>
+  <affected-histogram name="Net.RequestTime"/>
+  <affected-histogram name="Net.RequestTime2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NetworkErrors" separator=".">
+  <suffix name="AuthExtTimeout" label="with the last error AuthExtTimeout"/>
+  <suffix name="Offline" label="with the last error Offline"/>
+  <suffix name="Portal" label="with the last error Portal"/>
+  <suffix name="Proxy" label="with the last error Proxy"/>
+  <affected-histogram name="OOBE.ErrorScreensTime.Enrollment"/>
+  <affected-histogram name="OOBE.ErrorScreensTime.Signin"/>
+  <affected-histogram name="OOBE.ErrorScreensTime.Supervised"/>
+  <affected-histogram name="OOBE.ErrorScreensTime.Update"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NewTabPageProviders" separator=".">
+  <suffix name="client" label="Suggestions coming from the client."/>
+  <suffix name="server" label="Suggestions coming from the server."/>
+  <suffix name="popular" label="Non-personalized, popular suggestions."/>
+  <suffix name="whitelist"
+      label="Installed whitelist entry point suggestions."/>
+  <suffix name="client0">
+    <obsolete>
+      Hasn't been used for a while, as of 2016-07.
+    </obsolete>
+  </suffix>
+  <suffix name="server0">
+    <obsolete>
+      Hasn't been used for a while, as of 2016-07.
+    </obsolete>
+  </suffix>
+  <suffix name="server8">
+    <obsolete>
+      Not used anymore as of 2016-07.
+    </obsolete>
+  </suffix>
+  <suffix name="server9">
+    <obsolete>
+      Has never been used.
+    </obsolete>
+  </suffix>
+  <suffix name="server10">
+    <obsolete>
+      Has never been used.
+    </obsolete>
+  </suffix>
+  <suffix name="server11">
+    <obsolete>
+      Has never been used.
+    </obsolete>
+  </suffix>
+  <affected-histogram name="NewTabPage.MostVisited"/>
+  <affected-histogram name="NewTabPage.SuggestionsImpression"/>
+  <affected-histogram name="NewTabPage.TileType"/>
+  <affected-histogram name="NewTabPage.TileTypeClicked"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NewTabPageTimings" separator=".">
+  <suffix name="MostLikely" label="Loaded server-side suggestions."/>
+  <suffix name="MostVisited" label="Loaded client-side suggestions."/>
+  <suffix name="LocalNTP" label="Loaded local NTP"/>
+  <suffix name="Web" label="Loaded server-side NTP"/>
+  <suffix name="Startup" label="NTP loaded during browser startup."/>
+  <suffix name="NewTab" label="NTP loaded on a new tab."/>
+  <affected-histogram name="NewTabPage.LoadTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NextTabState">
+  <suffix name="Active"
+      label="For a tab active which is shown foreground in a browser window."/>
+  <suffix name="Inactive"
+      label="For tabs in background and not shown to user."/>
+  <suffix name="Detached"
+      label="For a tab that is being dragged by user to outside of the
+             browser window."/>
+  <suffix name="Closed" label="For a tab that is about to be closed."/>
+  <affected-histogram name="Tabs.StateTransfer.Time_Active"/>
+  <affected-histogram name="Tabs.StateTransfer.Time_Detached"/>
+  <affected-histogram name="Tabs.StateTransfer.Time_Inactive"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NotificationDisplayExperiment">
+  <suffix name="Fullscreen.Show"
+      label="A notification sent by a fullscreen app or webpage that is
+             displayed."/>
+  <suffix name="Fullscreen.Suppressed"
+      label="A notification sent by a fullscreen app or webpage that is not
+             displayed."/>
+  <suffix name="Windowed"
+      label="A notification sent by a non-fullscreen app or webpage."/>
+  <affected-histogram name="Notifications.Display"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.Accuracy.Metric.Accuracy.DiffPositiveOrNegative"
+    separator=".">
+  <suffix name="Negative"
+      label="Estimate of the metric was lower than observed metric"/>
+  <suffix name="Positive"
+      label="Estimate of the metric was higher than observed metric"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff"/>
+  <affected-histogram name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff"/>
+  <affected-histogram name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.Accuracy.Metric.AccuracyRecordingIntervals"
+    separator=".">
+  <suffix name="15"
+      label="Recorded approximately 15 seconds after navigation start"/>
+  <suffix name="30"
+      label="Recorded approximately 30 seconds after navigation start"/>
+  <suffix name="60"
+      label="Recorded approximately 60 seconds after navigation start"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive"/>
+</histogram_suffixes>
+
+<histogram_suffixes
+    name="NQE.Accuracy.Metric.EffectiveConnectionType.ObservedIntervals"
+    separator=".">
+  <suffix name="Unknown"
+      label="Observed effective connection type was Unknown"/>
+  <suffix name="Offline"
+      label="Observed effective connection type was Offline"/>
+  <suffix name="Slow2G" label="Observed effective connection type was Slow2G"/>
+  <suffix name="2G" label="Observed effective connection type was 2G"/>
+  <suffix name="3G" label="Observed effective connection type was 3G"/>
+  <suffix name="4G" label="Observed effective connection type was 4G"/>
+  <suffix name="Broadband"
+      label="Observed effective connection type was Broadband"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Negative.60"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.EffectiveConnectionType.EstimatedObservedDiff.Positive.60"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.Accuracy.RTT.ObservedIntervals" separator=".">
+  <suffix name="0_20"
+      label="Observed metric was between 0 and 20 (inclusive) units"/>
+  <suffix name="20_60"
+      label="Observed metric was between 20 and 60 (inclusive) units"/>
+  <suffix name="60_140"
+      label="Observed metric was between 60 and 140 (inclusive) units"/>
+  <suffix name="140_300"
+      label="Observed metric was between 140 and 300 (inclusive) units"/>
+  <suffix name="300_620"
+      label="Observed metric was between 300 and 620 (inclusive) units"/>
+  <suffix name="620_1260"
+      label="Observed metric was between 620 and 1260 (inclusive) units"/>
+  <suffix name="1260_2540"
+      label="Observed metric was between 1260 and 2540 (inclusive) units"/>
+  <suffix name="2540_5100"
+      label="Observed metric was between 2540 and 51000 (inclusive) units"/>
+  <suffix name="5100_Infinity"
+      label="Observed metric was greater than 5100 (inclusive) units"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Negative.60"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.DownstreamThroughputKbps.EstimatedObservedDiff.Positive.60"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Negative.60"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.HttpRTT.EstimatedObservedDiff.Positive.60"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Negative.60"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.15"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.30"/>
+  <affected-histogram
+      name="NQE.Accuracy.TransportRTT.EstimatedObservedDiff.Positive.60"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.15"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.30"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Negative.60"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.15"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.30"/>
+  <affected-histogram
+      name="NQE.ExternalEstimateProvider.RTT.Accuracy.EstimatedObservedDiff.Positive.60"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.DifferentPercentiles" separator=".">
+  <suffix name="Percentile0" label="0th percentile"/>
+  <suffix name="Percentile10" label="10th percentile"/>
+  <suffix name="Percentile50" label="50th percentile"/>
+  <suffix name="Percentile90" label="90th percentile"/>
+  <suffix name="Percentile100" label="100th percentile"/>
+  <affected-histogram name="NQE.RTT"/>
+  <affected-histogram name="NQE.TransportRTT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.DifferentPercentiles" separator=".">
+  <suffix name="Percentile50" label="50th percentile"/>
+  <affected-histogram name="NQE.MainFrame.Kbps"/>
+  <affected-histogram name="NQE.MainFrame.RTT"/>
+  <affected-histogram name="NQE.MainFrame.TransportRTT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.EstimateAvailable.MainFrame.Histograms"
+    separator=".">
+  <suffix name="Kbps"
+      label="Records availability of the downstream throughput estimate."/>
+  <suffix name="RTT" label="Records availability of the HTTP RTT estimate."/>
+  <suffix name="TransportRTT"
+      label="Records availability of the transport RTT estimate."/>
+  <affected-histogram name="NQE.EstimateAvailable.MainFrame"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="NQE.NetworkTypes" separator=".">
+  <suffix name="Unknown" label="On Unknown network"/>
+  <suffix name="Ethernet" label="On Ethernet network"/>
+  <suffix name="WiFi" label="On WiFi network"/>
+  <suffix name="2G" label="On 2G network"/>
+  <suffix name="3G" label="On 3G Network"/>
+  <suffix name="4G" label="On 4G network"/>
+  <suffix name="None" label="With no detected network"/>
+  <suffix name="Bluetooth" label="On Bluetooth network"/>
+  <affected-histogram name="NQE.FastestRTT"/>
+  <affected-histogram name="NQE.MainFrame.EffectiveConnectionType"/>
+  <affected-histogram name="NQE.MainFrame.Kbps.Percentile50"/>
+  <affected-histogram name="NQE.MainFrame.RTT.Percentile50"/>
+  <affected-histogram name="NQE.MainFrame.TransportRTT.Percentile50"/>
+  <affected-histogram name="NQE.PeakKbps"/>
+  <affected-histogram name="NQE.RTT.Percentile0"/>
+  <affected-histogram name="NQE.RTT.Percentile10"/>
+  <affected-histogram name="NQE.RTT.Percentile100"/>
+  <affected-histogram name="NQE.RTT.Percentile50"/>
+  <affected-histogram name="NQE.RTT.Percentile90"/>
+  <affected-histogram name="NQE.TransportRTT.Percentile0"/>
+  <affected-histogram name="NQE.TransportRTT.Percentile10"/>
+  <affected-histogram name="NQE.TransportRTT.Percentile100"/>
+  <affected-histogram name="NQE.TransportRTT.Percentile50"/>
+  <affected-histogram name="NQE.TransportRTT.Percentile90"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="OffDomainInclusionAbortReason" separator=".">
+  <obsolete>
+    Deprecated 2016-05 as the OffDomainInclusionDetector was removed.
+  </obsolete>
+  <suffix name="EmptyMainFrameURL" label="The main frame URL was empty."/>
+  <suffix name="HistoryLookupFailed"
+      label="The lookup to the HistoryService failed."/>
+  <suffix name="Incognito"
+      label="The profile associated with the frame under analysis is an
+             incognito profile."/>
+  <suffix name="NoHistoryService"
+      label="There was no HistoryService associated with the profile of the
+             frame under analysis (this can happen seldomly on startup for
+             early net requests, or on shutdown by the asynchronous nature of
+             the analysis, but shouldn't be common)."/>
+  <suffix name="NoProfile"
+      label="The profile associated with the frame under analysis couldn't be
+             resolved (expected to happen at a low frequency by the
+             asynchronous nature of the analysis)."/>
+  <affected-histogram name="SBOffDomainInclusion.Abort"/>
+  <affected-histogram name="SBOffDomainInclusion2.Abort"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="OfflinePagesNamespace" separator=".">
+  <suffix name="bookmark" label="Offline bookmark cache"/>
+  <suffix name="last_n" label="Offline recent pages"/>
+  <suffix name="async_loading" label="Offline async loaded pages"/>
+  <suffix name="custom_tabs" label="Offline custom tabs"/>
+  <suffix name="download" label="Offline downloaded pages"/>
+  <suffix name="ntp_suggestions" label="Offline ntp suggestions"/>
+  <affected-histogram
+      name="OfflinePages.Background.EffectiveConnectionType.SavePageLater"/>
+  <affected-histogram name="OfflinePages.Background.OfflinerRequestStatus"/>
+  <affected-histogram name="OfflinePages.Background.TimeToCanceled"/>
+  <affected-histogram name="OfflinePages.Background.TimeToSaved"/>
+  <affected-histogram name="OfflinePages.Background.TimeToStart"/>
+  <affected-histogram name="OfflinePages.Background.TimeToStart.Svelte"/>
+  <affected-histogram name="OfflinePages.DeletePage.AccessCount"/>
+  <affected-histogram name="OfflinePages.DeletePage.LastOpenToCreated"/>
+  <affected-histogram name="OfflinePages.DeletePage.PageSize"/>
+  <affected-histogram name="OfflinePages.DeletePage.TimeSinceLastOpen"/>
+  <affected-histogram name="OfflinePages.ExpirePage.PageLifetime"/>
+  <affected-histogram name="OfflinePages.ExpirePage.TimeSinceLastAccess"/>
+  <affected-histogram name="OfflinePages.FirstOpenSinceCreated"/>
+  <affected-histogram name="OfflinePages.OpenSinceLastOpen"/>
+  <affected-histogram name="OfflinePages.PageLifetime"/>
+  <affected-histogram name="OfflinePages.PageSize"/>
+  <affected-histogram name="OfflinePages.SavePageResult"/>
+  <affected-histogram name="OfflinePages.SavePageTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="OmniboxProviderTime" separator=".">
+  <suffix name="Bookmark"/>
+  <suffix name="Builtin"/>
+  <suffix name="Contact"/>
+  <suffix name="ExtensionApp"/>
+  <suffix name="HistoryContents"/>
+  <suffix name="HistoryQuick"/>
+  <suffix name="HistoryURL"/>
+  <suffix name="Keyword"/>
+  <suffix name="Search"/>
+  <suffix name="Shortcuts"/>
+  <suffix name="ZeroSuggest"/>
+  <affected-histogram name="Omnibox.ProviderTime"/>
+  <affected-histogram name="Omnibox.ProviderTime2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="OobeScreenName" separator=".">
+  <suffix name="Eula"/>
+  <suffix name="Hid-detection"/>
+  <suffix name="Image"/>
+  <suffix name="Network"/>
+  <suffix name="Update"/>
+  <suffix name="Wrong-hwid"/>
+  <affected-histogram name="OOBE.StepCompletionTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="OtherActivityProcesses" separator=".">
+  <suffix name="gpu-process"/>
+  <suffix name="renderer"/>
+  <suffix name="setup"/>
+  <affected-histogram name="UMA.Histograms.Activity"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="OverlappedReadImpact">
+  <obsolete>
+    Experiments no longer active.
+  </obsolete>
+  <suffix name="OverlappedReadDisabled" label="Non-blocking reads"/>
+  <suffix name="OverlappedReadEnabled" label="Default, async reads"/>
+  <affected-histogram name="Net.HttpJob.TotalTime"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCached"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCancel"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeSuccess"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.LoadType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadBackgrounded" separator=".">
+  <obsolete>
+    Deprecated in favor of PageLoadBackgrounded2.
+  </obsolete>
+  <suffix name="BG"
+      label="Event occurred at least partially in the background"/>
+  <affected-histogram
+      name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadBackgrounded2" separator=".">
+  <suffix name="Background"
+      label="The page was backgrounded at least once from navigation start to
+             this event."/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.Timing2.ParseDuration"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseDuration"/>
+  <affected-histogram
+      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.Clients.ServiceWorker.Timing2.NavigationToFirstContentfulPaint">
+    <obsolete>
+      Deprecated in favor of PaintTiming equivalent.
+    </obsolete>
+  </affected-histogram>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram name="PageLoad.Events.Committed"/>
+  <affected-histogram name="PageLoad.Events.Provisional"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToCommit"/>
+  <affected-histogram
+      name="PageLoad.Timing2.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstImagePaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstLayout"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstPaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstTextPaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToLoadEventFired"/>
+  <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
+  <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadEventConditions" separator=".">
+  <suffix name="BeforeCommit"/>
+  <suffix name="AfterCommit.BeforePaint"/>
+  <suffix base="true" name="AfterPaint.BeforeInteraction"/>
+  <suffix base="true" name="AfterPaint.Before1sDelayedInteraction"/>
+  <suffix name="DuringParse"/>
+  <affected-histogram name="PageLoad.AbortTiming.Background"/>
+  <affected-histogram name="PageLoad.AbortTiming.ClientRedirect"/>
+  <affected-histogram name="PageLoad.AbortTiming.Close"/>
+  <affected-histogram name="PageLoad.AbortTiming.ForwardBackNavigation"/>
+  <affected-histogram name="PageLoad.AbortTiming.NewNavigation"/>
+  <affected-histogram name="PageLoad.AbortTiming.Other"/>
+  <affected-histogram name="PageLoad.AbortTiming.Reload"/>
+  <affected-histogram name="PageLoad.AbortTiming.Stop"/>
+  <affected-histogram name="PageLoad.AbortTiming.UnknownNavigation"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstBackground">
+    <obsolete>
+      deprecated in favor of PageLoad.AbortTiming.Background.*
+    </obsolete>
+  </affected-histogram>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsCacheInfo" separator=".">
+  <suffix name="NoStore" label="Main resource had cache-control: no-store"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.ForwardBackNavigation"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.NavigationToParseStart.LoadType.ForwardBackNavigation"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsCssScanner" separator="."
+    ordering="prefix">
+  <suffix name="Clients.CssScanner"
+      label="Metrics from pages scanned by the preload scanner for @import
+             CSS rules"/>
+  <affected-histogram
+      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsDataReductionProxy"
+    separator="." ordering="prefix">
+  <suffix name="Clients.DataReductionProxy"
+      label="PageLoadMetrics that are a result of a navigation through the
+             data reduction proxy."/>
+  <suffix name="Clients.DataReductionProxy.LoFiOn"
+      label="PageLoadMetrics that are a result of a navigation through the
+             data reduction proxy with session in LoFi enabled or control
+             field trial, and when the connection was slow."/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram
+      name="PageLoad.Experimental.PaintTiming.NavigationToFirstMeaningfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
+  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsDocWrite" separator="."
+    ordering="prefix">
+  <suffix name="Clients.DocWrite.Block"
+      label="PageLoadMetrics from a page that has synchronous, cross-origin
+             document.written scripts that could be blocked if the
+             document.write script blocking feature is enabled."/>
+  <suffix name="Clients.DocWrite.Evaluator"
+      label="PageLoadMetrics from a page that could have been evaluated by
+             the DocumentWriteEvaluator"/>
+  <affected-histogram
+      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecution"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptExecutionFromDocumentWrite"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.Timing2.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Timing2.ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete"/>
+  <affected-histogram name="PageLoad.Timing2.ParseDuration"/>
+  <affected-histogram name="PageLoad.Timing2.ParseStartToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsFromGoogleSearch" separator="."
+    ordering="prefix">
+  <suffix name="Clients.FromGoogleSearch"
+      label="PageLoadMetrics that are a result of a navigation from a Google
+             web search"/>
+  <suffix name="Clients.FromGWS"
+      label="PageLoadMetrics that are a result of a navigation from a Google
+             web search">
+    <obsolete>
+      Deprecated in favor of Clients.FromGoogleSearch.
+    </obsolete>
+  </suffix>
+  <suffix name="Clients.FromGWS2"
+      label="PageLoadMetrics that are a result of a navigation from a Google
+             web search">
+    <obsolete>
+      Deprecated in favor of Clients.FromGoogleSearch.
+    </obsolete>
+  </suffix>
+  <affected-histogram
+      name="PageLoad.AbortTiming.Close.AfterCommit.BeforePaint"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.Close.AfterPaint.BeforeInteraction"/>
+  <affected-histogram name="PageLoad.AbortTiming.Close.BeforeCommit"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.ForwardBackNavigation.AfterCommit.BeforePaint"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.ForwardBackNavigation.AfterPaint.Before1sDelayedInteraction"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.NewNavigation.AfterCommit.BeforePaint"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.NewNavigation.AfterPaint.BeforeInteraction"/>
+  <affected-histogram name="PageLoad.AbortTiming.Other.BeforeCommit"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.Reload.AfterCommit.BeforePaint"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.Reload.AfterPaint.Before1sDelayedInteraction"/>
+  <affected-histogram name="PageLoad.AbortTiming.Stop.AfterCommit.BeforePaint"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.Stop.AfterPaint.BeforeInteraction"/>
+  <affected-histogram name="PageLoad.AbortTiming.Stop.BeforeCommit"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.UnknownNavigation.BeforeCommit"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstImagePaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstPaint"/>
+  <affected-histogram name="PageLoad.PaintTiming.NavigationToFirstTextPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsOfflinePages" separator="."
+    ordering="prefix">
+  <suffix name="Clients.Previews.OfflinePages"
+      label="PageLoadMetrics that are a result of a navigation that shows
+             users an offline page preview. Offline page previews are shown
+             when a user's effective connection type is prohibitively slow."/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram name="PageLoad.DocumentTiming.NavigationToFirstLayout"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsProtocol" separator="."
+    ordering="prefix">
+  <suffix name="Clients.Protocol.H1"
+      label="PageLoadMetrics that are a result of a navigation to main
+             resource over HTTP/1.1">
+    <obsolete>
+      Renamed to Clients.Protocol.H11
+    </obsolete>
+  </suffix>
+  <suffix name="Clients.Protocol.H11"
+      label="PageLoadMetrics that are a result of a navigation to main
+             resource over HTTP/1.1"/>
+  <suffix name="Clients.Protocol.H2"
+      label="PageLoadMetrics that are a result of a navigation to main
+             resource over HTTP/2"/>
+  <suffix name="Clients.Protocol.QUIC"
+      label="PageLoadMetrics that are a result of a navigation to main
+             resource over QUIC"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram
+      name="PageLoad.Experimental.PaintTiming.ParseStartToFirstMeaningfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsReload" separator="."
+    ordering="prefix">
+  <obsolete>
+    Deprecated at M53 in favor of LoadType.Reload.
+  </obsolete>
+  <suffix name="Clients.Reload"
+      label="PageLoadMetrics from a page that is reloaded"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsServiceWorker" separator="."
+    ordering="prefix">
+  <suffix name="Clients.ServiceWorker"
+      label="PageLoadMetrics from a page that is controlled by a Service
+             Worker"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram
+      name="PageLoad.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.Timing2.NavigationToFirstContentfulPaint">
+    <obsolete>
+      Deprecated in favor of PaintTiming equivalent.
+    </obsolete>
+  </affected-histogram>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsClientsServiceWorkerSpecialApps"
+    separator=".">
+  <suffix name="inbox" label="Custom histogram for Inbox"/>
+  <affected-histogram
+      name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToDOMContentLoadedEventFired"/>
+  <affected-histogram
+      name="PageLoad.Clients.ServiceWorker.DocumentTiming.NavigationToLoadEventFired"/>
+  <affected-histogram
+      name="PageLoad.Clients.ServiceWorker.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram
+      name="PageLoad.Clients.ServiceWorker.PaintTiming.ParseStartToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsLoadType" separator=".">
+  <suffix name="LoadType.Reload" label="Restricted to reloaded pages."/>
+  <suffix name="LoadType.ForwardBackNavigation"
+      label="Restricted to forward/back navigations."/>
+  <suffix name="LoadType.NewNavigation"
+      label="Restricted to new navigations (link clicks, URLs typed into the
+             URL box, etc)."/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+  <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsUserGesture" separator=".">
+  <suffix name="UserGesture"
+      label="Restricted to pages loaded via a user gesture."/>
+  <affected-histogram
+      name="PageLoad.Clients.Reload.PaintTiming.NavigationToFirstContentfulPaint">
+    <obsolete>
+      Deprecated in favor of
+      PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.Reload.
+    </obsolete>
+  </affected-histogram>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint.LoadType.Reload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadMetricsUserInitiated" separator=".">
+  <suffix name="UserInitiated"
+      label="(experimental) Page load metric that is approximately user
+             initiated"/>
+  <affected-histogram
+      name="PageLoad.AbortTiming.ForwardBackNavigation.BeforeCommit"/>
+  <affected-histogram name="PageLoad.AbortTiming.NewNavigation.BeforeCommit"/>
+  <affected-histogram name="PageLoad.AbortTiming.Reload.BeforeCommit"/>
+  <affected-histogram
+      name="PageLoad.PaintTiming.NavigationToFirstContentfulPaint"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadType">
+  <suffix name="HistoryLoad"
+      label="but only for user pressing back or forward"/>
+  <suffix name="LinkLoad"
+      label="deprecated - see LinkLoadReload, LinkLoadNormal,
+             LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
+             back to a posted page"/>
+  <suffix name="LinkLoadCacheOnly"
+      label="content initiated, commonly back to a posted page, where browser
+             must ONLY use cache"/>
+  <suffix name="LinkLoadNormal"
+      label="content initiated, ordinary link traversal or post"/>
+  <suffix name="LinkLoadReload" label="content initiated, calling reload()"/>
+  <suffix name="LinkLoadStaleOk"
+      label="content initiated, commonly forward or back where stale cached
+             data is very acceptable"/>
+  <suffix name="NormalLoad"
+      label="but only for user entered URL or omnibox search"/>
+  <suffix name="Reload" label="but only for user pressed reload"/>
+  <suffix name="UndefLoad"
+      label="should never happen... as it is only for an client-code error
+             case which should not exist"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.StartToCommit">
+    <with-suffix name="LinkLoadNormal"/>
+    <with-suffix name="NormalLoad"/>
+  </affected-histogram>
+  <affected-histogram name="PLT.StartToFinish">
+    <with-suffix name="LinkLoadNormal"/>
+    <with-suffix name="NormalLoad"/>
+  </affected-histogram>
+  <affected-histogram name="Renderer4.BeginToFinish"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PageLoadType">
+  <suffix name="HistoryLoad"
+      label="but only for user pressing back or forward"/>
+  <suffix name="LinkLoad"
+      label="deprecated - see LinkLoadReload, LinkLoadNormal,
+             LinkLoadStaleOk, LinkLoadCacheOnly; content initiated, commonly
+             back to a posted page"/>
+  <suffix name="LinkLoadCacheOnly"
+      label="content initiated, commonly back to a posted page, where browser
+             must ONLY use cache"/>
+  <suffix name="LinkLoadNormal"
+      label="content initiated, ordinary link traversal or post"/>
+  <suffix name="LinkLoadReload" label="content initiated, calling reload()"/>
+  <suffix name="LinkLoadStaleOk"
+      label="content initiated, commonly forward or back where stale cached
+             data is very acceptable"/>
+  <suffix name="NormalLoad"
+      label="but only for user entered URL or omnibox search"/>
+  <suffix name="Reload" label="but only for user pressed reload"/>
+  <suffix name="UndefLoad"
+      label="should never happen... as it is only for an client-code error
+             case which should not exist"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.StartToCommit">
+    <with-suffix name="LinkLoadNormal"/>
+    <with-suffix name="NormalLoad"/>
+  </affected-histogram>
+  <affected-histogram name="PLT.StartToFinish">
+    <with-suffix name="LinkLoadNormal"/>
+    <with-suffix name="NormalLoad"/>
+  </affected-histogram>
+  <affected-histogram name="Renderer4.BeginToFinish"/>
+  <affected-histogram name="Renderer4.BeginToFinishDoc"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PasswordCustomPassphrase" separator=".">
+  <suffix name="WithCustomPassphrase"/>
+  <suffix name="WithoutCustomPassphrase"/>
+  <affected-histogram name="PasswordManager.AccountsPerSite"/>
+  <affected-histogram name="PasswordManager.AccountsPerSite.AutoGenerated"/>
+  <affected-histogram name="PasswordManager.AccountsPerSite.UserCreated"/>
+  <affected-histogram name="PasswordManager.BlacklistedSites"/>
+  <affected-histogram name="PasswordManager.TimesGeneratedPasswordUsed"/>
+  <affected-histogram name="PasswordManager.TimesPasswordUsed.AutoGenerated"/>
+  <affected-histogram name="PasswordManager.TimesPasswordUsed.UserCreated"/>
+  <affected-histogram name="PasswordManager.TotalAccounts.AutoGenerated"/>
+  <affected-histogram name="PasswordManager.TotalAccounts.UserCreated"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PasswordGenerated" separator=".">
+  <suffix name="UserCreated"/>
+  <suffix name="AutoGenerated"/>
+  <affected-histogram name="PasswordManager.AccountsPerSite"/>
+  <affected-histogram name="PasswordManager.TimesPasswordUsed"/>
+  <affected-histogram name="PasswordManager.TotalAccounts"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PasswordManagerMonitor">
+  <obsolete>
+    Deprecated as of 03/2016.
+  </obsolete>
+  <suffix name="group_1" label="group 1"/>
+  <suffix name="group_2" label="group 2"/>
+  <suffix name="group_3" label="group 3"/>
+  <suffix name="group_4" label="group 4"/>
+  <suffix name="group_5" label="group 5"/>
+  <suffix name="group_6" label="group 6"/>
+  <suffix name="group_7" label="group 7"/>
+  <suffix name="group_8" label="group 8"/>
+  <suffix name="group_9" label="group 9"/>
+  <suffix name="group_10" label="group 10"/>
+  <suffix name="group_11" label="group 11"/>
+  <suffix name="group_12" label="group 12"/>
+  <suffix name="group_13" label="group 13"/>
+  <suffix name="group_14" label="group 14"/>
+  <suffix name="group_15" label="group 15"/>
+  <suffix name="group_16" label="group 16"/>
+  <suffix name="group_17" label="group 17"/>
+  <suffix name="group_18" label="group 18"/>
+  <suffix name="group_19" label="group 19"/>
+  <suffix name="group_20" label="group 20"/>
+  <suffix name="" label=""/>
+  <affected-histogram name="PasswordManager.LinuxBackendStatistics"/>
+  <affected-histogram name="PasswordManager.ProvisionalSaveFailure"/>
+  <affected-histogram
+      name="PasswordManager.SavePasswordPromptDisappearedQuickly"/>
+  <affected-histogram name="PasswordManager.SavePasswordPromptDisplayed"/>
+  <affected-histogram name="PasswordManager.SavePasswordPromptResponse"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PasswordReuseSourceRealm" separator=".">
+  <suffix name="FromHttpRealm"
+      label="The account in question was saved on an HTTP site."/>
+  <suffix name="FromHttpsRealm"
+      label="The account in question was saved on a HTTPS site (including
+             those with certificate issues)."/>
+  <affected-histogram name="PasswordManager.AccountsReusingPassword"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PasswordReuseTargetRealm" separator=".">
+  <suffix name="OnHttpRealmWithSameHost"
+      label="The number of other accounts whose realms have HTTP scheme and
+             the same host as the account in question."/>
+  <suffix name="OnHttpsRealmWithSameHost"
+      label="The number of other accounts whose realms have HTTPS scheme and
+             the same host as the account in question."/>
+  <suffix name="OnHttpRealmWithDifferentHost"
+      label="The number of other accounts whose realms have HTTP scheme and
+             different hosts than the account in question."/>
+  <suffix name="OnHttpsRealmWithDifferentHost"
+      label="The number of other accounts whose realms have HTTPS scheme and
+             different hosts than the account in question."/>
+  <suffix name="OnAnyRealmWithDifferentHost"
+      label="The number of other accounts whose realms have different hosts
+             than the account in question, and their scheme is either HTTP or
+             HTTPS."/>
+  <suffix name="OnPSLMatchingRealm"
+      label="The number of other accounts whose realms are public suffix
+             matches to that of the account in question (the scheme is always
+             the same in these cases)."/>
+  <affected-histogram
+      name="PasswordManager.AccountsReusingPassword.FromHttpRealm"/>
+  <affected-histogram
+      name="PasswordManager.AccountsReusingPassword.FromHttpsRealm"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PasswordScheme" separator=".">
+  <suffix name="Android" label="The password is for an Android app."/>
+  <suffix name="Ftp" label="The scheme of the origin is FTP."/>
+  <suffix name="Http" label="The scheme of the origin is HTTP."/>
+  <suffix name="Https" label="The scheme of the origin is HTTPS."/>
+  <suffix name="Other" label="The scheme of the origin is something else."/>
+  <affected-histogram name="PasswordManager.TotalAccountsHiRes.WithScheme"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PaymentRequestOutcome">
+  <suffix name="Completed" label="The Payment Request was completed"/>
+  <suffix name="UserAborted"
+      label="The Payment Request was aborted by the user"/>
+  <suffix name="OtherAborted"
+      label="The Payment Request was aborted but not but the user"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds_ContactInfo"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds_CreditCards"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSelectionAdds_ShippingAddress"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSelectionChanges_ContactInfo"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSelectionChanges_CreditCards"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSelectionChanges_ShippingAddress"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits_ContactInfo"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits_CreditCards"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSelectionEdits_ShippingAddress"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSuggestionsShown_ContactInfo"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSuggestionsShown_CreditCards"/>
+  <affected-histogram
+      name="PaymentRequest.NumberOfSuggestionsShown_ShippingAddress"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PaymentRequestSection">
+  <suffix name="ContactInfo"
+      label="For the contact info section of a Payment Request"/>
+  <suffix name="CreditCards"
+      label="For the credit card section of a Payment Request"/>
+  <suffix name="ShippingAddress"
+      label="For the shipping address section of a Payment Request"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionAdds"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionChanges"/>
+  <affected-histogram name="PaymentRequest.NumberOfSelectionEdits"/>
+  <affected-histogram name="PaymentRequest.NumberOfSuggestionsShown"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PerformanceMonitor" separator=".">
+  <suffix name="BrowserProcess"/>
+  <suffix name="GPUProcess"/>
+  <suffix name="PluginProcess"/>
+  <suffix name="PPAPIFlashProcess"/>
+  <suffix name="PPAPIProcess"/>
+  <suffix name="RendererProcess"/>
+  <suffix name="RendererExtensionEventProcess"/>
+  <suffix name="RendererExtensionPersistentProcess"/>
+  <suffix name="WorkerProcess"/>
+  <affected-histogram name="PerformanceMonitor.AverageCPU"/>
+  <affected-histogram name="PerformanceMonitor.HighCPU"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PermissionRequestGesture" separator=".">
+  <suffix name="Gesture" label="With user gesture"/>
+  <suffix name="NoGesture" label="Without user gesture"/>
+  <affected-histogram name="Permissions.Prompt.Accepted"/>
+  <affected-histogram name="Permissions.Prompt.Denied"/>
+  <affected-histogram name="Permissions.Prompt.Shown"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PermissionTypes" separator=".">
+  <suffix name="MidiSysEx" label="Midi SysEx permsision actions"/>
+  <suffix name="PushMessaging" label="Push messaging permission actions"/>
+  <suffix name="Notifications" label="Notification permission actions"/>
+  <suffix name="Geolocation" label="Geolocation permission actions"/>
+  <suffix name="ProtectedMedia" label="Protected media permission actions"/>
+  <suffix name="DurableStorage" label="Durable Storage permission actions"/>
+  <suffix name="AudioCapture" label="Microphone permission actions"/>
+  <suffix name="VideoCapture" label="Camera permission actions"/>
+  <suffix name="Flash" label="Flash permission actions"/>
+  <affected-histogram name="ContentSettings.PermissionActions"/>
+  <affected-histogram name="ContentSettings.PermissionActionsInsecureOrigin"/>
+  <affected-histogram name="ContentSettings.PermissionActionsSecureOrigin"/>
+  <affected-histogram name="Permissions.Action"/>
+  <affected-histogram name="Permissions.Action.InsecureOrigin"/>
+  <affected-histogram name="Permissions.Action.SecureOrigin"/>
+  <affected-histogram name="Permissions.Prompt.Accepted.Persisted"/>
+  <affected-histogram name="Permissions.Prompt.Accepted.PriorDismissCount"/>
+  <affected-histogram name="Permissions.Prompt.Accepted.PriorIgnoreCount"/>
+  <affected-histogram name="Permissions.Prompt.Denied.Persisted"/>
+  <affected-histogram name="Permissions.Prompt.Denied.PriorDismissCount"/>
+  <affected-histogram name="Permissions.Prompt.Denied.PriorIgnoreCount"/>
+  <affected-histogram name="Permissions.Prompt.Dismissed.PriorDismissCount"/>
+  <affected-histogram name="Permissions.Prompt.Dismissed.PriorIgnoreCount"/>
+  <affected-histogram name="Permissions.Prompt.Ignored.PriorDismissCount"/>
+  <affected-histogram name="Permissions.Prompt.Ignored.PriorIgnoreCount"/>
+  <affected-histogram name="Permissions.Requested.CrossOrigin"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PhysicalWebDebugActions" separator=".">
+  <suffix name="ChromeStart" label="when Chrome first starts up"/>
+  <suffix name="LaunchFromDiagnostics"
+      label="when the user launches the ListUrlActivity from the Physical Web
+             diagnostics page"/>
+  <suffix name="LaunchFromPreferences"
+      label="when the user launches the ListUrlActivity from the Physical Web
+             preferencs screen"/>
+  <affected-histogram name="PhysicalWeb.State.Bluetooth"/>
+  <affected-histogram name="PhysicalWeb.State.DataConnectionActive"/>
+  <affected-histogram name="PhysicalWeb.State.LocationPermission"/>
+  <affected-histogram name="PhysicalWeb.State.LocationServices"/>
+  <affected-histogram name="PhysicalWeb.State.Preference"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Platform.FirmwareType" separator=".">
+  <suffix name="Main" label="Main processor firmware"/>
+  <suffix name="EC" label="Embedded Controller firmware"/>
+  <suffix name="PD" label="USB Power Delivery controller firmware"/>
+  <affected-histogram name="Platform.BootMode.FirmwareWriteProtect"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PlatformMeminfoPercentage" separator="">
+  <suffix name="infoActive" label="Active memory."/>
+  <suffix name="infoActiveAnon"
+      label="Active anonymous memory (data segments)."/>
+  <suffix name="infoActiveFile"
+      label="Active file-backed memory (executables, ...)."/>
+  <suffix name="infoAnonPages" label="Anonymous memory (executables, ...)."/>
+  <suffix name="infoBuffers" label="Buffer cache (executables, ...)."/>
+  <suffix name="infoCached"
+      label="size of file-backed memory minus swap and buffer cache."/>
+  <suffix name="infoInactive" label="Inactive memory."/>
+  <suffix name="infoInactiveAnon"
+      label="Inactive anonymous memory (data segments)."/>
+  <suffix name="infoInactiveFile" label="Inactive file-backed memory."/>
+  <suffix name="infoMapped" label="Mapped memory."/>
+  <suffix name="infoMemFree" label="Free memory."/>
+  <suffix name="infoSwapUsedPercent" label="Used swap memory."/>
+  <affected-histogram name="Platform.Mem"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PlatformMeminfoSize" separator="">
+  <suffix name="MemFreeDerived" label="Size derived from free+buffers+cached."/>
+  <suffix name="MemTotal" label="Size of total installed memory."/>
+  <suffix name="MemUsedDerived"
+      label="Size of &quot;Total - FreeDerived&quot; memory."/>
+  <suffix name="Shmem" label="Size of shared memory."/>
+  <suffix name="Slab" label="Size of slab memory."/>
+  <suffix name="SwapUsed" label="Size of used swap memory."/>
+  <suffix name="Unevictable" label="Size of unevictable memory."/>
+  <affected-histogram name="Platform.Meminfo"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PluginFlashEngagement" separator=".">
+  <suffix name="ContentSettingAllowed" label="Engagement when Flash allowed."/>
+  <suffix name="ContentSettingBlocked" label="Engagement when Flash blocked."/>
+  <suffix name="NoSetting" label="Engagement when no content setting set."/>
+  <affected-histogram name="Plugin.Flash.Engagement"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PNaClTranslatorTypes" separator=".">
+  <suffix name="" label="All translator types"/>
+  <suffix name="LLC" label="LLC-based translator"/>
+  <suffix name="Subzero" label="Subzero-based translator"/>
+  <affected-histogram name="NaCl.Options.PNaCl.OptLevel"/>
+  <affected-histogram name="NaCl.Perf.PNaClCache.IsHit"/>
+  <affected-histogram name="NaCl.Perf.PNaClLoadTime.CompileKBPerSec"/>
+  <affected-histogram name="NaCl.Perf.PNaClLoadTime.CompileTime"/>
+  <affected-histogram name="NaCl.Perf.PNaClLoadTime.LoadCompiler"/>
+  <affected-histogram
+      name="NaCl.Perf.PNaClLoadTime.PctCompiledWhenFullyDownloaded"/>
+  <affected-histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedKBPerSec"/>
+  <affected-histogram name="NaCl.Perf.PNaClLoadTime.TotalUncachedTime"/>
+  <affected-histogram name="NaCl.Perf.Size.PexeNexeSizePct"/>
+  <affected-histogram name="NaCl.Perf.Size.PNaClTranslatedNexe"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PositionVariants">
+  <suffix name="0_0" label="Only snippets on position 0"/>
+  <suffix name="1_2" label="Only snippets on position 1-2"/>
+  <suffix name="3_4" label="Only snippets on position 3-4"/>
+  <suffix name="5_9" label="Only snippets on position 5-9"/>
+  <affected-histogram name="NewTabPage.Snippets.CardClickedAge"/>
+  <affected-histogram name="NewTabPage.Snippets.CardClickedScore"/>
+  <affected-histogram name="NewTabPage.Snippets.CardClickedScoreNew"/>
+  <affected-histogram name="NewTabPage.Snippets.CardLongPressedAge"/>
+  <affected-histogram name="NewTabPage.Snippets.CardLongPressedScoreNew"/>
+  <affected-histogram name="NewTabPage.Snippets.CardShownAge"/>
+  <affected-histogram name="NewTabPage.Snippets.CardShownScore"/>
+  <affected-histogram name="NewTabPage.Snippets.CardShownScoreNew"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PpapiPluginName">
+  <suffix name="libpepflashplayer.so" label="Flash player on Linux or Cros"/>
+  <suffix name="libwidevinecdmadapter.so"
+      label="Widevine CDM on Linux or Cros"/>
+  <suffix name="pepflashplayer.dll" label="Flash player on Windows"/>
+  <suffix name="PepperFlashPlayer.plugin" label="Flash player on Mac"/>
+  <suffix name="widevinecdmadapter.dll" label="Widevine CDM on Windows"/>
+  <suffix name="widevinecdmadapter.plugin" label="Widevine CDM on Mac"/>
+  <affected-histogram name="Plugin.PpapiBrokerLoadErrorCode"/>
+  <affected-histogram name="Plugin.PpapiBrokerLoadResult"/>
+  <affected-histogram name="Plugin.PpapiBrokerLoadTime"/>
+  <affected-histogram name="Plugin.PpapiPluginLoadErrorCode"/>
+  <affected-histogram name="Plugin.PpapiPluginLoadResult"/>
+  <affected-histogram name="Plugin.PpapiPluginLoadTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PrecacheCellular" separator=".">
+  <suffix name="Cellular"
+      label="covers fetches when connected to cellular networks"/>
+  <affected-histogram name="Precache.DownloadedNonPrecache"/>
+  <affected-histogram name="Precache.Saved"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PreferenceFileNames" separator=".">
+  <suffix name="Local_State" label="Local State file"/>
+  <suffix name="Preferences" label="Preferences file"/>
+  <suffix name="Secure_Preferences" label="Secure Preferences file"/>
+  <affected-histogram name="Settings.JsonDataReadSizeKilobytes"/>
+  <affected-histogram name="Settings.JsonDataSizeKilobytes"/>
+  <affected-histogram name="Settings.JsonDataWriteCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Prefetch">
+  <suffix name="ContentPrefetchPrefetchOff"
+      label="Prefetch is completely disabled."/>
+  <suffix name="ContentPrefetchPrefetchOn"
+      label="prefetch is enabled but prerender is disabled."/>
+  <affected-histogram name="HttpCache.EntryLockWait"/>
+  <affected-histogram name="Net.HttpTimeToFirstByte"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
+  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
+  <affected-histogram name="PLT.PerceivedLoadTime"/>
+  <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Prerender">
+  <obsolete>
+    Deprecated August 2016
+  </obsolete>
+  <suffix name="PrerenderEnabled" label="prerender is enabled."/>
+  <suffix name="PrerenderControl" label="prerender is disabled."/>
+  <suffix name="PrerenderNoUse"
+      label="prerender is enabled, but pages are not swapped in."/>
+  <suffix name="PrerenderMulti"
+      label="prerender is enabled with multiple simultanious prerenders."/>
+  <suffix name="Prerender5minTTL"
+      label="prerender is enabled, and the TTL is extended to 5 minutes."/>
+  <suffix name="PrerenderMatchComplete"
+      label="prerender is enabled, and match complete replacements are used
+             to gather extended statistics."/>
+  <affected-histogram name="HttpCache.EntryLockWait"/>
+  <affected-histogram name="Net.HttpTimeToFirstByte"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish"/>
+  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcher"/>
+  <affected-histogram name="PLT.BeginToFinish_ContentPrefetcherReferrer"/>
+  <affected-histogram name="PLT.BeginToFinishDoc"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcher"/>
+  <affected-histogram name="PLT.BeginToFinishDoc_ContentPrefetcherReferrer"/>
+  <affected-histogram name="PLT.PerceivedLoadTime"/>
+  <affected-histogram name="PLT.PerceivedLoadTime_PrerenderLoad"/>
+  <affected-histogram name="Prerender.FinalStatus"/>
+  <affected-histogram name="Prerender.FinalStatusMatchComplete"/>
+  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent"/>
+  <affected-histogram name="Prerender.PerceivedPLT"/>
+  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
+  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
+  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
+  <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
+  <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
+  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
+  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
+  <affected-histogram name="Prerender.RendererIdleTime"/>
+  <affected-histogram name="Prerender.RendererPerceivedPLT"/>
+  <affected-histogram name="Prerender.RendererPerceivedPLTMatched"/>
+  <affected-histogram name="Prerender.RendererTimeUntilDisplay"/>
+  <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
+  <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PrerenderHoverType" ordering="prefix">
+  <obsolete>
+    deprecated May 10 2012
+  </obsolete>
+  <suffix name="HoverStats_50" label="Hover stats @ threshold 50 ms."/>
+  <suffix name="HoverStats_75" label="Hover stats @ threshold 75 ms."/>
+  <suffix name="HoverStats_100" label="Hover stats @ threshold 100 ms."/>
+  <suffix name="HoverStats_150" label="Hover stats @ threshold 150 ms."/>
+  <suffix name="HoverStats_200" label="Hover stats @ threshold 200 ms."/>
+  <suffix name="HoverStats_250" label="Hover stats @ threshold 250 ms."/>
+  <suffix name="HoverStats_300" label="Hover stats @ threshold 300 ms."/>
+  <suffix name="HoverStats_400" label="Hover stats @ threshold 400 ms."/>
+  <suffix name="HoverStats_500" label="Hover stats @ threshold 500 ms."/>
+  <suffix name="HoverStats_750" label="Hover stats @ threshold 750 ms."/>
+  <suffix name="HoverStats_1000" label="Hover stats @ threshold 1000 ms."/>
+  <suffix name="HoverStats_1500" label="Hover stats @ threshold 1500 ms."/>
+  <suffix name="HoverStats_2000" label="Hover stats @ threshold 2000 ms."/>
+  <suffix name="HoverStats_3000" label="Hover stats @ threshold 3000 ms."/>
+  <suffix name="HoverStats_4000" label="Hover stats @ threshold 4000 ms."/>
+  <suffix name="HoverStats_5000" label="Hover stats @ threshold 5000 ms."/>
+  <affected-histogram name="Prerender.Events"/>
+  <affected-histogram name="Prerender.TimeToClick"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PrerenderModeType">
+  <obsolete>
+    Deprecated August 2016
+  </obsolete>
+  <suffix name="_Disabled" label="PRERENDER_MODE_DISABLED"/>
+  <suffix name="_Enabled" label="PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP"/>
+  <suffix name="_Control" label="PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP"/>
+  <suffix name="_Multi"
+      label="PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP"/>
+  <suffix name="_15MinTTL" label="PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP"/>
+  <suffix name="_NoUse" label="PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP"/>
+  <affected-histogram name="Prerender.OmniboxNavigationsCouldPrerender"/>
+  <affected-histogram name="Prerender.OmniboxNavigationsUsedPrerenderCount"/>
+  <affected-histogram name="Prerender.OmniboxPrerenderCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PrerenderPrefetchAge" separator=".">
+  <suffix name="Cold" label="Prefetch too old to skip revalidation."/>
+  <suffix name="Reference"
+      label="No prefetch. Warning: do not compare with the load times of
+             prefetched pages (bias)."/>
+  <suffix name="Warm" label="Prefetch skips revalidation."/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PrerenderPrefetchMainResourceType" separator=".">
+  <suffix name="Cacheable" label="Main resource cacheable."/>
+  <suffix name="NoStore" label="Main resource no-store."/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Cold"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Reference"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Warm"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="PrerenderSource" ordering="prefix">
+  <suffix name="" label="All prerenders."/>
+  <suffix name="gws" label="GWS triggered prerender."/>
+  <suffix name="externalrequest" label="Externally triggered prerender."/>
+  <suffix name="externalrequestforced"
+      label="Forced prerender regardless of network."/>
+  <suffix name="Instant" label="Instant search prerender."/>
+  <suffix name="omnibox" label="Triggered from the omnibox."/>
+  <suffix name="wash" label="Multiple sources could have triggered."/>
+  <suffix name="web" label="Link triggered prerender."/>
+  <suffix name="webcross"
+      label="Link triggered prerender, rel=prerender, cross domain."/>
+  <suffix name="websame"
+      label="Link triggered prerender, rel=prerender, same domain."/>
+  <suffix name="webnext" label="Link triggered prerender, rel=next."/>
+  <suffix name="offline"
+      label="Prerender triggered for saving a page for offline use."/>
+  <affected-histogram name="Prerender.AbandonTimeUntilUsed"/>
+  <affected-histogram name="Prerender.CookieSendType"/>
+  <affected-histogram name="Prerender.CookieStatus"/>
+  <affected-histogram name="Prerender.Event"/>
+  <affected-histogram name="Prerender.FinalStatus"/>
+  <affected-histogram name="Prerender.FractionPixelsFinalAtSwapin"/>
+  <affected-histogram name="Prerender.LocalPredictorEvent"/>
+  <affected-histogram name="Prerender.LocalPredictorTimeUntilUsed"/>
+  <affected-histogram name="Prerender.NetworkBytesUsed"/>
+  <affected-histogram name="Prerender.NetworkBytesWasted"/>
+  <affected-histogram name="Prerender.NoStatePrefetchAge"/>
+  <affected-histogram name="Prerender.NoStatePrefetchMainResourceRedirects"/>
+  <affected-histogram name="Prerender.NoStatePrefetchResponseTypes"/>
+  <affected-histogram name="Prerender.NoStatePrefetchSubResourceRedirects"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Cold.Cacheable"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Cold.NoStore"/>
+  <affected-histogram
+      name="Prerender.NoStatePrefetchTTFCP.Reference.Cacheable"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Reference.NoStore"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Warm.Cacheable"/>
+  <affected-histogram name="Prerender.NoStatePrefetchTTFCP.Warm.NoStore"/>
+  <affected-histogram name="Prerender.PageVisitedStatus"/>
+  <affected-histogram name="Prerender.PerceivedPLT"/>
+  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMiss"/>
+  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissAnyOnly"/>
+  <affected-histogram name="Prerender.PerceivedPLTFirstAfterMissBoth"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlapping"/>
+  <affected-histogram
+      name="Prerender.PerceivedPLTFirstAfterMissNonOverlappingOnly"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatched"/>
+  <affected-histogram name="Prerender.PerceivedPLTMatchedComplete"/>
+  <affected-histogram name="Prerender.PerceivedPLTWindowed"/>
+  <affected-histogram name="Prerender.PerceivedPLTWindowNotMatched"/>
+  <affected-histogram name="Prerender.PercentLoadDoneAtSwapin"/>
+  <affected-histogram name="Prerender.PrerenderNotSwappedInPLT"/>
+  <affected-histogram name="Prerender.PrerendersPerSessionCount"/>
+  <affected-histogram name="Prerender.SimulatedLocalBrowsingBaselinePLT"/>
+  <affected-histogram name="Prerender.SimulatedLocalBrowsingPLT"/>
+  <affected-histogram name="Prerender.TimeBetweenPrerenderRequests"/>
+  <affected-histogram name="Prerender.TimeSinceLastRecentVisit"/>
+  <affected-histogram name="Prerender.TimeUntilUsed2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ProfileMenuGAIASource" separator=".">
+  <suffix name="NonGAIA" label="Interaction was not initiated from GAIA"/>
+  <suffix name="GAIASignout"
+      label="GAIA-initiated interaction indicating a service type of Signout"/>
+  <suffix name="GAIAIncognito"
+      label="GAIA-initiated interaction indicating a service type of
+             Incognito (used for DesktopMenu)"/>
+  <suffix name="GAIASignoutIncognito"
+      label="GAIA-initiated interaction indicating a service type of Signout
+             and go Incognito (used for AndroidAccountManagementMenu)"/>
+  <suffix name="GAIAAddSession"
+      label="GAIA-initiated interaction indicating a service type of Add a
+             Session"/>
+  <suffix name="GAIAReAuth"
+      label="GAIA-initiated interaction indicating a service type of
+             Reauthenticate this user"/>
+  <suffix name="GAIASignup"
+      label="GAIA-initiated interaction indicating a service type of Add an
+             account"/>
+  <suffix name="GAIADefault"
+      label="GAIA-initiated interaction indicating the default service type"/>
+  <affected-histogram name="Profile.AndroidAccountManagementMenu"/>
+  <affected-histogram name="Profile.DesktopMenu"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ProfileOpenState" separator=".">
+  <suffix name="ToOpenedProfile"
+      label="The profile being switched to was already loaded and had at
+             least one open browser"/>
+  <suffix name="ToUnopenedProfile"
+      label="The profile being switched to had not yet been loaded this
+             Chrome session"/>
+  <suffix name="ToOpenedProfileWithoutBrowser"
+      label="The profile being switched to was already opened and had no
+             active browsers"/>
+  <affected-histogram name="Profile.OpenMethod"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ProfilePictureDownload" separator=".">
+  <suffix name="Default.OOBE" label="default picture, in OOBE"/>
+  <suffix name="Default.LoggedIn" label="default picture, after login"/>
+  <suffix name="Default.Preferences" label="default picture, in Prefs"/>
+  <suffix name="Failure.OOBE" label="download has failed, in OOBE"/>
+  <suffix name="Failure.LoggedIn" label="download has failed, after login"/>
+  <suffix name="Failure.Preferences" label="download has failed, in Prefs"/>
+  <suffix name="Success.OOBE" label="download was successful, in OOBE"/>
+  <suffix name="Success.LoggedIn" label="download was successful, after login"/>
+  <suffix name="Success.Preferences" label="download was successful, in Prefs"/>
+  <affected-histogram name="UserImage.ProfileDownloadTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ProgressiveScan">
+  <suffix name="FullScan" label="Using WPA_supplicant to scan."/>
+  <suffix name="33Percent_4MinMax"
+      label="Progressive scan @ 33%, 4 frequency bins."/>
+  <suffix name="50Percent_4MinMax"
+      label="Progressive scan @ 50%, 4 frequency bins."/>
+  <suffix name="50Percent_8MinMax"
+      label="Progressive scan @ 50%, 8 frequency bins."/>
+  <suffix name="100Percent_8MinMax"
+      label="Progressive scan @ 100%, 8 frequency bins."/>
+  <suffix name="100Percent_1MinSeen_A"
+      label="Progressive scan @ all previously seen frequencies (A)."/>
+  <suffix name="100Percent_1MinSeen_B"
+      label="Progressive scan @ all previously seen frequencies (B)."/>
+  <suffix name="100Percent_1Min_4Max"
+      label="Progressive scan @ 100%, minimum 1/maximum 4 frequencies."/>
+  <affected-histogram name="Network.Shill.TimeToDrop"/>
+  <affected-histogram name="Network.Shill.WiFi.ScanResult"/>
+  <affected-histogram name="Network.Shill.Wifi.TimeToConnect"/>
+  <affected-histogram name="Network.Shill.Wifi.TimeToJoin"/>
+  <affected-histogram name="Network.Shill.Wifi.TimeToScan"/>
+  <affected-histogram name="Network.Shill.Wifi.TimeToScanAndConnect"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ProtectorSettingChange" separator=".">
+  <obsolete>
+    Deprecated 8/2013. No longer tracked.
+  </obsolete>
+  <suffix name="Applied" label="change has been accepted by user"/>
+  <suffix name="Corrupt" label="possibly hijacked, backup invalid"/>
+  <suffix name="Discarded" label="change has been reverted by user"/>
+  <suffix name="Fallback" label="fallback provider used (no backup available)"/>
+  <suffix name="Hijacked" label="hijacked, with a valid backup"/>
+  <suffix name="Missing" label="fallback provider missing, added"/>
+  <suffix name="New" label="(obsolete, was sum of Corrupt+Hijacked)"/>
+  <suffix name="Restored"
+      label="search provider restored by Protector before showing the bubble"/>
+  <suffix name="Timeout" label="change has been ignored by user (timed out)"/>
+  <affected-histogram name="Protector.SearchProvider"/>
+  <affected-histogram name="Protector.StartupSettings"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ProxyConnectionImpact">
+  <suffix name="proxy_connections_16"
+      label="with 16 connections per proxy server"/>
+  <suffix name="proxy_connections_32"
+      label="with 32 connections per proxy server"/>
+  <suffix name="proxy_connections_64"
+      label="with 64 connections per proxy server"/>
+  <suffix name="proxy_connections_8"
+      label="with 8 connections per proxy server"/>
+  <affected-histogram name="Net.HttpProxySocketRequestTime"/>
+  <affected-histogram name="Net.SocksSocketRequestTime"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadReload"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadStaleOk"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="QueryTimeSuffix" separator=".">
+  <suffix name="0" label="N = 0"/>
+  <suffix name="1" label="N = 1"/>
+  <suffix name="2" label="N = 2"/>
+  <suffix name="3" label="N = 3"/>
+  <suffix name="4" label="N = 4"/>
+  <suffix name="5" label="N = 5"/>
+  <affected-histogram name="Omnibox.QueryTime"/>
+  <affected-histogram name="Omnibox.QueryTime2"/>
+  <affected-histogram name="ShortcutsProvider.QueryIndexTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="QuicConnectionType" separator="">
+  <owner>rch@chromium.org</owner>
+  <suffix name="ForHTTP" label="Only insecure HTTP connections are counted.">
+    <obsolete>
+      Deprecated 10/2015.
+    </obsolete>
+  </suffix>
+  <suffix name="ForHTTPS" label="Only secure HTTPS connections are counted."/>
+  <affected-histogram name="Net.QuicSession.ConnectRandomPort"/>
+  <affected-histogram
+      name="Net.QuicSession.ConnectRandomPortRequiringConfirmation"/>
+  <affected-histogram name="Net.QuicSession.ConnectSelectPort">
+    <obsolete>
+      Deprecated 04/2016.
+    </obsolete>
+  </affected-histogram>
+  <affected-histogram name="Net.QuicSession.HandshakeRoundTrips"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="QuicPortSelection" separator="">
+  <owner>rch@chromium.org</owner>
+  <suffix name="SelectPort"
+      label="An effort was mode to (try to) consistently connect using the
+             same source port for the given server IP/port."/>
+  <suffix name="RandomPort"
+      label="The operating system randomly selected a source port for the
+             connection."/>
+  <affected-histogram name="Net.QuicSession.Connect"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="QuicSessionVerifyProofTime" separator=".">
+  <suffix name="" label="Verification time for a server."/>
+  <suffix name="google" label="Verification time for www.google.com server."/>
+  <suffix name="CachedServerConfig"
+      label="Verification time for a server when server config from cache is
+             used."/>
+  <affected-histogram name="Net.QuicSession.VerifyProofTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="RasterBufferProvider" separator=".">
+  <suffix name="Gpu" label="The GpuRasterBufferProvider was in use."/>
+  <suffix name="OneCopy" label="The OneCopyRasterBufferProvider was in use."/>
+  <affected-histogram name="Renderer4.Browser.PartialRasterPercentageSaved"/>
+  <affected-histogram name="Renderer4.Renderer.PartialRasterPercentageSaved"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="RasterTaskType" separator=".">
+  <suffix name="" label="This metric includes both gpu and software raster."/>
+  <suffix name="Gpu" label="This metric is for only gpu raster."/>
+  <suffix name="Software" label="This metric is for only software raster."/>
+  <affected-histogram name="Compositing.Browser.RasterTask.RasterPixelsPerMs"/>
+  <affected-histogram name="Compositing.Browser.RasterTask.RasterUs"/>
+  <affected-histogram name="Compositing.Renderer.RasterTask.RasterPixelsPerMs"/>
+  <affected-histogram name="Compositing.Renderer.RasterTask.RasterUs"/>
+  <affected-histogram name="Renderer4.ImageDecodeTaskDurationUs"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="RemoteProcessWarmStartFast" separator="">
+  <suffix name="" label="Normal start."/>
+  <suffix name="Fast"
+      label="Fast start by skipping normal chrome.dll startup."/>
+  <affected-histogram name="Startup.WarmStartTimeFromRemoteProcessStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="RendererEventLatency" separator=".">
+  <suffix name="Char" label="The Char event occurs on textual keyboard input."/>
+  <suffix name="ContextMenu" label="For ContextMenu event."/>
+  <suffix name="GestureDoubleTap"
+      label="A GestureDoubleTap occurs when the user double taps on a
+             touchscreen."/>
+  <suffix name="GestureFlingCancel"
+      label="A GestureFlingCancel is sent to the renderer to cancel any
+             active flings."/>
+  <suffix name="GestureFlingStart"
+      label="A GestureFlingStart is sent when the user quickly flicks on a
+             touchscreen."/>
+  <suffix name="GestureLongPress"
+      label="A GestureLongPress is sent when the user taps down and holds
+             their finger on a touchscreen."/>
+  <suffix name="GestureLongTap"
+      label="A GestureLongTap is sent when the user taps down on a
+             touchscreen, holds their finger for a while, then releases."/>
+  <suffix name="GesturePinchBegin"
+      label="A GesturePinchBegin is sent when a user starts a pinch zoom
+             motion on a touchscreen."/>
+  <suffix name="GesturePinchEnd"
+      label="A GesturePinchEnd is sent when the user releases their fingers
+             from the touchscreen after performing a pinch zoom motion."/>
+  <suffix name="GesturePinchUpdate"
+      label="GesturePinchUpdate events are sent while the user is performing
+             a pinch zoom motion on a touch screen. GesturePinchUpdate events
+             are sent as the user changes the distance between their fingers."/>
+  <suffix name="GestureScrollBegin"
+      label="A GestureScrollBegin is sent at the beginning of a gesture
+             scroll on a touchscreen."/>
+  <suffix name="GestureScrollEnd"
+      label="A GestureScrollEnd is sent when the user releases their finger
+             after a gesture scroll on a touchscreen."/>
+  <suffix name="GestureScrollUpdate"
+      label="GestureScrollUpdate events are sent as the user drags their
+             finger along the touchscreen during a gesture scroll."/>
+  <suffix name="GestureScrollUpdateWithoutPropagation"
+      label="GestureScrollUpdateWithoutPropagation events are scroll updates
+             that shouldn't bubble, generated by a gesture fling."/>
+  <suffix name="GestureShowPress"
+      label="A GestureShowPress event is sent when the user presses down on
+             the touchscreen but before a GestureTapDown."/>
+  <suffix name="GestureTap"
+      label="A GestureTap is sent when the user presses down and releases on
+             a touchscreen."/>
+  <suffix name="GestureTapUnconfirmed"
+      label="A GestureTapUnconfirmed is sent when the user taps the
+             touchscreen but, due to a delay, the GestureTap isn't sent yet."/>
+  <suffix name="GestureTapCancel"
+      label="A GestureTapCancel is sent to cancel a pending GestureTap event.
+             For example, if the user taps down but drags their finger
+             instead of releasing it."/>
+  <suffix name="GestureTapDown"
+      label="A GestureTapDown is sent when the user presses on the
+             touchscreen in what could potentially be a full GestureTap
+             event."/>
+  <suffix name="GestureTwoFingerTap"
+      label="A GestureTwoFingerTap is sent when the user presses down a
+             releases on a touchscreen with two fingers."/>
+  <suffix name="KeyDown"
+      label="A KeyDown event is sent when a keyboard key is pressed down."/>
+  <suffix name="KeyUp"
+      label="A KeyUp event is sent when a depressed keyboard key is released."/>
+  <suffix name="MouseDown"
+      label="A MouseDown event is sent when the user click down a mouse
+             button."/>
+  <suffix name="MouseEnter"
+      label="A MouseEnter event is sent when the mouse cursor enters the
+             renderer area."/>
+  <suffix name="MouseLeave"
+      label="A MouseLeave event is sent when the mouse cursor leaves the
+             renderer area."/>
+  <suffix name="MouseMove"
+      label="A MouseMove event is sent when the mouse cursor moves within the
+             renderer area."/>
+  <suffix name="MouseUp"
+      label="A MouseUp event is sent when a depressed mouse button is
+             released."/>
+  <suffix name="MouseWheel"
+      label="A MouseWheel event is sent when the user scrolls using the mouse
+             wheel within the renderer area."/>
+  <suffix name="RawKeyDown"
+      label="A RawKeyDown event is a wrapper around a native key event."/>
+  <suffix name="TouchCancel"
+      label="A TouchCancel is used to cancel an existing touch point. For
+             example, if the user drags a finger outside the bounds of the
+             renderer."/>
+  <suffix name="TouchEnd"
+      label="A TouchEnd is send when the user lifts a finger from the
+             touchscreen."/>
+  <suffix name="TouchMove"
+      label="A TouchMove is sent when the user moves a finger along the
+             touchscreen."/>
+  <suffix name="TouchStart"
+      label="A TouchStart is sent when the user first touches a finger to the
+             touchscreen."/>
+  <suffix name="Undefined" label="For unknown or undefined events."/>
+  <affected-histogram name="Event.Latency.Renderer"/>
+  <affected-histogram name="Event.Latency.Renderer2"/>
+  <affected-histogram name="Event.Latency.RendererImpl"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="RequestMediaKeySystemAccessKeySystems" separator=".">
+  <suffix name="ClearKey" label="Requests for the Clear Key key system."/>
+  <suffix name="Unknown"
+      label="Requests for an unknown or unsupported key system."/>
+  <suffix name="Widevine" label="Requests for the Widevine key system."/>
+  <affected-histogram name="Media.EME.RequestMediaKeySystemAccess"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="RequestThrottlerTypes">
+  <suffix name="SuggestionFetcher"
+      label="Fetcher for content suggestions on mobile NTP">
+    <obsolete>
+      Deprecated in 10/2016.
+    </obsolete>
+  </suffix>
+  <suffix name="SuggestionFetcherRareNTPUser"
+      label="Fetcher for content suggestions on mobile NTP - rare NTP users"/>
+  <suffix name="SuggestionFetcherActiveNTPUser"
+      label="Fetcher for content suggestions on mobile NTP - active NTP users"/>
+  <suffix name="SuggestionFetcherActiveSuggestionsConsumer"
+      label="Fetcher for content suggestions on mobile NTP - active
+             suggestions consumers"/>
+  <suffix name="SuggestionThumbnailFetcher"
+      label="Fetcher for article thumbnails on mobile NTP"/>
+  <affected-histogram name="NewTabPage.RequestThrottler.PerDay"/>
+  <affected-histogram name="NewTabPage.RequestThrottler.PerDayInteractive"/>
+  <affected-histogram name="NewTabPage.RequestThrottler.RequestStatus"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourceLoaderSizeSlice" separator=".">
+  <suffix name="LT_2kB" label="Sliced for resources smaller than 2kB."/>
+  <suffix name="LT_32kB"
+      label="Sliced for resources smaller than 32kB and larger than 2kB."/>
+  <suffix name="LT_512kB"
+      label="Sliced for resources smaller than 512kB and larger than 32kB."/>
+  <suffix name="Over_512kB" label="Sliced for resources larger than 512kB."/>
+  <suffix name="InliningApplicable"
+      label="Resources that the chunk inlining is applicable."/>
+  <affected-histogram name="Net.ResourceLoader.ResponseStartToEnd"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourcePrefetchPredictorNetworkTypePrefetch"
+    separator=".">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <suffix name="NotPrefetched"
+      label="Number of non-prefetched pages on each type of network."/>
+  <suffix name="Prefetched"
+      label="Number of prefetched pages on each type of network."/>
+  <affected-histogram name="ResourcePrefetchPredictor.NetworkType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourcePrefetchPredictorPLTNetworkTypes">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <suffix name="2G" label="Page load time in 2G network."/>
+  <suffix name="3G" label="Page load time in 3G network."/>
+  <suffix name="4G" label="Page load time in 4G network."/>
+  <suffix name="Bluetooth" label="Page load time in bluetooth network."/>
+  <suffix name="Cellular" label="Page load time in cellular network."/>
+  <suffix name="Ethernet" label="Page load time in Ethernet."/>
+  <suffix name="None" label="Page load time without network connection."/>
+  <suffix name="Unknown" label="Page load time in unknown type of network."/>
+  <suffix name="WiFi" label="Page load time in WiFi network."/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT"/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT.NotPrefetched"/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched"/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched.Host"/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched.Url"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourcePrefetchPredictorPLTPrefetch" separator=".">
+  <suffix name="NotPrefetched"
+      label="Page load time for non-prefetched pages."/>
+  <suffix name="Prefetched" label="Page load time for prefetched pages."/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourcePrefetchPredictorPLTPrefetchType"
+    separator=".">
+  <suffix name="Host"
+      label="Page load time for prefetched pages based on main frame host."/>
+  <suffix name="Url"
+      label="Page load time for prefetched pages based on main frame URL."/>
+  <affected-histogram name="ResourcePrefetchPredictor.PLT.Prefetched"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourcePrefetchPredictorPredictedStatsVariedMax">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <suffix name="25"
+      label="Covers statistics when the maximum subresources that can be
+             prefetched is set to 25."/>
+  <suffix name="50"
+      label="Covers statistics when the maximum subresources that can be
+             prefetched is set to 50."/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchCount"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache_Count"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache_PercentOfTotalPrefetched"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork_Count"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork_PercentOfTotalPrefetched"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses_Count"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses_PercentOfTotalPrefetched"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchCount"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache_Count"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache_PercentOfTotalPrefetched"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork_Count"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork_PercentOfTotalPrefetched"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetworkPercentOfTotalFromNetwork"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses_Count"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses_PercentOfTotalPrefetched"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourcePrefetchPredictorPredictedStatTypes">
+  <obsolete>
+    Deprecated September 2016. No longer recorded.
+  </obsolete>
+  <suffix name="Count" label="Predicted accuracy stats as the raw numbers."/>
+  <suffix name="PercentOfTotalPrefetched"
+      label="Predicted accuracy stats as percent of total resources
+             prefetched."/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromCache"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchFromNetwork"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Host.PredictedPrefetchMisses"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromCache"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchFromNetwork"/>
+  <affected-histogram
+      name="ResourcePrefetchPredictor.Url.PredictedPrefetchMisses"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourceSchedulerClientBreakDown">
+  <obsolete>
+    Deprecated 1/2016
+  </obsolete>
+  <suffix name="1Client" label="One Client in the ResourceScheduler."/>
+  <suffix name="Max5Clients"
+      label="Two to five Clients in the ResourceScheduler."/>
+  <suffix name="Max15Clients"
+      label="Six to fifteen Clients in the ResourceScheduler."/>
+  <suffix name="Max30Clients"
+      label="Sixteen to thirty Clients in the ResourceScheduler."/>
+  <suffix name="Over30Clients"
+      label="Over thirty Clients in the ResourceScheduler."/>
+  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Active"/>
+  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Background"/>
+  <affected-histogram name="ResourceScheduler.ClientLoadedTime.Other"/>
+  <affected-histogram
+      name="ResourceScheduler.ClientLoadedTime.Other.SwitchedToActive"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ResourceType" separator=".">
+  <suffix name="MainResource"/>
+  <suffix name="Image"/>
+  <suffix name="CSSStyleSheet"/>
+  <suffix name="Script"/>
+  <suffix name="Font"/>
+  <suffix name="Raw"/>
+  <suffix name="SVGDocument"/>
+  <suffix name="XSLStyleSheet"/>
+  <suffix name="LinkPrefetch"/>
+  <suffix name="LinkSubresource"/>
+  <suffix name="TextTrack"/>
+  <suffix name="ImportResource"/>
+  <suffix name="Media"/>
+  <suffix name="Manifest"/>
+  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy"/>
+  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Dead"/>
+  <affected-histogram name="Blink.MemoryCache.RevalidationPolicy.Preload"/>
+  <affected-histogram name="PreloadScanner.Counts"/>
+  <affected-histogram name="PreloadScanner.Counts.Miss"/>
+  <affected-histogram name="PreloadScanner.Counts2"/>
+  <affected-histogram name="PreloadScanner.Counts2.Miss"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SafeBrowsing.V4Store.Metrics" separator=".">
+  <suffix name="AnyCertCsdDownloadWhitelist"/>
+  <suffix name="AnyIpMalware"/>
+  <suffix name="AnyUrlCsdDownloadWhitelist"/>
+  <suffix name="AnyUrlCsdWhitelist"/>
+  <suffix name="ChromeExtMalware"/>
+  <suffix name="ChromeFilenameClientIncident"/>
+  <suffix name="ChromeUrlClientIncident"/>
+  <suffix name="UrlMalware"/>
+  <suffix name="UrlMalBin"/>
+  <suffix name="UrlSoceng"/>
+  <suffix name="UrlUws"/>
+  <affected-histogram name="SafeBrowsing.V4Database.Size"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Result"/>
+  <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.ApplyUpdate.Time"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Result"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessFullUpdate.DecodeAdditions.Time"/>
+  <affected-histogram name="SafeBrowsing.V4ProcessFullUpdate.MergeUpdate.Time"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Result"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.ApplyUpdate.Time"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Result"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeAdditions.Time"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Result"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.DecodeRemovals.Time"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ProcessPartialUpdate.MergeUpdate.Time"/>
+  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Result"/>
+  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.ApplyUpdate.Time"/>
+  <affected-histogram
+      name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Result"/>
+  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.DecodeAdditions.Time"/>
+  <affected-histogram name="SafeBrowsing.V4ReadFromDisk.MergeUpdate.Time"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SafeBrowsingLists" separator=".">
+  <suffix name="Browse" label="Browse"/>
+  <suffix name="Download" label="Download"/>
+  <suffix name="CsdWhitelist" label="CsdWhitelist"/>
+  <suffix name="DownloadWhitelist" label="DownloadWhitelist"/>
+  <suffix name="InclusionWhitelist" label="InclusionWhitelist"/>
+  <suffix name="ExtensionBlacklist" label="ExtensionBlacklist"/>
+  <suffix name="SideEffectFreeWhitelist" label="SideEffectFreeWhitelist">
+    <obsolete>
+      Deprecated 4/2015.
+    </obsolete>
+  </suffix>
+  <suffix name="IPBlacklist" label="IPBlacklist"/>
+  <suffix name="UnwantedSoftware" label="UnwantedSoftware"/>
+  <suffix name="ResourceBlacklist" label="ResourceBlacklist"/>
+  <affected-histogram name="SB2.DatabaseSizeKilobytes"/>
+  <affected-histogram name="SB2.PrefixSetSizeKilobytes"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SafeBrowsingScoutGroupValues" separator=".">
+  <suffix name="NoScoutGroup"
+      label="User sees the legacy Extended Reporting opt-in"/>
+  <suffix name="ScoutGroup"
+      label="User sees the new Extended Reporting opt-in"/>
+  <affected-histogram name="SafeBrowsing.Pref.Scout"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SafeBrowsingScoutPrefValues" separator=".">
+  <suffix name="SBER1Pref" label="Value of the legacy Extended Reporting pref"/>
+  <suffix name="SBER2Pref" label="Value of the new Extended Reporting pref"/>
+  <affected-histogram name="SafeBrowsing.Pref.Scout.NoScoutGroup"/>
+  <affected-histogram name="SafeBrowsing.Pref.Scout.ScoutGroup"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SameVersionStartupCounts" separator=".">
+  <suffix name="1" label="1st startup with same version"/>
+  <suffix name="2" label="2nd startup with same version"/>
+  <suffix name="3" label="3rd startup with same version"/>
+  <suffix name="4" label="4th startup with same version"/>
+  <suffix name="5" label="5th startup with same version"/>
+  <suffix name="6" label="6th startup with same version"/>
+  <suffix name="7" label="7th startup with same version"/>
+  <suffix name="8" label="8th startup with same version"/>
+  <suffix name="9" label="9th startup with same version"/>
+  <suffix name="Over" label="&gt; 9th startup with same version"/>
+  <affected-histogram name="Startup.BrowserMainToRendererMain"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartHardFaultCount"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2"/>
+  <affected-histogram name="Startup.BrowserOpenTabs"/>
+  <affected-histogram name="Startup.BrowserWindowDisplay"/>
+  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad2"/>
+  <affected-histogram name="Startup.FirstWebContents.MainNavigationFinished"/>
+  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
+  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint2"/>
+  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain"/>
+  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain2"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain2"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain2"/>
+  <affected-histogram name="Startup.SystemUptime"/>
+  <affected-histogram name="Startup.Temperature"/>
+  <affected-histogram name="Startup.TimeSinceLastStartup"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SB2ResourceTypes" separator=".">
+  <suffix name="Checked"
+      label="Resources that were checked. Logged before the resource starts
+             loading and again for each redirect."/>
+  <suffix name="Safe"
+      label="Resources that were checked and deemed safe. Logged when the URL
+             check is completed.">
+    <obsolete>
+      Deprecated in 9/2016.
+    </obsolete>
+  </suffix>
+  <suffix name="Skipped"
+      label="Resources that were not checked because they are not active-ish
+             content types. Only used on mobile. Logged before the resource
+             request starts."/>
+  <suffix name="Unsafe"
+      label="Resources that were checked and classified as unsafe. Logged
+             when the URL check is completed."/>
+  <suffix name="UnsafePrefetchCanceled"
+      label="Pre-fetched resources that were checked and classified as
+             unsafe. Logged as the request is canceled."/>
+  <affected-histogram name="SB2.ResourceTypes"/>
+  <affected-histogram name="SB2.ResourceTypes2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SBInterstitial">
+  <obsolete>
+    deprecated November 10 2012 crrev.com/167056
+  </obsolete>
+  <suffix name="V1" label="version 1 interstitial"/>
+  <suffix name="V2" label="version 2 interstitial"/>
+  <affected-histogram name="SB2.InterstitialAction"/>
+  <affected-histogram name="SB2.MalwareInterstitialTimeClosed"/>
+  <affected-histogram name="SB2.MalwareInterstitialTimeDiagnostic"/>
+  <affected-histogram name="SB2.MalwareInterstitialTimeLearnMore"/>
+  <affected-histogram name="SB2.MalwareInterstitialTimePrivacyPolicy"/>
+  <affected-histogram name="SB2.MalwareInterstitialTimeProceed"/>
+  <affected-histogram name="SB2.MalwareInterstitialTimeTakeMeBack"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ScreenshareLayerStats" separator=".">
+  <suffix name="FrameRate"
+      label="Frames per second sent, in fps. The value is reported when a
+             stream is removed and is calculated as the total number of
+             frames in this layer, divided by the duration of the call."/>
+  <suffix name="Qp"
+      label="Average quantizer (qp) of frames sent. The value is reported
+             when a stream is removed and is calculated, for this layer, as
+             the sum of all qp values divided the number of frames."/>
+  <suffix name="TargetBitrate"
+      label="Average target bitrate in kbps. The value is reported when a
+             stream is removed and is calculated as the sum of all target
+             bitrates for this layer (sampled after frame has been encoded)
+             divided by the total number of frames for this layer."/>
+  <affected-histogram name="WebRTC.Video.Screenshare.Layer0"/>
+  <affected-histogram name="WebRTC.Video.Screenshare.Layer1"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ScrollUpdateHandledThread">
+  <suffix name="Main" label="ScrollUpdate handled on main thread"/>
+  <suffix name="Impl" label="ScrollUpdate handled on impl thread"/>
+  <affected-histogram name="Event.Latency.ScrollUpdate.HandledToRendererSwap"/>
+  <affected-histogram
+      name="Event.Latency.ScrollUpdate.Touch.HandledToRendererSwap2"/>
+  <affected-histogram name="Event.Latency.ScrollUpdate.Touch.TimeToHandled2"/>
+  <affected-histogram name="Event.Latency.ScrollUpdate.TouchToHandled"/>
+  <affected-histogram
+      name="Event.Latency.ScrollUpdate.Wheel.HandledToRendererSwap2"/>
+  <affected-histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToHandled2"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SecurityInterstitialSBType" separator="."
+    ordering="prefix">
+  <suffix name="harmful"/>
+  <suffix name="harmful_subresource"/>
+  <suffix name="malware"/>
+  <suffix name="malware_subresource"/>
+  <suffix name="phishing"/>
+  <suffix name="phishing_subresource"/>
+  <suffix name="social_engineering_ads"/>
+  <suffix name="social_engineering_ads_subresource"/>
+  <suffix name="social_engineering_landing"/>
+  <suffix name="social_engineering_landing_subresource"/>
+  <affected-histogram name="interstitial.decision"/>
+  <affected-histogram name="interstitial.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.interaction"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SecurityInterstitialSBWithSourceType" separator=".">
+  <suffix name="from_data_saver"
+      label="Interstitial for a resource classified as unsafe by the Data
+             Saver service."/>
+  <suffix name="from_device"
+      label="Interstitial for a resource classified as unsafe by the Safe
+             Browsing database via either
+             {Local,Remote}SafeBrowsingDatabaseManager."/>
+  <suffix name="from_device_v4"
+      label="Interstitial for a resource classified as unsafe by the Safe
+             Browsing database version 4 via either
+             {Local,Remote}SafeBrowsingDatabaseManager."/>
+  <suffix name="from_client_side_detection"
+      label="Interstitial for a resource classified as unsafe by the client
+             side detection."/>
+  <affected-histogram name="interstitial.harmful.decision"/>
+  <affected-histogram name="interstitial.harmful.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.harmful.interaction"/>
+  <affected-histogram name="interstitial.harmful_subresource.decision"/>
+  <affected-histogram
+      name="interstitial.harmful_subresource.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.harmful_subresource.interaction"/>
+  <affected-histogram name="interstitial.malware.decision"/>
+  <affected-histogram name="interstitial.malware.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.malware.interaction"/>
+  <affected-histogram name="interstitial.malware_subresource.decision"/>
+  <affected-histogram
+      name="interstitial.malware_subresource.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.malware_subresource.interaction"/>
+  <affected-histogram name="interstitial.phishing.decision"/>
+  <affected-histogram name="interstitial.phishing.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.phishing.interaction"/>
+  <affected-histogram name="interstitial.phishing_subresource.decision"/>
+  <affected-histogram
+      name="interstitial.phishing_subresource.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.phishing_subresource.interaction"/>
+  <affected-histogram name="interstitial.social_engineering_ads.decision"/>
+  <affected-histogram
+      name="interstitial.social_engineering_ads.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.social_engineering_ads.interaction"/>
+  <affected-histogram
+      name="interstitial.social_engineering_ads_subresource.decision"/>
+  <affected-histogram
+      name="interstitial.social_engineering_ads_subresource.decision.repeat_visit"/>
+  <affected-histogram
+      name="interstitial.social_engineering_ads_subresource.interaction"/>
+  <affected-histogram name="interstitial.social_engineering_landing.decision"/>
+  <affected-histogram
+      name="interstitial.social_engineering_landing.decision.repeat_visit"/>
+  <affected-histogram
+      name="interstitial.social_engineering_landing.interaction"/>
+  <affected-histogram
+      name="interstitial.social_engineering_landing_subresource.decision"/>
+  <affected-histogram
+      name="interstitial.social_engineering_landing_subresource.decision.repeat_visit"/>
+  <affected-histogram
+      name="interstitial.social_engineering_landing_subresource.interaction"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SecurityInterstitialSSLType" separator="."
+    ordering="prefix">
+  <suffix name="bad_clock"/>
+  <suffix name="ssl_nonoverridable"/>
+  <suffix name="ssl_overridable"/>
+  <affected-histogram name="interstitial.decision"/>
+  <affected-histogram name="interstitial.decision.repeat_visit"/>
+  <affected-histogram name="interstitial.interaction"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.EventType">
+  <suffix name="ACTIVATE" label="ACTIVATE"/>
+  <suffix name="INSTALL" label="INSTALL"/>
+  <suffix name="SYNC" label="SYNC"/>
+  <suffix name="NOTIFICATION_CLICK" label="NOTIFICATION_CLICK"/>
+  <suffix name="PUSH" label="PUSH"/>
+  <suffix name="GEOFENCING" label="GEOFENCING">
+    <obsolete>
+      Deprecated as of 5/2016 because geofencing got removed.
+    </obsolete>
+  </suffix>
+  <suffix name="MESSAGE" label="MESSAGE"/>
+  <suffix name="NOTIFICATION_CLOSE" label="NOTIFICATION_CLOSE"/>
+  <suffix name="FETCH_MAIN_FRAME" label="FETCH_MAIN_FRAME"/>
+  <suffix name="FETCH_SUB_FRAME" label="FETCH_SUB_FRAME"/>
+  <suffix name="FETCH_SHARED_WORKER" label="FETCH_SHARED_WORKER"/>
+  <suffix name="FETCH_SUB_RESOURCE" label="FETCH_SUB_RESOURCE"/>
+  <suffix name="UNKNOWN" label="UNKNOWN"/>
+  <suffix name="FOREIGN_FETCH" label="FOREIGN_FETCH"/>
+  <suffix name="NAVIGATION_HINT_LINK_MOUSE_DOWN"
+      label="NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
+  <suffix name="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"
+      label="NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
+  <suffix name="NAVIGATION_HINT_LINK_TAP_DOWN"
+      label="NAVIGATION_HINT_LINK_TAP_DOWN"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay"/>
+  <affected-histogram name="ServiceWorker.StartWorker.StatusByPurpose"/>
+  <affected-histogram name="ServiceWorker.StartWorker.Time_DuringStartup"/>
+  <affected-histogram name="ServiceWorker.StartWorker.Time_ExistingProcess"/>
+  <affected-histogram name="ServiceWorker.StartWorker.Time_NewProcess"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.FailureStreak">
+  <suffix name="1" label="Failed one time."/>
+  <suffix name="2" label="Failed two times."/>
+  <suffix name="3" label="Failed three times."/>
+  <affected-histogram name="ServiceWorker.StartWorker.AfterFailureStreak"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.NavigationHint" separator=".">
+  <suffix name="LINK_MOUSE_DOWN" label="LINK_MOUSE_DOWN"/>
+  <suffix name="LINK_TAP_UNCONFIRMED" label="LINK_TAP_UNCONFIRMED"/>
+  <suffix name="LINK_TAP_DOWN" label="LINK_TAP_DOWN"/>
+  <affected-histogram name="ServiceWorker.NavigationHintPrecision"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.NavigationHintLatency">
+  <suffix name="IsRunningNavigationHintTask"
+      label="Starting a service worker for a navigation hint."/>
+  <affected-histogram name="Event.Latency.TouchToFirstScrollUpdateSwapBegin"/>
+  <affected-histogram name="Event.Latency.TouchToScrollUpdateSwapBegin"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.ShutdownStatus">
+  <suffix name="InShutdown" label="Browser shutdown started."/>
+  <suffix name="NotInShutdown" label="Browser shutdown has not started."/>
+  <affected-histogram name="ServiceWorker.ActivateEventStatus"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.StartSituation">
+  <suffix name="DuringStartup"
+      label="The worker started up during browser startup."/>
+  <suffix name="NewProcess"
+      label="A new process was created for the worker (or is asyncly being
+             created, depending on the histogram)."/>
+  <suffix name="ExistingProcess"
+      label="An existing process was used for the worker."/>
+  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToEvaluateScript"/>
+  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.HttpCache"/>
+  <affected-histogram
+      name="EmbeddedWorkerInstance.Start.TimeToLoad.InstalledScript"/>
+  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToLoad.Network"/>
+  <affected-histogram
+      name="EmbeddedWorkerInstance.Start.TimeToSendStartWorker"/>
+  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToStartThread"/>
+  <affected-histogram name="EmbeddedWorkerInstance.Start.TimeToURLJob"/>
+  <affected-histogram name="ServiceWorker.StartWorker.Time"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorker.WorkerPreparationMode">
+  <suffix name="StartWorkerDuringStartup"
+      label="Started a worker during browser startup."/>
+  <suffix name="StartWorkerNewProcess"
+      label="Started a worker in a new process."/>
+  <suffix name="StartWorkerExistingProcess"
+      label="Started a worker in an existing process."/>
+  <suffix name="StartingWorker"
+      label="The activated worker was already starting up."/>
+  <suffix name="RunningWorker"
+      label="The activated worker was already running."/>
+  <suffix name="StoppingWorker" label="The activated worker was stopping."/>
+  <affected-histogram
+      name="ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorkerCache.Cache" separator=".">
+  <suffix name="Batch"
+      label="The time to perform the 'batch' operation on a ServiceWorker
+             Cache, which batches other basic operations."/>
+  <suffix name="Keys"
+      label="The time to perform the 'keys' operation on a ServiceWorker
+             Cache, which returns all of the keys in the cache."/>
+  <suffix name="Match"
+      label="The time to perform the 'match' operation on a ServiceWorker
+             Cache, which does a lookup."/>
+  <suffix name="MatchAll"
+      label="The time to perform the 'matchAll' operation on a ServiceWorker
+             Cache, which does a mass cache lookup."/>
+  <affected-histogram name="ServiceWorkerCache.Cache"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorkerCache.CacheStorage" separator=".">
+  <suffix name="Delete"
+      label="The time to perform the 'delete' operation on a ServiceWorker
+             CacheStorage, which deletes a cache."/>
+  <suffix name="Has"
+      label="The time to perform the 'has' operation on a ServiceWorker
+             CacheStorage, which returns if the cache exists."/>
+  <suffix name="Keys"
+      label="The time to perform the 'keys' operation on a ServiceWorker
+             CacheStorage, which returns all of the cache names."/>
+  <suffix name="Match"
+      label="The time to perform the 'match' operation on a ServiceWorker
+             CacheStorage, which does a shortcut cache lookup."/>
+  <suffix name="Open"
+      label="The time to perform the 'open' operation on a ServiceWorker
+             CacheStorage, which gets or creates a cache."/>
+  <affected-histogram name="ServiceWorkerCache.CacheStorage"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorkerScheduler" separator="."
+    ordering="prefix">
+  <suffix name="CacheStorage" label="Collected from a CacheStorage instance"/>
+  <suffix name="Cache" label="Collected from a CacheStorageCache instance"/>
+  <suffix name="BackgroundSyncManager"
+      label="Collected from a BackgroundSyncManager instance"/>
+  <affected-histogram name="ServiceWorkerCache.Scheduler.IsOperationSlow"/>
+  <affected-histogram name="ServiceWorkerCache.Scheduler.OperationDuration"/>
+  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueDuration"/>
+  <affected-histogram name="ServiceWorkerCache.Scheduler.QueueLength"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ServiceWorkerSpecialAppsForEventDispatchingDelay"
+    separator=".">
+  <suffix name="docs" label="Custom histogram for Google Docs and Drive"/>
+  <suffix name="gmail" label="Custom histogram for GMail"/>
+  <suffix name="inbox" label="Custom histogram for Inbox"/>
+  <suffix name="ntp" label="Custom histogram for New Tab Page"/>
+  <suffix name="plus" label="Custom histogram for Google+"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_ACTIVATE"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_FETCH_MAIN_FRAME"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_FETCH_SHARED_WORKER"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_FETCH_SUB_FRAME"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_FETCH_SUB_RESOURCE"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_FOREIGN_FETCH"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_GEOFENCING"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_INSTALL"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_MESSAGE"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_MOUSE_DOWN"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_TAP_DOWN"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_NAVIGATION_HINT_LINK_TAP_UNCONFIRMED"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_NOTIFICATION_CLICK"/>
+  <affected-histogram
+      name="ServiceWorker.EventDispatchingDelay_NOTIFICATION_CLOSE"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_PUSH"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_SYNC"/>
+  <affected-histogram name="ServiceWorker.EventDispatchingDelay_UNKNOWN"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SessionRestoreTabCountMemoryPressure">
+  <suffix name="MemoryPressure"
+      label="Total tabs involved in session restore that encountered memory
+             pressure."/>
+  <suffix name="MemoryPressure_Loaded"
+      label="Tabs fully loaded before memory pressure."/>
+  <suffix name="MemoryPressure_LoadStarted"
+      label="Tabs started to load before memory pressure."/>
+  <suffix name="MemoryPressure_Deferred"
+      label="Tabs deferred by memory pressure."/>
+  <suffix name="NoMemoryPressure"
+      label="Total tabs involved in a session restore that did not encounter
+             memory pressure."/>
+  <suffix name="NoMemoryPressure_Loaded"
+      label="Tabs fully loaded in a session restore that did not encounter
+             memory pressure."/>
+  <suffix name="NoMemoryPressure_LoadStarted"
+      label="Tabs started to load in a session restore that did not encounter
+             memory pressure."/>
+  <affected-histogram name="SessionRestore.TabCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SessionRestoreTabCounts">
+  <suffix name="1" label="1 tab present"/>
+  <suffix name="2" label="2 tabs present"/>
+  <suffix name="3" label="3 tabs present"/>
+  <suffix name="4" label="4 tabs present"/>
+  <suffix name="5" label="5 tabs present"/>
+  <suffix name="6" label="6 tabs present"/>
+  <suffix name="7" label="7 tabs present"/>
+  <suffix name="8" label="8 tabs present"/>
+  <suffix name="9" label="9 tabs present"/>
+  <suffix name="10" label="10 tabs present"/>
+  <suffix name="11" label="11 tab present"/>
+  <suffix name="12" label="12 tabs present"/>
+  <suffix name="13" label="13 tabs present"/>
+  <suffix name="14" label="14 tabs present"/>
+  <suffix name="15" label="15 tabs present"/>
+  <suffix name="16" label="16 tabs present"/>
+  <suffix name="17" label="17 tabs present"/>
+  <suffix name="18" label="18 tabs present"/>
+  <suffix name="19" label="19 tabs present"/>
+  <suffix name="20" label="20 tabs present"/>
+  <affected-histogram name="SessionRestore.AllTabsLoaded"/>
+  <affected-histogram name="SessionRestore.FirstTabPainted"/>
+  <affected-histogram name="SessionRestore.ForegroundTabFirstLoaded"/>
+  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint"/>
+  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint2"/>
+  <affected-histogram name="SessionRestore.ForegroundTabFirstPaint3"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SetupInstallTimes" separator=".">
+  <suffix name="background" label="Background; lowered priority."/>
+  <affected-histogram name="Setup.Install.ApplyArchivePatchTime"/>
+  <affected-histogram name="Setup.Install.HasArchivePatch"/>
+  <affected-histogram name="Setup.Install.UncompressArchivePatchTime"/>
+  <affected-histogram name="Setup.Install.UncompressFullArchiveTime"/>
+  <affected-histogram name="Setup.Install.UnpackFullArchiveTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ShillWiFiRememberedNetworkSecurityMode" separator=".">
+  <suffix name="802_1x" label="Network is secured with 802.1x"/>
+  <suffix name="none" label="Network is not secured"/>
+  <suffix name="psk" label="Network is security with WPA or WPA-2 (aka RSN)"/>
+  <suffix name="wep" label="Network employs WEP (Wired Equivalent Privacy)"/>
+  <affected-histogram name="Network.Shill.WiFi.RememberedSystemNetworkCount"/>
+  <affected-histogram name="Network.Shill.WiFi.RememberedUserNetworkCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ShowAppListWarmStartFast" separator="">
+  <suffix name="" label="Normal start."/>
+  <suffix name="Fast"
+      label="Fast start by skipping normal chrome.dll startup."/>
+  <affected-histogram name="Startup.ShowAppListWarmStart"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SideloadWipeout">
+  <suffix name="Enabled" label="Sideload Wipeout Active."/>
+  <suffix name="Disabled" label="Control group."/>
+  <affected-histogram name="DisabledExtension.ExtensionWipedStatus"/>
+  <affected-histogram name="DisabledExtension.SideloadWipeoutCount"/>
+  <affected-histogram name="DisabledExtension.SideloadWipeoutNeeded"/>
+  <affected-histogram name="DisabledExtension.UserSelection"/>
+  <affected-histogram name="Extensions.ExternalExtensionEvent"/>
+  <affected-histogram name="Extensions.InstallSource"/>
+  <affected-histogram name="Extensions.UpdateSource"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Signin.Actions" separator=".">
+  <suffix name="AllAccessPointActions"/>
+  <suffix name="AndroidAccountConsistencyFirstRunActions"
+      label="Signin Flow shown on android after Account Consistency flag was
+             enabled."/>
+  <affected-histogram name="Signin"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Signin.ObsoleteActions" separator=".">
+  <obsolete>
+    Deprecated as of 12/2014.
+  </obsolete>
+  <suffix name="AppLauncherActions"/>
+  <suffix name="ExtensionInstallBubbleActions"/>
+  <suffix name="MenuActions"/>
+  <suffix name="NTPLinkActions"/>
+  <suffix name="OneClickActions"/>
+  <suffix name="SettingsActions"/>
+  <suffix name="StartPageActions"/>
+  <suffix name="UnknownActions"/>
+  <affected-histogram name="Signin"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Signin.Reconciler" separator=".">
+  <suffix name="FirstRun"
+      label="First execution of the reconciler after the profile was loaded
+             or the new_profile_management flag was toggled."/>
+  <suffix name="SubsequentRun"
+      label="Execution of the reconciler triggered by some other change of
+             state."/>
+  <affected-histogram name="Signin.Reconciler.AddedToChrome"/>
+  <affected-histogram name="Signin.Reconciler.AddedToCookieJar"/>
+  <affected-histogram name="Signin.Reconciler.DifferentPrimaryAccounts"/>
+  <affected-histogram name="Signin.Reconciler.RemovedFromCookieJar"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Signin.Reconciler.Duration" separator=".">
+  <suffix name="Success" label="Successful execution of reconciler"/>
+  <suffix name="Failure" label="Failed execution of reconciler"/>
+  <affected-histogram name="Signin.Reconciler.Duration"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SimpleCacheWithOrWithoutIndex">
+  <suffix name="WithIndex" label="The Simple Cache index was loaded."/>
+  <suffix name="WithoutIndex"
+      label="The Simple Cache index was not yet loaded."/>
+  <affected-histogram name="SimpleCache.SyncCreatePlatformFileError"/>
+  <affected-histogram name="SimpleCache.SyncCreateResult"/>
+  <affected-histogram name="SimpleCache.SyncOpenPlatformFileError"/>
+  <affected-histogram name="SimpleCache.SyncOpenResult"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SkiaDrawScaleFactorFilterQuality" separator=".">
+  <suffix name="AnyFilterQuality" label="Any filter quality was used."/>
+  <suffix name="HighFilterQuality" label="High filter quality was used."/>
+  <suffix name="LowFilterQuality" label="Low filter quality was used."/>
+  <suffix name="MediumFilterQuality" label="Medium filter quality was used."/>
+  <suffix name="NoneFilterQuality" label="None filter quality was used."/>
+  <affected-histogram name="Skia.DrawScaleFactor"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SocketOperation" separator=".">
+  <suffix name="Connect"/>
+  <suffix name="Read"/>
+  <suffix name="Write"/>
+  <affected-histogram name="Net.SSLProtocolErrorCipher"/>
+  <affected-histogram name="Net.SSLProtocolErrorReason"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SocketType">
+  <obsolete>
+    Deprecated as of 03/2015.
+  </obsolete>
+  <suffix name="HTTPProxy" label="HTTP proxy socket"/>
+  <suffix name="SOCK" label="SOCKS socket"/>
+  <suffix name="SSL" label="(Obsolete, SSL socket)"/>
+  <suffix name="SSL2" label="SSL2 socket"/>
+  <suffix name="SSLForProxies"
+      label="SSLClientSocket wrapping the TCPClient socket eventually used
+             for connection to a proxy"/>
+  <suffix name="SSLforHTTPSProxy"
+      label="SSLClientSocket wrapping the TCPClient socket eventually used
+             for connection to an HTTPS proxy"/>
+  <suffix name="TCP" label="plain, no proxy, no SSL socket"/>
+  <suffix name="TCPforHTTPProxy"
+      label="TCPClientSocket eventually used for connection to an HTTP proxy"/>
+  <suffix name="TCPforHTTPSProxy"
+      label="TCPClientSocket eventually used for connection to an HTTPS proxy"/>
+  <suffix name="TCPforSOCKS"
+      label="TCPClientSocket eventually used for connection to a SOCKS proxy"/>
+  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_ReusedSocket"/>
+  <affected-histogram name="Net.SocketIdleTimeBeforeNextUse_UnusedSocket"/>
+  <affected-histogram name="Net.SocketInitErrorCodes"/>
+  <affected-histogram name="Net.SocketRequestTime"/>
+  <affected-histogram name="Net.SocketType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SoftwareReporterEngine">
+  <suffix name="Original"/>
+  <suffix name="Experimental"/>
+  <affected-histogram name="SoftwareReporter.FoundUwSReadError"/>
+  <affected-histogram name="SoftwareReporter.MajorVersion"/>
+  <affected-histogram name="SoftwareReporter.MemoryUsed"/>
+  <affected-histogram name="SoftwareReporter.MinorVersion"/>
+  <affected-histogram name="SoftwareReporter.RunningTime"/>
+  <affected-histogram name="SoftwareReporter.RunningTimeAccordingToChrome"/>
+  <affected-histogram name="SoftwareReporter.RunningTimeRegistryError"/>
+  <affected-histogram name="SoftwareReporter.Step"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SpdyCwnd">
+  <obsolete>
+    Deprecated as of 07/2014.
+  </obsolete>
+  <owner>willchan@chromium.org</owner>
+  <suffix name="cwnd32" label="using cwnd policy static 32"/>
+  <suffix name="cwnd10" label="using cwnd policy static 10"/>
+  <suffix name="cwnd16" label="using cwnd policy static 16"/>
+  <suffix name="cwndMin16" label="using dynamic cwnd policy no lower than 16"/>
+  <suffix name="cwndMin10" label="using dynamic cwnd policy no lower than 10"/>
+  <suffix name="cwndDynamic" label="using dynamic cwnd policy"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
+  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SpdyImpact">
+  <suffix name="npn_with_http"
+      label="with NPN negotiated but using HTTP instead of SPDY"/>
+  <suffix name="npn_with_spdy" label="with NPN negotiated and using SPDY"/>
+  <affected-histogram name="Net.Transaction_Connected"/>
+  <affected-histogram name="Net.Transaction_Connected_New"/>
+  <affected-histogram name="Net.Transaction_Connected_New_b"/>
+  <affected-histogram name="Net.Transaction_Connected_Under_10"/>
+  <affected-histogram name="PLT.Abandoned"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+  <affected-histogram name="PLT.StartToCommit_LinkLoadNormal"/>
+  <affected-histogram name="PLT.StartToCommit_NormalLoad"/>
+  <affected-histogram name="PLT.StartToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.StartToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SpdySettingsCwnd" separator="">
+  <suffix name="10K" label="where at least 10KB was transferred."/>
+  <suffix name="25K" label="where at least 25KB was transferred."/>
+  <suffix name="50K" label="where at least 50KB was transferred."/>
+  <suffix name="100K" label="where at least 100KB was transferred."/>
+  <affected-histogram name="Net.SpdySettingsCwnd"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SqliteDatabases" separator=".">
+  <owner>shess@chromium.org</owner>
+  <suffix name="Activity" label="Activity"/>
+  <suffix name="Affiliation" label="Affiliation"/>
+  <suffix name="AppCache" label="AppCache"/>
+  <suffix name="BookmarkImages" label="BookmarkImages"/>
+  <suffix name="Cookie" label="Cookie"/>
+  <suffix name="DatabaseTracker" label="DatabaseTracker"/>
+  <suffix name="DomainBoundCerts" label="DomainBoundCerts"/>
+  <suffix name="DOMStorageDatabase" label="DOMStorageDatabase"/>
+  <suffix name="History" label="History"/>
+  <suffix name="OfflinePageMetadata" label="OfflinePageMetadata"/>
+  <suffix name="Passwords" label="Passwords"/>
+  <suffix name="Predictor" label="Predictor"/>
+  <suffix name="PreviewsOptOut" label="PreviewsOptOut"/>
+  <suffix name="Quota" label="Quota"/>
+  <suffix name="Shortcuts" label="Shortcuts"/>
+  <suffix name="SyncDirectory" label="SyncDirectory"/>
+  <suffix name="Text" label="Text (obsolete 7/24/13)"/>
+  <suffix name="Thumbnail" label="Thumbnail"/>
+  <suffix name="TopSites" label="TopSites"/>
+  <suffix name="Web" label="Web"/>
+  <affected-histogram name="Sqlite.AutoCommitTime"/>
+  <affected-histogram name="Sqlite.CommitTime"/>
+  <affected-histogram name="Sqlite.Error"/>
+  <affected-histogram name="Sqlite.QueryTime"/>
+  <affected-histogram name="Sqlite.SizeKB"/>
+  <affected-histogram name="Sqlite.Stats"/>
+  <affected-histogram name="Sqlite.UpdateTime"/>
+  <affected-histogram name="Sqlite.Version"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SSLFalseStart">
+  <obsolete>
+    Removed 2011-06-01.
+  </obsolete>
+  <suffix name="FalseStart_enabled"/>
+  <suffix name="FalseStart_disabled"/>
+  <affected-histogram name="Net.SSL_Connection_Latency"/>
+  <affected-histogram name="Net.SSL_Connection_Latency_2"/>
+  <affected-histogram name="PLT.BeginToFinish_LinkLoadNormal"/>
+  <affected-histogram name="PLT.BeginToFinish_NormalLoad"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="StartupProfilingAbandonState">
+  <suffix name="NoPaint" label="Abandoned before first paint."/>
+  <suffix name="NoLoad" label="Abandoned before first main frame load."/>
+  <affected-histogram name="Startup.FirstWebContents.FinishReason"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="StartupTemperature" separator=".">
+  <suffix name="ColdStartup" label="Startup was cold (mostly hard faults)."/>
+  <suffix name="WarmStartup" label="Startup was warm (almost no hard faults)."/>
+  <suffix name="LukewarmStartup" label="Startup was neither warm nor cold."/>
+  <affected-histogram
+      name="LibraryLoader.PercentageOfResidentCodeBeforePrefetch"/>
+  <affected-histogram name="Startup.BrowserMainToRendererMain"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry"/>
+  <affected-histogram
+      name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun"/>
+  <affected-histogram
+      name="Startup.BrowserMessageLoopStartTimeFromMainEntry.FirstRun2"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTimeFromMainEntry2"/>
+  <affected-histogram name="Startup.BrowserOpenTabs"/>
+  <affected-histogram name="Startup.BrowserWindowDisplay"/>
+  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad"/>
+  <affected-histogram name="Startup.FirstWebContents.MainFrameLoad2"/>
+  <affected-histogram name="Startup.FirstWebContents.MainNavigationFinished"/>
+  <affected-histogram name="Startup.FirstWebContents.MainNavigationStart"/>
+  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint"/>
+  <affected-histogram name="Startup.FirstWebContents.NonEmptyPaint2"/>
+  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain"/>
+  <affected-histogram name="Startup.LoadTime.ExeMainToDllMain2"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToDllMain2"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain"/>
+  <affected-histogram name="Startup.LoadTime.ProcessCreateToExeMain2"/>
+  <affected-histogram name="Startup.SystemUptime"/>
+  <affected-histogram name="Startup.TimeSinceLastStartup"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="StartupTimeBombAlarm" separator=".">
+  <obsolete>
+    Deprecated as of 10/2014.
+  </obsolete>
+  <suffix name="ThreadNowDuration" label="Duration is in thread CPU time."/>
+  <suffix name="TimeDuration" label="Duration is in clock time."/>
+  <suffix name="TimeTicksDuration" label="Duration is in TimeTicks time."/>
+  <affected-histogram name="StartupTimeBomb.Alarm"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Storage.BlobAppendableItems" separator=".">
+  <suffix name="Bytes" label="Appending bytes."/>
+  <suffix name="File" label="Appending a file with a known size."/>
+  <suffix name="FileSystem"
+      label="Appending a filesystem object with known size."/>
+  <suffix name="Blob" label="Appending a blob."/>
+  <suffix name="CacheEntry" label="Appending a cache entry."/>
+  <affected-histogram name="Storage.BlobItemSize"/>
+  <affected-histogram name="Storage.BlobItemSize.BlobSlice"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="StunPingInternal" separator=".">
+  <suffix name="0ms" label="0ms between requests"/>
+  <suffix name="5ms" label="5ms between requests"/>
+  <suffix name="10ms" label="10ms between requests"/>
+  <suffix name="15ms" label="15ms between requests"/>
+  <suffix name="20ms" label="20ms between requests"/>
+  <suffix name="25ms" label="25ms between requests"/>
+  <suffix name="30ms" label="30ms between requests"/>
+  <suffix name="35ms" label="35ms between requests"/>
+  <suffix name="40ms" label="40ms between requests"/>
+  <suffix name="45ms" label="45ms between requests"/>
+  <suffix name="50ms" label="50ms between requests"/>
+  <suffix name="100ms" label="100ms between requests"/>
+  <affected-histogram name="WebRTC.Stun.ResponseLatency.NoNAT"/>
+  <affected-histogram name="WebRTC.Stun.ResponseLatency.NonSymNAT"/>
+  <affected-histogram name="WebRTC.Stun.ResponseLatency.SymNAT"/>
+  <affected-histogram name="WebRTC.Stun.ResponseLatency.UnknownNAT"/>
+  <affected-histogram name="WebRTC.Stun.SuccessPercent.NoNAT"/>
+  <affected-histogram name="WebRTC.Stun.SuccessPercent.NonSymNAT"/>
+  <affected-histogram name="WebRTC.Stun.SuccessPercent.SymNAT"/>
+  <affected-histogram name="WebRTC.Stun.SuccessPercent.UnknownNAT"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SyncModelType" separator=".">
+  <suffix name="APP" label="APP"/>
+  <suffix name="APP_LIST" label="APP_LIST"/>
+  <suffix name="APP_NOTIFICATION" label="APP_NOTIFICATION"/>
+  <suffix name="APP_SETTING" label="APP_SETTING"/>
+  <suffix name="ARTICLE" label="ARTICLE"/>
+  <suffix name="AUTOFILL" label="AUTOFILL"/>
+  <suffix name="AUTOFILL_PROFILE" label="AUTOFILL_PROFILE"/>
+  <suffix name="AUTOFILL_WALLET" label="AUTOFILL_WALLET"/>
+  <suffix name="AUTOFILL_WALLET_METADATA" label="AUTOFILL_WALLET_METADATA"/>
+  <suffix name="BOOKMARK" label="BOOKMARK"/>
+  <suffix name="DEVICE_INFO" label="DEVICE_INFO"/>
+  <suffix name="DICTIONARY" label="DICTIONARY"/>
+  <suffix name="EXPERIMENTS" label="EXPERIMENTS"/>
+  <suffix name="EXTENSION" label="EXTENSION"/>
+  <suffix name="EXTENSION_SETTING" label="EXTENSION_SETTING"/>
+  <suffix name="FAVICON_IMAGE" label="FAVICON_IMAGE"/>
+  <suffix name="FAVICON_TRACKING" label="FAVICON_TRACKING"/>
+  <suffix name="HISTORY_DELETE_DIRECTIVE" label="HISTORY_DELETE_DIRECTIVE"/>
+  <suffix name="MANAGED_USER" label="MANAGED_USER"/>
+  <suffix name="MANAGED_USER_SETTING" label="MANAGED_USER_SETTING"/>
+  <suffix name="MANAGED_USER_SHARED_SETTING"
+      label="MANAGED_USER_SHARED_SETTING"/>
+  <suffix name="MANAGED_USER_WHITELIST" label="MANAGED_USER_WHITELIST"/>
+  <suffix name="NIGORI" label="NIGORI"/>
+  <suffix name="PASSWORD" label="PASSWORD"/>
+  <suffix name="PREFERENCE" label="PREFERENCE"/>
+  <suffix name="SEARCH_ENGINE" label="SEARCH_ENGINE"/>
+  <suffix name="SESSION" label="SESSION"/>
+  <suffix name="SYNCED_NOTIFICATION" label="SYNCED_NOTIFICATION"/>
+  <suffix name="SYNCED_NOTIFICATION_APP_INFO"
+      label="SYNCED_NOTIFICATION_APP_INFO"/>
+  <suffix name="PRIORITY_PREFERENCE" label="PRIORITY_PREFERENCE"/>
+  <suffix name="THEME" label="THEME"/>
+  <suffix name="TYPED_URL" label="TYPED_URL"/>
+  <suffix name="WIFI_CREDENTIAL" label="WIFI_CREDENTIAL"/>
+  <affected-histogram name="Sync.ModelTypeCount"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="SyzygyStartupTime">
+  <obsolete>
+    No longer logged.
+  </obsolete>
+  <suffix name="PreReadEnabled"/>
+  <suffix name="PreReadDisabled"/>
+  <suffix name="XP_PreReadEnabled"/>
+  <suffix name="XP_PreReadDisabled"/>
+  <suffix name="PreRead_0"/>
+  <suffix name="PreRead_5"/>
+  <suffix name="PreRead_10"/>
+  <suffix name="PreRead_15"/>
+  <suffix name="PreRead_20"/>
+  <suffix name="PreRead_25"/>
+  <suffix name="PreRead_30"/>
+  <suffix name="PreRead_35"/>
+  <suffix name="PreRead_40"/>
+  <suffix name="PreRead_45"/>
+  <suffix name="PreRead_50"/>
+  <suffix name="PreRead_55"/>
+  <suffix name="PreRead_60"/>
+  <suffix name="PreRead_65"/>
+  <suffix name="PreRead_70"/>
+  <suffix name="PreRead_75"/>
+  <suffix name="PreRead_80"/>
+  <suffix name="PreRead_85"/>
+  <suffix name="PreRead_90"/>
+  <suffix name="PreRead_95"/>
+  <suffix name="PreRead_100"/>
+  <suffix name="XP_PreRead_0"/>
+  <suffix name="XP_PreRead_5"/>
+  <suffix name="XP_PreRead_10"/>
+  <suffix name="XP_PreRead_15"/>
+  <suffix name="XP_PreRead_20"/>
+  <suffix name="XP_PreRead_25"/>
+  <suffix name="XP_PreRead_30"/>
+  <suffix name="XP_PreRead_35"/>
+  <suffix name="XP_PreRead_40"/>
+  <suffix name="XP_PreRead_45"/>
+  <suffix name="XP_PreRead_50"/>
+  <suffix name="XP_PreRead_55"/>
+  <suffix name="XP_PreRead_60"/>
+  <suffix name="XP_PreRead_65"/>
+  <suffix name="XP_PreRead_70"/>
+  <suffix name="XP_PreRead_75"/>
+  <suffix name="XP_PreRead_80"/>
+  <suffix name="XP_PreRead_85"/>
+  <suffix name="XP_PreRead_90"/>
+  <suffix name="XP_PreRead_95"/>
+  <suffix name="XP_PreRead_100"/>
+  <affected-histogram name="Startup.BrowserMessageLoopStartTime"/>
+  <affected-histogram name="Startup.BrowserOpenTabs"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TabNewTabOnload" separator=".">
+  <suffix name="Local" label="Local New Tab page."/>
+  <suffix name="Google" label="New Tab page for Google."/>
+  <suffix name="Other" label="New Tab page for a non-Google provider."/>
+  <affected-histogram name="Tab.NewTabOnload"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Tabs.SwitchLatency">
+  <suffix name="Perceived"
+      label="The time it takes to show something on the screen after the user
+             selects a tab. This might be a fake snapshot or it might just be
+             the time it takes to show the real content if no snapshot was
+             available."/>
+  <suffix name="Actual"
+      label="The time it takes to show a real live frame from the renderer on
+             the screen after the user selects a tab. This doesn not include
+             fake snapshots or other tricks, but the actual time to get real
+             interactable content displayed."/>
+  <affected-histogram name="Tabs.SwitchFromCloseLatency"/>
+  <affected-histogram name="Tabs.SwitchFromExitLatency"/>
+  <affected-histogram name="Tabs.SwitchFromNewLatency"/>
+  <affected-histogram name="Tabs.SwitchFromUserLatency"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TaskSchedulerTaskPriority" separator=".">
+  <suffix name="BackgroundTaskPriority"
+      label="Applies to tasks posted with a BACKGROUND priority."/>
+  <suffix name="UserVisibleTaskPriority"
+      label="Applies to tasks posted with a USER_VISIBLE priority."/>
+  <suffix name="UserBlockingTaskPriority"
+      label="Applies to tasks posted with a USER_BLOCKING priority."/>
+  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundFileIOPool"/>
+  <affected-histogram name="TaskScheduler.TaskLatency.BackgroundPool"/>
+  <affected-histogram name="TaskScheduler.TaskLatency.ForegroundFileIOPool"/>
+  <affected-histogram name="TaskScheduler.TaskLatency.ForegroundPool"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TaskSchedulerWorkerPool" separator=".">
+  <suffix name="BackgroundFileIOPool"
+      label="Applies to the BackgroundFileIO worker pool."/>
+  <suffix name="BackgroundPool" label="Applies to the Background worker pool."/>
+  <suffix name="ForegroundFileIOPool"
+      label="Applies to the ForegroundFileIO worker pool."/>
+  <suffix name="ForegroundPool" label="Applies to the Foreground worker pool."/>
+  <affected-histogram name="TaskScheduler.DetachDuration"/>
+  <affected-histogram name="TaskScheduler.NumTasksBeforeDetach"/>
+  <affected-histogram name="TaskScheduler.NumTasksBetweenWaits"/>
+  <affected-histogram name="TaskScheduler.TaskLatency"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="ThreadWatcher" separator=".">
+  <suffix name="CACHE" label="where watched thread is CACHE BrowserThread."/>
+  <suffix name="DB" label="where watched thread is DB BrowserThread."/>
+  <suffix name="FILE" label="where watched thread is FILE BrowserThread."/>
+  <suffix name="IO" label="where watched thread is IO BrowserThread."/>
+  <suffix name="UI" label="where watched thread is UI BrowserThread."/>
+  <affected-histogram name="ThreadWatcher.ResponseTime"/>
+  <affected-histogram name="ThreadWatcher.ResponsiveThreads"/>
+  <affected-histogram name="ThreadWatcher.Unresponsive"/>
+  <affected-histogram name="ThreadWatcher.UnresponsiveThreads"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TimestampTimebaseProcess" separator=".">
+  <suffix name="Browser"/>
+  <suffix name="Renderer"/>
+  <affected-histogram name="Event.TimestampHasValidTimebase"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TotalTimeToHttpsGoogle" separator=".">
+  <suffix name="Quic">
+    <obsolete>
+      Deprecated as of 08/2015. Use Net.HttpJob.*Secure.Quic instead.
+    </obsolete>
+  </suffix>
+  <suffix name="NotQuic">
+    <obsolete>
+      Deprecated as of 08/2015. Use Net.HttpJob.*Secure.NotQuic instead.
+    </obsolete>
+  </suffix>
+  <suffix name="Secure.Quic"
+      label="Recorded for Google servers (https) only when QUIC is used."/>
+  <suffix name="Secure.NotQuic"
+      label="Recorded for Google servers (https) only when QUIC is not used."/>
+  <affected-histogram name="Net.HttpJob.TotalTime"/>
+  <affected-histogram name="Net.HttpJob.TotalTimeCached">
+    <obsolete>
+      Deprecated 10/2016, no longer used.
+    </obsolete>
+  </affected-histogram>
+  <affected-histogram name="Net.HttpJob.TotalTimeNotCached"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="Tps65090Fets" separator=".">
+  <suffix name="Fet1" label="FET1 on tps65090 (register 0xf)"/>
+  <suffix name="Fet2" label="FET2 on tps65090 (register 0x10)"/>
+  <suffix name="Fet3" label="FET3 on tps65090 (register 0x11)"/>
+  <suffix name="Fet4" label="FET4 on tps65090 (register 0x12)"/>
+  <suffix name="Fet5" label="FET5 on tps65090 (register 0x13)"/>
+  <suffix name="Fet6" label="FET6 on tps65090 (register 0x14)"/>
+  <suffix name="Fet7" label="FET7 on tps65090 (register 0x15)"/>
+  <affected-histogram name="Platform.Tps65090Retries"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TrackedPreferencesExternalValidators" separator=".">
+  <suffix name="FromRegistry"
+      label="Validation using MACs in the Windows Registry."/>
+  <affected-histogram name="Settings.TrackedPreferenceChanged"/>
+  <affected-histogram name="Settings.TrackedPreferenceCleared"/>
+  <affected-histogram name="Settings.TrackedPreferenceInitialized"/>
+  <affected-histogram name="Settings.TrackedPreferenceMigratedLegacyDeviceId"/>
+  <affected-histogram name="Settings.TrackedPreferenceNullInitialized"/>
+  <affected-histogram name="Settings.TrackedPreferenceTrustedInitialized"/>
+  <affected-histogram name="Settings.TrackedPreferenceUnchanged"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TrackedSplitPreferences" separator=".">
+  <suffix name="extensions.settings" label="Extension IDs dictionary"/>
+  <affected-histogram name="Settings.TrackedSplitPreferenceChanged"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="TrafficStatsAmortizerBytesDirection" separator=".">
+  <suffix name="Tx" label="Records only transmitted network bytes."/>
+  <suffix name="Rx" label="Records only received network bytes."/>
+  <affected-histogram
+      name="TrafficStatsAmortizer.PostAmortizationRunDataUseBytes"/>
+  <affected-histogram
+      name="TrafficStatsAmortizer.PreAmortizationRunDataUseBytes"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="UnackedPackets" separator=".">
+  <obsolete>
+    Deprecated as of 08/2016.
+  </obsolete>
+  <suffix name="UnackedPackets"
+      label="The session had outstanding unacked packets."/>
+  <suffix name="NoUnackedPackets"
+      label="The session had no outstanding unacked packets."/>
+  <affected-histogram
+      name="Net.QuicSession.LocallyTimedOutWithOpenStreams.TimeSinceLastReceived"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="UnPackConsumer">
+  <suffix name="ChromeArchivePatch"
+      label="compressed patch: chrome_patch.packed.7z holding
+             chrome_patch.diff (small)."/>
+  <suffix name="CompressedChromeArchive"
+      label="compressed archive: chrome.packed.7z holding chrome.7z (big)."/>
+  <suffix name="SetupExePatch"
+      label="compressed patch: setup_patch.packed.7z holding setup_patch.diff
+             (small)."/>
+  <suffix name="UncompressedChromeArchive"
+      label="uncompressed archive: chrome.7z holding install dir (big)."/>
+  <affected-histogram name="Setup.Install.LzmaUnPackNTSTATUS"/>
+  <affected-histogram name="Setup.Install.LzmaUnPackStatus"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="V8SpecialApps" separator=".">
+  <suffix name="calendar" label="Custom histogram for Calendar"/>
+  <suffix name="docs" label="Custom histogram for Google Docs and Drive"/>
+  <suffix name="gmail" label="Custom histogram for GMail"/>
+  <suffix name="inbox" label="Custom histogram for Inbox"/>
+  <suffix name="plus" label="Custom histogram for Google+"/>
+  <suffix name="top10"
+      label="Custom histogram for Alexa's Top10 non-Google sites"/>
+  <suffix name="youtube" label="Custom histogram for Youtube"/>
+  <affected-histogram name="V8.MemoryExternalFragmentationTotal"/>
+  <affected-histogram name="V8.MemoryHeapCommitted"/>
+  <affected-histogram name="V8.MemoryHeapSampleTotalCommitted"/>
+  <affected-histogram name="V8.MemoryHeapSampleTotalUsed"/>
+  <affected-histogram name="V8.MemoryHeapUsed"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="VideoEncodedQpStats" separator=".">
+  <suffix name="H264"
+      label="Video codec: H264. QP range: 0-51. No spatial layers."/>
+  <suffix name="Vp8"
+      label="Video codec: VP8. QP range: 0-127. Single stream sent."/>
+  <suffix name="Vp8.S0"
+      label="Video codec: VP8. QP range: 0-127. Spatial index 0."/>
+  <suffix name="Vp8.S1"
+      label="Video codec: VP8. QP range: 0-127. Spatial index 1."/>
+  <suffix name="Vp8.S2"
+      label="Video codec: VP8. QP range: 0-127. Spatial index 2."/>
+  <suffix name="Vp9"
+      label="Video codec: VP9. QP range: 0-255. No spatial layers."/>
+  <suffix name="Vp9.S0"
+      label="Video codec: VP9. QP range: 0-255. Spatial layer 0."/>
+  <suffix name="Vp9.S1"
+      label="Video codec: VP9. QP range: 0-255. Spatial layer 1."/>
+  <suffix name="Vp9.S2"
+      label="Video codec: VP9. QP range: 0-255. Spatial layer 2."/>
+  <affected-histogram name="WebRTC.Video.Encoded.Qp"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="VRSessionType" separator=".">
+  <suffix name="Browser"
+      label="The session is restricted to the period that the browser is
+             displaying a regular page."/>
+  <suffix name="Fullscreen"
+      label="The session is restricted to the period that the browser is
+             displaying fullscreen content."/>
+  <suffix name="WebVR"
+      label="The session is restricted to the period that browser is
+             displaying WebVR contents."/>
+  <affected-histogram name="VRSessionTime"/>
+  <affected-histogram name="VRSessionVideoTime"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebFontFamily">
+  <suffix name="roboto" label="Roboto font"/>
+  <suffix name="opensans" label="Open Sans font"/>
+  <suffix name="others" label="Fonts other than Roboto and Open Sans"/>
+  <affected-histogram name="WebFont.DiskCache.EntryAge.Evict"/>
+  <affected-histogram name="WebFont.DiskCache.EntryAge.Hit"/>
+  <affected-histogram name="WebFont.DiskCache.ReuseCount.Evict"/>
+  <affected-histogram name="WebFont.DiskCache.ReuseCount.Hit"/>
+  <affected-histogram name="WebFont.DiskCacheHit"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebFontFormat" separator=".">
+  <suffix name="SFNT" label="TrueType or OpenType fonts"/>
+  <suffix name="WOFF" label="WOFF 1.0 fonts"/>
+  <suffix name="WOFF2" label="WOFF 2.0 fonts"/>
+  <affected-histogram name="WebFont.DecodeSpeed"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebFontMissedCache" separator="." ordering="prefix">
+  <owner>toyoshim@chromium.org</owner>
+  <suffix name="MissedCache" label="On missed cache"/>
+  <affected-histogram name="WebFont.DownloadTime.0.Under10KB"/>
+  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
+  <affected-histogram name="WebFont.DownloadTime.2.50KBTo100KB"/>
+  <affected-histogram name="WebFont.DownloadTime.3.100KBTo1MB"/>
+  <affected-histogram name="WebFont.DownloadTime.4.Over1MB"/>
+  <affected-histogram name="WebFont.DownloadTime.LoadError"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebFontMissedCacheAndInterventionTriggeredOrNot"
+    separator="." ordering="prefix">
+  <owner>toyoshim@chromium.org</owner>
+  <suffix name="MissedCacheAndInterventionNotTriggered"
+      label="On missed cache and intervention not triggered"/>
+  <suffix name="MissedCacheAndInterventionTriggered"
+      label="On missed cache and intervention triggered"/>
+  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
+  <affected-histogram name="WebFont.DownloadTime.1.10KBTo50KB"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebRTCMediaType" separator=".">
+  <suffix name="Audio" label="Audio"/>
+  <suffix name="Video" label="Video"/>
+  <suffix name="Data" label="Data"/>
+  <affected-histogram name="WebRTC.PeerConnection.SrtpCryptoSuite"/>
+  <affected-histogram name="WebRTC.PeerConnection.SslCipherSuite"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebSocketMessageSizeReceive" separator=".">
+  <suffix name="ArrayBuffer"/>
+  <suffix name="Blob"/>
+  <affected-histogram name="WebCore.WebSocket.MessageSize.Receive"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebSocketMessageSizeSend" separator=".">
+  <suffix name="ArrayBuffer"/>
+  <suffix name="ArrayBufferView"/>
+  <suffix name="Blob"/>
+  <affected-histogram name="WebCore.WebSocket.MessageSize.Send"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WebStoreLinkExperiment">
+  <suffix name="Disabled" label="Neither extra webstore link is visible"/>
+  <suffix name="FooterLink" label="Link in bottom right of footer"/>
+  <suffix name="PlusIcon" label="Plus icon in apps page"/>
+  <affected-histogram name="Extensions.AppLaunch"/>
+  <affected-histogram name="NewTabPage.DefaultPageType"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WelcomeWin10Variant">
+  <owner>tmartino@chromium.org</owner>
+  <suffix name="InlineCombined" label="Inline layout style, combined promo"/>
+  <suffix name="InlineDefault"
+      label="Inline layout style, default browser promo only"/>
+  <suffix name="SectionedCombined"
+      label="Sectioned layout style, combined promo"/>
+  <suffix name="SectionedDefault"
+      label="Sectioned layout style, default browser promo only"/>
+  <affected-histogram name="Welcome.Win10.DefaultPromptResult"/>
+  <affected-histogram name="Welcome.Win10.PinnedPromptResult"/>
+</histogram_suffixes>
+
+<histogram_suffixes name="WrenchMenuActionTimings" separator=".">
+  <suffix name="NewTab"/>
+  <suffix name="NewWindow"/>
+  <suffix name="NewIncognitoWindow"/>
+  <suffix name="ShowBookmarkBar"/>
+  <suffix name="ShowBookmarkMgr"/>
+  <suffix name="ImportSettings"/>
+  <suffix name="BookmarkPage"/>
+  <suffix name="BookmarkAllTabs"/>
+  <suffix name="PinToStartScreen"/>
+  <suffix name="RestoreTab"/>
+  <suffix name="WinDesktopRestart"/>
+  <suffix name="Win8MetroRestart"/>
+  <suffix name="ChromeOSRestart"/>
+  <suffix name="DistillPage"/>
+  <suffix name="SavePage"/>
+  <suffix name="Find"/>
+  <suffix name="Print"/>
+  <suffix name="Cut"/>
+  <suffix name="Copy"/>
+  <suffix name="Paste"/>
+  <suffix name="CreateHostedApp"/>
+  <suffix name="CreateShortcuts"/>
+  <suffix name="ManageExtensions"/>
+  <suffix name="TaskManager"/>
+  <suffix name="ClearBrowsingData"/>
+  <suffix name="ViewSource"/>
+  <suffix name="DevTools"/>
+  <suffix name="DevToolsConsole"/>
+  <suffix name="DevToolsDevices"/>
+  <suffix name="ProfilingEnabled"/>
+  <suffix name="ZoomMinus"/>
+  <suffix name="ZoomPlus"/>
+  <suffix name="EnterFullScreen"/>
+  <suffix name="ShowHistory"/>
+  <suffix name="ShowDownloads"/>
+  <suffix name="ShowSyncSetup"/>
+  <suffix name="Settings"/>
+  <suffix name="About"/>
+  <suffix name="HelpPage"/>
+  <suffix name="Feedback"/>
+  <suffix name="RequestTabletSite"/>
+  <suffix name="Exit"/>
+  <suffix name="OpenBookmark"/>
+  <suffix name="OpenRecentTab"/>
+  <suffix name="BookmarkOpen">
+    <obsolete>
+      Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenBookmark
+      instead.
+    </obsolete>
+  </suffix>
+  <suffix name="RecentTab">
+    <obsolete>
+      Deprecated as of 02/2015. Use WrenchMenu.TimeToAction.OpenRecentTab
+      instead.
+    </obsolete>
+  </suffix>
+  <suffix name="Cast"/>
+  <affected-histogram name="WrenchMenu.TimeToAction"/>
+</histogram_suffixes>
+
+</histogram_suffixes_list>
+
+</histogram-configuration>
diff --git a/src/tools/metrics/histograms/histograms.xml b/src/tools/metrics/histograms/histograms.xml
index f772b75..3d5b688 100644
--- a/src/tools/metrics/histograms/histograms.xml
+++ b/src/tools/metrics/histograms/histograms.xml
@@ -3629,7 +3629,7 @@
 
 <histogram name="Autofill.CardUploadDecision" enum="AutofillCardUploadDecision">
   <obsolete>
-    Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionExpanded.
+    Deprecated as of 2/2016, replaced by Autofill.CardUploadDecisionMetric.
   </obsolete>
   <owner>jdonnelly@chromium.org</owner>
   <summary>
@@ -3640,6 +3640,9 @@
 
 <histogram name="Autofill.CardUploadDecisionExpanded"
     enum="AutofillCardUploadDecisionExpanded">
+  <obsolete>
+    Deprecated as of 5/2017, replaced by Autofill.CardUploadDecisionMetric.
+  </obsolete>
   <owner>jdonnelly@chromium.org</owner>
   <summary>
     Whether upload was offered upon detecting a form submission with credit card
@@ -3647,6 +3650,18 @@
   </summary>
 </histogram>
 
+<histogram name="Autofill.CardUploadDecisionMetric"
+    enum="AutofillCardUploadDecisionMetric">
+  <owner>csashi@google.com</owner>
+  <owner>jsaul@google.com</owner>
+  <owner>sebsg@chromium.org</owner>
+  <summary>
+    Whether upload was offered upon detecting a form submission with credit card
+    data, a detailed reason if upload was offered even with some missing fields
+    and detailed reasons if it wasn't.
+  </summary>
+</histogram>
+
 <histogram name="AutoFill.CCInfoBarAccepted">
   <obsolete>
     Deprecated as of 3/2011, replaced by Autofill.CreditCardInfoBar.
@@ -9498,7 +9513,7 @@
 </histogram>
 
 <histogram name="Cryptohome.DircryptoMigrationEndStatus"
-    enum="DircryptoMigrationStartStatus">
+    enum="DircryptoMigrationEndStatus">
   <owner>dspaid@chromium.org</owner>
   <summary>
     The status of the user home directory migration from ecryptfs to
@@ -9528,6 +9543,14 @@
   </summary>
 </histogram>
 
+<histogram name="Cryptohome.HomedirEncryptionType" enum="HomedirEncryptionType">
+  <owner>dspaid@chromium.org</owner>
+  <summary>
+    The encryption type used for a user's cryptohome directory.  This is logged
+    each time the cryptohome is mounted.
+  </summary>
+</histogram>
+
 <histogram name="Cryptohome.MigrationToGaiaId"
     enum="CryptohomeMigrationToGaiaId">
   <owner>alemate@chromium.org</owner>
@@ -9537,6 +9560,35 @@
   </summary>
 </histogram>
 
+<histogram name="Cryptohome.MigrationUI.ConsumedBatteryPercent" units="%">
+  <owner>fukino@chromium.org</owner>
+  <summary>
+    The amount of consumed battery level during cryptohome encryption migration.
+    This is logged when the battery level decreases during migration, and the
+    data is used to check if the minimum battery level required to start
+    migration is appropriate.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.MigrationUI.FirstScreen"
+    enum="MigrationUIFirstScreen">
+  <owner>fukino@chromium.org</owner>
+  <summary>
+    The first screen in the encryption migration UI, which is shown when a user
+    attempts to log in to the system and old encryption (eCryptfs) is detected.
+  </summary>
+</histogram>
+
+<histogram name="Cryptohome.MigrationUI.UserChoice"
+    enum="MigrationUIUserChoice">
+  <owner>fukino@chromium.org</owner>
+  <summary>
+    User's choice when the system is ready to migrate encryption. The user can
+    start migration or skip it. It is used to know how many users have skipped
+    migration.
+  </summary>
+</histogram>
+
 <histogram name="Cryptohome.TimeToCompleteDircryptoMigration" units="ms">
   <owner>dspaid@chromium.org</owner>
   <summary>
@@ -10481,20 +10533,8 @@
   <owner>megjablon@chromium.org</owner>
   <summary>
     Samples of user interactions with the Data Reduction Proxy promos, First Run
-    Experience, and settings menu. All samples are mutually exclusive. These
-    samples include:
-
-    The user interactions with the second run promo. On Android, there are three
-    actions that dismiss this promo (enable, dismiss, and learn more) and on iOS
-    there is a toggle to enable the proxy. This is sampled when the promo leaves
-    view. If the user clicks the link to the settings menu, the state of the
-    ON/OFF switch in the menu is sampled when the view is exited.
-
-    Any other user interaction with the the ON/OFF switch in the settings menu
-    for reducing data usage. Only the setting changes between entering the
-    reducing data usage setting menu and leaving the menu will be sampled
-    regardless of how many times they toggle the ON/OFF switch. Other samples
-    that report ON/OFF settings menu changes are not also reported here.
+    Experience, main menu footer, and settings menu. All samples are mutually
+    exclusive. These samples include:
 
     The user interactions with the First Run Experience. On Android when the
     user sees the FRE card, the Data Reduction Proxy defaults to ON. The user
@@ -10502,13 +10542,32 @@
     sampled when the First Run Experience is completed and only reported if the
     Data Reduction Proxy card was shown.
 
+    The user interactions with the second run promo. On Android, there are two
+    actions that dismiss this promo (enable or dismiss). This is sampled when
+    the promo leaves view.
+
     The user interactions with the Infobar promo. On Android, there are two
     actions that dismiss the promo (enable, dismiss). This is sampled when the
     promo leaves view.
 
     The user interactions with the Snackbar promo. The user can either ignore
-    the promo or click the action to the Settings menu. From the settings menu,
+    the promo or click the action to the settings menu. From the settings menu,
     the user may enable or disable the proxy.
+
+    The user interactions with the main menu footer. The user can click the
+    footer to enter the settings menu. From the settings menu, the user may
+    enable or disable the proxy.
+
+    Any other user interaction with the ON/OFF switch in the settings menu for
+    reducing data usage. Only the setting changes between entering the reducing
+    data usage setting menu and leaving the menu will be sampled regardless of
+    how many times they toggle the ON/OFF switch. Other samples that report
+    ON/OFF settings menu changes are not also reported here.
+
+    The views of and user interactions with the site breakdown in the settings
+    menu. The site breakdown can be sorted by data saved descending or data used
+    descending, and expanded to view more sites. The Data Reduction statistics
+    can also be reset.
   </summary>
 </histogram>
 
@@ -15314,6 +15373,17 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="Enterprise.RetrievePolicyResponse"
+    enum="EnterpriseRetrievePolicyResponseType">
+<!-- Name completed by histogram_suffixes name="EnterpriseRetrievePolicyResponse" -->
+
+  <owner>emaxx@chromium.org</owner>
+  <owner>igorcov@chromium.org</owner>
+  <summary>
+    On Chrome OS, the response obtained to retrieve policy request.
+  </summary>
+</histogram>
+
 <histogram name="Enterprise.SystemLogPIILeak" enum="SystemLogPIIType">
   <obsolete>
     Deprecated and removed from code as of 01/2016.
@@ -16982,6 +17052,17 @@
   </summary>
 </histogram>
 
+<histogram name="Event.MainThreadEventQueue.FlushQueueNoBeginMainFrame"
+    enum="BooleanHit">
+  <owner>dtapuska@chromium.org</owner>
+  <summary>
+    Whether the Begin Main Frame was not received and the queue generated a
+    flush queue after a given timeout.
+
+    Team: input-dev@chromium.org.
+  </summary>
+</histogram>
+
 <histogram name="Event.MainThreadEventQueue.NonContinuous.QueueingTime"
     units="microseconds">
   <owner>dtapuska@chromium.org</owner>
@@ -20821,6 +20902,11 @@
   </summary>
 </histogram>
 
+<histogram name="Feedback.RequestSource" enum="FeedbackSource">
+  <owner>afakhry@chromium.org</owner>
+  <summary>Records the source that requested showing the feedback app.</summary>
+</histogram>
+
 <histogram name="FileBrowser.CloudImport.UserAction"
     enum="CloudImportUserAction">
   <owner>smckay@google.com</owner>
@@ -29345,6 +29431,23 @@
   </summary>
 </histogram>
 
+<histogram name="Memory.Experimental.CompressedPagesPerSecond" units="pages/s">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The number of pages compressed per second. Recorded every 60 seconds. Only
+    recorded on macOS.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Experimental.DecompressedPagesPerSecond"
+    units="pages/s">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The number of pages decompressed per second. Recorded every 60 seconds. Only
+    recorded on macOS.
+  </summary>
+</histogram>
+
 <histogram name="Memory.Experimental.Gpu.PhysicalFootprint.MacOS" units="MB">
   <owner>erikchen@chromium.org</owner>
   <summary>
@@ -29388,6 +29491,20 @@
   </summary>
 </histogram>
 
+<histogram name="Memory.Experimental.SwapInPerSecond" units="swaps/s">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The number of swap-ins per second. Recorded every 60 seconds.
+  </summary>
+</histogram>
+
+<histogram name="Memory.Experimental.SwapOutPerSecond" units="swaps/s">
+  <owner>bashi@chromium.org</owner>
+  <summary>
+    The number of swap-outs per second. Recorded every 60 seconds.
+  </summary>
+</histogram>
+
 <histogram name="Memory.Extension" units="KB">
   <owner>hajimehoshi@chromium.org</owner>
   <owner>kenjibaheux@google.com</owner>
@@ -30583,6 +30700,15 @@
   </summary>
 </histogram>
 
+<histogram name="MobileStartup.IntentToCreationTime" units="ms">
+  <owner>twellington@chromium.org</owner>
+  <summary>
+    Android: The time it takes from creating an intent for ChromeActivity to
+    activity creation. This includes activity creation time spent in the
+    framework.
+  </summary>
+</histogram>
+
 <histogram name="MobileStartup.MainIntentAction" enum="MobileStartingAction">
   <owner>mariakhomenko@chromium.org</owner>
   <summary>
@@ -37523,6 +37649,14 @@
   </summary>
 </histogram>
 
+<histogram name="Net.RedirectWithUnadvertisedContentEncoding" enum="Boolean">
+  <owner>eustas@chromium.org</owner>
+  <summary>
+    True for redirect responses with unadvertised &quot;Content-Encoding&quot;.
+    False for valid redirect responses. See http://crbug.com/714514
+  </summary>
+</histogram>
+
 <histogram name="Net.RenegotiationExtensionSupported">
   <obsolete>
     Deprecated 03/2015. No longer tracked.
@@ -46759,6 +46893,247 @@
   </summary>
 </histogram>
 
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Network"
+    units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of the resources loaded for all of the ad frames on the
+    page that loaded over the network.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.PercentNetwork"
+    units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The percentage of bytes loaded for all ad frames that were loaded over the
+    network.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.AdFrames.Aggregate.Total"
+    units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of the resources loaded for all of the ad frames on the
+    page.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.Network"
+    units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of the resources loaded for an ad frame from the network.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.PercentNetwork"
+    units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The percentage of bytes loaded for a single ad frame that were loaded over
+    the network.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.AdFrames.PerFrame.Total"
+    units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of the resources loaded for an ad frame.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.FullPage.Network" units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of all of the page's resources that loaded over the
+    network.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.FullPage.Network.PercentAds"
+    units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The percentage of bytes loaded for the page (from the network) that came
+    from resource loads in ad frames (from the network).
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.FullPage.Total" units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of all of the page's resources.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes.
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.FullPage.Total.PercentAds"
+    units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The percentage of bytes loaded for the page that came from resource loads in
+    ad frames.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram name="PageLoad.Clients.Ads.Google.Bytes.NonAdFrames.Aggregate.Total"
+    units="KB">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The size (in KB) of all of the page's resources except for those loaded in
+    ad frames.
+
+    Only recorded if the page has at least one identified ad frame. Bytes are
+    measured as over-the-wire (e.g., compressed) response body KBs and do not
+    include header bytes. An ad frame consists of the identified ad frame and
+    all of its children (which may also be ads, but are counted as part of the
+    ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.FrameCounts.AnyParentFrame.AdFrames"
+    units="Ad frames">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The number of frames on the page identified as Google Ad Frames.
+
+    For pages with zero ad frames, the other PageLoad.Clients.Ads metrics are
+    not recorded unless otherwise specified.
+
+    Child frames of an ad frame are not included in the count.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.FrameCounts.MainFrameParent.AdFrames"
+    units="Frames">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The number of frames (with parent frame of main frame) that are on the page
+    identified as Google Ad Frames.
+
+    Only recorded if the page has at least one identified ad frame. Child frames
+    of an ad frame are not included in the count.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.FrameCounts.MainFrameParent.PercentAdFrames"
+    units="%">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The percentage of frames (with parent frame of main frame) on the page that
+    are identified as Google Ad Frames.
+
+    Only recorded if the page has at least one identified ad frame. An ad frame
+    consists of the identified ad frame and all of its children (which may also
+    be ads, but are counted as part of the ancestor ad frame).
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.FrameCounts.MainFrameParent.TotalFrames"
+    units="Frames">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    The number of frames (with parent frame of main frame) on the page.
+
+    Only recorded if the page has at least one identified ad frame.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.Navigations.AdFrameRenavigatedToAd"
+    enum="DidNavigateToAd">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    When a frame that is (or previously was) an ad frame renavigates, record
+    whether it renavigated to an ad frame or a non-ad frame.
+
+    An ad frame consists of the identified ad frame and all of its children. Its
+    children (which may also be ads) are not counted when they renavigate.
+
+    This metric is recorded as the event happens. Note that this is unlike most
+    other Clients.Ads metrics, which are recorded when the page load is
+    complete.
+  </summary>
+</histogram>
+
+<histogram
+    name="PageLoad.Clients.Ads.Google.Navigations.NonAdFrameRenavigatedToAd"
+    enum="DidNavigateToAd">
+  <owner>jkarlin@chromium.org</owner>
+  <summary>
+    When a frame that has never been part of an ad frame renavigates, record
+    whether it renavigated to an ad frame or a non-ad frame.
+
+    This metric is recorded as the event happens. Note that this is unlike most
+    other Clients.Ads metrics, which are recorded when the page load is
+    complete.
+  </summary>
+</histogram>
+
 <histogram
     name="PageLoad.Clients.DataReductionProxy.Experimental.Bytes.Network.CompressionRatio"
     units="%">
@@ -48066,6 +48441,14 @@
   <summary>Time taken to save a page into an MHTML file.</summary>
 </histogram>
 
+<histogram name="PageSerialization.MhtmlGeneration.PopupOverlaySkipped"
+    enum="BooleanSkipped">
+  <owner>jianli@chromium.org</owner>
+  <summary>
+    Recorded when the popup overlays are removed from MHTML serialization.
+  </summary>
+</histogram>
+
 <histogram
     name="PageSerialization.MhtmlGeneration.RendererMainThreadTime.FrameTree"
     units="ms">
@@ -48150,6 +48533,9 @@
 </histogram>
 
 <histogram name="Parser.ChunkEnqueueTime" units="ms">
+  <obsolete>
+    Deprecated May 2017
+  </obsolete>
   <owner>csharrison@chromium.org</owner>
   <summary>
     The time it takes to enqueue a ParsedChunk onto the shared parser queue.
@@ -48181,6 +48567,9 @@
 </histogram>
 
 <histogram name="Parser.PreloadTokenizeDelay" units="ms">
+  <obsolete>
+    Deprecated May 2017
+  </obsolete>
   <owner>csharrison@chromium.org</owner>
   <summary>
     The delay from when bytes are received on the main thread to when they are
@@ -64339,6 +64728,44 @@
   </summary>
 </histogram>
 
+<histogram name="SearchAnswer.AnswerVisibleTime" units="ms">
+  <owner>vadimt@chromium.org</owner>
+  <summary>Time between showing and hiding the answer card.</summary>
+</histogram>
+
+<histogram name="SearchAnswer.LoadingTime" units="ms">
+  <owner>vadimt@chromium.org</owner>
+  <summary>
+    Time between sending an answer server request and the end of loading of the
+    answer card. Failed requests and requests not returning an answer are not
+    counted.
+  </summary>
+</histogram>
+
+<histogram name="SearchAnswer.NavigationTime" units="ms">
+  <owner>vadimt@chromium.org</owner>
+  <summary>
+    Time between sending an answer server request and successful finish of
+    navigation. Failed requests and requests not returning an answer are not
+    counted.
+  </summary>
+</histogram>
+
+<histogram name="SearchAnswer.RequestResult" enum="SearchAnswerRequestResult">
+  <owner>vadimt@chromium.org</owner>
+  <summary>Result of a answer server request.</summary>
+</histogram>
+
+<histogram name="SearchAnswer.ResizeAfterLoadTime" units="ms">
+  <owner>vadimt@chromium.org</owner>
+  <summary>
+    Time between successfully loading an answer card request and updating its
+    preferred size. There might be no or more than one size update per card
+    load. Size updates that happen before the card finishes loading are ignored
+    since they are not visible.
+  </summary>
+</histogram>
+
 <histogram
     name="Security.HTTPBad.NavigationStartedAfterUserWarnedAboutSensitiveInput"
     units="ms">
@@ -67298,11 +67725,35 @@
   </summary>
 </histogram>
 
-<histogram name="SimpleCache.DiskOpenLatency" units="ms">
+<histogram base="true" name="SimpleCache.DiskCloseLatency" units="ms">
+  <owner>morlovich@chromium.org</owner>
+  <summary>
+    The time to close (write out footers and close the file) the cache entry on
+    disk. Includes only successful operations.
+  </summary>
+</histogram>
+
+<histogram base="true" name="SimpleCache.DiskCreateLatency" units="ms">
+  <owner>morlovich@chromium.org</owner>
+  <summary>
+    The time to access (open for creation and write initial headers) the cache
+    entry on disk. Includes only successful operations.
+  </summary>
+</histogram>
+
+<histogram base="true" name="SimpleCache.DiskOpenLatency" units="ms">
   <owner>rdsmith@chromium.org</owner>
   <summary>
     The time to access (open and read headers from all files) the cache entry on
-    disk.
+    disk. Includes only successful operations.
+  </summary>
+</histogram>
+
+<histogram base="true" name="SimpleCache.DiskWriteLatency" units="ms">
+  <owner>morlovich@chromium.org</owner>
+  <summary>
+    The time to write a chunk to the cache entry on disk. Includes only
+    successful operations.
   </summary>
 </histogram>
 
@@ -67719,6 +68170,22 @@
   </summary>
 </histogram>
 
+<histogram base="true" name="SimpleCache.QueueLatency.CreateEntry" units="ms">
+  <owner>morlovich@chromium.org</owner>
+  <summary>
+    Delay between when the I/O portion of CreateEntry is enqueued and when its
+    execution begins.
+  </summary>
+</histogram>
+
+<histogram base="true" name="SimpleCache.QueueLatency.OpenEntry" units="ms">
+  <owner>morlovich@chromium.org</owner>
+  <summary>
+    Delay between when the I/O portion of OpenEntry is enqueued and when its
+    execution begins.
+  </summary>
+</histogram>
+
 <histogram base="true" name="SimpleCache.ReadIsParallelizable"
     enum="SimpleCacheReadParallelizable">
   <owner>gavinp@chromium.org</owner>
@@ -71017,6 +71484,26 @@
   </summary>
 </histogram>
 
+<histogram name="SubresourceFilter.PageLoad.SafeBrowsingDelay" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The navigation delay imposed by the subresource filter on a given navigation
+    due to Safe Browsing checks.
+  </summary>
+</histogram>
+
+<histogram
+    name="SubresourceFilter.PageLoad.SafeBrowsingDelay.NoRedirectSpeculation"
+    units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The navigation delay that would have been imposed by the subresource filter
+    on a given navigation due to Safe Browsing checks if redirect speculation
+    was removed. Removing this feature would cause more delay if a navigation
+    has redirects.
+  </summary>
+</histogram>
+
 <histogram
     name="SubresourceFilter.PageLoad.SubresourceEvaluation.TotalCPUDuration"
     units="microseconds">
@@ -71059,6 +71546,14 @@
   </summary>
 </histogram>
 
+<histogram name="SubresourceFilter.SafeBrowsing.CheckTime" units="ms">
+  <owner>csharrison@chromium.org</owner>
+  <summary>
+    The time an individual Safe Browsing URL check took before finishing. Logged
+    when a check is complete or cancelled due to a timeout.
+  </summary>
+</histogram>
+
 <histogram name="SubresourceFilter.SubresourceLoad.Evaluation.CPUDuration"
     units="microseconds">
   <owner>pkalinnikov@chromium.org</owner>
@@ -74313,7 +74808,21 @@
   </summary>
 </histogram>
 
-<histogram name="TaskScheduler.TaskLatency" units="ms">
+<histogram base="true" name="TaskScheduler.TaskLatency" units="ms">
+  <obsolete>
+    Deprecated 4/2017. Units changed from milliseconds to microseconds.
+  </obsolete>
+  <owner>fdoray@chromium.org</owner>
+  <owner>gab@chromium.org</owner>
+  <owner>robliao@chromium.org</owner>
+  <summary>
+    Time elapsed between when a task is posted and when it starts to run.
+    Recorded for each task that runs inside the TaskScheduler.
+  </summary>
+</histogram>
+
+<histogram base="true" name="TaskScheduler.TaskLatencyMicroseconds"
+    units="microseconds">
   <owner>fdoray@chromium.org</owner>
   <owner>gab@chromium.org</owner>
   <owner>robliao@chromium.org</owner>
@@ -76326,6 +76835,17 @@
   </summary>
 </histogram>
 
+<histogram name="UpdateEngine.Daily.RecoveryCount" units="count">
+  <owner>ahassani@chromium.org</owner>
+  <summary>
+    The number of times the device has been recovered.
+
+    This is reported on every update check but at most once a day.
+
+    This metric is specific to ChromeOS.
+  </summary>
+</histogram>
+
 <histogram name="UpdateEngine.FailedUpdateCount" units="count">
   <owner>zeuthen@chromium.org</owner>
   <summary>
@@ -82293,12 +82813,9 @@
 </histogram>
 
 <histogram name="WinJumplist.CreateIconFilesCount">
-  <obsolete>
-    Obsolete 04/20/2017 as we are no long recording this metric.
-  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
-    Count of jumplist icons that will be created per jumplist update. It is
+    The number of jumplist icons requested to create per jumplist update. It is
     recorded whenever UpdateJumpList() is called.
   </summary>
 </histogram>
@@ -82313,14 +82830,22 @@
 
 <histogram name="WinJumplist.DeleteDirectoryContentDuration" units="ms">
   <owner>chengx@chromium.org</owner>
-  <summary>
-    Time spent in DeleteDirectoryContentAndLogResults(). This method is to
-    delete the icon files in JumpListIcons folder.
-  </summary>
+  <summary>Time spent in DeleteDirectoryContentAndLogRuntime().</summary>
+</histogram>
+
+<histogram name="WinJumplist.DeleteDirectoryDuration" units="ms">
+  <obsolete>
+    Obsolete 04/25/2016 as we are no long recording this metric.
+  </obsolete>
+  <owner>chengx@chromium.org</owner>
+  <summary>Time spent in DeleteDirectoryAndLogResults().</summary>
 </histogram>
 
 <histogram name="WinJumplist.DeleteStatusJumpListIcons"
     enum="JumplisticonsDeleteCategory">
+  <obsolete>
+    Obsolete 04/25/2016 as we are no long recording this metric.
+  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
     This metric records the detailed delete result of JumpListIcons directory.
@@ -82329,6 +82854,9 @@
 
 <histogram name="WinJumplist.DeleteStatusJumpListIconsOld"
     enum="JumplisticonsDeleteCategory">
+  <obsolete>
+    Obsolete 04/25/2016 as we are no long recording this metric.
+  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
     This metric records the detailed delete result of JumpListIconsOld
@@ -82394,6 +82922,9 @@
 
 <histogram name="WinJumplist.DirectoryStatusJumpListIcons"
     enum="JumpListIconsFolderExistOrEmptyCategory">
+  <obsolete>
+    Obsolete 04/25/2016 as we are no long recording this metric.
+  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
         This metric records whether the folder JumpListIcons exists; and if it
@@ -82403,6 +82934,9 @@
 
 <histogram name="WinJumplist.DirectoryStatusJumpListIconsOld"
     enum="JumpListIconsFolderExistOrEmptyCategory">
+  <obsolete>
+    Obsolete 04/25/2016 as we are no long recording this metric.
+  </obsolete>
   <owner>chengx@chromium.org</owner>
   <summary>
         This metric records whether the folder JumpListIconsOld exists; and if
@@ -84225,6 +84759,9 @@
 </enum>
 
 <enum name="AutofillCardUploadDecisionExpanded" type="int">
+  <obsolete>
+    Deprecated as of 5/2017, replaced by AutofillCardUploadDecisionMetric.
+  </obsolete>
   <int value="0" label="Upload offered"/>
   <int value="1" label="Upload not offered, no CVC detected"/>
   <int value="2" label="Upload not offered, no address available"/>
@@ -84235,6 +84772,22 @@
   <int value="6" label="Upload not offered, get upload details RPC failed"/>
   <int value="7"
       label="Upload not offered, card and/or addresses had conflicting names"/>
+  <int value="8" label="Upload offered, no CVC detected"/>
+</enum>
+
+<enum name="AutofillCardUploadDecisionMetric" type="int">
+  <int value="0" label="Upload offered"/>
+  <int value="1" label="Upload not offered, no CVC detected"/>
+  <int value="2" label="Upload not offered, no address available"/>
+  <int value="3" label="Upload not offered, no name available"/>
+  <int value="4"
+      label="Upload not offered, addresses had conflicting zip codes"/>
+  <int value="5" label="Upload not offered, no zip code available"/>
+  <int value="6" label="Upload not offered, get upload details RPC failed"/>
+  <int value="7"
+      label="Upload not offered, card and/or addresses had conflicting names"/>
+  <int value="8" label="Upload offered, no CVC detected"/>
+  <int value="9" label="Upload not offered"/>
 </enum>
 
 <enum name="AutofillCreditCardInfoBar" type="int">
@@ -86244,6 +86797,7 @@
   <int value="0" label="Swipe"/>
   <int value="1" label="Omnibox Focus"/>
   <int value="2" label="New Tab Creation"/>
+  <int value="3" label="Expand Button Pressed"/>
 </enum>
 
 <enum name="ChromeNotifierServiceActionType" type="int">
@@ -89318,18 +89872,24 @@
       label="Snackbar promo link clicked, and the proxy was disabled"/>
   <int value="15" label="Snackbar promo dismissed (no action taken)"/>
   <int value="16"
-      label="Arrived at settings menu by main menu item: entered off, exited
-             off"/>
+      label="Arrived at settings menu by main menu footer: entered off,
+             exited off"/>
   <int value="17"
-      label="Arrived at settings menu by main menu item: entered off, exited
-             on"/>
+      label="Arrived at settings menu by main menu footer: entered off,
+             exited on"/>
   <int value="18"
-      label="Arrived at settings menu by main menu item: entered on, exited
+      label="Arrived at settings menu by main menu footer: entered on, exited
              off"/>
   <int value="19"
-      label="Arrived at settings menu by main menu item: entered on, exited
+      label="Arrived at settings menu by main menu footer: entered on, exited
              on"/>
   <int value="20" label="Data usage stats reset via the settings menu"/>
+  <int value="21" label="Main menu footer displayed on"/>
+  <int value="22" label="Main menu footer displayed off"/>
+  <int value="23" label="Site breakdown displayed on the settings menu"/>
+  <int value="24" label="Site breakdown sorted by data saved"/>
+  <int value="25" label="Site breakdown sorted by data used"/>
+  <int value="26" label="Site breakdown expanded to see more sites"/>
 </enum>
 
 <enum name="DataUrlMimeType" type="int">
@@ -89787,6 +90347,11 @@
   <int value="26" label="Card Unmask"/>
 </enum>
 
+<enum name="DidNavigateToAd" type="int">
+  <int value="0" label="Navigated to Non-Ad"/>
+  <int value="1" label="Navigated to Ad"/>
+</enum>
+
 <enum name="DifferentPrimaryAccounts" type="int">
   <int value="0" label="Primary Accounts the same"/>
   <int value="1" label="(obsolete) Primary Accounts different"/>
@@ -90223,6 +90788,9 @@
   <int value="19" label="New downloads"/>
   <int value="20" label="New downloads (normal profile only)"/>
   <int value="21" label="Completed (normal profile only)"/>
+  <int value="22" label="Completed with content length mismatch"/>
+  <int value="23" label="More bytes received after content length mismatch"/>
+  <int value="24" label="No bytes received after content length mismatch"/>
 </enum>
 
 <enum name="DownloadDatabaseRecordDroppedType" type="int">
@@ -92699,6 +93267,8 @@
   <int value="365" label="DeviceLoginScreenInputMethods"/>
   <int value="366" label="EnableCommonNameFallbackForLocalAnchors"/>
   <int value="367" label="InstantTetheringAllowed"/>
+  <int value="368" label="RemoteAccessHostDomainList"/>
+  <int value="369" label="RemoteAccessHostClientDomainList"/>
 </enum>
 
 <enum name="EnterprisePolicyInvalidations" type="int">
@@ -92839,6 +93409,18 @@
   <int value="18" label="Store Failed">Caching a policy to disk failed.</int>
 </enum>
 
+<enum name="EnterpriseRetrievePolicyResponseType" type="int">
+  <summary>
+    Status codes produced by SessionManagerClient for policy retrieval requests.
+    Corresponds to RetrievePolicyResponseType in
+    chromeos/dbus/session_manager_client.h.
+  </summary>
+  <int value="0" label="Other type of error on retrieve policy request"/>
+  <int value="1" label="Success"/>
+  <int value="2" label="Retrieve request issued before session started"/>
+  <int value="3" label="Failed to retrieve policy data in session manager"/>
+</enum>
+
 <enum name="EnterpriseUploadJobSuccess" type="int">
   <summary>
     Number of UploadJob retries as defined in
@@ -97389,6 +97971,17 @@
   <int value="1970" label="GATTServerDisconnectedEvent"/>
 </enum>
 
+<enum name="FeedbackSource" type="int">
+  <int value="0" label="Arc App"/>
+  <int value="1" label="Ash"/>
+  <int value="2" label="Browser Command"/>
+  <int value="3" label="MD Settings About Page"/>
+  <int value="4" label="Old Settings About Page"/>
+  <int value="5" label="Profile Error Dialog"/>
+  <int value="6" label="SadTab Page"/>
+  <int value="7" label="Supervised User Interstitial"/>
+</enum>
+
 <enum name="FetchRequestMode" type="int">
   <int value="0" label="SameOrigin"/>
   <int value="1" label="NoCORS"/>
@@ -100048,6 +100641,11 @@
   </int>
 </enum>
 
+<enum name="HomedirEncryptionType" type="int">
+  <int value="1" label="Ecryptfs"/>
+  <int value="2" label="Ext4 Dir Encryption"/>
+</enum>
+
 <enum name="HotwordAvailability" type="int">
   <int value="0" label="Unavailable -- reason may be unknown"/>
   <int value="1" label="Available"/>
@@ -103230,6 +103828,7 @@
   <int value="-1867382602" label="WebRTC-H264WithOpenH264FFmpeg:enabled"/>
   <int value="-1867342522" label="MaterialDesignHistory:enabled"/>
   <int value="-1861814223" label="MidiManagerDynamicInstantiation:enabled"/>
+  <int value="-1860481724" label="ChromeHomeExpandButton:enabled"/>
   <int value="-1856902397" label="LoadingWithMojo:enabled"/>
   <int value="-1849706663" label="enable-password-force-saving:disabled"/>
   <int value="-1847835522" label="disable-touch-adjustment"/>
@@ -103249,6 +103848,7 @@
   <int value="-1798337879" label="enable-md-downloads"/>
   <int value="-1797739460" label="brotli-encoding:disabled"/>
   <int value="-1790227231" label="show-autofill-signatures"/>
+  <int value="-1784788154" label="NewRemotePlaybackPipeline:disabled"/>
   <int value="-1772172557" label="enable-osk-overscroll"/>
   <int value="-1767470652" label="out-of-process-pdf"/>
   <int value="-1751928267" label="disable-icon-ntp"/>
@@ -103391,7 +103991,6 @@
   <int value="-1212273428" label="enable-experimental-app-list"/>
   <int value="-1212167260" label="disable-app-window-cycling"/>
   <int value="-1208501269" label="AutofillScanThemeDialog:enabled"/>
-  <int value="-1205790119" label="CredentialManagementAPI:enabled"/>
   <int value="-1203955801" label="enable-password-change-support:disabled"/>
   <int value="-1203742042" label="enable-gesture-selection"/>
   <int value="-1201183153" label="enable-centered-app-list"/>
@@ -103412,6 +104011,7 @@
   <int value="-1158993534" label="PrintScaling:enabled"/>
   <int value="-1155543191" label="CopylessPaste:disabled"/>
   <int value="-1151766565" label="enable-fullscreen-tab-detaching"/>
+  <int value="-1150827131" label="enable-tether"/>
   <int value="-1137442543" label="enable-slimming-paint"/>
   <int value="-1136627751" label="ignore-autocomplete-off-autofill"/>
   <int value="-1136509631" label="ssl-interstitial-v1"/>
@@ -103477,6 +104077,7 @@
   <int value="-909641013" label="DataReductionProxySiteBreakdown:enabled"/>
   <int value="-908421850" label="PointerEvent:enabled"/>
   <int value="-907234795" label="NewAudioRenderingMixingStrategy:disabled"/>
+  <int value="-899393472" label="enable-new-app-menu-icon"/>
   <int value="-899334103" label="disable-fast-text-autosizing"/>
   <int value="-898594349" label="ash-enable-stable-overview-order"/>
   <int value="-898499262" label="ImprovedA2HS:enabled"/>
@@ -103485,6 +104086,7 @@
   <int value="-891856063" label="MidiManagerAndroid:enabled"/>
   <int value="-885601782" label="enable-contextual-search"/>
   <int value="-884864731" label="WebPaymentsSingleAppUiSkip:enabled"/>
+  <int value="-881854123" label="enable-heap-profiling"/>
   <int value="-881054479" label="WebAssemblyStreaming:disabled"/>
   <int value="-876148583" label="ArcBootCompletedBroadcast:disabled"/>
   <int value="-867087281" label="enable-virtual-keyboard"/>
@@ -103564,6 +104166,7 @@
   <int value="-536289234" label="ssl-interstitial-v2-colorful"/>
   <int value="-535208779" label="enable-native-cups"/>
   <int value="-531810064" label="saveas-menu-label"/>
+  <int value="-531651776" label="NewRemotePlaybackPipeline:enabled"/>
   <int value="-528927088" label="AutofillCreditCardPopupLayout:disabled"/>
   <int value="-528149352" label="WebRtcUseEchoCanceller3:enabled"/>
   <int value="-519960638" label="enable-site-engagement-service"/>
@@ -103596,6 +104199,7 @@
   <int value="-396994784" label="enable-vr-shell"/>
   <int value="-396496344" label="ViewsTaskManager:enabled"/>
   <int value="-395606844" label="enable-site-settings"/>
+  <int value="-395454065" label="DisablePostScriptPrinting:disabled"/>
   <int value="-387606010" label="ArcBootCompletedBroadcast:enabled"/>
   <int value="-385337473" label="enable-fast-unload"/>
   <int value="-384589459" label="disable-supervised-user-safesites"/>
@@ -103652,6 +104256,7 @@
   <int value="-206393363" label="enable-scroll-prediction"/>
   <int value="-204355195" label="secondary-ui-md"/>
   <int value="-202007318" label="AndroidAIAFetching:enabled"/>
+  <int value="-196110497" label="force-text-direction"/>
   <int value="-195029497" label="MediaRemoting:disabled"/>
   <int value="-192919826" label="ViewsSimplifiedFullscreenUI:enabled"/>
   <int value="-192389983" label="NoStatePrefetch:enabled"/>
@@ -103660,7 +104265,6 @@
   <int value="-165756594" label="enable-touch-feedback"/>
   <int value="-159877930" label="MaterialDesignUserManager:disabled"/>
   <int value="-158549277" label="enable-embeddedsearch-api"/>
-  <int value="-158197254" label="enable-credential-manager-api"/>
   <int value="-152677714" label="AsmJsToWebAssembly:enabled"/>
   <int value="-147283486" label="enable-network-portal-notification"/>
   <int value="-146552997" label="enable-affiliation-based-matching"/>
@@ -103682,6 +104286,7 @@
   <int value="-68877684" label="BackgroundVideoTrackOptimization:enabled"/>
   <int value="-68225452" label="enable-translate-new-ux"/>
   <int value="-58242474" label="ash-disable-swipe-to-close-in-overview-mode"/>
+  <int value="-57986995" label="DisablePostScriptPrinting:enabled"/>
   <int value="-55944747" label="disable-child-account-detection"/>
   <int value="-52483823" label="disable-new-video-renderer"/>
   <int value="-52241456" label="enable-single-click-autofill"/>
@@ -103859,6 +104464,7 @@
   <int value="646252875" label="ReadItLaterInMenu:enabled"/>
   <int value="646738320" label="disable-gesture-editing"/>
   <int value="650602639" label="enable-autofill-keyboard-accessory-view"/>
+  <int value="651421878" label="VideoRotateToFullscreen:enabled"/>
   <int value="652561231" label="CustomContextMenu:enabled"/>
   <int value="683410401"
       label="enable-proximity-auth-bluetooth-low-energy-discovery"/>
@@ -103946,6 +104552,7 @@
   <int value="1019857902"
       label="disable-hide-inactive-stacked-tab-close-buttons"/>
   <int value="1022992701" label="enable-origin-chip-always"/>
+  <int value="1033412163" label="OmniboxDisplayTitleForCurrentUrl:enabled"/>
   <int value="1033597574" label="disable-layer-squashing"/>
   <int value="1036068554" label="enable-android-pay-integration-v2"/>
   <int value="1043334401" label="disable-slimming-paint-invalidation"/>
@@ -104002,6 +104609,7 @@
   <int value="1209221384" label="enable-experimental-accessibility-features"/>
   <int value="1210343926" label="enable-drop-sync-credential"/>
   <int value="1211284676" label="V8NoTurbo:enabled"/>
+  <int value="1214455758" label="VideoRotateToFullscreen:disabled"/>
   <int value="1219628795" label="PrintScaling:disabled"/>
   <int value="1219826373" label="ServiceWorkerNavigationPreload:enabled"/>
   <int value="1220171692" label="SpeculativeLaunchServiceWorker:enabled"/>
@@ -104052,6 +104660,7 @@
   <int value="1372199493" label="windows10-custom-titlebar"/>
   <int value="1372680885" label="enable-mtp-write-support"/>
   <int value="1373777956" label="disable-threaded-gpu-rasterization"/>
+  <int value="1376437124" label="show-cert-link"/>
   <int value="1378310092" label="disable-suggestions-service"/>
   <int value="1381746642" label="enable-automatic-password-saving"/>
   <int value="1382500494" label="disable-drive-apps-in-app-list"/>
@@ -104119,6 +104728,7 @@
   <int value="1658644418" label="disable-app-list-voice-search"/>
   <int value="1661925474" label="silent-debugger-extension-api"/>
   <int value="1668611601" label="enable-encrypted-media"/>
+  <int value="1673427566" label="ChromeHomeExpandButton:disabled"/>
   <int value="1689123607" label="enable-app-link"/>
   <int value="1689183477" label="enable-merge-key-char-events"/>
   <int value="1691568199" label="AndroidSpellCheckerNonLowEnd:disabled"/>
@@ -104181,7 +104791,6 @@
   <int value="1891210939" label="enable-blink-features"/>
   <int value="1892201400" label="enable-password-separated-signin-flow"/>
   <int value="1893317228" label="WebPayments:enabled"/>
-  <int value="1895587769" label="CredentialManagementAPI:disabled"/>
   <int value="1896456311" label="enable-password-save-in-page-navigation"/>
   <int value="1898231011" label="enable-native-notifications"/>
   <int value="1900529524" label="disable-touch-drag-drop"/>
@@ -104227,6 +104836,7 @@
   <int value="2067634730" label="LsdPermissionPrompt:disabled"/>
   <int value="2071340353" label="progress-bar-completion"/>
   <int value="2071461362" label="disable-credit-card-scan"/>
+  <int value="2076787478" label="OmniboxDisplayTitleForCurrentUrl:disabled"/>
   <int value="2076903744" label="progress-bar-animation"/>
   <int value="2077917024"
       label="enable-supervised-user-managed-bookmarks-folder"/>
@@ -104469,6 +105079,7 @@
   <int value="20" label="Has border radius"/>
   <int value="21" label="Has clip related property"/>
   <int value="22" label="Has box shadow from non-root layer"/>
+  <int value="23" label="Is not stacking context"/>
 </enum>
 
 <enum name="MakeChromeDefaultResult" type="int">
@@ -105809,6 +106420,17 @@
   <int value="2" label="IPsec"/>
 </enum>
 
+<enum name="MigrationUIFirstScreen" type="int">
+  <int value="0" label="Ready"/>
+  <int value="1" label="Resume"/>
+  <int value="2" label="LowStorage"/>
+</enum>
+
+<enum name="MigrationUIUserChoice" type="int">
+  <int value="0" label="Update"/>
+  <int value="1" label="Skip"/>
+</enum>
+
 <enum name="MissingStartType" type="int">
   <int value="0" label="Nothing missing"/>
   <int value="1" label="Start missing"/>
@@ -109459,6 +110081,8 @@
       label="PERMISSION_BUBBLE_PERMISSION_PROTECTED_MEDIA_IDENTIFIER"/>
   <int value="11" label="PERMISSION_BUBBLE_PERMISSION_PUSH_MESSAGING"/>
   <int value="12" label="PERMISSION_BUBBLE_PERMISSION_FLASH"/>
+  <int value="13" label="PERMISSION_MEDIASTREAM_MIC"/>
+  <int value="14" label="PERMISSION_MEDIASTREAM_CAMERA"/>
 </enum>
 
 <enum name="PermissionStatus" type="int">
@@ -110682,6 +111306,7 @@
   <int value="3" label="Webdata token DB error"/>
   <int value="4" label="Webdata DB error"/>
   <int value="5" label="Webdata keyword DB error"/>
+  <int value="8" label="Payment manifest DB error"/>
 </enum>
 
 <enum name="ProfileGaiaPhotoOptions" type="int">
@@ -113067,6 +113692,13 @@
   <int value="9" label="Other Instant"/>
 </enum>
 
+<enum name="SearchAnswerRequestResult" type="int">
+  <int value="0" label="Another Request Started"/>
+  <int value="1" label="Failed"/>
+  <int value="2" label="No Answer"/>
+  <int value="3" label="Received Answer"/>
+</enum>
+
 <enum name="SearchEngine" type="int">
   <obsolete>
     Deprecated 8/2013. No longer generated.
@@ -114246,6 +114878,9 @@
   <int value="15" label="BLIMP"/>
   <int value="16" label="DATA_REDUCTION_PROMO"/>
   <int value="17" label="HISTORY_LINK_COPIED"/>
+  <int value="18" label="TRANSLATE_ALWAYS"/>
+  <int value="19" label="TRANSLATE_NEVER"/>
+  <int value="20" label="TRANSLATE_NEVER_SITE"/>
 </enum>
 
 <enum name="SnippetOpenMethod" type="int">
@@ -119136,6 +119771,14 @@
   <affected-histogram name="CaptivePortal.Session.DiscrepancyWithShill"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="ActivityType" separator=".">
+  <suffix name="TabbedMode" label="TabbedMode"/>
+  <suffix name="CustomTabs" label="CustomTabs"/>
+  <suffix name="WebApp" label="WebApp"/>
+  <suffix name="WebApk" label="WebApk"/>
+  <affected-histogram name="MobileStartup.IntentToCreationTime"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="AffiliationDummyData" separator=".">
   <suffix name="OnStartup"
       label="with the dummy data being requested shortly after start-up"/>
@@ -119321,6 +119964,20 @@
   <affected-histogram name="Autofill.SaveCreditCardPrompt"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="AutofillSaveCreditCardPromptPreviousUserDecision"
+    separator=".">
+  <suffix name="PreviouslyAccepted"
+      label="User had previously accepted save credit card prompt"/>
+  <suffix name="PreviouslyDenied"
+      label="User had previously denied save credit card prompt"/>
+  <affected-histogram name="Autofill.CreditCardInfoBar.Local"/>
+  <affected-histogram name="Autofill.CreditCardInfoBar.Server"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local.FirstShow"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt.Local.Reshows"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.FirstShow"/>
+  <affected-histogram name="Autofill.SaveCreditCardPrompt.Upload.Reshows"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="AutofillSaveCreditCardPromptShow" separator=".">
   <suffix name="FirstShow"
       label="first time prompt is shown for a single credit card submit"/>
@@ -119566,6 +120223,10 @@
   <affected-histogram name="SimpleCache.CheckCRCResult"/>
   <affected-histogram name="SimpleCache.CreationToIndex"/>
   <affected-histogram name="SimpleCache.CreationToIndexFail"/>
+  <affected-histogram name="SimpleCache.DiskCloseLatency"/>
+  <affected-histogram name="SimpleCache.DiskCreateLatency"/>
+  <affected-histogram name="SimpleCache.DiskOpenLatency"/>
+  <affected-histogram name="SimpleCache.DiskWriteLatency"/>
   <affected-histogram name="SimpleCache.EntryCreatedAndStream2Omitted"/>
   <affected-histogram name="SimpleCache.EntryCreationResult"/>
   <affected-histogram name="SimpleCache.EntryCreationTime"/>
@@ -119616,6 +120277,8 @@
   <affected-histogram name="SimpleCache.MaxCacheSizeOnInit"/>
   <affected-histogram name="SimpleCache.OpenEntryIndexState"/>
   <affected-histogram name="SimpleCache.PercentFullOnInit"/>
+  <affected-histogram name="SimpleCache.QueueLatency.CreateEntry"/>
+  <affected-histogram name="SimpleCache.QueueLatency.OpenEntry"/>
   <affected-histogram name="SimpleCache.ReadIsParallelizable"/>
   <affected-histogram name="SimpleCache.ReadResult"/>
   <affected-histogram name="SimpleCache.StaleIndexExtraEntryCount"/>
@@ -121159,6 +121822,16 @@
   <affected-histogram name="SiteEngagementService.EngagementScoreBucket"/>
 </histogram_suffixes>
 
+<histogram_suffixes name="EnterpriseRetrievePolicyResponse" separator=".">
+  <owner>emaxx@chromium.org</owner>
+  <owner>igorcov@chromium.org</owner>
+  <suffix name="Device" label="Device policy fetch response."/>
+  <suffix name="DeviceLocalAccount"
+      label="DeviceLocalAccount policy fetch response."/>
+  <suffix name="User" label="User policy fetch response."/>
+  <affected-histogram name="Enterprise.RetrievePolicyResponse"/>
+</histogram_suffixes>
+
 <histogram_suffixes name="EventLatencyOS" separator=".">
   <suffix name="MOUSE_WHEEL"/>
   <suffix name="TOUCH_MOVED"/>
@@ -127459,6 +128132,12 @@
   <affected-histogram
       name="TaskScheduler.TaskLatency.UserBlockingTaskPriority"/>
   <affected-histogram name="TaskScheduler.TaskLatency.UserVisibleTaskPriority"/>
+  <affected-histogram
+      name="TaskScheduler.TaskLatencyMicroseconds.BackgroundTaskPriority"/>
+  <affected-histogram
+      name="TaskScheduler.TaskLatencyMicroseconds.UserBlockingTaskPriority"/>
+  <affected-histogram
+      name="TaskScheduler.TaskLatencyMicroseconds.UserVisibleTaskPriority"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="TaskSchedulerTaskPriority" separator=".">
@@ -127489,6 +128168,7 @@
       Deprecated 12/2016. Pool name removed from task latency histogram name.
     </obsolete>
   </affected-histogram>
+  <affected-histogram name="TaskScheduler.TaskLatencyMicroseconds"/>
 </histogram_suffixes>
 
 <histogram_suffixes name="TaskSchedulerWorkerPool" separator=".">
diff --git a/src/tools/metrics/histograms/presubmit_bad_message_reasons.py b/src/tools/metrics/histograms/presubmit_bad_message_reasons.py
index 0548607..248754a 100644
--- a/src/tools/metrics/histograms/presubmit_bad_message_reasons.py
+++ b/src/tools/metrics/histograms/presubmit_bad_message_reasons.py
@@ -26,13 +26,13 @@
 
   START_MARKER='^enum (class )?BadMessageReason {'
   END_MARKER='^BAD_MESSAGE_MAX'
-  if update_histogram_enum.HistogramNeedsUpdate(
+  presubmit_error = update_histogram_enum.CheckPresubmitErrors(
       histogram_enum_name=histogram_name,
+      update_script_name='update_bad_message_reasons.py',
       source_enum_path=source_path,
       start_marker=START_MARKER,
-      end_marker=END_MARKER):
-    return [output_api.PresubmitPromptWarning(
-        'bad_messages.h has been updated but histogram.xml does not '
-        'appear to be updated.\nPlease run:\n'
-        '  python tools/metrics/histograms/update_bad_message_reasons.py\n')]
+      end_marker=END_MARKER)
+  if presubmit_error:
+    return [output_api.PresubmitPromptWarning(presubmit_error,
+                                              items=[source_path])]
   return []
diff --git a/src/tools/metrics/histograms/presubmit_scheme_histograms.py b/src/tools/metrics/histograms/presubmit_scheme_histograms.py
index 4adccb9..9d7aa70 100644
--- a/src/tools/metrics/histograms/presubmit_scheme_histograms.py
+++ b/src/tools/metrics/histograms/presubmit_scheme_histograms.py
@@ -18,14 +18,13 @@
   if source_file not in affected_files:
     return []
 
-  if update_histogram_enum.HistogramNeedsUpdate(
+  presubmit_error = update_histogram_enum.CheckPresubmitErrors(
       histogram_enum_name='ShouldAllowOpenURLFailureScheme',
+      update_script_name='update_should_allow_open_url_histograms.py',
       source_enum_path=source_file,
       start_marker='^enum ShouldAllowOpenURLFailureScheme {',
-      end_marker='^SCHEME_LAST'):
-    return [output_api.PresubmitPromptWarning(
-        'ShouldAllowOpenURLFailureScheme has been updated but histogram.xml '
-        'does not appear to be updated.\nPlease run:\n'
-        '  python tools/metrics/histograms/'
-        'update_should_allow_open_url_histograms.py\n')]
+      end_marker='^SCHEME_LAST')
+  if presubmit_error:
+    return [output_api.PresubmitPromptWarning(presubmit_error,
+                                              items=[source_file])]
   return []
diff --git a/src/tools/metrics/histograms/update_histogram_enum.py b/src/tools/metrics/histograms/update_histogram_enum.py
index f0a29e0..7e4c584 100644
--- a/src/tools/metrics/histograms/update_histogram_enum.py
+++ b/src/tools/metrics/histograms/update_histogram_enum.py
@@ -87,12 +87,12 @@
         label = m.group(1)
       else:
         continue
-    # If two enum labels have the same value
-    if enum_value in result:
-      return result, (result[enum_value], label)
     if strip_k_prefix:
       assert label.startswith('k'), "Enum " + label + " should start with 'k'."
       label = label[1:]
+    # If two enum labels have the same value
+    if enum_value in result:
+      return result, (result[enum_value], label)
     result[enum_value] = label
     enum_value += 1
   return result, None
@@ -180,30 +180,45 @@
   return (xml, new_xml)
 
 
-def HistogramNeedsUpdate(histogram_enum_name, source_enum_path, start_marker,
+def CheckPresubmitErrors(histogram_enum_name, update_script_name,
+                         source_enum_path, start_marker,
                          end_marker, strip_k_prefix = False):
-  """Reads a C++ enum from a .h file and does a dry run of updating
-  histograms.xml to match. Returns true if the histograms.xml file would be
-  changed.
+  """Reads a C++ enum from a .h file and checks for presubmit violations:
+  1. Failure to update histograms.xml to match
+  2. Introduction of duplicate values.
 
   Args:
       histogram_enum_name: The name of the XML <enum> attribute to update.
+      update_script_name: The name of an update script to run to update the UMA
+          mappings for the enum.
       source_enum_path: A unix-style path, relative to src/, giving
           the C++ header file from which to read the enum.
       start_marker: A regular expression that matches the start of the C++ enum.
       end_marker: A regular expression that matches the end of the C++ enum.
       strip_k_prefix: Set to True if enum values are declared as kFoo and the
           'k' should be stripped.
+
+  Returns:
+      A string with presubmit failure description, or None (if no failures).
   """
   Log('Reading histogram enum definition from "{0}".'.format(source_enum_path))
   source_enum_values, duplicated_values = ReadHistogramValues(
       source_enum_path, start_marker, end_marker, strip_k_prefix)
+
   if duplicated_values:
-    return False, duplicated_values
+    return ('%s enum has been updated and there exist '
+            'duplicated values between (%s) and (%s)' % (histogram_enum_name,
+                                                         duplicated_values[0],
+                                                         duplicated_values[1]))
 
   (xml, new_xml) = _GetOldAndUpdatedXml(histogram_enum_name, source_enum_values,
                                         source_enum_path)
-  return xml != new_xml, None
+  if xml != new_xml:
+    return ('%s enum has been updated and the UMA mapping needs to be '
+            'regenerated. Please run %s in src/tools/metrics/histograms/ to '
+            'update the mapping.' % (histogram_enum_name, update_script_name))
+
+  return None
 
 
 def UpdateHistogramFromDict(histogram_enum_name, source_enum_values,
diff --git a/src/tools/metrics/ukm/ukm.xml b/src/tools/metrics/ukm/ukm.xml
index 541f1f6..85d3882 100644
--- a/src/tools/metrics/ukm/ukm.xml
+++ b/src/tools/metrics/ukm/ukm.xml
@@ -15,7 +15,8 @@
   <owner>sebsg@chromium.org</owner>
   <metric name="UploadDecision">
     <summary>
-      Whether the upload was proposed to the user or the reason why it was not.
+      Whether the upload was proposed to the user or the reasons why it was not.
+      The value is a bitmask of |CardUploadDecisionMetric|.
     </summary>
   </metric>
 </event>
@@ -24,7 +25,8 @@
   <owner>csashi@google.com</owner>
   <summary>
     Recorded when we parse a form to log whether developer has used autocomplete
-    markup or UPI-VPA hints.
+    markup or UPI-VPA hints. The value is a bitmask of
+    |DeveloperEngagementMetric|.
   </summary>
   <metric name="DeveloperEngagement"/>
 </event>
@@ -195,6 +197,13 @@
   </metric>
 </event>
 
+<event name="Plugins.FlashInstance">
+  <owner>tommycli@chromium.org</owner>
+  <summary>
+    Recorded when a Flash object instance is created.
+  </summary>
+</event>
+
 <event name="Translate">
   <owner>hamelphi@chromium.org</owner>
   <summary>
diff --git a/src/tools/perf/BUILD.gn b/src/tools/perf/BUILD.gn
index 7c921f7..241454e 100644
--- a/src/tools/perf/BUILD.gn
+++ b/src/tools/perf/BUILD.gn
@@ -22,9 +22,6 @@
     # For blink_perf benchmarks.
     "//third_party/WebKit/PerformanceTests/",
 
-    # For blink_perf.BlinkPerfPywebsocket benchmark.
-    "//third_party/pywebsocket/",
-
     # For smoothness.tough_canvas_cases
     "//chrome/test/data/perf/",
 
diff --git a/src/tools/perf/benchmark.csv b/src/tools/perf/benchmark.csv
index 9e80ed3..ae92a5d 100644
--- a/src/tools/perf/benchmark.csv
+++ b/src/tools/perf/benchmark.csv
@@ -13,7 +13,6 @@
 blink_perf.layout,eae@chromium.org,
 blink_perf.paint,wangxianzhu@chromium.org,
 blink_perf.parser,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-blink_perf.pywebsocket,"tyoshino@chromium.org, yhirano@chromium.org",
 blink_perf.shadow_dom,hayato@chromium.org,
 blink_perf.svg,"kouhei@chromium.org, fs@opera.com",
 blink_style.key_mobile_sites,,
@@ -21,21 +20,10 @@
 blink_style.top_25,,
 blob_storage.blob_storage,,
 cc_perftests,enne@chromium.org,
-dromaeo.cssqueryjquery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
 dromaeo.domcoreattr,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
 dromaeo.domcoremodify,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
 dromaeo.domcorequery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
 dromaeo.domcoretraverse,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibattrjquery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibattrprototype,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibeventjquery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibeventprototype,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibmodifyjquery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibmodifyprototype,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibstylejquery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibstyleprototype,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibtraversejquery,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
-dromaeo.jslibtraverseprototype,"yukishiino@chromium.org, bashi@chromium.org, haraken@chromium.org",
 dummy_benchmark.noisy_benchmark_1,,
 dummy_benchmark.stable_benchmark_1,,
 gpu_perftests,reveman@chromium.org,
@@ -69,10 +57,6 @@
 memory.top_10_mobile,perezju@chromium.org,
 memory.top_10_mobile_stress,perezju@chromium.org,
 octane,"bmeurer@chromium.org, mvstanton@chromium.org",
-oilpan_gc_times.blink_perf_stress,,
-oilpan_gc_times.key_silk_cases,,
-oilpan_gc_times.sync_scroll.key_mobile_sites_smooth,,
-oilpan_gc_times.tough_animation_cases,peria@chromium.org,
 oortonline,,
 oortonline_tbmv2,,
 page_cycler_v2.basic_oopif,nasko@chromium.org,
@@ -103,7 +87,6 @@
 repaint.gpu_rasterization.key_mobile_sites_repaint,"wkorman@chromium.org, vmpstr@chromium.org",
 repaint.key_mobile_sites_repaint,"wkorman@chromium.org, vmpstr@chromium.org",
 resource_sizes,"agrieve@chromium.org, rnephew@chromium.org, perezju@chromium.org",
-robohornet_pro,,
 scheduler.tough_scheduling_cases,"skyostil@chromium.org, brianderson@chromium.org",
 service_worker.service_worker,horo@chromium.org,
 service_worker.service_worker_micro_benchmark,horo@chromium.org,
diff --git a/src/tools/perf/benchmarks/blink_perf.py b/src/tools/perf/benchmarks/blink_perf.py
index c30bcbc..5f6786c 100644
--- a/src/tools/perf/benchmarks/blink_perf.py
+++ b/src/tools/perf/benchmarks/blink_perf.py
@@ -21,7 +21,6 @@
 from telemetry.value import trace
 
 
-from benchmarks import pywebsocket_server
 from measurements import timeline_controller
 from page_sets import webgl_supported_shared_state
 
@@ -146,7 +145,7 @@
     options.AppendExtraBrowserArgs([
         '--js-flags=--expose_gc',
         '--enable-experimental-web-platform-features',
-        '--disable-gesture-requirement-for-media-playback',
+        '--ignore-autoplay-restrictions',
         '--enable-experimental-canvas-features',
         # TODO(qinmin): After fixing crbug.com/592017, remove this command line.
         '--reduce-security-for-testing'
@@ -278,15 +277,6 @@
     return CreateStorySetFromPath(path, SKIPPED_FILE)
 
 
-class _SharedPywebsocketPageState(shared_page_state.SharedPageState):
-  """Runs a pywebsocket server."""
-
-  def __init__(self, test, finder_options, user_story_set):
-    super(_SharedPywebsocketPageState, self).__init__(
-        test, finder_options, user_story_set)
-    self.platform.StartLocalServer(pywebsocket_server.PywebsocketServer())
-
-
 @benchmark.Owner(emails=['yukishiino@chromium.org',
                          'bashi@chromium.org',
                          'haraken@chromium.org'])
@@ -339,6 +329,10 @@
       page.skipped_gpus = []
     return story_set
 
+  def SetExtraBrowserOptions(self, options):
+    options.AppendExtraBrowserArgs([
+        '--enable-color-correct-rendering',
+    ])
 
 @benchmark.Owner(emails=['yukishiino@chromium.org',
                          'bashi@chromium.org',
@@ -400,28 +394,3 @@
   def ShouldDisable(cls, possible_browser):  # http://crbug.com/702319
     return possible_browser.platform.GetDeviceTypeName() == 'Nexus 5X'
 
-
-
-# Disabled on Windows and ChromeOS due to https://crbug.com/521887
-#@benchmark.Disabled('win', 'chromeos')
-# Disabling on remaining platforms due to heavy flake https://crbug.com/646938
-@benchmark.Disabled('all')
-@benchmark.Owner(emails=['tyoshino@chromium.org', 'yhirano@chromium.org'])
-class BlinkPerfPywebsocket(_BlinkPerfBenchmark):
-  """The blink_perf.pywebsocket tests measure turn-around-time of 10MB
-  send/receive for XHR, Fetch API and WebSocket. We might ignore < 10%
-  regressions, because the tests are noisy and such regressions are
-  often unreproducible (https://crbug.com/549017).
-  """
-  tag = 'pywebsocket'
-  subdir = 'Pywebsocket'
-
-  def CreateStorySet(self, options):
-    path = os.path.join(BLINK_PERF_BASE_DIR, self.subdir)
-    return CreateStorySetFromPath(
-        path, SKIPPED_FILE,
-        shared_page_state_class=_SharedPywebsocketPageState)
-
-  @classmethod
-  def ShouldDisable(cls, possible_browser):
-    return cls.IsSvelte(possible_browser)  # http://crbug.com/551950
diff --git a/src/tools/perf/benchmarks/blink_perf_unittest.py b/src/tools/perf/benchmarks/blink_perf_unittest.py
index 26be077..e4b1277 100644
--- a/src/tools/perf/benchmarks/blink_perf_unittest.py
+++ b/src/tools/perf/benchmarks/blink_perf_unittest.py
@@ -4,7 +4,6 @@
 import os
 import unittest
 
-from telemetry import decorators
 from telemetry import story
 from telemetry.page import page as page_module
 from telemetry.testing import options_for_unittests
@@ -39,7 +38,6 @@
     story_set.AddStory(page)
     return story_set
 
-  @decorators.Disabled('win')  # crbug.com/715822
   def testBlinkPerfTracingMetricsForMeasureTime(self):
     results = self.RunMeasurement(measurement=self._measurement,
         ps=self._CreateStorySetForTestFile('append-child-measure-time.html'),
@@ -57,7 +55,6 @@
     self.assertEquals(len(update_layout_trees), 1)
     self.assertGreater(update_layout_trees[0].GetRepresentativeNumber, 0.1)
 
-  @decorators.Disabled('android')  # crbug.com/715685
   def testBlinkPerfTracingMetricsForMeasureFrameTime(self):
     results = self.RunMeasurement(measurement=self._measurement,
         ps=self._CreateStorySetForTestFile(
diff --git a/src/tools/perf/benchmarks/dromaeo.py b/src/tools/perf/benchmarks/dromaeo.py
index 86be999..a584779 100644
--- a/src/tools/perf/benchmarks/dromaeo.py
+++ b/src/tools/perf/benchmarks/dromaeo.py
@@ -187,197 +187,3 @@
   @classmethod
   def Name(cls):
     return 'dromaeo.domcoretraverse'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibAttrJquery(_DromaeoBenchmark):
-  """Dromaeo JSLib attr jquery JavaScript benchmark.
-
-  Tests setting and getting DOM node attributes using the jQuery JavaScript
-  Library.
-  """
-  tag = 'jslibattrjquery'
-  query_param = 'jslib-attr-jquery'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibattrjquery'
-
-  @classmethod
-  def ShouldDisable(cls, possible_browser):
-    # http://crbug.com/634055 (Android One).
-    return cls.IsSvelte(possible_browser)
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibAttrPrototype(_DromaeoBenchmark):
-  """Dromaeo JSLib attr prototype JavaScript benchmark.
-
-  Tests setting and getting DOM node attributes using the jQuery JavaScript
-  Library.
-  """
-  tag = 'jslibattrprototype'
-  query_param = 'jslib-attr-prototype'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibattrprototype'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibEventJquery(_DromaeoBenchmark):
-  """Dromaeo JSLib event jquery JavaScript benchmark.
-
-  Tests binding, removing, and triggering DOM events using the jQuery JavaScript
-  Library.
-  """
-  tag = 'jslibeventjquery'
-  query_param = 'jslib-event-jquery'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibeventjquery'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibEventPrototype(_DromaeoBenchmark):
-  """Dromaeo JSLib event prototype JavaScript benchmark.
-
-  Tests binding, removing, and triggering DOM events using the Prototype
-  JavaScript Library.
-  """
-  tag = 'jslibeventprototype'
-  query_param = 'jslib-event-prototype'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibeventprototype'
-
-
-# win-ref: http://crbug.com/598705
-# android: http://crbug.com/503138
-# linux: http://crbug.com/583075
-@benchmark.Disabled('win-reference', 'android', 'linux')
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibModifyJquery(_DromaeoBenchmark):
-  """Dromaeo JSLib modify jquery JavaScript benchmark.
-
-  Tests creating and injecting DOM nodes into a document using the jQuery
-  JavaScript Library.
-  """
-  tag = 'jslibmodifyjquery'
-  query_param = 'jslib-modify-jquery'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibmodifyjquery'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibModifyPrototype(_DromaeoBenchmark):
-  """Dromaeo JSLib modify prototype JavaScript benchmark.
-
-  Tests creating and injecting DOM nodes into a document using the Prototype
-  JavaScript Library.
-  """
-  tag = 'jslibmodifyprototype'
-  query_param = 'jslib-modify-prototype'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibmodifyprototype'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibStyleJquery(_DromaeoBenchmark):
-  """Dromaeo JSLib style jquery JavaScript benchmark.
-
-  Tests getting and setting CSS information on DOM elements using the jQuery
-  JavaScript Library.
-  """
-  tag = 'jslibstylejquery'
-  query_param = 'jslib-style-jquery'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibstylejquery'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibStylePrototype(_DromaeoBenchmark):
-  """Dromaeo JSLib style prototype JavaScript benchmark.
-
-  Tests getting and setting CSS information on DOM elements using the jQuery
-  JavaScript Library.
-  """
-  tag = 'jslibstyleprototype'
-  query_param = 'jslib-style-prototype'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibstyleprototype'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibTraverseJquery(_DromaeoBenchmark):
-  """Dromaeo JSLib traverse jquery JavaScript benchmark.
-
-
-  Tests getting and setting CSS information on DOM elements using the Prototype
-  JavaScript Library.
-  """
-  tag = 'jslibtraversejquery'
-  query_param = 'jslib-traverse-jquery'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibtraversejquery'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoJslibTraversePrototype(_DromaeoBenchmark):
-  """Dromaeo JSLib traverse prototype JavaScript benchmark.
-
-  Tests traversing a DOM structure using the jQuery JavaScript Library.
-  """
-  tag = 'jslibtraverseprototype'
-  query_param = 'jslib-traverse-prototype'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.jslibtraverseprototype'
-
-
-@benchmark.Owner(emails=['yukishiino@chromium.org',
-                         'bashi@chromium.org',
-                         'haraken@chromium.org'])
-class DromaeoCSSQueryJquery(_DromaeoBenchmark):
-  """Dromaeo CSS Query jquery JavaScript benchmark.
-
-  Tests traversing a DOM structure using the Prototype JavaScript Library.
-  """
-  tag = 'cssqueryjquery'
-  query_param = 'cssquery-jquery'
-
-  @classmethod
-  def Name(cls):
-    return 'dromaeo.cssqueryjquery'
diff --git a/src/tools/perf/benchmarks/jetstream.py b/src/tools/perf/benchmarks/jetstream.py
index fb30892..a69f08a 100644
--- a/src/tools/perf/benchmarks/jetstream.py
+++ b/src/tools/perf/benchmarks/jetstream.py
@@ -56,7 +56,7 @@
           }
           return null;
         })();
-        """, timeout=600)
+        """, timeout=60*12)
     result = json.loads(result.partition(': ')[2])
 
     all_score_lists = []
@@ -75,8 +75,6 @@
     results.AddSummaryValue(list_of_scalar_values.ListOfScalarValues(
         None, 'Score', 'score', all_scores))
 
-
-@benchmark.Disabled('android')
 @benchmark.Owner(emails=['bmeurer@chromium.org', 'mvstanton@chromium.org'])
 class Jetstream(perf_benchmark.PerfBenchmark):
   test = _JetstreamMeasurement
diff --git a/src/tools/perf/benchmarks/media.py b/src/tools/perf/benchmarks/media.py
index 32a408f..ddccefb 100644
--- a/src/tools/perf/benchmarks/media.py
+++ b/src/tools/perf/benchmarks/media.py
@@ -156,8 +156,7 @@
     # By default, Chrome on Android does not allow autoplay
     # of media: it requires a user gesture event to start a video.
     # The following option works around that.
-    options.AppendExtraBrowserArgs(
-        ['--disable-gesture-requirement-for-media-playback'])
+    options.AppendExtraBrowserArgs(['--ignore-autoplay-restrictions'])
 
 
 # This isn't running anywhere. See crbug/709161.
@@ -218,4 +217,4 @@
     # Needed to allow XHR requests to return stream objects.
     options.AppendExtraBrowserArgs(
         ['--enable-experimental-web-platform-features',
-         '--disable-gesture-requirement-for-media-playback'])
+         '--ignore-autoplay-restrictions'])
diff --git a/src/tools/perf/benchmarks/pywebsocket_server.py b/src/tools/perf/benchmarks/pywebsocket_server.py
deleted file mode 100644
index 3510900..0000000
--- a/src/tools/perf/benchmarks/pywebsocket_server.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import os
-import sys
-
-from core import path_util
-
-from telemetry.core import local_server
-from telemetry.core import util
-
-
-# This invokes pywebsocket's standalone.py under third_party/pywebsocket
-class PywebsocketServerBackend(local_server.LocalServerBackend):
-
-  def __init__(self):
-    super(PywebsocketServerBackend, self).__init__()
-    self.port = 8001
-    self.base_dir = os.path.relpath(
-        os.path.join(path_util.GetChromiumSrcDir(),
-                     'third_party', 'pywebsocket', 'src'),
-        start=util.GetTelemetryDir())
-
-  def StartAndGetNamedPorts(self, args):
-    return [local_server.NamedPort('http', self.port)]
-
-  def ServeForever(self):
-    os.chdir(self.base_dir)
-    cmd = [
-        sys.executable, '-m', 'mod_pywebsocket.standalone',
-        '--port', str(self.port),
-        '--log-level', 'debug',
-        '-d', 'example'
-    ]
-    os.execv(sys.executable, cmd)
-
-
-class PywebsocketServer(local_server.LocalServer):
-
-  def __init__(self):
-    super(PywebsocketServer, self).__init__(PywebsocketServerBackend)
-
-  def GetBackendStartupArgs(self):
-    return {}
diff --git a/src/tools/perf/benchmarks/robohornet_pro.py b/src/tools/perf/benchmarks/robohornet_pro.py
deleted file mode 100644
index 25e5c8b..0000000
--- a/src/tools/perf/benchmarks/robohornet_pro.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Runs Microsoft's RoboHornet Pro benchmark."""
-
-import os
-
-from core import perf_benchmark
-
-from telemetry import benchmark
-from telemetry import page as page_module
-from telemetry.page import legacy_page_test
-from telemetry import story
-from telemetry.value import scalar
-
-from metrics import power
-
-
-class _RobohornetProMeasurement(legacy_page_test.LegacyPageTest):
-
-  def __init__(self):
-    super(_RobohornetProMeasurement, self).__init__()
-    self._power_metric = None
-
-  def CustomizeBrowserOptions(self, options):
-    power.PowerMetric.CustomizeBrowserOptions(options)
-
-  def WillStartBrowser(self, platform):
-    self._power_metric = power.PowerMetric(platform)
-
-  def DidNavigateToPage(self, page, tab):
-    self._power_metric.Start(page, tab)
-
-  def ValidateAndMeasurePage(self, page, tab, results):
-    tab.ExecuteJavaScript('ToggleRoboHornet()')
-    tab.WaitForJavaScriptCondition(
-        'document.getElementById("results").innerHTML.indexOf("Total") != -1',
-        timeout=600)
-
-    self._power_metric.Stop(page, tab)
-    self._power_metric.AddResults(tab, results)
-
-    result = int(tab.EvaluateJavaScript('stopTime - startTime'))
-    results.AddValue(
-        scalar.ScalarValue(results.current_page, 'Total', 'ms', result))
-
-
-# We plan to remove this test because it doesn't give useful data, but
-# we need to wait until Chrome OS can implement support for more helpful
-# benchmarks.
-@benchmark.Enabled('chromeos')
-class RobohornetPro(perf_benchmark.PerfBenchmark):
-  """Milliseconds to complete the RoboHornetPro demo by Microsoft.
-
-  http://ie.microsoft.com/testdrive/performance/robohornetpro/
-  """
-  test = _RobohornetProMeasurement
-
-  @classmethod
-  def Name(cls):
-    return 'robohornet_pro'
-
-  def CreateStorySet(self, options):
-    ps = story.StorySet(
-        archive_data_file='../page_sets/data/robohornet_pro.json',
-        base_dir=os.path.dirname(os.path.abspath(__file__)),
-        cloud_storage_bucket=story.PARTNER_BUCKET)
-    ps.AddStory(page_module.Page(
-        'http://ie.microsoft.com/testdrive/performance/robohornetpro/',
-        ps, ps.base_dir,
-        # Measurement require use of real Date.now() for measurement.
-        make_javascript_deterministic=False))
-    return ps
diff --git a/src/tools/perf/benchmarks/v8.py b/src/tools/perf/benchmarks/v8.py
index 6e1d0b3..c431b0c 100644
--- a/src/tools/perf/benchmarks/v8.py
+++ b/src/tools/perf/benchmarks/v8.py
@@ -127,6 +127,7 @@
     return True
 
 
+@benchmark.Disabled('android') # Android runs V8MobileInfiniteScroll.
 @benchmark.Owner(emails=['ulan@chromium.org'])
 class V8InfiniteScroll(_InfiniteScrollBenchmark):
   """Measures V8 GC metrics and memory usage while scrolling the top web pages.
@@ -139,6 +140,7 @@
     return 'v8.infinite_scroll_tbmv2'
 
 @benchmark.Disabled('all')
+@benchmark.Disabled('android') # Android runs V8MobileInfiniteScroll.
 @benchmark.Owner(emails=['mvstaton@chromium.org'])
 class V8InfiniteScrollTurbo(V8InfiniteScroll):
   """Measures V8 GC metrics using Ignition+TurboFan."""
@@ -152,6 +154,8 @@
     return 'v8.infinite_scroll-turbo_tbmv2'
 
 
+@benchmark.Disabled('linux')  # crbug.com/715716
+@benchmark.Disabled('android') # Android runs V8MobileInfiniteScroll.
 @benchmark.Owner(emails=['hablich@chromium.org'])
 class V8InfiniteScrollClassic(V8InfiniteScroll):
   """Measures V8 GC metrics using the Classic pipeline."""
diff --git a/src/tools/perf/benchmarks/v8_browsing.py b/src/tools/perf/benchmarks/v8_browsing.py
index 45322cd..5613c74 100644
--- a/src/tools/perf/benchmarks/v8_browsing.py
+++ b/src/tools/perf/benchmarks/v8_browsing.py
@@ -154,7 +154,6 @@
 
 @benchmark.Owner(emails=['ulan@chromium.org'])
 @benchmark.Enabled('android')
-@benchmark.Disabled('reference')  # http://crbug.com/628631
 class V8MobileBrowsingBenchmark(_V8BrowsingBenchmark):
   PLATFORM = 'mobile'
 
@@ -163,7 +162,6 @@
     return 'v8.browsing_mobile'
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/700390
 @benchmark.Disabled('android')
 @benchmark.Disabled('all')
 @benchmark.Owner(emails=['mvstaton@chromium.org'])
@@ -181,7 +179,6 @@
 
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/628631
 @benchmark.Enabled('android')
 @benchmark.Disabled('all')
 @benchmark.Owner(emails=['mvstaton@chromium.org'])
@@ -198,7 +195,6 @@
     return 'v8.browsing_mobile_turbo'
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/700390
 @benchmark.Disabled('android')
 @benchmark.Owner(emails=['hablich@chromium.org'])
 class V8DesktopClassicBrowsingBenchmark(_V8BrowsingBenchmark):
@@ -214,7 +210,6 @@
     return 'v8.browsing_desktop_classic'
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/628631
 @benchmark.Enabled('android')
 @benchmark.Owner(emails=['hablich@chromium.org'])
 class V8MobileClassicBrowsingBenchmark(_V8BrowsingBenchmark):
@@ -242,7 +237,6 @@
     return 'v8.runtimestats.browsing_desktop'
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/700390
 @benchmark.Disabled('android')
 @benchmark.Disabled('all')
 @benchmark.Owner(emails=['mythria@chromium.org'])
@@ -260,8 +254,7 @@
     return 'v8.runtimestats.browsing_desktop_turbo'
 
 
-@benchmark.Disabled('reference',  # http://crbug.com/700390
-                    'win')        # http://crbug.com/704197
+@benchmark.Disabled('win')  # http://crbug.com/704197
 @benchmark.Disabled('android')
 @benchmark.Owner(emails=['hablich@chromium.org'])
 class V8RuntimeStatsDesktopClassicBrowsingBenchmark(
@@ -279,7 +272,6 @@
 
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/694658
 @benchmark.Enabled('android')
 @benchmark.Owner(emails=['mythria@chromium.org'])
 class V8RuntimeStatsMobileBrowsingBenchmark(
@@ -291,7 +283,6 @@
     return 'v8.runtimestats.browsing_mobile'
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/694658
 @benchmark.Enabled('android')
 @benchmark.Disabled('all')
 @benchmark.Owner(emails=['mythria@chromium.org'])
@@ -309,7 +300,6 @@
     return 'v8.runtimestats.browsing_mobile_turbo'
 
 
-@benchmark.Disabled('reference')  # http://crbug.com/694658
 @benchmark.Enabled('android')
 @benchmark.Owner(emails=['hablich@chromium.org'])
 class V8RuntimeStatsMobileClassicBrowsingBenchmark(
diff --git a/src/tools/perf/contrib/dromaeo_extras/OWNERS b/src/tools/perf/contrib/dromaeo_extras/OWNERS
new file mode 100644
index 0000000..a8a19a7
--- /dev/null
+++ b/src/tools/perf/contrib/dromaeo_extras/OWNERS
@@ -0,0 +1,3 @@
+haraken@chromium.org
+bashi@chromium.org
+yukishiino@chromium.org
diff --git a/src/tools/perf/contrib/dromaeo_extras/__init__.py b/src/tools/perf/contrib/dromaeo_extras/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/tools/perf/contrib/dromaeo_extras/__init__.py
diff --git a/src/tools/perf/contrib/dromaeo_extras/dromaeo_extras.py b/src/tools/perf/contrib/dromaeo_extras/dromaeo_extras.py
new file mode 100644
index 0000000..a470075
--- /dev/null
+++ b/src/tools/perf/contrib/dromaeo_extras/dromaeo_extras.py
@@ -0,0 +1,198 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from telemetry import benchmark
+
+from benchmarks import dromaeo
+
+
+# pylint: disable=protected-access
+_BaseDromaeoBenchmark = dromaeo._DromaeoBenchmark
+# pylint: enable=protected-access
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibAttrJquery(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib attr jquery JavaScript benchmark.
+
+  Tests setting and getting DOM node attributes using the jQuery JavaScript
+  Library.
+  """
+  tag = 'jslibattrjquery'
+  query_param = 'jslib-attr-jquery'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibattrjquery'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibAttrPrototype(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib attr prototype JavaScript benchmark.
+
+  Tests setting and getting DOM node attributes using the jQuery JavaScript
+  Library.
+  """
+  tag = 'jslibattrprototype'
+  query_param = 'jslib-attr-prototype'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibattrprototype'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibEventJquery(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib event jquery JavaScript benchmark.
+
+  Tests binding, removing, and triggering DOM events using the jQuery JavaScript
+  Library.
+  """
+  tag = 'jslibeventjquery'
+  query_param = 'jslib-event-jquery'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibeventjquery'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibEventPrototype(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib event prototype JavaScript benchmark.
+
+  Tests binding, removing, and triggering DOM events using the Prototype
+  JavaScript Library.
+  """
+  tag = 'jslibeventprototype'
+  query_param = 'jslib-event-prototype'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibeventprototype'
+
+
+# win-ref: http://crbug.com/598705
+# android: http://crbug.com/503138
+# linux: http://crbug.com/583075
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibModifyJquery(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib modify jquery JavaScript benchmark.
+
+  Tests creating and injecting DOM nodes into a document using the jQuery
+  JavaScript Library.
+  """
+  tag = 'jslibmodifyjquery'
+  query_param = 'jslib-modify-jquery'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibmodifyjquery'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibModifyPrototype(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib modify prototype JavaScript benchmark.
+
+  Tests creating and injecting DOM nodes into a document using the Prototype
+  JavaScript Library.
+  """
+  tag = 'jslibmodifyprototype'
+  query_param = 'jslib-modify-prototype'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibmodifyprototype'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibStyleJquery(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib style jquery JavaScript benchmark.
+
+  Tests getting and setting CSS information on DOM elements using the jQuery
+  JavaScript Library.
+  """
+  tag = 'jslibstylejquery'
+  query_param = 'jslib-style-jquery'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibstylejquery'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibStylePrototype(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib style prototype JavaScript benchmark.
+
+  Tests getting and setting CSS information on DOM elements using the jQuery
+  JavaScript Library.
+  """
+  tag = 'jslibstyleprototype'
+  query_param = 'jslib-style-prototype'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibstyleprototype'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibTraverseJquery(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib traverse jquery JavaScript benchmark.
+
+
+  Tests getting and setting CSS information on DOM elements using the Prototype
+  JavaScript Library.
+  """
+  tag = 'jslibtraversejquery'
+  query_param = 'jslib-traverse-jquery'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibtraversejquery'
+
+
+@benchmark.Owner(emails=['yukishiino@chromium.org',
+                         'bashi@chromium.org',
+                         'haraken@chromium.org'])
+class DromaeoJslibTraversePrototype(_BaseDromaeoBenchmark):
+  """Dromaeo JSLib traverse prototype JavaScript benchmark.
+
+  Tests traversing a DOM structure using the jQuery JavaScript Library.
+  """
+  tag = 'jslibtraverseprototype'
+  query_param = 'jslib-traverse-prototype'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.jslibtraverseprototype'
+
+
+class DromaeoCSSQueryJquery(_BaseDromaeoBenchmark):
+  """Dromaeo CSS Query jquery JavaScript benchmark.
+
+  Tests traversing a DOM structure using the Prototype JavaScript Library.
+  """
+  tag = 'cssqueryjquery'
+  query_param = 'cssquery-jquery'
+
+  @classmethod
+  def Name(cls):
+    return 'dromaeo.cssqueryjquery'
diff --git a/src/tools/perf/contrib/oilpan/OWNERS b/src/tools/perf/contrib/oilpan/OWNERS
new file mode 100644
index 0000000..2789dd3
--- /dev/null
+++ b/src/tools/perf/contrib/oilpan/OWNERS
@@ -0,0 +1,2 @@
+haraken@chromium.org
+peria@chromium.org
diff --git a/src/tools/perf/contrib/oilpan/__init__.py b/src/tools/perf/contrib/oilpan/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/tools/perf/contrib/oilpan/__init__.py
diff --git a/src/tools/perf/benchmarks/oilpan_gc_times.py b/src/tools/perf/contrib/oilpan/oilpan_benchmarks.py
similarity index 84%
rename from src/tools/perf/benchmarks/oilpan_gc_times.py
rename to src/tools/perf/contrib/oilpan/oilpan_benchmarks.py
index 91711d5..5830ca0 100644
--- a/src/tools/perf/benchmarks/oilpan_gc_times.py
+++ b/src/tools/perf/contrib/oilpan/oilpan_benchmarks.py
@@ -8,10 +8,12 @@
 
 from benchmarks import blink_perf
 from benchmarks import silk_flags
-from measurements import oilpan_gc_times
-import page_sets
+
 from telemetry import benchmark
 
+import page_sets
+
+from contrib.oilpan import oilpan_gc_times
 
 @benchmark.Enabled('content-shell')
 class OilpanGCTimesBlinkPerfStress(perf_benchmark.PerfBenchmark):
@@ -27,7 +29,6 @@
     return blink_perf.CreateStorySetFromPath(path, blink_perf.SKIPPED_FILE)
 
 
-@benchmark.Disabled('android')  # crbug.com/589567
 @benchmark.Owner(emails=['peria@chromium.org'])
 class OilpanGCTimesSmoothnessAnimation(perf_benchmark.PerfBenchmark):
   test = oilpan_gc_times.OilpanGCTimesForSmoothness
@@ -60,8 +61,3 @@
   @classmethod
   def Name(cls):
     return 'oilpan_gc_times.sync_scroll.key_mobile_sites_smooth'
-
-  @classmethod
-  def ShouldDisable(cls, possible_browser):  # http://crbug.com/597656
-      return (possible_browser.browser_type == 'reference' and
-              possible_browser.platform.GetDeviceTypeName() == 'Nexus 5X')
diff --git a/src/tools/perf/measurements/oilpan_gc_times.py b/src/tools/perf/contrib/oilpan/oilpan_gc_times.py
similarity index 98%
rename from src/tools/perf/measurements/oilpan_gc_times.py
rename to src/tools/perf/contrib/oilpan/oilpan_gc_times.py
index 832e357..228aae9 100644
--- a/src/tools/perf/measurements/oilpan_gc_times.py
+++ b/src/tools/perf/contrib/oilpan/oilpan_gc_times.py
@@ -179,7 +179,7 @@
 
   def __init__(self):
     super(OilpanGCTimesForBlinkPerf, self).__init__()
-    with open(os.path.join(os.path.dirname(__file__), '..', 'benchmarks',
+    with open(os.path.join(os.path.dirname(__file__), '..', '..', 'benchmarks',
                            'blink_perf.js'), 'r') as f:
       self._blink_perf_js = f.read()
 
diff --git a/src/tools/perf/measurements/oilpan_gc_times_unittest.py b/src/tools/perf/contrib/oilpan/oilpan_gc_times_unittest.py
similarity index 98%
rename from src/tools/perf/measurements/oilpan_gc_times_unittest.py
rename to src/tools/perf/contrib/oilpan/oilpan_gc_times_unittest.py
index 06dc9c5..5d02e64 100644
--- a/src/tools/perf/measurements/oilpan_gc_times_unittest.py
+++ b/src/tools/perf/contrib/oilpan/oilpan_gc_times_unittest.py
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-from measurements import oilpan_gc_times
+from contrib.oilpan import oilpan_gc_times
 
 from telemetry.internal.results import page_test_results
 from telemetry.page import page as page_module
@@ -100,7 +100,7 @@
 
     tab = mock.MagicMock()
     with mock.patch(
-        'measurements.oilpan_gc_times.TimelineModel') as MockTimelineModel:
+        'contrib.oilpan.oilpan_gc_times.TimelineModel') as MockTimelineModel:
       MockTimelineModel.return_value = data._model
       measurement.ValidateAndMeasurePage(None, tab, data.results)
 
@@ -134,7 +134,7 @@
     measurement._timeline_model = data._model
     tab = mock.MagicMock()
     with mock.patch(
-        'measurements.oilpan_gc_times.TimelineModel') as MockTimelineModel:
+        'contrib.oilpan.oilpan_gc_times.TimelineModel') as MockTimelineModel:
       MockTimelineModel.return_value = data._model
       measurement.ValidateAndMeasurePage(None, tab, data.results)
 
diff --git a/src/tools/perf/core/perf_data_generator.py b/src/tools/perf/core/perf_data_generator.py
index f2a468b..be77cec 100755
--- a/src/tools/perf/core/perf_data_generator.py
+++ b/src/tools/perf/core/perf_data_generator.py
@@ -3,6 +3,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+# pylint: disable=too-many-lines
+
 """Script to generate chromium.perf.json and chromium.perf.fyi.json in
 the src/testing/buildbot directory and benchmark.csv in the src/tools/perf
 directory. Maintaining these files by hand is too unwieldy.
@@ -20,9 +22,9 @@
 path_util.AddTelemetryToPath()
 
 from telemetry import benchmark as benchmark_module
-from telemetry import decorators
 from telemetry.core import discover
 from telemetry.util import bot_utils
+from telemetry import decorators
 
 
 SCRIPT_TESTS = [
@@ -598,6 +600,24 @@
   ]
 
 
+def ShouldBenchmarkBeScheduled(benchmark, platform):
+  disabled_tags = decorators.GetDisabledAttributes(benchmark)
+  enabled_tags = decorators.GetEnabledAttributes(benchmark)
+
+  # Don't run benchmarks which are disabled on all platforms.
+  if 'all' in disabled_tags:
+    return False
+
+  # If we're not on android, don't run mobile benchmarks.
+  if platform != 'android' and 'android' in enabled_tags:
+    return False
+
+  # If we're on android, don't run benchmarks disabled on mobile
+  if platform == 'android' and 'android' in disabled_tags:
+    return False
+
+  return True
+
 def generate_telemetry_tests(tester_config, benchmarks, benchmark_sharding_map,
                              benchmark_ref_build_blacklist):
   isolated_scripts = []
@@ -614,21 +634,17 @@
   num_shards = len(tester_config['swarming_dimensions'][0]['device_ids'])
   current_shard = 0
   for benchmark in benchmarks:
+    if not ShouldBenchmarkBeScheduled(benchmark, tester_config['platform']):
+      continue
+
     # First figure out swarming dimensions this test needs to be triggered on.
     # For each set of dimensions it is only triggered on one of the devices
     swarming_dimensions = []
     for dimension in tester_config['swarming_dimensions']:
-      device_affinity = None
-      if benchmark_sharding_map:
-        sharding_map = benchmark_sharding_map.get(str(num_shards), None)
-        if not sharding_map:
-          raise Exception('Invalid number of shards, generate new sharding map')
-        device_affinity = sharding_map.get(benchmark.Name(), None)
-      else:
-        # No sharding map was provided, default to legacy device
-        # affinity algorithm
-        device_affinity = bot_utils.GetDeviceAffinity(
-          num_shards, benchmark.Name())
+      sharding_map = benchmark_sharding_map.get(str(num_shards), None)
+      if not sharding_map:
+        raise Exception('Invalid number of shards, generate new sharding map')
+      device_affinity = sharding_map.get(benchmark.Name(), None)
       if device_affinity is None:
         raise Exception('Device affinity for benchmark %s not found'
           % benchmark.Name())
@@ -841,29 +857,33 @@
       os.path.dirname(os.path.dirname(file_path))))
 
 
+# not_scheduled means this test is not scheduled on any of the chromium.perf
+# waterfalls. Right now, all the below benchmarks are scheduled, but some other
+# benchmarks are not scheduled, because they're disabled on all platforms.
 BenchmarkMetadata = collections.namedtuple(
-    'BenchmarkMetadata', 'emails component')
+    'BenchmarkMetadata', 'emails component not_scheduled')
 NON_TELEMETRY_BENCHMARKS = {
-    'angle_perftests': BenchmarkMetadata('jmadill@chromium.org', None),
-    'cc_perftests': BenchmarkMetadata('enne@chromium.org', None),
-    'gpu_perftests': BenchmarkMetadata('reveman@chromium.org', None),
+    'angle_perftests': BenchmarkMetadata('jmadill@chromium.org', None, False),
+    'cc_perftests': BenchmarkMetadata('enne@chromium.org', None, False),
+    'gpu_perftests': BenchmarkMetadata('reveman@chromium.org', None, False),
     'tracing_perftests': BenchmarkMetadata(
-        'kkraynov@chromium.org, primiano@chromium.org', None),
-    'load_library_perf_tests': BenchmarkMetadata(None, None),
-    'media_perftests': BenchmarkMetadata('crouleau@chromium.org', None),
+        'kkraynov@chromium.org, primiano@chromium.org', None, False),
+    'load_library_perf_tests': BenchmarkMetadata(None, None, False),
+    'media_perftests': BenchmarkMetadata('crouleau@chromium.org', None, False),
     'performance_browser_tests': BenchmarkMetadata(
-        'hubbe@chromium.org, justinlin@chromium.org, miu@chromium.org', None)
+        'hubbe@chromium.org, justinlin@chromium.org, miu@chromium.org', None,
+        False)
 }
 
 
 # If you change this dictionary, run tools/perf/generate_perf_data
 NON_WATERFALL_BENCHMARKS = {
-    'sizes (mac)': BenchmarkMetadata('tapted@chromium.org', None),
-    'sizes (win)': BenchmarkMetadata('grt@chromium.org', None),
-    'sizes (linux)': BenchmarkMetadata('thestig@chromium.org', None),
+    'sizes (mac)': BenchmarkMetadata('tapted@chromium.org', None, False),
+    'sizes (win)': BenchmarkMetadata('grt@chromium.org', None, False),
+    'sizes (linux)': BenchmarkMetadata('thestig@chromium.org', None, False),
     'resource_sizes': BenchmarkMetadata(
         'agrieve@chromium.org, rnephew@chromium.org, perezju@chromium.org',
-        None)
+        None, False)
 }
 
 
@@ -877,11 +897,13 @@
   benchmark_list = current_benchmarks()
 
   for benchmark in benchmark_list:
+    disabled = 'all' in decorators.GetDisabledAttributes(benchmark)
+
     emails = decorators.GetEmails(benchmark)
     if emails:
       emails = ', '.join(emails)
     metadata[benchmark.Name()] = BenchmarkMetadata(
-        emails, decorators.GetComponent(benchmark))
+        emails, decorators.GetComponent(benchmark), disabled)
   return metadata
 
 
@@ -903,6 +925,11 @@
       name = re.sub('\\.reference$', '', name)
       test_names.add(name)
 
+  # Disabled tests are filtered out of the waterfall json. Add them back here.
+  for name, data in benchmark_metadata.items():
+    if data.not_scheduled:
+      test_names.add(name)
+
   error_messages = []
   for test in benchmark_names - test_names:
     error_messages.append('Remove ' + test + ' from NON_TELEMETRY_BENCHMARKS')
diff --git a/src/tools/perf/core/perf_data_generator_unittest.py b/src/tools/perf/core/perf_data_generator_unittest.py
index c6dfee0..7bc8e0b 100644
--- a/src/tools/perf/core/perf_data_generator_unittest.py
+++ b/src/tools/perf/core/perf_data_generator_unittest.py
@@ -3,10 +3,12 @@
 # found in the LICENSE file.
 import unittest
 
+from core import perf_benchmark
 from core import perf_data_generator
 from core.perf_data_generator import BenchmarkMetadata
 
 from telemetry import benchmark
+from telemetry import decorators
 
 
 class PerfDataGeneratorTest(unittest.TestCase):
@@ -32,9 +34,9 @@
         }
     }
     benchmarks = {
-        'benchmark_name_1': BenchmarkMetadata(None, None),
-        'benchmark_name_2': BenchmarkMetadata(None, None),
-        'benchmark_name_3': BenchmarkMetadata(None, None)
+        'benchmark_name_1': BenchmarkMetadata(None, None, False),
+        'benchmark_name_2': BenchmarkMetadata(None, None, False),
+        'benchmark_name_3': BenchmarkMetadata(None, None, False)
     }
 
     perf_data_generator.verify_all_tests_in_benchmark_csv(tests, benchmarks)
@@ -50,8 +52,8 @@
         }
     }
     benchmarks = {
-        'benchmark_name_2': BenchmarkMetadata(None, None),
-        'benchmark_name_3': BenchmarkMetadata(None, None),
+        'benchmark_name_2': BenchmarkMetadata(None, None, False),
+        'benchmark_name_3': BenchmarkMetadata(None, None, False),
     }
 
     with self.assertRaises(AssertionError) as context:
@@ -64,7 +66,7 @@
   def testVerifyAllTestsInBenchmarkCsvFindsFakeTest(self):
     tests = {'Random fake test': {}}
     benchmarks = {
-        'benchmark_name_1': BenchmarkMetadata(None, None)
+        'benchmark_name_1': BenchmarkMetadata(None, None, False)
     }
 
     with self.assertRaises(AssertionError) as context:
@@ -132,11 +134,58 @@
         'platform': 'android',
         'swarming_dimensions': swarming_dimensions,
     }
+    sharding_map = {'1': {'blacklisted': 0, 'not_blacklisted': 0}}
     benchmarks = [BlacklistedBenchmark, NotBlacklistedBenchmark]
     tests = perf_data_generator.generate_telemetry_tests(
-        test_config, benchmarks, None, ['blacklisted'])
+        test_config, benchmarks, sharding_map, ['blacklisted'])
 
     generated_test_names = set(t['name'] for t in tests)
     self.assertEquals(
         generated_test_names,
         {'blacklisted', 'not_blacklisted', 'not_blacklisted.reference'})
+
+  def testShouldBenchmarkBeScheduledNormal(self):
+    class bench(perf_benchmark.PerfBenchmark):
+      pass
+
+    self.assertEqual(
+        perf_data_generator.ShouldBenchmarkBeScheduled(bench(), 'win'),
+        True)
+
+  def testShouldBenchmarkBeScheduledDisabledAll(self):
+    @decorators.Disabled('all')
+    class bench(perf_benchmark.PerfBenchmark):
+      pass
+
+    self.assertEqual(
+        perf_data_generator.ShouldBenchmarkBeScheduled(bench(), 'win'),
+        False)
+
+  def testShouldBenchmarkBeScheduledOnDesktopMobileTest(self):
+    @decorators.Enabled('android')
+    class bench(perf_benchmark.PerfBenchmark):
+      pass
+
+    self.assertEqual(
+        perf_data_generator.ShouldBenchmarkBeScheduled(bench(), 'win'),
+        False)
+
+  def testShouldBenchmarkBeScheduledOnMobileMobileTest(self):
+    @decorators.Enabled('android')
+    class bench(perf_benchmark.PerfBenchmark):
+      pass
+
+    self.assertEqual(
+        perf_data_generator.ShouldBenchmarkBeScheduled(bench(), 'android'),
+        True)
+
+  def testShouldBenchmarkBeScheduledOnMobileMobileTestDisabled(self):
+    @decorators.Disabled('android')
+    class bench(perf_benchmark.PerfBenchmark):
+      pass
+
+    self.assertEqual(
+        perf_data_generator.ShouldBenchmarkBeScheduled(bench(), 'android'),
+        False)
+
+
diff --git a/src/tools/perf/measurements/media.py b/src/tools/perf/measurements/media.py
index a064736..41f56a0 100644
--- a/src/tools/perf/measurements/media.py
+++ b/src/tools/perf/measurements/media.py
@@ -31,8 +31,7 @@
 
   def CustomizeBrowserOptions(self, options):
     # Needed to run media actions in JS on touch-based devices as on Android.
-    options.AppendExtraBrowserArgs(
-        '--disable-gesture-requirement-for-media-playback')
+    options.AppendExtraBrowserArgs('--ignore-autoplay-restrictions')
     power.PowerMetric.CustomizeBrowserOptions(options)
 
   def DidNavigateToPage(self, page, tab):
diff --git a/src/tools/perf/measurements/repaint_unittest.py b/src/tools/perf/measurements/repaint_unittest.py
index ad26cac..83c7f13 100644
--- a/src/tools/perf/measurements/repaint_unittest.py
+++ b/src/tools/perf/measurements/repaint_unittest.py
@@ -34,7 +34,8 @@
     self._options = options_for_unittests.GetCopy()
     self._options.browser_options.wpr_mode = wpr_modes.WPR_OFF
 
-  @decorators.Disabled('chromeos')  # crbug.com/483212
+  # Previously this test was disabled on chromeos, see crbug.com/483212.
+  @decorators.Disabled("all") # crbug.com/715962
   def testRepaint(self):
     ps = self.CreateEmptyPageSet()
     ps.AddStory(TestRepaintPage(ps, ps.base_dir))
diff --git a/src/tools/perf/page_sets/system_health/browsing_stories.py b/src/tools/perf/page_sets/system_health/browsing_stories.py
index d47f2ea..75ba50a 100644
--- a/src/tools/perf/page_sets/system_health/browsing_stories.py
+++ b/src/tools/perf/page_sets/system_health/browsing_stories.py
@@ -559,6 +559,7 @@
   ITEM_SELECTOR = '.dummy-img'
 
 
+@decorators.Disabled('android')  # crbug.com/714650
 class BrowseGloboMobileStory(_ArticleBrowsingStory):
   NAME = 'browse:news:globo'
   URL = 'http://www.globo.com'
diff --git a/src/tools/perf/page_sets/system_health/loading_stories.py b/src/tools/perf/page_sets/system_health/loading_stories.py
index 465ee82..b5c99a1 100644
--- a/src/tools/perf/page_sets/system_health/loading_stories.py
+++ b/src/tools/perf/page_sets/system_health/loading_stories.py
@@ -356,7 +356,6 @@
   TAGS = [story_tags.JAVASCRIPT_HEAVY]
 
 
-@decorators.Disabled('all')  # crbug.com/715936
 class LoadDriveStory(_LoadingStory):
   NAME = 'load:tools:drive'
   URL = 'https://drive.google.com/drive/my-drive'
diff --git a/src/tools/perf/page_sets/system_health/searching_stories.py b/src/tools/perf/page_sets/system_health/searching_stories.py
index 2e2c8f4..bdbc046 100644
--- a/src/tools/perf/page_sets/system_health/searching_stories.py
+++ b/src/tools/perf/page_sets/system_health/searching_stories.py
@@ -70,6 +70,7 @@
     action_runner.ScrollPage(use_touch=True, distance=500)
 
 
+@decorators.Disabled('android-webview')  # Webview does not have new tab page.
 class MobileNewTabPageStory(system_health_story.SystemHealthStory):
   """Story that loads new tab page and performs searches.
 
diff --git a/src/tools/perf/page_sets/tough_video_cases.py b/src/tools/perf/page_sets/tough_video_cases.py
index bc7bb6f..bc1004d 100644
--- a/src/tools/perf/page_sets/tough_video_cases.py
+++ b/src/tools/perf/page_sets/tough_video_cases.py
@@ -386,46 +386,6 @@
     self.SeekBeforeAndAfterPlayhead(action_runner,
                                     action_timeout_in_seconds=120)
 
-class Page37(ToughVideoCasesPage):
-
-  def __init__(self, page_set):
-    super(Page37, self).__init__(
-      url=('file://tough_video_cases/video.html?src=crowd1080_vp9.webm&canvas='
-           'true'),
-      page_set=page_set,
-      tags=['vp9', 'video_only'])
-
-    self.add_browser_metrics = True
-
-  def RunPageInteractions(self, action_runner):
-    self.PlayAction(action_runner)
-
-class Page38(ToughVideoCasesPage):
-
-  def __init__(self, page_set):
-    super(Page38, self).__init__(
-      url='file://tough_video_cases/video.html?src=tulip2.mp4&canvas=true',
-      page_set=page_set,
-      tags=['h264', 'aac', 'audio_video'])
-
-    self.add_browser_metrics = True
-
-  def RunPageInteractions(self, action_runner):
-    self.SeekBeforeAndAfterPlayhead(action_runner)
-
-class Page39(ToughVideoCasesPage):
-
-  def __init__(self, page_set):
-    super(Page39, self).__init__(
-      url=('file://tough_video_cases/video.html?src=garden2_10s.webm&canvas='
-           'true'),
-      page_set=page_set,
-      tags=['is_4k', 'vp8', 'vorbis', 'audio_video'])
-
-    self.add_browser_metrics = True
-
-  def RunPageInteractions(self, action_runner):
-    self.PlayAction(action_runner)
 
 class ToughVideoCasesPageSet(story.StorySet):
   """
@@ -435,8 +395,8 @@
   def __init__(self):
     super(ToughVideoCasesPageSet, self).__init__(
             cloud_storage_bucket=story.PARTNER_BUCKET)
-    # TODO(crouleau): Pages 36 and 38 are in ToughVideoCasesPageSet even though
-    # they both report seek time instead of time_to_play.
+    # TODO(crouleau): Page 36 is in ToughVideoCasesPageSet even though
+    # it both reports seek time instead of time_to_play.
     # This may be a non-issue because we plan to merge these two page sets back
     # together and use tags to allow teams to filter which pages they want.
 
@@ -455,9 +415,6 @@
     self.AddStory(Page32(self))
     self.AddStory(Page34(self))
     self.AddStory(Page36(self))
-    self.AddStory(Page37(self))
-    self.AddStory(Page38(self))
-    self.AddStory(Page39(self))
 
 
 class ToughVideoCasesExtraPageSet(story.StorySet):
diff --git a/src/tools/perf/page_sets/tough_video_cases/video.html b/src/tools/perf/page_sets/tough_video_cases/video.html
index 9bdf2b3..6a2113b 100644
--- a/src/tools/perf/page_sets/tough_video_cases/video.html
+++ b/src/tools/perf/page_sets/tough_video_cases/video.html
@@ -45,11 +45,6 @@
       return mediaSRC;
     }
 
-    function canvas2dAnimation() {
-      canvasContext.drawImage(testElement, 0, 0, canvasElement.width, canvasElement.height);
-      window.requestAnimationFrame(canvas2dAnimation);
-    }
-
     qsParams = getQueryStrings();
     var type = qsParams['type'] || 'video';
     var testElement = document.createElement(type);
@@ -60,14 +55,6 @@
     if (qsParams['id'])
       testElement.id = qsParams['id'];
     testElement.src = getMediaSRC();
-    if (qsParams['canvas'] && type == 'video') {
-      canvasElement = document.createElement('canvas');
-      canvasElement.width = 800;
-      canvasElement.height = 450;
-      document.body.appendChild(canvasElement);
-      canvasContext = canvasElement.getContext('2d');
-      window.requestAnimationFrame(canvas2dAnimation);
-    }
     document.body.appendChild(testElement);
   </script>
 </html>